From 77950e48c76f4a3b29d01831d43039caba29888a Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期二, 18 十一月 2025 14:12:42 +0800
Subject: [PATCH] 修改

---
 /dev/null    |  173 ---------------------------------------------------------
 dev_dify.bat |    3 +
 2 files changed, 3 insertions(+), 173 deletions(-)

diff --git "a/app/\050commonLayout\051/app/\050appDetailLayout\051/\133appId\135/layout-main.tsx" "b/app/\050commonLayout\051/app/\050appDetailLayout\051/\133appId\135/layout-main.tsx"
deleted file mode 100644
index 1434a81..0000000
--- "a/app/\050commonLayout\051/app/\050appDetailLayout\051/\133appId\135/layout-main.tsx"
+++ /dev/null
@@ -1,177 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import { useUnmount } from 'ahooks'
-import React, { useCallback, useEffect, useState } from 'react'
-import { usePathname, useRouter } from 'next/navigation'
-import {
-  RiDashboard2Fill,
-  RiDashboard2Line,
-  RiFileList3Fill,
-  RiFileList3Line,
-  RiTerminalBoxFill,
-  RiTerminalBoxLine,
-  RiTerminalWindowFill,
-  RiTerminalWindowLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { useShallow } from 'zustand/react/shallow'
-import { useContextSelector } from 'use-context-selector'
-import s from './style.module.css'
-import cn from '@/utils/classnames'
-import { useStore } from '@/app/components/app/store'
-import AppSideBar from '@/app/components/app-sidebar'
-import type { NavIcon } from '@/app/components/app-sidebar/navLink'
-import { fetchAppDetail, fetchAppSSO } from '@/service/apps'
-import AppContext, { useAppContext } from '@/context/app-context'
-import Loading from '@/app/components/base/loading'
-import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
-import type { App } from '@/types/app'
-
-export type IAppDetailLayoutProps = {
-  children: React.ReactNode
-  appId: string
-}
-
-const AppDetailLayout: FC<IAppDetailLayoutProps> = (props) => {
-  const {
-    children,
-    appId, // get appId in path
-  } = props
-  const { t } = useTranslation()
-  const router = useRouter()
-  const pathname = usePathname()
-  const media = useBreakpoints()
-  const isMobile = media === MediaType.mobile
-  const { isCurrentWorkspaceEditor, isLoadingCurrentWorkspace } = useAppContext()
-  const { appDetail, setAppDetail, setAppSiderbarExpand } = useStore(useShallow(state => ({
-    appDetail: state.appDetail,
-    setAppDetail: state.setAppDetail,
-    setAppSiderbarExpand: state.setAppSiderbarExpand,
-  })))
-  const [isLoadingAppDetail, setIsLoadingAppDetail] = useState(false)
-  const [appDetailRes, setAppDetailRes] = useState<App | null>(null)
-  const [navigation, setNavigation] = useState<Array<{
-    name: string
-    href: string
-    icon: NavIcon
-    selectedIcon: NavIcon
-  }>>([])
-  const systemFeatures = useContextSelector(AppContext, state => state.systemFeatures)
-
-  const getNavigations = useCallback((appId: string, isCurrentWorkspaceEditor: boolean, mode: string) => {
-    const navs = [
-      ...(isCurrentWorkspaceEditor
-        ? [{
-          name: t('common.appMenus.promptEng'),
-          href: `/app/${appId}/${(mode === 'workflow' || mode === 'advanced-chat') ? 'workflow' : 'configuration'}`,
-          icon: RiTerminalWindowLine,
-          selectedIcon: RiTerminalWindowFill,
-        }]
-        : []
-      ),
-      {
-        name: t('common.appMenus.apiAccess'),
-        href: `/app/${appId}/develop`,
-        icon: RiTerminalBoxLine,
-        selectedIcon: RiTerminalBoxFill,
-      },
-      ...(isCurrentWorkspaceEditor
-        ? [{
-          name: mode !== 'workflow'
-            ? t('common.appMenus.logAndAnn')
-            : t('common.appMenus.logs'),
-          href: `/app/${appId}/logs`,
-          icon: RiFileList3Line,
-          selectedIcon: RiFileList3Fill,
-        }]
-        : []
-      ),
-      {
-        name: t('common.appMenus.overview'),
-        href: `/app/${appId}/overview`,
-        icon: RiDashboard2Line,
-        selectedIcon: RiDashboard2Fill,
-      },
-    ]
-    return navs
-  }, [])
-
-  useEffect(() => {
-    if (appDetail) {
-      document.title = `${(appDetail.name || 'App')} - Dify`
-      const localeMode = localStorage.getItem('app-detail-collapse-or-expand') || 'expand'
-      const mode = isMobile ? 'collapse' : 'expand'
-      setAppSiderbarExpand(isMobile ? mode : localeMode)
-      // TODO: consider screen size and mode
-      // if ((appDetail.mode === 'advanced-chat' || appDetail.mode === 'workflow') && (pathname).endsWith('workflow'))
-      //   setAppSiderbarExpand('collapse')
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [appDetail, isMobile])
-
-  useEffect(() => {
-    setAppDetail()
-    setIsLoadingAppDetail(true)
-    fetchAppDetail({ url: '/apps', id: appId }).then((res) => {
-      setAppDetailRes(res)
-    }).catch((e: any) => {
-      if (e.status === 404)
-        router.replace('/apps')
-    }).finally(() => {
-      setIsLoadingAppDetail(false)
-    })
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [appId, pathname])
-
-  useEffect(() => {
-    if (!appDetailRes || isLoadingCurrentWorkspace || isLoadingAppDetail)
-      return
-    const res = appDetailRes
-    // redirection
-    const canIEditApp = isCurrentWorkspaceEditor
-    if (!canIEditApp && (pathname.endsWith('configuration') || pathname.endsWith('workflow') || pathname.endsWith('logs'))) {
-      router.replace(`/app/${appId}/overview`)
-      return
-    }
-    if ((res.mode === 'workflow' || res.mode === 'advanced-chat') && (pathname).endsWith('configuration')) {
-      router.replace(`/app/${appId}/workflow`)
-    }
-    else if ((res.mode !== 'workflow' && res.mode !== 'advanced-chat') && (pathname).endsWith('workflow')) {
-      router.replace(`/app/${appId}/configuration`)
-    }
-    else {
-      setAppDetail({ ...res, enable_sso: false })
-      setNavigation(getNavigations(appId, isCurrentWorkspaceEditor, res.mode))
-      if (systemFeatures.enable_web_sso_switch_component && canIEditApp) {
-        fetchAppSSO({ appId }).then((ssoRes) => {
-          setAppDetail({ ...res, enable_sso: ssoRes.enabled })
-        })
-      }
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [appDetailRes, isCurrentWorkspaceEditor, isLoadingAppDetail, isLoadingCurrentWorkspace, systemFeatures.enable_web_sso_switch_component])
-
-  useUnmount(() => {
-    setAppDetail()
-  })
-
-  if (!appDetail) {
-    return (
-      <div className='flex h-full items-center justify-center bg-background-body'>
-        <Loading />
-      </div>
-    )
-  }
-
-  return (
-    <div className={cn(s.app, 'relative flex', 'overflow-hidden')}>
-      {appDetail && (
-        <AppSideBar title={appDetail.name} icon={appDetail.icon} icon_background={appDetail.icon_background as string} desc={appDetail.mode} navigation={navigation} />
-      )}
-      <div className="grow overflow-hidden bg-components-panel-bg">
-        {children}
-      </div>
-    </div>
-  )
-}
-export default React.memo(AppDetailLayout)
diff --git "a/app/\050commonLayout\051/datasets/\050datasetDetailLayout\051/\133datasetId\135/layout-main.tsx" "b/app/\050commonLayout\051/datasets/\050datasetDetailLayout\051/\133datasetId\135/layout-main.tsx"
deleted file mode 100644
index 5619b1e..0000000
--- "a/app/\050commonLayout\051/datasets/\050datasetDetailLayout\051/\133datasetId\135/layout-main.tsx"
+++ /dev/null
@@ -1,199 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useEffect, useMemo } from 'react'
-import { usePathname } from 'next/navigation'
-import useSWR from 'swr'
-import { useTranslation } from 'react-i18next'
-import { useBoolean } from 'ahooks'
-import {
-  RiEqualizer2Fill,
-  RiEqualizer2Line,
-  RiFileTextFill,
-  RiFileTextLine,
-  RiFocus2Fill,
-  RiFocus2Line,
-} from '@remixicon/react'
-import {
-  PaperClipIcon,
-} from '@heroicons/react/24/outline'
-import { RiApps2AddLine, RiBookOpenLine, RiInformation2Line } from '@remixicon/react'
-import classNames from '@/utils/classnames'
-import { fetchDatasetDetail, fetchDatasetRelatedApps } from '@/service/datasets'
-import type { RelatedAppResponse } from '@/models/datasets'
-import AppSideBar from '@/app/components/app-sidebar'
-import Loading from '@/app/components/base/loading'
-import DatasetDetailContext from '@/context/dataset-detail'
-import { DataSourceType } from '@/models/datasets'
-import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
-import { LanguagesSupported } from '@/i18n/language'
-import { useStore } from '@/app/components/app/store'
-import { getLocaleOnClient } from '@/i18n'
-import { useAppContext } from '@/context/app-context'
-import Tooltip from '@/app/components/base/tooltip'
-import LinkedAppsPanel from '@/app/components/base/linked-apps-panel'
-
-export type IAppDetailLayoutProps = {
-  children: React.ReactNode
-  params: { datasetId: string }
-}
-
-type IExtraInfoProps = {
-  isMobile: boolean
-  relatedApps?: RelatedAppResponse
-  expand: boolean
-}
-
-const ExtraInfo = ({ isMobile, relatedApps, expand }: IExtraInfoProps) => {
-  const locale = getLocaleOnClient()
-  const [isShowTips, { toggle: toggleTips, set: setShowTips }] = useBoolean(!isMobile)
-  const { t } = useTranslation()
-
-  const hasRelatedApps = relatedApps?.data && relatedApps?.data?.length > 0
-  const relatedAppsTotal = relatedApps?.data?.length || 0
-
-  useEffect(() => {
-    setShowTips(!isMobile)
-  }, [isMobile, setShowTips])
-
-  return <div>
-    {hasRelatedApps && (
-      <>
-        {!isMobile && (
-          <Tooltip
-            position='right'
-            noDecoration
-            needsDelay
-            popupContent={
-              <LinkedAppsPanel
-                relatedApps={relatedApps.data}
-                isMobile={isMobile}
-              />
-            }
-          >
-            <div className='system-xs-medium-uppercase inline-flex cursor-pointer items-center space-x-1 text-text-secondary'>
-              <span>{relatedAppsTotal || '--'} {t('common.datasetMenus.relatedApp')}</span>
-              <RiInformation2Line className='h-4 w-4' />
-            </div>
-          </Tooltip>
-        )}
-
-        {isMobile && <div className={classNames('uppercase text-xs text-text-tertiary font-medium pb-2 pt-4', 'flex items-center justify-center !px-0 gap-1')}>
-          {relatedAppsTotal || '--'}
-          <PaperClipIcon className='h-4 w-4 text-text-secondary' />
-        </div>}
-      </>
-    )}
-    {!hasRelatedApps && !expand && (
-      <Tooltip
-        position='right'
-        noDecoration
-        needsDelay
-        popupContent={
-          <div className='w-[240px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-4'>
-            <div className='inline-flex rounded-lg border-[0.5px] border-components-panel-border-subtle bg-background-default-subtle p-2'>
-              <RiApps2AddLine className='h-4 w-4 text-text-tertiary' />
-            </div>
-            <div className='my-2 text-xs text-text-tertiary'>{t('common.datasetMenus.emptyTip')}</div>
-            <a
-              className='mt-2 inline-flex cursor-pointer items-center text-xs text-text-accent'
-              href={
-                locale === LanguagesSupported[1]
-                  ? 'https://docs.dify.ai/zh-hans/guides/knowledge-base/integrate-knowledge-within-application'
-                  : 'https://docs.dify.ai/guides/knowledge-base/integrate-knowledge-within-application'
-              }
-              target='_blank' rel='noopener noreferrer'
-            >
-              <RiBookOpenLine className='mr-1 text-text-accent' />
-              {t('common.datasetMenus.viewDoc')}
-            </a>
-          </div>
-        }
-      >
-        <div className='system-xs-medium-uppercase inline-flex cursor-pointer items-center space-x-1 text-text-secondary'>
-          <span>{t('common.datasetMenus.noRelatedApp')}</span>
-          <RiInformation2Line className='h-4 w-4' />
-        </div>
-      </Tooltip>
-    )}
-  </div>
-}
-
-const DatasetDetailLayout: FC<IAppDetailLayoutProps> = (props) => {
-  const {
-    children,
-    params: { datasetId },
-  } = props
-  const pathname = usePathname()
-  const hideSideBar = /documents\/create$/.test(pathname)
-  const { t } = useTranslation()
-  const { isCurrentWorkspaceDatasetOperator } = useAppContext()
-
-  const media = useBreakpoints()
-  const isMobile = media === MediaType.mobile
-
-  const { data: datasetRes, error, mutate: mutateDatasetRes } = useSWR({
-    url: 'fetchDatasetDetail',
-    datasetId,
-  }, apiParams => fetchDatasetDetail(apiParams.datasetId))
-
-  const { data: relatedApps } = useSWR({
-    action: 'fetchDatasetRelatedApps',
-    datasetId,
-  }, apiParams => fetchDatasetRelatedApps(apiParams.datasetId))
-
-  const navigation = useMemo(() => {
-    const baseNavigation = [
-      { name: t('common.datasetMenus.hitTesting'), href: `/datasets/${datasetId}/hitTesting`, icon: RiFocus2Line, selectedIcon: RiFocus2Fill },
-      { name: t('common.datasetMenus.settings'), href: `/datasets/${datasetId}/settings`, icon: RiEqualizer2Line, selectedIcon: RiEqualizer2Fill },
-    ]
-
-    if (datasetRes?.provider !== 'external') {
-      baseNavigation.unshift({
-        name: t('common.datasetMenus.documents'),
-        href: `/datasets/${datasetId}/documents`,
-        icon: RiFileTextLine,
-        selectedIcon: RiFileTextFill,
-      })
-    }
-    return baseNavigation
-  }, [datasetRes?.provider, datasetId, t])
-
-  useEffect(() => {
-    if (datasetRes)
-      document.title = `${datasetRes.name || 'Dataset'} - Dify`
-  }, [datasetRes])
-
-  const setAppSiderbarExpand = useStore(state => state.setAppSiderbarExpand)
-
-  useEffect(() => {
-    const localeMode = localStorage.getItem('app-detail-collapse-or-expand') || 'expand'
-    const mode = isMobile ? 'collapse' : 'expand'
-    setAppSiderbarExpand(isMobile ? mode : localeMode)
-  }, [isMobile, setAppSiderbarExpand])
-
-  if (!datasetRes && !error)
-    return <Loading type='app' />
-
-  return (
-    <div className='flex grow overflow-hidden'>
-      {!hideSideBar && <AppSideBar
-        title={datasetRes?.name || '--'}
-        icon={datasetRes?.icon || 'https://static.dify.ai/images/dataset-default-icon.png'}
-        icon_background={datasetRes?.icon_background || '#F5F5F5'}
-        desc={datasetRes?.description || '--'}
-        isExternal={datasetRes?.provider === 'external'}
-        navigation={navigation}
-        extraInfo={!isCurrentWorkspaceDatasetOperator ? mode => <ExtraInfo isMobile={mode === 'collapse'} relatedApps={relatedApps} expand={mode === 'collapse'} /> : undefined}
-        iconType={datasetRes?.data_source_type === DataSourceType.NOTION ? 'notion' : 'dataset'}
-      />}
-      <DatasetDetailContext.Provider value={{
-        indexingTechnique: datasetRes?.indexing_technique,
-        dataset: datasetRes,
-        mutateDatasetRes: () => mutateDatasetRes(),
-      }}>
-        <div className="grow overflow-hidden bg-background-default-subtle">{children}</div>
-      </DatasetDetailContext.Provider>
-    </div>
-  )
-}
-export default React.memo(DatasetDetailLayout)
diff --git "a/app/\050commonLayout\051/datasets/template/template.ja.mdx" "b/app/\050commonLayout\051/datasets/template/template.ja.mdx"
deleted file mode 100644
index defd488..0000000
--- "a/app/\050commonLayout\051/datasets/template/template.ja.mdx"
+++ /dev/null
@@ -1,2005 +0,0 @@
-{/**
-  * @typedef Props
-  * @property {string} apiBaseUrl
-  */}
-
-import { CodeGroup } from '@/app/components/develop/code.tsx'
-import { Row, Col, Properties, Property, Heading, SubProperty, PropertyInstruction, Paragraph } from '@/app/components/develop/md.tsx'
-
-# 銉娿儸銉冦偢 API
-
-<div>
-  ### 瑾嶈
-
-  Dify 銇偟銉笺儞銈� API 銇� `API-Key` 銈掍娇鐢ㄣ仐銇﹁獚瑷笺仐銇俱仚銆�
-
-  闁嬬櫤鑰呫伅銆乣API-Key` 銈掋偗銉┿偆銈€兂銉堝伌銇у叡鏈夈伨銇熴伅淇濆瓨銇欍倠銇仹銇仾銇忋�併儛銉冦偗銈ㄣ兂銉夈伀淇濆瓨銇欍倠銇撱仺銈掓帹濂ㄣ仐銇俱仚銆傘亾銈屻伀銈堛倞銆乣API-Key` 銇紡娲┿伀銈堛倠璨$敚鎼嶅け銈掗槻銇愩亾銇ㄣ亴銇с亶銇俱仚銆�
-
-  銇欍伖銇︺伄 API 銉偗銈ㄣ偣銉堛伀銇�佷互涓嬨伄銈堛亞銇� **`Authorization`** HTTP 銉樸儍銉�銉笺伀 `API-Key` 銈掑惈銈併倠蹇呰銇屻亗銈娿伨銇欙細
-
-  <CodeGroup title="銈炽兗銉�">
-    ```javascript
-      Authorization: Bearer {API_KEY}
-
-    ```
-  </CodeGroup>
-</div>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/document/create-by-text'
-  method='POST'
-  title='銉嗐偔銈广儓銇嬨倝銉夈偔銉ャ儭銉炽儓銈掍綔鎴�'
-  name='#create-by-text'
-/>
-<Row>
-  <Col>
-    銇撱伄 API 銇棦瀛樸伄銉娿儸銉冦偢銇熀銇ャ亜銇︺亰銈娿�併亾銇儕銉儍銈搞倰鍩恒伀銉嗐偔銈广儓銈掍娇鐢ㄣ仐銇︽柊銇椼亜銉夈偔銉ャ儭銉炽儓銈掍綔鎴愩仐銇俱仚銆�
-
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='name' type='string' key='name'>
-        銉夈偔銉ャ儭銉炽儓鍚�
-      </Property>
-      <Property name='text' type='string' key='text'>
-        銉夈偔銉ャ儭銉炽儓鍐呭
-      </Property>
-      <Property name='indexing_technique' type='string' key='indexing_technique'>
-        銈ゃ兂銉囥儍銈偣銉€兗銉�
-          - <code>high_quality</code> 楂樺搧璩�: 鍩嬨倎杈笺伩銉€儑銉倰浣跨敤銇椼仸銉欍偗銉堛儷銉囥兗銈裤儥銉笺偣銈ゃ兂銉囥儍銈偣銈掓绡�
-          - <code>economy</code> 绲屾笀: 銈兗銉兗銉夈儐銉笺儢銉偆銉炽儑銉冦偗銈广伄鍙嶈虎銈ゃ兂銉囥儍銈偣銈掓绡�
-      </Property>
-      <Property name='doc_form' type='string' key='doc_form'>
-        銈ゃ兂銉囥儍銈偣鍖栥仌銈屻仧鍐呭銇舰寮�
-          - <code>text_model</code> 銉嗐偔銈广儓銉夈偔銉ャ儭銉炽儓銇洿鎺ュ煁銈佽炯銇俱倢銇俱仚; `economy` 銉€兗銉夈仹銇亾銇舰寮忋亴銉囥儠銈┿儷銉�
-          - <code>hierarchical_model</code> 瑕瓙銉€兗銉�
-          - <code>qa_model</code> Q&A 銉€兗銉�: 鍒嗗壊銇曘倢銇熴儔銈儱銉°兂銉堛伄璩晱銇ㄥ洖绛斻儦銈€倰鐢熸垚銇椼�佽唱鍟忋倰鍩嬨倎杈笺伩銇俱仚
-      </Property>
-      <Property name='doc_language' type='string' key='doc_language'>
-        Q&A 銉€兗銉夈仹銇�併儔銈儱銉°兂銉堛伄瑷�瑾炪倰鎸囧畾銇椼伨銇欍�備緥: <code>English</code>, <code>Chinese</code>
-      </Property>
-      <Property name='process_rule' type='object' key='process_rule'>
-        鍑︾悊銉兗銉�
-          - <code>mode</code> (string) 銈儶銉笺儖銉炽偘銆併偦銈般儭銉炽儐銉笺偡銉с兂銉€兗銉夈�佽嚜鍕� / 銈偣銈裤儬
-          - <code>rules</code> (object) 銈偣銈裤儬銉兗銉� (鑷嫊銉€兗銉夈仹銇�併亾銇儠銈c兗銉儔銇┖)
-            - <code>pre_processing_rules</code> (array[object]) 鍓嶅嚘鐞嗐儷銉笺儷
-              - <code>id</code> (string) 鍓嶅嚘鐞嗐儷銉笺儷銇竴鎰忚瓨鍒ュ瓙
-                - 鍒楁寵
-                  - <code>remove_extra_spaces</code> 閫g稓銇欍倠銈广儦銉笺偣銆佹敼琛屻�併偪銉栥倰缃彌
-                  - <code>remove_urls_emails</code> URL銆併儭銉笺儷銈€儔銉偣銈掑墛闄�
-              - <code>enabled</code> (bool) 銇撱伄銉兗銉倰閬告姙銇欍倠銇嬨仼銇嗐亱銆傘儔銈儱銉°兂銉� ID 銇屾浮銇曘倢銇亜鍫村悎銆併儑銉曘偐銉儓鍊ゃ倰琛ㄣ仐銇俱仚銆�
-            - <code>segmentation</code> (object) 銈汇偘銉°兂銉嗐兗銈枫儳銉炽儷銉笺儷
-              - <code>separator</code> 銈偣銈裤儬銈汇偘銉°兂銉堣瓨鍒ュ瓙銆傜従鍦ㄣ伅 1 銇ゃ伄鍖哄垏銈婃枃瀛椼伄銇胯ō瀹氬彲鑳姐�傘儑銉曘偐銉儓銇� \n
-              - <code>max_tokens</code> 鏈�澶ч暦 (銉堛兗銈兂) 銉囥儠銈┿儷銉堛伅 1000
-            - <code>parent_mode</code> 瑕儊銉c兂銈伄妞滅储銉€兗銉�: <code>full-doc</code> 鍏ㄦ枃妞滅储 / <code>paragraph</code> 娈佃惤妞滅储
-            - <code>subchunk_segmentation</code> (object) 瀛愩儊銉c兂銈儷銉笺儷
-              - <code>separator</code> 銈汇偘銉°兂銉嗐兗銈枫儳銉宠瓨鍒ュ瓙銆傜従鍦ㄣ伅 1 銇ゃ伄鍖哄垏銈婃枃瀛椼伄銇胯ū鍙�傘儑銉曘偐銉儓銇� <code>***</code>
-              - <code>max_tokens</code> 鏈�澶ч暦 (銉堛兗銈兂) 銇Κ銉併儯銉炽偗銇暦銇曘倛銈婄煭銇勩亾銇ㄣ倰妞滆銇欍倠蹇呰銇屻亗銈娿伨銇�
-              - <code>chunk_overlap</code> 闅f帴銇欍倠銉併儯銉炽偗闁撱伄閲嶈銈掑畾缇� (銈儣銈枫儳銉�)
-      </Property>
-      <PropertyInstruction>銉娿儸銉冦偢銉欍兗銈广伀銉戙儵銉°兗銈裤亴瑷畾銇曘倢銇︺亜銇亜鍫村悎銆佹渶鍒濄伄銈€儍銉椼儹銉笺儔銇伅浠ヤ笅銇儜銉┿儭銉笺偪銈掓彁渚涖仚銈嬪繀瑕併亴銇傘倞銇俱仚銆傛彁渚涖仌銈屻仾銇勫牬鍚堛�併儑銉曘偐銉儓銉戙儵銉°兗銈裤亴浣跨敤銇曘倢銇俱仚銆�</PropertyInstruction>
-      <Property name='retrieval_model' type='object' key='retrieval_model'>
-        妞滅储銉€儑銉�
-          - <code>search_method</code> (string) 妞滅储鏂规硶
-            - <code>hybrid_search</code> 銉忋偆銉栥儶銉冦儔妞滅储
-            - <code>semantic_search</code> 銈汇優銉炽儐銈c儍銈绱�
-            - <code>full_text_search</code> 鍏ㄦ枃妞滅储
-          - <code>reranking_enable</code> (bool) 鍐嶃儵銉炽偔銉炽偘銈掓湁鍔广伀銇欍倠銇嬨仼銇嗐亱
-          - <code>reranking_mode</code> (object) 鍐嶃儵銉炽偔銉炽偘銉€儑銉鎴�
-            - <code>reranking_provider_name</code> (string) 鍐嶃儵銉炽偔銉炽偘銉€儑銉儣銉儛銈ゃ儉銉�
-            - <code>reranking_model_name</code> (string) 鍐嶃儵銉炽偔銉炽偘銉€儑銉悕
-          - <code>top_k</code> (int) 杩斻仌銈屻倠绲愭灉銇暟
-          - <code>score_threshold_enabled</code> (bool) 銈广偝銈㈤柧鍊ゃ倰鏈夊姽銇仚銈嬨亱銇┿亞銇�
-          - <code>score_threshold</code> (float) 銈广偝銈㈤柧鍊�
-      </Property>
-      <Property name='embedding_model' type='string' key='embedding_model'>
-        鍩嬨倎杈笺伩銉€儑銉悕
-      </Property>
-      <Property name='embedding_model_provider' type='string' key='embedding_model_provider'>
-        鍩嬨倎杈笺伩銉€儑銉儣銉儛銈ゃ儉銉�
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/document/create-by-text"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/document/create-by-text' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"name": "text","text": "text","indexing_technique": "high_quality","process_rule": {"mode": "automatic"}}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/document/create-by-text' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json' \
-    --data-raw '{
-        "name": "text",
-        "text": "text",
-        "indexing_technique": "high_quality",
-        "process_rule": {
-            "mode": "automatic"
-        }
-    }'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "document": {
-        "id": "",
-        "position": 1,
-        "data_source_type": "upload_file",
-        "data_source_info": {
-            "upload_file_id": ""
-        },
-        "dataset_process_rule_id": "",
-        "name": "text.txt",
-        "created_from": "api",
-        "created_by": "",
-        "created_at": 1695690280,
-        "tokens": 0,
-        "indexing_status": "waiting",
-        "error": null,
-        "enabled": true,
-        "disabled_at": null,
-        "disabled_by": null,
-        "archived": false,
-        "display_status": "queuing",
-        "word_count": 0,
-        "hit_count": 0,
-        "doc_form": "text_model"
-      },
-      "batch": ""
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/document/create-by-file'
-  method='POST'
-  title='銉曘偂銈ゃ儷銇嬨倝銉夈偔銉ャ儭銉炽儓銈掍綔鎴�'
-  name='#create-by-file'
-/>
-<Row>
-  <Col>
-    銇撱伄 API 銇棦瀛樸伄銉娿儸銉冦偢銇熀銇ャ亜銇︺亰銈娿�併亾銇儕銉儍銈搞倰鍩恒伀銉曘偂銈ゃ儷銈掍娇鐢ㄣ仐銇︽柊銇椼亜銉夈偔銉ャ儭銉炽儓銈掍綔鎴愩仐銇俱仚銆�
-
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='data' type='multipart/form-data json string' key='data'>
-        - <code>original_document_id</code> 鍏冦伄銉夈偔銉ャ儭銉炽儓 ID (銈儣銈枫儳銉�)
-          - 銉夈偔銉ャ儭銉炽儓銈掑啀銈€儍銉椼儹銉笺儔銇俱仧銇偗銉兗銉嬨兂銈般仺銈汇偘銉°兂銉嗐兗銈枫儳銉虫鎴愩倰澶夋洿銇欍倠銇熴倎銇娇鐢ㄣ仌銈屻伨銇欍�傛瑺钀姐仐銇︺亜銈嬫儏鍫便伅鍏冦伄銉夈偔銉ャ儭銉炽儓銇嬨倝銈炽償銉笺仌銈屻伨銇欍��
-          - 鍏冦伄銉夈偔銉ャ儭銉炽儓銇偄銉笺偒銈ゃ儢銇曘倢銇熴儔銈儱銉°兂銉堛仹銇傘仯銇︺伅銇倞銇俱仜銈撱��
-          - original_document_id 銇屾浮銇曘倢銇熷牬鍚堛�佹洿鏂版搷浣溿亴瀹熻銇曘倢銇俱仚銆俻rocess_rule 銇叆鍔涘彲鑳姐仾闋呯洰銇с仚銆傚叆鍔涖仌銈屻仾銇勫牬鍚堛�佸厓銇儔銈儱銉°兂銉堛伄銈汇偘銉°兂銉嗐兗銈枫儳銉虫柟娉曘亴銉囥儠銈┿儷銉堛仹浣跨敤銇曘倢銇俱仚銆�
-          - original_document_id 銇屾浮銇曘倢銇亜鍫村悎銆佹柊銇椼亜鎿嶄綔銇屽疅琛屻仌銈屻�乸rocess_rule 銇屽繀瑕併仹銇欍��
-
-        - <code>indexing_technique</code> 銈ゃ兂銉囥儍銈偣銉€兗銉�
-          - <code>high_quality</code> 楂樺搧璩�: 鍩嬨倎杈笺伩銉€儑銉倰浣跨敤銇椼仸銉欍偗銉堛儷銉囥兗銈裤儥銉笺偣銈ゃ兂銉囥儍銈偣銈掓绡�
-          - <code>economy</code> 绲屾笀: 銈兗銉兗銉夈儐銉笺儢銉偆銉炽儑銉冦偗銈广伄鍙嶈虎銈ゃ兂銉囥儍銈偣銈掓绡�
-
-        - <code>doc_form</code> 銈ゃ兂銉囥儍銈偣鍖栥仌銈屻仧鍐呭銇舰寮�
-          - <code>text_model</code> 銉嗐偔銈广儓銉夈偔銉ャ儭銉炽儓銇洿鎺ュ煁銈佽炯銇俱倢銇俱仚; `economy` 銉€兗銉夈仹銇亾銇舰寮忋亴銉囥儠銈┿儷銉�
-          - <code>hierarchical_model</code> 瑕瓙銉€兗銉�
-          - <code>qa_model</code> Q&A 銉€兗銉�: 鍒嗗壊銇曘倢銇熴儔銈儱銉°兂銉堛伄璩晱銇ㄥ洖绛斻儦銈€倰鐢熸垚銇椼�佽唱鍟忋倰鍩嬨倎杈笺伩銇俱仚
-
-        - <code>doc_language</code> Q&A 銉€兗銉夈仹銇�併儔銈儱銉°兂銉堛伄瑷�瑾炪倰鎸囧畾銇椼伨銇欍�備緥: <code>English</code>, <code>Chinese</code>
-
-        - <code>process_rule</code> 鍑︾悊銉兗銉�
-          - <code>mode</code> (string) 銈儶銉笺儖銉炽偘銆併偦銈般儭銉炽儐銉笺偡銉с兂銉€兗銉夈�佽嚜鍕� / 銈偣銈裤儬
-          - <code>rules</code> (object) 銈偣銈裤儬銉兗銉� (鑷嫊銉€兗銉夈仹銇�併亾銇儠銈c兗銉儔銇┖)
-            - <code>pre_processing_rules</code> (array[object]) 鍓嶅嚘鐞嗐儷銉笺儷
-              - <code>id</code> (string) 鍓嶅嚘鐞嗐儷銉笺儷銇竴鎰忚瓨鍒ュ瓙
-                - 鍒楁寵
-                  - <code>remove_extra_spaces</code> 閫g稓銇欍倠銈广儦銉笺偣銆佹敼琛屻�併偪銉栥倰缃彌
-                  - <code>remove_urls_emails</code> URL銆併儭銉笺儷銈€儔銉偣銈掑墛闄�
-              - <code>enabled</code> (bool) 銇撱伄銉兗銉倰閬告姙銇欍倠銇嬨仼銇嗐亱銆傘儔銈儱銉°兂銉� ID 銇屾浮銇曘倢銇亜鍫村悎銆併儑銉曘偐銉儓鍊ゃ倰琛ㄣ仐銇俱仚銆�
-            - <code>segmentation</code> (object) 銈汇偘銉°兂銉嗐兗銈枫儳銉炽儷銉笺儷
-              - <code>separator</code> 銈偣銈裤儬銈汇偘銉°兂銉堣瓨鍒ュ瓙銆傜従鍦ㄣ伅 1 銇ゃ伄鍖哄垏銈婃枃瀛椼伄銇胯ō瀹氬彲鑳姐�傘儑銉曘偐銉儓銇� \n
-              - <code>max_tokens</code> 鏈�澶ч暦 (銉堛兗銈兂) 銉囥儠銈┿儷銉堛伅 1000
-            - <code>parent_mode</code> 瑕儊銉c兂銈伄妞滅储銉€兗銉�: <code>full-doc</code> 鍏ㄦ枃妞滅储 / <code>paragraph</code> 娈佃惤妞滅储
-            - <code>subchunk_segmentation</code> (object) 瀛愩儊銉c兂銈儷銉笺儷
-              - <code>separator</code> 銈汇偘銉°兂銉嗐兗銈枫儳銉宠瓨鍒ュ瓙銆傜従鍦ㄣ伅 1 銇ゃ伄鍖哄垏銈婃枃瀛椼伄銇胯ū鍙�傘儑銉曘偐銉儓銇� <code>***</code>
-              - <code>max_tokens</code> 鏈�澶ч暦 (銉堛兗銈兂) 銇Κ銉併儯銉炽偗銇暦銇曘倛銈婄煭銇勩亾銇ㄣ倰妞滆銇欍倠蹇呰銇屻亗銈娿伨銇�
-              - <code>chunk_overlap</code> 闅f帴銇欍倠銉併儯銉炽偗闁撱伄閲嶈銈掑畾缇� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='file' type='multipart/form-data' key='file'>
-        銈€儍銉椼儹銉笺儔銇欍倠蹇呰銇屻亗銈嬨儠銈°偆銉��
-      </Property>
-      <PropertyInstruction>銉娿儸銉冦偢銉欍兗銈广伀銉戙儵銉°兗銈裤亴瑷畾銇曘倢銇︺亜銇亜鍫村悎銆佹渶鍒濄伄銈€儍銉椼儹銉笺儔銇伅浠ヤ笅銇儜銉┿儭銉笺偪銈掓彁渚涖仚銈嬪繀瑕併亴銇傘倞銇俱仚銆傛彁渚涖仌銈屻仾銇勫牬鍚堛�併儑銉曘偐銉儓銉戙儵銉°兗銈裤亴浣跨敤銇曘倢銇俱仚銆�</PropertyInstruction>
-      <Property name='retrieval_model' type='object' key='retrieval_model'>
-        妞滅储銉€儑銉�
-          - <code>search_method</code> (string) 妞滅储鏂规硶
-            - <code>hybrid_search</code> 銉忋偆銉栥儶銉冦儔妞滅储
-            - <code>semantic_search</code> 銈汇優銉炽儐銈c儍銈绱�
-            - <code>full_text_search</code> 鍏ㄦ枃妞滅储
-          - <code>reranking_enable</code> (bool) 鍐嶃儵銉炽偔銉炽偘銈掓湁鍔广伀銇欍倠銇嬨仼銇嗐亱
-          - <code>reranking_mode</code> (object) 鍐嶃儵銉炽偔銉炽偘銉€儑銉鎴�
-            - <code>reranking_provider_name</code> (string) 鍐嶃儵銉炽偔銉炽偘銉€儑銉儣銉儛銈ゃ儉銉�
-            - <code>reranking_model_name</code> (string) 鍐嶃儵銉炽偔銉炽偘銉€儑銉悕
-          - <code>top_k</code> (int) 杩斻仌銈屻倠绲愭灉銇暟
-          - <code>score_threshold_enabled</code> (bool) 銈广偝銈㈤柧鍊ゃ倰鏈夊姽銇仚銈嬨亱銇┿亞銇�
-          - <code>score_threshold</code> (float) 銈广偝銈㈤柧鍊�
-      </Property>
-      <Property name='embedding_model' type='string' key='embedding_model'>
-        鍩嬨倎杈笺伩銉€儑銉悕
-      </Property>
-      <Property name='embedding_model_provider' type='string' key='embedding_model_provider'>
-        鍩嬨倎杈笺伩銉€儑銉儣銉儛銈ゃ儉銉�
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/document/create-by-file"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/document/create-by-file' \\\n--header 'Authorization: Bearer {api_key}' \\\n--form 'data="{"indexing_technique":"high_quality","process_rule":{"rules":{"pre_processing_rules":[{"id":"remove_extra_spaces","enabled":true},{"id":"remove_urls_emails","enabled":true}],"segmentation":{"separator":"###","max_tokens":500}},"mode":"custom"}}";type=text/plain' \\\n--form 'file=@"/path/to/file"'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/document/create-by-file' \
-    --header 'Authorization: Bearer {api_key}' \
-    --form 'data="{\"name\":\"Dify\",\"indexing_technique\":\"high_quality\",\"process_rule\":{\"rules\":{\"pre_processing_rules\":[{\"id\":\"remove_extra_spaces\",\"enabled\":true},{\"id\":\"remove_urls_emails\",\"enabled\":true}],\"segmentation\":{\"separator\":\"###\",\"max_tokens\":500}},\"mode\":\"custom\"}}";type=text/plain' \
-    --form 'file=@"/path/to/file"'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "document": {
-        "id": "",
-        "position": 1,
-        "data_source_type": "upload_file",
-        "data_source_info": {
-          "upload_file_id": ""
-        },
-        "dataset_process_rule_id": "",
-        "name": "Dify.txt",
-        "created_from": "api",
-        "created_by": "",
-        "created_at": 1695308667,
-        "tokens": 0,
-        "indexing_status": "waiting",
-        "error": null,
-        "enabled": true,
-        "disabled_at": null,
-        "disabled_by": null,
-        "archived": false,
-        "display_status": "queuing",
-        "word_count": 0,
-        "hit_count": 0,
-        "doc_form": "text_model"
-      },
-      "batch": ""
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets'
-  method='POST'
-  title='绌恒伄銉娿儸銉冦偢銉欍兗銈广倰浣滄垚'
-  name='#create_empty_dataset'
-/>
-<Row>
-  <Col>
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='name' type='string' key='name'>
-        銉娿儸銉冦偢鍚�
-      </Property>
-      <Property name='description' type='string' key='description'>
-        銉娿儸銉冦偢銇鏄� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='indexing_technique' type='string' key='indexing_technique'>
-        銈ゃ兂銉囥儍銈偣鎶�琛� (銈儣銈枫儳銉�)
-          - <code>high_quality</code> 楂樺搧璩�
-          - <code>economy</code> 绲屾笀
-      </Property>
-      <Property name='permission' type='string' key='permission'>
-        妯╅檺
-          - <code>only_me</code> 鑷垎銇伩
-          - <code>all_team_members</code> 銇欍伖銇︺伄銉併兗銉犮儭銉炽儛銉�
-          - <code>partial_members</code> 涓�閮ㄣ伄銉°兂銉愩兗
-      </Property>
-      <Property name='provider' type='string' key='provider'>
-        銉椼儹銉愩偆銉�銉� (銈儣銈枫儳銉炽�併儑銉曘偐銉儓: vendor)
-          - <code>vendor</code> 銉欍兂銉�銉�
-          - <code>external</code> 澶栭儴銉娿儸銉冦偢
-      </Property>
-      <Property name='external_knowledge_api_id' type='str' key='external_knowledge_api_id'>
-        澶栭儴銉娿儸銉冦偢 API ID (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='external_knowledge_id' type='str' key='external_knowledge_id'>
-        澶栭儴銉娿儸銉冦偢 ID (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='embedding_model' type='str' key='embedding_model'>
-        鍩嬨倎杈笺伩銉€儑銉悕锛堜换鎰忥級
-      </Property>
-      <Property name='embedding_model_provider' type='str' key='embedding_model_provider'>
-        鍩嬨倎杈笺伩銉€儑銉伄銉椼儹銉愩偆銉�鍚嶏紙浠绘剰锛�
-      </Property>
-      <Property name='retrieval_model' type='object' key='retrieval_model'>
-        妞滅储銉€儑銉紙浠绘剰锛�
-          - <code>search_method</code> (鏂囧瓧鍒�) 妞滅储鏂规硶
-            - <code>hybrid_search</code> 銉忋偆銉栥儶銉冦儔妞滅储
-            - <code>semantic_search</code> 銈汇優銉炽儐銈c儍銈绱�
-            - <code>full_text_search</code> 鍏ㄦ枃妞滅储
-          - <code>reranking_enable</code> (銉栥兗銉��) 銉儵銉炽偔銉炽偘銈掓湁鍔广伀銇欍倠銇嬨仼銇嗐亱
-          - <code>reranking_model</code> (銈儢銈搞偋銈儓) 銉儵銉炽偗銉€儑銉伄瑷畾
-              - <code>reranking_provider_name</code> (鏂囧瓧鍒�) 銉儵銉炽偗銉€儑銉伄銉椼儹銉愩偆銉�
-              - <code>reranking_model_name</code> (鏂囧瓧鍒�) 銉儵銉炽偗銉€儑銉悕
-          - <code>top_k</code> (鏁存暟) 杩斻仌銈屻倠绲愭灉銇暟
-          - <code>score_threshold_enabled</code> (銉栥兗銉��) 銈广偝銈㈤柧鍊ゃ倰鏈夊姽銇仚銈嬨亱銇┿亞銇�
-          - <code>score_threshold</code> (娴嫊灏忔暟鐐规暟) 銈广偝銈㈤柧鍊�
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"name": "name", "permission": "only_me"}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${apiBaseUrl}/v1/datasets' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json' \
-    --data-raw '{
-      "name": "name",
-      "permission": "only_me"
-    }'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "id": "",
-      "name": "name",
-      "description": null,
-      "provider": "vendor",
-      "permission": "only_me",
-      "data_source_type": null,
-      "indexing_technique": null,
-      "app_count": 0,
-      "document_count": 0,
-      "word_count": 0,
-      "created_by": "",
-      "created_at": 1695636173,
-      "updated_by": "",
-      "updated_at": 1695636173,
-      "embedding_model": null,
-      "embedding_model_provider": null,
-      "embedding_available": null
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets'
-  method='GET'
-  title='銉娿儸銉冦偢銉欍兗銈广儶銈广儓銈掑彇寰�'
-  name='#dataset_list'
-/>
-<Row>
-  <Col>
-    ### 銈偍銉�
-    <Properties>
-      <Property name='keyword' type='string' key='keyword'>
-        妞滅储銈兗銉兗銉夈�併偑銉椼偡銉с兂
-      </Property>
-      <Property name='tag_ids' type='array[string]' key='tag_ids'>
-        銈裤偘ID銉偣銉堛�併偑銉椼偡銉с兂
-      </Property>
-      <Property name='page' type='string' key='page'>
-        銉氥兗銈哥暘鍙枫�併偑銉椼偡銉с兂銆併儑銉曘偐銉儓1
-      </Property>
-      <Property name='limit' type='string' key='limit'>
-        杩斻仌銈屻倠銈€偆銉嗐儬鏁般�併偑銉椼偡銉с兂銆併儑銉曘偐銉儓20銆佺瘎鍥�1-100
-      </Property>
-      <Property name='include_all' type='boolean' key='include_all'>
-        銇欍伖銇︺伄銉囥兗銈裤偦銉冦儓銈掑惈銈併倠銇嬨仼銇嗐亱锛堟墍鏈夎�呫伄銇挎湁鍔癸級銆併偑銉椼偡銉с兂銆併儑銉曘偐銉儓銇痜alse
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="GET"
-      label="/datasets"
-      targetCode={`curl --location --request GET '${props.apiBaseUrl}/datasets?page=1&limit=20' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request GET '${props.apiBaseUrl}/datasets?page=1&limit=20' \
-    --header 'Authorization: Bearer {api_key}'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data": [
-        {
-          "id": "",
-          "name": "name",
-          "description": "desc",
-          "permission": "only_me",
-          "data_source_type": "upload_file",
-          "indexing_technique": "",
-          "app_count": 2,
-          "document_count": 10,
-          "word_count": 1200,
-          "created_by": "",
-          "created_at": "",
-          "updated_by": "",
-          "updated_at": ""
-        },
-        ...
-      ],
-      "has_more": true,
-      "limit": 20,
-      "total": 50,
-      "page": 1
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}'
-  method='DELETE'
-  title='銉娿儸銉冦偢銉欍兗銈广倰鍓婇櫎'
-  name='#delete_dataset'
-/>
-<Row>
-  <Col>
-    ### 銉戙儵銉°兗銈�
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="DELETE"
-      label="/datasets/{dataset_id}"
-      targetCode={`curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}' \
-    --header 'Authorization: Bearer {api_key}'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```text {{ title: '銉偣銉濄兂銈�' }}
-    204 No Content
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/update-by-text'
-  method='POST'
-  title='銉嗐偔銈广儓銇с儔銈儱銉°兂銉堛倰鏇存柊'
-  name='#update-by-text'
-/>
-<Row>
-  <Col>
-    銇撱伄 API 銇棦瀛樸伄銉娿儸銉冦偢銇熀銇ャ亜銇︺亰銈娿�併亾銇儕銉儍銈搞倰鍩恒伀銉嗐偔銈广儓銈掍娇鐢ㄣ仐銇︺儔銈儱銉°兂銉堛倰鏇存柊銇椼伨銇欍��
-
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='name' type='string' key='name'>
-        銉夈偔銉ャ儭銉炽儓鍚� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='text' type='string' key='text'>
-        銉夈偔銉ャ儭銉炽儓鍐呭 (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='process_rule' type='object' key='process_rule'>
-        鍑︾悊銉兗銉�
-          - <code>mode</code> (string) 銈儶銉笺儖銉炽偘銆併偦銈般儭銉炽儐銉笺偡銉с兂銉€兗銉夈�佽嚜鍕� / 銈偣銈裤儬
-          - <code>rules</code> (object) 銈偣銈裤儬銉兗銉� (鑷嫊銉€兗銉夈仹銇�併亾銇儠銈c兗銉儔銇┖)
-            - <code>pre_processing_rules</code> (array[object]) 鍓嶅嚘鐞嗐儷銉笺儷
-              - <code>id</code> (string) 鍓嶅嚘鐞嗐儷銉笺儷銇竴鎰忚瓨鍒ュ瓙
-                - 鍒楁寵
-                  - <code>remove_extra_spaces</code> 閫g稓銇欍倠銈广儦銉笺偣銆佹敼琛屻�併偪銉栥倰缃彌
-                  - <code>remove_urls_emails</code> URL銆併儭銉笺儷銈€儔銉偣銈掑墛闄�
-              - <code>enabled</code> (bool) 銇撱伄銉兗銉倰閬告姙銇欍倠銇嬨仼銇嗐亱銆傘儔銈儱銉°兂銉� ID 銇屾浮銇曘倢銇亜鍫村悎銆併儑銉曘偐銉儓鍊ゃ倰琛ㄣ仐銇俱仚銆�
-            - <code>segmentation</code> (object) 銈汇偘銉°兂銉嗐兗銈枫儳銉炽儷銉笺儷
-              - <code>separator</code> 銈偣銈裤儬銈汇偘銉°兂銉堣瓨鍒ュ瓙銆傜従鍦ㄣ伅 1 銇ゃ伄鍖哄垏銈婃枃瀛椼伄銇胯ō瀹氬彲鑳姐�傘儑銉曘偐銉儓銇� \n
-              - <code>max_tokens</code> 鏈�澶ч暦 (銉堛兗銈兂) 銉囥儠銈┿儷銉堛伅 1000
-            - <code>parent_mode</code> 瑕儊銉c兂銈伄妞滅储銉€兗銉�: <code>full-doc</code> 鍏ㄦ枃妞滅储 / <code>paragraph</code> 娈佃惤妞滅储
-            - <code>subchunk_segmentation</code> (object) 瀛愩儊銉c兂銈儷銉笺儷
-              - <code>separator</code> 銈汇偘銉°兂銉嗐兗銈枫儳銉宠瓨鍒ュ瓙銆傜従鍦ㄣ伅 1 銇ゃ伄鍖哄垏銈婃枃瀛椼伄銇胯ū鍙�傘儑銉曘偐銉儓銇� <code>***</code>
-              - <code>max_tokens</code> 鏈�澶ч暦 (銉堛兗銈兂) 銇Κ銉併儯銉炽偗銇暦銇曘倛銈婄煭銇勩亾銇ㄣ倰妞滆銇欍倠蹇呰銇屻亗銈娿伨銇�
-              - <code>chunk_overlap</code> 闅f帴銇欍倠銉併儯銉炽偗闁撱伄閲嶈銈掑畾缇� (銈儣銈枫儳銉�)
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/documents/{document_id}/update-by-text"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/update-by-text' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"name": "name","text": "text"}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/update-by-text' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json' \
-    --data-raw '{
-        "name": "name",
-        "text": "text"
-    }'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "document": {
-        "id": "",
-        "position": 1,
-        "data_source_type": "upload_file",
-        "data_source_info": {
-          "upload_file_id": ""
-        },
-        "dataset_process_rule_id": "",
-        "name": "name.txt",
-        "created_from": "api",
-        "created_by": "",
-        "created_at": 1695308667,
-        "tokens": 0,
-        "indexing_status": "waiting",
-        "error": null,
-        "enabled": true,
-        "disabled_at": null,
-        "disabled_by": null,
-        "archived": false,
-        "display_status": "queuing",
-        "word_count": 0,
-        "hit_count": 0,
-        "doc_form": "text_model"
-      },
-      "batch": ""
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/update-by-file'
-  method='POST'
-  title='銉曘偂銈ゃ儷銇с儔銈儱銉°兂銉堛倰鏇存柊'
-  name='#update-by-file'
-/>
-<Row>
-  <Col>
-    銇撱伄 API 銇棦瀛樸伄銉娿儸銉冦偢銇熀銇ャ亜銇︺亰銈娿�併亾銇儕銉儍銈搞倰鍩恒伀銉曘偂銈ゃ儷銈掍娇鐢ㄣ仐銇︺儔銈儱銉°兂銉堛倰鏇存柊銇椼伨銇欍��
-
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='name' type='string' key='name'>
-        銉夈偔銉ャ儭銉炽儓鍚� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='file' type='multipart/form-data' key='file'>
-        銈€儍銉椼儹銉笺儔銇欍倠銉曘偂銈ゃ儷
-      </Property>
-      <Property name='process_rule' type='object' key='process_rule'>
-        鍑︾悊銉兗銉�
-          - <code>mode</code> (string) 銈儶銉笺儖銉炽偘銆併偦銈般儭銉炽儐銉笺偡銉с兂銉€兗銉夈�佽嚜鍕� / 銈偣銈裤儬
-          - <code>rules</code> (object) 銈偣銈裤儬銉兗銉� (鑷嫊銉€兗銉夈仹銇�併亾銇儠銈c兗銉儔銇┖)
-            - <code>pre_processing_rules</code> (array[object]) 鍓嶅嚘鐞嗐儷銉笺儷
-              - <code>id</code> (string) 鍓嶅嚘鐞嗐儷銉笺儷銇竴鎰忚瓨鍒ュ瓙
-                - 鍒楁寵
-                  - <code>remove_extra_spaces</code> 閫g稓銇欍倠銈广儦銉笺偣銆佹敼琛屻�併偪銉栥倰缃彌
-                  - <code>remove_urls_emails</code> URL銆併儭銉笺儷銈€儔銉偣銈掑墛闄�
-              - <code>enabled</code> (bool) 銇撱伄銉兗銉倰閬告姙銇欍倠銇嬨仼銇嗐亱銆傘儔銈儱銉°兂銉� ID 銇屾浮銇曘倢銇亜鍫村悎銆併儑銉曘偐銉儓鍊ゃ倰琛ㄣ仐銇俱仚銆�
-            - <code>segmentation</code> (object) 銈汇偘銉°兂銉嗐兗銈枫儳銉炽儷銉笺儷
-              - <code>separator</code> 銈偣銈裤儬銈汇偘銉°兂銉堣瓨鍒ュ瓙銆傜従鍦ㄣ伅 1 銇ゃ伄鍖哄垏銈婃枃瀛椼伄銇胯ō瀹氬彲鑳姐�傘儑銉曘偐銉儓銇� \n
-              - <code>max_tokens</code> 鏈�澶ч暦 (銉堛兗銈兂) 銉囥儠銈┿儷銉堛伅 1000
-            - <code>parent_mode</code> 瑕儊銉c兂銈伄妞滅储銉€兗銉�: <code>full-doc</code> 鍏ㄦ枃妞滅储 / <code>paragraph</code> 娈佃惤妞滅储
-            - <code>subchunk_segmentation</code> (object) 瀛愩儊銉c兂銈儷銉笺儷
-              - <code>separator</code> 銈汇偘銉°兂銉嗐兗銈枫儳銉宠瓨鍒ュ瓙銆傜従鍦ㄣ伅 1 銇ゃ伄鍖哄垏銈婃枃瀛椼伄銇胯ū鍙�傘儑銉曘偐銉儓銇� <code>***</code>
-              - <code>max_tokens</code> 鏈�澶ч暦 (銉堛兗銈兂) 銇Κ銉併儯銉炽偗銇暦銇曘倛銈婄煭銇勩亾銇ㄣ倰妞滆銇欍倠蹇呰銇屻亗銈娿伨銇�
-              - <code>chunk_overlap</code> 闅f帴銇欍倠銉併儯銉炽偗闁撱伄閲嶈銈掑畾缇� (銈儣銈枫儳銉�)
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/documents/{document_id}/update-by-file"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/update-by-file' \\\n--header 'Authorization: Bearer {api_key}' \\\n--form 'data="{"name":"Dify","indexing_technique":"high_quality","process_rule":{"rules":{"pre_processing_rules":[{"id":"remove_extra_spaces","enabled":true},{"id":"remove_urls_emails","enabled":true}],"segmentation":{"separator":"###","max_tokens":500}},"mode":"custom"}}";type=text/plain' \\\n--form 'file=@"/path/to/file"'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/update-by-file' \
-    --header 'Authorization: Bearer {api_key}' \
-    --form 'data="{\"name\":\"Dify\",\"indexing_technique\":\"high_quality\",\"process_rule\":{\"rules\":{\"pre_processing_rules\":[{\"id\":\"remove_extra_spaces\",\"enabled\":true},{\"id\":\"remove_urls_emails\",\"enabled\":true}],\"segmentation\":{\"separator\":\"###\",\"max_tokens\":500}},\"mode\":\"custom\"}}";type=text/plain' \
-    --form 'file=@"/path/to/file"'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "document": {
-        "id": "",
-        "position": 1,
-        "data_source_type": "upload_file",
-        "data_source_info": {
-          "upload_file_id": ""
-        },
-        "dataset_process_rule_id": "",
-        "name": "Dify.txt",
-        "created_from": "api",
-        "created_by": "",
-        "created_at": 1695308667,
-        "tokens": 0,
-        "indexing_status": "waiting",
-        "error": null,
-        "enabled": true,
-        "disabled_at": null,
-        "disabled_by": null,
-        "archived": false,
-        "display_status": "queuing",
-        "word_count": 0,
-        "hit_count": 0,
-        "doc_form": "text_model"
-      },
-      "batch": "20230921150427533684"
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{batch}/indexing-status'
-  method='GET'
-  title='銉夈偔銉ャ儭銉炽儓銇煁銈佽炯銇裤偣銉嗐兗銈裤偣 (閫茶鐘舵硜) 銈掑彇寰�'
-  name='#indexing_status'
-/>
-<Row>
-  <Col>
-    ### 銉戙儵銉°兗銈�
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='batch' type='string' key='batch'>
-        銈€儍銉椼儹銉笺儔銇曘倢銇熴儔銈儱銉°兂銉堛伄銉愩儍銉佺暘鍙�
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="GET"
-      label="/datasets/{dataset_id}/documents/{batch}/indexing-status"
-      targetCode={`curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{batch}/indexing-status' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{batch}/indexing-status' \
-    --header 'Authorization: Bearer {api_key}' \
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data":[{
-        "id": "",
-        "indexing_status": "indexing",
-        "processing_started_at": 1681623462.0,
-        "parsing_completed_at": 1681623462.0,
-        "cleaning_completed_at": 1681623462.0,
-        "splitting_completed_at": 1681623462.0,
-        "completed_at": null,
-        "paused_at": null,
-        "error": null,
-        "stopped_at": null,
-        "completed_segments": 24,
-        "total_segments": 100
-      }]
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}'
-  method='DELETE'
-  title='銉夈偔銉ャ儭銉炽儓銈掑墛闄�'
-  name='#delete_document'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="DELETE"
-      label="/datasets/{dataset_id}/documents/{document_id}"
-      targetCode={`curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}' \
-    --header 'Authorization: Bearer {api_key}' \
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```text {{ title: '銉偣銉濄兂銈�' }}
-    204 No Content
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents'
-  method='GET'
-  title='銉娿儸銉冦偢銉欍兗銈广伄銉夈偔銉ャ儭銉炽儓銉偣銉堛倰鍙栧緱'
-  name='#dataset_document_list'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-    </Properties>
-
-    ### 銈偍銉�
-    <Properties>
-      <Property name='keyword' type='string' key='keyword'>
-        妞滅储銈兗銉兗銉夈�佺従鍦ㄣ伅銉夈偔銉ャ儭銉炽儓鍚嶃伄銇挎绱� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='page' type='string' key='page'>
-        銉氥兗銈哥暘鍙� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='limit' type='string' key='limit'>
-        杩斻仌銈屻倠銈€偆銉嗐儬鏁般�併儑銉曘偐銉儓銇� 20銆佺瘎鍥层伅 1-100 (銈儣銈枫儳銉�)
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="GET"
-      label="/datasets/{dataset_id}/documents"
-      targetCode={`curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents' \
-    --header 'Authorization: Bearer {api_key}' \
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data": [
-        {
-          "id": "",
-          "position": 1,
-          "data_source_type": "file_upload",
-          "data_source_info": null,
-          "dataset_process_rule_id": null,
-          "name": "dify",
-          "created_from": "",
-          "created_by": "",
-          "created_at": 1681623639,
-          "tokens": 0,
-          "indexing_status": "waiting",
-          "error": null,
-          "enabled": true,
-          "disabled_at": null,
-          "disabled_by": null,
-          "archived": false
-        },
-      ],
-      "has_more": false,
-      "limit": 20,
-      "total": 9,
-      "page": 1
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/segments'
-  method='POST'
-  title='銉夈偔銉ャ儭銉炽儓銇儊銉c兂銈倰杩藉姞'
-  name='#create_new_segment'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='segments' type='object list' key='segments'>
-        - <code>content</code> (text) 銉嗐偔銈广儓鍐呭 / 璩晱鍐呭銆佸繀闋�
-        - <code>answer</code> (text) 鍥炵瓟鍐呭銆併儕銉儍銈搞伄銉€兗銉夈亴 Q&A 銉€兗銉夈伄鍫村悎銇�ゃ倰娓°仐銇俱仚 (銈儣銈枫儳銉�)
-        - <code>keywords</code> (list) 銈兗銉兗銉� (銈儣銈枫儳銉�)
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/documents/{document_id}/segments"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"segments": [{"content": "1","answer": "1","keywords": ["a"]}]}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json' \
-    --data-raw '{
-      "segments": [
-        {
-          "content": "1",
-          "answer": "1",
-          "keywords": ["a"]
-        }
-      ]
-    }'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data": [{
-        "id": "",
-        "position": 1,
-        "document_id": "",
-        "content": "1",
-        "answer": "1",
-        "word_count": 25,
-        "tokens": 0,
-        "keywords": [
-          "a"
-        ],
-        "index_node_id": "",
-        "index_node_hash": "",
-        "hit_count": 0,
-        "enabled": true,
-        "disabled_at": null,
-        "disabled_by": null,
-        "status": "completed",
-        "created_by": "",
-        "created_at": 1695312007,
-        "indexing_at": 1695312007,
-        "completed_at": 1695312007,
-        "error": null,
-        "stopped_at": null
-      }],
-      "doc_form": "text_model"
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/segments'
-  method='GET'
-  title='銉夈偔銉ャ儭銉炽儓銇嬨倝銉併儯銉炽偗銈掑彇寰�'
-  name='#get_segment'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-    </Properties>
-
-     ### 銈偍銉�
-    <Properties>
-      <Property name='keyword' type='string' key='keyword'>
-        銈兗銉兗銉� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='status' type='string' key='status'>
-        妞滅储銈广儐銉笺偪銈广�乧ompleted
-      </Property>
-      <Property name='page' type='string' key='page'>
-        銉氥兗銈哥暘鍙� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='limit' type='string' key='limit'>
-        杩斻仌銈屻倠銈€偆銉嗐儬鏁般�併儑銉曘偐銉儓銇� 20銆佺瘎鍥层伅 1-100 (銈儣銈枫儳銉�)
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="GET"
-      label="/datasets/{dataset_id}/documents/{document_id}/segments"
-      targetCode={`curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data": [{
-        "id": "",
-        "position": 1,
-        "document_id": "",
-        "content": "1",
-        "answer": "1",
-        "word_count": 25,
-        "tokens": 0,
-        "keywords": [
-            "a"
-        ],
-        "index_node_id": "",
-        "index_node_hash": "",
-        "hit_count": 0,
-        "enabled": true,
-        "disabled_at": null,
-        "disabled_by": null,
-        "status": "completed",
-        "created_by": "",
-        "created_at": 1695312007,
-        "indexing_at": 1695312007,
-        "completed_at": 1695312007,
-        "error": null,
-        "stopped_at": null
-      }],
-      "doc_form": "text_model",
-      "has_more": false,
-      "limit": 20,
-      "total": 9,
-      "page": 1
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}'
-  method='DELETE'
-  title='銉夈偔銉ャ儭銉炽儓鍐呫伄銉併儯銉炽偗銈掑墛闄�'
-  name='#delete_segment'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-      <Property name='segment_id' type='string' key='segment_id'>
-        銉夈偔銉ャ儭銉炽儓銈汇偘銉°兂銉� ID
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="DELETE"
-      label="/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}"
-      targetCode={`curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```text {{ title: '銉偣銉濄兂銈�' }}
-    204 No Content
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}'
-  method='POST'
-  title='銉夈偔銉ャ儭銉炽儓鍐呫伄銉併儯銉炽偗銈掓洿鏂�'
-  name='#update_segment'
-/>
-<Row>
-  <Col>
-    ### POST
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-      <Property name='segment_id' type='string' key='segment_id'>
-        銉夈偔銉ャ儭銉炽儓銈汇偘銉°兂銉� ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='segment' type='object' key='segment'>
-        - <code>content</code> (text) 銉嗐偔銈广儓鍐呭 / 璩晱鍐呭銆佸繀闋�
-        - <code>answer</code> (text) 鍥炵瓟鍐呭銆併儕銉儍銈搞亴 Q&A 銉€兗銉夈伄鍫村悎銇�ゃ倰娓°仐銇俱仚 (銈儣銈枫儳銉�)
-        - <code>keywords</code> (list) 銈兗銉兗銉� (銈儣銈枫儳銉�)
-        - <code>enabled</code> (bool) False / true (銈儣銈枫儳銉�)
-        - <code>regenerate_child_chunks</code> (bool) 瀛愩儊銉c兂銈倰鍐嶇敓鎴愩仚銈嬨亱銇┿亞銇� (銈儣銈枫儳銉�)
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json'\\\n--data-raw '{\"segment\": {\"content\": \"1\",\"answer\": \"1\", \"keywords\": [\"a\"], \"enabled\": false}}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}' \
-    --header 'Content-Type: application/json' \
-    --data-raw '{
-      "segment": {
-          "content": "1",
-          "answer": "1",
-          "keywords": ["a"],
-          "enabled": false
-      }
-    }'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data": {
-        "id": "",
-        "position": 1,
-        "document_id": "",
-        "content": "1",
-        "answer": "1",
-        "word_count": 25,
-        "tokens": 0,
-        "keywords": [
-            "a"
-        ],
-        "index_node_id": "",
-        "index_node_hash": "",
-        "hit_count": 0,
-        "enabled": true,
-        "disabled_at": null,
-        "disabled_by": null,
-        "status": "completed",
-        "created_by": "",
-        "created_at": 1695312007,
-        "indexing_at": 1695312007,
-        "completed_at": 1695312007,
-        "error": null,
-        "stopped_at": null
-      },
-      "doc_form": "text_model"
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks'
-  method='POST'
-  title='瀛愩儊銉c兂銈倰浣滄垚'
-  name='#create_child_chunk'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-      <Property name='segment_id' type='string' key='segment_id'>
-        銈汇偘銉°兂銉� ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='content' type='string' key='content'>
-        瀛愩儊銉c兂銈伄鍐呭
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"content": "Child chunk content"}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json' \
-    --data-raw '{
-        "content": "Child chunk content"
-    }'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data": {
-        "id": "",
-        "segment_id": "",
-        "content": "Child chunk content",
-        "word_count": 25,
-        "tokens": 0,
-        "index_node_id": "",
-        "index_node_hash": "",
-        "status": "completed",
-        "created_by": "",
-        "created_at": 1695312007,
-        "indexing_at": 1695312007,
-        "completed_at": 1695312007,
-        "error": null,
-        "stopped_at": null
-      }
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks'
-  method='GET'
-  title='瀛愩儊銉c兂銈倰鍙栧緱'
-  name='#get_child_chunks'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-      <Property name='segment_id' type='string' key='segment_id'>
-        銈汇偘銉°兂銉� ID
-      </Property>
-    </Properties>
-
-    ### 銈偍銉�
-    <Properties>
-      <Property name='keyword' type='string' key='keyword'>
-        妞滅储銈兗銉兗銉� (銈儣銈枫儳銉�)
-      </Property>
-      <Property name='page' type='integer' key='page'>
-        銉氥兗銈哥暘鍙� (銈儣銈枫儳銉炽�併儑銉曘偐銉儓: 1)
-      </Property>
-      <Property name='limit' type='integer' key='limit'>
-        銉氥兗銈搞亗銇熴倞銇偄銈ゃ儐銉犳暟 (銈儣銈枫儳銉炽�併儑銉曘偐銉儓: 20銆佹渶澶�: 100)
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="GET"
-      label="/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks"
-      targetCode={`curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks?page=1&limit=20' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks?page=1&limit=20' \
-    --header 'Authorization: Bearer {api_key}'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data": [{
-        "id": "",
-        "segment_id": "",
-        "content": "Child chunk content",
-        "word_count": 25,
-        "tokens": 0,
-        "index_node_id": "",
-        "index_node_hash": "",
-        "status": "completed",
-        "created_by": "",
-        "created_at": 1695312007,
-        "indexing_at": 1695312007,
-        "completed_at": 1695312007,
-        "error": null,
-        "stopped_at": null
-      }],
-      "total": 1,
-      "total_pages": 1,
-      "page": 1,
-      "limit": 20
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks/{child_chunk_id}'
-  method='DELETE'
-  title='瀛愩儊銉c兂銈倰鍓婇櫎'
-  name='#delete_child_chunk'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-      <Property name='segment_id' type='string' key='segment_id'>
-        銈汇偘銉°兂銉� ID
-      </Property>
-      <Property name='child_chunk_id' type='string' key='child_chunk_id'>
-        瀛愩儊銉c兂銈� ID
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="DELETE"
-      label="/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks/{child_chunk_id}"
-      targetCode={`curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}/segments/{segment_id}/child_chunks/{child_chunk_id}' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}/segments/{segment_id}/child_chunks/{child_chunk_id}' \
-    --header 'Authorization: Bearer {api_key}'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```text {{ title: '銉偣銉濄兂銈�' }}
-    204 No Content
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks/{child_chunk_id}'
-  method='PATCH'
-  title='瀛愩儊銉c兂銈倰鏇存柊'
-  name='#update_child_chunk'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-      <Property name='segment_id' type='string' key='segment_id'>
-        銈汇偘銉°兂銉� ID
-      </Property>
-      <Property name='child_chunk_id' type='string' key='child_chunk_id'>
-        瀛愩儊銉c兂銈� ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='content' type='string' key='content'>
-        瀛愩儊銉c兂銈伄鍐呭
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="PATCH"
-      label="/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks/{child_chunk_id}"
-      targetCode={`curl --location --request PATCH '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks/{child_chunk_id}' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{"content": "Updated child chunk content"}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request PATCH '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}/child_chunks/{child_chunk_id}' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json' \
-    --data-raw '{
-        "content": "Updated child chunk content"
-    }'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "data": {
-        "id": "",
-        "segment_id": "",
-        "content": "Updated child chunk content",
-        "word_count": 25,
-        "tokens": 0,
-        "index_node_id": "",
-        "index_node_hash": "",
-        "status": "completed",
-        "created_by": "",
-        "created_at": 1695312007,
-        "indexing_at": 1695312007,
-        "completed_at": 1695312007,
-        "error": null,
-        "stopped_at": null
-      }
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/{document_id}/upload-file'
-  method='GET'
-  title='銈€儍銉椼儹銉笺儔銉曘偂銈ゃ儷銈掑彇寰�'
-  name='#get_upload_file'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='document_id' type='string' key='document_id'>
-        銉夈偔銉ャ儭銉炽儓 ID
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="GET"
-      label="/datasets/{dataset_id}/documents/{document_id}/upload-file"
-      targetCode={`curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/upload-file' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/documents/{document_id}/upload-file' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "id": "file_id",
-      "name": "file_name",
-      "size": 1024,
-      "extension": "txt",
-      "url": "preview_url",
-      "download_url": "download_url",
-      "mime_type": "text/plain",
-      "created_by": "user_id",
-      "created_at": 1728734540,
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/retrieve'
-  method='POST'
-  title='銉娿儸銉冦偢銉欍兗銈广亱銈夈儊銉c兂銈倰鍙栧緱'
-  name='#dataset_retrieval'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='query' type='string' key='query'>
-        銈偍銉偔銉笺儻銉笺儔
-      </Property>
-      <Property name='retrieval_model' type='object' key='retrieval_model'>
-        妞滅储銉€儑銉� (銈儣銈枫儳銉炽�佸叆鍔涖仌銈屻仾銇勫牬鍚堛伅銉囥儠銈┿儷銉堛伄鏂规硶銇с儶銈炽兗銉仌銈屻伨銇�)
-        - <code>search_method</code> (text) 妞滅储鏂规硶: 浠ヤ笅銇� 4 銇ゃ伄銈兗銉兗銉夈伄銇勩仛銈屻亱銇屽繀瑕併仹銇�
-          - <code>keyword_search</code> 銈兗銉兗銉夋绱�
-          - <code>semantic_search</code> 銈汇優銉炽儐銈c儍銈绱�
-          - <code>full_text_search</code> 鍏ㄦ枃妞滅储
-          - <code>hybrid_search</code> 銉忋偆銉栥儶銉冦儔妞滅储
-        - <code>reranking_enable</code> (bool) 鍐嶃儵銉炽偔銉炽偘銈掓湁鍔广伀銇欍倠銇嬨仼銇嗐亱銆佹绱€儮銉笺儔銇� semantic_search 銇俱仧銇� hybrid_search 銇牬鍚堛伀蹇呴爤 (銈儣銈枫儳銉�)
-        - <code>reranking_mode</code> (object) 鍐嶃儵銉炽偔銉炽偘銉€儑銉鎴愩�佸啀銉┿兂銈兂銈般亴鏈夊姽銇牬鍚堛伀蹇呴爤
-            - <code>reranking_provider_name</code> (string) 鍐嶃儵銉炽偔銉炽偘銉€儑銉儣銉儛銈ゃ儉銉�
-            - <code>reranking_model_name</code> (string) 鍐嶃儵銉炽偔銉炽偘銉€儑銉悕
-        - <code>weights</code> (float) 銉忋偆銉栥儶銉冦儔妞滅储銉€兗銉夈仹銇偦銉炪兂銉嗐偅銉冦偗妞滅储銇噸銇胯ō瀹�
-        - <code>top_k</code> (integer) 杩斻仌銈屻倠绲愭灉銇暟 (銈儣銈枫儳銉�)
-        - <code>score_threshold_enabled</code> (bool) 銈广偝銈㈤柧鍊ゃ倰鏈夊姽銇仚銈嬨亱銇┿亞銇�
-        - <code>score_threshold</code> (float) 銈广偝銈㈤柧鍊�
-      </Property>
-      <Property name='external_retrieval_model' type='object' key='external_retrieval_model'>
-          鏈娇鐢ㄣ儠銈c兗銉儔
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/retrieve"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/retrieve' \\\n--header 'Authorization: Bearer {api_key}'\\\n--header 'Content-Type: application/json'\\\n--data-raw '{
-    "query": "test",
-    "retrieval_model": {
-        "search_method": "keyword_search",
-        "reranking_enable": false,
-        "reranking_mode": null,
-        "reranking_model": {
-            "reranking_provider_name": "",
-            "reranking_model_name": ""
-        },
-        "weights": null,
-        "top_k": 1,
-        "score_threshold_enabled": false,
-        "score_threshold": null
-    }
-}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/retrieve' \
-    --header 'Authorization: Bearer {api_key}' \
-    --header 'Content-Type: application/json' \
-    --data-raw '{
-        "query": "test",
-        "retrieval_model": {
-            "search_method": "keyword_search",
-            "reranking_enable": false,
-            "reranking_mode": null,
-            "reranking_model": {
-                "reranking_provider_name": "",
-                "reranking_model_name": ""
-            },
-            "weights": null,
-            "top_k": 2,
-            "score_threshold_enabled": false,
-            "score_threshold": null
-        }
-    }'
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "query": {
-        "content": "test"
-      },
-      "records": [
-        {
-          "segment": {
-            "id": "7fa6f24f-8679-48b3-bc9d-bdf28d73f218",
-            "position": 1,
-            "document_id": "a8c6c36f-9f5d-4d7a-8472-f5d7b75d71d2",
-            "content": "Operation guide",
-            "answer": null,
-            "word_count": 847,
-            "tokens": 280,
-            "keywords": [
-              "install",
-              "java",
-              "base",
-              "scripts",
-              "jdk",
-              "manual",
-              "internal",
-              "opens",
-              "add",
-              "vmoptions"
-            ],
-            "index_node_id": "39dd8443-d960-45a8-bb46-7275ad7fbc8e",
-            "index_node_hash": "0189157697b3c6a418ccf8264a09699f25858975578f3467c76d6bfc94df1d73",
-            "hit_count": 0,
-            "enabled": true,
-            "disabled_at": null,
-            "disabled_by": null,
-            "status": "completed",
-            "created_by": "dbcb1ab5-90c8-41a7-8b78-73b235eb6f6f",
-            "created_at": 1728734540,
-            "indexing_at": 1728734552,
-            "completed_at": 1728734584,
-            "error": null,
-            "stopped_at": null,
-            "document": {
-              "id": "a8c6c36f-9f5d-4d7a-8472-f5d7b75d71d2",
-              "data_source_type": "upload_file",
-              "name": "readme.txt",
-            }
-          },
-          "score": 3.730463140527718e-05,
-          "tsne_position": null
-        }
-      ]
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/metadata'
-  method='POST'
-  title='銉娿儸銉冦偢銉°偪銉囥兗銈裤倰浣滄垚'
-  name='#create_metadata'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='segment' type='object' key='segment'>
-        - <code>type</code> (string) 銉°偪銉囥兗銈裤伄绋銆佸繀闋�
-        - <code>name</code> (string) 銉°偪銉囥兗銈裤伄鍚嶅墠銆佸繀闋�
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/metadata"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/metadata' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json'\\\n--data-raw '{"type": "string", "name": "test"}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "id": "abc",
-      "type": "string",
-      "name": "test",
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/metadata/{metadata_id}'
-  method='PATCH'
-  title='銉娿儸銉冦偢銉°偪銉囥兗銈裤倰鏇存柊'
-  name='#update_metadata'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='metadata_id' type='string' key='metadata_id'>
-        銉°偪銉囥兗銈� ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='segment' type='object' key='segment'>
-        - <code>name</code> (string) 銉°偪銉囥兗銈裤伄鍚嶅墠銆佸繀闋�
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="PATCH"
-      label="/datasets/{dataset_id}/metadata/{metadata_id}"
-      targetCode={`curl --location --request PATCH '${props.apiBaseUrl}/datasets/{dataset_id}/metadata/{metadata_id}' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json'\\\n--data-raw '{"name": "test"}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "id": "abc",
-      "type": "string",
-      "name": "test",
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/metadata/{metadata_id}'
-  method='DELETE'
-  title='銉娿儸銉冦偢銉°偪銉囥兗銈裤倰鍓婇櫎'
-  name='#delete_metadata'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='metadata_id' type='string' key='metadata_id'>
-        銉°偪銉囥兗銈� ID
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="DELETE"
-      label="/datasets/{dataset_id}/metadata/{metadata_id}"
-      targetCode={`curl --location --request DELETE '${props.apiBaseUrl}/datasets/{dataset_id}/metadata/{metadata_id}' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/metadata/built-in/{action}'
-  method='POST'
-  title='绲勩伩杈笺伩銉°偪銉囥兗銈裤倰鐒″姽鍖栥伨銇熴伅鏈夊姽鍖�'
-  name='#toggle_metadata'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-      <Property name='action' type='string' key='action'>
-        disable/enable
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/metadata/built-in/{action}"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/metadata/built-in/{action}' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/documents/metadata'
-  method='POST'
-  title='銉夈偔銉ャ儭銉炽儓銉°偪銉囥兗銈裤倰鏇存柊'
-  name='#update_documents_metadata'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-    </Properties>
-
-    ### 銉偗銈ㄣ偣銉堛儨銉囥偅
-    <Properties>
-      <Property name='operation_data' type='object list' key='segments'>
-        - <code>document_id</code> (string) 銉夈偔銉ャ儭銉炽儓 ID
-        - <code>metadata_list</code> (list) 銉°偪銉囥兗銈裤儶銈广儓
-          - <code>id</code> (string) 銉°偪銉囥兗銈� ID
-          - <code>value</code> (string) 銉°偪銉囥兗銈裤伄鍊�
-          - <code>name</code> (string) 銉°偪銉囥兗銈裤伄鍚嶅墠
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="POST"
-      label="/datasets/{dataset_id}/documents/metadata"
-      targetCode={`curl --location --request POST '${props.apiBaseUrl}/datasets/{dataset_id}/documents/metadata' \\\n--header 'Authorization: Bearer {api_key}' \\\n--header 'Content-Type: application/json'\\\n--data-raw '{"operation_data": [{"document_id": "document_id", "metadata_list": [{"id": "id", "value": "value", "name": "name"}]}]}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Heading
-  url='/datasets/{dataset_id}/metadata'
-  method='GET'
-  title='銉娿儸銉冦偢銉°偪銉囥兗銈裤儶銈广儓銈掑彇寰�'
-  name='#dataset_metadata_list'
-/>
-<Row>
-  <Col>
-    ### 銉戙偣
-    <Properties>
-      <Property name='dataset_id' type='string' key='dataset_id'>
-        銉娿儸銉冦偢 ID
-      </Property>
-    </Properties>
-  </Col>
-  <Col sticky>
-    <CodeGroup
-      title="銉偗銈ㄣ偣銉�"
-      tag="GET"
-      label="/datasets/{dataset_id}/metadata"
-      targetCode={`curl --location --request GET '${props.apiBaseUrl}/datasets/{dataset_id}/metadata' \\\n--header 'Authorization: Bearer {api_key}'`}
-    >
-    ```bash {{ title: 'cURL' }}
-    ```
-    </CodeGroup>
-    <CodeGroup title="銉偣銉濄兂銈�">
-    ```json {{ title: 'Response' }}
-    {
-      "doc_metadata": [
-        {
-          "id": "",
-          "name": "name",
-          "type": "string",
-          "use_count": 0,
-        },
-        ...
-      ],
-      "built_in_field_enabled": true
-    }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-
-<hr className='ml-0 mr-0' />
-
-<Row>
-  <Col>
-    ### 銈ㄣ儵銉笺儭銉冦偦銉笺偢
-    <Properties>
-      <Property name='code' type='string' key='code'>
-        銈ㄣ儵銉笺偝銉笺儔
-      </Property>
-    </Properties>
-    <Properties>
-      <Property name='status' type='number' key='status'>
-        銈ㄣ儵銉笺偣銉嗐兗銈裤偣
-      </Property>
-    </Properties>
-    <Properties>
-      <Property name='message' type='string' key='message'>
-        銈ㄣ儵銉笺儭銉冦偦銉笺偢
-      </Property>
-    </Properties>
-  </Col>
-  <Col>
-    <CodeGroup title="渚�">
-    ```json {{ title: 'Response' }}
-      {
-        "code": "no_file_uploaded",
-        "message": "Please upload your file.",
-        "status": 400
-      }
-    ```
-    </CodeGroup>
-  </Col>
-</Row>
-<table className="max-w-auto border-collapse border border-slate-400" style={{ maxWidth: 'none', width: 'auto' }}>
-  <thead style={{ background: '#f9fafc' }}>
-    <tr>
-      <th className="p-2 border border-slate-300">code</th>
-      <th className="p-2 border border-slate-300">status</th>
-      <th className="p-2 border border-slate-300">message</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td className="p-2 border border-slate-300">no_file_uploaded</td>
-      <td className="p-2 border border-slate-300">400</td>
-      <td className="p-2 border border-slate-300">Please upload your file.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">too_many_files</td>
-      <td className="p-2 border border-slate-300">400</td>
-      <td className="p-2 border border-slate-300">Only one file is allowed.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">file_too_large</td>
-      <td className="p-2 border border-slate-300">413</td>
-      <td className="p-2 border border-slate-300">File size exceeded.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">unsupported_file_type</td>
-      <td className="p-2 border border-slate-300">415</td>
-      <td className="p-2 border border-slate-300">File type not allowed.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">high_quality_dataset_only</td>
-      <td className="p-2 border border-slate-300">400</td>
-      <td className="p-2 border border-slate-300">Current operation only supports 'high-quality' datasets.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">dataset_not_initialized</td>
-      <td className="p-2 border border-slate-300">400</td>
-      <td className="p-2 border border-slate-300">The dataset is still being initialized or indexing. Please wait a moment.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">archived_document_immutable</td>
-      <td className="p-2 border border-slate-300">403</td>
-      <td className="p-2 border border-slate-300">The archived document is not editable.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">dataset_name_duplicate</td>
-      <td className="p-2 border border-slate-300">409</td>
-      <td className="p-2 border border-slate-300">The dataset name already exists. Please modify your dataset name.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">invalid_action</td>
-      <td className="p-2 border border-slate-300">400</td>
-      <td className="p-2 border border-slate-300">Invalid action.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">document_already_finished</td>
-      <td className="p-2 border border-slate-300">400</td>
-      <td className="p-2 border border-slate-300">The document has been processed. Please refresh the page or go to the document details.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">document_indexing</td>
-      <td className="p-2 border border-slate-300">400</td>
-      <td className="p-2 border border-slate-300">The document is being processed and cannot be edited.</td>
-    </tr>
-    <tr>
-      <td className="p-2 border border-slate-300">invalid_metadata</td>
-      <td className="p-2 border border-slate-300">400</td>
-      <td className="p-2 border border-slate-300">The metadata content is incorrect. Please check and verify.</td>
-    </tr>
-  </tbody>
-</table>
-<div className="pb-4" />
diff --git "a/app/\050commonLayout\051/education-apply/page.tsx" "b/app/\050commonLayout\051/education-apply/page.tsx"
deleted file mode 100644
index 8730344..0000000
--- "a/app/\050commonLayout\051/education-apply/page.tsx"
+++ /dev/null
@@ -1,29 +0,0 @@
-'use client'
-
-import {
-  useEffect,
-  useMemo,
-} from 'react'
-import {
-  useRouter,
-  useSearchParams,
-} from 'next/navigation'
-import EducationApplyPage from '@/app/education-apply/education-apply-page'
-import { useProviderContext } from '@/context/provider-context'
-
-export default function EducationApply() {
-  const router = useRouter()
-  const { enableEducationPlan, isEducationAccount } = useProviderContext()
-  const searchParams = useSearchParams()
-  const token = searchParams.get('token')
-  const showEducationApplyPage = useMemo(() => {
-    return enableEducationPlan && !isEducationAccount && token
-  }, [enableEducationPlan, isEducationAccount, token])
-
-  useEffect(() => {
-    if (!showEducationApplyPage)
-      router.replace('/')
-  }, [showEducationApplyPage, router])
-
-  return <EducationApplyPage />
-}
diff --git "a/app/\050commonLayout\051/plugins/page.tsx" "b/app/\050commonLayout\051/plugins/page.tsx"
deleted file mode 100644
index 47f2791..0000000
--- "a/app/\050commonLayout\051/plugins/page.tsx"
+++ /dev/null
@@ -1,16 +0,0 @@
-import PluginPage from '@/app/components/plugins/plugin-page'
-import PluginsPanel from '@/app/components/plugins/plugin-page/plugins-panel'
-import Marketplace from '@/app/components/plugins/marketplace'
-import { getLocaleOnServer } from '@/i18n/server'
-
-const PluginList = async () => {
-  const locale = await getLocaleOnServer()
-  return (
-    <PluginPage
-      plugins={<PluginsPanel />}
-      marketplace={<Marketplace locale={locale} pluginTypeSwitchClassName='top-[60px]' searchBoxAutoAnimate={false} showSearchParams={false} />}
-    />
-  )
-}
-
-export default PluginList
diff --git a/app/components/app/app-publisher/version-info-modal.tsx b/app/components/app/app-publisher/version-info-modal.tsx
deleted file mode 100644
index 4d5d370..0000000
--- a/app/components/app/app-publisher/version-info-modal.tsx
+++ /dev/null
@@ -1,112 +0,0 @@
-import React, { type FC, useCallback, useState } from 'react'
-import Modal from '@/app/components/base/modal'
-import type { VersionHistory } from '@/types/workflow'
-import { useTranslation } from 'react-i18next'
-import { RiCloseLine } from '@remixicon/react'
-import Input from '../../base/input'
-import Textarea from '../../base/textarea'
-import Button from '../../base/button'
-import Toast from '@/app/components/base/toast'
-
-type VersionInfoModalProps = {
-  isOpen: boolean
-  versionInfo?: VersionHistory
-  onClose: () => void
-  onPublish: (params: { title: string; releaseNotes: string; id?: string }) => void
-}
-
-const TITLE_MAX_LENGTH = 15
-const RELEASE_NOTES_MAX_LENGTH = 100
-
-const VersionInfoModal: FC<VersionInfoModalProps> = ({
-  isOpen,
-  versionInfo,
-  onClose,
-  onPublish,
-}) => {
-  const { t } = useTranslation()
-  const [title, setTitle] = useState(versionInfo?.marked_name || '')
-  const [releaseNotes, setReleaseNotes] = useState(versionInfo?.marked_comment || '')
-  const [titleError, setTitleError] = useState(false)
-  const [releaseNotesError, setReleaseNotesError] = useState(false)
-
-  const handlePublish = () => {
-    if (title.length > TITLE_MAX_LENGTH) {
-      setTitleError(true)
-      Toast.notify({
-        type: 'error',
-        message: t('workflow.versionHistory.editField.titleLengthLimit', { limit: TITLE_MAX_LENGTH }),
-      })
-      return
-    }
-    else {
-      titleError && setTitleError(false)
-    }
-
-    if (releaseNotes.length > RELEASE_NOTES_MAX_LENGTH) {
-      setReleaseNotesError(true)
-      Toast.notify({
-        type: 'error',
-        message: t('workflow.versionHistory.editField.releaseNotesLengthLimit', { limit: RELEASE_NOTES_MAX_LENGTH }),
-      })
-      return
-    }
-    else {
-      releaseNotesError && setReleaseNotesError(false)
-    }
-
-    onPublish({ title, releaseNotes, id: versionInfo?.id })
-    onClose()
-  }
-
-  const handleTitleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
-    setTitle(e.target.value)
-  }, [])
-
-  const handleDescriptionChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {
-    setReleaseNotes(e.target.value)
-  }, [])
-
-  return <Modal className='p-0' isShow={isOpen} onClose={onClose}>
-    <div className='relative w-full p-6 pb-4 pr-14'>
-      <div className='title-2xl-semi-bold text-text-primary first-letter:capitalize'>
-        {versionInfo?.marked_name ? t('workflow.versionHistory.editVersionInfo') : t('workflow.versionHistory.nameThisVersion')}
-      </div>
-      <div className='absolute right-5 top-5 flex h-8 w-8 cursor-pointer items-center justify-center p-1.5' onClick={onClose}>
-        <RiCloseLine className='h-[18px] w-[18px] text-text-tertiary' />
-      </div>
-    </div>
-    <div className='flex flex-col gap-y-4 px-6 py-3'>
-      <div className='flex flex-col gap-y-1'>
-        <div className='system-sm-semibold flex h-6 items-center text-text-secondary'>
-          {t('workflow.versionHistory.editField.title')}
-        </div>
-        <Input
-          value={title}
-          placeholder={`${t('workflow.versionHistory.nameThisVersion')}${t('workflow.panel.optional')}`}
-          onChange={handleTitleChange}
-          destructive={titleError}
-        />
-      </div>
-      <div className='flex flex-col gap-y-1'>
-        <div className='system-sm-semibold flex h-6 items-center text-text-secondary'>
-          {t('workflow.versionHistory.editField.releaseNotes')}
-        </div>
-        <Textarea
-          value={releaseNotes}
-          placeholder={`${t('workflow.versionHistory.releaseNotesPlaceholder')}${t('workflow.panel.optional')}`}
-          onChange={handleDescriptionChange}
-          destructive={releaseNotesError}
-        />
-      </div>
-    </div>
-    <div className='flex justify-end p-6 pt-5'>
-      <div className='flex items-center gap-x-3'>
-        <Button onClick={onClose}>{t('common.operation.cancel')}</Button>
-        <Button variant='primary' onClick={handlePublish}>{t('workflow.common.publish')}</Button>
-      </div>
-    </div>
-  </Modal>
-}
-
-export default VersionInfoModal
diff --git a/app/components/app/configuration/config-var/config-select/index.spec.tsx b/app/components/app/configuration/config-var/config-select/index.spec.tsx
deleted file mode 100644
index 18df318..0000000
--- a/app/components/app/configuration/config-var/config-select/index.spec.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react'
-import ConfigSelect from './index'
-
-jest.mock('react-sortablejs', () => ({
-  ReactSortable: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
-}))
-
-jest.mock('react-i18next', () => ({
-  useTranslation: () => ({
-    t: (key: string) => key,
-  }),
-}))
-
-describe('ConfigSelect Component', () => {
-  const defaultProps = {
-    options: ['Option 1', 'Option 2'],
-    onChange: jest.fn(),
-  }
-
-  afterEach(() => {
-    jest.clearAllMocks()
-  })
-
-  it('renders all options', () => {
-    render(<ConfigSelect {...defaultProps} />)
-
-    defaultProps.options.forEach((option) => {
-      expect(screen.getByDisplayValue(option)).toBeInTheDocument()
-    })
-  })
-
-  it('renders add button', () => {
-    render(<ConfigSelect {...defaultProps} />)
-
-    expect(screen.getByText('appDebug.variableConfig.addOption')).toBeInTheDocument()
-  })
-
-  it('handles option deletion', () => {
-    render(<ConfigSelect {...defaultProps} />)
-    const optionContainer = screen.getByDisplayValue('Option 1').closest('div')
-    const deleteButton = optionContainer?.querySelector('div[role="button"]')
-
-    if (!deleteButton) return
-    fireEvent.click(deleteButton)
-    expect(defaultProps.onChange).toHaveBeenCalledWith(['Option 2'])
-  })
-
-  it('handles adding new option', () => {
-    render(<ConfigSelect {...defaultProps} />)
-    const addButton = screen.getByText('appDebug.variableConfig.addOption')
-
-    fireEvent.click(addButton)
-
-    expect(defaultProps.onChange).toHaveBeenCalledWith([...defaultProps.options, ''])
-  })
-
-  it('applies focus styles on input focus', () => {
-    render(<ConfigSelect {...defaultProps} />)
-    const firstInput = screen.getByDisplayValue('Option 1')
-
-    fireEvent.focus(firstInput)
-
-    expect(firstInput.closest('div')).toHaveClass('border-components-input-border-active')
-  })
-
-  it('applies delete hover styles', () => {
-    render(<ConfigSelect {...defaultProps} />)
-    const optionContainer = screen.getByDisplayValue('Option 1').closest('div')
-    const deleteButton = optionContainer?.querySelector('div[role="button"]')
-
-    if (!deleteButton) return
-    fireEvent.mouseEnter(deleteButton)
-    expect(optionContainer).toHaveClass('border-components-input-border-destructive')
-  })
-
-  it('renders empty state correctly', () => {
-    render(<ConfigSelect options={[]} onChange={defaultProps.onChange} />)
-
-    expect(screen.queryByRole('textbox')).not.toBeInTheDocument()
-    expect(screen.getByText('appDebug.variableConfig.addOption')).toBeInTheDocument()
-  })
-})
diff --git a/app/components/app/configuration/config-var/var-item.tsx b/app/components/app/configuration/config-var/var-item.tsx
deleted file mode 100644
index 78ed4b1..0000000
--- a/app/components/app/configuration/config-var/var-item.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useState } from 'react'
-import {
-  RiDeleteBinLine,
-  RiEditLine,
-} from '@remixicon/react'
-import type { IInputTypeIconProps } from './input-type-icon'
-import IconTypeIcon from './input-type-icon'
-import { BracketsX as VarIcon } from '@/app/components/base/icons/src/vender/line/development'
-import Badge from '@/app/components/base/badge'
-import cn from '@/utils/classnames'
-
-type ItemProps = {
-  readonly?: boolean
-  name: string
-  label: string
-  required: boolean
-  type: string
-  onEdit: () => void
-  onRemove: () => void
-}
-
-const VarItem: FC<ItemProps> = ({
-  readonly,
-  name,
-  label,
-  required,
-  type,
-  onEdit,
-  onRemove,
-}) => {
-  const [isDeleting, setIsDeleting] = useState(false)
-
-  return (
-    <div className={cn('group relative mb-1 flex h-[34px] w-full items-center  rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg pl-2.5 pr-3 shadow-xs last-of-type:mb-0 hover:bg-components-panel-on-panel-item-bg-hover hover:shadow-sm', isDeleting && 'border-state-destructive-border hover:bg-state-destructive-hover', readonly && 'cursor-not-allowed opacity-30')}>
-      <VarIcon className='mr-1 h-4 w-4 shrink-0 text-text-accent' />
-      <div className='flex w-0 grow items-center'>
-        <div className='truncate' title={`${name} 路 ${label}`}>
-          <span className='system-sm-medium text-text-secondary'>{name}</span>
-          <span className='system-xs-regular px-1 text-text-quaternary'>路</span>
-          <span className='system-xs-medium text-text-tertiary'>{label}</span>
-        </div>
-      </div>
-      <div className='shrink-0'>
-        <div className={cn('flex items-center', !readonly && 'group-hover:hidden')}>
-          {required && <Badge text='required' />}
-          <span className='system-xs-regular pl-2 pr-1 text-text-tertiary'>{type}</span>
-          <IconTypeIcon type={type as IInputTypeIconProps['type']} className='text-text-tertiary' />
-        </div>
-        <div className={cn('hidden items-center justify-end rounded-lg', !readonly && 'group-hover:flex')}>
-          <div
-            className='mr-1 flex h-6 w-6 cursor-pointer items-center justify-center rounded-md hover:bg-black/5'
-            onClick={onEdit}
-          >
-            <RiEditLine className='h-4 w-4 text-text-tertiary' />
-          </div>
-          <div
-            className='flex h-6 w-6 cursor-pointer items-center  justify-center text-text-tertiary hover:text-text-destructive'
-            onClick={onRemove}
-            onMouseOver={() => setIsDeleting(true)}
-            onMouseLeave={() => setIsDeleting(false)}
-          >
-            <RiDeleteBinLine className='h-4 w-4' />
-          </div>
-        </div>
-      </div>
-    </div>
-  )
-}
-
-export default VarItem
diff --git a/app/components/app/create-from-dsl-modal/dsl-confirm-modal.tsx b/app/components/app/create-from-dsl-modal/dsl-confirm-modal.tsx
deleted file mode 100644
index e6aadaa..0000000
--- a/app/components/app/create-from-dsl-modal/dsl-confirm-modal.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import Modal from '@/app/components/base/modal'
-import Button from '@/app/components/base/button'
-
-type DSLConfirmModalProps = {
-  versions?: {
-    importedVersion: string
-    systemVersion: string
-  }
-  onCancel: () => void
-  onConfirm: () => void
-  confirmDisabled?: boolean
-}
-const DSLConfirmModal = ({
-  versions = { importedVersion: '', systemVersion: '' },
-  onCancel,
-  onConfirm,
-  confirmDisabled = false,
-}: DSLConfirmModalProps) => {
-  const { t } = useTranslation()
-
-  return (
-    <Modal
-      isShow
-      onClose={() => onCancel()}
-      className='w-[480px]'
-    >
-      <div className='flex flex-col items-start gap-2 self-stretch pb-4'>
-        <div className='title-2xl-semi-bold text-text-primary'>{t('app.newApp.appCreateDSLErrorTitle')}</div>
-        <div className='system-md-regular flex grow flex-col text-text-secondary'>
-          <div>{t('app.newApp.appCreateDSLErrorPart1')}</div>
-          <div>{t('app.newApp.appCreateDSLErrorPart2')}</div>
-          <br />
-          <div>{t('app.newApp.appCreateDSLErrorPart3')}<span className='system-md-medium'>{versions.importedVersion}</span></div>
-          <div>{t('app.newApp.appCreateDSLErrorPart4')}<span className='system-md-medium'>{versions.systemVersion}</span></div>
-        </div>
-      </div>
-      <div className='flex items-start justify-end gap-2 self-stretch pt-6'>
-        <Button variant='secondary' onClick={() => onCancel()}>{t('app.newApp.Cancel')}</Button>
-        <Button variant='primary' destructive onClick={onConfirm} disabled={confirmDisabled}>{t('app.newApp.Confirm')}</Button>
-      </div>
-    </Modal>
-  )
-}
-
-export default DSLConfirmModal
diff --git a/app/components/base/app-icon/style.module.css b/app/components/base/app-icon/style.module.css
deleted file mode 100644
index 4ee84fb..0000000
--- a/app/components/base/app-icon/style.module.css
+++ /dev/null
@@ -1,23 +0,0 @@
-.appIcon {
-  @apply flex items-center justify-center relative w-9 h-9 text-lg rounded-lg grow-0 shrink-0;
-}
-
-.appIcon.large {
-  @apply w-10 h-10;
-}
-
-.appIcon.small {
-  @apply w-8 h-8;
-}
-
-.appIcon.tiny {
-  @apply w-6 h-6 text-base;
-}
-
-.appIcon.xs {
-  @apply w-5 h-5 text-base;
-}
-
-.appIcon.rounded {
-  @apply rounded-full;
-}
diff --git a/app/components/base/badge/index.css b/app/components/base/badge/index.css
deleted file mode 100644
index 24c62cd..0000000
--- a/app/components/base/badge/index.css
+++ /dev/null
@@ -1,28 +0,0 @@
-@tailwind components;
-
-@layer components {
-    .badge {
-        @apply inline-flex justify-center items-center text-text-tertiary border border-divider-deep
-    }
-
-    .badge-l {
-        @apply rounded-md gap-1 min-w-6
-    }
-
-    /* m is for the regular button */
-    .badge-m {
-        @apply rounded-md gap-[3px] min-w-5
-    }
-
-    .badge-s {
-        @apply rounded-[5px] gap-0.5 min-w-[18px]
-    }
-
-    .badge.badge-warning {
-        @apply text-text-warning border border-text-warning
-    }
-
-    .badge.badge-accent {
-        @apply text-text-accent-secondary border border-text-accent-secondary
-    }
-}
diff --git a/app/components/base/badge/index.tsx b/app/components/base/badge/index.tsx
deleted file mode 100644
index 88ba026..0000000
--- a/app/components/base/badge/index.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import type { CSSProperties, ReactNode } from 'react'
-import React from 'react'
-import { type VariantProps, cva } from 'class-variance-authority'
-import classNames from '@/utils/classnames'
-import './index.css'
-
-enum BadgeState {
-  Warning = 'warning',
-  Accent = 'accent',
-  Default = '',
-}
-
-const BadgeVariants = cva(
-  'badge',
-  {
-    variants: {
-      size: {
-        s: 'badge-s',
-        m: 'badge-m',
-        l: 'badge-l',
-      },
-    },
-    defaultVariants: {
-      size: 'm',
-    },
-  },
-)
-
-type BadgeProps = {
-  size?: 's' | 'm' | 'l'
-  iconOnly?: boolean
-  uppercase?: boolean
-  state?: BadgeState
-  styleCss?: CSSProperties
-  children?: ReactNode
-} & React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof BadgeVariants>
-
-function getBadgeState(state: BadgeState) {
-  switch (state) {
-    case BadgeState.Warning:
-      return 'badge-warning'
-    case BadgeState.Accent:
-      return 'badge-accent'
-    default:
-      return ''
-  }
-}
-
-const Badge: React.FC<BadgeProps> = ({
-  className,
-  size,
-  state = BadgeState.Default,
-  iconOnly = false,
-  uppercase = false,
-  styleCss,
-  children,
-  ...props
-}) => {
-  return (
-    <div
-      className={classNames(
-        BadgeVariants({ size, className }),
-        getBadgeState(state),
-        size === 's'
-          ? (iconOnly ? 'p-[3px]' : 'px-[5px] py-[3px]')
-          : size === 'l'
-            ? (iconOnly ? 'p-1.5' : 'px-2 py-1')
-            : (iconOnly ? 'p-1' : 'px-[5px] py-[2px]'),
-        uppercase ? 'system-2xs-medium-uppercase' : 'system-2xs-medium',
-      )}
-      style={styleCss}
-      {...props}
-    >
-      {children}
-    </div>
-  )
-}
-Badge.displayName = 'Badge'
-
-export default Badge
-export { Badge, BadgeState, BadgeVariants }
diff --git a/app/components/base/chat/chat-with-history/header/index.tsx b/app/components/base/chat/chat-with-history/header/index.tsx
deleted file mode 100644
index b5c5bcc..0000000
--- a/app/components/base/chat/chat-with-history/header/index.tsx
+++ /dev/null
@@ -1,164 +0,0 @@
-import { useCallback, useState } from 'react'
-import {
-  RiEditBoxLine,
-  RiLayoutRight2Line,
-  RiResetLeftLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import {
-  useChatWithHistoryContext,
-} from '../context'
-import Operation from './operation'
-import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
-import AppIcon from '@/app/components/base/app-icon'
-import Tooltip from '@/app/components/base/tooltip'
-import ViewFormDropdown from '@/app/components/base/chat/chat-with-history/inputs-form/view-form-dropdown'
-import Confirm from '@/app/components/base/confirm'
-import RenameModal from '@/app/components/base/chat/chat-with-history/sidebar/rename-modal'
-import type { ConversationItem } from '@/models/share'
-import cn from '@/utils/classnames'
-
-const Header = () => {
-  const {
-    appData,
-    currentConversationId,
-    currentConversationItem,
-    inputsForms,
-    pinnedConversationList,
-    handlePinConversation,
-    handleUnpinConversation,
-    conversationRenaming,
-    handleRenameConversation,
-    handleDeleteConversation,
-    handleNewConversation,
-    sidebarCollapseState,
-    handleSidebarCollapse,
-    isResponding,
-  } = useChatWithHistoryContext()
-  const { t } = useTranslation()
-  const isSidebarCollapsed = sidebarCollapseState
-
-  const isPin = pinnedConversationList.some(item => item.id === currentConversationId)
-
-  const [showConfirm, setShowConfirm] = useState<ConversationItem | null>(null)
-  const [showRename, setShowRename] = useState<ConversationItem | null>(null)
-  const handleOperate = useCallback((type: string) => {
-    if (type === 'pin')
-      handlePinConversation(currentConversationId)
-
-    if (type === 'unpin')
-      handleUnpinConversation(currentConversationId)
-
-    if (type === 'delete')
-      setShowConfirm(currentConversationItem as any)
-
-    if (type === 'rename')
-      setShowRename(currentConversationItem as any)
-  }, [currentConversationId, currentConversationItem, handlePinConversation, handleUnpinConversation])
-  const handleCancelConfirm = useCallback(() => {
-    setShowConfirm(null)
-  }, [])
-  const handleDelete = useCallback(() => {
-    if (showConfirm)
-      handleDeleteConversation(showConfirm.id, { onSuccess: handleCancelConfirm })
-  }, [showConfirm, handleDeleteConversation, handleCancelConfirm])
-  const handleCancelRename = useCallback(() => {
-    setShowRename(null)
-  }, [])
-  const handleRename = useCallback((newName: string) => {
-    if (showRename)
-      handleRenameConversation(showRename.id, newName, { onSuccess: handleCancelRename })
-  }, [showRename, handleRenameConversation, handleCancelRename])
-
-  return (
-    <>
-      <div className='flex h-14 shrink-0 items-center justify-between p-3'>
-        <div className={cn('flex items-center gap-1 transition-all duration-200 ease-in-out', !isSidebarCollapsed && 'user-select-none opacity-0')}>
-          <ActionButton className={cn(!isSidebarCollapsed && 'cursor-default')} size='l' onClick={() => handleSidebarCollapse(false)}>
-            <RiLayoutRight2Line className='h-[18px] w-[18px]' />
-          </ActionButton>
-          <div className='mr-1 shrink-0'>
-            <AppIcon
-              size='large'
-              iconType={appData?.site.icon_type}
-              icon={appData?.site.icon}
-              background={appData?.site.icon_background}
-              imageUrl={appData?.site.icon_url}
-            />
-          </div>
-          {!currentConversationId && (
-            <div className={cn('system-md-semibold grow truncate text-text-secondary')}>{appData?.site.title}</div>
-          )}
-          {currentConversationId && currentConversationItem && isSidebarCollapsed && (
-            <>
-              <div className='p-1 text-divider-deep'>/</div>
-              <Operation
-                title={currentConversationItem?.name || ''}
-                isPinned={!!isPin}
-                togglePin={() => handleOperate(isPin ? 'unpin' : 'pin')}
-                isShowDelete
-                isShowRenameConversation
-                onRenameConversation={() => handleOperate('rename')}
-                onDelete={() => handleOperate('delete')}
-              />
-            </>
-          )}
-          <div className='flex items-center px-1'>
-            <div className='h-[14px] w-px bg-divider-regular'></div>
-          </div>
-          {isSidebarCollapsed && (
-            <Tooltip
-              disabled={!!currentConversationId}
-              popupContent={t('share.chat.newChatTip')}
-            >
-              <div>
-                <ActionButton
-                  size='l'
-                  state={(!currentConversationId || isResponding) ? ActionButtonState.Disabled : ActionButtonState.Default}
-                  disabled={!currentConversationId || isResponding}
-                  onClick={handleNewConversation}
-                >
-                  <RiEditBoxLine className='h-[18px] w-[18px]' />
-                </ActionButton>
-              </div>
-            </Tooltip>
-          )}
-        </div>
-        <div className='flex items-center gap-1'>
-          {currentConversationId && (
-            <Tooltip
-              popupContent={t('share.chat.resetChat')}
-            >
-              <ActionButton size='l' onClick={handleNewConversation}>
-                <RiResetLeftLine className='h-[18px] w-[18px]' />
-              </ActionButton>
-            </Tooltip>
-          )}
-          {currentConversationId && inputsForms.length > 0 && (
-            <ViewFormDropdown />
-          )}
-        </div>
-      </div>
-      {!!showConfirm && (
-        <Confirm
-          title={t('share.chat.deleteConversation.title')}
-          content={t('share.chat.deleteConversation.content') || ''}
-          isShow
-          onCancel={handleCancelConfirm}
-          onConfirm={handleDelete}
-        />
-      )}
-      {showRename && (
-        <RenameModal
-          isShow
-          onClose={handleCancelRename}
-          saveLoading={conversationRenaming}
-          name={showRename?.name || ''}
-          onSave={handleRename}
-        />
-      )}
-    </>
-  )
-}
-
-export default Header
diff --git a/app/components/base/chat/chat-with-history/header/mobile-operation-dropdown.tsx b/app/components/base/chat/chat-with-history/header/mobile-operation-dropdown.tsx
deleted file mode 100644
index 4bb6940..0000000
--- a/app/components/base/chat/chat-with-history/header/mobile-operation-dropdown.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import { useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiMoreFill,
-} from '@remixicon/react'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
-
-type Props = {
-  handleResetChat: () => void
-  handleViewChatSettings: () => void
-  hideViewChatSettings?: boolean
-}
-
-const MobileOperationDropdown = ({
-  handleResetChat,
-  handleViewChatSettings,
-  hideViewChatSettings = false,
-}: Props) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: 4,
-        crossAxis: -4,
-      }}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => setOpen(v => !v)}
-      >
-        <ActionButton size='l' state={open ? ActionButtonState.Hover : ActionButtonState.Default}>
-          <RiMoreFill className='h-[18px] w-[18px]' />
-        </ActionButton>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className="z-40">
-        <div
-          className={'min-w-[160px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg backdrop-blur-sm'}
-        >
-          <div className='system-md-regular flex cursor-pointer items-center space-x-1 rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover' onClick={handleResetChat}>
-            <span className='grow'>{t('share.chat.resetChat')}</span>
-          </div>
-          {!hideViewChatSettings && (
-            <div className='system-md-regular flex cursor-pointer items-center space-x-1 rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover' onClick={handleViewChatSettings}>
-              <span className='grow'>{t('share.chat.viewChatSettings')}</span>
-            </div>
-          )}
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-
-  )
-}
-
-export default MobileOperationDropdown
diff --git a/app/components/base/chat/chat-with-history/header/operation.tsx b/app/components/base/chat/chat-with-history/header/operation.tsx
deleted file mode 100644
index 0923d71..0000000
--- a/app/components/base/chat/chat-with-history/header/operation.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useState } from 'react'
-import type { Placement } from '@floating-ui/react'
-import {
-  RiArrowDownSLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import cn from '@/utils/classnames'
-
-type Props = {
-  title: string
-  isPinned: boolean
-  isShowRenameConversation?: boolean
-  onRenameConversation?: () => void
-  isShowDelete: boolean
-  togglePin: () => void
-  onDelete: () => void
-  placement?: Placement
-}
-
-const Operation: FC<Props> = ({
-  title,
-  isPinned,
-  togglePin,
-  isShowRenameConversation,
-  onRenameConversation,
-  isShowDelete,
-  onDelete,
-  placement = 'bottom-start',
-}) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement={placement}
-      offset={4}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => setOpen(v => !v)}
-      >
-        <div className={cn('flex cursor-pointer items-center rounded-lg p-1.5 pl-2 text-text-secondary hover:bg-state-base-hover', open && 'bg-state-base-hover')}>
-          <div className='system-md-semibold'>{title}</div>
-          <RiArrowDownSLine className='h-4 w-4 ' />
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className="z-50">
-        <div
-          className={'min-w-[120px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg backdrop-blur-sm'}
-        >
-          <div className={cn('system-md-regular flex cursor-pointer items-center space-x-1 rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover')} onClick={togglePin}>
-            <span className='grow'>{isPinned ? t('explore.sidebar.action.unpin') : t('explore.sidebar.action.pin')}</span>
-          </div>
-          {isShowRenameConversation && (
-            <div className={cn('system-md-regular flex cursor-pointer items-center space-x-1 rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover')} onClick={onRenameConversation}>
-              <span className='grow'>{t('explore.sidebar.action.rename')}</span>
-            </div>
-          )}
-          {isShowDelete && (
-            <div className={cn('system-md-regular group flex cursor-pointer items-center space-x-1 rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-destructive-hover hover:text-text-destructive')} onClick={onDelete} >
-              <span className='grow'>{t('explore.sidebar.action.delete')}</span>
-            </div>
-          )}
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-export default React.memo(Operation)
diff --git a/app/components/base/chat/chat-with-history/inputs-form/content.tsx b/app/components/base/chat/chat-with-history/inputs-form/content.tsx
deleted file mode 100644
index b8d1824..0000000
--- a/app/components/base/chat/chat-with-history/inputs-form/content.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import React, { memo, useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useChatWithHistoryContext } from '../context'
-import Input from '@/app/components/base/input'
-import Textarea from '@/app/components/base/textarea'
-import { PortalSelect } from '@/app/components/base/select'
-import { FileUploaderInAttachmentWrapper } from '@/app/components/base/file-uploader'
-import { InputVarType } from '@/app/components/workflow/types'
-
-type Props = {
-  showTip?: boolean
-}
-
-const InputsFormContent = ({ showTip }: Props) => {
-  const { t } = useTranslation()
-  const {
-    appParams,
-    inputsForms,
-    currentConversationId,
-    currentConversationInputs,
-    setCurrentConversationInputs,
-    newConversationInputs,
-    newConversationInputsRef,
-    handleNewConversationInputsChange,
-  } = useChatWithHistoryContext()
-  const inputsFormValue = currentConversationId ? currentConversationInputs : newConversationInputs
-
-  const handleFormChange = useCallback((variable: string, value: any) => {
-    setCurrentConversationInputs({
-      ...currentConversationInputs,
-      [variable]: value,
-    })
-    handleNewConversationInputsChange({
-      ...newConversationInputsRef.current,
-      [variable]: value,
-    })
-  }, [newConversationInputsRef, handleNewConversationInputsChange, currentConversationInputs, setCurrentConversationInputs])
-
-  return (
-    <div className='space-y-4'>
-      {inputsForms.map(form => (
-        <div key={form.variable} className='space-y-1'>
-          <div className='flex h-6 items-center gap-1'>
-            <div className='system-md-semibold text-text-secondary'>{form.label}</div>
-            {!form.required && (
-              <div className='system-xs-regular text-text-tertiary'>{t('appDebug.variableTable.optional')}</div>
-            )}
-          </div>
-          {form.type === InputVarType.textInput && (
-            <Input
-              value={inputsFormValue?.[form.variable] || ''}
-              onChange={e => handleFormChange(form.variable, e.target.value)}
-              placeholder={form.label}
-            />
-          )}
-          {form.type === InputVarType.number && (
-            <Input
-              type='number'
-              value={inputsFormValue?.[form.variable] || ''}
-              onChange={e => handleFormChange(form.variable, e.target.value)}
-              placeholder={form.label}
-            />
-          )}
-          {form.type === InputVarType.paragraph && (
-            <Textarea
-              value={inputsFormValue?.[form.variable] || ''}
-              onChange={e => handleFormChange(form.variable, e.target.value)}
-              placeholder={form.label}
-            />
-          )}
-          {form.type === InputVarType.select && (
-            <PortalSelect
-              popupClassName='w-[200px]'
-              value={inputsFormValue?.[form.variable]}
-              items={form.options.map((option: string) => ({ value: option, name: option }))}
-              onSelect={item => handleFormChange(form.variable, item.value as string)}
-              placeholder={form.label}
-            />
-          )}
-          {form.type === InputVarType.singleFile && (
-            <FileUploaderInAttachmentWrapper
-              value={inputsFormValue?.[form.variable] ? [inputsFormValue?.[form.variable]] : []}
-              onChange={files => handleFormChange(form.variable, files[0])}
-              fileConfig={{
-                allowed_file_types: form.allowed_file_types,
-                allowed_file_extensions: form.allowed_file_extensions,
-                allowed_file_upload_methods: form.allowed_file_upload_methods,
-                number_limits: 1,
-                fileUploadConfig: (appParams as any).system_parameters,
-              }}
-            />
-          )}
-          {form.type === InputVarType.multiFiles && (
-            <FileUploaderInAttachmentWrapper
-              value={inputsFormValue?.[form.variable] || []}
-              onChange={files => handleFormChange(form.variable, files)}
-              fileConfig={{
-                allowed_file_types: form.allowed_file_types,
-                allowed_file_extensions: form.allowed_file_extensions,
-                allowed_file_upload_methods: form.allowed_file_upload_methods,
-                number_limits: form.max_length,
-                fileUploadConfig: (appParams as any).system_parameters,
-              }}
-            />
-          )}
-        </div>
-      ))}
-      {showTip && (
-        <div className='system-xs-regular text-text-tertiary'>{t('share.chat.chatFormTip')}</div>
-      )}
-    </div>
-  )
-}
-
-export default memo(InputsFormContent)
diff --git a/app/components/base/chat/chat-with-history/inputs-form/index.tsx b/app/components/base/chat/chat-with-history/inputs-form/index.tsx
deleted file mode 100644
index 30ec11c..0000000
--- a/app/components/base/chat/chat-with-history/inputs-form/index.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import { Message3Fill } from '@/app/components/base/icons/src/public/other'
-import Button from '@/app/components/base/button'
-import Divider from '@/app/components/base/divider'
-import InputsFormContent from '@/app/components/base/chat/chat-with-history/inputs-form/content'
-import { useChatWithHistoryContext } from '../context'
-import cn from '@/utils/classnames'
-
-type Props = {
-  collapsed: boolean
-  setCollapsed: (collapsed: boolean) => void
-}
-
-const InputsFormNode = ({
-  collapsed,
-  setCollapsed,
-}: Props) => {
-  const { t } = useTranslation()
-  const {
-    isMobile,
-    currentConversationId,
-    handleStartChat,
-    themeBuilder,
-  } = useChatWithHistoryContext()
-
-  return (
-    <div className={cn('flex flex-col items-center px-4 pt-6', isMobile && 'pt-4')}>
-      <div className={cn(
-        'w-full max-w-[672px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-md',
-        collapsed && 'border border-components-card-border bg-components-card-bg shadow-none',
-      )}>
-        <div className={cn(
-          'flex items-center gap-3 rounded-t-2xl px-6 py-4',
-          !collapsed && 'border-b border-divider-subtle',
-          isMobile && 'px-4 py-3',
-        )}>
-          <Message3Fill className='h-6 w-6 shrink-0' />
-          <div className='system-xl-semibold grow text-text-secondary'>{t('share.chat.chatSettingsTitle')}</div>
-          {collapsed && (
-            <Button className='uppercase text-text-tertiary' size='small' variant='ghost' onClick={() => setCollapsed(false)}>{t('common.operation.edit')}</Button>
-          )}
-          {!collapsed && currentConversationId && (
-            <Button className='uppercase text-text-tertiary' size='small' variant='ghost' onClick={() => setCollapsed(true)}>{t('common.operation.close')}</Button>
-          )}
-        </div>
-        {!collapsed && (
-          <div className={cn('p-6', isMobile && 'p-4')}>
-            <InputsFormContent />
-          </div>
-        )}
-        {!collapsed && !currentConversationId && (
-          <div className={cn('p-6', isMobile && 'p-4')}>
-            <Button
-              variant='primary'
-              className='w-full'
-              onClick={() => handleStartChat(() => setCollapsed(true))}
-              style={
-                themeBuilder?.theme
-                  ? {
-                    backgroundColor: themeBuilder?.theme.primaryColor,
-                  }
-                  : {}
-              }
-            >{t('share.chat.startChat')}</Button>
-          </div>
-        )}
-      </div>
-      {collapsed && (
-        <div className='flex w-full max-w-[720px] items-center py-4'>
-          <Divider bgStyle='gradient' className='h-px basis-1/2 rotate-180' />
-          <Divider bgStyle='gradient' className='h-px basis-1/2' />
-        </div>
-      )}
-    </div>
-  )
-}
-
-export default InputsFormNode
diff --git a/app/components/base/chat/chat-with-history/inputs-form/view-form-dropdown.tsx b/app/components/base/chat/chat-with-history/inputs-form/view-form-dropdown.tsx
deleted file mode 100644
index 43df99c..0000000
--- a/app/components/base/chat/chat-with-history/inputs-form/view-form-dropdown.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiChatSettingsLine,
-} from '@remixicon/react'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
-import { Message3Fill } from '@/app/components/base/icons/src/public/other'
-import InputsFormContent from '@/app/components/base/chat/chat-with-history/inputs-form/content'
-
-const ViewFormDropdown = () => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 4,
-      }}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => setOpen(v => !v)}
-      >
-        <ActionButton size='l' state={open ? ActionButtonState.Hover : ActionButtonState.Default}>
-          <RiChatSettingsLine className='h-[18px] w-[18px]' />
-        </ActionButton>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className="z-50">
-        <div className='w-[400px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-lg backdrop-blur-sm'>
-          <div className='flex items-center gap-3 rounded-t-2xl border-b border-divider-subtle px-6 py-4'>
-            <Message3Fill className='h-6 w-6 shrink-0' />
-            <div className='system-xl-semibold grow text-text-secondary'>{t('share.chat.chatSettingsTitle')}</div>
-          </div>
-          <div className='p-6'>
-            <InputsFormContent />
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-
-  )
-}
-
-export default ViewFormDropdown
diff --git a/app/components/base/chat/chat-with-history/sidebar/operation.tsx b/app/components/base/chat/chat-with-history/sidebar/operation.tsx
deleted file mode 100644
index 19d2aa2..0000000
--- a/app/components/base/chat/chat-with-history/sidebar/operation.tsx
+++ /dev/null
@@ -1,101 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useEffect, useRef, useState } from 'react'
-import {
-  RiDeleteBinLine,
-  RiEditLine,
-  RiMoreFill,
-  RiPushpinLine,
-  RiUnpinLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { useBoolean } from 'ahooks'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
-import cn from '@/utils/classnames'
-
-type Props = {
-  isActive?: boolean
-  isItemHovering?: boolean
-  isPinned: boolean
-  isShowRenameConversation?: boolean
-  onRenameConversation?: () => void
-  isShowDelete: boolean
-  togglePin: () => void
-  onDelete: () => void
-}
-
-const Operation: FC<Props> = ({
-  isActive,
-  isItemHovering,
-  isPinned,
-  togglePin,
-  isShowRenameConversation,
-  onRenameConversation,
-  isShowDelete,
-  onDelete,
-}) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const ref = useRef(null)
-  const [isHovering, { setTrue: setIsHovering, setFalse: setNotHovering }] = useBoolean(false)
-  useEffect(() => {
-    if (!isItemHovering && !isHovering)
-      setOpen(false)
-  }, [isItemHovering, isHovering])
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={4}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => setOpen(v => !v)}
-      >
-        <ActionButton
-          className={cn((isItemHovering || open) ? 'opacity-100' : 'opacity-0')}
-          state={
-            isActive
-              ? ActionButtonState.Active
-              : open
-                ? ActionButtonState.Hover
-                : ActionButtonState.Default
-          }
-        >
-          <RiMoreFill className='h-4 w-4' />
-        </ActionButton>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className="z-50">
-        <div
-          ref={ref}
-          className={'min-w-[120px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg backdrop-blur-sm'}
-          onMouseEnter={setIsHovering}
-          onMouseLeave={setNotHovering}
-          onClick={(e) => {
-            e.stopPropagation()
-          }}
-        >
-          <div className={cn('system-md-regular flex cursor-pointer items-center space-x-1 rounded-lg px-2 py-1.5 text-text-secondary hover:bg-state-base-hover')} onClick={togglePin}>
-            {isPinned && <RiUnpinLine className='h-4 w-4 shrink-0 text-text-tertiary' />}
-            {!isPinned && <RiPushpinLine className='h-4 w-4 shrink-0 text-text-tertiary' />}
-            <span className='grow'>{isPinned ? t('explore.sidebar.action.unpin') : t('explore.sidebar.action.pin')}</span>
-          </div>
-          {isShowRenameConversation && (
-            <div className={cn('system-md-regular flex cursor-pointer items-center space-x-1 rounded-lg px-2 py-1.5 text-text-secondary hover:bg-state-base-hover')} onClick={onRenameConversation}>
-              <RiEditLine className='h-4 w-4 shrink-0 text-text-tertiary' />
-              <span className='grow'>{t('explore.sidebar.action.rename')}</span>
-            </div>
-          )}
-          {isShowDelete && (
-            <div className={cn('system-md-regular group flex cursor-pointer items-center space-x-1 rounded-lg px-2 py-1.5 text-text-secondary hover:bg-state-destructive-hover hover:text-text-destructive')} onClick={onDelete} >
-              <RiDeleteBinLine className={cn('h-4 w-4 shrink-0 text-text-tertiary group-hover:text-text-destructive')} />
-              <span className='grow'>{t('explore.sidebar.action.delete')}</span>
-            </div>
-          )}
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-export default React.memo(Operation)
diff --git a/app/components/base/chat/chat/content-switch.tsx b/app/components/base/chat/chat/content-switch.tsx
deleted file mode 100644
index cf428f4..0000000
--- a/app/components/base/chat/chat/content-switch.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { ChevronRight } from '../../icons/src/vender/line/arrows'
-
-export default function ContentSwitch({
-  count,
-  currentIndex,
-  prevDisabled,
-  nextDisabled,
-  switchSibling,
-}: {
-  count?: number
-  currentIndex?: number
-  prevDisabled: boolean
-  nextDisabled: boolean
-  switchSibling: (direction: 'prev' | 'next') => void
-}) {
-  return (
-    count && count > 1 && currentIndex !== undefined && (
-      <div className="flex items-center justify-center pt-3.5 text-sm">
-        <button
-          className={`${prevDisabled ? 'opacity-30' : 'opacity-100'}`}
-          disabled={prevDisabled}
-          onClick={() => !prevDisabled && switchSibling('prev')}
-        >
-          <ChevronRight className="h-[14px] w-[14px] rotate-180 text-text-primary" />
-        </button>
-        <span className="px-2 text-xs text-text-primary">
-          {currentIndex + 1} / {count}
-        </span>
-        <button
-          className={`${nextDisabled ? 'opacity-30' : 'opacity-100'}`}
-          disabled={nextDisabled}
-          onClick={() => !nextDisabled && switchSibling('next')}
-        >
-          <ChevronRight className="h-[14px] w-[14px] text-text-primary" />
-        </button>
-      </div>
-    )
-  )
-}
diff --git a/app/components/base/chat/embedded-chatbot/header/index.tsx b/app/components/base/chat/embedded-chatbot/header/index.tsx
deleted file mode 100644
index c6c02a4..0000000
--- a/app/components/base/chat/embedded-chatbot/header/index.tsx
+++ /dev/null
@@ -1,179 +0,0 @@
-import type { FC } from 'react'
-import React, { useCallback, useEffect, useState } from 'react'
-import { RiCollapseDiagonal2Line, RiExpandDiagonal2Line, RiResetLeftLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import type { Theme } from '../theme/theme-context'
-import { CssTransform } from '../theme/utils'
-import {
-  useEmbeddedChatbotContext,
-} from '../context'
-import Tooltip from '@/app/components/base/tooltip'
-import ActionButton from '@/app/components/base/action-button'
-import Divider from '@/app/components/base/divider'
-import ViewFormDropdown from '@/app/components/base/chat/embedded-chatbot/inputs-form/view-form-dropdown'
-import DifyLogo from '@/app/components/base/logo/dify-logo'
-import cn from '@/utils/classnames'
-
-export type IHeaderProps = {
-  isMobile?: boolean
-  allowResetChat?: boolean
-  customerIcon?: React.ReactNode
-  title: string
-  theme?: Theme
-  onCreateNewChat?: () => void
-}
-const Header: FC<IHeaderProps> = ({
-  isMobile,
-  allowResetChat,
-  customerIcon,
-  title,
-  theme,
-  onCreateNewChat,
-}) => {
-  const { t } = useTranslation()
-  const {
-    appData,
-    currentConversationId,
-    inputsForms,
-  } = useEmbeddedChatbotContext()
-
-  const isClient = typeof window !== 'undefined'
-  const isIframe = isClient ? window.self !== window.top : false
-  const [parentOrigin, setParentOrigin] = useState('')
-  const [showToggleExpandButton, setShowToggleExpandButton] = useState(false)
-  const [expanded, setExpanded] = useState(false)
-
-  const handleMessageReceived = useCallback((event: MessageEvent) => {
-    let currentParentOrigin = parentOrigin
-    if (!currentParentOrigin && event.data.type === 'dify-chatbot-config') {
-      currentParentOrigin = event.origin
-      setParentOrigin(event.origin)
-    }
-    if (event.origin !== currentParentOrigin)
-      return
-    if (event.data.type === 'dify-chatbot-config')
-      setShowToggleExpandButton(event.data.payload.isToggledByButton && !event.data.payload.isDraggable)
-  }, [parentOrigin])
-
-  useEffect(() => {
-    if (!isIframe) return
-
-    const listener = (event: MessageEvent) => handleMessageReceived(event)
-    window.addEventListener('message', listener)
-
-    window.parent.postMessage({ type: 'dify-chatbot-iframe-ready' }, '*')
-
-    return () => window.removeEventListener('message', listener)
-  }, [isIframe, handleMessageReceived])
-
-  const handleToggleExpand = useCallback(() => {
-    if (!isIframe || !showToggleExpandButton) return
-    setExpanded(!expanded)
-    window.parent.postMessage({
-      type: 'dify-chatbot-expand-change',
-    }, parentOrigin)
-  }, [isIframe, parentOrigin, showToggleExpandButton, expanded])
-
-  if (!isMobile) {
-    return (
-      <div className='flex h-14 shrink-0 items-center justify-end p-3'>
-        <div className='flex items-center gap-1'>
-          {/* powered by */}
-          <div className='shrink-0'>
-            {!appData?.custom_config?.remove_webapp_brand && (
-              <div className={cn(
-                'flex shrink-0 items-center gap-1.5 px-2',
-              )}>
-                <div className='system-2xs-medium-uppercase text-text-tertiary'>{t('share.chat.poweredBy')}</div>
-                {appData?.custom_config?.replace_webapp_logo && (
-                  <img src={appData?.custom_config?.replace_webapp_logo} alt='logo' className='block h-5 w-auto' />
-                )}
-                {!appData?.custom_config?.replace_webapp_logo && (
-                  <DifyLogo size='small' />
-                )}
-              </div>
-            )}
-          </div>
-          {currentConversationId && (
-            <Divider type='vertical' className='h-3.5' />
-          )}
-          {
-            showToggleExpandButton && (
-              <Tooltip
-                popupContent={expanded ? t('share.chat.collapse') : t('share.chat.expand')}
-              >
-                <ActionButton size='l' onClick={handleToggleExpand}>
-                  {
-                    expanded
-                      ? <RiCollapseDiagonal2Line className='h-[18px] w-[18px]' />
-                      : <RiExpandDiagonal2Line className='h-[18px] w-[18px]' />
-                  }
-                </ActionButton>
-              </Tooltip>
-            )
-          }
-          {currentConversationId && allowResetChat && (
-            <Tooltip
-              popupContent={t('share.chat.resetChat')}
-            >
-              <ActionButton size='l' onClick={onCreateNewChat}>
-                <RiResetLeftLine className='h-[18px] w-[18px]' />
-              </ActionButton>
-            </Tooltip>
-          )}
-          {currentConversationId && inputsForms.length > 0 && (
-            <ViewFormDropdown />
-          )}
-        </div>
-      </div>
-    )
-  }
-
-  return (
-    <div
-      className={cn('flex h-14 shrink-0 items-center justify-between rounded-t-2xl px-3')}
-      style={Object.assign({}, CssTransform(theme?.backgroundHeaderColorStyle ?? ''), CssTransform(theme?.headerBorderBottomStyle ?? ''))}
-    >
-      <div className="flex grow items-center space-x-3">
-        {customerIcon}
-        <div
-          className='system-md-semibold truncate'
-          style={CssTransform(theme?.colorFontOnHeaderStyle ?? '')}
-        >
-          {title}
-        </div>
-      </div>
-      <div className='flex items-center gap-1'>
-        {
-          showToggleExpandButton && (
-            <Tooltip
-              popupContent={expanded ? t('share.chat.collapse') : t('share.chat.expand')}
-            >
-              <ActionButton size='l' onClick={handleToggleExpand}>
-                {
-                  expanded
-                    ? <RiCollapseDiagonal2Line className={cn('h-[18px] w-[18px]', theme?.colorPathOnHeader)} />
-                    : <RiExpandDiagonal2Line className={cn('h-[18px] w-[18px]', theme?.colorPathOnHeader)} />
-                }
-              </ActionButton>
-            </Tooltip>
-          )
-        }
-        {currentConversationId && allowResetChat && (
-          <Tooltip
-            popupContent={t('share.chat.resetChat')}
-          >
-            <ActionButton size='l' onClick={onCreateNewChat}>
-              <RiResetLeftLine className={cn('h-[18px] w-[18px]', theme?.colorPathOnHeader)} />
-            </ActionButton>
-          </Tooltip>
-        )}
-        {currentConversationId && inputsForms.length > 0 && (
-          <ViewFormDropdown iconColor={theme?.colorPathOnHeader} />
-        )}
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(Header)
diff --git a/app/components/base/chat/embedded-chatbot/inputs-form/content.tsx b/app/components/base/chat/embedded-chatbot/inputs-form/content.tsx
deleted file mode 100644
index e56520d..0000000
--- a/app/components/base/chat/embedded-chatbot/inputs-form/content.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import React, { memo, useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useEmbeddedChatbotContext } from '../context'
-import Input from '@/app/components/base/input'
-import Textarea from '@/app/components/base/textarea'
-import { PortalSelect } from '@/app/components/base/select'
-import { FileUploaderInAttachmentWrapper } from '@/app/components/base/file-uploader'
-import { InputVarType } from '@/app/components/workflow/types'
-
-type Props = {
-  showTip?: boolean
-}
-
-const InputsFormContent = ({ showTip }: Props) => {
-  const { t } = useTranslation()
-  const {
-    appParams,
-    inputsForms,
-    currentConversationId,
-    currentConversationInputs,
-    setCurrentConversationInputs,
-    newConversationInputs,
-    newConversationInputsRef,
-    handleNewConversationInputsChange,
-  } = useEmbeddedChatbotContext()
-  const inputsFormValue = currentConversationId ? currentConversationInputs : newConversationInputs
-
-  const handleFormChange = useCallback((variable: string, value: any) => {
-    setCurrentConversationInputs({
-      ...currentConversationInputs,
-      [variable]: value,
-    })
-    handleNewConversationInputsChange({
-      ...newConversationInputsRef.current,
-      [variable]: value,
-    })
-  }, [newConversationInputsRef, handleNewConversationInputsChange, currentConversationInputs, setCurrentConversationInputs])
-
-  return (
-    <div className='space-y-4'>
-      {inputsForms.map(form => (
-        <div key={form.variable} className='space-y-1'>
-          <div className='flex h-6 items-center gap-1'>
-            <div className='system-md-semibold text-text-secondary'>{form.label}</div>
-            {!form.required && (
-              <div className='system-xs-regular text-text-tertiary'>{t('appDebug.variableTable.optional')}</div>
-            )}
-          </div>
-          {form.type === InputVarType.textInput && (
-            <Input
-              value={inputsFormValue?.[form.variable] || ''}
-              onChange={e => handleFormChange(form.variable, e.target.value)}
-              placeholder={form.label}
-            />
-          )}
-          {form.type === InputVarType.number && (
-            <Input
-              type='number'
-              value={inputsFormValue?.[form.variable] || ''}
-              onChange={e => handleFormChange(form.variable, e.target.value)}
-              placeholder={form.label}
-            />
-          )}
-          {form.type === InputVarType.paragraph && (
-            <Textarea
-              value={inputsFormValue?.[form.variable] || ''}
-              onChange={e => handleFormChange(form.variable, e.target.value)}
-              placeholder={form.label}
-            />
-          )}
-          {form.type === InputVarType.select && (
-            <PortalSelect
-              popupClassName='w-[200px]'
-              value={inputsFormValue?.[form.variable]}
-              items={form.options.map((option: string) => ({ value: option, name: option }))}
-              onSelect={item => handleFormChange(form.variable, item.value as string)}
-              placeholder={form.label}
-            />
-          )}
-          {form.type === InputVarType.singleFile && (
-            <FileUploaderInAttachmentWrapper
-              value={inputsFormValue?.[form.variable] ? [inputsFormValue?.[form.variable]] : []}
-              onChange={files => handleFormChange(form.variable, files[0])}
-              fileConfig={{
-                allowed_file_types: form.allowed_file_types,
-                allowed_file_extensions: form.allowed_file_extensions,
-                allowed_file_upload_methods: form.allowed_file_upload_methods,
-                number_limits: 1,
-                fileUploadConfig: (appParams as any).system_parameters,
-              }}
-            />
-          )}
-          {form.type === InputVarType.multiFiles && (
-            <FileUploaderInAttachmentWrapper
-              value={inputsFormValue?.[form.variable] || []}
-              onChange={files => handleFormChange(form.variable, files)}
-              fileConfig={{
-                allowed_file_types: form.allowed_file_types,
-                allowed_file_extensions: form.allowed_file_extensions,
-                allowed_file_upload_methods: form.allowed_file_upload_methods,
-                number_limits: form.max_length,
-                fileUploadConfig: (appParams as any).system_parameters,
-              }}
-            />
-          )}
-        </div>
-      ))}
-      {showTip && (
-        <div className='system-xs-regular text-text-tertiary'>{t('share.chat.chatFormTip')}</div>
-      )}
-    </div>
-  )
-}
-
-export default memo(InputsFormContent)
diff --git a/app/components/base/chat/embedded-chatbot/inputs-form/index.tsx b/app/components/base/chat/embedded-chatbot/inputs-form/index.tsx
deleted file mode 100644
index 4ac4aaa..0000000
--- a/app/components/base/chat/embedded-chatbot/inputs-form/index.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import { Message3Fill } from '@/app/components/base/icons/src/public/other'
-import Button from '@/app/components/base/button'
-import Divider from '@/app/components/base/divider'
-import InputsFormContent from '@/app/components/base/chat/embedded-chatbot/inputs-form/content'
-import { useEmbeddedChatbotContext } from '../context'
-import cn from '@/utils/classnames'
-
-type Props = {
-  collapsed: boolean
-  setCollapsed: (collapsed: boolean) => void
-}
-
-const InputsFormNode = ({
-  collapsed,
-  setCollapsed,
-}: Props) => {
-  const { t } = useTranslation()
-  const {
-    isMobile,
-    currentConversationId,
-    themeBuilder,
-    handleStartChat,
-  } = useEmbeddedChatbotContext()
-
-  return (
-    <div className={cn('mb-6 flex flex-col items-center px-4 pt-6', isMobile && 'mb-4 pt-4')}>
-      <div className={cn(
-        'w-full max-w-[672px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-md',
-        collapsed && 'border border-components-card-border bg-components-card-bg shadow-none',
-      )}>
-        <div className={cn(
-          'flex items-center gap-3 rounded-t-2xl px-6 py-4',
-          !collapsed && 'border-b border-divider-subtle',
-          isMobile && 'px-4 py-3',
-        )}>
-          <Message3Fill className='h-6 w-6 shrink-0' />
-          <div className='system-xl-semibold grow text-text-secondary'>{t('share.chat.chatSettingsTitle')}</div>
-          {collapsed && (
-            <Button className='uppercase text-text-tertiary' size='small' variant='ghost' onClick={() => setCollapsed(false)}>{t('common.operation.edit')}</Button>
-          )}
-          {!collapsed && currentConversationId && (
-            <Button className='uppercase text-text-tertiary' size='small' variant='ghost' onClick={() => setCollapsed(true)}>{t('common.operation.close')}</Button>
-          )}
-        </div>
-        {!collapsed && (
-          <div className={cn('p-6', isMobile && 'p-4')}>
-            <InputsFormContent />
-          </div>
-        )}
-        {!collapsed && !currentConversationId && (
-          <div className={cn('p-6', isMobile && 'p-4')}>
-            <Button
-              variant='primary'
-              className='w-full'
-              onClick={() => handleStartChat(() => setCollapsed(true))}
-              style={
-                themeBuilder?.theme
-                  ? {
-                    backgroundColor: themeBuilder?.theme.primaryColor,
-                  }
-                  : {}
-              }
-            >{t('share.chat.startChat')}</Button>
-          </div>
-        )}
-      </div>
-      {collapsed && (
-        <div className='flex w-full max-w-[720px] items-center py-4'>
-          <Divider bgStyle='gradient' className='h-px basis-1/2 rotate-180' />
-          <Divider bgStyle='gradient' className='h-px basis-1/2' />
-        </div>
-      )}
-    </div>
-  )
-}
-
-export default InputsFormNode
diff --git a/app/components/base/chat/embedded-chatbot/inputs-form/view-form-dropdown.tsx b/app/components/base/chat/embedded-chatbot/inputs-form/view-form-dropdown.tsx
deleted file mode 100644
index d6c8986..0000000
--- a/app/components/base/chat/embedded-chatbot/inputs-form/view-form-dropdown.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiChatSettingsLine,
-} from '@remixicon/react'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
-import { Message3Fill } from '@/app/components/base/icons/src/public/other'
-import InputsFormContent from '@/app/components/base/chat/embedded-chatbot/inputs-form/content'
-import cn from '@/utils/classnames'
-
-type Props = {
-  iconColor?: string
-}
-const ViewFormDropdown = ({ iconColor }: Props) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 4,
-      }}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => setOpen(v => !v)}
-      >
-        <ActionButton size='l' state={open ? ActionButtonState.Hover : ActionButtonState.Default}>
-          <RiChatSettingsLine className={cn('h-[18px] w-[18px]', iconColor)} />
-        </ActionButton>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className="z-50">
-        <div className='w-[400px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-lg backdrop-blur-sm'>
-          <div className='flex items-center gap-3 rounded-t-2xl border-b border-divider-subtle px-6 py-4'>
-            <Message3Fill className='h-6 w-6 shrink-0' />
-            <div className='system-xl-semibold grow text-text-secondary'>{t('share.chat.chatSettingsTitle')}</div>
-          </div>
-          <div className='p-6'>
-            <InputsFormContent />
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-
-  )
-}
-
-export default ViewFormDropdown
diff --git a/app/components/base/checkbox/assets/indeterminate-icon.tsx b/app/components/base/checkbox/assets/indeterminate-icon.tsx
deleted file mode 100644
index 56df8db..0000000
--- a/app/components/base/checkbox/assets/indeterminate-icon.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-const IndeterminateIcon = () => {
-  return (
-    <div data-testid='indeterminate-icon'>
-      <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none">
-        <path d="M2.5 6H9.5" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"/>
-      </svg>
-    </div>
-  )
-}
-
-export default IndeterminateIcon
diff --git a/app/components/base/checkbox/index.spec.tsx b/app/components/base/checkbox/index.spec.tsx
deleted file mode 100644
index 7ef901a..0000000
--- a/app/components/base/checkbox/index.spec.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react'
-import Checkbox from './index'
-
-describe('Checkbox Component', () => {
-  const mockProps = {
-    id: 'test',
-  }
-
-  it('renders unchecked checkbox by default', () => {
-    render(<Checkbox {...mockProps} />)
-    const checkbox = screen.getByTestId('checkbox-test')
-    expect(checkbox).toBeInTheDocument()
-    expect(checkbox).not.toHaveClass('bg-components-checkbox-bg')
-  })
-
-  it('renders checked checkbox when checked prop is true', () => {
-    render(<Checkbox {...mockProps} checked />)
-    const checkbox = screen.getByTestId('checkbox-test')
-    expect(checkbox).toHaveClass('bg-components-checkbox-bg')
-    expect(screen.getByTestId('check-icon-test')).toBeInTheDocument()
-  })
-
-  it('renders indeterminate state correctly', () => {
-    render(<Checkbox {...mockProps} indeterminate />)
-    expect(screen.getByTestId('indeterminate-icon')).toBeInTheDocument()
-  })
-
-  it('handles click events when not disabled', () => {
-    const onCheck = jest.fn()
-    render(<Checkbox {...mockProps} onCheck={onCheck} />)
-    const checkbox = screen.getByTestId('checkbox-test')
-
-    fireEvent.click(checkbox)
-    expect(onCheck).toHaveBeenCalledTimes(1)
-  })
-
-  it('does not handle click events when disabled', () => {
-    const onCheck = jest.fn()
-    render(<Checkbox {...mockProps} disabled onCheck={onCheck} />)
-    const checkbox = screen.getByTestId('checkbox-test')
-
-    fireEvent.click(checkbox)
-    expect(onCheck).not.toHaveBeenCalled()
-    expect(checkbox).toHaveClass('cursor-not-allowed')
-  })
-
-  it('applies custom className when provided', () => {
-    const customClass = 'custom-class'
-    render(<Checkbox {...mockProps} className={customClass} />)
-    const checkbox = screen.getByTestId('checkbox-test')
-    expect(checkbox).toHaveClass(customClass)
-  })
-
-  it('applies correct styles for disabled checked state', () => {
-    render(<Checkbox {...mockProps} checked disabled />)
-    const checkbox = screen.getByTestId('checkbox-test')
-    expect(checkbox).toHaveClass('bg-components-checkbox-bg-disabled-checked')
-    expect(checkbox).toHaveClass('cursor-not-allowed')
-  })
-
-  it('applies correct styles for disabled unchecked state', () => {
-    render(<Checkbox {...mockProps} disabled />)
-    const checkbox = screen.getByTestId('checkbox-test')
-    expect(checkbox).toHaveClass('bg-components-checkbox-bg-disabled')
-    expect(checkbox).toHaveClass('cursor-not-allowed')
-  })
-})
diff --git a/app/components/base/content-dialog/index.tsx b/app/components/base/content-dialog/index.tsx
deleted file mode 100644
index 861a36f..0000000
--- a/app/components/base/content-dialog/index.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import type { ReactNode } from 'react'
-import { Transition, TransitionChild } from '@headlessui/react'
-import classNames from '@/utils/classnames'
-
-type ContentDialogProps = {
-  className?: string
-  show: boolean
-  onClose?: () => void
-  children: ReactNode
-}
-
-const ContentDialog = ({
-  className,
-  show,
-  onClose,
-  children,
-}: ContentDialogProps) => {
-  return (
-    <Transition
-      show={show}
-      as="div"
-      className="absolute left-0 top-0 z-20 box-border h-full w-full p-2"
-    >
-      <TransitionChild>
-        <div
-          className={classNames(
-            'absolute left-0 inset-0 w-full bg-app-detail-overlay-bg',
-            'duration-300 ease-in data-[closed]:opacity-0',
-            'data-[enter]:opacity-100',
-            'data-[leave]:opacity-0',
-          )}
-          onClick={onClose}
-        />
-      </TransitionChild>
-
-      <TransitionChild>
-        <div className={classNames(
-          'absolute left-0 w-full bg-app-detail-bg border-r border-divider-burn',
-          'duration-100 ease-in data-[closed]:-translate-x-full',
-          'data-[enter]:ease-out data-[enter]:duration-300 data-[enter]:translate-x-0',
-          'data-[leave]:ease-in data-[leave]:duration-200 data-[leave]:-translate-x-full',
-          className,
-        )}>
-          {children}
-        </div>
-      </TransitionChild>
-    </Transition>
-  )
-}
-
-export default ContentDialog
diff --git a/app/components/base/date-and-time-picker/calendar/days-of-week.tsx b/app/components/base/date-and-time-picker/calendar/days-of-week.tsx
deleted file mode 100644
index f7a59f2..0000000
--- a/app/components/base/date-and-time-picker/calendar/days-of-week.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react'
-import { useDaysOfWeek } from '../hooks'
-
-export const DaysOfWeek = () => {
-  const daysOfWeek = useDaysOfWeek()
-
-  return (
-    <div className='grid grid-cols-7 gap-x-0.5 border-b-[0.5px] border-divider-regular p-2'>
-      {daysOfWeek.map(day => (
-        <div
-          key={day}
-          className='system-2xs-medium flex items-center justify-center text-text-tertiary'
-        >
-          {day}
-        </div>
-      ))}
-    </div>
-  )
-}
-
-export default React.memo(DaysOfWeek)
diff --git a/app/components/base/date-and-time-picker/calendar/index.tsx b/app/components/base/date-and-time-picker/calendar/index.tsx
deleted file mode 100644
index 00612fc..0000000
--- a/app/components/base/date-and-time-picker/calendar/index.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { FC } from 'react'
-import type { CalendarProps } from '../types'
-import { DaysOfWeek } from './days-of-week'
-import CalendarItem from './item'
-
-const Calendar: FC<CalendarProps> = ({
-  days,
-  selectedDate,
-  onDateClick,
-  wrapperClassName,
-}) => {
-  return <div className={wrapperClassName}>
-    <DaysOfWeek/>
-    <div className='grid grid-cols-7 gap-0.5 p-2'>
-      {
-        days.map(day => <CalendarItem
-          key={day.date.format('YYYY-MM-DD')}
-          day={day}
-          selectedDate={selectedDate}
-          onClick={onDateClick}
-        />)
-      }
-    </div>
-  </div>
-}
-
-export default Calendar
diff --git a/app/components/base/date-and-time-picker/calendar/item.tsx b/app/components/base/date-and-time-picker/calendar/item.tsx
deleted file mode 100644
index 20e0b84..0000000
--- a/app/components/base/date-and-time-picker/calendar/item.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import React, { type FC } from 'react'
-import type { CalendarItemProps } from '../types'
-import cn from '@/utils/classnames'
-import dayjs from '../utils/dayjs'
-
-const Item: FC<CalendarItemProps> = ({
-  day,
-  selectedDate,
-  onClick,
-}) => {
-  const { date, isCurrentMonth } = day
-  const isSelected = selectedDate?.isSame(date, 'date')
-  const isToday = date.isSame(dayjs(), 'date')
-
-  return (
-    <button
-      onClick={() => onClick(date)}
-      className={cn(
-        'system-sm-medium relative flex items-center justify-center rounded-lg px-1 py-2',
-        isCurrentMonth ? 'text-text-secondary' : 'text-text-quaternary hover:text-text-secondary',
-        isSelected ? 'system-sm-medium bg-components-button-primary-bg text-components-button-primary-text' : 'hover:bg-state-base-hover',
-      )}
-    >
-      {date.date()}
-      {isToday && <div className='absolute bottom-1 mx-auto h-1 w-1 rounded-full bg-components-button-primary-bg' />}
-    </button>
-  )
-}
-
-export default React.memo(Item)
diff --git a/app/components/base/date-and-time-picker/common/option-list-item.tsx b/app/components/base/date-and-time-picker/common/option-list-item.tsx
deleted file mode 100644
index d11a6e9..0000000
--- a/app/components/base/date-and-time-picker/common/option-list-item.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import React, { type FC, useEffect, useRef } from 'react'
-import cn from '@/utils/classnames'
-
-type OptionListItemProps = {
-  isSelected: boolean
-  onClick: () => void
-} & React.LiHTMLAttributes<HTMLLIElement>
-
-const OptionListItem: FC<OptionListItemProps> = ({
-  isSelected,
-  onClick,
-  children,
-}) => {
-  const listItemRef = useRef<HTMLLIElement>(null)
-
-  useEffect(() => {
-    if (isSelected)
-      listItemRef.current?.scrollIntoView({ behavior: 'instant' })
-  }, [])
-
-  return (
-    <li
-      ref={listItemRef}
-      className={cn(
-        'system-xs-medium flex cursor-pointer items-center justify-center rounded-md px-1.5 py-1 text-components-button-ghost-text',
-        isSelected ? 'bg-components-button-ghost-bg-hover' : 'hover:bg-components-button-ghost-bg-hover',
-      )}
-      onClick={() => {
-        listItemRef.current?.scrollIntoView({ behavior: 'smooth' })
-        onClick()
-      }}
-    >
-      {children}
-    </li>
-  )
-}
-
-export default React.memo(OptionListItem)
diff --git a/app/components/base/date-and-time-picker/date-picker/footer.tsx b/app/components/base/date-and-time-picker/date-picker/footer.tsx
deleted file mode 100644
index 6351a82..0000000
--- a/app/components/base/date-and-time-picker/date-picker/footer.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import React, { type FC } from 'react'
-import Button from '../../button'
-import { type DatePickerFooterProps, ViewType } from '../types'
-import { RiTimeLine } from '@remixicon/react'
-import cn from '@/utils/classnames'
-import { useTranslation } from 'react-i18next'
-
-const Footer: FC<DatePickerFooterProps> = ({
-  needTimePicker,
-  displayTime,
-  view,
-  handleClickTimePicker,
-  handleSelectCurrentDate,
-  handleConfirmDate,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className={cn(
-      'flex items-center justify-between border-t-[0.5px] border-divider-regular p-2',
-      !needTimePicker && 'justify-end',
-    )}>
-      {/* Time Picker */}
-      {needTimePicker && (
-        <button
-          type='button'
-          className='system-xs-medium flex items-center gap-x-[1px] rounded-md border-[0.5px] border-components-button-secondary-border bg-components-button-secondary-bg px-1.5
-                      py-1 text-components-button-secondary-accent-text shadow-xs shadow-shadow-shadow-3 backdrop-blur-[5px]'
-          onClick={handleClickTimePicker}
-        >
-          <RiTimeLine className='h-3.5 w-3.5' />
-          {view === ViewType.date && <span>{displayTime}</span>}
-          {view === ViewType.time && <span>{t('time.operation.pickDate')}</span>}
-        </button>
-      )}
-      <div className='flex items-center gap-x-1'>
-        {/* Now */}
-        <button
-          type='button'
-          className='system-xs-medium flex items-center justify-center px-1.5 py-1 text-components-button-secondary-accent-text'
-          onClick={handleSelectCurrentDate}
-        >
-          <span className='px-[3px]'>{t('time.operation.now')}</span>
-        </button>
-        {/* Confirm Button */}
-        <Button
-          variant='primary'
-          size='small'
-          className='w-16 px-1.5 py-1'
-          onClick={handleConfirmDate}
-        >
-          {t('time.operation.ok')}
-        </Button>
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(Footer)
diff --git a/app/components/base/date-and-time-picker/date-picker/header.tsx b/app/components/base/date-and-time-picker/date-picker/header.tsx
deleted file mode 100644
index 2631cdb..0000000
--- a/app/components/base/date-and-time-picker/date-picker/header.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import React, { type FC } from 'react'
-import { RiArrowDownSLine, RiArrowUpSLine } from '@remixicon/react'
-import type { DatePickerHeaderProps } from '../types'
-import { useMonths } from '../hooks'
-
-const Header: FC<DatePickerHeaderProps> = ({
-  handleOpenYearMonthPicker,
-  currentDate,
-  onClickNextMonth,
-  onClickPrevMonth,
-}) => {
-  const months = useMonths()
-
-  return (
-    <div className='mx-2 mt-2 flex items-center'>
-      <div className='flex-1'>
-        <button
-          onClick={handleOpenYearMonthPicker}
-          className='system-md-semibold flex items-center gap-x-0.5 rounded-lg px-2 py-1.5 text-text-primary hover:bg-state-base-hover'
-        >
-          <span>{`${months[currentDate.month()]} ${currentDate.year()}`}</span>
-          <RiArrowDownSLine className='h-4 w-4 text-text-tertiary' />
-        </button>
-      </div>
-      <button
-        onClick={onClickPrevMonth}
-        className='rounded-lg p-1.5 hover:bg-state-base-hover'
-      >
-        <RiArrowUpSLine className='h-[18px] w-[18px] text-text-secondary' />
-      </button>
-      <button
-        onClick={onClickNextMonth}
-        className='rounded-lg p-1.5 hover:bg-state-base-hover'
-      >
-        <RiArrowDownSLine className='h-[18px] w-[18px] text-text-secondary' />
-      </button>
-    </div>
-  )
-}
-
-export default React.memo(Header)
diff --git a/app/components/base/date-and-time-picker/date-picker/index.tsx b/app/components/base/date-and-time-picker/date-picker/index.tsx
deleted file mode 100644
index f4fc861..0000000
--- a/app/components/base/date-and-time-picker/date-picker/index.tsx
+++ /dev/null
@@ -1,309 +0,0 @@
-import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
-import { RiCalendarLine, RiCloseCircleFill } from '@remixicon/react'
-import cn from '@/utils/classnames'
-import type { DatePickerProps, Period } from '../types'
-import { ViewType } from '../types'
-import type { Dayjs } from 'dayjs'
-import dayjs, {
-  clearMonthMapCache,
-  cloneTime,
-  getDateWithTimezone,
-  getDaysInMonth,
-  getHourIn12Hour,
-} from '../utils/dayjs'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import DatePickerHeader from './header'
-import Calendar from '../calendar'
-import DatePickerFooter from './footer'
-import YearAndMonthPickerHeader from '../year-and-month-picker/header'
-import YearAndMonthPickerOptions from '../year-and-month-picker/options'
-import YearAndMonthPickerFooter from '../year-and-month-picker/footer'
-import TimePickerHeader from '../time-picker/header'
-import TimePickerOptions from '../time-picker/options'
-import { useTranslation } from 'react-i18next'
-
-const DatePicker = ({
-  value,
-  timezone,
-  onChange,
-  onClear,
-  placeholder,
-  needTimePicker = true,
-  renderTrigger,
-  triggerWrapClassName,
-  popupZIndexClassname = 'z-[11]',
-}: DatePickerProps) => {
-  const { t } = useTranslation()
-  const [isOpen, setIsOpen] = useState(false)
-  const [view, setView] = useState(ViewType.date)
-  const containerRef = useRef<HTMLDivElement>(null)
-  const isInitial = useRef(true)
-  const inputValue = useRef(value ? value.tz(timezone) : undefined).current
-  const defaultValue = useRef(getDateWithTimezone({ timezone })).current
-
-  const [currentDate, setCurrentDate] = useState(inputValue || defaultValue)
-  const [selectedDate, setSelectedDate] = useState(inputValue)
-
-  const [selectedMonth, setSelectedMonth] = useState((inputValue || defaultValue).month())
-  const [selectedYear, setSelectedYear] = useState((inputValue || defaultValue).year())
-
-  useEffect(() => {
-    const handleClickOutside = (event: MouseEvent) => {
-      if (containerRef.current && !containerRef.current.contains(event.target as Node)) {
-        setIsOpen(false)
-        setView(ViewType.date)
-      }
-    }
-    document.addEventListener('mousedown', handleClickOutside)
-    return () => document.removeEventListener('mousedown', handleClickOutside)
-  }, [])
-
-  useEffect(() => {
-    if (isInitial.current) {
-      isInitial.current = false
-      return
-    }
-    clearMonthMapCache()
-    if (value) {
-      const newValue = getDateWithTimezone({ date: value, timezone })
-      setCurrentDate(newValue)
-      setSelectedDate(newValue)
-      onChange(newValue)
-    }
-    else {
-      setCurrentDate(prev => getDateWithTimezone({ date: prev, timezone }))
-      setSelectedDate(prev => prev ? getDateWithTimezone({ date: prev, timezone }) : undefined)
-    }
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [timezone])
-
-  const handleClickTrigger = (e: React.MouseEvent) => {
-    e.stopPropagation()
-    if (isOpen) {
-      setIsOpen(false)
-      return
-    }
-    setView(ViewType.date)
-    setIsOpen(true)
-    if (value) {
-      setCurrentDate(value)
-      setSelectedDate(value)
-    }
-  }
-
-  const handleClear = (e: React.MouseEvent) => {
-    e.stopPropagation()
-    setSelectedDate(undefined)
-    if (!isOpen)
-      onClear()
-  }
-
-  const days = useMemo(() => {
-    return getDaysInMonth(currentDate)
-  }, [currentDate])
-
-  const handleClickNextMonth = useCallback(() => {
-    setCurrentDate(currentDate.clone().add(1, 'month'))
-  }, [currentDate])
-
-  const handleClickPrevMonth = useCallback(() => {
-    setCurrentDate(currentDate.clone().subtract(1, 'month'))
-  }, [currentDate])
-
-  const handleDateSelect = useCallback((day: Dayjs) => {
-    const newDate = cloneTime(day, selectedDate || getDateWithTimezone({ timezone }))
-    setCurrentDate(newDate)
-    setSelectedDate(newDate)
-  }, [selectedDate, timezone])
-
-  const handleSelectCurrentDate = () => {
-    const newDate = getDateWithTimezone({ timezone })
-    setCurrentDate(newDate)
-    setSelectedDate(newDate)
-    onChange(newDate)
-    setIsOpen(false)
-  }
-
-  const handleConfirmDate = () => {
-    // debugger
-    onChange(selectedDate ? selectedDate.tz(timezone) : undefined)
-    setIsOpen(false)
-  }
-
-  const handleClickTimePicker = () => {
-    if (view === ViewType.date) {
-      setView(ViewType.time)
-      return
-    }
-    if (view === ViewType.time)
-      setView(ViewType.date)
-  }
-
-  const handleTimeSelect = (hour: string, minute: string, period: Period) => {
-    const newTime = cloneTime(dayjs(), dayjs(`1/1/2000 ${hour}:${minute} ${period}`))
-    setSelectedDate((prev) => {
-      return prev ? cloneTime(prev, newTime) : newTime
-    })
-  }
-
-  const handleSelectHour = useCallback((hour: string) => {
-    const selectedTime = selectedDate || getDateWithTimezone({ timezone })
-    handleTimeSelect(hour, selectedTime.minute().toString().padStart(2, '0'), selectedTime.format('A') as Period)
-  }, [selectedDate, timezone])
-
-  const handleSelectMinute = useCallback((minute: string) => {
-    const selectedTime = selectedDate || getDateWithTimezone({ timezone })
-    handleTimeSelect(getHourIn12Hour(selectedTime).toString().padStart(2, '0'), minute, selectedTime.format('A') as Period)
-  }, [selectedDate, timezone])
-
-  const handleSelectPeriod = useCallback((period: Period) => {
-    const selectedTime = selectedDate || getDateWithTimezone({ timezone })
-    handleTimeSelect(getHourIn12Hour(selectedTime).toString().padStart(2, '0'), selectedTime.minute().toString().padStart(2, '0'), period)
-  }, [selectedDate, timezone])
-
-  const handleOpenYearMonthPicker = () => {
-    setSelectedMonth(currentDate.month())
-    setSelectedYear(currentDate.year())
-    setView(ViewType.yearMonth)
-  }
-
-  const handleCloseYearMonthPicker = useCallback(() => {
-    setView(ViewType.date)
-  }, [])
-
-  const handleMonthSelect = useCallback((month: number) => {
-    setSelectedMonth(month)
-  }, [])
-
-  const handleYearSelect = useCallback((year: number) => {
-    setSelectedYear(year)
-  }, [])
-
-  const handleYearMonthCancel = useCallback(() => {
-    setView(ViewType.date)
-  }, [])
-
-  const handleYearMonthConfirm = () => {
-    setCurrentDate(prev => prev.clone().month(selectedMonth).year(selectedYear))
-    setView(ViewType.date)
-  }
-
-  const timeFormat = needTimePicker ? 'MMMM D, YYYY hh:mm A' : 'MMMM D, YYYY'
-  const displayValue = value?.format(timeFormat) || ''
-  const displayTime = selectedDate?.format('hh:mm A') || '--:-- --'
-  const placeholderDate = isOpen && selectedDate ? selectedDate.format(timeFormat) : (placeholder || t('time.defaultPlaceholder'))
-
-  return (
-    <PortalToFollowElem
-      open={isOpen}
-      onOpenChange={setIsOpen}
-      placement='bottom-end'
-    >
-      <PortalToFollowElemTrigger className={triggerWrapClassName}>
-        {renderTrigger ? (renderTrigger({
-          value,
-          selectedDate,
-          isOpen,
-          handleClear,
-          handleClickTrigger,
-        })) : (
-          <div
-            className='group flex w-[252px] cursor-pointer items-center gap-x-0.5 rounded-lg bg-components-input-bg-normal px-2 py-1 hover:bg-state-base-hover-alt'
-            onClick={handleClickTrigger}
-          >
-            <input
-              className='system-xs-regular flex-1 cursor-pointer appearance-none truncate bg-transparent p-1
-            text-components-input-text-filled outline-none placeholder:text-components-input-text-placeholder'
-              readOnly
-              value={isOpen ? '' : displayValue}
-              placeholder={placeholderDate}
-            />
-            <RiCalendarLine className={cn(
-              'h-4 w-4 shrink-0 text-text-quaternary',
-              isOpen ? 'text-text-secondary' : 'group-hover:text-text-secondary',
-              (displayValue || (isOpen && selectedDate)) && 'group-hover:hidden',
-            )} />
-            <RiCloseCircleFill
-              className={cn(
-                'hidden h-4 w-4 shrink-0 text-text-quaternary',
-                (displayValue || (isOpen && selectedDate)) && 'hover:text-text-secondary group-hover:inline-block',
-              )}
-              onClick={handleClear}
-            />
-          </div>
-        )}
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className={popupZIndexClassname}>
-        <div className='mt-1 w-[252px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-lg shadow-shadow-shadow-5'>
-          {/* Header */}
-          {view === ViewType.date ? (
-            <DatePickerHeader
-              handleOpenYearMonthPicker={handleOpenYearMonthPicker}
-              currentDate={currentDate}
-              onClickNextMonth={handleClickNextMonth}
-              onClickPrevMonth={handleClickPrevMonth}
-            />
-          ) : view === ViewType.yearMonth ? (
-            <YearAndMonthPickerHeader
-              selectedYear={selectedYear}
-              selectedMonth={selectedMonth}
-              onClick={handleCloseYearMonthPicker}
-            />
-          ) : (
-            <TimePickerHeader />
-          )}
-
-          {/* Content */}
-          {
-            view === ViewType.date ? (
-              <Calendar
-                days={days}
-                selectedDate={selectedDate}
-                onDateClick={handleDateSelect}
-              />
-            ) : view === ViewType.yearMonth ? (
-              <YearAndMonthPickerOptions
-                selectedMonth={selectedMonth}
-                selectedYear={selectedYear}
-                handleMonthSelect={handleMonthSelect}
-                handleYearSelect={handleYearSelect}
-              />
-            ) : (
-              <TimePickerOptions
-                selectedTime={selectedDate}
-                handleSelectHour={handleSelectHour}
-                handleSelectMinute={handleSelectMinute}
-                handleSelectPeriod={handleSelectPeriod}
-              />
-            )
-          }
-
-          {/* Footer */}
-          {
-            [ViewType.date, ViewType.time].includes(view) ? (
-              <DatePickerFooter
-                needTimePicker={needTimePicker}
-                displayTime={displayTime}
-                view={view}
-                handleClickTimePicker={handleClickTimePicker}
-                handleSelectCurrentDate={handleSelectCurrentDate}
-                handleConfirmDate={handleConfirmDate}
-              />
-            ) : (
-              <YearAndMonthPickerFooter
-                handleYearMonthCancel={handleYearMonthCancel}
-                handleYearMonthConfirm={handleYearMonthConfirm}
-              />
-            )
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default DatePicker
diff --git a/app/components/base/date-and-time-picker/hooks.ts b/app/components/base/date-and-time-picker/hooks.ts
deleted file mode 100644
index b92a8e2..0000000
--- a/app/components/base/date-and-time-picker/hooks.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import dayjs from './utils/dayjs'
-import { Period } from './types'
-import { useTranslation } from 'react-i18next'
-
-const YEAR_RANGE = 100
-
-export const useDaysOfWeek = () => {
-  const { t } = useTranslation()
-  const daysOfWeek = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'].map(day => t(`time.daysInWeek.${day}`))
-
-  return daysOfWeek
-}
-
-export const useMonths = () => {
-  const { t } = useTranslation()
-  const months = [
-    'January',
-    'February',
-    'March',
-    'April',
-    'May',
-    'June',
-    'July',
-    'August',
-    'September',
-    'October',
-    'November',
-    'December',
-  ].map(month => t(`time.months.${month}`))
-
-  return months
-}
-
-export const useYearOptions = () => {
-  const yearOptions = Array.from({ length: 200 }, (_, i) => dayjs().year() - YEAR_RANGE / 2 + i)
-  return yearOptions
-}
-
-export const useTimeOptions = () => {
-  const hourOptions = Array.from({ length: 12 }, (_, i) => (i + 1).toString().padStart(2, '0'))
-  const minuteOptions = Array.from({ length: 60 }, (_, i) => i.toString().padStart(2, '0'))
-  const periodOptions = [Period.AM, Period.PM]
-
-  return {
-    hourOptions,
-    minuteOptions,
-    periodOptions,
-  }
-}
diff --git a/app/components/base/date-and-time-picker/time-picker/footer.tsx b/app/components/base/date-and-time-picker/time-picker/footer.tsx
deleted file mode 100644
index 47dd8b1..0000000
--- a/app/components/base/date-and-time-picker/time-picker/footer.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import React, { type FC } from 'react'
-import type { TimePickerFooterProps } from '../types'
-import Button from '../../button'
-import { useTranslation } from 'react-i18next'
-
-const Footer: FC<TimePickerFooterProps> = ({
-  handleSelectCurrentTime,
-  handleConfirm,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex items-center justify-end border-t-[0.5px] border-divider-regular p-2'>
-      <div className='flex items-center gap-x-1'>
-        {/* Now */}
-        <button
-          type='button'
-          className='system-xs-medium flex items-center justify-center px-1.5 py-1 text-components-button-secondary-accent-text'
-          onClick={handleSelectCurrentTime}
-        >
-          <span className='px-[3px]'>{t('time.operation.now')}</span>
-        </button>
-        {/* Confirm Button */}
-        <Button
-          variant='primary'
-          size='small'
-          className='w-16 px-1.5 py-1'
-          onClick={handleConfirm.bind(null)}
-        >
-          {t('time.operation.ok')}
-        </Button>
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(Footer)
diff --git a/app/components/base/date-and-time-picker/time-picker/header.tsx b/app/components/base/date-and-time-picker/time-picker/header.tsx
deleted file mode 100644
index 3d85b2e..0000000
--- a/app/components/base/date-and-time-picker/time-picker/header.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-
-const Header = () => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex flex-col border-b-[0.5px] border-divider-regular'>
-      <div className='system-md-semibold flex items-center px-2 py-1.5 text-text-primary'>
-        {t('time.title.pickTime')}
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(Header)
diff --git a/app/components/base/date-and-time-picker/time-picker/index.tsx b/app/components/base/date-and-time-picker/time-picker/index.tsx
deleted file mode 100644
index a5e666d..0000000
--- a/app/components/base/date-and-time-picker/time-picker/index.tsx
+++ /dev/null
@@ -1,170 +0,0 @@
-import React, { useCallback, useEffect, useRef, useState } from 'react'
-import type { Period, TimePickerProps } from '../types'
-import dayjs, { cloneTime, getDateWithTimezone, getHourIn12Hour } from '../utils/dayjs'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Footer from './footer'
-import Options from './options'
-import Header from './header'
-import { useTranslation } from 'react-i18next'
-import { RiCloseCircleFill, RiTimeLine } from '@remixicon/react'
-import cn from '@/utils/classnames'
-
-const TimePicker = ({
-  value,
-  timezone,
-  placeholder,
-  onChange,
-  onClear,
-  renderTrigger,
-}: TimePickerProps) => {
-  const { t } = useTranslation()
-  const [isOpen, setIsOpen] = useState(false)
-  const containerRef = useRef<HTMLDivElement>(null)
-  const isInitial = useRef(true)
-  const [selectedTime, setSelectedTime] = useState(value ? getDateWithTimezone({ timezone, date: value }) : undefined)
-
-  useEffect(() => {
-    const handleClickOutside = (event: MouseEvent) => {
-      if (containerRef.current && !containerRef.current.contains(event.target as Node))
-        setIsOpen(false)
-    }
-    document.addEventListener('mousedown', handleClickOutside)
-    return () => document.removeEventListener('mousedown', handleClickOutside)
-  }, [])
-
-  useEffect(() => {
-    if (isInitial.current) {
-      isInitial.current = false
-      return
-    }
-    if (value) {
-      const newValue = getDateWithTimezone({ date: value, timezone })
-      setSelectedTime(newValue)
-      onChange(newValue)
-    }
-    else {
-      setSelectedTime(prev => prev ? getDateWithTimezone({ date: prev, timezone }) : undefined)
-    }
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [timezone])
-
-  const handleClickTrigger = (e: React.MouseEvent) => {
-    e.stopPropagation()
-    if (isOpen) {
-      setIsOpen(false)
-      return
-    }
-    setIsOpen(true)
-    if (value)
-      setSelectedTime(value)
-  }
-
-  const handleClear = (e: React.MouseEvent) => {
-    e.stopPropagation()
-    setSelectedTime(undefined)
-    if (!isOpen)
-      onClear()
-  }
-
-  const handleTimeSelect = (hour: string, minute: string, period: Period) => {
-    const newTime = cloneTime(dayjs(), dayjs(`1/1/2000 ${hour}:${minute} ${period}`))
-    setSelectedTime((prev) => {
-      return prev ? cloneTime(prev, newTime) : newTime
-    })
-  }
-
-  const handleSelectHour = useCallback((hour: string) => {
-    const time = selectedTime || dayjs().startOf('day')
-    handleTimeSelect(hour, time.minute().toString().padStart(2, '0'), time.format('A') as Period)
-  }, [selectedTime])
-
-  const handleSelectMinute = useCallback((minute: string) => {
-    const time = selectedTime || dayjs().startOf('day')
-    handleTimeSelect(getHourIn12Hour(time).toString().padStart(2, '0'), minute, time.format('A') as Period)
-  }, [selectedTime])
-
-  const handleSelectPeriod = useCallback((period: Period) => {
-    const time = selectedTime || dayjs().startOf('day')
-    handleTimeSelect(getHourIn12Hour(time).toString().padStart(2, '0'), time.minute().toString().padStart(2, '0'), period)
-  }, [selectedTime])
-
-  const handleSelectCurrentTime = useCallback(() => {
-    const newDate = getDateWithTimezone({ timezone })
-    setSelectedTime(newDate)
-    onChange(newDate)
-    setIsOpen(false)
-  }, [onChange, timezone])
-
-  const handleConfirm = useCallback(() => {
-    onChange(selectedTime)
-    setIsOpen(false)
-  }, [onChange, selectedTime])
-
-  const timeFormat = 'hh:mm A'
-  const displayValue = value?.format(timeFormat) || ''
-  const placeholderDate = isOpen && selectedTime ? selectedTime.format(timeFormat) : (placeholder || t('time.defaultPlaceholder'))
-
-  return (
-    <PortalToFollowElem
-      open={isOpen}
-      onOpenChange={setIsOpen}
-      placement='bottom-end'
-    >
-      <PortalToFollowElemTrigger>
-        {renderTrigger ? (renderTrigger()) : (
-          <div
-            className='group flex w-[252px] cursor-pointer items-center gap-x-0.5 rounded-lg bg-components-input-bg-normal px-2 py-1 hover:bg-state-base-hover-alt'
-            onClick={handleClickTrigger}
-          >
-            <input
-              className='system-xs-regular flex-1 cursor-pointer appearance-none truncate bg-transparent p-1
-            text-components-input-text-filled outline-none placeholder:text-components-input-text-placeholder'
-              readOnly
-              value={isOpen ? '' : displayValue}
-              placeholder={placeholderDate}
-            />
-            <RiTimeLine className={cn(
-              'h-4 w-4 shrink-0 text-text-quaternary',
-              isOpen ? 'text-text-secondary' : 'group-hover:text-text-secondary',
-              (displayValue || (isOpen && selectedTime)) && 'group-hover:hidden',
-            )} />
-            <RiCloseCircleFill
-              className={cn(
-                'hidden h-4 w-4 shrink-0 text-text-quaternary',
-                (displayValue || (isOpen && selectedTime)) && 'hover:text-text-secondary group-hover:inline-block',
-              )}
-              onClick={handleClear}
-            />
-          </div>
-        )}
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-50'>
-        <div className='mt-1 w-[252px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-lg shadow-shadow-shadow-5'>
-          {/* Header */}
-          <Header />
-
-          {/* Time Options */}
-          <Options
-            selectedTime={selectedTime}
-            handleSelectHour={handleSelectHour}
-            handleSelectMinute={handleSelectMinute}
-            handleSelectPeriod={handleSelectPeriod}
-          />
-
-          {/* Footer */}
-          <Footer
-            handleSelectCurrentTime={handleSelectCurrentTime}
-            handleConfirm={handleConfirm}
-          />
-
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default TimePicker
diff --git a/app/components/base/date-and-time-picker/time-picker/options.tsx b/app/components/base/date-and-time-picker/time-picker/options.tsx
deleted file mode 100644
index 887f6f4..0000000
--- a/app/components/base/date-and-time-picker/time-picker/options.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import React, { type FC } from 'react'
-import { useTimeOptions } from '../hooks'
-import type { TimeOptionsProps } from '../types'
-import OptionListItem from '../common/option-list-item'
-
-const Options: FC<TimeOptionsProps> = ({
-  selectedTime,
-  handleSelectHour,
-  handleSelectMinute,
-  handleSelectPeriod,
-}) => {
-  const { hourOptions, minuteOptions, periodOptions } = useTimeOptions()
-
-  return (
-    <div className='grid grid-cols-3 gap-x-1 p-2'>
-      {/* Hour */}
-      <ul className='no-scrollbar flex h-[208px] flex-col gap-y-0.5 overflow-y-auto pb-[184px]'>
-        {
-          hourOptions.map((hour) => {
-            const isSelected = selectedTime?.format('hh') === hour
-            return (
-              <OptionListItem
-                key={hour}
-                isSelected={isSelected}
-                onClick={handleSelectHour.bind(null, hour)}
-              >
-                {hour}
-              </OptionListItem>
-            )
-          })
-        }
-      </ul>
-      {/* Minute */}
-      <ul className='no-scrollbar flex h-[208px] flex-col gap-y-0.5 overflow-y-auto pb-[184px]'>
-        {
-          minuteOptions.map((minute) => {
-            const isSelected = selectedTime?.format('mm') === minute
-            return (
-              <OptionListItem
-                key={minute}
-                isSelected={isSelected}
-                onClick={handleSelectMinute.bind(null, minute)}
-              >
-                {minute}
-              </OptionListItem>
-            )
-          })
-        }
-      </ul>
-      {/* Period */}
-      <ul className='no-scrollbar flex h-[208px] flex-col gap-y-0.5 overflow-y-auto pb-[184px]'>
-        {
-          periodOptions.map((period) => {
-            const isSelected = selectedTime?.format('A') === period
-            return (
-              <OptionListItem
-                key={period}
-                isSelected={isSelected}
-                onClick={handleSelectPeriod.bind(null, period)}
-              >
-                {period}
-              </OptionListItem>
-            )
-          })
-        }
-      </ul>
-    </div>
-  )
-}
-
-export default React.memo(Options)
diff --git a/app/components/base/date-and-time-picker/types.ts b/app/components/base/date-and-time-picker/types.ts
deleted file mode 100644
index 214c0f0..0000000
--- a/app/components/base/date-and-time-picker/types.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import type { Dayjs } from 'dayjs'
-
-export enum ViewType {
-  date = 'date',
-  yearMonth = 'yearMonth',
-  time = 'time',
-}
-
-export enum Period {
-  AM = 'AM',
-  PM = 'PM',
-}
-
-export type TriggerProps = {
-  value: Dayjs | undefined
-  selectedDate: Dayjs | undefined
-  isOpen: boolean
-  handleClear: (e: React.MouseEvent) => void
-  handleClickTrigger: (e: React.MouseEvent) => void
-}
-
-export type DatePickerProps = {
-  value: Dayjs | undefined
-  timezone?: string
-  placeholder?: string
-  needTimePicker?: boolean
-  onChange: (date: Dayjs | undefined) => void
-  onClear: () => void
-  triggerWrapClassName?: string
-  renderTrigger?: (props: TriggerProps) => React.ReactNode
-  popupZIndexClassname?: string
-}
-
-export type DatePickerHeaderProps = {
-  handleOpenYearMonthPicker: () => void
-  currentDate: Dayjs
-  onClickNextMonth: () => void
-  onClickPrevMonth: () => void
-}
-
-export type DatePickerFooterProps = {
-  needTimePicker: boolean
-  displayTime: string
-  view: ViewType
-  handleClickTimePicker: () => void
-  handleSelectCurrentDate: () => void
-  handleConfirmDate: () => void
-}
-
-export type TimePickerProps = {
-  value: Dayjs | undefined
-  timezone?: string
-  placeholder?: string
-  onChange: (date: Dayjs | undefined) => void
-  onClear: () => void
-  renderTrigger?: () => React.ReactNode
-}
-
-export type TimePickerFooterProps = {
-  handleSelectCurrentTime: () => void
-  handleConfirm: () => void
-}
-
-export type Day = {
-  date: Dayjs
-  isCurrentMonth: boolean
-}
-
-export type CalendarProps = {
-  days: Day[]
-  selectedDate: Dayjs | undefined
-  onDateClick: (date: Dayjs) => void
-  wrapperClassName?: string
-}
-
-export type CalendarItemProps = {
-  day: Day
-  selectedDate: Dayjs | undefined
-  onClick: (date: Dayjs) => void
-}
-
-export type TimeOptionsProps = {
-  selectedTime: Dayjs | undefined
-  handleSelectHour: (hour: string) => void
-  handleSelectMinute: (minute: string) => void
-  handleSelectPeriod: (period: Period) => void
-}
-
-export type YearAndMonthPickerHeaderProps = {
-  selectedYear: number
-  selectedMonth: number
-  onClick: () => void
-}
-
-export type YearAndMonthPickerOptionsProps = {
-  selectedYear: number
-  selectedMonth: number
-  handleYearSelect: (year: number) => void
-  handleMonthSelect: (month: number) => void
-}
-
-export type YearAndMonthPickerFooterProps = {
-  handleYearMonthCancel: () => void
-  handleYearMonthConfirm: () => void
-}
diff --git a/app/components/base/date-and-time-picker/utils/dayjs.ts b/app/components/base/date-and-time-picker/utils/dayjs.ts
deleted file mode 100644
index 0928fa5..0000000
--- a/app/components/base/date-and-time-picker/utils/dayjs.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import dayjs, { type Dayjs } from 'dayjs'
-import type { Day } from '../types'
-import utc from 'dayjs/plugin/utc'
-import timezone from 'dayjs/plugin/timezone'
-
-dayjs.extend(utc)
-dayjs.extend(timezone)
-
-export default dayjs
-
-const monthMaps: Record<string, Day[]> = {}
-
-export const cloneTime = (targetDate: Dayjs, sourceDate: Dayjs) => {
-  return targetDate.clone()
-    .set('hour', sourceDate.hour())
-    .set('minute', sourceDate.minute())
-}
-
-export const getDaysInMonth = (currentDate: Dayjs) => {
-  const key = currentDate.format('YYYY-MM')
-  // return the cached days
-  if (monthMaps[key])
-    return monthMaps[key]
-
-  const daysInCurrentMonth = currentDate.daysInMonth()
-  const firstDay = currentDate.startOf('month').day()
-  const lastDay = currentDate.endOf('month').day()
-  const lastDayInLastMonth = currentDate.clone().subtract(1, 'month').endOf('month')
-  const firstDayInNextMonth = currentDate.clone().add(1, 'month').startOf('month')
-  const days: Day[] = []
-  const daysInOneWeek = 7
-  const totalLines = 6
-
-  // Add cells for days before the first day of the month
-  for (let i = firstDay - 1; i >= 0; i--) {
-    const date = cloneTime(lastDayInLastMonth.subtract(i, 'day'), currentDate)
-    days.push({
-      date,
-      isCurrentMonth: false,
-    })
-  }
-
-  // Add days of the month
-  for (let i = 1; i <= daysInCurrentMonth; i++) {
-    const date = cloneTime(currentDate.startOf('month').add(i - 1, 'day'), currentDate)
-    days.push({
-      date,
-      isCurrentMonth: true,
-    })
-  }
-
-  // Add cells for days after the last day of the month
-  const totalLinesOfCurrentMonth = Math.ceil((daysInCurrentMonth - ((daysInOneWeek - firstDay) + lastDay + 1)) / 7) + 2
-  const needAdditionalLine = totalLinesOfCurrentMonth < totalLines
-  for (let i = 0; lastDay + i < (needAdditionalLine ? 2 * daysInOneWeek - 1 : daysInOneWeek - 1); i++) {
-    const date = cloneTime(firstDayInNextMonth.add(i, 'day'), currentDate)
-    days.push({
-      date,
-      isCurrentMonth: false,
-    })
-  }
-
-  // cache the days
-  monthMaps[key] = days
-  return days
-}
-
-export const clearMonthMapCache = () => {
-  for (const key in monthMaps)
-    delete monthMaps[key]
-}
-
-export const getHourIn12Hour = (date: Dayjs) => {
-  const hour = date.hour()
-  return hour === 0 ? 12 : hour >= 12 ? hour - 12 : hour
-}
-
-export const getDateWithTimezone = (props: { date?: Dayjs, timezone?: string }) => {
-  return props.date ? dayjs.tz(props.date, props.timezone) : dayjs().tz(props.timezone)
-}
diff --git a/app/components/base/date-and-time-picker/year-and-month-picker/footer.tsx b/app/components/base/date-and-time-picker/year-and-month-picker/footer.tsx
deleted file mode 100644
index 8e0566a..0000000
--- a/app/components/base/date-and-time-picker/year-and-month-picker/footer.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import type { FC } from 'react'
-import React from 'react'
-import Button from '../../button'
-import type { YearAndMonthPickerFooterProps } from '../types'
-import { useTranslation } from 'react-i18next'
-
-const Footer: FC<YearAndMonthPickerFooterProps> = ({
-  handleYearMonthCancel,
-  handleYearMonthConfirm,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='grid grid-cols-2 gap-x-1 p-2'>
-      <Button size='small' onClick={handleYearMonthCancel}>
-        {t('time.operation.cancel')}
-      </Button>
-      <Button variant='primary' size='small' onClick={handleYearMonthConfirm}>
-        {t('time.operation.ok')}
-      </Button>
-    </div>
-  )
-}
-
-export default React.memo(Footer)
diff --git a/app/components/base/date-and-time-picker/year-and-month-picker/header.tsx b/app/components/base/date-and-time-picker/year-and-month-picker/header.tsx
deleted file mode 100644
index 63923e6..0000000
--- a/app/components/base/date-and-time-picker/year-and-month-picker/header.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import React, { type FC } from 'react'
-import type { YearAndMonthPickerHeaderProps } from '../types'
-import { useMonths } from '../hooks'
-import { RiArrowUpSLine } from '@remixicon/react'
-
-const Header: FC<YearAndMonthPickerHeaderProps> = ({
-  selectedYear,
-  selectedMonth,
-  onClick,
-}) => {
-  const months = useMonths()
-
-  return (
-    <div className='flex border-b-[0.5px] border-divider-regular p-2 pb-1'>
-      {/* Year and Month */}
-      <button
-        onClick={onClick}
-        className='system-md-semibold flex items-center gap-x-0.5 rounded-lg px-2 py-1.5 text-text-primary hover:bg-state-base-hover'
-      >
-        <span>{`${months[selectedMonth]} ${selectedYear}`}</span>
-        <RiArrowUpSLine className='h-4 w-4 text-text-tertiary' />
-      </button>
-    </div>
-  )
-}
-
-export default React.memo(Header)
diff --git a/app/components/base/date-and-time-picker/year-and-month-picker/options.tsx b/app/components/base/date-and-time-picker/year-and-month-picker/options.tsx
deleted file mode 100644
index 684db79..0000000
--- a/app/components/base/date-and-time-picker/year-and-month-picker/options.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import React, { type FC } from 'react'
-import type { YearAndMonthPickerOptionsProps } from '../types'
-import { useMonths, useYearOptions } from '../hooks'
-import OptionListItem from '../common/option-list-item'
-
-const Options: FC<YearAndMonthPickerOptionsProps> = ({
-  selectedMonth,
-  selectedYear,
-  handleMonthSelect,
-  handleYearSelect,
-}) => {
-  const months = useMonths()
-  const yearOptions = useYearOptions()
-
-  return (
-    <div className='grid grid-cols-2 gap-x-1 p-2'>
-      {/* Month Picker */}
-      <ul className='no-scrollbar flex h-[208px] flex-col gap-y-0.5 overflow-y-auto pb-[184px]'>
-        {
-          months.map((month, index) => {
-            const isSelected = selectedMonth === index
-            return (
-              <OptionListItem
-                key={month}
-                isSelected={isSelected}
-                onClick={handleMonthSelect.bind(null, index)}
-              >
-                {month}
-              </OptionListItem>
-            )
-          })
-        }
-      </ul>
-      {/* Year Picker */}
-      <ul className='no-scrollbar flex h-[208px] flex-col gap-y-0.5 overflow-y-auto pb-[184px]'>
-        {
-          yearOptions.map((year) => {
-            const isSelected = selectedYear === year
-            return (
-              <OptionListItem
-                key={year}
-                isSelected={isSelected}
-                onClick={handleYearSelect.bind(null, year)}
-              >
-                {year}
-              </OptionListItem>
-            )
-          })
-        }
-      </ul>
-    </div>
-  )
-}
-
-export default React.memo(Options)
diff --git a/app/components/base/divider/index.spec.tsx b/app/components/base/divider/index.spec.tsx
deleted file mode 100644
index d33bfeb..0000000
--- a/app/components/base/divider/index.spec.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import { render } from '@testing-library/react'
-import '@testing-library/jest-dom'
-import Divider from './index'
-
-describe('Divider', () => {
-  it('renders with default props', () => {
-    const { container } = render(<Divider />)
-    const divider = container.firstChild as HTMLElement
-    expect(divider).toHaveClass('w-full h-[0.5px] my-2')
-    expect(divider).toHaveClass('bg-divider-regular')
-  })
-
-  it('renders horizontal solid divider correctly', () => {
-    const { container } = render(<Divider type="horizontal" bgStyle="solid" />)
-    const divider = container.firstChild as HTMLElement
-    expect(divider).toHaveClass('w-full h-[0.5px] my-2')
-    expect(divider).toHaveClass('bg-divider-regular')
-  })
-
-  it('renders vertical solid divider correctly', () => {
-    const { container } = render(<Divider type="vertical" bgStyle="solid" />)
-    const divider = container.firstChild as HTMLElement
-    expect(divider).toHaveClass('w-[1px] h-full mx-2')
-    expect(divider).toHaveClass('bg-divider-regular')
-  })
-
-  it('renders horizontal gradient divider correctly', () => {
-    const { container } = render(<Divider type="horizontal" bgStyle="gradient" />)
-    const divider = container.firstChild as HTMLElement
-    expect(divider).toHaveClass('w-full h-[0.5px] my-2')
-    expect(divider).toHaveClass('bg-gradient-to-r from-divider-regular to-background-gradient-mask-transparent')
-  })
-
-  it('renders vertical gradient divider correctly', () => {
-    const { container } = render(<Divider type="vertical" bgStyle="gradient" />)
-    const divider = container.firstChild as HTMLElement
-    expect(divider).toHaveClass('w-[1px] h-full mx-2')
-    expect(divider).toHaveClass('bg-gradient-to-r from-divider-regular to-background-gradient-mask-transparent')
-  })
-
-  it('applies custom className correctly', () => {
-    const customClass = 'test-custom-class'
-    const { container } = render(<Divider className={customClass} />)
-    const divider = container.firstChild as HTMLElement
-    expect(divider).toHaveClass(customClass)
-    expect(divider).toHaveClass('w-full h-[0.5px] my-2')
-  })
-
-  it('applies custom style correctly', () => {
-    const customStyle = { margin: '10px' }
-    const { container } = render(<Divider style={customStyle} />)
-    const divider = container.firstChild as HTMLElement
-    expect(divider).toHaveStyle('margin: 10px')
-  })
-})
diff --git a/app/components/base/features/new-feature-panel/annotation-reply/annotation-ctrl-button.tsx b/app/components/base/features/new-feature-panel/annotation-reply/annotation-ctrl-button.tsx
deleted file mode 100644
index 3050249..0000000
--- a/app/components/base/features/new-feature-panel/annotation-reply/annotation-ctrl-button.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiEditLine,
-  RiFileEditLine,
-} from '@remixicon/react'
-import ActionButton from '@/app/components/base/action-button'
-import Tooltip from '@/app/components/base/tooltip'
-import { addAnnotation } from '@/service/annotation'
-import Toast from '@/app/components/base/toast'
-import { useProviderContext } from '@/context/provider-context'
-import { useModalContext } from '@/context/modal-context'
-
-type Props = {
-  appId: string
-  messageId?: string
-  cached: boolean
-  query: string
-  answer: string
-  onAdded: (annotationId: string, authorName: string) => void
-  onEdit: () => void
-}
-
-const AnnotationCtrlButton: FC<Props> = ({
-  cached,
-  query,
-  answer,
-  appId,
-  messageId,
-  onAdded,
-  onEdit,
-}) => {
-  const { t } = useTranslation()
-  const { plan, enableBilling } = useProviderContext()
-  const isAnnotationFull = (enableBilling && plan.usage.annotatedResponse >= plan.total.annotatedResponse)
-  const { setShowAnnotationFullModal } = useModalContext()
-  const handleAdd = async () => {
-    if (isAnnotationFull) {
-      setShowAnnotationFullModal()
-      return
-    }
-    const res: any = await addAnnotation(appId, {
-      message_id: messageId,
-      question: query,
-      answer,
-    })
-    Toast.notify({
-      message: t('common.api.actionSuccess') as string,
-      type: 'success',
-    })
-    onAdded(res.id, res.account?.name)
-  }
-
-  return (
-    <>
-      {cached && (
-        <Tooltip
-          popupContent={t('appDebug.feature.annotation.edit')}
-        >
-          <ActionButton onClick={onEdit}>
-            <RiEditLine className='h-4 w-4' />
-          </ActionButton>
-        </Tooltip>
-      )}
-      {!cached && answer && (
-        <Tooltip
-          popupContent={t('appDebug.feature.annotation.add')}
-        >
-          <ActionButton onClick={handleAdd}>
-            <RiFileEditLine className='h-4 w-4' />
-          </ActionButton>
-        </Tooltip>
-      )}
-    </>
-  )
-}
-export default React.memo(AnnotationCtrlButton)
diff --git a/app/components/base/file-uploader/utils.spec.ts b/app/components/base/file-uploader/utils.spec.ts
deleted file mode 100644
index c8cf9fb..0000000
--- a/app/components/base/file-uploader/utils.spec.ts
+++ /dev/null
@@ -1,614 +0,0 @@
-import mime from 'mime'
-import { upload } from '@/service/base'
-import {
-  downloadFile,
-  fileIsUploaded,
-  fileUpload,
-  getFileAppearanceType,
-  getFileExtension,
-  getFileNameFromUrl,
-  getFilesInLogs,
-  getProcessedFiles,
-  getProcessedFilesFromResponse,
-  getSupportFileExtensionList,
-  getSupportFileType,
-  isAllowedFileExtension,
-} from './utils'
-import { FileAppearanceTypeEnum } from './types'
-import { SupportUploadFileTypes } from '@/app/components/workflow/types'
-import { TransferMethod } from '@/types/app'
-import { FILE_EXTS } from '../prompt-editor/constants'
-
-jest.mock('mime', () => ({
-  __esModule: true,
-  default: {
-    getExtension: jest.fn(),
-  },
-}))
-
-jest.mock('@/service/base', () => ({
-  upload: jest.fn(),
-}))
-
-describe('file-uploader utils', () => {
-  beforeEach(() => {
-    jest.clearAllMocks()
-  })
-
-  describe('fileUpload', () => {
-    it('should handle successful file upload', async () => {
-      const mockFile = new File(['test'], 'test.txt')
-      const mockCallbacks = {
-        onProgressCallback: jest.fn(),
-        onSuccessCallback: jest.fn(),
-        onErrorCallback: jest.fn(),
-      }
-
-      jest.mocked(upload).mockResolvedValue({ id: '123' })
-
-      await fileUpload({
-        file: mockFile,
-        ...mockCallbacks,
-      })
-
-      expect(upload).toHaveBeenCalled()
-      expect(mockCallbacks.onSuccessCallback).toHaveBeenCalledWith({ id: '123' })
-    })
-  })
-
-  describe('getFileExtension', () => {
-    it('should get extension from mimetype', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('pdf')
-      expect(getFileExtension('file', 'application/pdf')).toBe('pdf')
-    })
-
-    it('should get extension from filename if mimetype fails', () => {
-      jest.mocked(mime.getExtension).mockReturnValue(null)
-      expect(getFileExtension('file.txt', '')).toBe('txt')
-      expect(getFileExtension('file.txt.docx', '')).toBe('docx')
-      expect(getFileExtension('file', '')).toBe('')
-    })
-
-    it('should return empty string for remote files', () => {
-      expect(getFileExtension('file.txt', '', true)).toBe('')
-    })
-  })
-
-  describe('getFileAppearanceType', () => {
-    it('should identify gif files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('gif')
-      expect(getFileAppearanceType('image.gif', 'image/gif'))
-        .toBe(FileAppearanceTypeEnum.gif)
-    })
-
-    it('should identify image files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('jpg')
-      expect(getFileAppearanceType('image.jpg', 'image/jpeg'))
-        .toBe(FileAppearanceTypeEnum.image)
-
-      jest.mocked(mime.getExtension).mockReturnValue('jpeg')
-      expect(getFileAppearanceType('image.jpeg', 'image/jpeg'))
-        .toBe(FileAppearanceTypeEnum.image)
-
-      jest.mocked(mime.getExtension).mockReturnValue('png')
-      expect(getFileAppearanceType('image.png', 'image/png'))
-        .toBe(FileAppearanceTypeEnum.image)
-
-      jest.mocked(mime.getExtension).mockReturnValue('webp')
-      expect(getFileAppearanceType('image.webp', 'image/webp'))
-        .toBe(FileAppearanceTypeEnum.image)
-
-      jest.mocked(mime.getExtension).mockReturnValue('svg')
-      expect(getFileAppearanceType('image.svg', 'image/svgxml'))
-        .toBe(FileAppearanceTypeEnum.image)
-    })
-
-    it('should identify video files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('mp4')
-      expect(getFileAppearanceType('video.mp4', 'video/mp4'))
-        .toBe(FileAppearanceTypeEnum.video)
-
-      jest.mocked(mime.getExtension).mockReturnValue('mov')
-      expect(getFileAppearanceType('video.mov', 'video/quicktime'))
-        .toBe(FileAppearanceTypeEnum.video)
-
-      jest.mocked(mime.getExtension).mockReturnValue('mpeg')
-      expect(getFileAppearanceType('video.mpeg', 'video/mpeg'))
-        .toBe(FileAppearanceTypeEnum.video)
-
-      jest.mocked(mime.getExtension).mockReturnValue('webm')
-      expect(getFileAppearanceType('video.web', 'video/webm'))
-        .toBe(FileAppearanceTypeEnum.video)
-    })
-
-    it('should identify audio files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('mp3')
-      expect(getFileAppearanceType('audio.mp3', 'audio/mpeg'))
-        .toBe(FileAppearanceTypeEnum.audio)
-
-      jest.mocked(mime.getExtension).mockReturnValue('m4a')
-      expect(getFileAppearanceType('audio.m4a', 'audio/mp4'))
-        .toBe(FileAppearanceTypeEnum.audio)
-
-      jest.mocked(mime.getExtension).mockReturnValue('wav')
-      expect(getFileAppearanceType('audio.wav', 'audio/vnd.wav'))
-        .toBe(FileAppearanceTypeEnum.audio)
-
-      jest.mocked(mime.getExtension).mockReturnValue('amr')
-      expect(getFileAppearanceType('audio.amr', 'audio/AMR'))
-        .toBe(FileAppearanceTypeEnum.audio)
-
-      jest.mocked(mime.getExtension).mockReturnValue('mpga')
-      expect(getFileAppearanceType('audio.mpga', 'audio/mpeg'))
-        .toBe(FileAppearanceTypeEnum.audio)
-    })
-
-    it('should identify code files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('html')
-      expect(getFileAppearanceType('index.html', 'text/html'))
-        .toBe(FileAppearanceTypeEnum.code)
-    })
-
-    it('should identify PDF files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('pdf')
-      expect(getFileAppearanceType('doc.pdf', 'application/pdf'))
-        .toBe(FileAppearanceTypeEnum.pdf)
-    })
-
-    it('should identify markdown files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('md')
-      expect(getFileAppearanceType('file.md', 'text/markdown'))
-        .toBe(FileAppearanceTypeEnum.markdown)
-
-      jest.mocked(mime.getExtension).mockReturnValue('markdown')
-      expect(getFileAppearanceType('file.markdown', 'text/markdown'))
-        .toBe(FileAppearanceTypeEnum.markdown)
-
-      jest.mocked(mime.getExtension).mockReturnValue('mdx')
-      expect(getFileAppearanceType('file.mdx', 'text/mdx'))
-        .toBe(FileAppearanceTypeEnum.markdown)
-    })
-
-    it('should identify excel files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('xlsx')
-      expect(getFileAppearanceType('doc.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))
-        .toBe(FileAppearanceTypeEnum.excel)
-
-      jest.mocked(mime.getExtension).mockReturnValue('xls')
-      expect(getFileAppearanceType('doc.xls', 'application/vnd.ms-excel'))
-        .toBe(FileAppearanceTypeEnum.excel)
-    })
-
-    it('should identify word files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('doc')
-      expect(getFileAppearanceType('doc.doc', 'application/msword'))
-        .toBe(FileAppearanceTypeEnum.word)
-
-      jest.mocked(mime.getExtension).mockReturnValue('docx')
-      expect(getFileAppearanceType('doc.docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'))
-        .toBe(FileAppearanceTypeEnum.word)
-    })
-
-    it('should identify word files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('ppt')
-      expect(getFileAppearanceType('doc.ppt', 'application/vnd.ms-powerpoint'))
-        .toBe(FileAppearanceTypeEnum.ppt)
-
-      jest.mocked(mime.getExtension).mockReturnValue('pptx')
-      expect(getFileAppearanceType('doc.pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'))
-        .toBe(FileAppearanceTypeEnum.ppt)
-    })
-
-    it('should identify document files', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('txt')
-      expect(getFileAppearanceType('file.txt', 'text/plain'))
-        .toBe(FileAppearanceTypeEnum.document)
-
-      jest.mocked(mime.getExtension).mockReturnValue('csv')
-      expect(getFileAppearanceType('file.csv', 'text/csv'))
-        .toBe(FileAppearanceTypeEnum.document)
-
-      jest.mocked(mime.getExtension).mockReturnValue('msg')
-      expect(getFileAppearanceType('file.msg', 'application/vnd.ms-outlook'))
-        .toBe(FileAppearanceTypeEnum.document)
-
-      jest.mocked(mime.getExtension).mockReturnValue('eml')
-      expect(getFileAppearanceType('file.eml', 'message/rfc822'))
-        .toBe(FileAppearanceTypeEnum.document)
-
-      jest.mocked(mime.getExtension).mockReturnValue('xml')
-      expect(getFileAppearanceType('file.xml', 'application/rssxml'))
-        .toBe(FileAppearanceTypeEnum.document)
-
-      jest.mocked(mime.getExtension).mockReturnValue('epub')
-      expect(getFileAppearanceType('file.epub', 'application/epubzip'))
-        .toBe(FileAppearanceTypeEnum.document)
-    })
-
-    it('should handle null mime extension', () => {
-      jest.mocked(mime.getExtension).mockReturnValue(null)
-      expect(getFileAppearanceType('file.txt', 'text/plain'))
-        .toBe(FileAppearanceTypeEnum.document)
-    })
-  })
-
-  describe('getSupportFileType', () => {
-    it('should return custom type when isCustom is true', () => {
-      expect(getSupportFileType('file.txt', '', true))
-        .toBe(SupportUploadFileTypes.custom)
-    })
-
-    it('should return file type when isCustom is false', () => {
-      expect(getSupportFileType('file.txt', 'text/plain'))
-        .toBe(SupportUploadFileTypes.document)
-    })
-  })
-
-  describe('getProcessedFiles', () => {
-    it('should process files correctly', () => {
-      const files = [{
-        id: '123',
-        name: 'test.txt',
-        size: 1024,
-        type: 'text/plain',
-        progress: 100,
-        supportFileType: 'document',
-        transferMethod: TransferMethod.remote_url,
-        url: 'http://example.com',
-        uploadedId: '123',
-      }]
-
-      const result = getProcessedFiles(files)
-      expect(result[0]).toEqual({
-        type: 'document',
-        transfer_method: TransferMethod.remote_url,
-        url: 'http://example.com',
-        upload_file_id: '123',
-      })
-    })
-  })
-
-  describe('getProcessedFilesFromResponse', () => {
-    it('should process files correctly', () => {
-      const files = [{
-        related_id: '2a38e2ca-1295-415d-a51d-65d4ff9912d9',
-        extension: '.jpeg',
-        filename: 'test.jpeg',
-        size: 2881761,
-        mime_type: 'image/jpeg',
-        transfer_method: TransferMethod.local_file,
-        type: 'image',
-        url: 'https://upload.dify.dev/files/xxx/file-preview',
-      }]
-
-      const result = getProcessedFilesFromResponse(files)
-      expect(result[0]).toEqual({
-        id: '2a38e2ca-1295-415d-a51d-65d4ff9912d9',
-        name: 'test.jpeg',
-        size: 2881761,
-        type: 'image/jpeg',
-        progress: 100,
-        transferMethod: TransferMethod.local_file,
-        supportFileType: 'image',
-        uploadedId: '2a38e2ca-1295-415d-a51d-65d4ff9912d9',
-        url: 'https://upload.dify.dev/files/xxx/file-preview',
-      })
-    })
-  })
-
-  describe('getFileNameFromUrl', () => {
-    it('should extract filename from URL', () => {
-      expect(getFileNameFromUrl('http://example.com/path/file.txt'))
-        .toBe('file.txt')
-    })
-  })
-
-  describe('getSupportFileExtensionList', () => {
-    it('should handle custom file types', () => {
-      const result = getSupportFileExtensionList(
-        [SupportUploadFileTypes.custom],
-        ['.pdf', '.txt', '.doc'],
-      )
-      expect(result).toEqual(['PDF', 'TXT', 'DOC'])
-    })
-
-    it('should handle standard file types', () => {
-      const mockFileExts = {
-        image: ['JPG', 'PNG'],
-        document: ['PDF', 'TXT'],
-        video: ['MP4', 'MOV'],
-      }
-
-      // Temporarily mock FILE_EXTS
-      const originalFileExts = { ...FILE_EXTS }
-      Object.assign(FILE_EXTS, mockFileExts)
-
-      const result = getSupportFileExtensionList(
-        ['image', 'document'],
-        [],
-      )
-      expect(result).toEqual(['JPG', 'PNG', 'PDF', 'TXT'])
-
-      // Restore original FILE_EXTS
-      Object.assign(FILE_EXTS, originalFileExts)
-    })
-
-    it('should return empty array for empty inputs', () => {
-      const result = getSupportFileExtensionList([], [])
-      expect(result).toEqual([])
-    })
-
-    it('should prioritize custom types over standard types', () => {
-      const mockFileExts = {
-        image: ['JPG', 'PNG'],
-      }
-
-      // Temporarily mock FILE_EXTS
-      const originalFileExts = { ...FILE_EXTS }
-      Object.assign(FILE_EXTS, mockFileExts)
-
-      const result = getSupportFileExtensionList(
-        [SupportUploadFileTypes.custom, 'image'],
-        ['.csv', '.xml'],
-      )
-      expect(result).toEqual(['CSV', 'XML'])
-
-      // Restore original FILE_EXTS
-      Object.assign(FILE_EXTS, originalFileExts)
-    })
-  })
-
-  describe('isAllowedFileExtension', () => {
-    it('should validate allowed file extensions', () => {
-      jest.mocked(mime.getExtension).mockReturnValue('pdf')
-      expect(isAllowedFileExtension(
-        'test.pdf',
-        'application/pdf',
-        ['document'],
-        ['.pdf'],
-      )).toBe(true)
-    })
-  })
-
-  describe('getFilesInLogs', () => {
-    const mockFileData = {
-      dify_model_identity: '__dify__file__',
-      related_id: '123',
-      filename: 'test.pdf',
-      size: 1024,
-      mime_type: 'application/pdf',
-      transfer_method: 'local_file',
-      type: 'document',
-      url: 'http://example.com/test.pdf',
-    }
-
-    it('should handle empty or null input', () => {
-      expect(getFilesInLogs(null)).toEqual([])
-      expect(getFilesInLogs({})).toEqual([])
-      expect(getFilesInLogs(undefined)).toEqual([])
-    })
-
-    it('should process single file object', () => {
-      const input = {
-        file1: mockFileData,
-      }
-
-      const expected = [{
-        varName: 'file1',
-        list: [{
-          id: '123',
-          name: 'test.pdf',
-          size: 1024,
-          type: 'application/pdf',
-          progress: 100,
-          transferMethod: 'local_file',
-          supportFileType: 'document',
-          uploadedId: '123',
-          url: 'http://example.com/test.pdf',
-        }],
-      }]
-
-      expect(getFilesInLogs(input)).toEqual(expected)
-    })
-
-    it('should process array of files', () => {
-      const input = {
-        files: [mockFileData, mockFileData],
-      }
-
-      const expected = [{
-        varName: 'files',
-        list: [
-          {
-            id: '123',
-            name: 'test.pdf',
-            size: 1024,
-            type: 'application/pdf',
-            progress: 100,
-            transferMethod: 'local_file',
-            supportFileType: 'document',
-            uploadedId: '123',
-            url: 'http://example.com/test.pdf',
-          },
-          {
-            id: '123',
-            name: 'test.pdf',
-            size: 1024,
-            type: 'application/pdf',
-            progress: 100,
-            transferMethod: 'local_file',
-            supportFileType: 'document',
-            uploadedId: '123',
-            url: 'http://example.com/test.pdf',
-          },
-        ],
-      }]
-
-      expect(getFilesInLogs(input)).toEqual(expected)
-    })
-
-    it('should ignore non-file objects and arrays', () => {
-      const input = {
-        regularString: 'not a file',
-        regularNumber: 123,
-        regularArray: [1, 2, 3],
-        regularObject: { key: 'value' },
-        file: mockFileData,
-      }
-
-      const expected = [{
-        varName: 'file',
-        list: [{
-          id: '123',
-          name: 'test.pdf',
-          size: 1024,
-          type: 'application/pdf',
-          progress: 100,
-          transferMethod: 'local_file',
-          supportFileType: 'document',
-          uploadedId: '123',
-          url: 'http://example.com/test.pdf',
-        }],
-      }]
-
-      expect(getFilesInLogs(input)).toEqual(expected)
-    })
-
-    it('should handle mixed file types in array', () => {
-      const input = {
-        mixedFiles: [
-          mockFileData,
-          { notAFile: true },
-          mockFileData,
-        ],
-      }
-
-      const expected = [{
-        varName: 'mixedFiles',
-        list: [
-          {
-            id: '123',
-            name: 'test.pdf',
-            size: 1024,
-            type: 'application/pdf',
-            progress: 100,
-            transferMethod: 'local_file',
-            supportFileType: 'document',
-            uploadedId: '123',
-            url: 'http://example.com/test.pdf',
-          },
-          {
-            id: undefined,
-            name: undefined,
-            progress: 100,
-            size: 0,
-            supportFileType: undefined,
-            transferMethod: undefined,
-            type: undefined,
-            uploadedId: undefined,
-            url: undefined,
-          },
-          {
-            id: '123',
-            name: 'test.pdf',
-            size: 1024,
-            type: 'application/pdf',
-            progress: 100,
-            transferMethod: 'local_file',
-            supportFileType: 'document',
-            uploadedId: '123',
-            url: 'http://example.com/test.pdf',
-          },
-        ],
-      }]
-
-      expect(getFilesInLogs(input)).toEqual(expected)
-    })
-  })
-
-  describe('fileIsUploaded', () => {
-    it('should identify uploaded files', () => {
-      expect(fileIsUploaded({
-        uploadedId: '123',
-        progress: 100,
-      } as any)).toBe(true)
-    })
-
-    it('should identify remote files as uploaded', () => {
-      expect(fileIsUploaded({
-        transferMethod: TransferMethod.remote_url,
-        progress: 100,
-      } as any)).toBe(true)
-    })
-  })
-
-  describe('downloadFile', () => {
-    let mockAnchor: HTMLAnchorElement
-    let createElementMock: jest.SpyInstance
-    let appendChildMock: jest.SpyInstance
-    let removeChildMock: jest.SpyInstance
-
-    beforeEach(() => {
-      // Mock createElement and appendChild
-      mockAnchor = {
-        href: '',
-        download: '',
-        style: { display: '' },
-        target: '',
-        title: '',
-        click: jest.fn(),
-      } as unknown as HTMLAnchorElement
-
-      createElementMock = jest.spyOn(document, 'createElement').mockReturnValue(mockAnchor as any)
-      appendChildMock = jest.spyOn(document.body, 'appendChild').mockImplementation((node: Node) => {
-        return node
-      })
-      removeChildMock = jest.spyOn(document.body, 'removeChild').mockImplementation((node: Node) => {
-        return node
-      })
-    })
-
-    afterEach(() => {
-      jest.resetAllMocks()
-    })
-
-    it('should create and trigger download with correct attributes', () => {
-      const url = 'https://example.com/test.pdf'
-      const filename = 'test.pdf'
-
-      downloadFile(url, filename)
-
-      // Verify anchor element was created with correct properties
-      expect(createElementMock).toHaveBeenCalledWith('a')
-      expect(mockAnchor.href).toBe(url)
-      expect(mockAnchor.download).toBe(filename)
-      expect(mockAnchor.style.display).toBe('none')
-      expect(mockAnchor.target).toBe('_blank')
-      expect(mockAnchor.title).toBe(filename)
-
-      // Verify DOM operations
-      expect(appendChildMock).toHaveBeenCalledWith(mockAnchor)
-      expect(mockAnchor.click).toHaveBeenCalled()
-      expect(removeChildMock).toHaveBeenCalledWith(mockAnchor)
-    })
-
-    it('should handle empty filename', () => {
-      const url = 'https://example.com/test.pdf'
-      const filename = ''
-
-      downloadFile(url, filename)
-
-      expect(mockAnchor.download).toBe('')
-      expect(mockAnchor.title).toBe('')
-    })
-
-    it('should handle empty url', () => {
-      const url = ''
-      const filename = 'test.pdf'
-
-      downloadFile(url, filename)
-
-      expect(mockAnchor.href).toBe('')
-    })
-  })
-})
diff --git a/app/components/base/form/components/field/checkbox.tsx b/app/components/base/form/components/field/checkbox.tsx
deleted file mode 100644
index 855dbd8..0000000
--- a/app/components/base/form/components/field/checkbox.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import cn from '@/utils/classnames'
-import { useFieldContext } from '../..'
-import Checkbox from '../../../checkbox'
-
-type CheckboxFieldProps = {
-  label: string;
-  labelClassName?: string;
-}
-
-const CheckboxField = ({
-  label,
-  labelClassName,
-}: CheckboxFieldProps) => {
-  const field = useFieldContext<boolean>()
-
-  return (
-    <div className='flex gap-2'>
-      <div className='flex h-6 shrink-0 items-center'>
-        <Checkbox
-          id={field.name}
-          checked={field.state.value}
-          onCheck={() => {
-            field.handleChange(!field.state.value)
-          }}
-        />
-      </div>
-      <label
-        htmlFor={field.name}
-        className={cn(
-          'system-sm-medium grow cursor-pointer pt-1 text-text-secondary',
-          labelClassName,
-        )}
-        onClick={() => {
-          field.handleChange(!field.state.value)
-        }}
-      >
-        {label}
-      </label>
-    </div>
-  )
-}
-
-export default CheckboxField
diff --git a/app/components/base/form/components/field/number-input.tsx b/app/components/base/form/components/field/number-input.tsx
deleted file mode 100644
index fce3143..0000000
--- a/app/components/base/form/components/field/number-input.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import React from 'react'
-import { useFieldContext } from '../..'
-import Label from '../label'
-import cn from '@/utils/classnames'
-import type { InputNumberProps } from '../../../input-number'
-import { InputNumber } from '../../../input-number'
-
-type TextFieldProps = {
-  label: string
-  isRequired?: boolean
-  showOptional?: boolean
-  tooltip?: string
-  className?: string
-  labelClassName?: string
-} & Omit<InputNumberProps, 'id' | 'value' | 'onChange' | 'onBlur'>
-
-const NumberInputField = ({
-  label,
-  isRequired,
-  showOptional,
-  tooltip,
-  className,
-  labelClassName,
-  ...inputProps
-}: TextFieldProps) => {
-  const field = useFieldContext<number | undefined>()
-
-  return (
-    <div className={cn('flex flex-col gap-y-0.5', className)}>
-      <Label
-        htmlFor={field.name}
-        label={label}
-        isRequired={isRequired}
-        showOptional={showOptional}
-        tooltip={tooltip}
-        className={labelClassName}
-      />
-      <InputNumber
-        id={field.name}
-        value={field.state.value}
-        onChange={value => field.handleChange(value)}
-        onBlur={field.handleBlur}
-        {...inputProps}
-      />
-    </div>
-  )
-}
-
-export default NumberInputField
diff --git a/app/components/base/form/components/field/options.tsx b/app/components/base/form/components/field/options.tsx
deleted file mode 100644
index 9ff71e5..0000000
--- a/app/components/base/form/components/field/options.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import cn from '@/utils/classnames'
-import { useFieldContext } from '../..'
-import Label from '../label'
-import ConfigSelect from '@/app/components/app/configuration/config-var/config-select'
-
-type OptionsFieldProps = {
-  label: string;
-  className?: string;
-  labelClassName?: string;
-}
-
-const OptionsField = ({
-  label,
-  className,
-  labelClassName,
-}: OptionsFieldProps) => {
-  const field = useFieldContext<string[]>()
-
-  return (
-    <div className={cn('flex flex-col gap-y-0.5', className)}>
-      <Label
-        htmlFor={field.name}
-        label={label}
-        className={labelClassName}
-      />
-      <ConfigSelect
-        options={field.state.value}
-        onChange={value => field.handleChange(value)}
-      />
-    </div>
-  )
-}
-
-export default OptionsField
diff --git a/app/components/base/form/components/field/select.tsx b/app/components/base/form/components/field/select.tsx
deleted file mode 100644
index 95af3c0..0000000
--- a/app/components/base/form/components/field/select.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import cn from '@/utils/classnames'
-import { useFieldContext } from '../..'
-import PureSelect from '../../../select/pure'
-import Label from '../label'
-
-type SelectOption = {
-  value: string
-  label: string
-}
-
-type SelectFieldProps = {
-  label: string
-  options: SelectOption[]
-  isRequired?: boolean
-  showOptional?: boolean
-  tooltip?: string
-  className?: string
-  labelClassName?: string
-}
-
-const SelectField = ({
-  label,
-  options,
-  isRequired,
-  showOptional,
-  tooltip,
-  className,
-  labelClassName,
-}: SelectFieldProps) => {
-  const field = useFieldContext<string>()
-
-  return (
-    <div className={cn('flex flex-col gap-y-0.5', className)}>
-      <Label
-        htmlFor={field.name}
-        label={label}
-        isRequired={isRequired}
-        showOptional={showOptional}
-        tooltip={tooltip}
-        className={labelClassName}
-      />
-      <PureSelect
-        value={field.state.value}
-        options={options}
-        onChange={value => field.handleChange(value)}
-      />
-    </div>
-  )
-}
-
-export default SelectField
diff --git a/app/components/base/form/components/field/text.tsx b/app/components/base/form/components/field/text.tsx
deleted file mode 100644
index b209029..0000000
--- a/app/components/base/form/components/field/text.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from 'react'
-import { useFieldContext } from '../..'
-import Input, { type InputProps } from '../../../input'
-import Label from '../label'
-import cn from '@/utils/classnames'
-
-type TextFieldProps = {
-  label: string
-  isRequired?: boolean
-  showOptional?: boolean
-  tooltip?: string
-  className?: string
-  labelClassName?: string
-} & Omit<InputProps, 'className' | 'onChange' | 'onBlur' | 'value' | 'id'>
-
-const TextField = ({
-  label,
-  isRequired,
-  showOptional,
-  tooltip,
-  className,
-  labelClassName,
-  ...inputProps
-}: TextFieldProps) => {
-  const field = useFieldContext<string>()
-
-  return (
-    <div className={cn('flex flex-col gap-y-0.5', className)}>
-      <Label
-        htmlFor={field.name}
-        label={label}
-        isRequired={isRequired}
-        showOptional={showOptional}
-        tooltip={tooltip}
-        className={labelClassName}
-      />
-      <Input
-        id={field.name}
-        value={field.state.value}
-        onChange={e => field.handleChange(e.target.value)}
-        onBlur={field.handleBlur}
-        {...inputProps}
-      />
-    </div>
-  )
-}
-
-export default TextField
diff --git a/app/components/base/form/components/form/submit-button.tsx b/app/components/base/form/components/form/submit-button.tsx
deleted file mode 100644
index 494d19b..0000000
--- a/app/components/base/form/components/form/submit-button.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { useStore } from '@tanstack/react-form'
-import { useFormContext } from '../..'
-import Button, { type ButtonProps } from '../../../button'
-
-type SubmitButtonProps = Omit<ButtonProps, 'disabled' | 'loading' | 'onClick'>
-
-const SubmitButton = ({ ...buttonProps }: SubmitButtonProps) => {
-  const form = useFormContext()
-
-  const [isSubmitting, canSubmit] = useStore(form.store, state => [
-    state.isSubmitting,
-    state.canSubmit,
-  ])
-
-  return (
-    <Button
-      disabled={isSubmitting || !canSubmit}
-      loading={isSubmitting}
-      onClick={() => form.handleSubmit()}
-      {...buttonProps}
-    />
-  )
-}
-
-export default SubmitButton
diff --git a/app/components/base/form/components/label.spec.tsx b/app/components/base/form/components/label.spec.tsx
deleted file mode 100644
index b2dc98a..0000000
--- a/app/components/base/form/components/label.spec.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react'
-import Label from './label'
-
-jest.mock('react-i18next', () => ({
-  useTranslation: () => ({
-    t: (key: string) => key,
-  }),
-}))
-
-describe('Label Component', () => {
-  const defaultProps = {
-    htmlFor: 'test-input',
-    label: 'Test Label',
-  }
-
-  it('renders basic label correctly', () => {
-    render(<Label {...defaultProps} />)
-    const label = screen.getByTestId('label')
-    expect(label).toBeInTheDocument()
-    expect(label).toHaveAttribute('for', 'test-input')
-  })
-
-  it('shows optional text when showOptional is true', () => {
-    render(<Label {...defaultProps} showOptional />)
-    expect(screen.getByText('common.label.optional')).toBeInTheDocument()
-  })
-
-  it('shows required asterisk when isRequired is true', () => {
-    render(<Label {...defaultProps} isRequired />)
-    expect(screen.getByText('*')).toBeInTheDocument()
-  })
-
-  it('renders tooltip when tooltip prop is provided', () => {
-    const tooltipText = 'Test Tooltip'
-    render(<Label {...defaultProps} tooltip={tooltipText} />)
-    const trigger = screen.getByTestId('test-input-tooltip')
-    fireEvent.mouseEnter(trigger)
-    expect(screen.getByText(tooltipText)).toBeInTheDocument()
-  })
-
-  it('applies custom className when provided', () => {
-    const customClass = 'custom-label'
-    render(<Label {...defaultProps} className={customClass} />)
-    const label = screen.getByTestId('label')
-    expect(label).toHaveClass(customClass)
-  })
-
-  it('does not show optional text and required asterisk simultaneously', () => {
-    render(<Label {...defaultProps} isRequired showOptional />)
-    expect(screen.queryByText('common.label.optional')).not.toBeInTheDocument()
-    expect(screen.getByText('*')).toBeInTheDocument()
-  })
-})
diff --git a/app/components/base/form/components/label.tsx b/app/components/base/form/components/label.tsx
deleted file mode 100644
index 4b104c9..0000000
--- a/app/components/base/form/components/label.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import cn from '@/utils/classnames'
-import Tooltip from '../../tooltip'
-import { useTranslation } from 'react-i18next'
-
-export type LabelProps = {
-  htmlFor: string
-  label: string
-  isRequired?: boolean
-  showOptional?: boolean
-  tooltip?: string
-  className?: string
-}
-
-const Label = ({
-  htmlFor,
-  label,
-  isRequired,
-  showOptional,
-  tooltip,
-  className,
-}: LabelProps) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex h-6 items-center'>
-      <label
-        data-testid='label'
-        htmlFor={htmlFor}
-        className={cn('system-sm-medium text-text-secondary', className)}
-      >
-        {label}
-      </label>
-      {!isRequired && showOptional && <div className='system-xs-regular ml-1 text-text-tertiary'>{t('common.label.optional')}</div>}
-      {isRequired && <div className='system-xs-regular ml-1 text-text-destructive-secondary'>*</div>}
-      {tooltip && (
-        <Tooltip
-          popupContent={
-            <div className='w-[200px]'>{tooltip}</div>
-          }
-          triggerClassName='ml-0.5 w-4 h-4'
-          triggerTestId={`${htmlFor}-tooltip`}
-        />
-      )}
-    </div>
-  )
-}
-
-export default Label
diff --git a/app/components/base/form/form-scenarios/demo/contact-fields.tsx b/app/components/base/form/form-scenarios/demo/contact-fields.tsx
deleted file mode 100644
index 9ba664f..0000000
--- a/app/components/base/form/form-scenarios/demo/contact-fields.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { withForm } from '../..'
-import { demoFormOpts } from './shared-options'
-import { ContactMethods } from './types'
-
-const ContactFields = withForm({
-  ...demoFormOpts,
-  render: ({ form }) => {
-    return (
-      <div className='my-2'>
-        <h3 className='title-lg-bold text-text-primary'>Contacts</h3>
-        <div className='flex flex-col gap-4'>
-          <form.AppField
-            name='contact.email'
-            children={field => <field.TextField label='Email' />}
-          />
-          <form.AppField
-            name='contact.phone'
-            children={field => <field.TextField label='Phone' />}
-          />
-          <form.AppField
-            name='contact.preferredContactMethod'
-            children={field => (
-              <field.SelectField
-                label='Preferred Contact Method'
-                options={ContactMethods}
-              />
-            )}
-          />
-        </div>
-      </div>
-    )
-  },
-})
-
-export default ContactFields
diff --git a/app/components/base/form/form-scenarios/demo/index.tsx b/app/components/base/form/form-scenarios/demo/index.tsx
deleted file mode 100644
index f08edee..0000000
--- a/app/components/base/form/form-scenarios/demo/index.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import { useStore } from '@tanstack/react-form'
-import { useAppForm } from '../..'
-import ContactFields from './contact-fields'
-import { demoFormOpts } from './shared-options'
-import { UserSchema } from './types'
-
-const DemoForm = () => {
-  const form = useAppForm({
-    ...demoFormOpts,
-    validators: {
-      onSubmit: ({ value }) => {
-        // Validate the entire form
-        const result = UserSchema.safeParse(value)
-        if (!result.success) {
-          const issues = result.error.issues
-          console.log('Validation errors:', issues)
-          return issues[0].message
-        }
-        return undefined
-      },
-    },
-    onSubmit: ({ value }) => {
-      console.log('Form submitted:', value)
-    },
-  })
-
-const name = useStore(form.store, state => state.values.name)
-
-  return (
-    <form
-      className='flex w-[400px] flex-col gap-4'
-      onSubmit={(e) => {
-        e.preventDefault()
-        e.stopPropagation()
-        form.handleSubmit()
-      }}
-    >
-      <form.AppField
-        name='name'
-        children={field => (
-          <field.TextField label='Name' />
-        )}
-      />
-      <form.AppField
-        name='surname'
-        children={field => (
-          <field.TextField label='Surname' />
-        )}
-      />
-      <form.AppField
-        name='isAcceptingTerms'
-        children={field => (
-          <field.CheckboxField label='I accept the terms and conditions.' />
-        )}
-      />
-      {
-        !!name && (
-          <ContactFields form={form} />
-        )
-      }
-      <form.AppForm>
-        <form.SubmitButton>Submit</form.SubmitButton>
-      </form.AppForm>
-    </form>
-  )
-}
-
-export default DemoForm
diff --git a/app/components/base/form/form-scenarios/demo/shared-options.tsx b/app/components/base/form/form-scenarios/demo/shared-options.tsx
deleted file mode 100644
index 8b216c8..0000000
--- a/app/components/base/form/form-scenarios/demo/shared-options.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { formOptions } from '@tanstack/react-form'
-
-export const demoFormOpts = formOptions({
-  defaultValues: {
-    name: '',
-    surname: '',
-    isAcceptingTerms: false,
-    contact: {
-      email: '',
-      phone: '',
-      preferredContactMethod: 'email',
-    },
-  },
-})
diff --git a/app/components/base/form/form-scenarios/demo/types.ts b/app/components/base/form/form-scenarios/demo/types.ts
deleted file mode 100644
index c4e626e..0000000
--- a/app/components/base/form/form-scenarios/demo/types.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { z } from 'zod'
-
-const ContactMethod = z.union([
-  z.literal('email'),
-  z.literal('phone'),
-  z.literal('whatsapp'),
-  z.literal('sms'),
-])
-
-export const ContactMethods = ContactMethod.options.map(({ value }) => ({
-  value,
-  label: value.charAt(0).toUpperCase() + value.slice(1),
-}))
-
-export const UserSchema = z.object({
-  name: z
-    .string()
-    .regex(/^[A-Z]/, 'Name must start with a capital letter')
-    .min(3, 'Name must be at least 3 characters long'),
-  surname: z
-    .string()
-    .min(3, 'Surname must be at least 3 characters long')
-    .regex(/^[A-Z]/, 'Surname must start with a capital letter'),
-  isAcceptingTerms: z.boolean().refine(val => val, {
-    message: 'You must accept the terms and conditions',
-  }),
-  contact: z.object({
-    email: z.string().email('Invalid email address'),
-    phone: z.string().optional(),
-    preferredContactMethod: ContactMethod,
-  }),
-})
-
-export type User = z.infer<typeof UserSchema>
diff --git a/app/components/base/form/index.tsx b/app/components/base/form/index.tsx
deleted file mode 100644
index aeb482a..0000000
--- a/app/components/base/form/index.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { createFormHook, createFormHookContexts } from '@tanstack/react-form'
-import TextField from './components/field/text'
-import NumberInputField from './components/field/number-input'
-import CheckboxField from './components/field/checkbox'
-import SelectField from './components/field/select'
-import OptionsField from './components/field/options'
-import SubmitButton from './components/form/submit-button'
-
-export const { fieldContext, useFieldContext, formContext, useFormContext }
-  = createFormHookContexts()
-
-export const { useAppForm, withForm } = createFormHook({
-  fieldComponents: {
-    TextField,
-    NumberInputField,
-    CheckboxField,
-    SelectField,
-    OptionsField,
-  },
-  formComponents: {
-    SubmitButton,
-  },
-  fieldContext,
-  formContext,
-})
diff --git a/app/components/base/grid-mask/Grid.svg b/app/components/base/grid-mask/Grid.svg
deleted file mode 100644
index 88cdeea..0000000
--- a/app/components/base/grid-mask/Grid.svg
+++ /dev/null
@@ -1,2146 +0,0 @@
-<svg width="1480" height="800" viewBox="0 0 1480 800" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g opacity="0.3">
-<rect x="-17.7148" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.7" x="342.285" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.5" x="990.285" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="24" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="24" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="24" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="48" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.7" x="582.285" y="48" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="48" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="48" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="72" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="72" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.5" x="102.285" y="96" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.7" x="270.285" y="96" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.7" x="606.285" y="96" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.5" x="822.285" y="96" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.7" x="1182.29" y="96" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="96" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="120" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="120" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.5" x="318.285" y="144" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="144" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.5" x="774.285" y="144" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="144" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="144" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="168" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.5" x="510.285" y="192" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="192" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="192" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="216" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="216" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="216" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="216" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.5" x="678.285" y="240" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="240" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="264" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.3" x="846.285" y="264" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="264" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="264" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="288" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="312" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="312" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="312" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="312" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="336" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="336" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="360" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="360" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect opacity="0.5" x="678.285" y="384" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="384" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="408" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="408" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="408" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="432" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="432" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="456" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="480" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="480" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="480" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="504" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="528" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="552" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="552" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="576" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="576" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="600" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="600" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="624" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="648" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="672" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="696" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="720" width="24" height="24" fill="#C8CEDA" fill-opacity="0.5" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="720" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="744" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="768" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="-17.7148" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="6.28516" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="30.2852" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="54.2852" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="78.2852" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="102.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="126.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="150.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="174.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="198.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="222.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="246.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="270.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="294.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="318.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="342.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="366.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="390.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="414.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="438.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="462.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="486.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="510.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="534.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="558.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="582.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="606.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="630.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="654.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="678.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="702.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="726.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="750.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="774.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="798.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="822.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="846.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="870.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="894.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="918.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="942.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="966.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="990.285" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1014.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1038.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1062.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1086.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1110.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1134.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1158.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1182.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1206.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1230.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1254.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1278.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1302.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1326.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1350.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1374.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1398.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1422.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1446.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-<rect x="1470.29" y="792" width="24" height="24" stroke="#101828" stroke-opacity="0.04"/>
-</g>
-</svg>
diff --git a/app/components/base/grid-mask/style.module.css b/app/components/base/grid-mask/style.module.css
deleted file mode 100644
index e051271..0000000
--- a/app/components/base/grid-mask/style.module.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.gridBg{
-  background-image: url(./Grid.svg);
-  background-repeat: repeat;
-  background-position: 0 0;
-}
diff --git a/app/components/base/icons/IconBase.spec.tsx b/app/components/base/icons/IconBase.spec.tsx
deleted file mode 100644
index e440040..0000000
--- a/app/components/base/icons/IconBase.spec.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react'
-import '@testing-library/jest-dom'
-import React from 'react'
-import type { IconData } from './IconBase'
-import IconBase from './IconBase'
-import * as utils from './utils'
-
-// Mock the utils module
-jest.mock('./utils', () => ({
-  generate: jest.fn((icon, key, props) => (
-    <svg
-      data-testid="mock-svg"
-      key={key}
-      {...props}
-    >
-      mocked svg content
-    </svg>
-  )),
-}))
-
-describe('IconBase Component', () => {
-  const mockData: IconData = {
-    name: 'test-icon',
-    icon: { name: 'svg', attributes: {}, children: [] },
-  }
-
-  beforeEach(() => {
-    jest.clearAllMocks()
-  })
-
-  it('renders properly with required props', () => {
-    render(<IconBase data={mockData} />)
-    const svg = screen.getByTestId('mock-svg')
-    expect(svg).toBeInTheDocument()
-    expect(svg).toHaveAttribute('data-icon', mockData.name)
-    expect(svg).toHaveAttribute('aria-hidden', 'true')
-  })
-
-  it('passes className to the generated SVG', () => {
-    render(<IconBase data={mockData} className="custom-class" />)
-    const svg = screen.getByTestId('mock-svg')
-    expect(svg).toHaveAttribute('class', 'custom-class')
-    expect(utils.generate).toHaveBeenCalledWith(
-      mockData.icon,
-      'svg-test-icon',
-      expect.objectContaining({ className: 'custom-class' }),
-    )
-  })
-
-  it('handles onClick events', () => {
-    const handleClick = jest.fn()
-    render(<IconBase data={mockData} onClick={handleClick} />)
-    const svg = screen.getByTestId('mock-svg')
-    fireEvent.click(svg)
-    expect(handleClick).toHaveBeenCalledTimes(1)
-  })
-
-  it('applies custom styles', () => {
-    const customStyle = { color: 'red', fontSize: '24px' }
-    render(<IconBase data={mockData} style={customStyle} />)
-    expect(utils.generate).toHaveBeenCalledWith(
-      mockData.icon,
-      'svg-test-icon',
-      expect.objectContaining({ style: customStyle }),
-    )
-  })
-})
diff --git a/app/components/base/icons/assets/public/billing/ar-cube-1.svg b/app/components/base/icons/assets/public/billing/ar-cube-1.svg
deleted file mode 100644
index 2022ecd..0000000
--- a/app/components/base/icons/assets/public/billing/ar-cube-1.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M14.0002 14V23.9166M14.0002 14L5.25 9.07806M14.0002 14L22.4731 9.2338M23.625 9.95052V18.0493C23.625 18.8924 23.1703 19.6697 22.4356 20.0831L15.1439 24.1846C14.4336 24.5842 13.5663 24.5842 12.8561 24.1846L5.56439 20.0831C4.82967 19.6697 4.375 18.8924 4.375 18.0493V9.95052C4.375 9.10756 4.82967 8.33012 5.56439 7.91684L12.8561 3.81529C13.5663 3.41574 14.4336 3.41574 15.1439 3.81529L22.4356 7.91684C23.1703 8.33012 23.625 9.10756 23.625 9.95052Z" stroke="#101828" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/asterisk.svg b/app/components/base/icons/assets/public/billing/asterisk.svg
deleted file mode 100644
index 1ee4059..0000000
--- a/app/components/base/icons/assets/public/billing/asterisk.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="asterisk">
-<path id="Vector" d="M14.0033 3.20837V24.7917M4.65747 8.60421L23.3492 19.3959M4.6586 19.3959L23.3503 8.60421" stroke="#101828" stroke-width="1.5" stroke-linecap="round"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/aws-marketplace.svg b/app/components/base/icons/assets/public/billing/aws-marketplace.svg
deleted file mode 100644
index 02fb327..0000000
--- a/app/components/base/icons/assets/public/billing/aws-marketplace.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<svg width="126" height="24" viewBox="0 0 126 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g clip-path="url(#clip0_394_42756)">
-<path d="M47.3963 14.5593V8.71609C47.3963 8.14631 47.2869 7.73413 47.0682 7.45531C46.8494 7.1886 46.5091 7.04313 46.0473 7.04313C45.2209 7.04313 44.3824 7.29771 43.5438 7.80687C43.556 7.89173 43.556 7.97659 43.556 8.06145C43.556 8.14631 43.556 8.2433 43.556 8.32816V14.5351H41.8667V8.69184C41.8667 8.12207 41.7573 7.70989 41.5386 7.43106C41.3198 7.16436 40.9795 7.01888 40.5177 7.01888C39.6549 7.01888 38.8284 7.27346 38.0385 7.7705V14.523H36.3492V5.9157H37.759L37.9291 6.77642C39.0229 6.0248 40.0802 5.66112 41.1132 5.66112C42.1705 5.66112 42.8875 6.06117 43.2521 6.86128C44.3702 6.06117 45.5004 5.66112 46.6185 5.66112C47.3963 5.66112 48.004 5.87933 48.4172 6.32788C48.8425 6.7643 49.0491 7.39469 49.0491 8.20693V14.523H47.3963V14.5593Z" fill="white"/>
-<path d="M56.0492 14.5593L55.9156 13.6744C55.5023 14.0259 55.0527 14.2926 54.5666 14.4866C54.0683 14.6806 53.5822 14.7775 53.0961 14.7775C52.294 14.7775 51.6498 14.5472 51.1637 14.0865C50.6776 13.6259 50.4346 13.0197 50.4346 12.2439C50.4346 11.4195 50.7262 10.7527 51.3217 10.2678C51.9172 9.77078 52.7072 9.52832 53.7037 9.52832C54.36 9.52832 55.077 9.62531 55.8426 9.81927V8.70397C55.8426 8.09782 55.709 7.6614 55.4294 7.41894C55.1499 7.16436 54.6759 7.04313 54.0075 7.04313C53.0474 7.04313 52.0509 7.21285 51.0179 7.56441V6.37637C51.4311 6.15816 51.9294 6.00056 52.5127 5.87933C53.1082 5.7581 53.7037 5.69749 54.2992 5.69749C55.3808 5.69749 56.1708 5.9157 56.6812 6.36425C57.1916 6.81279 57.4468 7.49168 57.4468 8.41302V14.5593H56.0492ZM53.4971 13.5046C54.2627 13.5046 55.0527 13.2137 55.8426 12.6439V10.9103C55.2471 10.7649 54.6516 10.6921 54.044 10.6921C52.7679 10.6921 52.1238 11.1892 52.1238 12.1711C52.1238 12.5954 52.2453 12.9349 52.4763 13.1652C52.7193 13.3834 53.0596 13.5046 53.4971 13.5046Z" fill="white"/>
-<path d="M59.3792 14.5593V5.95207H60.7889L60.9712 7.22497C61.2872 6.88553 61.5788 6.61883 61.8584 6.43698C62.1379 6.25514 62.4053 6.10966 62.6969 6.0248C62.9764 5.93994 63.2924 5.89145 63.6206 5.89145C63.8393 5.89145 64.0702 5.90357 64.3133 5.93994V7.46743C63.9487 7.41894 63.6449 7.39469 63.3896 7.39469C62.4782 7.39469 61.7004 7.6614 61.0563 8.20693V14.5593H59.3792Z" fill="white"/>
-<path d="M65.3584 14.5593V2H67.0477V9.71017L70.7057 5.96419H72.7596L68.6762 10.0496L73.027 14.5593H70.9002L67.0355 10.486V14.5593H65.3584Z" fill="white"/>
-<path d="M74.5704 10.6194C74.5947 11.5892 74.8378 12.3166 75.2996 12.7773C75.7614 13.2379 76.4663 13.4683 77.4385 13.4683C78.3378 13.4683 79.2493 13.2985 80.1729 12.947V14.1472C79.3587 14.5836 78.3621 14.8139 77.1833 14.8139C75.7857 14.8139 74.7284 14.426 74.0235 13.6622C73.3065 12.8985 72.954 11.7589 72.954 10.2557C72.954 8.81307 73.3065 7.69776 74.0235 6.90978C74.7405 6.12179 75.7371 5.70961 77.0131 5.70961C78.0948 5.70961 78.9212 6.01268 79.4924 6.61883C80.0757 7.22497 80.3552 8.0857 80.3552 9.18888C80.3552 9.72229 80.3066 10.2072 80.2215 10.6315H74.5704V10.6194ZM76.9159 6.97039C76.1989 6.97039 75.6399 7.1886 75.251 7.60078C74.8499 8.02508 74.6312 8.65547 74.5704 9.49195H78.8118C78.824 9.40709 78.824 9.2495 78.824 9.05553C78.824 8.36452 78.666 7.84324 78.3379 7.49168C78.0219 7.15223 77.5479 6.97039 76.9159 6.97039Z" fill="white"/>
-<path d="M86.9421 14.3532C86.3831 14.5715 85.7511 14.6806 85.0584 14.6806C83.4421 14.6806 82.64 13.8804 82.64 12.2681V7.27346H81.0722V6.1824L82.6886 5.97631L82.9438 3.52749H84.3171V5.93994H86.8692V7.26134H84.3171V12.1832C84.3171 12.6075 84.4143 12.8985 84.5966 13.0682C84.7789 13.2379 85.107 13.3228 85.5567 13.3228C86.0185 13.3228 86.4803 13.2622 86.93 13.1531V14.3532H86.9421Z" fill="white"/>
-<path d="M88.0967 5.95207H89.5064L89.6644 6.83704C90.5273 6.0733 91.4874 5.69749 92.5447 5.69749C93.6506 5.69749 94.5135 6.09754 95.1454 6.89765C95.7774 7.69776 96.0933 8.7767 96.0933 10.1466C96.0933 11.5407 95.7531 12.656 95.0846 13.4925C94.4162 14.329 93.5291 14.7533 92.411 14.7533C91.3901 14.7533 90.5151 14.4139 89.7738 13.7471V18.0628H88.0967V5.95207ZM92.0585 7.05525C91.2564 7.05525 90.4908 7.30983 89.7738 7.83112V12.5712C90.5151 13.1167 91.2564 13.3834 92.0221 13.3834C93.5898 13.3834 94.3676 12.3287 94.3676 10.2315C94.3676 9.15251 94.1732 8.36453 93.7964 7.84324C93.4318 7.32196 92.8485 7.05525 92.0585 7.05525Z" fill="white"/>
-<path d="M100.711 14.4381C100.335 14.5715 99.9337 14.6442 99.484 14.6442C98.8885 14.6442 98.4267 14.4745 98.1107 14.1229C97.7948 13.7835 97.6368 13.2864 97.6368 12.6439V2H99.326V12.5348C99.326 12.7894 99.3746 12.9834 99.484 13.1046C99.5934 13.2258 99.7757 13.2864 100.019 13.2864C100.25 13.2864 100.481 13.2743 100.711 13.2379V14.4381Z" fill="white"/>
-<path d="M107.225 14.5593L107.092 13.6744C106.679 14.0259 106.229 14.2926 105.743 14.4866C105.245 14.6806 104.758 14.7775 104.272 14.7775C103.47 14.7775 102.826 14.5472 102.34 14.0865C101.854 13.6259 101.611 13.0197 101.611 12.2439C101.611 11.4195 101.902 10.7527 102.498 10.2678C103.093 9.77078 103.883 9.52832 104.88 9.52832C105.536 9.52832 106.253 9.62531 107.019 9.81927V8.70397C107.019 8.09782 106.885 7.6614 106.606 7.41894C106.326 7.16436 105.852 7.04313 105.184 7.04313C104.224 7.04313 103.227 7.21285 102.194 7.56441V6.37637C102.607 6.15816 103.106 6.00056 103.689 5.87933C104.284 5.7581 104.88 5.69749 105.475 5.69749C106.557 5.69749 107.347 5.9157 107.857 6.36425C108.368 6.81279 108.623 7.49168 108.623 8.41302V14.5593H107.225ZM104.673 13.5046C105.439 13.5046 106.229 13.2137 107.019 12.6439V10.9103C106.423 10.7649 105.828 10.6921 105.22 10.6921C103.944 10.6921 103.3 11.1892 103.3 12.1711C103.3 12.5954 103.422 12.9349 103.652 13.1652C103.896 13.3834 104.236 13.5046 104.673 13.5046Z" fill="white"/>
-<path d="M116.571 14.232C115.915 14.5715 115.149 14.7412 114.286 14.7412C112.95 14.7412 111.929 14.3532 111.212 13.5895C110.507 12.8258 110.142 11.7226 110.142 10.2678C110.142 8.82519 110.507 7.72201 111.236 6.93402C111.965 6.14603 112.998 5.7581 114.335 5.7581C115.101 5.7581 115.805 5.9157 116.474 6.23089V7.43106C115.83 7.22497 115.198 7.12799 114.566 7.12799C113.618 7.12799 112.925 7.37045 112.512 7.85536C112.087 8.34028 111.88 9.10402 111.88 10.1587V10.3769C111.88 11.4074 112.099 12.159 112.512 12.6439C112.937 13.1288 113.606 13.3713 114.529 13.3713C115.137 13.3713 115.805 13.2622 116.535 13.0318V14.232H116.571Z" fill="white"/>
-<path d="M118.965 10.6194C118.99 11.5892 119.233 12.3166 119.694 12.7773C120.156 13.2379 120.861 13.4683 121.833 13.4683C122.733 13.4683 123.644 13.2985 124.568 12.947V14.1472C123.754 14.5836 122.757 14.8139 121.578 14.8139C120.181 14.8139 119.123 14.426 118.418 13.6622C117.701 12.8985 117.349 11.7589 117.349 10.2557C117.349 8.81307 117.701 7.69776 118.418 6.90978C119.135 6.12179 120.132 5.70961 121.408 5.70961C122.49 5.70961 123.316 6.01268 123.887 6.61883C124.471 7.22497 124.75 8.0857 124.75 9.18888C124.75 9.72229 124.701 10.2072 124.616 10.6315H118.965V10.6194ZM121.311 6.97039C120.594 6.97039 120.035 7.1886 119.646 7.60078C119.245 8.02508 119.026 8.65547 118.965 9.49195H123.207C123.219 9.40709 123.219 9.2495 123.219 9.05553C123.219 8.36452 123.061 7.84324 122.733 7.49168C122.405 7.15223 121.931 6.97039 121.311 6.97039Z" fill="white"/>
-<path d="M27.0036 14.8139C26.4567 14.8139 25.922 14.7533 25.3994 14.6321C24.8768 14.5108 24.4758 14.3775 24.1962 14.2199C24.0261 14.1229 23.9167 14.0259 23.8803 13.9289C23.8317 13.832 23.8195 13.735 23.8195 13.638V13.1167C23.8195 12.8985 23.8924 12.7894 24.0504 12.7894C24.1112 12.7894 24.1719 12.8015 24.2449 12.8258C24.3056 12.85 24.4029 12.8864 24.5122 12.9349C24.8647 13.0925 25.2414 13.2137 25.6546 13.2985C26.0678 13.3834 26.481 13.4198 26.8942 13.4198C27.5505 13.4198 28.0487 13.3107 28.4133 13.0803C28.7658 12.85 28.9481 12.5227 28.9481 12.0984C28.9481 11.8074 28.8508 11.565 28.6686 11.371C28.4862 11.177 28.1338 10.9952 27.6234 10.8255L26.1164 10.3527C25.3508 10.1102 24.8039 9.75866 24.4515 9.29799C24.1112 8.83732 23.9289 8.34028 23.9289 7.79475C23.9289 7.35832 24.0261 6.97039 24.2084 6.64307C24.3907 6.31575 24.6459 6.0248 24.9497 5.79447C25.2536 5.56413 25.6182 5.38229 26.0313 5.26106C26.4446 5.13983 26.8821 5.07922 27.3439 5.07922C27.5748 5.07922 27.8057 5.09134 28.0487 5.12771C28.2797 5.16408 28.5106 5.20045 28.7172 5.24894C28.9238 5.29743 29.1304 5.34592 29.3127 5.40654C29.495 5.46715 29.6408 5.52777 29.7502 5.58838C29.896 5.67324 29.9932 5.7581 30.054 5.84296C30.1148 5.92782 30.1391 6.03693 30.1391 6.1824V6.66732C30.1391 6.88553 30.0661 6.99464 29.9082 6.99464C29.8231 6.99464 29.6894 6.95827 29.5071 6.87341C28.9116 6.6067 28.2432 6.47335 27.514 6.47335C26.9185 6.47335 26.4567 6.57033 26.1286 6.7643C25.8004 6.95827 25.6425 7.26134 25.6425 7.68564C25.6425 7.97659 25.7397 8.21905 25.9463 8.42514C26.1529 8.61911 26.5296 8.81307 27.0887 8.99492L28.5592 9.46771C29.3127 9.71017 29.8474 10.0375 30.1634 10.4618C30.4793 10.8861 30.6495 11.371 30.6495 11.9165C30.6495 12.3651 30.5644 12.7651 30.3821 13.1167C30.1998 13.4683 29.9446 13.7835 29.6286 14.038C29.3127 14.2926 28.9238 14.4866 28.4741 14.6199C28.0244 14.7412 27.5383 14.8139 27.0036 14.8139ZM13.6718 14.5351C13.4895 14.5351 13.3558 14.4987 13.2707 14.4381C13.1856 14.3775 13.1127 14.232 13.052 14.0259L10.6214 6.01268C10.5606 5.80659 10.5363 5.67324 10.5363 5.6005C10.5363 5.43078 10.6214 5.34592 10.7915 5.34592H11.8124C12.0068 5.34592 12.1405 5.38229 12.2256 5.4429C12.2985 5.50352 12.3714 5.64899 12.4322 5.85508L14.1822 12.7045L15.7742 5.85508C15.8228 5.64899 15.8836 5.51564 15.9687 5.4429C16.0538 5.38229 16.1874 5.34592 16.3819 5.34592H17.2204C17.4149 5.34592 17.5486 5.38229 17.6336 5.4429C17.7187 5.50352 17.7795 5.64899 17.8281 5.85508L19.4687 12.8015L21.2674 5.85508C21.3281 5.64899 21.4011 5.51564 21.474 5.4429C21.5469 5.38229 21.6927 5.34592 21.8872 5.34592H22.8473C23.0174 5.34592 23.1025 5.43078 23.1025 5.6005C23.1025 5.64899 23.0903 5.69749 23.0903 5.7581C23.0781 5.81871 23.0538 5.90357 23.0174 6.01268L20.5138 14.0259C20.4531 14.232 20.3802 14.3654 20.2951 14.4381C20.21 14.4987 20.0763 14.5351 19.894 14.5351H19.0069C18.8124 14.5351 18.6787 14.4987 18.5937 14.426C18.5086 14.3532 18.4478 14.2199 18.3992 14.0138L16.7829 7.3462L15.1787 14.0138C15.1301 14.2199 15.0693 14.3532 14.9842 14.426C14.8992 14.4987 14.7655 14.5351 14.571 14.5351H13.6718ZM5.32267 13.4077C5.66296 13.4077 6.0154 13.347 6.39214 13.2137C6.76888 13.0925 7.09701 12.8621 7.37653 12.5469C7.54667 12.353 7.6682 12.1347 7.72897 11.8802C7.78973 11.6377 7.82619 11.3346 7.82619 10.9831V10.5466C7.52237 10.4739 7.20639 10.4133 6.86611 10.3769C6.53797 10.3406 6.20984 10.3163 5.89387 10.3163C5.20114 10.3163 4.69072 10.4497 4.35044 10.7285C4.01015 11.0073 3.84001 11.4074 3.84001 11.9287C3.84001 12.4136 3.96154 12.7773 4.21675 13.0197C4.49627 13.2864 4.84871 13.4077 5.32267 13.4077ZM9.53976 11.8317C9.53976 12.2196 9.57622 12.5227 9.66129 12.753C9.73421 12.9834 9.85574 13.2258 10.0016 13.4925C10.0502 13.5774 10.0745 13.6501 10.0745 13.7228C10.0745 13.832 10.0137 13.9289 9.88005 14.0259L9.21163 14.4866C9.11441 14.5472 9.02934 14.5715 8.94427 14.5715C8.83489 14.5715 8.73767 14.523 8.64044 14.426C8.49461 14.2805 8.37308 14.1229 8.2637 13.9411C8.16647 13.7713 8.0571 13.5653 7.94772 13.3349C7.13347 14.2926 6.11262 14.7654 4.89732 14.7654C4.0223 14.7654 3.32959 14.523 2.83131 14.0259C2.32089 13.5289 2.06567 12.8621 2.06567 12.0378C2.06567 11.1528 2.38165 10.4497 3.01361 9.90413C3.64556 9.37073 4.49627 9.0919 5.55358 9.0919C5.90602 9.0919 6.27061 9.11614 6.64735 9.17676C7.02409 9.22525 7.42514 9.31011 7.83834 9.40709V8.64335C7.83834 7.85536 7.68036 7.30983 7.35222 6.98251C7.02409 6.66732 6.46506 6.4976 5.66296 6.4976C5.29837 6.4976 4.92163 6.54609 4.54488 6.63095C4.16814 6.71581 3.7914 6.83704 3.42681 6.98251C3.25667 7.05525 3.13514 7.10374 3.06222 7.11587C2.9893 7.12799 2.94069 7.14011 2.90423 7.14011C2.75839 7.14011 2.68548 7.031 2.68548 6.81279V6.30363C2.68548 6.13391 2.70978 6.01268 2.75839 5.93994C2.80701 5.86721 2.90423 5.79447 3.05007 5.72173C3.41466 5.53989 3.85216 5.38229 4.36259 5.24894C4.87301 5.11559 5.40775 5.05497 5.97894 5.05497C7.21854 5.05497 8.11786 5.3338 8.70121 5.90357C9.2724 6.46123 9.56407 7.30983 9.56407 8.44938V11.8317H9.53976Z" fill="white"/>
-<path d="M28.9723 19.8449C25.5573 22.3665 20.5989 23.7 16.3332 23.7C10.3539 23.7 4.97014 21.4936 0.886731 17.8204C0.570753 17.5294 0.850272 17.1415 1.23917 17.3597C5.63855 19.9177 11.0709 21.4451 16.6978 21.4451C20.4895 21.4451 24.658 20.6572 28.4862 19.0448C29.0573 18.8023 29.5313 19.4327 28.9723 19.8449Z" fill="#FF9900"/>
-<path d="M30.3942 18.2205C29.9567 17.6628 27.5018 17.9537 26.3958 18.0871C26.0677 18.1235 26.0069 17.8325 26.3108 17.6264C28.2674 16.2565 31.4758 16.6566 31.8525 17.1051C32.2293 17.5658 31.7553 20.7784 29.9202 22.3059C29.6407 22.5362 29.3733 22.415 29.4949 22.0998C29.9081 21.0815 30.8317 18.7902 30.3942 18.2205Z" fill="#FF9900"/>
-</g>
-<defs>
-<clipPath id="clip0_394_42756">
-<rect width="124.5" height="24" fill="white" transform="translate(0.75)"/>
-</clipPath>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/azure.svg b/app/components/base/icons/assets/public/billing/azure.svg
deleted file mode 100644
index 186ab0a..0000000
--- a/app/components/base/icons/assets/public/billing/azure.svg
+++ /dev/null
@@ -1,25 +0,0 @@
-<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Group 5">
-<path id="Vector" d="M7.08403 0.812966H12.8543L6.86419 18.5609C6.80263 18.7433 6.68542 18.9018 6.52907 19.0141C6.37271 19.1263 6.18509 19.1867 5.99261 19.1868H1.50193C1.35609 19.1868 1.21234 19.1521 1.08258 19.0855C0.952814 19.019 0.840765 18.9225 0.755699 18.804C0.670633 18.6855 0.614995 18.5485 0.593389 18.4043C0.571782 18.2601 0.584829 18.1128 0.631448 17.9746L6.21222 1.43879C6.27376 1.25634 6.39099 1.09779 6.54739 0.985482C6.70379 0.873171 6.89148 0.812976 7.08403 0.812966Z" fill="url(#paint0_linear_644_3772)"/>
-<path id="Vector_2" d="M15.469 12.7173H6.31874C6.23367 12.7173 6.15054 12.7428 6.08019 12.7906C6.00984 12.8384 5.95552 12.9063 5.92431 12.9855C5.8931 13.0646 5.88644 13.1513 5.90521 13.2343C5.92398 13.3173 5.96731 13.3927 6.02954 13.4506L11.9093 18.9386C12.0805 19.0983 12.3059 19.187 12.54 19.187H17.7212L15.469 12.7173Z" fill="#0078D4"/>
-<path id="Vector_3" d="M7.08432 0.813056C6.88967 0.812309 6.69988 0.873821 6.54267 0.988606C6.38547 1.10339 6.26908 1.26543 6.21052 1.45107L0.638609 17.9596C0.588854 18.0983 0.573233 18.2469 0.593069 18.3929C0.612904 18.5389 0.667613 18.678 0.752567 18.7984C0.83752 18.9188 0.950219 19.0169 1.08113 19.0845C1.21204 19.1522 1.35731 19.1873 1.50466 19.1869H6.11124C6.28281 19.1562 6.44316 19.0806 6.57593 18.9676C6.7087 18.8547 6.80911 18.7086 6.86692 18.5442L7.97807 15.2695L11.9471 18.9715C12.1134 19.109 12.3221 19.1851 12.5379 19.1869H17.6998L15.4359 12.7172L8.83614 12.7188L12.8754 0.813056H7.08432Z" fill="url(#paint1_linear_644_3772)"/>
-<path id="Vector_4" d="M14.4539 1.43799C14.3925 1.25583 14.2754 1.09755 14.1193 0.985434C13.9631 0.87332 13.7757 0.813027 13.5835 0.813049H7.15259C7.34482 0.81306 7.53221 0.873366 7.68837 0.985475C7.84453 1.09758 7.96159 1.25585 8.02307 1.43799L13.6041 17.9744C13.6507 18.1126 13.6638 18.26 13.6422 18.4042C13.6206 18.5485 13.565 18.6856 13.4799 18.8041C13.3949 18.9226 13.2828 19.0191 13.153 19.0857C13.0232 19.1523 12.8795 19.1871 12.7336 19.1871H19.1647C19.3105 19.187 19.4543 19.1523 19.584 19.0856C19.7138 19.019 19.8258 18.9225 19.9109 18.804C19.9959 18.6855 20.0515 18.5484 20.0731 18.4042C20.0947 18.2599 20.0816 18.1126 20.0349 17.9744L14.4539 1.43799Z" fill="url(#paint2_linear_644_3772)"/>
-</g>
-<defs>
-<linearGradient id="paint0_linear_644_3772" x1="9.1871" y1="2.17453" x2="3.19457" y2="19.878" gradientUnits="userSpaceOnUse">
-<stop stop-color="#114A8B"/>
-<stop offset="1" stop-color="#0669BC"/>
-</linearGradient>
-<linearGradient id="paint1_linear_644_3772" x1="11.0593" y1="10.4249" x2="9.67315" y2="10.8936" gradientUnits="userSpaceOnUse">
-<stop stop-opacity="0.3"/>
-<stop offset="0.071" stop-opacity="0.2"/>
-<stop offset="0.321" stop-opacity="0.1"/>
-<stop offset="0.623" stop-opacity="0.05"/>
-<stop offset="1" stop-opacity="0"/>
-</linearGradient>
-<linearGradient id="paint2_linear_644_3772" x1="10.2966" y1="1.65827" x2="16.8746" y2="19.1833" gradientUnits="userSpaceOnUse">
-<stop stop-color="#3CCBF4"/>
-<stop offset="1" stop-color="#2892DF"/>
-</linearGradient>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/buildings.svg b/app/components/base/icons/assets/public/billing/buildings.svg
deleted file mode 100644
index 34e784d..0000000
--- a/app/components/base/icons/assets/public/billing/buildings.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="buildings">
-<path id="Vector" d="M5.04134 22.4583H17.2913M5.04134 22.4583V6.70833C5.04134 5.41967 6.08601 4.375 7.37467 4.375H14.958C16.2467 4.375 17.2913 5.41967 17.2913 6.70833V9.33333M5.04134 22.4583H2.70801M17.2913 22.4583V9.33333M17.2913 22.4583H24.2913M17.2913 9.33333H21.958C23.2467 9.33333 24.2913 10.378 24.2913 11.6667V22.4583M24.2913 22.4583H26.6247M12.6247 10.2083H9.70801M9.70801 14.875H12.6247" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/diamond.svg b/app/components/base/icons/assets/public/billing/diamond.svg
deleted file mode 100644
index f3692f8..0000000
--- a/app/components/base/icons/assets/public/billing/diamond.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="diamond">
-<path id="Vector" d="M10.2499 9.04167L7.62486 11.6667L10.2499 14.2917M15.9831 22.8501L25.4978 13.3353C26.4164 12.4168 26.408 10.925 25.4791 10.017L20.3883 5.03988C19.9523 4.61365 19.3668 4.375 18.7571 4.375H9.90929C9.29958 4.375 8.71408 4.61365 8.27811 5.03988L3.18727 10.017C2.25844 10.925 2.25002 12.4168 3.16852 13.3353L12.6833 22.8501C13.5945 23.7613 15.0719 23.7613 15.9831 22.8501Z" stroke="#DC6803" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/google-cloud.svg b/app/components/base/icons/assets/public/billing/google-cloud.svg
deleted file mode 100644
index 61e30a3..0000000
--- a/app/components/base/icons/assets/public/billing/google-cloud.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="22" height="18" viewBox="0 0 22 18" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Group 4">
-<path id="Vector" d="M14.1587 5.40399H14.7992L16.6247 3.57855L16.7143 2.80353C15.6686 1.88054 14.4049 1.23936 13.0424 0.94058C11.68 0.641797 10.2639 0.695269 8.92788 1.09594C7.59187 1.49662 6.38006 2.23127 5.40691 3.2305C4.43376 4.22973 3.73142 5.46055 3.36621 6.80669C3.56957 6.72334 3.79485 6.70982 4.00672 6.76826L7.6576 6.16619C7.6576 6.16619 7.84334 5.85874 7.93942 5.87796C8.72169 5.01883 9.80276 4.4912 10.9613 4.40309C12.1199 4.31497 13.2683 4.67304 14.1715 5.40399H14.1587Z" fill="#EA4335"/>
-<path id="Vector_2" d="M19.225 6.80663C18.8055 5.2615 17.944 3.87244 16.7463 2.80988L14.1843 5.3719C14.7182 5.80819 15.1461 6.36003 15.4357 6.9858C15.7253 7.61158 15.869 8.29494 15.856 8.98435V9.43911C16.1554 9.43911 16.4519 9.49809 16.7286 9.61268C17.0052 9.72727 17.2566 9.89523 17.4683 10.107C17.6801 10.3187 17.848 10.5701 17.9626 10.8467C18.0772 11.1234 18.1362 11.4199 18.1362 11.7193C18.1362 12.0187 18.0772 12.3153 17.9626 12.5919C17.848 12.8685 17.6801 13.1199 17.4683 13.3316C17.2566 13.5434 17.0052 13.7113 16.7286 13.8259C16.4519 13.9405 16.1554 13.9995 15.856 13.9995H11.2956L10.8408 14.4607V17.1956L11.2956 17.6504H15.856C17.1295 17.6603 18.3723 17.2601 19.4007 16.5089C20.429 15.7577 21.1883 14.6954 21.5662 13.4792C21.944 12.2631 21.9204 10.9576 21.4988 9.75589C21.0771 8.55419 20.2799 7.52012 19.225 6.80663Z" fill="#4285F4"/>
-<path id="Vector_3" d="M6.72886 17.625H11.2893V13.9741H6.72886C6.40396 13.9741 6.08286 13.9042 5.78732 13.7692L5.14681 13.9677L3.30856 15.7932L3.14844 16.4337C4.17929 17.2121 5.43714 17.6306 6.72886 17.625Z" fill="#34A853"/>
-<path id="Vector_4" d="M6.7289 5.78196C5.49325 5.78934 4.29076 6.18247 3.28939 6.90643C2.28801 7.6304 1.53775 8.64904 1.1434 9.8201C0.749049 10.9912 0.730302 12.2561 1.08978 13.4384C1.44925 14.6206 2.16899 15.661 3.14848 16.4143L5.79377 13.7691C5.4576 13.6172 5.16331 13.386 4.93613 13.0954C4.70895 12.8048 4.55567 12.4634 4.48944 12.1005C4.42321 11.7376 4.446 11.3641 4.55587 11.0119C4.66574 10.6598 4.8594 10.3396 5.12024 10.0788C5.38107 9.81792 5.7013 9.62426 6.05343 9.51439C6.40557 9.40452 6.7791 9.38172 7.14198 9.44795C7.50487 9.51418 7.84626 9.66747 8.13688 9.89465C8.4275 10.1218 8.65867 10.4161 8.81055 10.7523L11.4558 8.10699C10.9006 7.38115 10.185 6.79357 9.36499 6.39023C8.54496 5.98688 7.64275 5.7787 6.7289 5.78196Z" fill="#FBBC05"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/group-2.svg b/app/components/base/icons/assets/public/billing/group-2.svg
deleted file mode 100644
index 22970f8..0000000
--- a/app/components/base/icons/assets/public/billing/group-2.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M17.4942 15.3771C21.1508 13.8584 25.694 15.7846 27.1017 21.1559C27.4448 22.465 26.348 23.625 24.9948 23.625H19.6233M13.2066 8.16667C13.2066 10.2608 11.509 11.9583 9.41493 11.9583C7.32086 11.9583 5.62326 10.2608 5.62326 8.16667C5.62326 6.07258 7.32086 4.375 9.41493 4.375C11.509 4.375 13.2066 6.07258 13.2066 8.16667ZM23.7066 8.16667C23.7066 10.2608 22.009 11.9583 19.9149 11.9583C17.8209 11.9583 16.1232 10.2608 16.1232 8.16667C16.1232 6.07258 17.8209 4.375 19.9149 4.375C22.009 4.375 23.7066 6.07258 23.7066 8.16667ZM14.328 23.625H4.3352C2.98193 23.625 1.88599 22.4589 2.22976 21.15C4.42721 12.7833 14.2359 12.7833 16.4335 21.15C16.7772 22.4589 15.6813 23.625 14.328 23.625Z" stroke="#444CE7" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/keyframe.svg b/app/components/base/icons/assets/public/billing/keyframe.svg
deleted file mode 100644
index 2690394..0000000
--- a/app/components/base/icons/assets/public/billing/keyframe.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M15.9831 3.98321C15.072 3.072 13.5945 3.072 12.6833 3.98321L4.31648 12.35C3.40526 13.2612 3.40524 14.7386 4.31647 15.6499L12.6833 24.0167C13.5945 24.9279 15.072 24.9279 15.9831 24.0167L24.35 15.6499C25.2612 14.7386 25.2612 13.2612 24.35 12.35L15.9831 3.98321Z" stroke="#155AEF" stroke-width="1.5" stroke-linejoin="round"/>
-</svg>
diff --git a/app/components/base/icons/assets/public/billing/sparkles-soft.svg b/app/components/base/icons/assets/public/billing/sparkles-soft.svg
deleted file mode 100644
index 7a24c14..0000000
--- a/app/components/base/icons/assets/public/billing/sparkles-soft.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path opacity="0.5" d="M9.75878 1.67256C9.74813 1.57435 9.6684 1.5001 9.5735 1.5C9.47861 1.4999 9.39874 1.57397 9.38789 1.67217C9.33725 2.12931 9.20693 2.44292 9.00273 2.65564C8.79849 2.86835 8.49744 3.00411 8.05857 3.05683C7.9643 3.06816 7.89321 3.15136 7.89331 3.2502C7.89341 3.34905 7.96469 3.43208 8.05896 3.44321C8.49038 3.49411 8.79835 3.62984 9.00773 3.84402C9.216 4.05703 9.34877 4.3702 9.38736 4.82276C9.39595 4.92317 9.47673 5.00011 9.5735 5C9.67027 4.99988 9.75096 4.92276 9.75926 4.82232C9.79627 4.37742 9.92894 4.05719 10.1386 3.83882C10.3482 3.62045 10.6556 3.48223 11.0827 3.44372C11.1792 3.43503 11.2532 3.35103 11.2533 3.25022C11.2534 3.14942 11.1795 3.06524 11.0832 3.05632C10.6487 3.01612 10.3481 2.87779 10.1436 2.66085C9.93797 2.44273 9.80765 2.12197 9.75878 1.67256Z" fill="#FCFCFD"/>
-<path d="M6.45025 2.94373C6.42279 2.69117 6.21783 2.50026 5.9738 2.5C5.72982 2.49974 5.52443 2.69021 5.49649 2.94271C5.36631 4.11822 5.0312 4.92465 4.50609 5.47164C3.98098 6.0186 3.20681 6.3677 2.07832 6.5033C1.83592 6.5324 1.65307 6.74635 1.65332 7.0005C1.65357 7.2547 1.83684 7.4682 2.0793 7.4968C3.1887 7.6277 3.9805 7.97675 4.51896 8.5275C5.05449 9.07525 5.39598 9.8805 5.49519 11.0442C5.51722 11.3024 5.72502 11.5003 5.97385 11.5C6.22273 11.4997 6.43009 11.3014 6.45154 11.0431C6.54658 9.89905 6.88782 9.07565 7.42686 8.5141C7.96595 7.9526 8.75641 7.59715 9.8547 7.49815C10.1026 7.4758 10.293 7.2598 10.2933 7.00055C10.2936 6.74135 10.1037 6.5249 9.8558 6.50195C8.7386 6.3986 7.96556 6.0429 7.43972 5.48504C6.911 4.92415 6.57591 4.09936 6.45025 2.94373Z" fill="#FCFCFD"/>
-</svg>
diff --git a/app/components/base/icons/assets/public/common/gdpr.svg b/app/components/base/icons/assets/public/common/gdpr.svg
deleted file mode 100644
index 163a983..0000000
--- a/app/components/base/icons/assets/public/common/gdpr.svg
+++ /dev/null
@@ -1,53 +0,0 @@
-<svg width="23" height="28" viewBox="0 0 23 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Group">
-<g id="Group_2">
-<path id="Vector" d="M11.0371 28L10.7001 27.8596C8.90271 27.1013 0 23.001 0 16.8786V4.32497L11.0371 0L22.0742 4.32497V16.8786C22.0742 23.001 13.1434 27.1013 11.3741 27.8596L11.0371 28ZM1.71314 5.47643V16.8786C1.71314 18.9569 3.11735 21.0632 5.86961 23.1414C7.89167 24.658 10.0822 25.7252 11.0652 26.1464C12.0481 25.6971 14.2387 24.658 16.2608 23.1414C19.013 21.0632 20.4173 18.9569 20.4173 16.8786V5.47643L11.0652 1.82548L1.71314 5.47643Z" fill="white"/>
-</g>
-<g id="Group_3">
-<g id="Group_4">
-<path id="Vector_2" d="M11.0371 0.898682V27.0732C12.666 26.3711 21.2317 22.4674 21.2317 16.8786C21.2317 10.672 21.2317 4.88664 21.2317 4.88664L11.0371 0.898682Z" fill="#1611D3"/>
-</g>
-<g id="Group_5">
-<path id="Vector_3" d="M11.0371 0.898682V27.0732C9.40823 26.3711 0.842529 22.4674 0.842529 16.8786C0.842529 10.672 0.842529 4.88664 0.842529 4.88664L11.0371 0.898682Z" fill="#0D00A0"/>
-</g>
-</g>
-<g id="Group_6">
-<path id="Vector_4" d="M7.1333 15.5306C7.04905 15.5867 6.93671 15.6429 6.82437 15.671C6.71204 15.7272 6.5997 15.7552 6.48736 15.7833C6.37503 15.8114 6.23461 15.8395 6.0661 15.8676C5.92568 15.8957 5.72909 15.8957 5.56058 15.8957C5.33591 15.8957 5.1674 15.8676 4.97081 15.8114C4.80231 15.7552 4.6338 15.671 4.52147 15.5867C4.40913 15.5025 4.26871 15.3621 4.18445 15.2216C4.07212 15.0812 4.01595 14.9408 3.9317 14.7723C3.84745 14.6038 3.81936 14.4353 3.79128 14.2668C3.76319 14.0983 3.73511 13.9017 3.73511 13.7332C3.73511 13.5366 3.76319 13.34 3.79128 13.1715C3.81936 12.9749 3.87553 12.8064 3.95978 12.6379C4.04403 12.4694 4.12829 12.329 4.24062 12.1885C4.35296 12.0481 4.4653 11.9358 4.60572 11.8235C4.74614 11.7111 4.91465 11.6549 5.08315 11.5988C5.25166 11.5426 5.44825 11.5145 5.64484 11.5145C5.75717 11.5145 5.84143 11.5145 5.92568 11.5145C6.00993 11.5145 6.09418 11.5426 6.15035 11.5426C6.2346 11.5426 6.29077 11.5707 6.34694 11.5988C6.40311 11.6269 6.48736 11.6549 6.54353 11.683C6.5997 11.7111 6.68395 11.7673 6.74012 11.8235C6.79629 11.8796 6.88054 11.9358 6.9648 11.992L6.57162 12.5256C6.48736 12.4413 6.40311 12.3571 6.31886 12.3009C6.23461 12.2447 6.15035 12.1885 6.09418 12.1605C6.00993 12.1324 5.92568 12.1043 5.84143 12.1043C5.75717 12.1043 5.67292 12.0762 5.56058 12.0762C5.39208 12.0762 5.22357 12.1043 5.08315 12.1885C4.94273 12.2728 4.83039 12.3851 4.74614 12.5256C4.66189 12.666 4.57764 12.8345 4.52147 13.003C4.4653 13.1715 4.43721 13.3962 4.43721 13.6208C4.43721 13.8455 4.4653 14.0702 4.49338 14.2668C4.52147 14.4634 4.60572 14.66 4.68997 14.8004C4.77422 14.9408 4.88656 15.0812 5.05507 15.1655C5.19549 15.2497 5.36399 15.3059 5.58867 15.3059C5.64484 15.3059 5.70101 15.3059 5.75717 15.3059C5.81334 15.3059 5.89759 15.3059 5.95376 15.2778C6.00993 15.2778 6.09418 15.2497 6.15035 15.2497C6.20652 15.2497 6.26269 15.2216 6.31886 15.2216V13.7894H7.04905V15.5306H7.1333Z" fill="white"/>
-<path id="Vector_5" d="M8.93074 11.5707C9.32391 11.5707 9.66093 11.6268 9.91368 11.7392C10.1945 11.8515 10.3911 11.9919 10.5877 12.1885C10.7562 12.3851 10.8685 12.5817 10.9528 12.8345C11.0371 13.0872 11.0651 13.34 11.0651 13.6208C11.0651 13.8174 11.0371 14.014 11.009 14.1825C10.9809 14.351 10.9247 14.5476 10.8685 14.7161C10.7843 14.8846 10.7 15.025 10.5877 15.1655C10.4754 15.3059 10.3349 15.4182 10.1664 15.5025C9.99794 15.5867 9.82943 15.671 9.60476 15.7271C9.38008 15.7833 9.15541 15.8114 8.87457 15.8114H7.83545V11.5988H8.93074V11.5707ZM8.62181 12.1324V15.2497H8.84648C9.04307 15.2497 9.23966 15.2216 9.43625 15.1374C9.60476 15.0812 9.77326 14.9689 9.8856 14.8285C10.026 14.688 10.1103 14.5195 10.1945 14.3229C10.2788 14.1263 10.3069 13.8736 10.3069 13.5927C10.3069 13.3962 10.2788 13.2276 10.2226 13.0311C10.1664 12.8626 10.0822 12.694 9.96985 12.5536C9.85752 12.4132 9.7171 12.3009 9.54859 12.2166C9.38008 12.1324 9.15541 12.0762 8.90265 12.0762H8.62181V12.1324Z" fill="white"/>
-<path id="Vector_6" d="M12.5537 14.1825V15.8114H11.8235V11.5988H13.0311C13.312 11.5988 13.5366 11.6268 13.7332 11.683C13.9298 11.7392 14.0983 11.8234 14.2106 11.9358C14.3511 12.0481 14.4353 12.1885 14.4915 12.3289C14.5477 12.4694 14.5757 12.6379 14.5757 12.8345C14.5757 12.8906 14.5757 12.9749 14.5477 13.0872C14.5196 13.1715 14.4915 13.2838 14.4634 13.3681C14.4072 13.4804 14.3511 13.5647 14.2668 13.6489C14.1826 13.7332 14.0983 13.8174 13.9579 13.9017C13.8175 13.9859 13.677 14.0421 13.5085 14.0983C13.34 14.1544 13.1434 14.1544 12.8907 14.1544H12.5537V14.1825ZM12.5537 13.6208H12.9188C13.0592 13.6208 13.1715 13.5927 13.2839 13.5647C13.3962 13.5366 13.4805 13.4804 13.5647 13.4242C13.649 13.3681 13.7051 13.2838 13.7613 13.1715C13.8175 13.0872 13.8175 12.9749 13.8175 12.8345C13.8175 12.7221 13.7894 12.6379 13.7613 12.5536C13.7332 12.4694 13.677 12.3851 13.6209 12.3289C13.5647 12.2728 13.4524 12.2166 13.34 12.1604C13.2277 12.1324 13.0873 12.1043 12.9188 12.1043H12.5537V13.6208Z" fill="white"/>
-<path id="Vector_7" d="M15.9519 15.8114H15.2217V11.5988H16.4293C16.7101 11.5988 16.9348 11.6268 17.1314 11.683C17.328 11.7392 17.4965 11.8234 17.6088 11.9077C17.7493 12.02 17.8335 12.1324 17.8897 12.2728C17.9459 12.4132 17.9739 12.5817 17.9739 12.7502C17.9739 12.8625 17.9459 13.003 17.9178 13.1153C17.8897 13.2276 17.8335 13.3681 17.7493 13.4804C17.665 13.5927 17.5808 13.7051 17.4403 13.7893C17.2999 13.8736 17.1595 13.9578 16.9629 14.014L18.2548 15.8114H17.4123L16.2889 14.0983C16.2327 14.0983 16.2046 14.0983 16.1485 14.0983C16.0923 14.0983 16.0361 14.0983 15.9519 14.0702V15.8114ZM15.9519 13.5085C16.008 13.5085 16.0642 13.5085 16.1204 13.5085C16.1765 13.5085 16.2327 13.5085 16.2889 13.5085C16.4293 13.5085 16.5697 13.4804 16.6821 13.4523C16.7944 13.4242 16.9067 13.3681 16.991 13.3119C17.0752 13.2557 17.1314 13.1715 17.1876 13.0872C17.2437 13.003 17.2437 12.8906 17.2437 12.7783C17.2437 12.666 17.2157 12.5536 17.1876 12.4694C17.1595 12.3851 17.1033 12.3289 17.0472 12.2728C16.991 12.2166 16.8787 12.1885 16.7663 12.1604C16.654 12.1324 16.4855 12.1324 16.317 12.1324H15.98V13.5085H15.9519Z" fill="white"/>
-</g>
-<g id="Group_7">
-<g id="Group_8">
-<path id="Vector_8" d="M11.0372 4.63391L11.3461 5.56069H12.301L11.5427 6.12238L11.8236 7.02107L11.0372 6.45939L10.2789 7.02107L10.5598 6.12238L9.80151 5.56069H10.7564L11.0372 4.63391Z" fill="#F7BC37"/>
-</g>
-<g id="Group_9">
-<path id="Vector_9" d="M14.3231 5.53259L14.632 6.43129H15.5869L14.8005 6.99297L15.1095 7.91975L14.3231 7.35807L13.5648 7.91975L13.8457 6.99297L13.0593 6.43129H14.0423L14.3231 5.53259Z" fill="#F7BC37"/>
-</g>
-<g id="Group_10">
-<path id="Vector_10" d="M17.0472 7.9198L17.3281 8.81849H18.2829L17.5247 9.38018L17.8055 10.307L17.0472 9.74528L16.2609 10.307L16.5698 9.38018L15.7834 8.81849H16.7383L17.0472 7.9198Z" fill="#F7BC37"/>
-</g>
-<g id="Group_11">
-<path id="Vector_11" d="M11.0372 19.7714L11.3461 20.6981H12.301L11.5427 21.2598L11.8236 22.1585L11.0372 21.5968L10.2789 22.1585L10.5598 21.2598L9.80151 20.6981H10.7564L11.0372 19.7714Z" fill="#F7BC37"/>
-</g>
-<g id="Group_12">
-<path id="Vector_12" d="M14.3231 18.985L14.632 19.8837H15.5869L14.8005 20.4454L15.1095 21.3721L14.3231 20.8105L13.5648 21.3721L13.8457 20.4454L13.0593 19.8837H14.0423L14.3231 18.985Z" fill="#F7BC37"/>
-</g>
-<g id="Group_13">
-<path id="Vector_13" d="M17.0472 17.019L17.3281 17.9458H18.2829L17.5247 18.5075L17.8055 19.4062L17.0472 18.8445L16.2609 19.4062L16.5698 18.5075L15.7834 17.9458H16.7383L17.0472 17.019Z" fill="#F7BC37"/>
-</g>
-<g id="Group_14">
-<path id="Vector_14" d="M7.77942 5.53259L7.47049 6.43129H6.51562L7.30199 6.99297L6.99306 7.91975L7.77942 7.35807L8.53769 7.91975L8.25685 6.99297L9.01512 6.43129H8.06026L7.77942 5.53259Z" fill="#F7BC37"/>
-</g>
-<g id="Group_15">
-<path id="Vector_15" d="M5.05529 7.9198L4.77444 8.81849H3.81958L4.57785 9.38018L4.29701 10.307L5.05529 9.74528L5.84165 10.307L5.53272 9.38018L6.31908 8.81849H5.36421L5.05529 7.9198Z" fill="#F7BC37"/>
-</g>
-<g id="Group_16">
-<path id="Vector_16" d="M7.77942 18.985L7.47049 19.8837H6.51562L7.30199 20.4454L6.99306 21.3721L7.77942 20.8105L8.53769 21.3721L8.25685 20.4454L9.01512 19.8837H8.06026L7.77942 18.985Z" fill="#F7BC37"/>
-</g>
-<g id="Group_17">
-<path id="Vector_17" d="M5.05529 17.019L4.77444 17.9458H3.81958L4.57785 18.5075L4.29701 19.4062L5.05529 18.8445L5.84165 19.4062L5.53272 18.5075L6.31908 17.9458H5.36421L5.05529 17.019Z" fill="#F7BC37"/>
-</g>
-</g>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/public/common/iso.svg b/app/components/base/icons/assets/public/common/iso.svg
deleted file mode 100644
index c48c357..0000000
--- a/app/components/base/icons/assets/public/common/iso.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg fill="none" height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m8 9.82143c0-2.6628 2.2386-4.82143 5-4.82143h38c2.7614 0 5 2.15863 5 4.82143v44.35717c0 2.6628-2.2386 4.8214-5 4.8214h-38c-2.7614 0-5-2.1586-5-4.8214z" fill="#2a3e92"/><g fill="#fff"><path d="m43.4424 46.9899v-1.84h3.08v7.31h-2.05v-5.47z"/><path d="m36.5801 48.7c0-1.1467.2333-2.05.7-2.71.4666-.66 1.2-.99 2.2-.99s1.7333.33 2.2.99c.4733.66.71 1.5633.71 2.71 0 1.16-.2334 2.07-.7 2.73-.4667.66-1.2034.99-2.21.99-1.0067 0-1.7434-.33-2.21-.99-.46-.66-.69-1.57-.69-2.73zm3.87 0c0-.6-.0634-1.0567-.19-1.37-.1267-.32-.3867-.48-.78-.48-.3934 0-.6534.16-.78.48-.1267.3133-.19.77-.19 1.37 0 .6133.06 1.08.18 1.4.1266.3133.39.47.79.47s.66-.1567.78-.47c.1266-.32.19-.7867.19-1.4z"/><path d="m29.5078 48.7c0-1.1467.2333-2.05.7-2.71s1.2-.99 2.2-.99 1.7333.33 2.2.99c.4733.66.71 1.5633.71 2.71 0 1.16-.2333 2.07-.7 2.73s-1.2033.99-2.21.99-1.7433-.33-2.21-.99c-.46-.66-.69-1.57-.69-2.73zm3.87 0c0-.6-.0633-1.0567-.19-1.37-.1267-.32-.3867-.48-.78-.48s-.6533.16-.78.48c-.1267.3133-.19.77-.19 1.37 0 .6133.06 1.08.18 1.4.1267.3133.39.47.79.47s.66-.1567.78-.47c.1267-.32.19-.7867.19-1.4z"/><path d="m28.4533 46.6099-2.4 5.85h-2.01l2.42-5.62h-2.85v-1.68h4.84z"/><path d="m17.52 50.89c.6467-.5067 1.1767-.9433 1.59-1.31s.76-.7433 1.04-1.13c.28-.3933.42-.7667.42-1.12 0-.2133-.05-.38-.15-.5-.0933-.12-.2333-.18-.42-.18-.1933 0-.3433.0833-.45.25-.1067.16-.1567.3967-.15.71h-1.9c.02-.5933.15-1.0833.39-1.47.24-.3933.5533-.68.94-.86.3867-.1867.8167-.28 1.29-.28.82 0 1.43.2033 1.83.61s.6.9333.6 1.58c0 .6933-.2333 1.3433-.7 1.95-.46.6067-1.0367 1.15-1.73 1.63h2.5v1.59h-5.1z"/><path clip-rule="evenodd" d="m32.5672 11.0281c1.0059.0357 2.2045.2319 3.2746.5387 3.289.9417 6.1071 2.9857 8.1332 5.8894.1106.1605.2033.3103.2033.3317 0 .0286-.1605.0393-.5136.0393h-.5137l-.1641-.2319c-.453-.6278-1.3377-1.6123-1.9191-2.1296l-.2497-.2212-.61.1534c-1.0916.2676-2.2937.4852-3.4923.6314-.2711.0357-.4923.0749-.4923.0856 0 .0143.05.1855.1106.3782.1391.4601.3532 1.2306.3532 1.2877 0 .0357-.1106.0464-.4459.0464h-.4424l-.0606-.2069c-.0144-.0559-.0371-.1365-.0606-.22-.0229-.0816-.0466-.1661-.0643-.233-.1141-.3924-.2889-.9239-.3174-.956-.0143-.0179-.2497-.0143-.5208.0071-.2676.0214-1.0274.0571-1.6838.082-1.2592.0428-3.0321.0036-4.2164-.0963-.3032-.0249-.5636-.0357-.5778-.0214-.0286.0286-.2854.8312-.4067 1.2842l-.0963.3603h-.4388c-.4031 0-.4423-.0071-.4423-.0642 0-.0785.2033-.8347.3567-1.3234.0607-.1855.0963-.3496.0785-.3639-.0143-.0107-.1926-.0428-.3995-.0642-.9739-.1106-2.3865-.371-3.4673-.635l-.6671-.1641-.1891.1606c-.5743.4922-1.4982 1.5053-1.9726 2.1581l-.214.2961h-.5244c-.2925 0-.528-.0107-.528-.0214 0-.0464.5708-.8383.8918-1.245 1.3698-1.7158 3.0464-3.0642 5.0298-4.0451 1.5124-.7492 2.9893-1.1879 4.7265-1.4126.4387-.0571 1.6016-.1178 1.8727-.0999.0678.0035.3675.0178.66.0249zm-1.2702.8884c-.824.2818-1.6088 1.1736-2.3293 2.6468-.1641.3318-.3068.635-.3175.6671-.0179.0499.0107.0642.1641.0821.8846.0963 3.2033.1462 4.4661.0927 1.516-.0642 1.6587-.0749 1.6587-.1427 0-.0892-.5351-1.1629-.7634-1.5267-.4637-.7491-.9239-1.27-1.3947-1.5803-.4959-.321-.9988-.4031-1.484-.239zm-1.9937.139c-1.912.4031-3.4745 1.0487-5.1082 2.1189-.3996.2604-.528.371-.4281.371.0123 0 .1824.0368.3973.0833l.1093.0237c.8632.1962 2.6646.4922 3.2925.5422l.1355.0107.1498-.3567c.4352-1.0167 1.113-2.1261 1.6623-2.704.1213-.1284.1213-.1319.0393-.1284-.05.0036-.1605.0179-.2497.0393zm5.6573 1.2843c-.2069-.3318-.6135-.8918-.8597-1.1772l-.0035-.004c-.0584-.0664-.0945-.1073-.0853-.126.0148-.0301.1474-.0021.4938.0711l.0088.0018c1.673.3532 3.3567 1.0666 4.8764 2.069.2782.1819.5065.346.5065.3639 0 .0891-2.6576.5564-3.7812.667l-.2319.0214-.1248-.3103c-.1641-.4174-.5458-1.1665-.7991-1.5767z" fill-rule="evenodd"/><path d="m30.8906 19.1863c.5565.0678.8704.082 2.365.0927l1.7194.0143v3.849h-3.0642l-.0214-.8383-.214-.0856c-.6136-.2426-1.4376-.3746-2.3544-.3781-.9025 0-1.3091.0784-1.6979.3388-.3996.2605-.4566.792-.1249 1.1201.346.3496.7705.4602 2.6611.6956 1.6338.2069 2.2652.3389 3.0571.6493.3817.1498.8633.4316 1.1629.6849.4423.3674.8062.9738.9738 1.6159.1249.478.1606 1.3983.0714 1.887-.1534.8348-.4673 1.434-1.0416 1.9798-.6207.5922-1.4198.981-2.522 1.2271-1.2164.2747-2.9394.3175-4.6659.1213-.5922-.0642-.9346-.0785-2.3579-.0892l-1.6694-.0142v-3.8133h3.0677v.7847l.1391.0714c.4531.2283 1.3841.3959 2.3651.4173 1.6908.0428 2.4506-.2568 2.4542-.9702 0-.2783-.0785-.4281-.3139-.5922-.3425-.2426-.824-.3531-2.3615-.5493-1.8478-.239-2.579-.4067-3.3817-.7848-1.2806-.6064-1.912-1.5303-2.0404-2.9857-.0713-.7706.0535-1.4911.3567-2.1189.6814-1.4091 2.2402-2.2188 4.6552-2.4186.4851-.0392 2.1617.0143 2.7824.0892z"/><path clip-rule="evenodd" d="m48.2307 20.9806c-.981-.9774-2.2474-1.5767-3.8383-1.8157-.3924-.0607-1.8371-.1035-2.1938-.0678-1.0631.1106-1.9228.3353-2.7182.7099-1.9049.9025-3.0892 2.579-3.3817 4.7907-.0607.4673-.0714 1.5945-.0179 2.0404.1356 1.1166.4745 2.0726 1.0238 2.9073.4531.6849 1.2913 1.4375 2.0797 1.8656 1.1665.635 2.7967.9524 4.3983.8597 3.0571-.1819 5.2295-1.6873 6.0678-4.2057.2461-.742.3496-1.4483.3496-2.39.0035-1.9655-.5743-3.4994-1.7693-4.6944zm-7.7841 3.6847c.214-1.5268.906-2.3722 2.0939-2.5541.2961-.0464.9132-.0179 1.2093.0499.5279.1284 1.0023.4566 1.2949.9025.4209.635.5957 1.4019.5957 2.6112-.0036 1.4732-.2533 2.3258-.874 2.9429-.4459.4495-.8561.6136-1.6088.6492-1.4447.0678-2.3187-.6635-2.6575-2.2259-.1071-.4994-.1356-1.78-.0535-2.3757z" fill-rule="evenodd"/><path d="m22.2402 22.5002h-2.069v6.4209h2.069v3.1748l-8.2224-.0178-.0107-1.5803-.0071-1.5767h2.069v-6.4209l-1.0238-.0071-1.0274-.0107-.0107-1.5803-.0071-1.5767h8.2402z"/><path clip-rule="evenodd" d="m22.5684 35.9913c-.5601-.4852-1.5518-1.5874-2.0048-2.2295l-.1177-.1677h-.5315c-.4174 0-.528.0107-.5066.0428.4495.767 1.4769 2.0012 2.2973 2.7646 2.3865 2.2188 5.1367 3.503 8.4007 3.9239.6278.0785 2.547.0892 3.2105.0178 4.0202-.4459 7.6551-2.472 10.1165-5.6432.2747-.3532.7455-1.031.7455-1.0773 0-.0143-.2318-.0286-.5136-.0286h-.5101l-.3104.4067c-.1676.2247-.4816.6064-.6956.8525-.371.4174-1.1415 1.1843-1.3127 1.2985-.0713.0464-.132.0392-.6421-.0928-.9845-.2497-2.283-.4958-3.3282-.6278-.2461-.0285-.4958-.0642-.56-.0749l-.1142-.0178.0892-.2569c.0963-.2782.4067-1.3912.4067-1.4518 0-.025-.1499-.0357-.4495-.0285l-.4495.0107-.1177.428c-.0642.2355-.1712.5957-.239.8026l-.1213.3746h-.2318c-.1249 0-.5886-.025-1.0309-.0535-1.4091-.0928-4.4126-.0607-5.5648.0571l-.1998.0214-.1498-.4745-.0158-.053c-.0769-.2586-.1768-.5945-.2268-.7746l-.0963-.346h-.4388c-.3995 0-.4423.0072-.4423.0642 0 .0785.2105.8419.3567 1.3021.0607.1962.107.3567.0999.3602-.0071.0036-.2997.0428-.6528.0857-1.1415.1391-2.2473.3424-3.3639.6171l-.5814.1427zm7.698.0141c-.9631.0535-1.623.0927-1.6337.1034-.0286.0286.4209.9525.6563 1.3591.5066.8704 1.006 1.4554 1.5196 1.7907.3354.2176.5387.289.8704.3175.3246.025.5601-.0285.9239-.214.4103-.2105 1.0024-.8062 1.4055-1.4162.2675-.4031.931-1.6694.931-1.7764 0-.0571-.0749-.0678-.7669-.1142-.585-.0392-3.4352-.0749-3.9061-.0499zm-3.7032.3211c.3603-.0499.7027-.0963.7598-.1035.0606-.0107.1676-.0142.2425-.0107l.1356.0036.1712.3924c.4424 1.0166.9881 1.9156 1.566 2.5755.107.1249.1748.2247.1534.2247s-.264-.0463-.5386-.107c-1.327-.2782-2.654-.7812-3.874-1.4625-.4709-.2604-1.409-.8633-1.4732-.9418-.0286-.0356.0998-.0749.5778-.1783.7527-.1605 1.4233-.2747 2.2795-.3924zm9.2354.0962c-.132.3353-.5743 1.2129-.8062 1.5946-.2497.4137-.5529.8347-.8169 1.1379-.1105.1284-.1926.2354-.1855.2461.0393.0393 1.2521-.2532 1.9014-.4601 1.1664-.371 2.6361-1.0987 3.6991-1.83l.3139-.2176-.189-.0428c-.956-.2212-2.1011-.4281-3.0107-.5458-.3139-.0392-.6279-.0785-.6956-.0892-.0483-.0055-.0779-.0089-.101.0018-.0367.017-.057.0694-.1095.2051z" fill-rule="evenodd"/></g></svg>
\ No newline at end of file
diff --git a/app/components/base/icons/assets/public/common/soc2.svg b/app/components/base/icons/assets/public/common/soc2.svg
deleted file mode 100644
index 226d99c..0000000
--- a/app/components/base/icons/assets/public/common/soc2.svg
+++ /dev/null
@@ -1,103 +0,0 @@
-<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Group 7">
-<path id="Vector" d="M14 28C21.732 28 28 21.732 28 14C28 6.26801 21.732 0 14 0C6.26801 0 0 6.26801 0 14C0 21.732 6.26801 28 14 28Z" fill="url(#paint0_linear_6186_11887)"/>
-<path id="Vector_2" d="M13.9999 24.8636C19.9997 24.8636 24.8636 19.9997 24.8636 13.9999C24.8636 8.00006 19.9997 3.13623 13.9999 3.13623C8.00006 3.13623 3.13623 8.00006 3.13623 13.9999C3.13623 19.9997 8.00006 24.8636 13.9999 24.8636Z" fill="url(#paint1_linear_6186_11887)"/>
-<g id="Group">
-<path id="Vector_3" d="M5.43048 23.2492C5.46819 23.2107 5.48424 23.1666 5.47862 23.1177C5.473 23.0687 5.44412 22.9997 5.39197 22.909C5.33901 22.8192 5.30772 22.7462 5.29809 22.69C5.28365 22.6106 5.30291 22.5432 5.35586 22.4878C5.40721 22.4341 5.4714 22.4124 5.54762 22.4212C5.62384 22.43 5.69605 22.4678 5.76425 22.5344C5.81079 22.5793 5.84368 22.6282 5.86294 22.6812C5.8822 22.7341 5.88621 22.7871 5.87578 22.8384C5.86535 22.8898 5.84048 22.9355 5.80277 22.9748L5.74339 22.9171C5.78993 22.8689 5.80999 22.8152 5.80597 22.755C5.80116 22.6948 5.77147 22.6379 5.71692 22.5841C5.66316 22.5327 5.6094 22.5031 5.55484 22.4966C5.50028 22.4902 5.45455 22.5055 5.41684 22.544C5.38234 22.5793 5.3687 22.6226 5.37512 22.6724C5.38154 22.7221 5.40802 22.7863 5.45455 22.8641C5.50028 22.9419 5.53077 23.0053 5.54521 23.0551C5.55966 23.1048 5.56287 23.1497 5.55404 23.1915C5.54522 23.2332 5.52435 23.2709 5.49066 23.3054C5.4377 23.3608 5.37271 23.3832 5.29649 23.3736C5.22027 23.364 5.14645 23.3247 5.07424 23.2557C5.0253 23.2083 4.98839 23.1554 4.96432 23.0984C4.94025 23.0414 4.93303 22.9861 4.94186 22.9339C4.95148 22.8818 4.97555 22.8352 5.01487 22.7943L5.07424 22.8513C5.0269 22.9002 5.00765 22.9572 5.01647 23.0214C5.0261 23.0856 5.0606 23.1465 5.12158 23.2059C5.17614 23.2581 5.2315 23.2885 5.28686 23.2966C5.34303 23.3046 5.39036 23.2885 5.42888 23.2492H5.43048Z" fill="white"/>
-<path id="Vector_4" d="M6.31617 23.7556C6.2584 23.8238 6.19662 23.8744 6.12923 23.9065C6.06183 23.9386 5.99524 23.9498 5.92784 23.941C5.86044 23.9321 5.79786 23.9033 5.74009 23.8551C5.65344 23.7821 5.60931 23.6922 5.60771 23.5855C5.6061 23.4788 5.65023 23.3721 5.73849 23.267L5.80268 23.19C5.85964 23.1226 5.92223 23.072 5.98962 23.0399C6.05702 23.0078 6.12522 22.9958 6.19261 23.0046C6.26001 23.0135 6.32259 23.0415 6.37956 23.0897C6.43652 23.1378 6.47584 23.194 6.4967 23.2582C6.51756 23.3224 6.51836 23.3898 6.49991 23.4604C6.48145 23.531 6.44455 23.6 6.38999 23.6666L6.31537 23.7556H6.31617ZM6.32099 23.6224C6.39641 23.5326 6.43492 23.4459 6.43652 23.3609C6.43893 23.2758 6.40443 23.2044 6.33382 23.145C6.26482 23.0873 6.1886 23.0664 6.10436 23.0825C6.02091 23.0993 5.94068 23.1531 5.86365 23.2437L5.79866 23.3216C5.72485 23.4098 5.68634 23.4965 5.68393 23.5823C5.68152 23.6682 5.71522 23.7404 5.78583 23.7998C5.85724 23.8591 5.93426 23.8808 6.0161 23.8631C6.09874 23.8455 6.17817 23.7917 6.25439 23.7003L6.32018 23.6216L6.32099 23.6224Z" fill="white"/>
-<path id="Vector_5" d="M6.97267 24.3966C6.90367 24.4728 6.82825 24.5153 6.74641 24.5226C6.66457 24.5306 6.58113 24.5041 6.49769 24.4439C6.43912 24.4022 6.3982 24.3501 6.37413 24.2883C6.35006 24.2265 6.34524 24.1599 6.35969 24.0893C6.37413 24.0187 6.40542 23.9481 6.45516 23.8791L6.52898 23.7772C6.57953 23.7074 6.63649 23.6536 6.69988 23.6175C6.76326 23.5814 6.82905 23.5646 6.89565 23.5686C6.96304 23.5726 7.02643 23.5959 7.0866 23.6392C7.17085 23.7002 7.2214 23.7708 7.23744 23.8518C7.25349 23.9328 7.23664 24.0155 7.1869 24.1021L7.1195 24.054C7.19973 23.908 7.17486 23.7892 7.04649 23.6961C6.97508 23.6448 6.89886 23.6304 6.81782 23.6536C6.73678 23.6769 6.66217 23.7347 6.59477 23.8293L6.52497 23.9256C6.45918 24.0163 6.42788 24.1037 6.43029 24.188C6.4327 24.2722 6.4688 24.3388 6.53941 24.3902C6.60921 24.4407 6.6734 24.4616 6.73277 24.4536C6.79215 24.4455 6.84991 24.411 6.90608 24.3509L6.97347 24.399L6.97267 24.3966Z" fill="white"/>
-<path id="Vector_6" d="M7.31909 24.9735L7.65768 24.4119L7.55578 24.3501L7.58948 24.2939L7.69138 24.3557L7.73631 24.2811C7.77482 24.2177 7.81975 24.1792 7.87271 24.1648C7.92566 24.1503 7.98022 24.1607 8.03799 24.1952C8.06366 24.2105 8.08613 24.2289 8.10458 24.249L8.06527 24.3028C8.04922 24.2867 8.02996 24.2723 8.0075 24.2586C7.96979 24.2362 7.93368 24.2297 7.89838 24.241C7.86308 24.2522 7.83259 24.2787 7.80691 24.322L7.76038 24.399L7.90801 24.4881L7.87431 24.5443L7.72668 24.4552L7.38809 25.0168L7.31989 24.9751L7.31909 24.9735Z" fill="white"/>
-<path id="Vector_7" d="M7.82238 24.8435C7.85528 24.7825 7.8962 24.7336 7.94675 24.6975C7.99649 24.6614 8.05105 24.6413 8.10882 24.6373C8.16659 24.6333 8.22275 24.6461 8.27811 24.6758C8.36236 24.7216 8.41531 24.7874 8.43617 24.8756C8.45703 24.9631 8.44099 25.0561 8.38803 25.154L8.38001 25.1685C8.34711 25.2302 8.30539 25.2792 8.25565 25.3153C8.2059 25.3514 8.15214 25.3715 8.09438 25.3755C8.03661 25.3787 7.98044 25.3658 7.92589 25.3361C7.84164 25.2912 7.78949 25.2246 7.76863 25.1372C7.74777 25.0497 7.76381 24.9566 7.81597 24.8588L7.82319 24.8443L7.82238 24.8435ZM7.88256 24.9013C7.84164 24.9775 7.828 25.0505 7.84084 25.1203C7.85367 25.1901 7.89219 25.2423 7.95637 25.2768C8.01976 25.3105 8.08395 25.3137 8.14974 25.2864C8.21553 25.2591 8.26929 25.2054 8.31261 25.1251L8.31983 25.1115C8.34631 25.0634 8.36075 25.0136 8.36476 24.9639C8.36878 24.9141 8.35995 24.8692 8.33909 24.8291C8.31823 24.7898 8.28694 24.7585 8.24522 24.736C8.18263 24.7023 8.11845 24.6991 8.05265 24.7272C7.98686 24.7553 7.9323 24.809 7.88978 24.8884L7.88256 24.9013Z" fill="white"/>
-<path id="Vector_8" d="M8.97134 25.1115C8.9577 25.101 8.94166 25.0922 8.92481 25.0842C8.87988 25.0625 8.83575 25.0577 8.79242 25.0673C8.7491 25.0778 8.70978 25.1034 8.67368 25.1452L8.46106 25.5929L8.38965 25.5592L8.69855 24.9069L8.76915 24.9406L8.72101 25.0449C8.79563 24.9855 8.87506 24.9767 8.95931 25.016C8.97937 25.0256 8.99381 25.036 9.00344 25.0465L8.97054 25.1115H8.97134Z" fill="white"/>
-<path id="Vector_9" d="M9.77199 25.8825C9.79124 25.832 9.78883 25.7854 9.76476 25.7429C9.74069 25.7004 9.68614 25.6474 9.60269 25.5857C9.51925 25.5239 9.46148 25.4685 9.43019 25.4212C9.38526 25.3538 9.37643 25.284 9.40371 25.2126C9.43019 25.1436 9.47994 25.0978 9.55375 25.0762C9.62757 25.0545 9.7086 25.0609 9.79766 25.0946C9.85784 25.1179 9.90758 25.15 9.94609 25.1909C9.98461 25.2326 10.0095 25.2784 10.0199 25.3305C10.0303 25.3819 10.0255 25.4332 10.0063 25.4846L9.92924 25.4549C9.95251 25.3931 9.95091 25.3345 9.92283 25.2808C9.89474 25.227 9.845 25.1861 9.77359 25.1596C9.70459 25.1331 9.64281 25.1275 9.58986 25.1428C9.5369 25.158 9.5008 25.1909 9.48234 25.2407C9.46469 25.2872 9.4687 25.3313 9.49518 25.3746C9.52085 25.418 9.5706 25.4661 9.64361 25.5191C9.71663 25.572 9.76958 25.6186 9.80247 25.6587C9.83537 25.6988 9.85623 25.7389 9.86426 25.7806C9.87228 25.8224 9.86827 25.8649 9.85142 25.9106C9.82414 25.982 9.77359 26.0286 9.70058 26.0502C9.62676 26.0719 9.54332 26.0647 9.45025 26.0294C9.38606 26.0053 9.3315 25.9716 9.28737 25.9283C9.24244 25.8849 9.21436 25.8376 9.20233 25.7862C9.19029 25.7349 9.1943 25.6819 9.21436 25.629L9.29139 25.6579C9.26732 25.7221 9.27213 25.7814 9.30583 25.8368C9.33953 25.8922 9.39569 25.9347 9.47512 25.9652C9.54573 25.9916 9.60831 25.9981 9.66287 25.9828C9.71743 25.9676 9.75433 25.9347 9.77439 25.8833L9.77199 25.8825Z" fill="white"/>
-<path id="Vector_10" d="M10.2131 26.2917C10.1545 26.2733 10.1064 26.2428 10.0679 26.1995C10.0294 26.1561 10.0053 26.104 9.99485 26.0446C9.98442 25.9844 9.98924 25.9226 10.0093 25.8585L10.0181 25.8312C10.039 25.7646 10.0703 25.7092 10.112 25.6643C10.1537 25.6194 10.2027 25.5889 10.258 25.5728C10.3134 25.5568 10.3679 25.5568 10.4209 25.5728C10.5043 25.5985 10.5621 25.6482 10.5934 25.7205C10.6247 25.7927 10.6247 25.8785 10.5942 25.9772L10.5806 26.0197L10.0887 25.8673L10.0839 25.8817C10.0598 25.9596 10.0623 26.0318 10.0903 26.0976C10.1192 26.1633 10.1674 26.2067 10.2356 26.2283C10.2765 26.2412 10.315 26.2444 10.3503 26.2396C10.3856 26.2348 10.4217 26.2195 10.4578 26.1946L10.4939 26.246C10.4129 26.3094 10.319 26.3246 10.2123 26.2917H10.2131ZM10.4008 25.6378C10.3439 25.6202 10.2885 25.6258 10.2364 25.6563C10.1842 25.686 10.1425 25.7349 10.112 25.8031L10.5252 25.9315L10.5276 25.9234C10.5461 25.8569 10.5437 25.7967 10.5212 25.7437C10.4987 25.6908 10.4578 25.6555 10.4008 25.6378Z" fill="white"/>
-<path id="Vector_11" d="M11.1407 25.856C11.1254 25.8488 11.1078 25.8424 11.0893 25.8384C11.0412 25.8255 10.997 25.8287 10.9561 25.8472C10.916 25.8657 10.8823 25.8985 10.8542 25.9459L10.7299 26.4257L10.6528 26.4056L10.8334 25.7068L10.9088 25.726L10.8815 25.8376C10.9441 25.7654 11.0203 25.7413 11.1102 25.7646C11.1318 25.7702 11.1479 25.7774 11.1591 25.7862L11.139 25.856H11.1407Z" fill="white"/>
-<path id="Vector_12" d="M11.3831 26.4659L11.7233 25.9123L11.8036 25.9292L11.392 26.5807L11.3286 26.5678L11.2114 25.8064L11.2917 25.8232L11.3831 26.4667V26.4659Z" fill="white"/>
-<path id="Vector_13" d="M11.895 26.6737L11.8164 26.66L11.936 25.9484L12.0146 25.962L11.895 26.6737ZM11.9568 25.7406C11.9592 25.7261 11.9664 25.7141 11.9777 25.7053C11.9889 25.6964 12.0034 25.694 12.0194 25.6964C12.0362 25.6996 12.0483 25.7069 12.0563 25.7181C12.0643 25.7301 12.0675 25.743 12.0651 25.7582C12.0627 25.7727 12.0555 25.7847 12.0443 25.7927C12.033 25.8007 12.0186 25.804 12.0017 25.8007C11.9849 25.7983 11.9729 25.7911 11.9648 25.7791C11.9568 25.767 11.9544 25.7542 11.9568 25.7398V25.7406Z" fill="white"/>
-<path id="Vector_14" d="M12.4061 26.6929C12.4615 26.7002 12.5096 26.6905 12.5505 26.664C12.5915 26.6376 12.6171 26.5999 12.626 26.5509L12.7022 26.5605C12.6942 26.6039 12.6757 26.6424 12.646 26.6745C12.6163 26.7074 12.5794 26.7314 12.5353 26.7459C12.4912 26.7603 12.4454 26.7651 12.3973 26.7595C12.3034 26.7475 12.2328 26.7058 12.1863 26.6336C12.1398 26.5613 12.1229 26.4699 12.1373 26.36L12.1406 26.3359C12.1494 26.2653 12.1694 26.2043 12.2015 26.153C12.2328 26.1016 12.2737 26.0647 12.3235 26.0406C12.3732 26.0166 12.4294 26.0085 12.4912 26.0166C12.5698 26.0262 12.6316 26.0583 12.6765 26.1112C12.7214 26.1642 12.7407 26.2292 12.7351 26.3062L12.6589 26.2966C12.6621 26.2404 12.6476 26.1923 12.6155 26.153C12.5826 26.1136 12.5385 26.0912 12.4823 26.084C12.4109 26.0751 12.3524 26.0936 12.3058 26.1401C12.2601 26.1867 12.2312 26.2565 12.2192 26.3495L12.216 26.3728C12.2047 26.4643 12.216 26.5381 12.2481 26.5942C12.281 26.6504 12.3339 26.6833 12.4053 26.6921L12.4061 26.6929Z" fill="white"/>
-<path id="Vector_15" d="M13.1466 26.8301C13.0856 26.8261 13.0311 26.8068 12.9837 26.7739C12.9364 26.7402 12.9011 26.6961 12.877 26.6399C12.8529 26.5846 12.8433 26.5228 12.8481 26.4562L12.8497 26.4273C12.8545 26.3583 12.8722 26.2965 12.9027 26.2428C12.9332 26.189 12.9733 26.1481 13.0238 26.12C13.0744 26.0919 13.1265 26.0791 13.1827 26.0831C13.2702 26.0887 13.3376 26.1232 13.3849 26.1866C13.4322 26.25 13.4523 26.3326 13.4451 26.4361L13.4419 26.4811L12.9284 26.4458V26.461C12.9219 26.5429 12.9404 26.6119 12.9837 26.6696C13.027 26.7274 13.084 26.7587 13.1546 26.7635C13.1971 26.7667 13.2357 26.7611 13.2694 26.7483C13.3031 26.7354 13.3343 26.7122 13.3632 26.6801L13.4106 26.721C13.3464 26.802 13.2581 26.8381 13.1474 26.8309L13.1466 26.8301ZM13.1779 26.1505C13.1177 26.1465 13.0664 26.165 13.0222 26.2059C12.9781 26.2468 12.9492 26.3046 12.9356 26.3776L13.3672 26.4073V26.3984C13.3704 26.3294 13.3544 26.2717 13.3199 26.2251C13.2854 26.1794 13.2381 26.1537 13.1779 26.1497V26.1505Z" fill="white"/>
-<path id="Vector_16" d="M14.6863 26.3993C14.6887 26.4884 14.6751 26.5678 14.6454 26.636C14.6165 26.7042 14.5732 26.7571 14.517 26.7949C14.4608 26.8326 14.395 26.8526 14.3196 26.8542C14.2065 26.8566 14.1134 26.8189 14.042 26.7395C13.9706 26.6601 13.9329 26.5517 13.9297 26.4137L13.9273 26.3135C13.9249 26.2252 13.9385 26.1466 13.9682 26.0776C13.9979 26.0086 14.0412 25.9548 14.0974 25.9171C14.1535 25.8794 14.2193 25.8593 14.2939 25.8569C14.3686 25.8553 14.4352 25.8714 14.4929 25.9059C14.5507 25.9404 14.5964 25.9901 14.6293 26.0551C14.6622 26.1201 14.6799 26.1963 14.6839 26.283L14.6871 26.3993H14.6863ZM14.602 26.2958C14.5988 26.1787 14.5707 26.088 14.5162 26.023C14.4616 25.958 14.3886 25.9267 14.2963 25.9291C14.2065 25.9315 14.1351 25.966 14.0829 26.0342C14.0308 26.1024 14.0067 26.1955 14.0091 26.3143L14.0115 26.4154C14.0147 26.5301 14.0436 26.6207 14.0982 26.6873C14.1535 26.7531 14.2265 26.7852 14.318 26.7828C14.4111 26.7804 14.4825 26.7459 14.533 26.6777C14.5836 26.6095 14.6069 26.5164 14.6044 26.3985L14.602 26.2958Z" fill="white"/>
-<path id="Vector_17" d="M15.1989 26.1353C15.182 26.1337 15.1636 26.1337 15.1443 26.1353C15.0946 26.1393 15.0536 26.1562 15.0216 26.1866C14.9895 26.2171 14.9678 26.2597 14.9582 26.3134L14.9983 26.8077L14.9189 26.8141L14.8611 26.0952L14.9389 26.0888L14.9493 26.2027C14.9846 26.1144 15.0488 26.0663 15.1419 26.0591C15.1644 26.0575 15.182 26.0591 15.1949 26.0639L15.1989 26.1361V26.1353Z" fill="white"/>
-<path id="Vector_18" d="M15.3144 26.4129C15.3 26.3005 15.3136 26.2091 15.3545 26.1369C15.3955 26.0646 15.4588 26.0237 15.5439 26.0125C15.641 25.9997 15.7204 26.0293 15.7814 26.0999L15.7718 25.9964L15.8456 25.9868L15.9362 26.6881C15.9483 26.7803 15.9314 26.8565 15.8873 26.9167C15.8424 26.9769 15.7766 27.013 15.6883 27.0242C15.6386 27.0307 15.5896 27.0258 15.5415 27.009C15.4933 26.9921 15.454 26.9673 15.4235 26.9336L15.4621 26.8798C15.527 26.9416 15.5976 26.9673 15.6755 26.9568C15.7413 26.948 15.791 26.9223 15.8223 26.8782C15.8544 26.8341 15.8664 26.7779 15.8592 26.7081L15.8472 26.6183C15.8055 26.6953 15.7365 26.7402 15.6394 26.753C15.5567 26.7635 15.4853 26.7394 15.4268 26.68C15.3682 26.6207 15.3313 26.534 15.3168 26.4217L15.3152 26.4113L15.3144 26.4129ZM15.3963 26.4161C15.4083 26.5075 15.4356 26.5773 15.4789 26.6247C15.5222 26.6728 15.5776 26.6921 15.6442 26.684C15.7413 26.6712 15.8047 26.6191 15.8343 26.526L15.791 26.193C15.7661 26.1497 15.7357 26.1184 15.6971 26.0983C15.6594 26.0791 15.6161 26.0719 15.5672 26.0783C15.5006 26.0871 15.4524 26.12 15.4219 26.177C15.3914 26.2339 15.3834 26.3134 15.3963 26.4153V26.4161Z" fill="white"/>
-<path id="Vector_19" d="M16.6271 26.5773C16.615 26.5565 16.6038 26.5244 16.5934 26.4811C16.5725 26.522 16.5428 26.5565 16.5043 26.5838C16.4658 26.611 16.4225 26.6295 16.3743 26.6391C16.3061 26.652 16.2476 26.6439 16.1978 26.6142C16.1481 26.5846 16.1184 26.5404 16.1071 26.4827C16.0935 26.4137 16.112 26.3535 16.1617 26.3021C16.2115 26.2508 16.2877 26.2155 16.3904 26.1954L16.5324 26.1681L16.5171 26.0879C16.5075 26.0374 16.4842 26.0005 16.4473 25.9772C16.4104 25.9539 16.3623 25.9483 16.3021 25.9595C16.2476 25.97 16.205 25.9924 16.1745 26.0277C16.1441 26.0622 16.1328 26.1 16.14 26.1393L16.0614 26.1537C16.051 26.0975 16.067 26.0438 16.112 25.9924C16.1561 25.9411 16.2171 25.9082 16.2933 25.8938C16.3719 25.8785 16.4385 25.8865 16.4915 25.917C16.5444 25.9475 16.5789 25.9981 16.5934 26.0687L16.6576 26.404C16.6704 26.4722 16.688 26.5228 16.7089 26.5541L16.7105 26.5621L16.6271 26.5781V26.5773ZM16.3695 26.5685C16.4217 26.5581 16.4666 26.5364 16.5027 26.5035C16.5388 26.4706 16.5629 26.4305 16.5733 26.3848L16.5436 26.2291L16.4032 26.2564C16.3254 26.2725 16.2668 26.2981 16.2283 26.3342C16.1898 26.3703 16.1745 26.4129 16.1842 26.461C16.1922 26.5011 16.2131 26.5308 16.2476 26.5517C16.2821 26.5725 16.323 26.5781 16.3703 26.5685H16.3695Z" fill="white"/>
-<path id="Vector_20" d="M16.8277 25.7934L16.8606 25.9122C16.8759 25.8624 16.8999 25.8215 16.9336 25.7886C16.9673 25.7557 17.0074 25.7333 17.0548 25.7212C17.1294 25.702 17.1912 25.7092 17.2385 25.7421C17.2859 25.775 17.3204 25.8336 17.3428 25.9178L17.46 26.3767L17.3829 26.3968L17.265 25.9379C17.2489 25.8753 17.2233 25.8328 17.1896 25.8087C17.1559 25.7846 17.1101 25.7798 17.0532 25.7951C17.005 25.8071 16.9665 25.8328 16.9376 25.8721C16.9088 25.9114 16.8919 25.9587 16.8871 26.0141L17.0099 26.4931L16.9328 26.5131L16.7539 25.8143L16.8277 25.7951V25.7934Z" fill="white"/>
-<path id="Vector_21" d="M17.4094 25.4204C17.4054 25.406 17.4062 25.3923 17.4126 25.3795C17.4191 25.3667 17.4303 25.3578 17.4463 25.353C17.4624 25.3482 17.4768 25.349 17.4897 25.3562C17.5025 25.3634 17.5105 25.3739 17.5153 25.3883C17.5194 25.4028 17.5186 25.4164 17.5121 25.4284C17.5057 25.4413 17.4937 25.4501 17.4776 25.4549C17.4616 25.4597 17.4471 25.4589 17.4351 25.4517C17.4231 25.4445 17.4142 25.434 17.4102 25.4196L17.4094 25.4204ZM17.7689 26.2837L17.6927 26.307L17.4832 25.6162L17.5595 25.5929L17.7689 26.2837Z" fill="white"/>
-<path id="Vector_22" d="M18.0281 26.1313L18.471 25.9772L18.4935 26.0406L17.9575 26.2267L17.9382 26.1714L18.1565 25.4669L17.7561 25.6057L17.7336 25.5399L18.2295 25.3674L18.2495 25.4244L18.0297 26.1297L18.0281 26.1313Z" fill="white"/>
-<path id="Vector_23" d="M19.0799 25.8031C19.0639 25.7854 19.0462 25.7558 19.027 25.7156C19.0149 25.7598 18.9925 25.7999 18.9604 25.8344C18.9283 25.8689 18.889 25.8962 18.844 25.9146C18.7799 25.9411 18.7205 25.9443 18.6659 25.925C18.6114 25.9058 18.5728 25.8689 18.5504 25.8143C18.5239 25.7493 18.5295 25.6868 18.568 25.6266C18.6065 25.5664 18.6739 25.5167 18.7702 25.4765L18.9042 25.4212L18.8729 25.345C18.8529 25.2976 18.8232 25.2655 18.7823 25.2511C18.7413 25.2366 18.6932 25.2398 18.637 25.2631C18.5857 25.284 18.5488 25.3153 18.5255 25.3554C18.503 25.3955 18.499 25.434 18.5143 25.4709L18.4397 25.5006C18.418 25.4477 18.4236 25.3915 18.4565 25.3321C18.4902 25.2727 18.5424 25.2286 18.6146 25.1989C18.6892 25.1684 18.755 25.1628 18.8135 25.1821C18.8721 25.2013 18.9154 25.2447 18.9443 25.3105L19.0743 25.6258C19.1008 25.69 19.1281 25.7357 19.1545 25.7622L19.1578 25.7694L19.0791 25.8023L19.0799 25.8031ZM18.8264 25.8456C18.8761 25.8256 18.9146 25.7951 18.9435 25.755C18.9724 25.7148 18.9877 25.6715 18.9885 25.6242L18.9283 25.4773L18.7967 25.5319C18.7237 25.5632 18.6715 25.6001 18.641 25.6434C18.6106 25.6868 18.6041 25.7309 18.6234 25.7766C18.6386 25.8143 18.6659 25.8392 18.7036 25.8528C18.7413 25.8657 18.7831 25.8633 18.8272 25.8448L18.8264 25.8456Z" fill="white"/>
-<path id="Vector_24" d="M19.083 24.8058L19.1616 24.9727L19.2964 24.9093L19.3245 24.9687L19.1897 25.032L19.3943 25.4677C19.4112 25.5038 19.4304 25.5279 19.4521 25.5391C19.4737 25.5504 19.4994 25.5496 19.5299 25.5351C19.5419 25.5295 19.5604 25.5183 19.5853 25.5014L19.6157 25.5584C19.5997 25.5744 19.5756 25.5897 19.5435 25.6049C19.4938 25.6282 19.4513 25.6306 19.4152 25.6129C19.3791 25.5945 19.3478 25.5576 19.3213 25.5022L19.1167 25.0665L18.9963 25.1227L18.9683 25.0633L19.0886 25.0072L19.01 24.8403L19.0822 24.8066L19.083 24.8058Z" fill="white"/>
-<path id="Vector_25" d="M19.3438 24.6526C19.3374 24.639 19.3358 24.6254 19.3398 24.6117C19.3438 24.5981 19.3535 24.5876 19.3687 24.5796C19.384 24.5716 19.3984 24.5708 19.412 24.5756C19.4257 24.5804 19.4361 24.5893 19.4425 24.6029C19.449 24.6165 19.4506 24.6294 19.4465 24.643C19.4425 24.6566 19.4329 24.6671 19.4177 24.6751C19.4024 24.6831 19.388 24.6839 19.3751 24.6799C19.3623 24.6759 19.3519 24.6663 19.3446 24.6526H19.3438ZM19.8493 25.4389L19.7779 25.475L19.4506 24.8316L19.522 24.7955L19.8493 25.4389Z" fill="white"/>
-<path id="Vector_26" d="M19.8461 25.0264C19.8115 24.9663 19.7931 24.9053 19.7891 24.8435C19.7851 24.7817 19.7971 24.7256 19.8244 24.6742C19.8517 24.6229 19.8926 24.5819 19.9471 24.5515C20.0306 24.5041 20.1148 24.4953 20.1999 24.525C20.2849 24.5547 20.3547 24.6172 20.4093 24.7143L20.4173 24.7288C20.4518 24.7897 20.4711 24.8507 20.4751 24.9125C20.4791 24.9743 20.4671 25.0304 20.4398 25.081C20.4125 25.1315 20.3708 25.1717 20.3162 25.2029C20.2328 25.2503 20.1485 25.2591 20.0635 25.2294C19.9784 25.2005 19.9086 25.1372 19.8533 25.0401L19.8452 25.0264H19.8461ZM19.9271 25.0064C19.9696 25.0818 20.0242 25.1323 20.09 25.158C20.1558 25.1837 20.2207 25.1797 20.2841 25.1436C20.3467 25.1083 20.3844 25.0553 20.3957 24.9855C20.4069 24.9157 20.3908 24.8411 20.3459 24.7617L20.3387 24.748C20.3114 24.6999 20.2777 24.6614 20.2376 24.6317C20.1975 24.602 20.155 24.5851 20.11 24.5811C20.0659 24.5771 20.0226 24.5876 19.9808 24.6108C19.9191 24.6461 19.8822 24.6983 19.8701 24.7697C19.8581 24.8403 19.8749 24.9149 19.9191 24.9935L19.9263 25.0064H19.9271Z" fill="white"/>
-<path id="Vector_27" d="M20.4318 24.2803L20.5016 24.3822C20.5 24.3301 20.5096 24.2835 20.5313 24.2418C20.5521 24.2001 20.5834 24.1664 20.6244 24.1391C20.6893 24.0966 20.7495 24.0838 20.8049 24.0998C20.8602 24.1159 20.9116 24.16 20.9597 24.233L21.2173 24.6302L21.1507 24.6735L20.8923 24.2755C20.857 24.2218 20.8193 24.1889 20.7792 24.1768C20.7391 24.1648 20.695 24.1752 20.6452 24.2073C20.6035 24.2346 20.5754 24.2707 20.561 24.3172C20.5465 24.3638 20.5449 24.4143 20.5586 24.4681L20.8281 24.8829L20.7616 24.9262L20.3684 24.3213L20.4318 24.2795V24.2803Z" fill="white"/>
-<path id="Vector_28" d="M21.6546 24.0886C21.6313 24.0565 21.5993 24.0404 21.5599 24.0404C21.5198 24.0404 21.4701 24.0532 21.4107 24.0805C21.3513 24.1078 21.3016 24.1247 21.2631 24.1311C21.2246 24.1383 21.1901 24.1359 21.1612 24.1263C21.1323 24.1166 21.1074 24.0966 21.0858 24.0677C21.0521 24.022 21.0432 23.9698 21.0593 23.912C21.0753 23.8543 21.1138 23.8029 21.1732 23.7588C21.2382 23.7115 21.3016 23.689 21.3642 23.6922C21.4267 23.6954 21.4773 23.7227 21.515 23.774L21.4508 23.8214C21.4259 23.7877 21.3906 23.7692 21.3457 23.7676C21.3008 23.766 21.2567 23.7813 21.2133 23.8133C21.1708 23.8446 21.1443 23.8791 21.1323 23.9168C21.1203 23.9546 21.1259 23.9883 21.1475 24.0187C21.1692 24.0476 21.1965 24.0621 21.2294 24.0629C21.2623 24.0629 21.312 24.0492 21.3778 24.0212C21.4436 23.9931 21.4966 23.9762 21.5359 23.9706C21.5752 23.965 21.6089 23.9674 21.6386 23.9786C21.6675 23.9899 21.6931 24.0099 21.7156 24.0404C21.7517 24.0894 21.7605 24.1431 21.7429 24.2017C21.7252 24.2603 21.6843 24.3132 21.6201 24.3597C21.5527 24.4095 21.4853 24.4336 21.4195 24.432C21.3529 24.4303 21.3016 24.4039 21.2647 24.3541L21.3289 24.3068C21.3594 24.3429 21.3963 24.3605 21.4412 24.3597C21.4861 24.3589 21.5319 24.3413 21.58 24.306C21.6249 24.2731 21.6538 24.2362 21.6666 24.1969C21.6795 24.1575 21.6755 24.1214 21.653 24.0918L21.6546 24.0886Z" fill="white"/>
-<path id="Vector_29" d="M22.7023 23.6914L22.6518 23.7363L21.8848 22.8778L21.9353 22.8329L22.7023 23.6914Z" fill="white"/>
-<path id="Vector_30" d="M23.418 22.3659C23.3868 22.337 23.3523 22.3258 23.3145 22.3322C23.2776 22.3386 23.2239 22.3627 23.1533 22.4044C23.0827 22.4461 23.0217 22.4742 22.9687 22.4886C22.8684 22.5159 22.785 22.4999 22.7192 22.4397C22.6614 22.3867 22.6358 22.3193 22.6414 22.2383C22.647 22.1573 22.6847 22.0786 22.7529 22.004C22.7986 21.9543 22.8484 21.9182 22.9029 21.8957C22.9567 21.8732 23.0113 21.8668 23.0658 21.8756C23.1204 21.8845 23.1677 21.9077 23.2094 21.9454L23.0955 22.069C23.0586 22.0345 23.0185 22.0193 22.9752 22.0241C22.9326 22.0281 22.8909 22.0522 22.8516 22.0955C22.8147 22.1364 22.7938 22.1757 22.7906 22.2142C22.7874 22.2527 22.801 22.2864 22.8323 22.3145C22.8588 22.3386 22.8917 22.3466 22.931 22.3386C22.9711 22.3306 23.0241 22.3057 23.0923 22.2656C23.1597 22.2255 23.2199 22.1974 23.272 22.1829C23.3242 22.1685 23.3707 22.1661 23.4124 22.1757C23.4541 22.1853 23.4935 22.2062 23.5304 22.2399C23.5897 22.2945 23.6162 22.3611 23.6098 22.4389C23.6034 22.5167 23.5641 22.5953 23.4919 22.6732C23.4445 22.7253 23.3916 22.7638 23.3322 22.7895C23.2736 22.8152 23.2159 22.8248 23.1597 22.8176C23.1035 22.8104 23.0538 22.7871 23.0089 22.7454L23.1228 22.621C23.1637 22.6579 23.207 22.674 23.2544 22.6675C23.3009 22.6611 23.3474 22.633 23.394 22.5825C23.4333 22.5392 23.455 22.4991 23.4574 22.4605C23.4598 22.4228 23.4469 22.3907 23.418 22.3643V22.3659Z" fill="white"/>
-<path id="Vector_31" d="M24.0366 22.0386C23.9724 22.1188 23.8946 22.1629 23.8039 22.1718C23.7133 22.1806 23.6266 22.1517 23.5424 22.0843L23.5271 22.0715C23.471 22.0265 23.43 21.9752 23.4028 21.9182C23.3763 21.8612 23.3659 21.8027 23.3731 21.7441C23.3803 21.6855 23.4028 21.6318 23.4413 21.5836C23.5031 21.5074 23.5753 21.4681 23.6571 21.4657C23.7389 21.4633 23.8256 21.4978 23.9147 21.57L23.9652 21.6109L23.6691 21.9776C23.7189 22.0113 23.7678 22.0249 23.8168 22.0201C23.8657 22.0145 23.9066 21.9912 23.9403 21.9503C23.9869 21.8925 24.0013 21.8267 23.9845 21.7529L24.104 21.7369C24.1193 21.7866 24.1217 21.8372 24.1096 21.8901C24.0976 21.9423 24.0735 21.992 24.0358 22.0386H24.0366ZM23.5432 21.6655C23.5151 21.7 23.5047 21.7377 23.5119 21.7786C23.5191 21.8195 23.5416 21.8604 23.5801 21.9014L23.7742 21.6607L23.7646 21.6534C23.7205 21.6221 23.6788 21.6077 23.6419 21.6101C23.6042 21.6125 23.5713 21.631 23.5432 21.6663V21.6655Z" fill="white"/>
-<path id="Vector_32" d="M24.0584 21.0357C24.0432 21.0509 24.0287 21.0678 24.0151 21.0862C23.9718 21.1464 23.9653 21.2034 23.9958 21.2579L24.3946 21.5484L24.2991 21.6791L23.7158 21.2547L23.8065 21.1295L23.8739 21.1737C23.8466 21.1055 23.853 21.0429 23.8939 20.9867C23.9076 20.9683 23.9212 20.9546 23.9349 20.9458L24.0576 21.0357H24.0584Z" fill="white"/>
-<path id="Vector_33" d="M24.5717 20.9305L24.2243 20.5197L24.3166 20.3801L24.7827 20.9851L24.7057 21.103L23.9644 20.9177L24.0566 20.7773L24.5733 20.9313L24.5717 20.9305Z" fill="white"/>
-<path id="Vector_34" d="M24.2029 20.1997C24.1812 20.1868 24.1676 20.1692 24.1619 20.1475C24.1555 20.1258 24.1603 20.1018 24.1756 20.0769C24.1908 20.052 24.2093 20.0368 24.2318 20.0312C24.2542 20.0255 24.2759 20.0296 24.2975 20.0424C24.3184 20.0552 24.332 20.0721 24.3377 20.0945C24.3433 20.117 24.3385 20.1403 24.324 20.1652C24.3088 20.19 24.2903 20.2053 24.2687 20.2109C24.247 20.2157 24.2253 20.2125 24.2045 20.1997H24.2029ZM25.071 20.5182L24.9876 20.657L24.3681 20.2863L24.4516 20.1475L25.071 20.5182Z" fill="white"/>
-<path id="Vector_35" d="M25.2146 20.0271C25.2339 19.9918 25.2395 19.9565 25.2315 19.922C25.2235 19.8875 25.205 19.861 25.1745 19.8426L25.2475 19.7086C25.286 19.7318 25.3165 19.7639 25.3382 19.8056C25.3599 19.8474 25.3703 19.8931 25.3687 19.9436C25.3671 19.9942 25.3542 20.0423 25.3294 20.0881C25.2812 20.1771 25.2146 20.2317 25.1288 20.2525C25.0429 20.2734 24.9499 20.2566 24.8488 20.202L24.8343 20.194C24.738 20.1418 24.6747 20.0744 24.6442 19.991C24.6137 19.9075 24.6233 19.8217 24.6715 19.7326C24.7124 19.6572 24.7677 19.6075 24.8375 19.5842C24.9073 19.5601 24.9788 19.5665 25.0518 19.6035L24.9788 19.7374C24.9418 19.719 24.9049 19.7158 24.8688 19.7262C24.8327 19.7366 24.8054 19.7599 24.7854 19.796C24.7605 19.8426 24.7581 19.8867 24.7782 19.93C24.7982 19.9733 24.8416 20.0134 24.9098 20.0504L24.933 20.0624C25.002 20.0993 25.0598 20.1153 25.1071 20.1081C25.1545 20.1009 25.1906 20.0744 25.2162 20.0279L25.2146 20.0271Z" fill="white"/>
-<path id="Vector_36" d="M25.6743 19.398C25.6309 19.4911 25.5659 19.5529 25.4809 19.5834C25.3959 19.6139 25.3036 19.6066 25.2065 19.5609L25.188 19.5521C25.1231 19.5216 25.0701 19.4815 25.0308 19.4325C24.9915 19.3836 24.9674 19.329 24.9602 19.2705C24.953 19.2119 24.9618 19.1541 24.9883 19.098C25.03 19.0089 25.0902 18.9535 25.1696 18.9311C25.249 18.9086 25.3405 18.9222 25.4448 18.9704L25.5042 18.9977L25.3052 19.4253C25.3614 19.4462 25.4127 19.4478 25.4584 19.4309C25.505 19.4141 25.5387 19.3812 25.5611 19.3338C25.5924 19.2664 25.5908 19.199 25.5563 19.1316L25.6686 19.0875C25.6951 19.1316 25.7096 19.1814 25.7104 19.2352C25.7112 19.2889 25.6991 19.3427 25.6743 19.3972V19.398ZM25.1054 19.1541C25.087 19.1942 25.0853 19.2335 25.1022 19.2713C25.119 19.309 25.1511 19.3435 25.1977 19.374L25.3285 19.0939L25.3172 19.0891C25.2667 19.0691 25.2234 19.0651 25.1872 19.0763C25.1511 19.0875 25.1239 19.1132 25.1046 19.1541H25.1054Z" fill="white"/>
-<path id="Vector_37" d="M25.8155 17.7453C25.9054 17.7774 25.9784 17.8199 26.0354 17.8753C26.0923 17.9306 26.1284 17.9932 26.1445 18.063C26.1605 18.1328 26.1549 18.2059 26.1284 18.2813C26.102 18.3551 26.061 18.4153 26.0041 18.4602C25.9471 18.5051 25.8797 18.5324 25.8019 18.5404C25.7232 18.5485 25.6406 18.5372 25.5532 18.5067L25.5018 18.4883C25.4127 18.457 25.3389 18.4129 25.282 18.3575C25.225 18.3013 25.1881 18.2387 25.172 18.1681C25.156 18.0975 25.1616 18.0253 25.1881 17.9507C25.2146 17.8761 25.2555 17.8159 25.3116 17.771C25.3678 17.7261 25.4352 17.6996 25.5138 17.6924C25.5925 17.6843 25.6759 17.6964 25.7658 17.7277L25.8163 17.7453H25.8155ZM25.712 17.8873C25.6109 17.8512 25.5259 17.8432 25.4585 17.8625C25.3911 17.8817 25.3445 17.9266 25.3197 17.9972C25.2956 18.0662 25.3036 18.1296 25.3437 18.1874C25.3839 18.2452 25.4529 18.2917 25.5515 18.3278L25.6045 18.3463C25.7048 18.3816 25.7898 18.3896 25.8588 18.3695C25.9278 18.3495 25.9744 18.3053 25.9993 18.2355C26.0241 18.1649 26.0161 18.1015 25.976 18.0446C25.9359 17.9876 25.8637 17.9411 25.761 17.905L25.7128 17.8881L25.712 17.8873Z" fill="white"/>
-<path id="Vector_38" d="M25.8541 17.1956C25.8444 17.2149 25.8372 17.2357 25.8308 17.2574C25.8099 17.3288 25.8236 17.385 25.8709 17.4251L26.3451 17.5615L26.3002 17.7171L25.6069 17.5173L25.6495 17.3689L25.7281 17.3874C25.6783 17.332 25.6639 17.2718 25.6832 17.2052C25.6896 17.1828 25.6976 17.1651 25.708 17.1531L25.8541 17.1956Z" fill="white"/>
-<path id="Vector_39" d="M26.0747 17.182C25.9656 17.1563 25.8846 17.1106 25.8316 17.044C25.7787 16.9774 25.7618 16.902 25.7819 16.8169C25.8003 16.7367 25.8437 16.6805 25.9102 16.6477L25.8412 16.6236L25.8749 16.4816L26.5561 16.6412C26.6484 16.6629 26.7142 16.7086 26.7543 16.7784C26.7944 16.8482 26.8024 16.9317 26.78 17.0296C26.7679 17.0809 26.7455 17.1291 26.7126 17.1732C26.6797 17.2173 26.6428 17.2478 26.6019 17.2655L26.5248 17.1684C26.5938 17.1331 26.6364 17.0801 26.6532 17.0095C26.6652 16.9574 26.6612 16.9124 26.6396 16.8755C26.6179 16.8386 26.5802 16.8137 26.5248 16.8009L26.4775 16.7897C26.5176 16.8466 26.5289 16.9132 26.5112 16.9894C26.4919 17.0713 26.4438 17.1315 26.366 17.1684C26.2881 17.2053 26.1919 17.2101 26.0763 17.1828L26.0747 17.182ZM26.1253 17.028C26.1959 17.0448 26.2545 17.0432 26.3018 17.0239C26.3491 17.0047 26.3788 16.9694 26.3908 16.918C26.4061 16.8547 26.3892 16.8009 26.3419 16.7576L26.033 16.6854C25.9728 16.703 25.9351 16.7431 25.9199 16.8065C25.9078 16.8587 25.9191 16.9036 25.9536 16.9421C25.9881 16.9806 26.045 17.0095 26.1253 17.028Z" fill="white"/>
-<path id="Vector_40" d="M26.6877 16.0219C26.6733 16.0267 26.65 16.0291 26.6179 16.0291C26.662 16.0892 26.6781 16.1558 26.6661 16.2297C26.654 16.3011 26.6235 16.3556 26.5754 16.3941C26.5273 16.4326 26.4727 16.4463 26.4125 16.4359C26.3371 16.423 26.2833 16.3853 26.252 16.3219C26.2208 16.2585 26.2143 16.1751 26.232 16.07L26.2488 15.9721L26.2023 15.9641C26.1654 15.9577 26.1341 15.9633 26.1084 15.9801C26.0828 15.997 26.0667 16.0267 26.0595 16.0684C26.0531 16.1045 26.0571 16.1358 26.0715 16.1623C26.086 16.1887 26.1068 16.204 26.1349 16.2088L26.1076 16.3685C26.0683 16.362 26.0346 16.3428 26.0049 16.3115C25.9752 16.2802 25.9544 16.2401 25.9431 16.1927C25.9311 16.1446 25.9303 16.0941 25.9399 16.0387C25.9544 15.9553 25.9865 15.8927 26.0362 15.8502C26.0868 15.8076 26.1493 15.7924 26.2256 15.8036L26.5465 15.8582C26.6107 15.8694 26.6628 15.8686 26.7046 15.8574L26.7158 15.859L26.6885 16.0219H26.6877ZM26.5433 16.1783C26.5489 16.147 26.5457 16.1157 26.5353 16.0852C26.5248 16.0547 26.508 16.0307 26.4839 16.0122L26.3499 15.9898L26.3355 16.0756C26.3259 16.135 26.3283 16.1807 26.3435 16.2144C26.3588 16.2481 26.386 16.2674 26.4237 16.2738C26.4542 16.2786 26.4807 16.273 26.5024 16.2553C26.524 16.2377 26.5377 16.212 26.5433 16.1783Z" fill="white"/>
-<path id="Vector_41" d="M26.0384 15.453L26.1219 15.457C26.0633 15.3968 26.0392 15.3238 26.0481 15.2379C26.0641 15.0887 26.158 15.0213 26.3289 15.0374L26.8031 15.0879L26.7862 15.2492L26.3217 15.1994C26.2759 15.1946 26.2414 15.201 26.2174 15.2179C26.1933 15.2355 26.1788 15.266 26.174 15.3109C26.1668 15.3759 26.1909 15.4273 26.247 15.4658L26.7573 15.5204L26.7405 15.6816L26.0232 15.6046L26.0392 15.453H26.0384Z" fill="white"/>
-<path id="Vector_42" d="M25.9078 14.8416C25.883 14.84 25.8629 14.8312 25.8477 14.8143C25.8324 14.7975 25.8252 14.7742 25.8276 14.7453C25.8292 14.7165 25.8388 14.694 25.8565 14.6787C25.8741 14.6635 25.895 14.6571 25.9199 14.6587C25.9439 14.6603 25.964 14.6691 25.9792 14.6868C25.9945 14.7036 26.0009 14.7269 25.9993 14.7566C25.9977 14.7855 25.9881 14.8079 25.9712 14.8224C25.9544 14.8368 25.9335 14.844 25.9086 14.8424L25.9078 14.8416ZM26.8257 14.7261L26.8161 14.8882L26.0956 14.8432L26.1052 14.6812L26.8257 14.7261Z" fill="white"/>
-<path id="Vector_43" d="M26.7116 14.3489L26.7196 13.9646L26.8488 13.967L26.8368 14.5527L26.7309 14.5503L26.2535 14.1748L26.2463 14.5343L26.1155 14.5319L26.1267 13.967L26.2294 13.9694L26.7116 14.3497V14.3489Z" fill="white"/>
-<path id="Vector_44" d="M26.8312 13.3741C26.8176 13.3813 26.7951 13.3885 26.7646 13.395C26.82 13.4447 26.8497 13.5065 26.8521 13.5811C26.8545 13.6533 26.8361 13.7135 26.7967 13.7608C26.7574 13.8082 26.7069 13.833 26.6459 13.8354C26.5689 13.8386 26.5087 13.8122 26.4662 13.756C26.4229 13.7006 26.3996 13.6196 26.3956 13.5137L26.3916 13.4142L26.3442 13.4158C26.3065 13.4174 26.2776 13.4287 26.256 13.4503C26.2343 13.472 26.2247 13.5041 26.2255 13.5466C26.2271 13.5835 26.2375 13.6132 26.2568 13.6365C26.276 13.6597 26.3001 13.6702 26.3282 13.6694L26.3338 13.8314C26.2945 13.833 26.2568 13.821 26.2215 13.7961C26.1862 13.7712 26.1581 13.7367 26.1364 13.6918C26.1156 13.6477 26.1035 13.5971 26.1019 13.5418C26.0987 13.4575 26.1172 13.3893 26.1581 13.3372C26.199 13.285 26.2576 13.2578 26.3338 13.2529L26.6587 13.2409C26.7237 13.2385 26.7751 13.2273 26.8128 13.208H26.824L26.8304 13.3725L26.8312 13.3741ZM26.7213 13.5562C26.7205 13.5241 26.7117 13.4944 26.6948 13.4672C26.678 13.4399 26.6563 13.419 26.6299 13.4062L26.4943 13.411L26.4975 13.4985C26.4999 13.5586 26.5119 13.6028 26.5336 13.6324C26.5552 13.6621 26.5857 13.6758 26.6242 13.6742C26.6555 13.6734 26.6796 13.6621 26.6973 13.6405C26.7149 13.6188 26.7229 13.5915 26.7221 13.5562H26.7213Z" fill="white"/>
-<path id="Vector_45" d="M25.8997 12.9119L26.0746 12.8967L26.0641 12.7699L26.1837 12.7595L26.1941 12.8862L26.5953 12.8517C26.6226 12.8493 26.6418 12.8421 26.6531 12.8301C26.6643 12.818 26.6691 12.798 26.6667 12.7707C26.6651 12.7522 26.6611 12.7338 26.6555 12.7145L26.7806 12.7041C26.7943 12.7402 26.8023 12.7747 26.8047 12.8092C26.8151 12.9336 26.7517 13.001 26.6153 13.013L26.2078 13.0475L26.2182 13.1654L26.0986 13.1759L26.0882 13.0579L25.9133 13.0732L25.8997 12.9119Z" fill="white"/>
-<path id="Vector_46" d="M25.8638 12.672C25.8389 12.6752 25.8172 12.6696 25.7996 12.656C25.7819 12.6423 25.7707 12.6207 25.7675 12.5918C25.7643 12.5629 25.7699 12.5388 25.7843 12.5212C25.7988 12.5035 25.818 12.4931 25.8429 12.4899C25.867 12.4867 25.8886 12.4923 25.9063 12.5067C25.9239 12.5212 25.9352 12.542 25.9384 12.5717C25.9416 12.6014 25.9368 12.6239 25.9223 12.6415C25.9079 12.6592 25.8886 12.6696 25.8646 12.672H25.8638ZM26.7463 12.3944L26.7656 12.5557L26.0491 12.6407L26.0298 12.4795L26.7463 12.3944Z" fill="white"/>
-<path id="Vector_47" d="M26.365 12.2814C26.2952 12.2926 26.2302 12.2894 26.17 12.2709C26.1098 12.2525 26.0601 12.2212 26.0216 12.1755C25.9831 12.1305 25.959 12.0752 25.9478 12.0102C25.9317 11.9139 25.9502 11.8312 26.0015 11.7606C26.0537 11.6908 26.1299 11.6443 26.2318 11.6226L26.2695 11.6154C26.3401 11.6042 26.4043 11.6066 26.4645 11.625C26.5246 11.6427 26.5736 11.6748 26.6121 11.7197C26.6506 11.7647 26.6755 11.8208 26.6859 11.8866C26.7028 11.9869 26.6827 12.0728 26.6257 12.1442C26.5688 12.2156 26.4845 12.2605 26.373 12.279L26.365 12.2806V12.2814ZM26.3521 12.1193C26.4251 12.1073 26.4805 12.0824 26.5166 12.0455C26.5535 12.0086 26.5672 11.9628 26.5575 11.9091C26.5487 11.8553 26.5206 11.8168 26.4733 11.7935C26.426 11.7703 26.3618 11.7655 26.2807 11.7791C26.2085 11.7911 26.154 11.816 26.1171 11.8537C26.0801 11.8914 26.0657 11.9372 26.0745 11.9901C26.0834 12.0423 26.1106 12.08 26.1572 12.104C26.2037 12.1281 26.2679 12.1329 26.3505 12.1193H26.3521Z" fill="white"/>
-<path id="Vector_48" d="M25.8461 11.4036L25.9263 11.3803C25.8517 11.3426 25.8044 11.2816 25.7851 11.1974C25.7514 11.0513 25.818 10.9575 25.9849 10.9157L26.4494 10.8082L26.4855 10.9663L26.0298 11.0714C25.9849 11.0818 25.9544 11.0987 25.9375 11.1235C25.9207 11.1476 25.9175 11.1821 25.9271 11.2254C25.9416 11.2888 25.9817 11.3297 26.0467 11.3474L26.5473 11.2319L26.5842 11.3899L25.8814 11.552L25.8469 11.4036H25.8461Z" fill="white"/>
-<path id="Vector_49" d="M26.0946 10.2811C26.0665 10.2891 26.0489 10.3068 26.0416 10.3341C26.0336 10.3613 26.032 10.4031 26.0368 10.4592C26.0416 10.5154 26.04 10.5635 26.0336 10.6044C26.0192 10.6935 25.9758 10.7481 25.9052 10.7689C25.8459 10.7866 25.7881 10.7761 25.7335 10.7376C25.679 10.6991 25.6397 10.6414 25.6164 10.5635C25.5923 10.4809 25.5923 10.4079 25.6188 10.3445C25.6445 10.2811 25.6902 10.2402 25.7552 10.2209L25.8009 10.3766C25.7712 10.3854 25.7496 10.4039 25.7359 10.4319C25.7223 10.46 25.7215 10.4921 25.7319 10.529C25.7424 10.5635 25.7584 10.5884 25.7801 10.6052C25.8025 10.6221 25.8266 10.6269 25.8531 10.6189C25.8772 10.6117 25.8924 10.5964 25.8996 10.5724C25.9068 10.5483 25.9084 10.5042 25.9036 10.4392C25.8988 10.3742 25.9012 10.322 25.9093 10.2811C25.9173 10.241 25.9325 10.2089 25.9534 10.184C25.9742 10.1591 26.0031 10.1415 26.0408 10.1311C26.1034 10.1126 26.1612 10.1238 26.2149 10.164C26.2687 10.2041 26.308 10.2659 26.3329 10.3493C26.3497 10.4063 26.3545 10.4592 26.3465 10.5098C26.3393 10.5603 26.3208 10.6028 26.2928 10.6381C26.2639 10.6734 26.2294 10.6975 26.1877 10.7095L26.1427 10.5587C26.1788 10.5459 26.2029 10.5234 26.2149 10.4921C26.227 10.4608 26.227 10.4239 26.2149 10.3814C26.2029 10.3405 26.1861 10.3116 26.1644 10.2947C26.1427 10.2779 26.1187 10.2731 26.0938 10.2811H26.0946Z" fill="white"/>
-</g>
-<g id="Group_2">
-<g id="Group_3">
-<path id="Vector_50" d="M8.9457 10.9173H6.97035L6.52184 12.1393H6.13672L7.78312 7.78821H8.13294L9.77933 12.1393H9.39662L8.9457 10.9173ZM7.08428 10.6068H8.82937L7.95642 8.23672L7.08348 10.6068H7.08428Z" fill="white"/>
-<path id="Vector_51" d="M10.8064 12.1401H10.439V7.78906H10.8064V12.1401Z" fill="white"/>
-<path id="Vector_52" d="M15.0067 10.7833C14.9569 11.2415 14.7933 11.5921 14.5149 11.8352C14.2364 12.0783 13.8666 12.1995 13.4044 12.1995C13.0819 12.1995 12.7962 12.1184 12.5483 11.9572C12.3004 11.7959 12.1086 11.5672 11.973 11.2712C11.8375 10.9751 11.7685 10.6373 11.7668 10.2562V9.69135C11.7668 9.30462 11.8342 8.96202 11.9698 8.66355C12.1054 8.36508 12.3004 8.13401 12.5539 7.97194C12.8083 7.80987 13.1003 7.72803 13.4309 7.72803C13.8971 7.72803 14.2653 7.85319 14.5349 8.10432C14.8045 8.35546 14.9618 8.70287 15.0059 9.14736H14.6352C14.5437 8.40841 14.1418 8.03853 13.4309 8.03853C13.0361 8.03853 12.7224 8.18616 12.4881 8.48142C12.2539 8.77668 12.1367 9.18427 12.1367 9.70499V10.2377C12.1367 10.74 12.2507 11.1412 12.4785 11.4396C12.7064 11.7389 13.0153 11.8882 13.4036 11.8882C13.7919 11.8882 14.0776 11.7959 14.2733 11.6113C14.4683 11.4268 14.5895 11.1508 14.6352 10.7817H15.0059L15.0067 10.7833Z" fill="white"/>
-<path id="Vector_53" d="M16.2061 10.3678V12.1401H15.8386V7.78906H17.3205C17.7731 7.78906 18.1301 7.9046 18.3917 8.13567C18.654 8.36675 18.7848 8.68447 18.7848 9.08885C18.7848 9.49323 18.6588 9.81256 18.4069 10.0348C18.155 10.2571 17.7899 10.3678 17.3117 10.3678H16.2061ZM16.2061 10.0573H17.3205C17.6768 10.0573 17.9488 9.97222 18.1365 9.80293C18.3235 9.63364 18.4173 9.39695 18.4173 9.09366C18.4173 8.79038 18.3243 8.55209 18.1381 8.37397C17.952 8.19505 17.6872 8.10438 17.3446 8.10037H16.2061V10.0581V10.0573Z" fill="white"/>
-<path id="Vector_54" d="M21.4823 10.9173H19.507L19.0585 12.1393H18.6733L20.3197 7.78821H20.6696L22.316 12.1393H21.9332L21.4823 10.9173ZM19.6201 10.6068H21.3652L20.4922 8.23672L19.6193 10.6068H19.6201Z" fill="white"/>
-<path id="Vector_55" d="M11.4289 18.1368C11.4289 17.8961 11.3438 17.7051 11.1745 17.5647C11.0052 17.4243 10.6955 17.2911 10.2454 17.1643C9.79532 17.0376 9.46636 16.8996 9.25936 16.7503C8.9641 16.5393 8.81727 16.2625 8.81727 15.9199C8.81727 15.5773 8.95447 15.3165 9.22807 15.1087C9.50167 14.9009 9.85229 14.7966 10.2783 14.7966C10.5672 14.7966 10.8255 14.8528 11.0542 14.9643C11.2821 15.0758 11.4594 15.2315 11.5845 15.4305C11.7097 15.6295 11.7731 15.8517 11.7731 16.0972H11.4024C11.4024 15.7996 11.3005 15.5605 11.0975 15.3791C10.8945 15.1978 10.6217 15.1079 10.2783 15.1079C9.93493 15.1079 9.68059 15.1826 9.48321 15.331C9.28584 15.4794 9.18715 15.6736 9.18715 15.9135C9.18715 16.1349 9.27541 16.3155 9.45272 16.4551C9.63004 16.5947 9.91407 16.7182 10.304 16.8249C10.6947 16.9317 10.99 17.0424 11.1914 17.1571C11.3928 17.2718 11.5444 17.4082 11.6455 17.5679C11.7474 17.7276 11.798 17.9153 11.798 18.1328C11.798 18.4754 11.6608 18.7506 11.3872 18.9576C11.1136 19.1646 10.7525 19.2681 10.304 19.2681C9.99751 19.2681 9.71589 19.2135 9.45994 19.1036C9.204 18.9937 9.00983 18.8404 8.87745 18.643C8.74506 18.4457 8.67847 18.2194 8.67847 17.9651H9.04594C9.04594 18.2716 9.16067 18.5139 9.38934 18.6912C9.618 18.8685 9.92289 18.9568 10.304 18.9568C10.6426 18.9568 10.9146 18.8821 11.12 18.7329C11.3254 18.5837 11.4281 18.3855 11.4281 18.1384L11.4289 18.1368Z" fill="white"/>
-<path id="Vector_56" d="M15.7455 17.267C15.7455 17.6673 15.6765 18.0188 15.5377 18.3221C15.3989 18.6245 15.2015 18.858 14.9448 19.0217C14.688 19.1854 14.3911 19.2664 14.0542 19.2664C13.5463 19.2664 13.1355 19.0843 12.8234 18.7208C12.5105 18.3574 12.354 17.8663 12.354 17.2493V16.8008C12.354 16.4045 12.4246 16.053 12.565 15.7473C12.7054 15.4417 12.9044 15.2066 13.1612 15.0421C13.4179 14.8776 13.714 14.7958 14.0485 14.7958C14.3831 14.7958 14.6784 14.8768 14.9343 15.0381C15.1903 15.1994 15.3876 15.4272 15.5273 15.7225C15.6669 16.0177 15.7391 16.3587 15.7455 16.7479V17.2678V17.267ZM15.378 16.7944C15.378 16.2705 15.2593 15.8597 15.0226 15.5628C14.7851 15.2659 14.4609 15.1175 14.0485 15.1175C13.6361 15.1175 13.3216 15.2667 13.0817 15.5644C12.8418 15.8621 12.7215 16.2785 12.7215 16.8121V17.2662C12.7215 17.7821 12.841 18.1913 13.0801 18.4929C13.3192 18.7946 13.6442 18.9455 14.0542 18.9455C14.4642 18.9455 14.7955 18.7962 15.0282 18.4986C15.2617 18.2009 15.378 17.7861 15.378 17.2541V16.7936V16.7944Z" fill="white"/>
-<path id="Vector_57" d="M19.6922 17.8495C19.6425 18.3076 19.4788 18.6583 19.2004 18.9014C18.922 19.1445 18.5521 19.2656 18.09 19.2656C17.7674 19.2656 17.4818 19.1846 17.2339 19.0233C16.9859 18.862 16.7942 18.6334 16.6586 18.3373C16.523 18.0413 16.454 17.7035 16.4524 17.3224V16.7575C16.4524 16.3708 16.5198 16.0282 16.6554 15.7297C16.791 15.4312 16.9859 15.2002 17.2395 15.0381C17.4938 14.876 17.7859 14.7942 18.1164 14.7942C18.5826 14.7942 18.9509 14.9194 19.2205 15.1705C19.49 15.4216 19.6473 15.769 19.6914 16.2135H19.3208C19.2293 15.4746 18.8273 15.1047 18.1164 15.1047C17.7217 15.1047 17.408 15.2523 17.1737 15.5476C16.9394 15.8428 16.8223 16.2504 16.8223 16.7712V17.3039C16.8223 17.8062 16.9362 18.2073 17.1641 18.5058C17.3919 18.8051 17.7008 18.9543 18.0892 18.9543C18.4775 18.9543 18.7631 18.862 18.9589 18.6775C19.1539 18.493 19.275 18.217 19.3208 17.8479H19.6914L19.6922 17.8495Z" fill="white"/>
-</g>
-<path id="Vector_58" d="M6.00195 13.5538H22.5871" stroke="white" stroke-width="0.111926" stroke-linecap="round" stroke-linejoin="round"/>
-</g>
-<g id="Group_4">
-<path id="Vector_59" d="M8.72524 21.7257C8.71722 21.7089 8.71 21.68 8.70518 21.6374C8.63859 21.7064 8.55916 21.7409 8.46609 21.7409C8.38345 21.7409 8.31525 21.7177 8.26229 21.6711C8.20934 21.6246 8.18286 21.5652 8.18286 21.493C8.18286 21.4056 8.21576 21.3382 8.28235 21.2892C8.34895 21.2411 8.44202 21.217 8.56237 21.217H8.70197V21.1512C8.70197 21.1015 8.68673 21.0614 8.65704 21.0317C8.62736 21.002 8.58323 20.9868 8.52466 20.9868C8.47331 20.9868 8.43078 20.9996 8.39628 21.0253C8.36178 21.0509 8.34413 21.0822 8.34413 21.1191H8.19971C8.19971 21.0774 8.21496 21.0365 8.24464 20.998C8.27433 20.9587 8.31444 20.9282 8.36579 20.9057C8.41634 20.8833 8.47251 20.8712 8.53348 20.8712C8.63057 20.8712 8.70599 20.8953 8.76055 20.9434C8.8151 20.9916 8.84399 21.0582 8.84559 21.1432V21.5291C8.84559 21.6062 8.85522 21.6671 8.87528 21.7129V21.7249H8.72444L8.72524 21.7257ZM8.48695 21.6166C8.53188 21.6166 8.5744 21.6046 8.61452 21.5821C8.65464 21.5588 8.68432 21.5283 8.70197 21.4914V21.3189H8.58965C8.41393 21.3189 8.32568 21.3703 8.32568 21.473C8.32568 21.5179 8.34092 21.5532 8.37061 21.5781C8.4003 21.6037 8.43881 21.6158 8.48615 21.6158L8.48695 21.6166Z" fill="white"/>
-<path id="Vector_60" d="M9.03174 20.6642C9.03174 20.6409 9.03896 20.6209 9.0534 20.6056C9.06784 20.5904 9.0887 20.5815 9.11679 20.5815C9.14487 20.5815 9.16573 20.5896 9.18017 20.6056C9.19461 20.6217 9.20183 20.6409 9.20183 20.6642C9.20183 20.6875 9.19461 20.7067 9.18017 20.722C9.16573 20.7372 9.14487 20.7452 9.11679 20.7452C9.0887 20.7452 9.06784 20.7372 9.0534 20.722C9.03896 20.7067 9.03174 20.6866 9.03174 20.6642ZM9.18659 21.7257H9.04297V20.8864H9.18659V21.7257Z" fill="white"/>
-<path id="Vector_61" d="M9.71276 21.6246C9.76411 21.6246 9.80824 21.6094 9.84675 21.5781C9.88526 21.5468 9.90612 21.5083 9.91013 21.4618H10.0457C10.0433 21.5099 10.0265 21.5556 9.99598 21.599C9.96549 21.6423 9.92457 21.6768 9.87403 21.7025C9.82348 21.7281 9.76892 21.741 9.71276 21.741C9.59882 21.741 9.50736 21.7025 9.43996 21.6262C9.37257 21.55 9.33887 21.4457 9.33887 21.3133V21.2893C9.33887 21.2074 9.35411 21.1352 9.3838 21.071C9.41348 21.0076 9.45681 20.9579 9.51297 20.9226C9.56914 20.8873 9.63573 20.8696 9.71195 20.8696C9.80583 20.8696 9.88446 20.8977 9.94624 20.9539C10.0088 21.01 10.0417 21.0831 10.0457 21.1737H9.91013C9.90612 21.1192 9.88526 21.075 9.84835 21.0397C9.81144 21.0052 9.76571 20.9876 9.71115 20.9876C9.63814 20.9876 9.58198 21.0141 9.54186 21.0662C9.50174 21.1184 9.48168 21.1946 9.48168 21.2941V21.3213C9.48168 21.4184 9.50174 21.4922 9.54106 21.5444C9.58117 21.5965 9.63814 21.623 9.71195 21.623L9.71276 21.6246Z" fill="white"/>
-<path id="Vector_62" d="M10.877 21.3156C10.877 21.4432 10.8481 21.5459 10.7895 21.6245C10.731 21.7024 10.6523 21.7417 10.552 21.7417C10.4518 21.7417 10.3699 21.7096 10.3113 21.6446V22.049H10.1677V20.8872H10.2985L10.3057 20.9803C10.3643 20.9081 10.4453 20.8719 10.5488 20.8719C10.6523 20.8719 10.7294 20.9097 10.7879 20.9859C10.8465 21.0621 10.8762 21.168 10.8762 21.3028V21.3156H10.877ZM10.7334 21.2996C10.7334 21.2049 10.7133 21.1303 10.6732 21.0757C10.6331 21.0212 10.5777 20.9939 10.5071 20.9939C10.4205 20.9939 10.3555 21.0324 10.3113 21.1094V21.5106C10.3547 21.5868 10.4197 21.6253 10.5087 21.6253C10.5777 21.6253 10.6323 21.5981 10.6724 21.5435C10.7133 21.4889 10.7334 21.4079 10.7334 21.3004V21.2996Z" fill="white"/>
-<path id="Vector_63" d="M11.5373 21.7257C11.5292 21.7089 11.522 21.68 11.5172 21.6374C11.4506 21.7064 11.3712 21.7409 11.2781 21.7409C11.1955 21.7409 11.1273 21.7177 11.0743 21.6711C11.0214 21.6246 10.9949 21.5652 10.9949 21.493C10.9949 21.4056 11.0278 21.3382 11.0944 21.2892C11.161 21.2411 11.254 21.217 11.3744 21.217H11.514V21.1512C11.514 21.1015 11.4987 21.0614 11.4691 21.0317C11.4394 21.002 11.3952 20.9868 11.3367 20.9868C11.2853 20.9868 11.2428 20.9996 11.2083 21.0253C11.1738 21.0509 11.1561 21.0822 11.1561 21.1191H11.0117C11.0117 21.0774 11.027 21.0365 11.0567 20.998C11.0863 20.9587 11.1265 20.9282 11.1778 20.9057C11.2284 20.8833 11.2845 20.8712 11.3455 20.8712C11.4426 20.8712 11.518 20.8953 11.5726 20.9434C11.6271 20.9916 11.656 21.0582 11.6576 21.1432V21.5291C11.6576 21.6062 11.6672 21.6671 11.6873 21.7129V21.7249H11.5365L11.5373 21.7257ZM11.299 21.6166C11.3439 21.6166 11.3864 21.6046 11.4265 21.5821C11.4666 21.5588 11.4963 21.5283 11.514 21.4914V21.3189H11.4017C11.2259 21.3189 11.1377 21.3703 11.1377 21.473C11.1377 21.5179 11.1529 21.5532 11.1826 21.5781C11.2123 21.6037 11.2508 21.6158 11.2982 21.6158L11.299 21.6166Z" fill="white"/>
-<path id="Vector_64" d="M11.8462 21.6511C11.8462 21.6262 11.8534 21.6054 11.8687 21.5893C11.8839 21.5733 11.9056 21.5645 11.9353 21.5645C11.9649 21.5645 11.9874 21.5725 12.0026 21.5893C12.0179 21.6062 12.0259 21.6262 12.0259 21.6511C12.0259 21.676 12.0179 21.6944 12.0026 21.7105C11.9874 21.7265 11.9649 21.7346 11.9353 21.7346C11.9056 21.7346 11.8839 21.7265 11.8687 21.7105C11.8534 21.6944 11.8462 21.6744 11.8462 21.6511Z" fill="white"/>
-<path id="Vector_65" d="M12.1841 21.2988C12.1841 21.217 12.2001 21.1423 12.2322 21.0773C12.2643 21.0124 12.3092 20.961 12.367 20.9257C12.4248 20.8904 12.4906 20.8719 12.5644 20.8719C12.6783 20.8719 12.7714 20.9113 12.842 20.9907C12.9126 21.0701 12.9479 21.1752 12.9479 21.306V21.3164C12.9479 21.3983 12.9327 21.4713 12.9014 21.5363C12.8701 21.6013 12.8252 21.6518 12.7674 21.6879C12.7088 21.724 12.6422 21.7425 12.5668 21.7425C12.4529 21.7425 12.3606 21.7032 12.29 21.6237C12.2194 21.5443 12.1841 21.44 12.1841 21.31V21.2996V21.2988ZM12.3277 21.3156C12.3277 21.4087 12.3494 21.4833 12.3927 21.5395C12.436 21.5957 12.4938 21.6237 12.566 21.6237C12.6382 21.6237 12.6968 21.5949 12.7393 21.5379C12.7818 21.4809 12.8035 21.4007 12.8035 21.298C12.8035 21.2057 12.7818 21.1311 12.7377 21.0741C12.6944 21.0172 12.6358 20.9883 12.5636 20.9883C12.4914 20.9883 12.436 21.0164 12.3919 21.0725C12.3478 21.1287 12.3269 21.2097 12.3269 21.3148L12.3277 21.3156Z" fill="white"/>
-<path id="Vector_66" d="M13.4936 21.0156C13.472 21.0124 13.4487 21.01 13.423 21.01C13.3292 21.01 13.265 21.0501 13.2313 21.1304V21.7257H13.0876V20.8865H13.2273L13.2297 20.9835C13.277 20.9089 13.3436 20.8712 13.4294 20.8712C13.4575 20.8712 13.4784 20.8744 13.4928 20.8824V21.0156H13.4936Z" fill="white"/>
-<path id="Vector_67" d="M13.5361 21.2996C13.5361 21.1688 13.5666 21.0645 13.6268 20.9875C13.687 20.9105 13.7672 20.8719 13.8675 20.8719C13.9678 20.8719 14.0496 20.9081 14.1074 20.9803L14.1146 20.8872H14.2454V21.7064C14.2454 21.8147 14.2133 21.9005 14.1491 21.9631C14.0849 22.0257 13.9983 22.057 13.89 22.057C13.8298 22.057 13.7704 22.0442 13.7126 22.0185C13.6549 21.9928 13.6107 21.9575 13.5803 21.9126L13.6549 21.8267C13.7167 21.903 13.7913 21.9407 13.8803 21.9407C13.9501 21.9407 14.0047 21.9206 14.0432 21.8821C14.0825 21.8428 14.1018 21.7874 14.1018 21.716V21.6438C14.044 21.7104 13.9662 21.7433 13.8667 21.7433C13.7672 21.7433 13.6894 21.704 13.6284 21.6245C13.5674 21.5451 13.5369 21.4376 13.5369 21.3012L13.5361 21.2996ZM13.6806 21.3156C13.6806 21.4103 13.6998 21.4849 13.7391 21.5387C13.7776 21.5924 13.8322 21.6197 13.902 21.6197C13.9927 21.6197 14.0593 21.5788 14.101 21.4962V21.1135C14.0568 21.0332 13.9911 20.9931 13.9036 20.9931C13.8338 20.9931 13.7792 21.0204 13.7399 21.0749C13.7006 21.1295 13.6814 21.2097 13.6814 21.3164L13.6806 21.3156Z" fill="white"/>
-<path id="Vector_68" d="M14.4505 21.8228H14.3269L14.7987 20.5968H14.9214L14.4505 21.8228Z" fill="white"/>
-<path id="Vector_69" d="M15.5251 21.5035C15.5251 21.4649 15.5107 21.4345 15.481 21.4128C15.4521 21.3911 15.4008 21.3727 15.3286 21.3574C15.2556 21.3422 15.1986 21.3229 15.1553 21.3013C15.1127 21.2796 15.0815 21.2539 15.0606 21.2234C15.0405 21.1938 15.0301 21.1577 15.0301 21.1167C15.0301 21.0477 15.059 20.99 15.1176 20.9426C15.1761 20.8953 15.2499 20.8712 15.3406 20.8712C15.4361 20.8712 15.5131 20.8961 15.5717 20.945C15.6311 20.994 15.6607 21.0574 15.6607 21.1336H15.5163C15.5163 21.0943 15.4995 21.0606 15.4666 21.0317C15.4337 21.0028 15.3912 20.9892 15.3406 20.9892C15.2901 20.9892 15.2475 21.0004 15.2179 21.0237C15.1882 21.0461 15.1737 21.0758 15.1737 21.1127C15.1737 21.1472 15.1874 21.1737 15.2146 21.1913C15.2419 21.209 15.2917 21.2258 15.3631 21.2419C15.4345 21.2579 15.4931 21.2772 15.5372 21.2997C15.5813 21.3221 15.6142 21.3486 15.6359 21.3799C15.6575 21.4112 15.668 21.4489 15.668 21.4946C15.668 21.5692 15.6383 21.6294 15.5781 21.6752C15.5179 21.7201 15.4401 21.7434 15.3446 21.7434C15.2772 21.7434 15.2179 21.7313 15.1665 21.7081C15.1152 21.684 15.0742 21.6511 15.0453 21.6086C15.0165 21.566 15.0012 21.5195 15.0012 21.4698H15.1448C15.1472 21.5179 15.1665 21.5556 15.2026 21.5845C15.2387 21.6134 15.2861 21.627 15.3446 21.627C15.3992 21.627 15.4425 21.6158 15.4754 21.5941C15.5083 21.5725 15.5243 21.5428 15.5243 21.5059L15.5251 21.5035Z" fill="white"/>
-<path id="Vector_70" d="M15.7778 21.2988C15.7778 21.217 15.7939 21.1423 15.826 21.0773C15.8581 21.0124 15.903 20.961 15.9608 20.9257C16.0185 20.8904 16.0843 20.8719 16.1581 20.8719C16.2721 20.8719 16.3651 20.9113 16.4358 20.9907C16.5064 21.0701 16.5417 21.1752 16.5417 21.306V21.3164C16.5417 21.3983 16.5264 21.4713 16.4951 21.5363C16.4638 21.6013 16.4189 21.6518 16.3611 21.6879C16.3026 21.724 16.236 21.7425 16.1605 21.7425C16.0466 21.7425 15.9543 21.7032 15.8837 21.6237C15.8131 21.5443 15.7778 21.44 15.7778 21.31V21.2996V21.2988ZM15.9223 21.3156C15.9223 21.4087 15.9439 21.4833 15.9872 21.5395C16.0306 21.5957 16.0883 21.6237 16.1605 21.6237C16.2328 21.6237 16.2913 21.5949 16.3339 21.5379C16.3764 21.4809 16.398 21.4007 16.398 21.298C16.398 21.2057 16.3764 21.1311 16.3322 21.0741C16.2889 21.0172 16.2304 20.9883 16.1581 20.9883C16.0859 20.9883 16.0306 21.0164 15.9864 21.0725C15.9423 21.1287 15.9215 21.2097 15.9215 21.3148L15.9223 21.3156Z" fill="white"/>
-<path id="Vector_71" d="M17.0182 21.6246C17.0695 21.6246 17.1137 21.6094 17.1522 21.5781C17.1907 21.5468 17.2115 21.5083 17.2156 21.4618H17.3511C17.3487 21.5099 17.3319 21.5556 17.3014 21.599C17.2709 21.6423 17.23 21.6768 17.1794 21.7025C17.1289 21.7281 17.0743 21.741 17.0182 21.741C16.9042 21.741 16.8128 21.7025 16.7454 21.6262C16.678 21.55 16.6443 21.4457 16.6443 21.3133V21.2893C16.6443 21.2074 16.6595 21.1352 16.6892 21.071C16.7189 21.0076 16.7622 20.9579 16.8184 20.9226C16.8746 20.8873 16.9412 20.8696 17.0174 20.8696C17.1112 20.8696 17.1899 20.8977 17.2517 20.9539C17.3142 21.01 17.3471 21.0831 17.3511 21.1737H17.2156C17.2115 21.1192 17.1907 21.075 17.1538 21.0397C17.1169 21.0052 17.0711 20.9876 17.0166 20.9876C16.9436 20.9876 16.8874 21.0141 16.8473 21.0662C16.8072 21.1184 16.7871 21.1946 16.7871 21.2941V21.3213C16.7871 21.4184 16.8072 21.4922 16.8465 21.5444C16.8866 21.5965 16.9436 21.623 17.0174 21.623L17.0182 21.6246Z" fill="white"/>
-<path id="Vector_72" d="M18.0637 21.3469H18.2202V21.4641H18.0637V21.7264H17.9193V21.4641H17.405V21.3798L17.9105 20.5975H18.0629V21.3477L18.0637 21.3469ZM17.5687 21.3469H17.9201V20.7933L17.9033 20.8246L17.5687 21.3469Z" fill="white"/>
-<path id="Vector_73" d="M18.814 21.5035C18.814 21.4649 18.7995 21.4345 18.7698 21.4128C18.7402 21.3911 18.6896 21.3727 18.6174 21.3574C18.5444 21.3422 18.4874 21.3229 18.4441 21.3013C18.4016 21.2796 18.3703 21.2539 18.3494 21.2234C18.3294 21.1938 18.3189 21.1577 18.3189 21.1167C18.3189 21.0477 18.3478 20.99 18.4064 20.9426C18.4649 20.8953 18.5388 20.8712 18.6294 20.8712C18.7249 20.8712 18.8019 20.8961 18.8605 20.945C18.9199 20.994 18.9496 21.0574 18.9496 21.1336H18.8051C18.8051 21.0943 18.7883 21.0606 18.7554 21.0317C18.7217 21.0036 18.68 20.9892 18.6294 20.9892C18.5789 20.9892 18.5364 21.0004 18.5067 21.0237C18.477 21.0461 18.4625 21.0758 18.4625 21.1127C18.4625 21.1472 18.4762 21.1737 18.5035 21.1913C18.5307 21.209 18.5805 21.2258 18.6519 21.2419C18.7233 21.2579 18.7819 21.2772 18.826 21.2997C18.8701 21.3221 18.903 21.3486 18.9247 21.3799C18.9464 21.4112 18.9568 21.4489 18.9568 21.4946C18.9568 21.5692 18.9271 21.6294 18.8669 21.6752C18.8067 21.7201 18.7289 21.7434 18.6334 21.7434C18.566 21.7434 18.5067 21.7313 18.4553 21.7081C18.404 21.684 18.3631 21.6511 18.3342 21.6086C18.3053 21.566 18.29 21.5195 18.29 21.4698H18.4337C18.4361 21.5179 18.4553 21.5556 18.4914 21.5845C18.5275 21.6126 18.5749 21.627 18.6334 21.627C18.688 21.627 18.7313 21.6158 18.7642 21.5941C18.7971 21.5725 18.8132 21.5428 18.8132 21.5059L18.814 21.5035Z" fill="white"/>
-<path id="Vector_74" d="M19.0664 21.2988C19.0664 21.217 19.0825 21.1423 19.1145 21.0773C19.1466 21.0116 19.1916 20.961 19.2493 20.9257C19.3071 20.8904 19.3729 20.8719 19.4467 20.8719C19.5606 20.8719 19.6537 20.9113 19.7243 20.9907C19.7949 21.0701 19.8302 21.1752 19.8302 21.306V21.3164C19.8302 21.3983 19.815 21.4713 19.7837 21.5363C19.7524 21.6013 19.7075 21.6518 19.6497 21.6879C19.5911 21.724 19.5245 21.7425 19.4491 21.7425C19.3352 21.7425 19.2429 21.7032 19.1723 21.6237C19.1017 21.5443 19.0664 21.44 19.0664 21.31V21.2996V21.2988ZM19.21 21.3156C19.21 21.4087 19.2317 21.4833 19.275 21.5395C19.3183 21.5957 19.3761 21.6237 19.4483 21.6237C19.5205 21.6237 19.5791 21.5949 19.6216 21.5379C19.665 21.4809 19.6858 21.4007 19.6858 21.298C19.6858 21.2057 19.6641 21.1311 19.62 21.0741C19.5767 21.0172 19.5181 20.9883 19.4459 20.9883C19.3737 20.9883 19.3183 21.0164 19.2742 21.0725C19.2301 21.1287 19.2092 21.2097 19.2092 21.3148L19.21 21.3156Z" fill="white"/>
-</g>
-<path id="Vector_75" d="M25.8569 25.0298V25.1269H25.67V25.6147H25.5536V25.1269H25.3667V25.0298H25.8569ZM26.4892 25.6147L26.4675 25.2713C26.4651 25.2264 26.4651 25.1702 26.4635 25.1076H26.4571C26.4418 25.159 26.425 25.228 26.4073 25.2817L26.3022 25.6059H26.1819L26.0768 25.2729C26.0663 25.228 26.0487 25.159 26.0358 25.1076H26.0294C26.0294 25.1614 26.027 25.2175 26.0254 25.2713L26.0038 25.6147H25.8922L25.9356 25.0306H26.1097L26.2108 25.3162C26.2236 25.3612 26.234 25.4045 26.2493 25.4647H26.2517C26.2669 25.4109 26.2798 25.3612 26.2926 25.3186L26.3937 25.0306H26.5614L26.6063 25.6147H26.49H26.4892Z" fill="#231F20"/>
-</g>
-<defs>
-<linearGradient id="paint0_linear_6186_11887" x1="28" y1="14" x2="0" y2="14" gradientUnits="userSpaceOnUse">
-<stop stop-color="#2161AD"/>
-<stop offset="0.18" stop-color="#1F69B3"/>
-<stop offset="0.47" stop-color="#1C82C4"/>
-<stop offset="0.84" stop-color="#16A9E1"/>
-<stop offset="1" stop-color="#14BDEF"/>
-</linearGradient>
-<linearGradient id="paint1_linear_6186_11887" x1="3.13623" y1="13.9999" x2="24.8636" y2="13.9999" gradientUnits="userSpaceOnUse">
-<stop stop-color="#2161AD"/>
-<stop offset="0.18" stop-color="#1F69B3"/>
-<stop offset="0.47" stop-color="#1C82C4"/>
-<stop offset="0.84" stop-color="#16A9E1"/>
-<stop offset="1" stop-color="#14BDEF"/>
-</linearGradient>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/education/triangle.svg b/app/components/base/icons/assets/public/education/triangle.svg
deleted file mode 100644
index e52c5c5..0000000
--- a/app/components/base/icons/assets/public/education/triangle.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg width="16" height="22" viewBox="0 0 16 22" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path id="Rectangle 979" d="M0 0H16L9.91493 16.7339C8.76529 19.8955 5.76063 22 2.39658 22H0V0Z" fill="white"/>
-</svg>
diff --git a/app/components/base/icons/assets/public/llm/Anthropic-dark.svg b/app/components/base/icons/assets/public/llm/Anthropic-dark.svg
deleted file mode 100644
index 57abb73..0000000
--- a/app/components/base/icons/assets/public/llm/Anthropic-dark.svg
+++ /dev/null
@@ -1,186 +0,0 @@
-<svg width="90" height="10" viewBox="0 0 90 10" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Anthropic" clip-path="url(#clip0_5981_49007)">
-<g id="Clip path group">
-<mask id="mask0_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_2">
-<path id="Vector" d="M89.375 -0.00195312H0V9.99805H89.375V-0.00195312Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask0_5981_49007)">
-<g id="Group">
-<g id="Clip path group_2">
-<mask id="mask1_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_4">
-<path id="Vector_2" d="M0 -0.00390625H89.375V9.99609H0V-0.00390625Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask1_5981_49007)">
-<g id="Group_2">
-<g id="Clip path group_3">
-<mask id="mask2_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_12">
-<path id="Vector_3" d="M0 -0.00585938H89.375V9.99414H0V-0.00585938Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask2_5981_49007)">
-<g id="Group_3">
-<g id="Clip path group_4">
-<mask id="mask3_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_89">
-<path id="Vector_4" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask3_5981_49007)">
-<g id="Group_4">
-<g id="Group_5">
-<g id="Group_6">
-<path id="Vector_5" d="M18.1273 6.92438L13.7773 0.15625H11.4297V9.82501H13.4321V3.05688L17.7821 9.82501H20.1297V0.15625H18.1273V6.92438Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_5">
-<mask id="mask4_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_80">
-<path id="Vector_6" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask4_5981_49007)">
-<g id="Group_7">
-<g id="Group_8">
-<g id="Group_9">
-<path id="Vector_7" d="M21.7969 2.02094H25.0423V9.82501H27.1139V2.02094H30.3594V0.15625H21.7969V2.02094Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_6">
-<mask id="mask5_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_71">
-<path id="Vector_8" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask5_5981_49007)">
-<g id="Group_10">
-<g id="Group_11">
-<g id="Group_12">
-<path id="Vector_9" d="M38.6442 4.00994H34.0871V0.15625H32.0156V9.82501H34.0871V5.87463H38.6442V9.82501H40.7156V0.15625H38.6442V4.00994Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_7">
-<mask id="mask6_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_62">
-<path id="Vector_10" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask6_5981_49007)">
-<g id="Group_13">
-<g id="Group_14">
-<g id="Group_15">
-<path id="Vector_11" d="M45.3376 2.02094H47.893C48.9152 2.02094 49.4539 2.39387 49.4539 3.09831C49.4539 3.80275 48.9152 4.17569 47.893 4.17569H45.3376V2.02094ZM51.5259 3.09831C51.5259 1.27506 50.186 0.15625 47.9897 0.15625H43.2656V9.82501H45.3376V6.04037H47.6443L49.7164 9.82501H52.0094L49.715 5.75211C50.8666 5.30941 51.5259 4.37721 51.5259 3.09831Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_8">
-<mask id="mask7_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_53">
-<path id="Vector_12" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask7_5981_49007)">
-<g id="Group_16">
-<g id="Group_17">
-<g id="Group_18">
-<path id="Vector_13" d="M57.8732 8.05653C56.2438 8.05653 55.2496 6.89631 55.2496 5.00404C55.2496 3.08416 56.2438 1.92394 57.8732 1.92394C59.4887 1.92394 60.4691 3.08416 60.4691 5.00404C60.4691 6.89631 59.4887 8.05653 57.8732 8.05653ZM57.8732 -0.00976562C55.0839 -0.00976562 53.1094 2.06206 53.1094 5.00404C53.1094 7.91841 55.0839 9.99023 57.8732 9.99023C60.6486 9.99023 62.6094 7.91841 62.6094 5.00404C62.6094 2.06206 60.6486 -0.00976562 57.8732 -0.00976562Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_9">
-<mask id="mask8_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_44">
-<path id="Vector_14" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask8_5981_49007)">
-<g id="Group_19">
-<g id="Group_20">
-<g id="Group_21">
-<path id="Vector_15" d="M69.1794 4.45194H66.6233V2.02094H69.1794C70.2019 2.02094 70.7407 2.43532 70.7407 3.23644C70.7407 4.03756 70.2019 4.45194 69.1794 4.45194ZM69.2762 0.15625H64.5508V9.82501H66.6233V6.31662H69.2762C71.473 6.31662 72.8133 5.15637 72.8133 3.23644C72.8133 1.3165 71.473 0.15625 69.2762 0.15625Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_10">
-<mask id="mask9_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_35">
-<path id="Vector_16" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask9_5981_49007)">
-<g id="Group_22">
-<g id="Group_23">
-<g id="Group_24">
-<path id="Vector_17" d="M86.8413 6.57863C86.4823 7.51786 85.7642 8.05653 84.7837 8.05653C83.1542 8.05653 82.16 6.89631 82.16 5.00404C82.16 3.08416 83.1542 1.92394 84.7837 1.92394C85.7642 1.92394 86.4823 2.46261 86.8413 3.40183H89.0369C88.4984 1.33002 86.8827 -0.00976562 84.7837 -0.00976562C81.9942 -0.00976562 80.0195 2.06206 80.0195 5.00404C80.0195 7.91841 81.9942 9.99023 84.7837 9.99023C86.8965 9.99023 88.5122 8.63664 89.0508 6.57863H86.8413Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_11">
-<mask id="mask10_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_26">
-<path id="Vector_18" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask10_5981_49007)">
-<g id="Group_25">
-<g id="Group_26">
-<g id="Group_27">
-<path id="Vector_19" d="M73.6484 0.15625L77.5033 9.82501H79.6172L75.7624 0.15625H73.6484Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_12">
-<mask id="mask11_5981_49007" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_17">
-<path id="Vector_20" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask11_5981_49007)">
-<g id="Group_28">
-<g id="Group_29">
-<g id="Group_30">
-<path id="Vector_21" d="M3.64038 5.99893L4.95938 2.60106L6.27838 5.99893H3.64038ZM3.85422 0.15625L0 9.82501H2.15505L2.9433 7.79456H6.97558L7.76371 9.82501H9.91875L6.06453 0.15625H3.85422Z" fill="black" fill-opacity="0.95"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-<defs>
-<clipPath id="clip0_5981_49007">
-<rect width="89.375" height="10" fill="white"/>
-</clipPath>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/llm/Anthropic-light.svg b/app/components/base/icons/assets/public/llm/Anthropic-light.svg
deleted file mode 100644
index 3e587cc..0000000
--- a/app/components/base/icons/assets/public/llm/Anthropic-light.svg
+++ /dev/null
@@ -1,186 +0,0 @@
-<svg width="90" height="10" viewBox="0 0 90 10" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Anthropic" clip-path="url(#clip0_5981_52010)">
-<g id="Clip path group">
-<mask id="mask0_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_2">
-<path id="Vector" d="M89.375 -0.00195312H0V9.99805H89.375V-0.00195312Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask0_5981_52010)">
-<g id="Group">
-<g id="Clip path group_2">
-<mask id="mask1_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_4">
-<path id="Vector_2" d="M0 -0.00390625H89.375V9.99609H0V-0.00390625Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask1_5981_52010)">
-<g id="Group_2">
-<g id="Clip path group_3">
-<mask id="mask2_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_12">
-<path id="Vector_3" d="M0 -0.00585938H89.375V9.99414H0V-0.00585938Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask2_5981_52010)">
-<g id="Group_3">
-<g id="Clip path group_4">
-<mask id="mask3_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_89">
-<path id="Vector_4" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask3_5981_52010)">
-<g id="Group_4">
-<g id="Group_5">
-<g id="Group_6">
-<path id="Vector_5" d="M18.1273 6.92438L13.7773 0.15625H11.4297V9.82501H13.4321V3.05688L17.7821 9.82501H20.1297V0.15625H18.1273V6.92438Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_5">
-<mask id="mask4_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_80">
-<path id="Vector_6" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask4_5981_52010)">
-<g id="Group_7">
-<g id="Group_8">
-<g id="Group_9">
-<path id="Vector_7" d="M21.7969 2.02094H25.0423V9.82501H27.1139V2.02094H30.3594V0.15625H21.7969V2.02094Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_6">
-<mask id="mask5_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_71">
-<path id="Vector_8" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask5_5981_52010)">
-<g id="Group_10">
-<g id="Group_11">
-<g id="Group_12">
-<path id="Vector_9" d="M38.6442 4.00994H34.0871V0.15625H32.0156V9.82501H34.0871V5.87463H38.6442V9.82501H40.7156V0.15625H38.6442V4.00994Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_7">
-<mask id="mask6_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_62">
-<path id="Vector_10" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask6_5981_52010)">
-<g id="Group_13">
-<g id="Group_14">
-<g id="Group_15">
-<path id="Vector_11" d="M45.3376 2.02094H47.893C48.9152 2.02094 49.4539 2.39387 49.4539 3.09831C49.4539 3.80275 48.9152 4.17569 47.893 4.17569H45.3376V2.02094ZM51.5259 3.09831C51.5259 1.27506 50.186 0.15625 47.9897 0.15625H43.2656V9.82501H45.3376V6.04037H47.6443L49.7164 9.82501H52.0094L49.715 5.75211C50.8666 5.30941 51.5259 4.37721 51.5259 3.09831Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_8">
-<mask id="mask7_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_53">
-<path id="Vector_12" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask7_5981_52010)">
-<g id="Group_16">
-<g id="Group_17">
-<g id="Group_18">
-<path id="Vector_13" d="M57.8732 8.05653C56.2438 8.05653 55.2496 6.89631 55.2496 5.00404C55.2496 3.08416 56.2438 1.92394 57.8732 1.92394C59.4887 1.92394 60.4691 3.08416 60.4691 5.00404C60.4691 6.89631 59.4887 8.05653 57.8732 8.05653ZM57.8732 -0.00976562C55.0839 -0.00976562 53.1094 2.06206 53.1094 5.00404C53.1094 7.91841 55.0839 9.99023 57.8732 9.99023C60.6486 9.99023 62.6094 7.91841 62.6094 5.00404C62.6094 2.06206 60.6486 -0.00976562 57.8732 -0.00976562Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_9">
-<mask id="mask8_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_44">
-<path id="Vector_14" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask8_5981_52010)">
-<g id="Group_19">
-<g id="Group_20">
-<g id="Group_21">
-<path id="Vector_15" d="M69.1794 4.45194H66.6233V2.02094H69.1794C70.2019 2.02094 70.7407 2.43532 70.7407 3.23644C70.7407 4.03756 70.2019 4.45194 69.1794 4.45194ZM69.2762 0.15625H64.5508V9.82501H66.6233V6.31662H69.2762C71.473 6.31662 72.8133 5.15637 72.8133 3.23644C72.8133 1.3165 71.473 0.15625 69.2762 0.15625Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_10">
-<mask id="mask9_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_35">
-<path id="Vector_16" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask9_5981_52010)">
-<g id="Group_22">
-<g id="Group_23">
-<g id="Group_24">
-<path id="Vector_17" d="M86.8413 6.57863C86.4823 7.51786 85.7642 8.05653 84.7837 8.05653C83.1542 8.05653 82.16 6.89631 82.16 5.00404C82.16 3.08416 83.1542 1.92394 84.7837 1.92394C85.7642 1.92394 86.4823 2.46261 86.8413 3.40183H89.0369C88.4984 1.33002 86.8827 -0.00976562 84.7837 -0.00976562C81.9942 -0.00976562 80.0195 2.06206 80.0195 5.00404C80.0195 7.91841 81.9942 9.99023 84.7837 9.99023C86.8965 9.99023 88.5122 8.63664 89.0508 6.57863H86.8413Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_11">
-<mask id="mask10_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_26">
-<path id="Vector_18" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask10_5981_52010)">
-<g id="Group_25">
-<g id="Group_26">
-<g id="Group_27">
-<path id="Vector_19" d="M73.6484 0.15625L77.5033 9.82501H79.6172L75.7624 0.15625H73.6484Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<g id="Clip path group_12">
-<mask id="mask11_5981_52010" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="-1" width="90" height="11">
-<g id="__lottie_element_17">
-<path id="Vector_20" d="M0 -0.0078125H89.375V9.99219H0V-0.0078125Z" fill="white"/>
-</g>
-</mask>
-<g mask="url(#mask11_5981_52010)">
-<g id="Group_28">
-<g id="Group_29">
-<g id="Group_30">
-<path id="Vector_21" d="M3.64038 5.99893L4.95938 2.60106L6.27838 5.99893H3.64038ZM3.85422 0.15625L0 9.82501H2.15505L2.9433 7.79456H6.97558L7.76371 9.82501H9.91875L6.06453 0.15625H3.85422Z" fill="white" fill-opacity="0.8"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-</g>
-<defs>
-<clipPath id="clip0_5981_52010">
-<rect width="89.375" height="10" fill="white"/>
-</clipPath>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/other/message-3-fill.svg b/app/components/base/icons/assets/public/other/message-3-fill.svg
deleted file mode 100644
index 95c41f9..0000000
--- a/app/components/base/icons/assets/public/other/message-3-fill.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="message-3-fill">
-<g id="Vector" filter="url(#filter0_d_1071_49501)">
-<path d="M2 8.99374C2 5.68349 4.67654 3 8.00066 3H15.9993C19.3134 3 22 5.69478 22 8.99374V21H8.00066C4.68659 21 2 18.3052 2 15.0063V8.99374ZM14 11V13H16V11H14ZM8 11V13H10V11H8Z" fill="url(#paint0_linear_1071_49501)"/>
-</g>
-</g>
-<defs>
-<filter id="filter0_d_1071_49501" x="1.5" y="2.75" width="21" height="19" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
-<feFlood flood-opacity="0" result="BackgroundImageFix"/>
-<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
-<feOffset dy="0.25"/>
-<feGaussianBlur stdDeviation="0.25"/>
-<feComposite in2="hardAlpha" operator="out"/>
-<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
-<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1071_49501"/>
-<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1071_49501" result="shape"/>
-</filter>
-<linearGradient id="paint0_linear_1071_49501" x1="12" y1="3" x2="12" y2="21" gradientUnits="userSpaceOnUse">
-<stop stop-color="#296DFF"/>
-<stop offset="1" stop-color="#0BA5EC"/>
-</linearGradient>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/plugins/partner-dark.svg b/app/components/base/icons/assets/public/plugins/partner-dark.svg
deleted file mode 100644
index edb71d6..0000000
--- a/app/components/base/icons/assets/public/plugins/partner-dark.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Partner">
-<mask id="mask0_6296_109592" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="1" y="0" width="18" height="20">
-<g id="Mask">
-<path d="M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z" fill="#932F19"/>
-<path d="M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z" fill="url(#paint0_linear_6296_109592)" fill-opacity="0.9"/>
-<path d="M7.47222 1.78016C8.45993 1.20991 8.90155 0.958665 9.36471 0.860217C9.78356 0.771189 10.2164 0.771189 10.6353 0.860217C11.0984 0.958665 11.5401 1.20991 12.5278 1.78016L15.8547 3.70096C16.8424 4.27121 17.2808 4.52805 17.5976 4.87994C17.8842 5.19815 18.1006 5.57304 18.2329 5.98028C18.3792 6.43061 18.3825 6.9387 18.3825 8.0792V11.9208C18.3825 13.0613 18.3792 13.5694 18.2329 14.0197C18.1006 14.427 17.8842 14.8018 17.5976 15.1201C17.2808 15.4719 16.8424 15.7288 15.8547 16.299L12.5278 18.2198C11.5401 18.7901 11.0984 19.0413 10.6353 19.1398C10.2164 19.2288 9.78356 19.2288 9.36471 19.1398C8.90155 19.0413 8.45993 18.7901 7.47222 18.2198L4.1453 16.299C3.1576 15.7288 2.7192 15.4719 2.40236 15.1201C2.11584 14.8018 1.89939 14.427 1.76707 14.0197C1.62075 13.5694 1.61752 13.0613 1.61752 11.9208V8.0792C1.61752 6.9387 1.62075 6.43061 1.76707 5.98028C1.89939 5.57304 2.11584 5.19815 2.40236 4.87994C2.7192 4.52805 3.1576 4.27121 4.1453 3.70096L7.47222 1.78016Z" stroke="url(#paint1_linear_6296_109592)" stroke-opacity="0.8" stroke-width="0.555556"/>
-</g>
-</mask>
-<g mask="url(#mask0_6296_109592)">
-<g id="badge-bg">
-<path d="M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z" fill="#932F19"/>
-<path d="M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z" fill="url(#paint2_linear_6296_109592)" fill-opacity="0.9"/>
-<path d="M7.58333 1.97261C8.58402 1.39487 8.99036 1.16698 9.41092 1.07758C9.7993 0.99503 10.2007 0.99503 10.5891 1.07758C11.0096 1.16698 11.416 1.39487 12.4167 1.97261L15.7436 3.89341C16.7443 4.47116 17.1448 4.70911 17.4325 5.02863C17.6982 5.3237 17.8989 5.67133 18.0216 6.04895C18.1544 6.45786 18.1603 6.92371 18.1603 8.0792V11.9208C18.1603 13.0763 18.1544 13.5421 18.0216 13.951C17.8989 14.3287 17.6982 14.6763 17.4325 14.9714C17.1448 15.2909 16.7443 15.5288 15.7436 16.1066L12.4167 18.0274C11.416 18.6051 11.0096 18.833 10.5891 18.9224C10.2007 19.005 9.7993 19.005 9.41092 18.9224C8.99036 18.833 8.58402 18.6051 7.58333 18.0274L4.25641 16.1066C3.25572 15.5288 2.8552 15.2909 2.5675 14.9714C2.30182 14.6763 2.10112 14.3287 1.97842 13.951C1.84556 13.5421 1.83975 13.0763 1.83975 11.9208V8.0792C1.83975 6.92371 1.84556 6.45786 1.97842 6.04895C2.10112 5.67133 2.30182 5.3237 2.5675 5.02863C2.8552 4.70911 3.25572 4.47116 4.25641 3.89341L7.58333 1.97261Z" stroke="url(#paint3_linear_6296_109592)" stroke-opacity="0.8"/>
-</g>
-<g id="handshake" filter="url(#filter0_d_6296_109592)">
-<path d="M11.0969 9.64841C10.895 9.44642 10.5675 9.44642 10.3656 9.64841L9.99991 10.0141C9.59596 10.418 8.94109 10.418 8.53717 10.0141C8.13325 9.61015 8.13325 8.95527 8.53717 8.55135L11.4491 5.63868C12.5371 5.39255 13.7238 5.69302 14.5709 6.54011C15.8221 7.79128 15.8807 9.78339 14.7469 11.104L13.6567 12.2081L11.0969 9.64841ZM5.42889 6.54011C6.55286 5.41614 8.27475 5.25452 9.57067 6.05524L7.80581 7.81999C6.99797 8.62783 6.99797 9.9376 7.80581 10.7454C8.58917 11.5288 9.8445 11.5525 10.6564 10.8167L10.7313 10.7454L12.9253 12.9395L10.7313 15.1336C10.3273 15.5375 9.67245 15.5375 9.26855 15.1336L5.42889 11.2939C4.11615 9.9812 4.11615 7.85284 5.42889 6.54011Z" fill="url(#paint4_linear_6296_109592)" shape-rendering="crispEdges"/>
-</g>
-<path id="highlight" opacity="0.5" d="M0 0H15.5556L5.26663 20H0V0Z" fill="url(#paint5_linear_6296_109592)"/>
-</g>
-</g>
-<defs>
-<filter id="filter0_d_6296_109592" x="3.94434" y="5.30556" width="12.1111" height="10.881" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
-<feFlood flood-opacity="0" result="BackgroundImageFix"/>
-<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
-<feOffset dy="0.25"/>
-<feGaussianBlur stdDeviation="0.25"/>
-<feComposite in2="hardAlpha" operator="out"/>
-<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
-<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6296_109592"/>
-<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6296_109592" result="shape"/>
-</filter>
-<linearGradient id="paint0_linear_6296_109592" x1="0" y1="0" x2="22.6412" y2="1.78551" gradientUnits="userSpaceOnUse">
-<stop stop-color="#FF692E"/>
-<stop offset="1" stop-color="#E04F16"/>
-</linearGradient>
-<linearGradient id="paint1_linear_6296_109592" x1="8.55422" y1="-1.28187e-07" x2="19.7802" y2="12.7346" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.2"/>
-<stop offset="1" stop-color="#FF4405"/>
-</linearGradient>
-<linearGradient id="paint2_linear_6296_109592" x1="0" y1="0" x2="22.6412" y2="1.78551" gradientUnits="userSpaceOnUse">
-<stop stop-color="#FF692E"/>
-<stop offset="1" stop-color="#E04F16"/>
-</linearGradient>
-<linearGradient id="paint3_linear_6296_109592" x1="8.55422" y1="-1.28187e-07" x2="19.7802" y2="12.7346" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.2"/>
-<stop offset="1" stop-color="#FF4405"/>
-</linearGradient>
-<linearGradient id="paint4_linear_6296_109592" x1="9.99989" y1="5.55556" x2="9.99989" y2="15.4365" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.95"/>
-<stop offset="1" stop-color="white" stop-opacity="0.8"/>
-</linearGradient>
-<linearGradient id="paint5_linear_6296_109592" x1="-4.78632" y1="4.375" x2="16.2164" y2="10.4" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.12"/>
-<stop offset="1" stop-color="white" stop-opacity="0.2"/>
-</linearGradient>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/plugins/partner-light.svg b/app/components/base/icons/assets/public/plugins/partner-light.svg
deleted file mode 100644
index a4ae934..0000000
--- a/app/components/base/icons/assets/public/plugins/partner-light.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Partner">
-<mask id="mask0_6291_109635" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="1" y="0" width="18" height="20">
-<g id="Mask">
-<path d="M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z" fill="#F9DBAF"/>
-<path d="M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z" fill="url(#paint0_linear_6291_109635)" fill-opacity="0.9"/>
-<path d="M7.47222 1.78016C8.45993 1.20991 8.90155 0.958665 9.36471 0.860217C9.78356 0.771189 10.2164 0.771189 10.6353 0.860217C11.0984 0.958665 11.5401 1.20991 12.5278 1.78016L15.8547 3.70096C16.8424 4.27121 17.2808 4.52805 17.5976 4.87994C17.8842 5.19815 18.1006 5.57304 18.2329 5.98028C18.3792 6.43061 18.3825 6.9387 18.3825 8.0792V11.9208C18.3825 13.0613 18.3792 13.5694 18.2329 14.0197C18.1006 14.427 17.8842 14.8018 17.5976 15.1201C17.2808 15.4719 16.8424 15.7288 15.8547 16.299L12.5278 18.2198C11.5401 18.7901 11.0984 19.0413 10.6353 19.1398C10.2164 19.2288 9.78356 19.2288 9.36471 19.1398C8.90155 19.0413 8.45993 18.7901 7.47222 18.2198L4.1453 16.299C3.1576 15.7288 2.7192 15.4719 2.40236 15.1201C2.11584 14.8018 1.89939 14.427 1.76707 14.0197C1.62075 13.5694 1.61752 13.0613 1.61752 11.9208V8.0792C1.61752 6.9387 1.62075 6.43061 1.76707 5.98028C1.89939 5.57304 2.11584 5.19815 2.40236 4.87994C2.7192 4.52805 3.1576 4.27121 4.1453 3.70096L7.47222 1.78016Z" stroke="url(#paint1_linear_6291_109635)" stroke-opacity="0.8" stroke-width="0.555556"/>
-</g>
-</mask>
-<g mask="url(#mask0_6291_109635)">
-<g id="badge-bg">
-<path d="M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z" fill="#F9DBAF"/>
-<path d="M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z" fill="url(#paint2_linear_6291_109635)" fill-opacity="0.9"/>
-<path d="M7.58333 1.97261C8.58402 1.39487 8.99036 1.16698 9.41092 1.07758C9.7993 0.99503 10.2007 0.99503 10.5891 1.07758C11.0096 1.16698 11.416 1.39487 12.4167 1.97261L15.7436 3.89341C16.7443 4.47116 17.1448 4.70911 17.4325 5.02863C17.6982 5.3237 17.8989 5.67133 18.0216 6.04895C18.1544 6.45786 18.1603 6.92371 18.1603 8.0792V11.9208C18.1603 13.0763 18.1544 13.5421 18.0216 13.951C17.8989 14.3287 17.6982 14.6763 17.4325 14.9714C17.1448 15.2909 16.7443 15.5288 15.7436 16.1066L12.4167 18.0274C11.416 18.6051 11.0096 18.833 10.5891 18.9224C10.2007 19.005 9.7993 19.005 9.41092 18.9224C8.99036 18.833 8.58402 18.6051 7.58333 18.0274L4.25641 16.1066C3.25572 15.5288 2.8552 15.2909 2.5675 14.9714C2.30182 14.6763 2.10112 14.3287 1.97842 13.951C1.84556 13.5421 1.83975 13.0763 1.83975 11.9208V8.0792C1.83975 6.92371 1.84556 6.45786 1.97842 6.04895C2.10112 5.67133 2.30182 5.3237 2.5675 5.02863C2.8552 4.70911 3.25572 4.47116 4.25641 3.89341L7.58333 1.97261Z" stroke="url(#paint3_linear_6291_109635)" stroke-opacity="0.8"/>
-</g>
-<g id="handshake" filter="url(#filter0_d_6291_109635)">
-<path d="M11.0969 9.64852C10.895 9.44652 10.5675 9.44652 10.3656 9.64852L9.99991 10.0142C9.59596 10.4181 8.94109 10.4181 8.53717 10.0142C8.13325 9.61025 8.13325 8.95537 8.53717 8.55146L11.4491 5.63879C12.5371 5.39265 13.7238 5.69313 14.5709 6.54022C15.8221 7.79139 15.8807 9.7835 14.7469 11.1041L13.6567 12.2083L11.0969 9.64852ZM5.42889 6.54022C6.55286 5.41625 8.27475 5.25463 9.57067 6.05534L7.80581 7.8201C6.99797 8.62794 6.99797 9.93771 7.80581 10.7456C8.58917 11.5289 9.8445 11.5526 10.6564 10.8168L10.7313 10.7456L12.9253 12.9396L10.7313 15.1337C10.3273 15.5376 9.67245 15.5376 9.26855 15.1337L5.42889 11.294C4.11615 9.98131 4.11615 7.85295 5.42889 6.54022Z" fill="url(#paint4_linear_6291_109635)" shape-rendering="crispEdges"/>
-</g>
-<path id="highlight" opacity="0.5" d="M0 0H15.5556L5.26663 20H0V0Z" fill="url(#paint5_linear_6291_109635)"/>
-</g>
-</g>
-<defs>
-<filter id="filter0_d_6291_109635" x="3.94434" y="5.30566" width="12.1111" height="10.8809" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
-<feFlood flood-opacity="0" result="BackgroundImageFix"/>
-<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
-<feOffset dy="0.25"/>
-<feGaussianBlur stdDeviation="0.25"/>
-<feComposite in2="hardAlpha" operator="out"/>
-<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
-<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6291_109635"/>
-<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6291_109635" result="shape"/>
-</filter>
-<linearGradient id="paint0_linear_6291_109635" x1="0" y1="0" x2="22.6412" y2="1.78551" gradientUnits="userSpaceOnUse">
-<stop stop-color="#FF692E"/>
-<stop offset="1" stop-color="#E04F16"/>
-</linearGradient>
-<linearGradient id="paint1_linear_6291_109635" x1="8.55422" y1="-1.28187e-07" x2="19.7802" y2="12.7346" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.95"/>
-<stop offset="1" stop-color="#E62E05"/>
-</linearGradient>
-<linearGradient id="paint2_linear_6291_109635" x1="0" y1="0" x2="22.6412" y2="1.78551" gradientUnits="userSpaceOnUse">
-<stop stop-color="#FF692E"/>
-<stop offset="1" stop-color="#E04F16"/>
-</linearGradient>
-<linearGradient id="paint3_linear_6291_109635" x1="8.55422" y1="-1.28187e-07" x2="19.7802" y2="12.7346" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.95"/>
-<stop offset="1" stop-color="#E62E05"/>
-</linearGradient>
-<linearGradient id="paint4_linear_6291_109635" x1="9.99989" y1="5.55566" x2="9.99989" y2="15.4366" gradientUnits="userSpaceOnUse">
-<stop stop-color="white"/>
-<stop offset="1" stop-color="white" stop-opacity="0.9"/>
-</linearGradient>
-<linearGradient id="paint5_linear_6291_109635" x1="-4.78632" y1="4.375" x2="16.2164" y2="10.4" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.12"/>
-<stop offset="1" stop-color="white" stop-opacity="0.3"/>
-</linearGradient>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/plugins/verified-dark.svg b/app/components/base/icons/assets/public/plugins/verified-dark.svg
deleted file mode 100644
index aae1193..0000000
--- a/app/components/base/icons/assets/public/plugins/verified-dark.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Verified">
-<mask id="mask0_6296_109593" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
-<g id="Mask">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M8.08817 1.62521C9.14394 0.569383 10.8558 0.569374 11.9116 1.62521L12.8128 2.52641C12.9819 2.69542 13.2111 2.79037 13.4501 2.79037H14.5059C15.9991 2.79037 17.2095 4.00082 17.2095 5.49398V6.54981C17.2095 6.78882 17.3045 7.01805 17.4735 7.18706L18.3747 8.08826C19.4305 9.1441 19.4305 10.8559 18.3747 11.9118L17.4735 12.813C17.3045 12.982 17.2095 13.2112 17.2095 13.4502V14.506C17.2095 15.9992 15.9991 17.2096 14.5059 17.2096H13.4501C13.2111 17.2096 12.9819 17.3046 12.8128 17.4736L11.9116 18.3748C10.8558 19.4306 9.14403 19.4306 8.08817 18.3748L7.18696 17.4736C7.01795 17.3046 6.78873 17.2096 6.54972 17.2096H5.49389C4.00072 17.2096 2.79028 15.9992 2.79028 14.506V13.4502C2.79028 13.2112 2.69533 12.982 2.52632 12.813L1.62513 11.9118C0.569295 10.8559 0.569295 9.1441 1.62512 8.08826L2.52632 7.18706C2.69533 7.01806 2.79028 6.78882 2.79028 6.54981V5.49398C2.79028 4.00082 4.00072 2.79037 5.49389 2.79037H6.54972C6.78873 2.79037 7.01795 2.69542 7.18696 2.52641L8.08817 1.62521Z" fill="#003DC1"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M8.08817 1.62521C9.14394 0.569383 10.8558 0.569374 11.9116 1.62521L12.8128 2.52641C12.9819 2.69542 13.2111 2.79037 13.4501 2.79037H14.5059C15.9991 2.79037 17.2095 4.00082 17.2095 5.49398V6.54981C17.2095 6.78882 17.3045 7.01805 17.4735 7.18706L18.3747 8.08826C19.4305 9.1441 19.4305 10.8559 18.3747 11.9118L17.4735 12.813C17.3045 12.982 17.2095 13.2112 17.2095 13.4502V14.506C17.2095 15.9992 15.9991 17.2096 14.5059 17.2096H13.4501C13.2111 17.2096 12.9819 17.3046 12.8128 17.4736L11.9116 18.3748C10.8558 19.4306 9.14403 19.4306 8.08817 18.3748L7.18696 17.4736C7.01795 17.3046 6.78873 17.2096 6.54972 17.2096H5.49389C4.00072 17.2096 2.79028 15.9992 2.79028 14.506V13.4502C2.79028 13.2112 2.69533 12.982 2.52632 12.813L1.62513 11.9118C0.569295 10.8559 0.569295 9.1441 1.62512 8.08826L2.52632 7.18706C2.69533 7.01806 2.79028 6.78882 2.79028 6.54981V5.49398C2.79028 4.00082 4.00072 2.79037 5.49389 2.79037H6.54972C6.78873 2.79037 7.01795 2.69542 7.18696 2.52641L8.08817 1.62521Z" fill="url(#paint0_linear_6296_109593)" fill-opacity="0.9"/>
-<path d="M8.27881 1.81585L8.27881 1.81585C9.2293 0.865317 10.7704 0.865301 11.721 1.81585L12.6222 2.71705L12.6222 2.71709C12.8418 2.9366 13.1395 3.05997 13.4501 3.05997H14.5059C15.8502 3.05997 16.9399 4.14972 16.9399 5.49398V6.54981C16.9399 6.86036 17.0633 7.15813 17.2828 7.37768L17.2829 7.3777L18.1841 8.2789L18.3747 8.08826L18.1841 8.27891C19.1346 9.22945 19.1346 10.7706 18.1841 11.7211L17.2829 12.6224C17.0633 12.8419 16.9399 13.1397 16.9399 13.4502V14.506C16.9399 15.8503 15.8502 16.94 14.5059 16.94H13.4501C13.1395 16.94 12.8418 17.0634 12.6222 17.2829L12.6222 17.2829L11.721 18.1841C10.7704 19.1347 9.22939 19.1347 8.27881 18.1841L7.37761 17.2829L7.37759 17.2829C7.15804 17.0634 6.86027 16.94 6.54972 16.94H5.49389C4.14962 16.94 3.05989 15.8503 3.05989 14.506V13.4502C3.05989 13.1398 2.93655 12.8419 2.71696 12.6224C2.71696 12.6223 2.71695 12.6223 2.71694 12.6223L1.81577 11.7211C0.865224 10.7706 0.865226 9.22945 1.81576 8.2789L2.71696 7.3777C2.71696 7.3777 2.71696 7.3777 2.71696 7.3777C2.93654 7.15813 3.05989 6.86033 3.05989 6.54981V5.49398C3.05989 4.14972 4.14963 3.05997 5.49389 3.05997H6.54972C6.86024 3.05997 7.15803 2.93662 7.3776 2.71706L7.37761 2.71705L8.27881 1.81585Z" stroke="url(#paint1_linear_6296_109593)" stroke-opacity="0.8" stroke-width="0.539216"/>
-</g>
-</mask>
-<g mask="url(#mask0_6296_109593)">
-<g id="badge-bg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M8.08817 1.62521C9.14394 0.569383 10.8558 0.569374 11.9116 1.62521L12.8128 2.52641C12.9819 2.69542 13.2111 2.79037 13.4501 2.79037H14.5059C15.9991 2.79037 17.2095 4.00082 17.2095 5.49398V6.54981C17.2095 6.78882 17.3045 7.01805 17.4735 7.18706L18.3747 8.08826C19.4305 9.1441 19.4305 10.8559 18.3747 11.9118L17.4735 12.813C17.3045 12.982 17.2095 13.2112 17.2095 13.4502V14.506C17.2095 15.9992 15.9991 17.2096 14.5059 17.2096H13.4501C13.2111 17.2096 12.9819 17.3046 12.8128 17.4736L11.9116 18.3748C10.8558 19.4306 9.14403 19.4306 8.08817 18.3748L7.18696 17.4736C7.01795 17.3046 6.78873 17.2096 6.54972 17.2096H5.49389C4.00072 17.2096 2.79028 15.9992 2.79028 14.506V13.4502C2.79028 13.2112 2.69533 12.982 2.52632 12.813L1.62513 11.9118C0.569295 10.8559 0.569295 9.1441 1.62512 8.08826L2.52632 7.18706C2.69533 7.01806 2.79028 6.78882 2.79028 6.54981V5.49398C2.79028 4.00082 4.00072 2.79037 5.49389 2.79037H6.54972C6.78873 2.79037 7.01795 2.69542 7.18696 2.52641L8.08817 1.62521Z" fill="#003DC1"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M8.08817 1.62521C9.14394 0.569383 10.8558 0.569374 11.9116 1.62521L12.8128 2.52641C12.9819 2.69542 13.2111 2.79037 13.4501 2.79037H14.5059C15.9991 2.79037 17.2095 4.00082 17.2095 5.49398V6.54981C17.2095 6.78882 17.3045 7.01805 17.4735 7.18706L18.3747 8.08826C19.4305 9.1441 19.4305 10.8559 18.3747 11.9118L17.4735 12.813C17.3045 12.982 17.2095 13.2112 17.2095 13.4502V14.506C17.2095 15.9992 15.9991 17.2096 14.5059 17.2096H13.4501C13.2111 17.2096 12.9819 17.3046 12.8128 17.4736L11.9116 18.3748C10.8558 19.4306 9.14403 19.4306 8.08817 18.3748L7.18696 17.4736C7.01795 17.3046 6.78873 17.2096 6.54972 17.2096H5.49389C4.00072 17.2096 2.79028 15.9992 2.79028 14.506V13.4502C2.79028 13.2112 2.69533 12.982 2.52632 12.813L1.62513 11.9118C0.569295 10.8559 0.569295 9.1441 1.62512 8.08826L2.52632 7.18706C2.69533 7.01806 2.79028 6.78882 2.79028 6.54981V5.49398C2.79028 4.00082 4.00072 2.79037 5.49389 2.79037H6.54972C6.78873 2.79037 7.01795 2.69542 7.18696 2.52641L8.08817 1.62521Z" fill="url(#paint2_linear_6296_109593)" fill-opacity="0.9"/>
-<path d="M8.44172 1.97876L8.44173 1.97875C9.30224 1.11821 10.6975 1.11818 11.5581 1.97876L12.4593 2.87997L12.4593 2.88003C12.7221 3.1427 13.0784 3.29037 13.4501 3.29037H14.5059C15.723 3.29037 16.7095 4.27696 16.7095 5.49398V6.54981C16.7095 6.92148 16.8572 7.27785 17.1199 7.54057L17.1199 7.54061L18.0211 8.44182L18.3747 8.08826L18.0211 8.44182C18.8817 9.30239 18.8817 10.6976 18.0211 11.5582L17.1199 12.4594C16.8572 12.7222 16.7095 13.0786 16.7095 13.4502V14.506C16.7095 15.7231 15.723 16.7096 14.5059 16.7096H13.4501C13.0784 16.7096 12.7221 16.8573 12.4594 17.1199L12.4593 17.12L11.5581 18.0212C10.6975 18.8818 9.30233 18.8818 8.44172 18.0212L7.54052 17.12L7.54048 17.12C7.27775 16.8573 6.92139 16.7096 6.54972 16.7096H5.49389C4.27686 16.7096 3.29028 15.7231 3.29028 14.506V13.4502C3.29028 13.0787 3.14267 12.7222 2.87984 12.4594L1.97868 11.5582C1.11811 10.6976 1.11811 9.30238 1.97867 8.44181L2.87986 7.54062C2.87987 7.54062 2.87987 7.54061 2.87987 7.54061C3.14266 7.27784 3.29028 6.92143 3.29028 6.54981V5.49398C3.29028 4.27696 4.27687 3.29037 5.49389 3.29037H6.54972C6.92135 3.29037 7.27774 3.14273 7.54051 2.87998L7.54052 2.87997L8.44172 1.97876Z" stroke="url(#paint3_linear_6296_109593)" stroke-opacity="0.8"/>
-</g>
-<g id="check" filter="url(#filter0_d_6296_109593)">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M13.4219 6.98132C13.8732 7.28924 13.9829 7.89545 13.667 8.33533L10.04 13.3858C9.87754 13.612 9.62408 13.7602 9.34287 13.7934C9.06166 13.8266 8.77923 13.7417 8.56605 13.5599L6.49346 11.7923C6.0789 11.4387 6.03689 10.8245 6.39963 10.4204C6.76238 10.0163 7.39252 9.97533 7.80709 10.3289L9.04316 11.3831L12.0328 7.22026C12.3487 6.78038 12.9706 6.6734 13.4219 6.98132Z" fill="url(#paint4_linear_6296_109593)" shape-rendering="crispEdges"/>
-</g>
-<path id="highlight" opacity="0.5" d="M0 0H15.5556L5.26663 20H0V0Z" fill="url(#paint5_linear_6296_109593)"/>
-</g>
-</g>
-<defs>
-<filter id="filter0_d_6296_109593" x="5.65283" y="6.55549" width="8.69458" height="7.995" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
-<feFlood flood-opacity="0" result="BackgroundImageFix"/>
-<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
-<feOffset dy="0.25"/>
-<feGaussianBlur stdDeviation="0.25"/>
-<feComposite in2="hardAlpha" operator="out"/>
-<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
-<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6296_109593"/>
-<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6296_109593" result="shape"/>
-</filter>
-<linearGradient id="paint0_linear_6296_109593" x1="16.302" y1="19.1667" x2="-0.37184" y2="14.8201" gradientUnits="userSpaceOnUse">
-<stop stop-color="#296DFF"/>
-<stop offset="1" stop-color="#5289FF"/>
-</linearGradient>
-<linearGradient id="paint1_linear_6296_109593" x1="8.67462" y1="0.833336" x2="18.9651" y2="12.5067" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.2"/>
-<stop offset="1" stop-color="#296DFF"/>
-</linearGradient>
-<linearGradient id="paint2_linear_6296_109593" x1="16.302" y1="19.1667" x2="-0.37184" y2="14.8201" gradientUnits="userSpaceOnUse">
-<stop stop-color="#296DFF"/>
-<stop offset="1" stop-color="#5289FF"/>
-</linearGradient>
-<linearGradient id="paint3_linear_6296_109593" x1="8.67462" y1="0.833336" x2="18.9651" y2="12.5067" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.2"/>
-<stop offset="1" stop-color="#296DFF"/>
-</linearGradient>
-<linearGradient id="paint4_linear_6296_109593" x1="10.0001" y1="6.80549" x2="10.0001" y2="13.8005" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.95"/>
-<stop offset="1" stop-color="white" stop-opacity="0.8"/>
-</linearGradient>
-<linearGradient id="paint5_linear_6296_109593" x1="-4.78632" y1="4.375" x2="16.2164" y2="10.4" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.12"/>
-<stop offset="1" stop-color="white" stop-opacity="0.2"/>
-</linearGradient>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/plugins/verified-light.svg b/app/components/base/icons/assets/public/plugins/verified-light.svg
deleted file mode 100644
index c55f67f..0000000
--- a/app/components/base/icons/assets/public/plugins/verified-light.svg
+++ /dev/null
@@ -1,58 +0,0 @@
-<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Verified">
-<mask id="mask0_6295_120949" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="20">
-<g id="Mask">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M8.08817 1.62512C9.14394 0.569299 10.8558 0.56929 11.9116 1.62512L12.8128 2.52633C12.9819 2.69533 13.2111 2.79028 13.4501 2.79028H14.5059C15.9991 2.79028 17.2095 4.00074 17.2095 5.4939V6.54972C17.2095 6.78874 17.3045 7.01796 17.4735 7.18697L18.3747 8.08818C19.4305 9.14401 19.4305 10.8559 18.3747 11.9117L17.4735 12.8129C17.3045 12.9819 17.2095 13.2112 17.2095 13.4502V14.5059C17.2095 15.9991 15.9991 17.2095 14.5059 17.2095H13.4501C13.2111 17.2095 12.9819 17.3045 12.8128 17.4735L11.9116 18.3747C10.8558 19.4305 9.14403 19.4305 8.08817 18.3747L7.18696 17.4735C7.01795 17.3045 6.78873 17.2095 6.54972 17.2095H5.49389C4.00072 17.2095 2.79028 15.9991 2.79028 14.5059V13.4502C2.79028 13.2112 2.69533 12.9819 2.52632 12.8129L1.62513 11.9117C0.569295 10.8559 0.569295 9.14401 1.62512 8.08818L2.52632 7.18697C2.69533 7.01797 2.79028 6.78874 2.79028 6.54972V5.4939C2.79028 4.00074 4.00072 2.79028 5.49389 2.79028H6.54972C6.78873 2.79028 7.01795 2.69533 7.18696 2.52633L8.08817 1.62512Z" fill="#B2CAFF"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M8.08817 1.62512C9.14394 0.569299 10.8558 0.56929 11.9116 1.62512L12.8128 2.52633C12.9819 2.69533 13.2111 2.79028 13.4501 2.79028H14.5059C15.9991 2.79028 17.2095 4.00074 17.2095 5.4939V6.54972C17.2095 6.78874 17.3045 7.01796 17.4735 7.18697L18.3747 8.08818C19.4305 9.14401 19.4305 10.8559 18.3747 11.9117L17.4735 12.8129C17.3045 12.9819 17.2095 13.2112 17.2095 13.4502V14.5059C17.2095 15.9991 15.9991 17.2095 14.5059 17.2095H13.4501C13.2111 17.2095 12.9819 17.3045 12.8128 17.4735L11.9116 18.3747C10.8558 19.4305 9.14403 19.4305 8.08817 18.3747L7.18696 17.4735C7.01795 17.3045 6.78873 17.2095 6.54972 17.2095H5.49389C4.00072 17.2095 2.79028 15.9991 2.79028 14.5059V13.4502C2.79028 13.2112 2.69533 12.9819 2.52632 12.8129L1.62513 11.9117C0.569295 10.8559 0.569295 9.14401 1.62512 8.08818L2.52632 7.18697C2.69533 7.01797 2.79028 6.78874 2.79028 6.54972V5.4939C2.79028 4.00074 4.00072 2.79028 5.49389 2.79028H6.54972C6.78873 2.79028 7.01795 2.69533 7.18696 2.52633L8.08817 1.62512Z" fill="url(#paint0_linear_6295_120949)" fill-opacity="0.9"/>
-<path d="M8.27881 1.81577L8.27881 1.81576C9.2293 0.865233 10.7704 0.865217 11.721 1.81577L12.6222 2.71697L12.6222 2.71701C12.8418 2.93652 13.1395 3.05989 13.4501 3.05989H14.5059C15.8502 3.05989 16.9399 4.14963 16.9399 5.4939V6.54972C16.9399 6.86027 17.0633 7.15805 17.2828 7.3776L17.2829 7.37762L18.1841 8.27882L18.3747 8.08818L18.1841 8.27882C19.1346 9.22937 19.1346 10.7705 18.1841 11.7211L17.2829 12.6223C17.0633 12.8418 16.9399 13.1396 16.9399 13.4502V14.5059C16.9399 15.8502 15.8502 16.9399 14.5059 16.9399H13.4501C13.1395 16.9399 12.8418 17.0633 12.6222 17.2828L12.6222 17.2829L11.721 18.1841C10.7704 19.1346 9.22939 19.1346 8.27881 18.1841L7.37761 17.2829L7.37759 17.2828C7.15804 17.0633 6.86027 16.9399 6.54972 16.9399H5.49389C4.14962 16.9399 3.05989 15.8502 3.05989 14.5059V13.4502C3.05989 13.1397 2.93655 12.8418 2.71696 12.6223C2.71696 12.6223 2.71695 12.6223 2.71694 12.6222L1.81577 11.7211C0.865224 10.7705 0.865226 9.22936 1.81576 8.27882L2.71696 7.37762C2.71696 7.37762 2.71696 7.37762 2.71696 7.37762C2.93654 7.15805 3.05989 6.86024 3.05989 6.54972V5.4939C3.05989 4.14964 4.14963 3.05989 5.49389 3.05989H6.54972C6.86024 3.05989 7.15803 2.93653 7.3776 2.71698L7.37761 2.71697L8.27881 1.81577Z" stroke="url(#paint1_linear_6295_120949)" stroke-opacity="0.8" stroke-width="0.539216"/>
-</g>
-</mask>
-<g mask="url(#mask0_6295_120949)">
-<g id="badge-bg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M8.08817 1.62512C9.14394 0.569299 10.8558 0.56929 11.9116 1.62512L12.8128 2.52633C12.9819 2.69533 13.2111 2.79028 13.4501 2.79028H14.5059C15.9991 2.79028 17.2095 4.00074 17.2095 5.4939V6.54972C17.2095 6.78874 17.3045 7.01796 17.4735 7.18697L18.3747 8.08818C19.4305 9.14401 19.4305 10.8559 18.3747 11.9117L17.4735 12.8129C17.3045 12.9819 17.2095 13.2112 17.2095 13.4502V14.5059C17.2095 15.9991 15.9991 17.2095 14.5059 17.2095H13.4501C13.2111 17.2095 12.9819 17.3045 12.8128 17.4735L11.9116 18.3747C10.8558 19.4305 9.14403 19.4305 8.08817 18.3747L7.18696 17.4735C7.01795 17.3045 6.78873 17.2095 6.54972 17.2095H5.49389C4.00072 17.2095 2.79028 15.9991 2.79028 14.5059V13.4502C2.79028 13.2112 2.69533 12.9819 2.52632 12.8129L1.62513 11.9117C0.569295 10.8559 0.569295 9.14401 1.62512 8.08818L2.52632 7.18697C2.69533 7.01797 2.79028 6.78874 2.79028 6.54972V5.4939C2.79028 4.00074 4.00072 2.79028 5.49389 2.79028H6.54972C6.78873 2.79028 7.01795 2.69533 7.18696 2.52633L8.08817 1.62512Z" fill="#B2CAFF"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M8.08817 1.62512C9.14394 0.569299 10.8558 0.56929 11.9116 1.62512L12.8128 2.52633C12.9819 2.69533 13.2111 2.79028 13.4501 2.79028H14.5059C15.9991 2.79028 17.2095 4.00074 17.2095 5.4939V6.54972C17.2095 6.78874 17.3045 7.01796 17.4735 7.18697L18.3747 8.08818C19.4305 9.14401 19.4305 10.8559 18.3747 11.9117L17.4735 12.8129C17.3045 12.9819 17.2095 13.2112 17.2095 13.4502V14.5059C17.2095 15.9991 15.9991 17.2095 14.5059 17.2095H13.4501C13.2111 17.2095 12.9819 17.3045 12.8128 17.4735L11.9116 18.3747C10.8558 19.4305 9.14403 19.4305 8.08817 18.3747L7.18696 17.4735C7.01795 17.3045 6.78873 17.2095 6.54972 17.2095H5.49389C4.00072 17.2095 2.79028 15.9991 2.79028 14.5059V13.4502C2.79028 13.2112 2.69533 12.9819 2.52632 12.8129L1.62513 11.9117C0.569295 10.8559 0.569295 9.14401 1.62512 8.08818L2.52632 7.18697C2.69533 7.01797 2.79028 6.78874 2.79028 6.54972V5.4939C2.79028 4.00074 4.00072 2.79028 5.49389 2.79028H6.54972C6.78873 2.79028 7.01795 2.69533 7.18696 2.52633L8.08817 1.62512Z" fill="url(#paint2_linear_6295_120949)" fill-opacity="0.9"/>
-<path d="M8.44172 1.97868L8.44173 1.97867C9.30224 1.11812 10.6975 1.1181 11.5581 1.97868L12.4593 2.87988L12.4593 2.87995C12.7221 3.14262 13.0784 3.29028 13.4501 3.29028H14.5059C15.723 3.29028 16.7095 4.27687 16.7095 5.4939V6.54972C16.7095 6.9214 16.8572 7.27776 17.1199 7.54049L17.1199 7.54053L18.0211 8.44173L18.3747 8.08818L18.0211 8.44174C18.8817 9.3023 18.8817 10.6976 18.0211 11.5582L17.1199 12.4594C16.8572 12.7221 16.7095 13.0785 16.7095 13.4502V14.5059C16.7095 15.723 15.723 16.7095 14.5059 16.7095H13.4501C13.0784 16.7095 12.7221 16.8573 12.4594 17.1198L12.4593 17.1199L11.5581 18.0211C10.6975 18.8817 9.30233 18.8817 8.44172 18.0211L7.54052 17.1199L7.54048 17.1199C7.27775 16.8572 6.92139 16.7095 6.54972 16.7095H5.49389C4.27686 16.7095 3.29028 15.723 3.29028 14.5059V13.4502C3.29028 13.0786 3.14267 12.7221 2.87984 12.4593L1.97868 11.5582C1.11811 10.6976 1.11811 9.3023 1.97867 8.44173L2.87986 7.54054C2.87987 7.54053 2.87987 7.54053 2.87987 7.54053C3.14266 7.27775 3.29028 6.92134 3.29028 6.54972V5.4939C3.29028 4.27688 4.27687 3.29028 5.49389 3.29028H6.54972C6.92135 3.29028 7.27774 3.14265 7.54051 2.87989L7.54052 2.87988L8.44172 1.97868Z" stroke="url(#paint3_linear_6295_120949)" stroke-opacity="0.8"/>
-</g>
-<g id="check" filter="url(#filter0_d_6295_120949)">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M13.4219 6.98125C13.8732 7.28917 13.9829 7.89538 13.667 8.33526L10.04 13.3857C9.87754 13.6119 9.62408 13.7601 9.34287 13.7933C9.06166 13.8266 8.77923 13.7417 8.56605 13.5599L6.49346 11.7922C6.0789 11.4386 6.03689 10.8244 6.39963 10.4203C6.76238 10.0162 7.39252 9.97526 7.80709 10.3288L9.04316 11.3831L12.0328 7.22019C12.3487 6.78031 12.9706 6.67333 13.4219 6.98125Z" fill="url(#paint4_linear_6295_120949)" shape-rendering="crispEdges"/>
-</g>
-<path id="highlight" opacity="0.5" d="M0 0H15.5556L5.26663 20H0V0Z" fill="url(#paint5_linear_6295_120949)"/>
-</g>
-</g>
-<defs>
-<filter id="filter0_d_6295_120949" x="5.65283" y="6.55542" width="8.69458" height="7.99512" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
-<feFlood flood-opacity="0" result="BackgroundImageFix"/>
-<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
-<feOffset dy="0.25"/>
-<feGaussianBlur stdDeviation="0.25"/>
-<feComposite in2="hardAlpha" operator="out"/>
-<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
-<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_6295_120949"/>
-<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_6295_120949" result="shape"/>
-</filter>
-<linearGradient id="paint0_linear_6295_120949" x1="16.302" y1="19.1666" x2="-0.37184" y2="14.82" gradientUnits="userSpaceOnUse">
-<stop stop-color="#155AEF"/>
-<stop offset="1" stop-color="#5289FF"/>
-</linearGradient>
-<linearGradient id="paint1_linear_6295_120949" x1="8.67462" y1="0.833252" x2="18.9651" y2="12.5066" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.95"/>
-<stop offset="1" stop-color="#155AEF"/>
-</linearGradient>
-<linearGradient id="paint2_linear_6295_120949" x1="16.302" y1="19.1666" x2="-0.37184" y2="14.82" gradientUnits="userSpaceOnUse">
-<stop stop-color="#155AEF"/>
-<stop offset="1" stop-color="#5289FF"/>
-</linearGradient>
-<linearGradient id="paint3_linear_6295_120949" x1="8.67462" y1="0.833252" x2="18.9651" y2="12.5066" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.95"/>
-<stop offset="1" stop-color="#155AEF"/>
-</linearGradient>
-<linearGradient id="paint4_linear_6295_120949" x1="10.0001" y1="6.80542" x2="10.0001" y2="13.8004" gradientUnits="userSpaceOnUse">
-<stop stop-color="white"/>
-<stop offset="1" stop-color="white" stop-opacity="0.9"/>
-</linearGradient>
-<linearGradient id="paint5_linear_6295_120949" x1="-4.78632" y1="4.375" x2="16.2164" y2="10.4" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.12"/>
-<stop offset="1" stop-color="white" stop-opacity="0.3"/>
-</linearGradient>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/public/tracing/weave-icon-big.svg b/app/components/base/icons/assets/public/tracing/weave-icon-big.svg
deleted file mode 100644
index 9b1f9a8..0000000
--- a/app/components/base/icons/assets/public/tracing/weave-icon-big.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="124px" height="16px" viewBox="0 0 120 16" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 20.847656 3.292969 C 20.875 3.292969 20.902344 3.292969 20.933594 3.292969 C 20.949219 3.292969 20.964844 3.292969 20.980469 3.292969 C 21.035156 3.292969 21.089844 3.292969 21.140625 3.292969 C 21.179688 3.292969 21.21875 3.292969 21.253906 3.292969 C 21.359375 3.292969 21.464844 3.292969 21.566406 3.292969 C 21.675781 3.292969 21.78125 3.292969 21.890625 3.292969 C 22.097656 3.292969 22.300781 3.292969 22.507812 3.292969 C 22.738281 3.292969 22.972656 3.292969 23.207031 3.296875 C 23.6875 3.296875 24.167969 3.296875 24.648438 3.296875 C 24.648438 3.519531 24.648438 3.742188 24.648438 3.96875 C 24.113281 4.042969 24.113281 4.042969 23.566406 4.113281 C 23.667969 4.496094 23.769531 4.882812 23.867188 5.265625 C 23.878906 5.308594 23.878906 5.308594 23.890625 5.351562 C 24.128906 6.269531 24.371094 7.183594 24.609375 8.097656 C 24.675781 8.339844 24.738281 8.582031 24.800781 8.824219 C 24.816406 8.878906 24.832031 8.933594 24.84375 8.992188 C 24.867188 9.078125 24.890625 9.167969 24.914062 9.257812 C 24.921875 9.289062 24.933594 9.320312 24.941406 9.355469 C 24.953125 9.398438 24.964844 9.441406 24.976562 9.484375 C 24.984375 9.523438 24.984375 9.523438 24.996094 9.558594 C 25.007812 9.625 25.007812 9.625 25.007812 9.71875 C 25.023438 9.71875 25.039062 9.71875 25.054688 9.71875 C 25.058594 9.707031 25.058594 9.695312 25.0625 9.679688 C 25.097656 9.492188 25.152344 9.3125 25.210938 9.128906 C 25.222656 9.097656 25.234375 9.0625 25.246094 9.027344 C 25.269531 8.953125 25.292969 8.882812 25.316406 8.808594 C 25.355469 8.691406 25.390625 8.574219 25.429688 8.457031 C 25.464844 8.339844 25.503906 8.21875 25.542969 8.097656 C 25.660156 7.738281 25.773438 7.375 25.890625 7.011719 C 25.902344 6.96875 25.917969 6.921875 25.933594 6.875 C 26.226562 5.945312 26.519531 5.019531 26.808594 4.089844 C 26.785156 4.089844 26.765625 4.089844 26.742188 4.085938 C 26.507812 4.074219 26.273438 4.046875 26.042969 4.015625 C 26.007812 4.011719 25.972656 4.007812 25.933594 4.003906 C 25.851562 3.992188 25.765625 3.980469 25.679688 3.96875 C 25.679688 3.746094 25.679688 3.523438 25.679688 3.296875 C 26.175781 3.296875 26.667969 3.296875 27.160156 3.296875 C 27.390625 3.292969 27.621094 3.292969 27.851562 3.292969 C 28.050781 3.292969 28.25 3.292969 28.449219 3.292969 C 28.554688 3.292969 28.660156 3.292969 28.765625 3.292969 C 28.867188 3.292969 28.964844 3.292969 29.066406 3.292969 C 29.101562 3.292969 29.140625 3.292969 29.175781 3.292969 C 29.226562 3.292969 29.273438 3.292969 29.324219 3.292969 C 29.367188 3.292969 29.367188 3.292969 29.410156 3.292969 C 29.472656 3.296875 29.472656 3.296875 29.496094 3.320312 C 29.5 3.367188 29.5 3.417969 29.5 3.464844 C 29.5 3.492188 29.5 3.515625 29.5 3.542969 C 29.496094 3.59375 29.496094 3.59375 29.496094 3.648438 C 29.496094 3.753906 29.496094 3.859375 29.496094 3.96875 C 29.09375 4.015625 28.6875 4.066406 28.273438 4.113281 C 28.679688 5.460938 28.679688 5.460938 29.089844 6.808594 C 29.105469 6.859375 29.121094 6.910156 29.136719 6.960938 C 29.234375 7.292969 29.335938 7.625 29.4375 7.960938 C 29.484375 8.113281 29.53125 8.265625 29.578125 8.417969 C 29.605469 8.507812 29.632812 8.597656 29.660156 8.691406 C 29.878906 9.40625 29.878906 9.40625 29.976562 9.746094 C 30.027344 9.664062 30.046875 9.601562 30.070312 9.507812 C 30.078125 9.484375 30.078125 9.484375 30.085938 9.457031 C 30.101562 9.402344 30.117188 9.34375 30.132812 9.289062 C 30.144531 9.25 30.152344 9.207031 30.164062 9.167969 C 30.1875 9.082031 30.214844 8.992188 30.238281 8.90625 C 30.292969 8.691406 30.351562 8.480469 30.410156 8.269531 C 30.433594 8.191406 30.453125 8.117188 30.472656 8.042969 C 30.621094 7.5 30.769531 6.960938 30.921875 6.421875 C 30.949219 6.324219 30.976562 6.226562 31 6.128906 C 31.066406 5.902344 31.128906 5.675781 31.191406 5.449219 C 31.230469 5.308594 31.269531 5.164062 31.308594 5.023438 C 31.335938 4.925781 31.363281 4.828125 31.390625 4.734375 C 31.402344 4.6875 31.414062 4.640625 31.429688 4.59375 C 31.445312 4.53125 31.464844 4.46875 31.480469 4.40625 C 31.488281 4.386719 31.492188 4.367188 31.496094 4.347656 C 31.515625 4.277344 31.535156 4.207031 31.558594 4.136719 C 31.210938 4.074219 30.855469 4.023438 30.503906 3.96875 C 30.503906 3.746094 30.503906 3.523438 30.503906 3.296875 C 30.878906 3.296875 31.253906 3.296875 31.628906 3.296875 C 31.804688 3.292969 31.976562 3.292969 32.152344 3.292969 C 32.304688 3.292969 32.457031 3.292969 32.605469 3.292969 C 32.6875 3.292969 32.769531 3.292969 32.847656 3.292969 C 32.9375 3.292969 33.027344 3.292969 33.117188 3.292969 C 33.144531 3.292969 33.171875 3.292969 33.199219 3.292969 C 33.222656 3.292969 33.246094 3.292969 33.273438 3.292969 C 33.304688 3.292969 33.304688 3.292969 33.335938 3.292969 C 33.382812 3.296875 33.382812 3.296875 33.40625 3.320312 C 33.410156 3.367188 33.410156 3.414062 33.410156 3.460938 C 33.410156 3.488281 33.410156 3.515625 33.410156 3.542969 C 33.410156 3.574219 33.410156 3.605469 33.410156 3.632812 C 33.410156 3.664062 33.410156 3.695312 33.410156 3.726562 C 33.410156 3.796875 33.410156 3.871094 33.40625 3.945312 C 33.292969 3.964844 33.175781 3.984375 33.0625 4.007812 C 33.023438 4.011719 32.984375 4.019531 32.945312 4.027344 C 32.738281 4.0625 32.535156 4.097656 32.328125 4.113281 C 32.320312 4.144531 32.320312 4.144531 32.3125 4.179688 C 32.238281 4.480469 32.15625 4.78125 32.070312 5.082031 C 32.058594 5.128906 32.042969 5.171875 32.03125 5.21875 C 31.875 5.78125 31.714844 6.347656 31.550781 6.910156 C 31.375 7.535156 31.195312 8.160156 31.019531 8.785156 C 30.992188 8.871094 30.96875 8.957031 30.945312 9.042969 C 30.835938 9.433594 30.722656 9.820312 30.613281 10.210938 C 30.566406 10.378906 30.519531 10.542969 30.472656 10.707031 C 30.445312 10.804688 30.417969 10.902344 30.390625 11 C 30.277344 11.390625 30.167969 11.785156 30.046875 12.175781 C 29.730469 12.175781 29.414062 12.175781 29.089844 12.175781 C 29.03125 12.003906 29.03125 12.003906 28.976562 11.832031 C 28.925781 11.675781 28.878906 11.523438 28.828125 11.367188 C 28.820312 11.347656 28.8125 11.328125 28.808594 11.304688 C 28.632812 10.769531 28.460938 10.230469 28.285156 9.695312 C 28.144531 9.273438 28.007812 8.847656 27.875 8.425781 C 27.695312 7.867188 27.515625 7.308594 27.332031 6.753906 C 27.304688 6.679688 27.28125 6.605469 27.257812 6.53125 C 27.238281 6.476562 27.222656 6.425781 27.207031 6.375 C 27.046875 5.894531 27.046875 5.894531 27.046875 5.796875 C 27.03125 5.796875 27.015625 5.796875 27 5.796875 C 26.996094 5.8125 26.996094 5.828125 26.992188 5.84375 C 26.964844 5.988281 26.925781 6.132812 26.882812 6.273438 C 26.875 6.296875 26.867188 6.316406 26.859375 6.339844 C 26.84375 6.390625 26.828125 6.4375 26.8125 6.488281 C 26.769531 6.625 26.726562 6.761719 26.683594 6.898438 C 26.675781 6.929688 26.664062 6.957031 26.65625 6.988281 C 26.546875 7.328125 26.445312 7.667969 26.339844 8.007812 C 26.316406 8.078125 26.296875 8.144531 26.273438 8.214844 C 26.230469 8.355469 26.1875 8.496094 26.144531 8.636719 C 26.074219 8.863281 26.007812 9.089844 25.9375 9.3125 C 25.933594 9.328125 25.925781 9.347656 25.921875 9.363281 C 25.894531 9.449219 25.871094 9.535156 25.84375 9.617188 C 25.796875 9.769531 25.75 9.921875 25.703125 10.074219 C 25.675781 10.15625 25.652344 10.242188 25.625 10.328125 C 25.613281 10.363281 25.605469 10.394531 25.59375 10.429688 C 25.414062 11.011719 25.234375 11.59375 25.054688 12.175781 C 24.738281 12.175781 24.421875 12.175781 24.097656 12.175781 C 23.816406 11.230469 23.535156 10.285156 23.261719 9.339844 C 23.253906 9.320312 23.25 9.304688 23.246094 9.285156 C 23.195312 9.117188 23.144531 8.949219 23.097656 8.78125 C 22.960938 8.3125 22.824219 7.84375 22.6875 7.375 C 22.664062 7.304688 22.644531 7.234375 22.625 7.164062 C 22.414062 6.449219 22.207031 5.738281 22 5.027344 C 21.976562 4.953125 21.953125 4.878906 21.933594 4.804688 C 21.898438 4.683594 21.859375 4.5625 21.824219 4.441406 C 21.820312 4.421875 21.8125 4.402344 21.808594 4.382812 C 21.796875 4.347656 21.785156 4.3125 21.777344 4.28125 C 21.753906 4.203125 21.742188 4.148438 21.742188 4.066406 C 21.726562 4.066406 21.710938 4.0625 21.691406 4.0625 C 21.382812 4.042969 21.070312 4.003906 20.761719 3.96875 C 20.757812 3.863281 20.757812 3.753906 20.757812 3.648438 C 20.757812 3.617188 20.757812 3.585938 20.757812 3.554688 C 20.757812 3.523438 20.757812 3.496094 20.757812 3.464844 C 20.757812 3.4375 20.757812 3.410156 20.757812 3.382812 C 20.761719 3.296875 20.761719 3.296875 20.847656 3.292969 Z M 20.847656 3.292969 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 82.488281 3.25 C 83.046875 3.246094 83.605469 3.246094 84.167969 3.246094 C 84.425781 3.246094 84.6875 3.246094 84.945312 3.246094 C 85.171875 3.242188 85.398438 3.242188 85.625 3.242188 C 85.746094 3.242188 85.867188 3.242188 85.984375 3.242188 C 88.15625 3.238281 88.15625 3.238281 88.894531 3.898438 C 88.914062 3.914062 88.9375 3.929688 88.957031 3.945312 C 89.191406 4.144531 89.363281 4.402344 89.472656 4.691406 C 89.480469 4.714844 89.492188 4.742188 89.5 4.765625 C 89.65625 5.25 89.601562 5.785156 89.382812 6.234375 C 89.117188 6.753906 88.695312 7.078125 88.152344 7.265625 C 87.984375 7.320312 87.816406 7.367188 87.648438 7.410156 C 87.664062 7.414062 87.679688 7.417969 87.699219 7.421875 C 88.523438 7.605469 89.300781 7.851562 89.78125 8.597656 C 90.0625 9.0625 90.125 9.636719 90.003906 10.164062 C 89.808594 10.804688 89.363281 11.304688 88.78125 11.621094 C 88.324219 11.863281 87.820312 11.988281 87.3125 12.054688 C 87.28125 12.058594 87.253906 12.0625 87.222656 12.066406 C 86.777344 12.121094 86.332031 12.109375 85.882812 12.105469 C 85.765625 12.105469 85.644531 12.105469 85.523438 12.105469 C 85.300781 12.105469 85.074219 12.105469 84.847656 12.105469 C 84.589844 12.105469 84.332031 12.105469 84.074219 12.105469 C 83.546875 12.105469 83.015625 12.101562 82.488281 12.101562 C 82.488281 11.878906 82.488281 11.65625 82.488281 11.429688 C 82.859375 11.390625 83.234375 11.347656 83.617188 11.308594 C 83.617188 8.910156 83.617188 6.511719 83.617188 4.042969 C 83.488281 4.035156 83.363281 4.027344 83.230469 4.019531 C 83.117188 4.007812 83.003906 3.996094 82.890625 3.980469 C 82.863281 3.980469 82.832031 3.976562 82.804688 3.972656 C 82.695312 3.960938 82.59375 3.949219 82.488281 3.921875 C 82.488281 3.699219 82.488281 3.476562 82.488281 3.25 Z M 85.390625 3.96875 C 85.390625 4.242188 85.386719 4.515625 85.382812 4.785156 C 85.382812 4.914062 85.378906 5.039062 85.378906 5.164062 C 85.371094 5.824219 85.367188 6.484375 85.367188 7.144531 C 86.488281 7.183594 86.488281 7.183594 87.457031 6.691406 C 87.796875 6.320312 87.859375 5.832031 87.847656 5.351562 C 87.832031 4.992188 87.71875 4.644531 87.460938 4.378906 C 87 3.96875 86.363281 3.964844 85.78125 3.96875 C 85.742188 3.96875 85.703125 3.96875 85.667969 3.96875 C 85.574219 3.96875 85.484375 3.96875 85.390625 3.96875 Z M 85.390625 7.84375 C 85.390625 9.003906 85.390625 10.160156 85.390625 11.355469 C 86.28125 11.386719 86.28125 11.386719 87.152344 11.21875 C 87.171875 11.214844 87.1875 11.207031 87.207031 11.199219 C 87.578125 11.066406 87.886719 10.824219 88.066406 10.46875 C 88.28125 9.988281 88.289062 9.417969 88.125 8.921875 C 87.960938 8.492188 87.664062 8.234375 87.257812 8.046875 C 86.664062 7.804688 86.023438 7.84375 85.390625 7.84375 Z M 85.390625 7.84375 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 76.167969 3.476562 C 76.367188 3.671875 76.507812 3.917969 76.585938 4.1875 C 76.589844 4.203125 76.59375 4.222656 76.601562 4.242188 C 76.707031 4.675781 76.621094 5.144531 76.414062 5.53125 C 76.34375 5.644531 76.265625 5.746094 76.175781 5.847656 C 76.15625 5.867188 76.136719 5.886719 76.117188 5.910156 C 75.71875 6.332031 75.199219 6.617188 74.6875 6.882812 C 74.707031 6.902344 74.726562 6.921875 74.746094 6.941406 C 74.972656 7.191406 74.972656 7.191406 75.066406 7.296875 C 75.140625 7.382812 75.21875 7.464844 75.300781 7.542969 C 75.351562 7.59375 75.394531 7.640625 75.4375 7.695312 C 75.527344 7.796875 75.621094 7.894531 75.714844 7.992188 C 76.089844 8.394531 76.089844 8.394531 76.253906 8.585938 C 76.351562 8.695312 76.449219 8.800781 76.546875 8.90625 C 76.621094 8.980469 76.691406 9.058594 76.761719 9.136719 C 76.773438 9.152344 76.789062 9.164062 76.800781 9.179688 C 76.824219 9.207031 76.851562 9.234375 76.875 9.261719 C 76.933594 9.324219 76.992188 9.382812 77.0625 9.429688 C 77.070312 9.410156 77.070312 9.410156 77.082031 9.386719 C 77.113281 9.304688 77.152344 9.230469 77.195312 9.15625 C 77.5625 8.476562 77.800781 7.753906 77.976562 7 C 77.953125 7 77.933594 6.996094 77.910156 6.996094 C 77.707031 6.96875 77.5 6.9375 77.296875 6.902344 C 77.273438 6.898438 77.25 6.894531 77.222656 6.890625 C 77.050781 6.859375 77.050781 6.859375 76.96875 6.832031 C 76.960938 6.328125 76.960938 6.328125 77.015625 6.160156 C 77.949219 6.160156 78.886719 6.160156 79.847656 6.160156 C 79.847656 6.367188 79.847656 6.574219 79.847656 6.785156 C 79.53125 6.839844 79.214844 6.894531 78.886719 6.953125 C 78.859375 7.046875 78.832031 7.140625 78.804688 7.234375 C 78.539062 8.09375 78.164062 9.035156 77.601562 9.746094 C 77.5625 9.792969 77.5625 9.792969 77.566406 9.851562 C 77.601562 9.933594 77.648438 9.980469 77.714844 10.039062 C 77.792969 10.113281 77.867188 10.1875 77.9375 10.269531 C 78.027344 10.375 78.125 10.46875 78.222656 10.566406 C 78.308594 10.65625 78.390625 10.742188 78.472656 10.839844 C 78.539062 10.914062 78.601562 10.933594 78.695312 10.949219 C 78.71875 10.953125 78.746094 10.957031 78.769531 10.960938 C 78.796875 10.964844 78.824219 10.96875 78.851562 10.972656 C 78.875 10.980469 78.902344 10.984375 78.933594 10.988281 C 79.019531 11.003906 79.105469 11.019531 79.191406 11.03125 C 79.277344 11.046875 79.363281 11.0625 79.449219 11.078125 C 79.503906 11.085938 79.558594 11.097656 79.613281 11.105469 C 79.648438 11.113281 79.648438 11.113281 79.6875 11.117188 C 79.707031 11.121094 79.730469 11.125 79.75 11.128906 C 79.800781 11.140625 79.800781 11.140625 79.824219 11.164062 C 79.820312 11.421875 79.785156 11.679688 79.753906 11.933594 C 79.691406 11.949219 79.632812 11.964844 79.570312 11.980469 C 79.546875 11.984375 79.546875 11.984375 79.519531 11.992188 C 79.214844 12.066406 78.910156 12.085938 78.597656 12.085938 C 78.539062 12.085938 78.484375 12.085938 78.425781 12.085938 C 77.847656 12.089844 77.332031 11.917969 76.894531 11.523438 C 76.855469 11.484375 76.816406 11.445312 76.777344 11.40625 C 76.71875 11.347656 76.660156 11.296875 76.601562 11.242188 C 76.578125 11.21875 76.578125 11.21875 76.554688 11.195312 C 76.515625 11.160156 76.476562 11.125 76.441406 11.089844 C 76.429688 11.101562 76.417969 11.109375 76.410156 11.117188 C 76.140625 11.351562 75.859375 11.554688 75.542969 11.71875 C 75.511719 11.738281 75.476562 11.757812 75.445312 11.777344 C 75.3125 11.847656 75.179688 11.894531 75.039062 11.9375 C 75.011719 11.945312 75.011719 11.945312 74.984375 11.953125 C 74.632812 12.058594 74.269531 12.089844 73.90625 12.085938 C 73.84375 12.085938 73.785156 12.085938 73.722656 12.089844 C 72.941406 12.089844 72.222656 11.824219 71.652344 11.28125 C 71.203125 10.820312 71.023438 10.246094 71.03125 9.609375 C 71.042969 9.058594 71.230469 8.546875 71.59375 8.132812 C 71.609375 8.113281 71.625 8.09375 71.644531 8.070312 C 71.980469 7.683594 72.398438 7.421875 72.839844 7.171875 C 72.871094 7.152344 72.902344 7.132812 72.9375 7.113281 C 72.960938 7.101562 72.984375 7.085938 73.007812 7.074219 C 72.996094 7.0625 72.988281 7.050781 72.976562 7.042969 C 72.398438 6.425781 72.09375 5.613281 72.113281 4.773438 C 72.128906 4.371094 72.257812 3.988281 72.527344 3.679688 C 72.542969 3.660156 72.558594 3.644531 72.570312 3.625 C 72.917969 3.210938 73.496094 2.996094 74.015625 2.933594 C 74.050781 2.929688 74.050781 2.929688 74.082031 2.925781 C 74.804688 2.847656 75.621094 2.964844 76.167969 3.476562 Z M 73.671875 3.796875 C 73.433594 4.113281 73.414062 4.4375 73.457031 4.820312 C 73.550781 5.460938 73.921875 5.9375 74.328125 6.425781 C 74.398438 6.390625 74.449219 6.355469 74.503906 6.300781 C 74.527344 6.28125 74.527344 6.28125 74.550781 6.257812 C 74.566406 6.242188 74.582031 6.226562 74.597656 6.210938 C 74.613281 6.191406 74.628906 6.175781 74.644531 6.160156 C 74.773438 6.03125 74.890625 5.894531 75 5.75 C 75.019531 5.726562 75.035156 5.699219 75.054688 5.675781 C 75.335938 5.292969 75.5 4.859375 75.457031 4.378906 C 75.40625 4.078125 75.289062 3.820312 75.035156 3.636719 C 74.59375 3.363281 74.03125 3.410156 73.671875 3.796875 Z M 73.046875 7.828125 C 72.664062 8.226562 72.519531 8.789062 72.519531 9.332031 C 72.53125 9.800781 72.71875 10.257812 73.039062 10.601562 C 73.46875 10.996094 73.980469 11.140625 74.550781 11.125 C 74.960938 11.105469 75.339844 11.003906 75.703125 10.8125 C 75.71875 10.804688 75.738281 10.796875 75.753906 10.785156 C 75.84375 10.738281 75.90625 10.699219 75.960938 10.609375 C 75.949219 10.601562 75.941406 10.589844 75.933594 10.582031 C 75.460938 10.074219 75.460938 10.074219 75.25 9.8125 C 75.1875 9.738281 75.125 9.664062 75.0625 9.59375 C 74.972656 9.484375 74.882812 9.375 74.796875 9.265625 C 74.695312 9.132812 74.589844 9.003906 74.480469 8.878906 C 74.390625 8.773438 74.304688 8.667969 74.214844 8.5625 C 74.152344 8.484375 74.085938 8.40625 74.019531 8.328125 C 73.921875 8.214844 73.828125 8.101562 73.734375 7.984375 C 73.726562 7.96875 73.714844 7.957031 73.703125 7.941406 C 73.683594 7.914062 73.660156 7.886719 73.640625 7.859375 C 73.589844 7.792969 73.539062 7.730469 73.488281 7.667969 C 73.460938 7.632812 73.460938 7.632812 73.433594 7.601562 C 73.414062 7.578125 73.414062 7.578125 73.390625 7.554688 C 73.265625 7.554688 73.132812 7.742188 73.046875 7.828125 Z M 73.046875 7.828125 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 49.992188 5.535156 C 50.101562 5.609375 50.101562 5.609375 50.136719 5.679688 C 50.136719 5.746094 50.140625 5.8125 50.140625 5.882812 C 50.140625 5.914062 50.140625 5.914062 50.140625 5.941406 C 50.140625 5.984375 50.140625 6.027344 50.140625 6.070312 C 50.140625 6.136719 50.140625 6.203125 50.140625 6.269531 C 50.140625 6.308594 50.140625 6.351562 50.140625 6.390625 C 50.140625 6.410156 50.140625 6.429688 50.140625 6.453125 C 50.140625 6.589844 50.140625 6.589844 50.113281 6.617188 C 50.074219 6.617188 50.035156 6.621094 49.996094 6.621094 C 49.972656 6.621094 49.949219 6.621094 49.921875 6.621094 C 49.894531 6.621094 49.871094 6.617188 49.84375 6.617188 C 49.816406 6.617188 49.789062 6.617188 49.757812 6.617188 C 49.671875 6.617188 49.585938 6.617188 49.5 6.617188 C 49.441406 6.617188 49.378906 6.617188 49.320312 6.617188 C 49.175781 6.617188 49.03125 6.617188 48.886719 6.617188 C 48.898438 6.640625 48.90625 6.660156 48.917969 6.683594 C 48.929688 6.714844 48.945312 6.746094 48.957031 6.773438 C 48.964844 6.789062 48.96875 6.804688 48.976562 6.820312 C 49.203125 7.339844 49.195312 8 48.988281 8.523438 C 48.75 9.0625 48.355469 9.457031 47.804688 9.671875 C 47.066406 9.941406 46.210938 9.941406 45.457031 9.746094 C 45.277344 10.003906 45.214844 10.273438 45.238281 10.585938 C 45.269531 10.699219 45.316406 10.761719 45.402344 10.835938 C 45.617188 10.945312 45.851562 10.949219 46.089844 10.949219 C 46.113281 10.953125 46.132812 10.953125 46.15625 10.953125 C 46.203125 10.953125 46.25 10.953125 46.292969 10.953125 C 46.367188 10.953125 46.441406 10.953125 46.515625 10.953125 C 46.726562 10.953125 46.9375 10.957031 47.144531 10.957031 C 47.273438 10.957031 47.402344 10.957031 47.53125 10.960938 C 47.582031 10.960938 47.628906 10.960938 47.675781 10.960938 C 48.324219 10.960938 49.039062 11.019531 49.53125 11.492188 C 49.546875 11.511719 49.566406 11.53125 49.585938 11.550781 C 49.601562 11.566406 49.617188 11.582031 49.636719 11.597656 C 49.957031 11.929688 50.0625 12.394531 50.066406 12.84375 C 50.054688 13.351562 49.847656 13.800781 49.511719 14.171875 C 49.496094 14.191406 49.480469 14.207031 49.460938 14.226562 C 48.8125 14.921875 47.769531 15.179688 46.855469 15.210938 C 45.890625 15.234375 44.761719 15.230469 44.015625 14.523438 C 43.738281 14.222656 43.660156 13.886719 43.671875 13.488281 C 43.679688 13.363281 43.699219 13.253906 43.753906 13.136719 C 43.761719 13.117188 43.769531 13.09375 43.78125 13.074219 C 43.996094 12.644531 44.386719 12.410156 44.785156 12.175781 C 44.765625 12.167969 44.746094 12.160156 44.730469 12.152344 C 44.398438 11.996094 44.222656 11.808594 44.089844 11.476562 C 43.988281 11.136719 44.070312 10.757812 44.222656 10.453125 C 44.421875 10.109375 44.695312 9.824219 44.976562 9.550781 C 44.960938 9.542969 44.945312 9.53125 44.925781 9.523438 C 44.757812 9.417969 44.613281 9.304688 44.472656 9.167969 C 44.457031 9.152344 44.441406 9.136719 44.425781 9.121094 C 44.214844 8.902344 44.085938 8.597656 44.015625 8.300781 C 44.011719 8.28125 44.003906 8.257812 44 8.238281 C 43.882812 7.675781 43.964844 7.042969 44.277344 6.558594 C 44.621094 6.070312 45.09375 5.773438 45.671875 5.628906 C 45.6875 5.625 45.703125 5.621094 45.71875 5.617188 C 46.25 5.492188 46.917969 5.496094 47.449219 5.628906 C 47.464844 5.632812 47.480469 5.636719 47.496094 5.640625 C 47.6875 5.691406 47.867188 5.761719 48.046875 5.84375 C 48.0625 5.851562 48.078125 5.859375 48.09375 5.867188 C 48.164062 5.902344 48.226562 5.933594 48.289062 5.980469 C 48.390625 6.066406 48.390625 6.066406 48.515625 6.082031 C 48.582031 6.0625 48.644531 6.035156 48.707031 6.003906 C 48.730469 5.996094 48.753906 5.984375 48.78125 5.976562 C 48.855469 5.941406 48.929688 5.910156 49.003906 5.875 C 49.054688 5.851562 49.101562 5.832031 49.152344 5.808594 C 49.320312 5.738281 49.488281 5.664062 49.652344 5.585938 C 49.679688 5.574219 49.703125 5.566406 49.730469 5.554688 C 49.75 5.542969 49.769531 5.535156 49.789062 5.523438 C 49.867188 5.503906 49.917969 5.515625 49.992188 5.535156 Z M 45.835938 6.507812 C 45.472656 6.984375 45.421875 7.597656 45.492188 8.175781 C 45.550781 8.542969 45.6875 8.890625 45.980469 9.132812 C 46.207031 9.285156 46.46875 9.3125 46.734375 9.277344 C 47.015625 9.21875 47.210938 9.089844 47.375 8.855469 C 47.683594 8.375 47.742188 7.746094 47.640625 7.191406 C 47.5625 6.859375 47.402344 6.507812 47.117188 6.308594 C 46.703125 6.074219 46.152344 6.148438 45.835938 6.507812 Z M 45.238281 12.367188 C 44.957031 12.734375 44.867188 13.113281 44.902344 13.570312 C 44.957031 13.84375 45.09375 14.058594 45.316406 14.226562 C 45.613281 14.417969 46.015625 14.496094 46.367188 14.507812 C 46.394531 14.507812 46.394531 14.507812 46.417969 14.507812 C 47.132812 14.527344 47.90625 14.457031 48.453125 13.945312 C 48.652344 13.738281 48.710938 13.515625 48.703125 13.230469 C 48.683594 12.992188 48.570312 12.800781 48.394531 12.644531 C 48.113281 12.441406 47.726562 12.449219 47.398438 12.449219 C 47.355469 12.449219 47.3125 12.449219 47.269531 12.449219 C 47.15625 12.449219 47.046875 12.449219 46.933594 12.449219 C 46.753906 12.449219 46.574219 12.445312 46.394531 12.445312 C 46.332031 12.445312 46.269531 12.445312 46.210938 12.445312 C 45.882812 12.445312 45.5625 12.414062 45.238281 12.367188 Z M 45.238281 12.367188 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 53.039062 2.382812 C 53.0625 2.390625 53.0625 2.390625 53.085938 2.398438 C 53.140625 2.429688 53.171875 2.453125 53.207031 2.503906 C 53.230469 2.617188 53.21875 2.730469 53.214844 2.84375 C 53.210938 2.878906 53.210938 2.914062 53.210938 2.953125 C 53.207031 3.027344 53.203125 3.105469 53.199219 3.183594 C 53.191406 3.371094 53.183594 3.558594 53.179688 3.746094 C 53.175781 3.792969 53.175781 3.835938 53.175781 3.882812 C 53.15625 4.441406 53.15625 5 53.15625 5.5625 C 53.15625 5.640625 53.15625 5.71875 53.15625 5.792969 C 53.15625 6.085938 53.160156 6.375 53.160156 6.664062 C 53.179688 6.644531 53.195312 6.625 53.214844 6.605469 C 53.238281 6.578125 53.261719 6.550781 53.285156 6.523438 C 53.296875 6.511719 53.3125 6.5 53.324219 6.484375 C 53.78125 5.984375 54.445312 5.601562 55.128906 5.550781 C 55.640625 5.535156 56.128906 5.578125 56.527344 5.929688 C 56.566406 5.964844 56.601562 6 56.640625 6.039062 C 56.664062 6.0625 56.664062 6.0625 56.691406 6.089844 C 57.246094 6.660156 57.203125 7.570312 57.203125 8.304688 C 57.203125 8.414062 57.203125 8.523438 57.207031 8.632812 C 57.207031 8.839844 57.207031 9.042969 57.207031 9.25 C 57.207031 9.484375 57.210938 9.722656 57.210938 9.957031 C 57.210938 10.4375 57.214844 10.921875 57.214844 11.40625 C 57.246094 11.410156 57.246094 11.410156 57.28125 11.414062 C 57.308594 11.417969 57.335938 11.421875 57.363281 11.425781 C 57.40625 11.433594 57.40625 11.433594 57.445312 11.441406 C 57.558594 11.457031 57.671875 11.480469 57.785156 11.503906 C 57.808594 11.507812 57.828125 11.511719 57.851562 11.515625 C 57.878906 11.519531 57.878906 11.519531 57.910156 11.527344 C 57.929688 11.53125 57.949219 11.535156 57.964844 11.539062 C 58.007812 11.550781 58.007812 11.550781 58.03125 11.574219 C 58.035156 11.613281 58.035156 11.65625 58.035156 11.695312 C 58.035156 11.71875 58.035156 11.746094 58.035156 11.769531 C 58.035156 11.796875 58.035156 11.824219 58.035156 11.851562 C 58.035156 11.875 58.035156 11.902344 58.035156 11.929688 C 58.035156 11.964844 58.035156 11.964844 58.035156 12.003906 C 58.035156 12.027344 58.035156 12.050781 58.035156 12.074219 C 58.03125 12.125 58.03125 12.125 58.007812 12.148438 C 57.964844 12.152344 57.921875 12.152344 57.882812 12.152344 C 57.839844 12.152344 57.839844 12.152344 57.796875 12.152344 C 57.769531 12.152344 57.738281 12.152344 57.707031 12.152344 C 57.675781 12.152344 57.640625 12.152344 57.609375 12.152344 C 57.523438 12.152344 57.433594 12.152344 57.347656 12.152344 C 57.257812 12.152344 57.164062 12.152344 57.074219 12.152344 C 56.917969 12.152344 56.765625 12.152344 56.613281 12.152344 C 56.433594 12.152344 56.257812 12.152344 56.082031 12.152344 C 55.929688 12.152344 55.777344 12.152344 55.625 12.152344 C 55.53125 12.152344 55.441406 12.152344 55.351562 12.152344 C 55.265625 12.152344 55.179688 12.152344 55.09375 12.152344 C 55.046875 12.152344 55 12.152344 54.953125 12.152344 C 54.925781 12.152344 54.898438 12.152344 54.871094 12.152344 C 54.847656 12.152344 54.824219 12.152344 54.796875 12.152344 C 54.742188 12.148438 54.742188 12.148438 54.71875 12.125 C 54.71875 12.085938 54.71875 12.042969 54.71875 12.003906 C 54.71875 11.976562 54.71875 11.953125 54.71875 11.925781 C 54.71875 11.902344 54.71875 11.875 54.71875 11.847656 C 54.71875 11.820312 54.71875 11.796875 54.71875 11.769531 C 54.71875 11.703125 54.71875 11.636719 54.71875 11.574219 C 54.8125 11.53125 54.902344 11.507812 55.003906 11.488281 C 55.03125 11.480469 55.0625 11.476562 55.09375 11.46875 C 55.113281 11.464844 55.128906 11.460938 55.144531 11.460938 C 55.191406 11.449219 55.242188 11.441406 55.289062 11.429688 C 55.527344 11.378906 55.527344 11.378906 55.585938 11.378906 C 55.582031 10.90625 55.582031 10.433594 55.578125 9.960938 C 55.578125 9.742188 55.578125 9.523438 55.574219 9.304688 C 55.574219 9.109375 55.574219 8.917969 55.574219 8.726562 C 55.574219 8.625 55.570312 8.527344 55.570312 8.425781 C 55.570312 8.328125 55.570312 8.234375 55.570312 8.136719 C 55.570312 8.101562 55.570312 8.066406 55.570312 8.03125 C 55.570312 7.664062 55.554688 7.199219 55.289062 6.917969 C 55.054688 6.722656 54.742188 6.746094 54.457031 6.761719 C 54.101562 6.800781 53.738281 7.007812 53.464844 7.234375 C 53.425781 7.265625 53.425781 7.265625 53.371094 7.300781 C 53.273438 7.371094 53.214844 7.421875 53.1875 7.539062 C 53.179688 7.640625 53.179688 7.742188 53.183594 7.84375 C 53.183594 7.882812 53.183594 7.921875 53.183594 7.960938 C 53.183594 8.066406 53.183594 8.167969 53.1875 8.273438 C 53.1875 8.386719 53.1875 8.496094 53.1875 8.605469 C 53.1875 8.8125 53.191406 9.023438 53.191406 9.230469 C 53.195312 9.46875 53.195312 9.703125 53.195312 9.941406 C 53.199219 10.429688 53.203125 10.917969 53.207031 11.40625 C 53.238281 11.410156 53.238281 11.410156 53.265625 11.414062 C 53.351562 11.429688 53.4375 11.445312 53.523438 11.464844 C 53.554688 11.46875 53.585938 11.472656 53.613281 11.480469 C 53.644531 11.484375 53.671875 11.492188 53.703125 11.496094 C 53.730469 11.5 53.753906 11.507812 53.78125 11.511719 C 53.847656 11.523438 53.910156 11.535156 53.976562 11.550781 C 53.976562 11.746094 53.976562 11.945312 53.976562 12.148438 C 52.890625 12.148438 51.804688 12.148438 50.6875 12.148438 C 50.6875 11.953125 50.6875 11.753906 50.6875 11.550781 C 50.964844 11.492188 51.242188 11.4375 51.527344 11.378906 C 51.542969 11.160156 51.554688 10.945312 51.554688 10.722656 C 51.554688 10.691406 51.554688 10.660156 51.554688 10.628906 C 51.554688 10.546875 51.558594 10.464844 51.558594 10.378906 C 51.558594 10.289062 51.558594 10.199219 51.558594 10.109375 C 51.558594 9.953125 51.558594 9.796875 51.558594 9.640625 C 51.558594 9.414062 51.558594 9.1875 51.5625 8.960938 C 51.5625 8.59375 51.5625 8.230469 51.5625 7.863281 C 51.566406 7.507812 51.566406 7.152344 51.566406 6.792969 C 51.566406 6.773438 51.566406 6.75 51.566406 6.726562 C 51.566406 6.617188 51.566406 6.507812 51.566406 6.398438 C 51.570312 5.484375 51.574219 4.570312 51.574219 3.65625 C 51.554688 3.65625 51.535156 3.652344 51.515625 3.652344 C 51.476562 3.648438 51.476562 3.648438 51.4375 3.644531 C 51.414062 3.644531 51.386719 3.640625 51.359375 3.640625 C 51.277344 3.632812 51.195312 3.621094 51.113281 3.609375 C 51.082031 3.605469 51.054688 3.601562 51.023438 3.597656 C 50.996094 3.59375 50.964844 3.589844 50.933594 3.582031 C 50.902344 3.578125 50.871094 3.574219 50.839844 3.570312 C 50.765625 3.558594 50.691406 3.546875 50.617188 3.535156 C 50.617188 3.347656 50.617188 3.15625 50.617188 2.960938 C 50.910156 2.875 51.207031 2.796875 51.5 2.722656 C 51.523438 2.714844 51.542969 2.710938 51.5625 2.707031 C 51.671875 2.679688 51.777344 2.652344 51.886719 2.625 C 51.972656 2.601562 52.0625 2.578125 52.152344 2.554688 C 52.257812 2.527344 52.367188 2.5 52.472656 2.472656 C 52.515625 2.460938 52.554688 2.453125 52.597656 2.441406 C 52.652344 2.425781 52.710938 2.410156 52.765625 2.398438 C 52.78125 2.394531 52.800781 2.386719 52.816406 2.382812 C 52.898438 2.363281 52.960938 2.351562 53.039062 2.382812 Z M 53.039062 2.382812 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 99.691406 6.011719 C 100.109375 6.40625 100.234375 7.003906 100.273438 7.554688 C 100.277344 7.667969 100.277344 7.785156 100.277344 7.898438 C 100.277344 7.933594 100.277344 7.964844 100.277344 8 C 100.277344 8.074219 100.277344 8.144531 100.277344 8.21875 C 100.277344 8.332031 100.277344 8.445312 100.277344 8.558594 C 100.28125 8.886719 100.28125 9.210938 100.28125 9.535156 C 100.28125 9.714844 100.28125 9.894531 100.285156 10.074219 C 100.285156 10.171875 100.285156 10.265625 100.285156 10.359375 C 100.285156 10.449219 100.285156 10.539062 100.285156 10.628906 C 100.285156 10.675781 100.285156 10.726562 100.285156 10.773438 C 100.289062 10.964844 100.292969 11.167969 100.417969 11.320312 C 100.53125 11.378906 100.636719 11.398438 100.757812 11.367188 C 100.898438 11.308594 101.003906 11.21875 101.113281 11.117188 C 101.226562 11.199219 101.339844 11.289062 101.449219 11.378906 C 101.394531 11.527344 101.300781 11.640625 101.207031 11.765625 C 101.179688 11.804688 101.179688 11.804688 101.152344 11.84375 C 100.859375 12.152344 100.476562 12.265625 100.058594 12.277344 C 99.699219 12.269531 99.332031 12.164062 99.066406 11.910156 C 98.933594 11.757812 98.761719 11.519531 98.761719 11.308594 C 98.582031 11.449219 98.582031 11.449219 98.417969 11.605469 C 98.289062 11.738281 98.140625 11.847656 97.992188 11.957031 C 97.96875 11.972656 97.949219 11.992188 97.925781 12.007812 C 97.488281 12.3125 96.855469 12.339844 96.34375 12.25 C 95.917969 12.15625 95.527344 11.929688 95.28125 11.558594 C 95.035156 11.136719 94.964844 10.617188 95.082031 10.140625 C 95.289062 9.527344 95.746094 9.175781 96.300781 8.894531 C 96.941406 8.582031 97.644531 8.375 98.328125 8.179688 C 98.34375 8.175781 98.359375 8.171875 98.375 8.167969 C 98.472656 8.140625 98.566406 8.113281 98.664062 8.085938 C 98.695312 7.195312 98.695312 7.195312 98.328125 6.425781 C 98.121094 6.230469 97.828125 6.203125 97.558594 6.203125 C 97.53125 6.203125 97.53125 6.203125 97.503906 6.203125 C 97.339844 6.207031 97.171875 6.21875 97.007812 6.230469 C 97.003906 6.257812 97.003906 6.289062 97 6.316406 C 96.984375 6.46875 96.957031 6.617188 96.925781 6.765625 C 96.917969 6.816406 96.910156 6.863281 96.902344 6.910156 C 96.832031 7.273438 96.738281 7.585938 96.425781 7.808594 C 96.191406 7.933594 95.945312 7.933594 95.6875 7.867188 C 95.515625 7.808594 95.40625 7.707031 95.320312 7.546875 C 95.234375 7.347656 95.238281 7.183594 95.308594 6.980469 C 95.316406 6.957031 95.316406 6.957031 95.324219 6.929688 C 95.421875 6.644531 95.574219 6.441406 95.785156 6.230469 C 95.800781 6.214844 95.816406 6.195312 95.835938 6.179688 C 96.734375 5.308594 98.742188 5.21875 99.691406 6.011719 Z M 98.394531 8.742188 C 98.292969 8.777344 98.1875 8.8125 98.082031 8.847656 C 97.574219 9.007812 97.011719 9.230469 96.746094 9.722656 C 96.582031 10.042969 96.554688 10.355469 96.648438 10.703125 C 96.71875 10.914062 96.816406 11.042969 97.011719 11.152344 C 97.296875 11.292969 97.609375 11.304688 97.910156 11.199219 C 98.058594 11.132812 98.207031 11.050781 98.34375 10.960938 C 98.398438 10.921875 98.398438 10.921875 98.46875 10.890625 C 98.558594 10.839844 98.644531 10.789062 98.679688 10.683594 C 98.703125 10.542969 98.695312 10.402344 98.691406 10.257812 C 98.6875 10.214844 98.6875 10.167969 98.6875 10.121094 C 98.6875 10 98.683594 9.878906 98.683594 9.757812 C 98.679688 9.636719 98.679688 9.511719 98.675781 9.386719 C 98.675781 9.144531 98.667969 8.902344 98.664062 8.660156 C 98.578125 8.660156 98.476562 8.714844 98.394531 8.742188 Z M 98.394531 8.742188 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 38.035156 6.242188 C 38.207031 6.40625 38.332031 6.578125 38.449219 6.785156 C 38.460938 6.808594 38.460938 6.808594 38.472656 6.832031 C 38.835938 7.472656 38.875 8.257812 38.761719 8.972656 C 38.734375 9 38.734375 9 38.671875 9 C 38.625 9 38.625 9 38.578125 9 C 38.5625 9 38.546875 9 38.53125 9 C 38.472656 9 38.417969 9 38.363281 9 C 38.324219 9 38.285156 9 38.242188 9 C 38.136719 9 38.027344 9 37.917969 9 C 37.804688 9 37.695312 9 37.582031 9 C 37.367188 9 37.152344 9 36.9375 9 C 36.695312 9 36.453125 9 36.207031 9 C 35.707031 9 35.207031 9 34.703125 9 C 34.714844 9.089844 34.726562 9.183594 34.738281 9.273438 C 34.742188 9.300781 34.742188 9.328125 34.746094 9.351562 C 34.8125 9.898438 35.007812 10.441406 35.4375 10.808594 C 35.933594 11.1875 36.476562 11.269531 37.089844 11.203125 C 37.539062 11.128906 37.90625 10.847656 38.222656 10.535156 C 38.347656 10.417969 38.347656 10.417969 38.425781 10.417969 C 38.464844 10.445312 38.464844 10.445312 38.503906 10.488281 C 38.589844 10.585938 38.683594 10.671875 38.785156 10.753906 C 38.679688 11.046875 38.46875 11.28125 38.257812 11.5 C 38.242188 11.519531 38.222656 11.535156 38.207031 11.554688 C 37.792969 12 37.171875 12.246094 36.574219 12.320312 C 36.554688 12.320312 36.535156 12.324219 36.515625 12.328125 C 35.640625 12.425781 34.773438 12.210938 34.074219 11.671875 C 33.421875 11.125 33.078125 10.363281 32.976562 9.527344 C 32.972656 9.496094 32.972656 9.496094 32.96875 9.460938 C 32.871094 8.5 33.074219 7.515625 33.675781 6.746094 C 33.707031 6.710938 33.738281 6.675781 33.769531 6.640625 C 33.78125 6.621094 33.796875 6.605469 33.8125 6.585938 C 34.316406 5.988281 35.136719 5.640625 35.902344 5.566406 C 36.699219 5.511719 37.429688 5.699219 38.035156 6.242188 Z M 35.226562 6.652344 C 34.949219 7.007812 34.820312 7.386719 34.746094 7.824219 C 34.742188 7.851562 34.738281 7.875 34.734375 7.898438 C 34.730469 7.921875 34.726562 7.949219 34.722656 7.972656 C 34.71875 7.992188 34.714844 8.015625 34.710938 8.035156 C 34.703125 8.097656 34.703125 8.15625 34.703125 8.222656 C 34.703125 8.242188 34.703125 8.261719 34.703125 8.28125 C 34.703125 8.292969 34.703125 8.308594 34.703125 8.324219 C 34.972656 8.328125 35.242188 8.328125 35.507812 8.328125 C 35.632812 8.328125 35.757812 8.328125 35.882812 8.332031 C 36.003906 8.332031 36.125 8.332031 36.246094 8.332031 C 36.289062 8.332031 36.335938 8.332031 36.382812 8.332031 C 36.445312 8.332031 36.511719 8.332031 36.574219 8.332031 C 36.59375 8.332031 36.613281 8.332031 36.632812 8.332031 C 36.800781 8.332031 36.964844 8.304688 37.085938 8.183594 C 37.273438 7.9375 37.277344 7.609375 37.246094 7.3125 C 37.195312 6.96875 37.015625 6.636719 36.730469 6.425781 C 36.226562 6.113281 35.617188 6.195312 35.226562 6.652344 Z M 35.226562 6.652344 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 112.726562 6.085938 C 112.90625 6.242188 113.058594 6.414062 113.183594 6.617188 C 113.199219 6.636719 113.210938 6.65625 113.226562 6.679688 C 113.628906 7.320312 113.699219 8.167969 113.566406 8.902344 C 113.523438 8.945312 113.449219 8.929688 113.386719 8.929688 C 113.371094 8.929688 113.355469 8.929688 113.339844 8.929688 C 113.28125 8.929688 113.226562 8.929688 113.171875 8.929688 C 113.132812 8.929688 113.089844 8.933594 113.050781 8.933594 C 112.945312 8.933594 112.835938 8.933594 112.726562 8.933594 C 112.613281 8.933594 112.5 8.933594 112.386719 8.933594 C 112.175781 8.9375 111.960938 8.9375 111.746094 8.9375 C 111.503906 8.941406 111.257812 8.941406 111.015625 8.941406 C 110.515625 8.945312 110.011719 8.949219 109.511719 8.949219 C 109.519531 9.023438 109.527344 9.097656 109.535156 9.171875 C 109.535156 9.191406 109.539062 9.210938 109.539062 9.230469 C 109.554688 9.378906 109.578125 9.523438 109.613281 9.667969 C 109.621094 9.6875 109.625 9.710938 109.628906 9.730469 C 109.703125 10.011719 109.808594 10.261719 109.992188 10.488281 C 110.003906 10.507812 110.019531 10.527344 110.035156 10.542969 C 110.320312 10.898438 110.765625 11.117188 111.214844 11.164062 C 111.839844 11.203125 112.339844 11.078125 112.820312 10.671875 C 112.9375 10.570312 113.050781 10.457031 113.160156 10.347656 C 113.230469 10.378906 113.28125 10.414062 113.339844 10.46875 C 113.355469 10.480469 113.367188 10.496094 113.382812 10.507812 C 113.398438 10.523438 113.414062 10.539062 113.429688 10.554688 C 113.445312 10.566406 113.460938 10.582031 113.476562 10.597656 C 113.515625 10.632812 113.554688 10.671875 113.59375 10.707031 C 113.324219 11.316406 112.769531 11.816406 112.15625 12.066406 C 112.054688 12.105469 111.953125 12.136719 111.847656 12.171875 C 111.832031 12.175781 111.816406 12.179688 111.800781 12.183594 C 111.507812 12.265625 111.214844 12.28125 110.914062 12.28125 C 110.898438 12.28125 110.878906 12.28125 110.859375 12.28125 C 110.554688 12.277344 110.261719 12.257812 109.96875 12.175781 C 109.941406 12.167969 109.941406 12.167969 109.914062 12.160156 C 109.203125 11.953125 108.628906 11.503906 108.238281 10.875 C 108.230469 10.859375 108.222656 10.847656 108.210938 10.832031 C 107.699219 9.980469 107.648438 8.855469 107.878906 7.90625 C 108.074219 7.136719 108.570312 6.417969 109.253906 6 C 110.304688 5.378906 111.75 5.261719 112.726562 6.085938 Z M 110.105469 6.496094 C 109.710938 6.9375 109.507812 7.546875 109.511719 8.136719 C 109.511719 8.160156 109.511719 8.179688 109.511719 8.203125 C 109.511719 8.21875 109.511719 8.234375 109.511719 8.253906 C 109.78125 8.253906 110.050781 8.253906 110.316406 8.257812 C 110.441406 8.257812 110.566406 8.257812 110.691406 8.257812 C 110.8125 8.257812 110.933594 8.257812 111.054688 8.257812 C 111.097656 8.257812 111.144531 8.261719 111.191406 8.261719 C 111.253906 8.261719 111.320312 8.261719 111.382812 8.261719 C 111.402344 8.261719 111.421875 8.261719 111.441406 8.261719 C 111.59375 8.261719 111.746094 8.234375 111.871094 8.140625 C 112.082031 7.886719 112.078125 7.605469 112.054688 7.289062 C 112.011719 6.949219 111.867188 6.6875 111.625 6.449219 C 111.609375 6.433594 111.59375 6.417969 111.582031 6.40625 C 111.164062 6.015625 110.496094 6.121094 110.105469 6.496094 Z M 110.105469 6.496094 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 119.207031 6.039062 C 119.210938 6.308594 119.203125 6.578125 119.1875 6.847656 C 119.183594 6.910156 119.183594 6.972656 119.179688 7.035156 C 119.175781 7.078125 119.175781 7.117188 119.171875 7.160156 C 119.171875 7.175781 119.171875 7.195312 119.171875 7.214844 C 119.164062 7.308594 119.152344 7.390625 119.136719 7.484375 C 118.835938 7.484375 118.535156 7.484375 118.222656 7.484375 C 118.207031 7.40625 118.191406 7.328125 118.171875 7.246094 C 118.15625 7.171875 118.140625 7.097656 118.121094 7.023438 C 118.109375 6.96875 118.101562 6.917969 118.089844 6.867188 C 118.070312 6.792969 118.054688 6.714844 118.039062 6.640625 C 118.035156 6.617188 118.027344 6.59375 118.023438 6.570312 C 118.019531 6.550781 118.015625 6.527344 118.007812 6.503906 C 118.003906 6.484375 118 6.464844 117.996094 6.445312 C 117.984375 6.398438 117.984375 6.398438 117.960938 6.351562 C 117.902344 6.332031 117.847656 6.316406 117.789062 6.300781 C 117.765625 6.296875 117.765625 6.296875 117.738281 6.289062 C 117.339844 6.1875 116.835938 6.167969 116.464844 6.375 C 116.296875 6.480469 116.203125 6.609375 116.128906 6.789062 C 116.082031 7.042969 116.105469 7.261719 116.234375 7.484375 C 116.496094 7.828125 117.082031 7.953125 117.46875 8.070312 C 118.183594 8.289062 118.960938 8.597656 119.359375 9.277344 C 119.578125 9.714844 119.621094 10.257812 119.496094 10.734375 C 119.316406 11.277344 118.957031 11.703125 118.449219 11.964844 C 117.460938 12.445312 116.246094 12.394531 115.222656 12.054688 C 115.007812 11.972656 114.804688 11.867188 114.601562 11.765625 C 114.570312 11.234375 114.574219 10.707031 114.574219 10.175781 C 114.886719 10.175781 115.195312 10.175781 115.511719 10.175781 C 115.539062 10.304688 115.539062 10.304688 115.5625 10.433594 C 115.582031 10.515625 115.597656 10.597656 115.613281 10.679688 C 115.625 10.734375 115.636719 10.792969 115.648438 10.847656 C 115.664062 10.929688 115.679688 11.011719 115.695312 11.09375 C 115.703125 11.121094 115.707031 11.144531 115.710938 11.171875 C 115.71875 11.195312 115.722656 11.21875 115.726562 11.242188 C 115.730469 11.261719 115.734375 11.285156 115.738281 11.304688 C 115.75 11.355469 115.75 11.355469 115.777344 11.40625 C 116.324219 11.617188 117.03125 11.667969 117.578125 11.4375 C 117.800781 11.332031 117.949219 11.207031 118.039062 10.972656 C 118.089844 10.761719 118.082031 10.527344 117.992188 10.328125 C 117.910156 10.191406 117.820312 10.105469 117.6875 10.023438 C 117.664062 10.003906 117.636719 9.988281 117.609375 9.972656 C 117.265625 9.769531 116.875 9.65625 116.496094 9.527344 C 116.066406 9.386719 115.683594 9.222656 115.320312 8.949219 C 115.296875 8.933594 115.273438 8.917969 115.25 8.898438 C 115.226562 8.875 115.226562 8.875 115.199219 8.855469 C 115.199219 8.839844 115.199219 8.824219 115.199219 8.804688 C 115.1875 8.800781 115.171875 8.796875 115.160156 8.789062 C 114.933594 8.65625 114.792969 8.285156 114.726562 8.046875 C 114.605469 7.507812 114.6875 6.964844 114.984375 6.496094 C 115.347656 5.957031 115.902344 5.671875 116.523438 5.542969 C 117.460938 5.367188 118.386719 5.574219 119.207031 6.039062 Z M 119.207031 6.039062 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 67.945312 6.109375 C 67.96875 6.136719 67.96875 6.136719 67.96875 6.1875 C 67.96875 6.210938 67.96875 6.234375 67.964844 6.257812 C 67.964844 6.285156 67.964844 6.3125 67.964844 6.339844 C 67.960938 6.367188 67.960938 6.398438 67.960938 6.425781 C 67.960938 6.457031 67.957031 6.484375 67.957031 6.515625 C 67.941406 6.863281 67.917969 7.207031 67.894531 7.554688 C 67.59375 7.554688 67.292969 7.554688 66.984375 7.554688 C 66.921875 7.3125 66.863281 7.070312 66.808594 6.828125 C 66.804688 6.796875 66.796875 6.769531 66.789062 6.742188 C 66.785156 6.714844 66.777344 6.6875 66.773438 6.660156 C 66.765625 6.632812 66.761719 6.609375 66.753906 6.585938 C 66.742188 6.519531 66.742188 6.519531 66.742188 6.425781 C 66.707031 6.414062 66.667969 6.402344 66.628906 6.390625 C 66.605469 6.386719 66.585938 6.378906 66.5625 6.371094 C 66.355469 6.320312 66.15625 6.296875 65.941406 6.296875 C 65.917969 6.296875 65.894531 6.296875 65.871094 6.296875 C 65.5625 6.300781 65.296875 6.351562 65.0625 6.566406 C 64.894531 6.742188 64.859375 6.90625 64.863281 7.148438 C 64.867188 7.285156 64.890625 7.390625 64.96875 7.507812 C 64.976562 7.519531 64.984375 7.535156 64.996094 7.550781 C 65.261719 7.921875 65.914062 8.0625 66.328125 8.179688 C 67.054688 8.390625 67.703125 8.726562 68.089844 9.40625 C 68.214844 9.648438 68.289062 9.90625 68.304688 10.175781 C 68.304688 10.199219 68.304688 10.21875 68.308594 10.242188 C 68.324219 10.753906 68.15625 11.1875 67.824219 11.574219 C 67.808594 11.589844 67.796875 11.605469 67.78125 11.621094 C 67.28125 12.164062 66.515625 12.347656 65.808594 12.390625 C 65.144531 12.414062 64.535156 12.34375 63.910156 12.117188 C 63.886719 12.109375 63.886719 12.109375 63.859375 12.097656 C 63.675781 12.03125 63.507812 11.929688 63.335938 11.835938 C 63.335938 11.632812 63.335938 11.429688 63.335938 11.226562 C 63.335938 11.132812 63.335938 11.039062 63.335938 10.945312 C 63.332031 10.851562 63.332031 10.761719 63.332031 10.671875 C 63.332031 10.636719 63.332031 10.601562 63.332031 10.566406 C 63.332031 10.515625 63.332031 10.46875 63.332031 10.421875 C 63.332031 10.390625 63.332031 10.363281 63.332031 10.335938 C 63.335938 10.273438 63.335938 10.273438 63.359375 10.25 C 63.421875 10.246094 63.484375 10.246094 63.550781 10.246094 C 63.570312 10.246094 63.585938 10.246094 63.605469 10.246094 C 63.648438 10.246094 63.6875 10.246094 63.726562 10.246094 C 63.789062 10.246094 63.851562 10.246094 63.914062 10.246094 C 63.953125 10.246094 63.992188 10.246094 64.03125 10.246094 C 64.050781 10.246094 64.066406 10.246094 64.085938 10.246094 C 64.21875 10.246094 64.21875 10.246094 64.273438 10.273438 C 64.285156 10.316406 64.285156 10.316406 64.296875 10.375 C 64.300781 10.394531 64.304688 10.414062 64.308594 10.4375 C 64.316406 10.460938 64.320312 10.484375 64.324219 10.507812 C 64.328125 10.53125 64.332031 10.554688 64.339844 10.578125 C 64.347656 10.628906 64.359375 10.679688 64.367188 10.730469 C 64.382812 10.808594 64.398438 10.882812 64.414062 10.960938 C 64.421875 11.007812 64.433594 11.058594 64.441406 11.105469 C 64.445312 11.128906 64.453125 11.152344 64.457031 11.175781 C 64.476562 11.285156 64.492188 11.386719 64.488281 11.5 C 64.53125 11.511719 64.53125 11.511719 64.578125 11.519531 C 64.691406 11.546875 64.804688 11.574219 64.921875 11.605469 C 65.117188 11.648438 65.308594 11.648438 65.507812 11.652344 C 65.539062 11.652344 65.570312 11.652344 65.601562 11.652344 C 65.964844 11.652344 66.320312 11.59375 66.605469 11.359375 C 66.761719 11.199219 66.820312 11.003906 66.828125 10.789062 C 66.820312 10.566406 66.761719 10.382812 66.601562 10.226562 C 66.214844 9.933594 65.765625 9.789062 65.3125 9.640625 C 64.621094 9.414062 63.949219 9.125 63.59375 8.445312 C 63.378906 8 63.375 7.464844 63.53125 6.996094 C 63.761719 6.410156 64.183594 6.027344 64.753906 5.773438 C 65.792969 5.351562 66.988281 5.59375 67.945312 6.109375 Z M 67.945312 6.109375 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 105.941406 5.769531 C 105.960938 5.777344 105.976562 5.785156 105.996094 5.792969 C 106.1875 5.867188 106.351562 5.964844 106.535156 6.0625 C 106.511719 6.539062 106.488281 7.015625 106.464844 7.507812 C 106.164062 7.507812 105.863281 7.507812 105.550781 7.507812 C 105.445312 7.101562 105.445312 7.101562 105.410156 6.941406 C 105.40625 6.925781 105.402344 6.910156 105.398438 6.890625 C 105.386719 6.839844 105.375 6.789062 105.367188 6.738281 C 105.359375 6.703125 105.351562 6.667969 105.34375 6.632812 C 105.324219 6.546875 105.304688 6.460938 105.289062 6.375 C 105.234375 6.359375 105.183594 6.34375 105.128906 6.328125 C 105.097656 6.320312 105.070312 6.3125 105.039062 6.304688 C 104.859375 6.253906 104.6875 6.25 104.503906 6.25 C 104.464844 6.25 104.464844 6.25 104.421875 6.25 C 104.136719 6.246094 103.90625 6.3125 103.664062 6.464844 C 103.507812 6.621094 103.417969 6.816406 103.414062 7.042969 C 103.425781 7.25 103.492188 7.433594 103.632812 7.585938 C 103.976562 7.886719 104.484375 8.003906 104.910156 8.132812 C 105.628906 8.351562 106.285156 8.667969 106.667969 9.355469 C 106.878906 9.800781 106.9375 10.371094 106.785156 10.84375 C 106.554688 11.417969 106.144531 11.8125 105.585938 12.070312 C 104.601562 12.488281 103.335938 12.402344 102.359375 12.007812 C 102.203125 11.9375 102.046875 11.859375 101.902344 11.765625 C 101.894531 11.699219 101.894531 11.699219 101.894531 11.617188 C 101.894531 11.585938 101.894531 11.554688 101.890625 11.523438 C 101.890625 11.488281 101.890625 11.453125 101.890625 11.417969 C 101.890625 11.382812 101.890625 11.347656 101.890625 11.3125 C 101.890625 11.222656 101.886719 11.128906 101.886719 11.039062 C 101.886719 10.925781 101.886719 10.816406 101.882812 10.707031 C 101.882812 10.539062 101.882812 10.371094 101.878906 10.203125 C 102.1875 10.203125 102.496094 10.203125 102.816406 10.203125 C 102.871094 10.363281 102.871094 10.363281 102.886719 10.449219 C 102.890625 10.46875 102.894531 10.488281 102.898438 10.507812 C 102.902344 10.527344 102.90625 10.546875 102.910156 10.566406 C 102.914062 10.585938 102.917969 10.609375 102.921875 10.628906 C 102.933594 10.671875 102.941406 10.71875 102.949219 10.761719 C 102.964844 10.828125 102.976562 10.894531 102.988281 10.960938 C 103 11.003906 103.007812 11.046875 103.015625 11.089844 C 103.019531 11.109375 103.023438 11.132812 103.027344 11.152344 C 103.046875 11.246094 103.0625 11.332031 103.054688 11.429688 C 103.699219 11.59375 104.421875 11.726562 105.03125 11.386719 C 105.21875 11.265625 105.316406 11.125 105.375 10.914062 C 105.402344 10.691406 105.378906 10.496094 105.273438 10.292969 C 104.921875 9.867188 104.363281 9.730469 103.859375 9.5625 C 103.1875 9.339844 102.511719 9.058594 102.167969 8.398438 C 101.949219 7.929688 101.9375 7.414062 102.097656 6.929688 C 102.101562 6.90625 102.109375 6.886719 102.117188 6.863281 C 102.269531 6.417969 102.628906 6.066406 103.03125 5.847656 C 103.054688 5.832031 103.078125 5.820312 103.101562 5.808594 C 103.382812 5.65625 103.699219 5.574219 104.015625 5.535156 C 104.035156 5.53125 104.054688 5.527344 104.074219 5.527344 C 104.714844 5.449219 105.34375 5.535156 105.941406 5.769531 Z M 105.941406 5.769531 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 59.953125 3.921875 C 60.316406 3.921875 60.679688 3.921875 61.054688 3.921875 C 61.058594 4.292969 61.054688 4.667969 61.046875 5.039062 C 61.042969 5.066406 61.042969 5.066406 61.042969 5.09375 C 61.042969 5.144531 61.042969 5.195312 61.039062 5.246094 C 61.039062 5.277344 61.039062 5.304688 61.035156 5.335938 C 61.03125 5.472656 61.019531 5.613281 61.007812 5.75 C 61.53125 5.75 62.054688 5.75 62.59375 5.75 C 62.59375 6.035156 62.59375 6.320312 62.59375 6.617188 C 62.0625 6.617188 61.53125 6.617188 60.984375 6.617188 C 60.984375 7.128906 60.988281 7.644531 60.988281 8.160156 C 60.992188 8.398438 60.992188 8.636719 60.992188 8.875 C 60.992188 9.082031 60.992188 9.292969 60.996094 9.5 C 60.996094 9.609375 60.996094 9.71875 60.996094 9.832031 C 60.996094 9.933594 60.996094 10.039062 60.996094 10.140625 C 60.996094 10.179688 60.996094 10.21875 60.996094 10.253906 C 60.992188 10.765625 60.992188 10.765625 61.199219 11.210938 C 61.34375 11.347656 61.507812 11.40625 61.703125 11.40625 C 61.941406 11.371094 62.144531 11.289062 62.355469 11.175781 C 62.457031 11.125 62.457031 11.125 62.519531 11.117188 C 62.558594 11.140625 62.558594 11.140625 62.597656 11.183594 C 62.613281 11.195312 62.625 11.210938 62.640625 11.226562 C 62.652344 11.238281 62.667969 11.253906 62.683594 11.269531 C 62.695312 11.285156 62.710938 11.300781 62.726562 11.316406 C 62.761719 11.351562 62.796875 11.390625 62.832031 11.429688 C 62.785156 11.5625 62.707031 11.65625 62.617188 11.765625 C 62.605469 11.78125 62.59375 11.792969 62.578125 11.808594 C 62.375 12.03125 62.085938 12.183594 61.800781 12.269531 C 61.777344 12.277344 61.75 12.285156 61.726562 12.292969 C 61.511719 12.347656 61.296875 12.351562 61.078125 12.351562 C 61.046875 12.351562 61.019531 12.351562 60.988281 12.351562 C 60.523438 12.351562 60.085938 12.210938 59.730469 11.898438 C 59.542969 11.699219 59.425781 11.40625 59.375 11.140625 C 59.371094 11.117188 59.367188 11.097656 59.363281 11.074219 C 59.351562 10.988281 59.347656 10.902344 59.347656 10.8125 C 59.347656 10.792969 59.347656 10.777344 59.347656 10.757812 C 59.347656 10.695312 59.347656 10.636719 59.347656 10.578125 C 59.347656 10.535156 59.347656 10.492188 59.347656 10.449219 C 59.347656 10.332031 59.347656 10.214844 59.347656 10.097656 C 59.351562 9.972656 59.351562 9.851562 59.351562 9.730469 C 59.351562 9.496094 59.351562 9.265625 59.351562 9.035156 C 59.351562 8.769531 59.351562 8.507812 59.351562 8.242188 C 59.351562 7.703125 59.351562 7.160156 59.351562 6.617188 C 59.035156 6.617188 58.71875 6.617188 58.390625 6.617188 C 58.390625 6.371094 58.390625 6.125 58.390625 5.871094 C 58.914062 5.800781 58.914062 5.800781 59.449219 5.726562 C 59.480469 5.601562 59.515625 5.476562 59.550781 5.351562 C 59.574219 5.269531 59.59375 5.191406 59.617188 5.113281 C 59.652344 4.988281 59.6875 4.863281 59.722656 4.738281 C 59.75 4.640625 59.777344 4.539062 59.804688 4.4375 C 59.816406 4.398438 59.824219 4.359375 59.835938 4.324219 C 59.851562 4.269531 59.867188 4.214844 59.882812 4.160156 C 59.886719 4.144531 59.890625 4.128906 59.894531 4.113281 C 59.914062 4.046875 59.929688 3.984375 59.953125 3.921875 Z M 59.953125 3.921875 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 93.351562 5.554688 C 93.40625 5.59375 93.429688 5.617188 93.445312 5.679688 C 93.449219 5.75 93.445312 5.8125 93.441406 5.878906 C 93.441406 5.90625 93.441406 5.929688 93.441406 5.957031 C 93.4375 6.015625 93.4375 6.070312 93.433594 6.128906 C 93.429688 6.273438 93.425781 6.417969 93.421875 6.5625 C 93.417969 6.617188 93.417969 6.671875 93.417969 6.726562 C 93.402344 7.175781 93.40625 7.625 93.40625 8.074219 C 93.40625 8.195312 93.40625 8.3125 93.40625 8.429688 C 93.40625 8.644531 93.40625 8.859375 93.40625 9.074219 C 93.40625 9.320312 93.40625 9.570312 93.40625 9.816406 C 93.40625 10.320312 93.40625 10.828125 93.40625 11.332031 C 93.425781 11.335938 93.449219 11.339844 93.46875 11.34375 C 93.542969 11.355469 93.613281 11.371094 93.6875 11.382812 C 93.734375 11.390625 93.785156 11.398438 93.832031 11.40625 C 93.859375 11.414062 93.890625 11.417969 93.921875 11.425781 C 93.949219 11.429688 93.976562 11.433594 94.003906 11.4375 C 94.070312 11.449219 94.136719 11.464844 94.199219 11.476562 C 94.199219 11.675781 94.199219 11.875 94.199219 12.078125 C 93.105469 12.078125 92.015625 12.078125 90.886719 12.078125 C 90.886719 11.878906 90.886719 11.679688 90.886719 11.476562 C 90.988281 11.457031 91.085938 11.433594 91.1875 11.414062 C 91.222656 11.40625 91.253906 11.402344 91.289062 11.394531 C 91.339844 11.382812 91.386719 11.375 91.4375 11.363281 C 91.480469 11.355469 91.480469 11.355469 91.527344 11.34375 C 91.601562 11.332031 91.675781 11.332031 91.753906 11.332031 C 91.753906 10.894531 91.753906 10.457031 91.753906 10.023438 C 91.753906 9.820312 91.753906 9.617188 91.753906 9.414062 C 91.753906 9.234375 91.753906 9.058594 91.753906 8.882812 C 91.753906 8.789062 91.753906 8.695312 91.753906 8.601562 C 91.753906 8.066406 91.746094 7.535156 91.726562 7 C 91.683594 6.996094 91.683594 6.996094 91.636719 6.988281 C 91.539062 6.976562 91.4375 6.964844 91.339844 6.953125 C 91.296875 6.945312 91.25 6.941406 91.207031 6.933594 C 91.144531 6.925781 91.082031 6.917969 91.019531 6.910156 C 90.988281 6.90625 90.988281 6.90625 90.957031 6.902344 C 90.820312 6.882812 90.820312 6.882812 90.792969 6.855469 C 90.789062 6.816406 90.789062 6.777344 90.789062 6.738281 C 90.789062 6.714844 90.789062 6.691406 90.789062 6.667969 C 90.789062 6.640625 90.789062 6.617188 90.789062 6.589844 C 90.789062 6.566406 90.789062 6.539062 90.789062 6.515625 C 90.792969 6.453125 90.792969 6.390625 90.792969 6.328125 C 90.96875 6.253906 91.148438 6.1875 91.328125 6.125 C 91.355469 6.117188 91.382812 6.105469 91.414062 6.097656 C 91.503906 6.066406 91.59375 6.03125 91.683594 6 C 91.808594 5.957031 91.929688 5.914062 92.054688 5.871094 C 92.070312 5.867188 92.085938 5.859375 92.101562 5.855469 C 92.285156 5.792969 92.46875 5.726562 92.652344 5.660156 C 92.667969 5.652344 92.6875 5.644531 92.703125 5.640625 C 92.78125 5.609375 92.859375 5.582031 92.9375 5.554688 C 92.976562 5.539062 92.976562 5.539062 93.019531 5.523438 C 93.050781 5.511719 93.050781 5.511719 93.082031 5.5 C 93.1875 5.476562 93.261719 5.503906 93.351562 5.554688 Z M 93.351562 5.554688 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 42.214844 5.652344 C 42.214844 7.542969 42.214844 9.433594 42.214844 11.378906 C 42.535156 11.441406 42.535156 11.441406 42.863281 11.5 C 42.917969 11.515625 42.976562 11.53125 43.03125 11.550781 C 43.03125 11.738281 43.03125 11.929688 43.03125 12.125 C 41.929688 12.125 40.832031 12.125 39.695312 12.125 C 39.695312 11.9375 39.695312 11.746094 39.695312 11.550781 C 39.875 11.5 40.054688 11.460938 40.234375 11.425781 C 40.265625 11.417969 40.265625 11.417969 40.296875 11.410156 C 40.316406 11.40625 40.335938 11.402344 40.355469 11.398438 C 40.375 11.394531 40.394531 11.390625 40.410156 11.386719 C 40.46875 11.378906 40.523438 11.378906 40.585938 11.378906 C 40.582031 10.886719 40.578125 10.390625 40.574219 9.898438 C 40.574219 9.667969 40.574219 9.4375 40.570312 9.207031 C 40.570312 9.007812 40.570312 8.808594 40.570312 8.605469 C 40.566406 8.5 40.566406 8.394531 40.566406 8.289062 C 40.566406 8.191406 40.566406 8.089844 40.566406 7.988281 C 40.566406 7.953125 40.566406 7.917969 40.566406 7.878906 C 40.5625 7.683594 40.558594 7.488281 40.550781 7.292969 C 40.546875 7.273438 40.546875 7.253906 40.546875 7.234375 C 40.542969 7.140625 40.542969 7.140625 40.511719 7.050781 C 40.445312 7.035156 40.378906 7.027344 40.308594 7.019531 C 40.289062 7.015625 40.269531 7.011719 40.25 7.011719 C 40.183594 7.003906 40.121094 6.996094 40.054688 6.988281 C 40.011719 6.980469 39.96875 6.976562 39.921875 6.96875 C 39.816406 6.957031 39.707031 6.941406 39.601562 6.929688 C 39.601562 6.746094 39.601562 6.5625 39.601562 6.375 C 39.964844 6.242188 40.328125 6.109375 40.695312 5.980469 C 40.777344 5.953125 40.859375 5.921875 40.945312 5.894531 C 41 5.875 41.054688 5.855469 41.109375 5.835938 C 41.246094 5.789062 41.386719 5.738281 41.523438 5.6875 C 41.550781 5.675781 41.578125 5.667969 41.605469 5.65625 C 41.660156 5.636719 41.710938 5.617188 41.761719 5.597656 C 41.785156 5.589844 41.808594 5.578125 41.835938 5.570312 C 41.863281 5.558594 41.863281 5.558594 41.894531 5.546875 C 42.027344 5.515625 42.09375 5.585938 42.214844 5.652344 Z M 42.214844 5.652344 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 8.640625 9.261719 C 8.972656 9.519531 9.191406 9.859375 9.277344 10.273438 C 9.328125 10.675781 9.265625 11.089844 9.019531 11.421875 C 8.734375 11.769531 8.371094 12.007812 7.917969 12.058594 C 7.476562 12.09375 7.078125 11.957031 6.742188 11.667969 C 6.71875 11.648438 6.71875 11.648438 6.695312 11.628906 C 6.421875 11.378906 6.261719 10.992188 6.234375 10.628906 C 6.226562 10.179688 6.355469 9.789062 6.664062 9.457031 C 7.191406 8.921875 8.019531 8.84375 8.640625 9.261719 Z M 8.640625 9.261719 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 2.855469 4.089844 C 2.941406 4.15625 3.019531 4.230469 3.097656 4.308594 C 3.113281 4.324219 3.128906 4.339844 3.148438 4.359375 C 3.414062 4.640625 3.542969 5.027344 3.539062 5.410156 C 3.519531 5.851562 3.332031 6.21875 3.015625 6.527344 C 2.707031 6.792969 2.304688 6.921875 1.898438 6.898438 C 1.578125 6.871094 1.308594 6.769531 1.054688 6.570312 C 1.03125 6.546875 1.03125 6.546875 1.003906 6.527344 C 0.699219 6.277344 0.527344 5.898438 0.484375 5.511719 C 0.453125 5.121094 0.558594 4.730469 0.804688 4.425781 C 1.003906 4.191406 1.226562 4.03125 1.511719 3.921875 C 1.53125 3.914062 1.550781 3.90625 1.570312 3.898438 C 1.988281 3.757812 2.496094 3.84375 2.855469 4.089844 Z M 2.855469 4.089844 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 2.960938 11.683594 C 3.269531 11.949219 3.492188 12.316406 3.53125 12.726562 C 3.558594 13.152344 3.449219 13.550781 3.171875 13.878906 C 2.875 14.203125 2.519531 14.375 2.082031 14.417969 C 1.671875 14.433594 1.28125 14.28125 0.972656 14.011719 C 0.660156 13.714844 0.488281 13.324219 0.476562 12.890625 C 0.480469 12.53125 0.59375 12.214844 0.816406 11.933594 C 0.828125 11.917969 0.839844 11.902344 0.851562 11.882812 C 1.078125 11.597656 1.433594 11.421875 1.785156 11.363281 C 2.207031 11.316406 2.628906 11.417969 2.960938 11.683594 Z M 2.960938 11.683594 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 14.449219 4.167969 C 14.507812 4.222656 14.5625 4.273438 14.617188 4.332031 C 14.628906 4.34375 14.640625 4.355469 14.65625 4.367188 C 14.914062 4.632812 15.015625 5.023438 15.03125 5.378906 C 15.019531 5.734375 14.902344 6.046875 14.6875 6.328125 C 14.675781 6.34375 14.664062 6.359375 14.652344 6.378906 C 14.410156 6.679688 14.042969 6.851562 13.664062 6.898438 C 13.242188 6.925781 12.84375 6.816406 12.523438 6.535156 C 12.484375 6.5 12.445312 6.460938 12.40625 6.425781 C 12.394531 6.410156 12.378906 6.394531 12.363281 6.378906 C 12.085938 6.089844 11.988281 5.707031 11.992188 5.316406 C 12.003906 4.914062 12.167969 4.53125 12.457031 4.25 C 13.023438 3.75 13.847656 3.714844 14.449219 4.167969 Z M 14.449219 4.167969 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 42.046875 2.648438 C 42.253906 2.816406 42.375 3.03125 42.40625 3.296875 C 42.433594 3.558594 42.351562 3.808594 42.191406 4.019531 C 42.007812 4.214844 41.785156 4.351562 41.507812 4.363281 C 41.46875 4.363281 41.429688 4.363281 41.390625 4.363281 C 41.371094 4.363281 41.351562 4.363281 41.332031 4.363281 C 41.058594 4.355469 40.832031 4.273438 40.625 4.089844 C 40.476562 3.933594 40.359375 3.734375 40.34375 3.511719 C 40.34375 3.496094 40.339844 3.480469 40.339844 3.460938 C 40.328125 3.230469 40.390625 2.992188 40.542969 2.8125 C 40.554688 2.796875 40.570312 2.78125 40.585938 2.765625 C 40.597656 2.75 40.613281 2.734375 40.632812 2.714844 C 41.019531 2.339844 41.621094 2.332031 42.046875 2.648438 Z M 42.046875 2.648438 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 93.210938 2.566406 C 93.453125 2.757812 93.570312 2.96875 93.609375 3.273438 C 93.621094 3.53125 93.550781 3.773438 93.378906 3.972656 C 93.367188 3.988281 93.351562 4.003906 93.335938 4.019531 C 93.316406 4.039062 93.316406 4.039062 93.296875 4.058594 C 93.066406 4.28125 92.78125 4.316406 92.476562 4.3125 C 92.355469 4.308594 92.25 4.285156 92.136719 4.234375 C 92.117188 4.226562 92.101562 4.21875 92.082031 4.210938 C 91.871094 4.105469 91.703125 3.9375 91.605469 3.722656 C 91.515625 3.449219 91.515625 3.171875 91.632812 2.90625 C 91.773438 2.652344 92 2.484375 92.277344 2.402344 C 92.605469 2.324219 92.933594 2.375 93.210938 2.566406 Z M 93.210938 2.566406 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 8.320312 5.960938 C 8.539062 6.117188 8.664062 6.320312 8.726562 6.582031 C 8.769531 6.839844 8.710938 7.089844 8.574219 7.3125 C 8.410156 7.535156 8.207031 7.65625 7.945312 7.722656 C 7.621094 7.753906 7.355469 7.6875 7.105469 7.484375 C 6.921875 7.3125 6.8125 7.078125 6.792969 6.832031 C 6.789062 6.535156 6.871094 6.28125 7.078125 6.0625 C 7.4375 5.738281 7.914062 5.710938 8.320312 5.960938 Z M 8.320312 5.960938 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.431373%,73.725492%,19.607843%);fill-opacity:1;" d="M 14.09375 0.820312 C 14.289062 0.96875 14.421875 1.179688 14.472656 1.417969 C 14.5 1.714844 14.464844 1.980469 14.273438 2.214844 C 14.082031 2.421875 13.890625 2.558594 13.605469 2.582031 C 13.320312 2.585938 13.078125 2.535156 12.863281 2.332031 C 12.660156 2.128906 12.550781 1.910156 12.542969 1.621094 C 12.546875 1.332031 12.644531 1.117188 12.839844 0.910156 C 13.199219 0.574219 13.6875 0.5625 14.09375 0.820312 Z M 14.09375 0.820312 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 2.574219 0.808594 C 2.769531 0.972656 2.925781 1.164062 2.976562 1.417969 C 2.996094 1.71875 2.972656 1.976562 2.777344 2.214844 C 2.585938 2.421875 2.394531 2.558594 2.109375 2.582031 C 1.824219 2.585938 1.582031 2.53125 1.367188 2.332031 C 1.226562 2.195312 1.136719 2.066406 1.078125 1.875 C 1.074219 1.863281 1.070312 1.847656 1.066406 1.832031 C 1.015625 1.570312 1.054688 1.3125 1.195312 1.089844 C 1.515625 0.644531 2.101562 0.484375 2.574219 0.808594 Z M 2.574219 0.808594 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 2.550781 8.316406 C 2.582031 8.34375 2.609375 8.371094 2.640625 8.398438 C 2.65625 8.414062 2.671875 8.429688 2.691406 8.445312 C 2.878906 8.640625 2.960938 8.847656 2.964844 9.121094 C 2.960938 9.398438 2.882812 9.613281 2.6875 9.816406 C 2.5 9.996094 2.257812 10.109375 1.992188 10.105469 C 1.695312 10.085938 1.449219 9.972656 1.246094 9.753906 C 1.074219 9.535156 1.003906 9.277344 1.03125 9 C 1.089844 8.710938 1.214844 8.484375 1.453125 8.3125 C 1.789062 8.105469 2.222656 8.085938 2.550781 8.316406 Z M 2.550781 8.316406 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 14.058594 8.34375 C 14.269531 8.496094 14.425781 8.714844 14.472656 8.972656 C 14.496094 9.300781 14.441406 9.542969 14.238281 9.804688 C 14.148438 9.90625 14.042969 9.972656 13.921875 10.03125 C 13.894531 10.046875 13.894531 10.046875 13.867188 10.058594 C 13.660156 10.144531 13.386719 10.136719 13.175781 10.066406 C 12.929688 9.960938 12.714844 9.769531 12.613281 9.519531 C 12.601562 9.484375 12.585938 9.445312 12.574219 9.40625 C 12.570312 9.390625 12.566406 9.378906 12.5625 9.363281 C 12.511719 9.109375 12.550781 8.855469 12.679688 8.632812 C 12.824219 8.421875 13.003906 8.277344 13.246094 8.203125 C 13.261719 8.199219 13.277344 8.195312 13.292969 8.191406 C 13.570312 8.136719 13.820312 8.195312 14.058594 8.34375 Z M 14.058594 8.34375 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 8.375 13.523438 C 8.605469 13.730469 8.71875 13.984375 8.742188 14.289062 C 8.734375 14.554688 8.621094 14.789062 8.445312 14.984375 C 8.25 15.164062 7.996094 15.25 7.734375 15.253906 C 7.46875 15.242188 7.25 15.136719 7.0625 14.953125 C 6.863281 14.730469 6.789062 14.488281 6.792969 14.195312 C 6.832031 13.894531 6.964844 13.664062 7.199219 13.472656 C 7.582031 13.230469 8.015625 13.25 8.375 13.523438 Z M 8.375 13.523438 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 14.027344 12.066406 C 14.25 12.234375 14.421875 12.449219 14.472656 12.726562 C 14.492188 13.019531 14.464844 13.269531 14.273438 13.5 C 14.089844 13.699219 13.886719 13.84375 13.609375 13.863281 C 13.3125 13.867188 13.058594 13.800781 12.832031 13.589844 C 12.730469 13.480469 12.65625 13.371094 12.601562 13.234375 C 12.589844 13.207031 12.582031 13.183594 12.570312 13.15625 C 12.519531 12.886719 12.539062 12.625 12.679688 12.386719 C 12.984375 11.945312 13.558594 11.765625 14.027344 12.066406 Z M 14.027344 12.066406 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 8.269531 2.203125 C 8.492188 2.371094 8.652344 2.574219 8.703125 2.855469 C 8.738281 3.113281 8.695312 3.371094 8.535156 3.582031 C 8.355469 3.796875 8.136719 3.949219 7.851562 3.976562 C 7.539062 3.988281 7.289062 3.894531 7.054688 3.679688 C 6.851562 3.449219 6.796875 3.222656 6.808594 2.914062 C 6.824219 2.671875 6.929688 2.480469 7.105469 2.308594 C 7.445312 2.039062 7.886719 1.964844 8.269531 2.203125 Z M 8.269531 2.203125 "/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/public/tracing/weave-icon.svg b/app/components/base/icons/assets/public/tracing/weave-icon.svg
deleted file mode 100644
index 62e6067..0000000
--- a/app/components/base/icons/assets/public/tracing/weave-icon.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="120px" height="16px" viewBox="0 0 120 16" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 20.847656 3.292969 C 20.875 3.292969 20.902344 3.292969 20.933594 3.292969 C 20.949219 3.292969 20.964844 3.292969 20.980469 3.292969 C 21.035156 3.292969 21.089844 3.292969 21.140625 3.292969 C 21.179688 3.292969 21.21875 3.292969 21.253906 3.292969 C 21.359375 3.292969 21.464844 3.292969 21.566406 3.292969 C 21.675781 3.292969 21.78125 3.292969 21.890625 3.292969 C 22.097656 3.292969 22.300781 3.292969 22.507812 3.292969 C 22.738281 3.292969 22.972656 3.292969 23.207031 3.296875 C 23.6875 3.296875 24.167969 3.296875 24.648438 3.296875 C 24.648438 3.519531 24.648438 3.742188 24.648438 3.96875 C 24.113281 4.042969 24.113281 4.042969 23.566406 4.113281 C 23.667969 4.496094 23.769531 4.882812 23.867188 5.265625 C 23.878906 5.308594 23.878906 5.308594 23.890625 5.351562 C 24.128906 6.269531 24.371094 7.183594 24.609375 8.097656 C 24.675781 8.339844 24.738281 8.582031 24.800781 8.824219 C 24.816406 8.878906 24.832031 8.933594 24.84375 8.992188 C 24.867188 9.078125 24.890625 9.167969 24.914062 9.257812 C 24.921875 9.289062 24.933594 9.320312 24.941406 9.355469 C 24.953125 9.398438 24.964844 9.441406 24.976562 9.484375 C 24.984375 9.523438 24.984375 9.523438 24.996094 9.558594 C 25.007812 9.625 25.007812 9.625 25.007812 9.71875 C 25.023438 9.71875 25.039062 9.71875 25.054688 9.71875 C 25.058594 9.707031 25.058594 9.695312 25.0625 9.679688 C 25.097656 9.492188 25.152344 9.3125 25.210938 9.128906 C 25.222656 9.097656 25.234375 9.0625 25.246094 9.027344 C 25.269531 8.953125 25.292969 8.882812 25.316406 8.808594 C 25.355469 8.691406 25.390625 8.574219 25.429688 8.457031 C 25.464844 8.339844 25.503906 8.21875 25.542969 8.097656 C 25.660156 7.738281 25.773438 7.375 25.890625 7.011719 C 25.902344 6.96875 25.917969 6.921875 25.933594 6.875 C 26.226562 5.945312 26.519531 5.019531 26.808594 4.089844 C 26.785156 4.089844 26.765625 4.089844 26.742188 4.085938 C 26.507812 4.074219 26.273438 4.046875 26.042969 4.015625 C 26.007812 4.011719 25.972656 4.007812 25.933594 4.003906 C 25.851562 3.992188 25.765625 3.980469 25.679688 3.96875 C 25.679688 3.746094 25.679688 3.523438 25.679688 3.296875 C 26.175781 3.296875 26.667969 3.296875 27.160156 3.296875 C 27.390625 3.292969 27.621094 3.292969 27.851562 3.292969 C 28.050781 3.292969 28.25 3.292969 28.449219 3.292969 C 28.554688 3.292969 28.660156 3.292969 28.765625 3.292969 C 28.867188 3.292969 28.964844 3.292969 29.066406 3.292969 C 29.101562 3.292969 29.140625 3.292969 29.175781 3.292969 C 29.226562 3.292969 29.273438 3.292969 29.324219 3.292969 C 29.367188 3.292969 29.367188 3.292969 29.410156 3.292969 C 29.472656 3.296875 29.472656 3.296875 29.496094 3.320312 C 29.5 3.367188 29.5 3.417969 29.5 3.464844 C 29.5 3.492188 29.5 3.515625 29.5 3.542969 C 29.496094 3.59375 29.496094 3.59375 29.496094 3.648438 C 29.496094 3.753906 29.496094 3.859375 29.496094 3.96875 C 29.09375 4.015625 28.6875 4.066406 28.273438 4.113281 C 28.679688 5.460938 28.679688 5.460938 29.089844 6.808594 C 29.105469 6.859375 29.121094 6.910156 29.136719 6.960938 C 29.234375 7.292969 29.335938 7.625 29.4375 7.960938 C 29.484375 8.113281 29.53125 8.265625 29.578125 8.417969 C 29.605469 8.507812 29.632812 8.597656 29.660156 8.691406 C 29.878906 9.40625 29.878906 9.40625 29.976562 9.746094 C 30.027344 9.664062 30.046875 9.601562 30.070312 9.507812 C 30.078125 9.484375 30.078125 9.484375 30.085938 9.457031 C 30.101562 9.402344 30.117188 9.34375 30.132812 9.289062 C 30.144531 9.25 30.152344 9.207031 30.164062 9.167969 C 30.1875 9.082031 30.214844 8.992188 30.238281 8.90625 C 30.292969 8.691406 30.351562 8.480469 30.410156 8.269531 C 30.433594 8.191406 30.453125 8.117188 30.472656 8.042969 C 30.621094 7.5 30.769531 6.960938 30.921875 6.421875 C 30.949219 6.324219 30.976562 6.226562 31 6.128906 C 31.066406 5.902344 31.128906 5.675781 31.191406 5.449219 C 31.230469 5.308594 31.269531 5.164062 31.308594 5.023438 C 31.335938 4.925781 31.363281 4.828125 31.390625 4.734375 C 31.402344 4.6875 31.414062 4.640625 31.429688 4.59375 C 31.445312 4.53125 31.464844 4.46875 31.480469 4.40625 C 31.488281 4.386719 31.492188 4.367188 31.496094 4.347656 C 31.515625 4.277344 31.535156 4.207031 31.558594 4.136719 C 31.210938 4.074219 30.855469 4.023438 30.503906 3.96875 C 30.503906 3.746094 30.503906 3.523438 30.503906 3.296875 C 30.878906 3.296875 31.253906 3.296875 31.628906 3.296875 C 31.804688 3.292969 31.976562 3.292969 32.152344 3.292969 C 32.304688 3.292969 32.457031 3.292969 32.605469 3.292969 C 32.6875 3.292969 32.769531 3.292969 32.847656 3.292969 C 32.9375 3.292969 33.027344 3.292969 33.117188 3.292969 C 33.144531 3.292969 33.171875 3.292969 33.199219 3.292969 C 33.222656 3.292969 33.246094 3.292969 33.273438 3.292969 C 33.304688 3.292969 33.304688 3.292969 33.335938 3.292969 C 33.382812 3.296875 33.382812 3.296875 33.40625 3.320312 C 33.410156 3.367188 33.410156 3.414062 33.410156 3.460938 C 33.410156 3.488281 33.410156 3.515625 33.410156 3.542969 C 33.410156 3.574219 33.410156 3.605469 33.410156 3.632812 C 33.410156 3.664062 33.410156 3.695312 33.410156 3.726562 C 33.410156 3.796875 33.410156 3.871094 33.40625 3.945312 C 33.292969 3.964844 33.175781 3.984375 33.0625 4.007812 C 33.023438 4.011719 32.984375 4.019531 32.945312 4.027344 C 32.738281 4.0625 32.535156 4.097656 32.328125 4.113281 C 32.320312 4.144531 32.320312 4.144531 32.3125 4.179688 C 32.238281 4.480469 32.15625 4.78125 32.070312 5.082031 C 32.058594 5.128906 32.042969 5.171875 32.03125 5.21875 C 31.875 5.78125 31.714844 6.347656 31.550781 6.910156 C 31.375 7.535156 31.195312 8.160156 31.019531 8.785156 C 30.992188 8.871094 30.96875 8.957031 30.945312 9.042969 C 30.835938 9.433594 30.722656 9.820312 30.613281 10.210938 C 30.566406 10.378906 30.519531 10.542969 30.472656 10.707031 C 30.445312 10.804688 30.417969 10.902344 30.390625 11 C 30.277344 11.390625 30.167969 11.785156 30.046875 12.175781 C 29.730469 12.175781 29.414062 12.175781 29.089844 12.175781 C 29.03125 12.003906 29.03125 12.003906 28.976562 11.832031 C 28.925781 11.675781 28.878906 11.523438 28.828125 11.367188 C 28.820312 11.347656 28.8125 11.328125 28.808594 11.304688 C 28.632812 10.769531 28.460938 10.230469 28.285156 9.695312 C 28.144531 9.273438 28.007812 8.847656 27.875 8.425781 C 27.695312 7.867188 27.515625 7.308594 27.332031 6.753906 C 27.304688 6.679688 27.28125 6.605469 27.257812 6.53125 C 27.238281 6.476562 27.222656 6.425781 27.207031 6.375 C 27.046875 5.894531 27.046875 5.894531 27.046875 5.796875 C 27.03125 5.796875 27.015625 5.796875 27 5.796875 C 26.996094 5.8125 26.996094 5.828125 26.992188 5.84375 C 26.964844 5.988281 26.925781 6.132812 26.882812 6.273438 C 26.875 6.296875 26.867188 6.316406 26.859375 6.339844 C 26.84375 6.390625 26.828125 6.4375 26.8125 6.488281 C 26.769531 6.625 26.726562 6.761719 26.683594 6.898438 C 26.675781 6.929688 26.664062 6.957031 26.65625 6.988281 C 26.546875 7.328125 26.445312 7.667969 26.339844 8.007812 C 26.316406 8.078125 26.296875 8.144531 26.273438 8.214844 C 26.230469 8.355469 26.1875 8.496094 26.144531 8.636719 C 26.074219 8.863281 26.007812 9.089844 25.9375 9.3125 C 25.933594 9.328125 25.925781 9.347656 25.921875 9.363281 C 25.894531 9.449219 25.871094 9.535156 25.84375 9.617188 C 25.796875 9.769531 25.75 9.921875 25.703125 10.074219 C 25.675781 10.15625 25.652344 10.242188 25.625 10.328125 C 25.613281 10.363281 25.605469 10.394531 25.59375 10.429688 C 25.414062 11.011719 25.234375 11.59375 25.054688 12.175781 C 24.738281 12.175781 24.421875 12.175781 24.097656 12.175781 C 23.816406 11.230469 23.535156 10.285156 23.261719 9.339844 C 23.253906 9.320312 23.25 9.304688 23.246094 9.285156 C 23.195312 9.117188 23.144531 8.949219 23.097656 8.78125 C 22.960938 8.3125 22.824219 7.84375 22.6875 7.375 C 22.664062 7.304688 22.644531 7.234375 22.625 7.164062 C 22.414062 6.449219 22.207031 5.738281 22 5.027344 C 21.976562 4.953125 21.953125 4.878906 21.933594 4.804688 C 21.898438 4.683594 21.859375 4.5625 21.824219 4.441406 C 21.820312 4.421875 21.8125 4.402344 21.808594 4.382812 C 21.796875 4.347656 21.785156 4.3125 21.777344 4.28125 C 21.753906 4.203125 21.742188 4.148438 21.742188 4.066406 C 21.726562 4.066406 21.710938 4.0625 21.691406 4.0625 C 21.382812 4.042969 21.070312 4.003906 20.761719 3.96875 C 20.757812 3.863281 20.757812 3.753906 20.757812 3.648438 C 20.757812 3.617188 20.757812 3.585938 20.757812 3.554688 C 20.757812 3.523438 20.757812 3.496094 20.757812 3.464844 C 20.757812 3.4375 20.757812 3.410156 20.757812 3.382812 C 20.761719 3.296875 20.761719 3.296875 20.847656 3.292969 Z M 20.847656 3.292969 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 82.488281 3.25 C 83.046875 3.246094 83.605469 3.246094 84.167969 3.246094 C 84.425781 3.246094 84.6875 3.246094 84.945312 3.246094 C 85.171875 3.242188 85.398438 3.242188 85.625 3.242188 C 85.746094 3.242188 85.867188 3.242188 85.984375 3.242188 C 88.15625 3.238281 88.15625 3.238281 88.894531 3.898438 C 88.914062 3.914062 88.9375 3.929688 88.957031 3.945312 C 89.191406 4.144531 89.363281 4.402344 89.472656 4.691406 C 89.480469 4.714844 89.492188 4.742188 89.5 4.765625 C 89.65625 5.25 89.601562 5.785156 89.382812 6.234375 C 89.117188 6.753906 88.695312 7.078125 88.152344 7.265625 C 87.984375 7.320312 87.816406 7.367188 87.648438 7.410156 C 87.664062 7.414062 87.679688 7.417969 87.699219 7.421875 C 88.523438 7.605469 89.300781 7.851562 89.78125 8.597656 C 90.0625 9.0625 90.125 9.636719 90.003906 10.164062 C 89.808594 10.804688 89.363281 11.304688 88.78125 11.621094 C 88.324219 11.863281 87.820312 11.988281 87.3125 12.054688 C 87.28125 12.058594 87.253906 12.0625 87.222656 12.066406 C 86.777344 12.121094 86.332031 12.109375 85.882812 12.105469 C 85.765625 12.105469 85.644531 12.105469 85.523438 12.105469 C 85.300781 12.105469 85.074219 12.105469 84.847656 12.105469 C 84.589844 12.105469 84.332031 12.105469 84.074219 12.105469 C 83.546875 12.105469 83.015625 12.101562 82.488281 12.101562 C 82.488281 11.878906 82.488281 11.65625 82.488281 11.429688 C 82.859375 11.390625 83.234375 11.347656 83.617188 11.308594 C 83.617188 8.910156 83.617188 6.511719 83.617188 4.042969 C 83.488281 4.035156 83.363281 4.027344 83.230469 4.019531 C 83.117188 4.007812 83.003906 3.996094 82.890625 3.980469 C 82.863281 3.980469 82.832031 3.976562 82.804688 3.972656 C 82.695312 3.960938 82.59375 3.949219 82.488281 3.921875 C 82.488281 3.699219 82.488281 3.476562 82.488281 3.25 Z M 85.390625 3.96875 C 85.390625 4.242188 85.386719 4.515625 85.382812 4.785156 C 85.382812 4.914062 85.378906 5.039062 85.378906 5.164062 C 85.371094 5.824219 85.367188 6.484375 85.367188 7.144531 C 86.488281 7.183594 86.488281 7.183594 87.457031 6.691406 C 87.796875 6.320312 87.859375 5.832031 87.847656 5.351562 C 87.832031 4.992188 87.71875 4.644531 87.460938 4.378906 C 87 3.96875 86.363281 3.964844 85.78125 3.96875 C 85.742188 3.96875 85.703125 3.96875 85.667969 3.96875 C 85.574219 3.96875 85.484375 3.96875 85.390625 3.96875 Z M 85.390625 7.84375 C 85.390625 9.003906 85.390625 10.160156 85.390625 11.355469 C 86.28125 11.386719 86.28125 11.386719 87.152344 11.21875 C 87.171875 11.214844 87.1875 11.207031 87.207031 11.199219 C 87.578125 11.066406 87.886719 10.824219 88.066406 10.46875 C 88.28125 9.988281 88.289062 9.417969 88.125 8.921875 C 87.960938 8.492188 87.664062 8.234375 87.257812 8.046875 C 86.664062 7.804688 86.023438 7.84375 85.390625 7.84375 Z M 85.390625 7.84375 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 76.167969 3.476562 C 76.367188 3.671875 76.507812 3.917969 76.585938 4.1875 C 76.589844 4.203125 76.59375 4.222656 76.601562 4.242188 C 76.707031 4.675781 76.621094 5.144531 76.414062 5.53125 C 76.34375 5.644531 76.265625 5.746094 76.175781 5.847656 C 76.15625 5.867188 76.136719 5.886719 76.117188 5.910156 C 75.71875 6.332031 75.199219 6.617188 74.6875 6.882812 C 74.707031 6.902344 74.726562 6.921875 74.746094 6.941406 C 74.972656 7.191406 74.972656 7.191406 75.066406 7.296875 C 75.140625 7.382812 75.21875 7.464844 75.300781 7.542969 C 75.351562 7.59375 75.394531 7.640625 75.4375 7.695312 C 75.527344 7.796875 75.621094 7.894531 75.714844 7.992188 C 76.089844 8.394531 76.089844 8.394531 76.253906 8.585938 C 76.351562 8.695312 76.449219 8.800781 76.546875 8.90625 C 76.621094 8.980469 76.691406 9.058594 76.761719 9.136719 C 76.773438 9.152344 76.789062 9.164062 76.800781 9.179688 C 76.824219 9.207031 76.851562 9.234375 76.875 9.261719 C 76.933594 9.324219 76.992188 9.382812 77.0625 9.429688 C 77.070312 9.410156 77.070312 9.410156 77.082031 9.386719 C 77.113281 9.304688 77.152344 9.230469 77.195312 9.15625 C 77.5625 8.476562 77.800781 7.753906 77.976562 7 C 77.953125 7 77.933594 6.996094 77.910156 6.996094 C 77.707031 6.96875 77.5 6.9375 77.296875 6.902344 C 77.273438 6.898438 77.25 6.894531 77.222656 6.890625 C 77.050781 6.859375 77.050781 6.859375 76.96875 6.832031 C 76.960938 6.328125 76.960938 6.328125 77.015625 6.160156 C 77.949219 6.160156 78.886719 6.160156 79.847656 6.160156 C 79.847656 6.367188 79.847656 6.574219 79.847656 6.785156 C 79.53125 6.839844 79.214844 6.894531 78.886719 6.953125 C 78.859375 7.046875 78.832031 7.140625 78.804688 7.234375 C 78.539062 8.09375 78.164062 9.035156 77.601562 9.746094 C 77.5625 9.792969 77.5625 9.792969 77.566406 9.851562 C 77.601562 9.933594 77.648438 9.980469 77.714844 10.039062 C 77.792969 10.113281 77.867188 10.1875 77.9375 10.269531 C 78.027344 10.375 78.125 10.46875 78.222656 10.566406 C 78.308594 10.65625 78.390625 10.742188 78.472656 10.839844 C 78.539062 10.914062 78.601562 10.933594 78.695312 10.949219 C 78.71875 10.953125 78.746094 10.957031 78.769531 10.960938 C 78.796875 10.964844 78.824219 10.96875 78.851562 10.972656 C 78.875 10.980469 78.902344 10.984375 78.933594 10.988281 C 79.019531 11.003906 79.105469 11.019531 79.191406 11.03125 C 79.277344 11.046875 79.363281 11.0625 79.449219 11.078125 C 79.503906 11.085938 79.558594 11.097656 79.613281 11.105469 C 79.648438 11.113281 79.648438 11.113281 79.6875 11.117188 C 79.707031 11.121094 79.730469 11.125 79.75 11.128906 C 79.800781 11.140625 79.800781 11.140625 79.824219 11.164062 C 79.820312 11.421875 79.785156 11.679688 79.753906 11.933594 C 79.691406 11.949219 79.632812 11.964844 79.570312 11.980469 C 79.546875 11.984375 79.546875 11.984375 79.519531 11.992188 C 79.214844 12.066406 78.910156 12.085938 78.597656 12.085938 C 78.539062 12.085938 78.484375 12.085938 78.425781 12.085938 C 77.847656 12.089844 77.332031 11.917969 76.894531 11.523438 C 76.855469 11.484375 76.816406 11.445312 76.777344 11.40625 C 76.71875 11.347656 76.660156 11.296875 76.601562 11.242188 C 76.578125 11.21875 76.578125 11.21875 76.554688 11.195312 C 76.515625 11.160156 76.476562 11.125 76.441406 11.089844 C 76.429688 11.101562 76.417969 11.109375 76.410156 11.117188 C 76.140625 11.351562 75.859375 11.554688 75.542969 11.71875 C 75.511719 11.738281 75.476562 11.757812 75.445312 11.777344 C 75.3125 11.847656 75.179688 11.894531 75.039062 11.9375 C 75.011719 11.945312 75.011719 11.945312 74.984375 11.953125 C 74.632812 12.058594 74.269531 12.089844 73.90625 12.085938 C 73.84375 12.085938 73.785156 12.085938 73.722656 12.089844 C 72.941406 12.089844 72.222656 11.824219 71.652344 11.28125 C 71.203125 10.820312 71.023438 10.246094 71.03125 9.609375 C 71.042969 9.058594 71.230469 8.546875 71.59375 8.132812 C 71.609375 8.113281 71.625 8.09375 71.644531 8.070312 C 71.980469 7.683594 72.398438 7.421875 72.839844 7.171875 C 72.871094 7.152344 72.902344 7.132812 72.9375 7.113281 C 72.960938 7.101562 72.984375 7.085938 73.007812 7.074219 C 72.996094 7.0625 72.988281 7.050781 72.976562 7.042969 C 72.398438 6.425781 72.09375 5.613281 72.113281 4.773438 C 72.128906 4.371094 72.257812 3.988281 72.527344 3.679688 C 72.542969 3.660156 72.558594 3.644531 72.570312 3.625 C 72.917969 3.210938 73.496094 2.996094 74.015625 2.933594 C 74.050781 2.929688 74.050781 2.929688 74.082031 2.925781 C 74.804688 2.847656 75.621094 2.964844 76.167969 3.476562 Z M 73.671875 3.796875 C 73.433594 4.113281 73.414062 4.4375 73.457031 4.820312 C 73.550781 5.460938 73.921875 5.9375 74.328125 6.425781 C 74.398438 6.390625 74.449219 6.355469 74.503906 6.300781 C 74.527344 6.28125 74.527344 6.28125 74.550781 6.257812 C 74.566406 6.242188 74.582031 6.226562 74.597656 6.210938 C 74.613281 6.191406 74.628906 6.175781 74.644531 6.160156 C 74.773438 6.03125 74.890625 5.894531 75 5.75 C 75.019531 5.726562 75.035156 5.699219 75.054688 5.675781 C 75.335938 5.292969 75.5 4.859375 75.457031 4.378906 C 75.40625 4.078125 75.289062 3.820312 75.035156 3.636719 C 74.59375 3.363281 74.03125 3.410156 73.671875 3.796875 Z M 73.046875 7.828125 C 72.664062 8.226562 72.519531 8.789062 72.519531 9.332031 C 72.53125 9.800781 72.71875 10.257812 73.039062 10.601562 C 73.46875 10.996094 73.980469 11.140625 74.550781 11.125 C 74.960938 11.105469 75.339844 11.003906 75.703125 10.8125 C 75.71875 10.804688 75.738281 10.796875 75.753906 10.785156 C 75.84375 10.738281 75.90625 10.699219 75.960938 10.609375 C 75.949219 10.601562 75.941406 10.589844 75.933594 10.582031 C 75.460938 10.074219 75.460938 10.074219 75.25 9.8125 C 75.1875 9.738281 75.125 9.664062 75.0625 9.59375 C 74.972656 9.484375 74.882812 9.375 74.796875 9.265625 C 74.695312 9.132812 74.589844 9.003906 74.480469 8.878906 C 74.390625 8.773438 74.304688 8.667969 74.214844 8.5625 C 74.152344 8.484375 74.085938 8.40625 74.019531 8.328125 C 73.921875 8.214844 73.828125 8.101562 73.734375 7.984375 C 73.726562 7.96875 73.714844 7.957031 73.703125 7.941406 C 73.683594 7.914062 73.660156 7.886719 73.640625 7.859375 C 73.589844 7.792969 73.539062 7.730469 73.488281 7.667969 C 73.460938 7.632812 73.460938 7.632812 73.433594 7.601562 C 73.414062 7.578125 73.414062 7.578125 73.390625 7.554688 C 73.265625 7.554688 73.132812 7.742188 73.046875 7.828125 Z M 73.046875 7.828125 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 49.992188 5.535156 C 50.101562 5.609375 50.101562 5.609375 50.136719 5.679688 C 50.136719 5.746094 50.140625 5.8125 50.140625 5.882812 C 50.140625 5.914062 50.140625 5.914062 50.140625 5.941406 C 50.140625 5.984375 50.140625 6.027344 50.140625 6.070312 C 50.140625 6.136719 50.140625 6.203125 50.140625 6.269531 C 50.140625 6.308594 50.140625 6.351562 50.140625 6.390625 C 50.140625 6.410156 50.140625 6.429688 50.140625 6.453125 C 50.140625 6.589844 50.140625 6.589844 50.113281 6.617188 C 50.074219 6.617188 50.035156 6.621094 49.996094 6.621094 C 49.972656 6.621094 49.949219 6.621094 49.921875 6.621094 C 49.894531 6.621094 49.871094 6.617188 49.84375 6.617188 C 49.816406 6.617188 49.789062 6.617188 49.757812 6.617188 C 49.671875 6.617188 49.585938 6.617188 49.5 6.617188 C 49.441406 6.617188 49.378906 6.617188 49.320312 6.617188 C 49.175781 6.617188 49.03125 6.617188 48.886719 6.617188 C 48.898438 6.640625 48.90625 6.660156 48.917969 6.683594 C 48.929688 6.714844 48.945312 6.746094 48.957031 6.773438 C 48.964844 6.789062 48.96875 6.804688 48.976562 6.820312 C 49.203125 7.339844 49.195312 8 48.988281 8.523438 C 48.75 9.0625 48.355469 9.457031 47.804688 9.671875 C 47.066406 9.941406 46.210938 9.941406 45.457031 9.746094 C 45.277344 10.003906 45.214844 10.273438 45.238281 10.585938 C 45.269531 10.699219 45.316406 10.761719 45.402344 10.835938 C 45.617188 10.945312 45.851562 10.949219 46.089844 10.949219 C 46.113281 10.953125 46.132812 10.953125 46.15625 10.953125 C 46.203125 10.953125 46.25 10.953125 46.292969 10.953125 C 46.367188 10.953125 46.441406 10.953125 46.515625 10.953125 C 46.726562 10.953125 46.9375 10.957031 47.144531 10.957031 C 47.273438 10.957031 47.402344 10.957031 47.53125 10.960938 C 47.582031 10.960938 47.628906 10.960938 47.675781 10.960938 C 48.324219 10.960938 49.039062 11.019531 49.53125 11.492188 C 49.546875 11.511719 49.566406 11.53125 49.585938 11.550781 C 49.601562 11.566406 49.617188 11.582031 49.636719 11.597656 C 49.957031 11.929688 50.0625 12.394531 50.066406 12.84375 C 50.054688 13.351562 49.847656 13.800781 49.511719 14.171875 C 49.496094 14.191406 49.480469 14.207031 49.460938 14.226562 C 48.8125 14.921875 47.769531 15.179688 46.855469 15.210938 C 45.890625 15.234375 44.761719 15.230469 44.015625 14.523438 C 43.738281 14.222656 43.660156 13.886719 43.671875 13.488281 C 43.679688 13.363281 43.699219 13.253906 43.753906 13.136719 C 43.761719 13.117188 43.769531 13.09375 43.78125 13.074219 C 43.996094 12.644531 44.386719 12.410156 44.785156 12.175781 C 44.765625 12.167969 44.746094 12.160156 44.730469 12.152344 C 44.398438 11.996094 44.222656 11.808594 44.089844 11.476562 C 43.988281 11.136719 44.070312 10.757812 44.222656 10.453125 C 44.421875 10.109375 44.695312 9.824219 44.976562 9.550781 C 44.960938 9.542969 44.945312 9.53125 44.925781 9.523438 C 44.757812 9.417969 44.613281 9.304688 44.472656 9.167969 C 44.457031 9.152344 44.441406 9.136719 44.425781 9.121094 C 44.214844 8.902344 44.085938 8.597656 44.015625 8.300781 C 44.011719 8.28125 44.003906 8.257812 44 8.238281 C 43.882812 7.675781 43.964844 7.042969 44.277344 6.558594 C 44.621094 6.070312 45.09375 5.773438 45.671875 5.628906 C 45.6875 5.625 45.703125 5.621094 45.71875 5.617188 C 46.25 5.492188 46.917969 5.496094 47.449219 5.628906 C 47.464844 5.632812 47.480469 5.636719 47.496094 5.640625 C 47.6875 5.691406 47.867188 5.761719 48.046875 5.84375 C 48.0625 5.851562 48.078125 5.859375 48.09375 5.867188 C 48.164062 5.902344 48.226562 5.933594 48.289062 5.980469 C 48.390625 6.066406 48.390625 6.066406 48.515625 6.082031 C 48.582031 6.0625 48.644531 6.035156 48.707031 6.003906 C 48.730469 5.996094 48.753906 5.984375 48.78125 5.976562 C 48.855469 5.941406 48.929688 5.910156 49.003906 5.875 C 49.054688 5.851562 49.101562 5.832031 49.152344 5.808594 C 49.320312 5.738281 49.488281 5.664062 49.652344 5.585938 C 49.679688 5.574219 49.703125 5.566406 49.730469 5.554688 C 49.75 5.542969 49.769531 5.535156 49.789062 5.523438 C 49.867188 5.503906 49.917969 5.515625 49.992188 5.535156 Z M 45.835938 6.507812 C 45.472656 6.984375 45.421875 7.597656 45.492188 8.175781 C 45.550781 8.542969 45.6875 8.890625 45.980469 9.132812 C 46.207031 9.285156 46.46875 9.3125 46.734375 9.277344 C 47.015625 9.21875 47.210938 9.089844 47.375 8.855469 C 47.683594 8.375 47.742188 7.746094 47.640625 7.191406 C 47.5625 6.859375 47.402344 6.507812 47.117188 6.308594 C 46.703125 6.074219 46.152344 6.148438 45.835938 6.507812 Z M 45.238281 12.367188 C 44.957031 12.734375 44.867188 13.113281 44.902344 13.570312 C 44.957031 13.84375 45.09375 14.058594 45.316406 14.226562 C 45.613281 14.417969 46.015625 14.496094 46.367188 14.507812 C 46.394531 14.507812 46.394531 14.507812 46.417969 14.507812 C 47.132812 14.527344 47.90625 14.457031 48.453125 13.945312 C 48.652344 13.738281 48.710938 13.515625 48.703125 13.230469 C 48.683594 12.992188 48.570312 12.800781 48.394531 12.644531 C 48.113281 12.441406 47.726562 12.449219 47.398438 12.449219 C 47.355469 12.449219 47.3125 12.449219 47.269531 12.449219 C 47.15625 12.449219 47.046875 12.449219 46.933594 12.449219 C 46.753906 12.449219 46.574219 12.445312 46.394531 12.445312 C 46.332031 12.445312 46.269531 12.445312 46.210938 12.445312 C 45.882812 12.445312 45.5625 12.414062 45.238281 12.367188 Z M 45.238281 12.367188 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 53.039062 2.382812 C 53.0625 2.390625 53.0625 2.390625 53.085938 2.398438 C 53.140625 2.429688 53.171875 2.453125 53.207031 2.503906 C 53.230469 2.617188 53.21875 2.730469 53.214844 2.84375 C 53.210938 2.878906 53.210938 2.914062 53.210938 2.953125 C 53.207031 3.027344 53.203125 3.105469 53.199219 3.183594 C 53.191406 3.371094 53.183594 3.558594 53.179688 3.746094 C 53.175781 3.792969 53.175781 3.835938 53.175781 3.882812 C 53.15625 4.441406 53.15625 5 53.15625 5.5625 C 53.15625 5.640625 53.15625 5.71875 53.15625 5.792969 C 53.15625 6.085938 53.160156 6.375 53.160156 6.664062 C 53.179688 6.644531 53.195312 6.625 53.214844 6.605469 C 53.238281 6.578125 53.261719 6.550781 53.285156 6.523438 C 53.296875 6.511719 53.3125 6.5 53.324219 6.484375 C 53.78125 5.984375 54.445312 5.601562 55.128906 5.550781 C 55.640625 5.535156 56.128906 5.578125 56.527344 5.929688 C 56.566406 5.964844 56.601562 6 56.640625 6.039062 C 56.664062 6.0625 56.664062 6.0625 56.691406 6.089844 C 57.246094 6.660156 57.203125 7.570312 57.203125 8.304688 C 57.203125 8.414062 57.203125 8.523438 57.207031 8.632812 C 57.207031 8.839844 57.207031 9.042969 57.207031 9.25 C 57.207031 9.484375 57.210938 9.722656 57.210938 9.957031 C 57.210938 10.4375 57.214844 10.921875 57.214844 11.40625 C 57.246094 11.410156 57.246094 11.410156 57.28125 11.414062 C 57.308594 11.417969 57.335938 11.421875 57.363281 11.425781 C 57.40625 11.433594 57.40625 11.433594 57.445312 11.441406 C 57.558594 11.457031 57.671875 11.480469 57.785156 11.503906 C 57.808594 11.507812 57.828125 11.511719 57.851562 11.515625 C 57.878906 11.519531 57.878906 11.519531 57.910156 11.527344 C 57.929688 11.53125 57.949219 11.535156 57.964844 11.539062 C 58.007812 11.550781 58.007812 11.550781 58.03125 11.574219 C 58.035156 11.613281 58.035156 11.65625 58.035156 11.695312 C 58.035156 11.71875 58.035156 11.746094 58.035156 11.769531 C 58.035156 11.796875 58.035156 11.824219 58.035156 11.851562 C 58.035156 11.875 58.035156 11.902344 58.035156 11.929688 C 58.035156 11.964844 58.035156 11.964844 58.035156 12.003906 C 58.035156 12.027344 58.035156 12.050781 58.035156 12.074219 C 58.03125 12.125 58.03125 12.125 58.007812 12.148438 C 57.964844 12.152344 57.921875 12.152344 57.882812 12.152344 C 57.839844 12.152344 57.839844 12.152344 57.796875 12.152344 C 57.769531 12.152344 57.738281 12.152344 57.707031 12.152344 C 57.675781 12.152344 57.640625 12.152344 57.609375 12.152344 C 57.523438 12.152344 57.433594 12.152344 57.347656 12.152344 C 57.257812 12.152344 57.164062 12.152344 57.074219 12.152344 C 56.917969 12.152344 56.765625 12.152344 56.613281 12.152344 C 56.433594 12.152344 56.257812 12.152344 56.082031 12.152344 C 55.929688 12.152344 55.777344 12.152344 55.625 12.152344 C 55.53125 12.152344 55.441406 12.152344 55.351562 12.152344 C 55.265625 12.152344 55.179688 12.152344 55.09375 12.152344 C 55.046875 12.152344 55 12.152344 54.953125 12.152344 C 54.925781 12.152344 54.898438 12.152344 54.871094 12.152344 C 54.847656 12.152344 54.824219 12.152344 54.796875 12.152344 C 54.742188 12.148438 54.742188 12.148438 54.71875 12.125 C 54.71875 12.085938 54.71875 12.042969 54.71875 12.003906 C 54.71875 11.976562 54.71875 11.953125 54.71875 11.925781 C 54.71875 11.902344 54.71875 11.875 54.71875 11.847656 C 54.71875 11.820312 54.71875 11.796875 54.71875 11.769531 C 54.71875 11.703125 54.71875 11.636719 54.71875 11.574219 C 54.8125 11.53125 54.902344 11.507812 55.003906 11.488281 C 55.03125 11.480469 55.0625 11.476562 55.09375 11.46875 C 55.113281 11.464844 55.128906 11.460938 55.144531 11.460938 C 55.191406 11.449219 55.242188 11.441406 55.289062 11.429688 C 55.527344 11.378906 55.527344 11.378906 55.585938 11.378906 C 55.582031 10.90625 55.582031 10.433594 55.578125 9.960938 C 55.578125 9.742188 55.578125 9.523438 55.574219 9.304688 C 55.574219 9.109375 55.574219 8.917969 55.574219 8.726562 C 55.574219 8.625 55.570312 8.527344 55.570312 8.425781 C 55.570312 8.328125 55.570312 8.234375 55.570312 8.136719 C 55.570312 8.101562 55.570312 8.066406 55.570312 8.03125 C 55.570312 7.664062 55.554688 7.199219 55.289062 6.917969 C 55.054688 6.722656 54.742188 6.746094 54.457031 6.761719 C 54.101562 6.800781 53.738281 7.007812 53.464844 7.234375 C 53.425781 7.265625 53.425781 7.265625 53.371094 7.300781 C 53.273438 7.371094 53.214844 7.421875 53.1875 7.539062 C 53.179688 7.640625 53.179688 7.742188 53.183594 7.84375 C 53.183594 7.882812 53.183594 7.921875 53.183594 7.960938 C 53.183594 8.066406 53.183594 8.167969 53.1875 8.273438 C 53.1875 8.386719 53.1875 8.496094 53.1875 8.605469 C 53.1875 8.8125 53.191406 9.023438 53.191406 9.230469 C 53.195312 9.46875 53.195312 9.703125 53.195312 9.941406 C 53.199219 10.429688 53.203125 10.917969 53.207031 11.40625 C 53.238281 11.410156 53.238281 11.410156 53.265625 11.414062 C 53.351562 11.429688 53.4375 11.445312 53.523438 11.464844 C 53.554688 11.46875 53.585938 11.472656 53.613281 11.480469 C 53.644531 11.484375 53.671875 11.492188 53.703125 11.496094 C 53.730469 11.5 53.753906 11.507812 53.78125 11.511719 C 53.847656 11.523438 53.910156 11.535156 53.976562 11.550781 C 53.976562 11.746094 53.976562 11.945312 53.976562 12.148438 C 52.890625 12.148438 51.804688 12.148438 50.6875 12.148438 C 50.6875 11.953125 50.6875 11.753906 50.6875 11.550781 C 50.964844 11.492188 51.242188 11.4375 51.527344 11.378906 C 51.542969 11.160156 51.554688 10.945312 51.554688 10.722656 C 51.554688 10.691406 51.554688 10.660156 51.554688 10.628906 C 51.554688 10.546875 51.558594 10.464844 51.558594 10.378906 C 51.558594 10.289062 51.558594 10.199219 51.558594 10.109375 C 51.558594 9.953125 51.558594 9.796875 51.558594 9.640625 C 51.558594 9.414062 51.558594 9.1875 51.5625 8.960938 C 51.5625 8.59375 51.5625 8.230469 51.5625 7.863281 C 51.566406 7.507812 51.566406 7.152344 51.566406 6.792969 C 51.566406 6.773438 51.566406 6.75 51.566406 6.726562 C 51.566406 6.617188 51.566406 6.507812 51.566406 6.398438 C 51.570312 5.484375 51.574219 4.570312 51.574219 3.65625 C 51.554688 3.65625 51.535156 3.652344 51.515625 3.652344 C 51.476562 3.648438 51.476562 3.648438 51.4375 3.644531 C 51.414062 3.644531 51.386719 3.640625 51.359375 3.640625 C 51.277344 3.632812 51.195312 3.621094 51.113281 3.609375 C 51.082031 3.605469 51.054688 3.601562 51.023438 3.597656 C 50.996094 3.59375 50.964844 3.589844 50.933594 3.582031 C 50.902344 3.578125 50.871094 3.574219 50.839844 3.570312 C 50.765625 3.558594 50.691406 3.546875 50.617188 3.535156 C 50.617188 3.347656 50.617188 3.15625 50.617188 2.960938 C 50.910156 2.875 51.207031 2.796875 51.5 2.722656 C 51.523438 2.714844 51.542969 2.710938 51.5625 2.707031 C 51.671875 2.679688 51.777344 2.652344 51.886719 2.625 C 51.972656 2.601562 52.0625 2.578125 52.152344 2.554688 C 52.257812 2.527344 52.367188 2.5 52.472656 2.472656 C 52.515625 2.460938 52.554688 2.453125 52.597656 2.441406 C 52.652344 2.425781 52.710938 2.410156 52.765625 2.398438 C 52.78125 2.394531 52.800781 2.386719 52.816406 2.382812 C 52.898438 2.363281 52.960938 2.351562 53.039062 2.382812 Z M 53.039062 2.382812 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 99.691406 6.011719 C 100.109375 6.40625 100.234375 7.003906 100.273438 7.554688 C 100.277344 7.667969 100.277344 7.785156 100.277344 7.898438 C 100.277344 7.933594 100.277344 7.964844 100.277344 8 C 100.277344 8.074219 100.277344 8.144531 100.277344 8.21875 C 100.277344 8.332031 100.277344 8.445312 100.277344 8.558594 C 100.28125 8.886719 100.28125 9.210938 100.28125 9.535156 C 100.28125 9.714844 100.28125 9.894531 100.285156 10.074219 C 100.285156 10.171875 100.285156 10.265625 100.285156 10.359375 C 100.285156 10.449219 100.285156 10.539062 100.285156 10.628906 C 100.285156 10.675781 100.285156 10.726562 100.285156 10.773438 C 100.289062 10.964844 100.292969 11.167969 100.417969 11.320312 C 100.53125 11.378906 100.636719 11.398438 100.757812 11.367188 C 100.898438 11.308594 101.003906 11.21875 101.113281 11.117188 C 101.226562 11.199219 101.339844 11.289062 101.449219 11.378906 C 101.394531 11.527344 101.300781 11.640625 101.207031 11.765625 C 101.179688 11.804688 101.179688 11.804688 101.152344 11.84375 C 100.859375 12.152344 100.476562 12.265625 100.058594 12.277344 C 99.699219 12.269531 99.332031 12.164062 99.066406 11.910156 C 98.933594 11.757812 98.761719 11.519531 98.761719 11.308594 C 98.582031 11.449219 98.582031 11.449219 98.417969 11.605469 C 98.289062 11.738281 98.140625 11.847656 97.992188 11.957031 C 97.96875 11.972656 97.949219 11.992188 97.925781 12.007812 C 97.488281 12.3125 96.855469 12.339844 96.34375 12.25 C 95.917969 12.15625 95.527344 11.929688 95.28125 11.558594 C 95.035156 11.136719 94.964844 10.617188 95.082031 10.140625 C 95.289062 9.527344 95.746094 9.175781 96.300781 8.894531 C 96.941406 8.582031 97.644531 8.375 98.328125 8.179688 C 98.34375 8.175781 98.359375 8.171875 98.375 8.167969 C 98.472656 8.140625 98.566406 8.113281 98.664062 8.085938 C 98.695312 7.195312 98.695312 7.195312 98.328125 6.425781 C 98.121094 6.230469 97.828125 6.203125 97.558594 6.203125 C 97.53125 6.203125 97.53125 6.203125 97.503906 6.203125 C 97.339844 6.207031 97.171875 6.21875 97.007812 6.230469 C 97.003906 6.257812 97.003906 6.289062 97 6.316406 C 96.984375 6.46875 96.957031 6.617188 96.925781 6.765625 C 96.917969 6.816406 96.910156 6.863281 96.902344 6.910156 C 96.832031 7.273438 96.738281 7.585938 96.425781 7.808594 C 96.191406 7.933594 95.945312 7.933594 95.6875 7.867188 C 95.515625 7.808594 95.40625 7.707031 95.320312 7.546875 C 95.234375 7.347656 95.238281 7.183594 95.308594 6.980469 C 95.316406 6.957031 95.316406 6.957031 95.324219 6.929688 C 95.421875 6.644531 95.574219 6.441406 95.785156 6.230469 C 95.800781 6.214844 95.816406 6.195312 95.835938 6.179688 C 96.734375 5.308594 98.742188 5.21875 99.691406 6.011719 Z M 98.394531 8.742188 C 98.292969 8.777344 98.1875 8.8125 98.082031 8.847656 C 97.574219 9.007812 97.011719 9.230469 96.746094 9.722656 C 96.582031 10.042969 96.554688 10.355469 96.648438 10.703125 C 96.71875 10.914062 96.816406 11.042969 97.011719 11.152344 C 97.296875 11.292969 97.609375 11.304688 97.910156 11.199219 C 98.058594 11.132812 98.207031 11.050781 98.34375 10.960938 C 98.398438 10.921875 98.398438 10.921875 98.46875 10.890625 C 98.558594 10.839844 98.644531 10.789062 98.679688 10.683594 C 98.703125 10.542969 98.695312 10.402344 98.691406 10.257812 C 98.6875 10.214844 98.6875 10.167969 98.6875 10.121094 C 98.6875 10 98.683594 9.878906 98.683594 9.757812 C 98.679688 9.636719 98.679688 9.511719 98.675781 9.386719 C 98.675781 9.144531 98.667969 8.902344 98.664062 8.660156 C 98.578125 8.660156 98.476562 8.714844 98.394531 8.742188 Z M 98.394531 8.742188 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 38.035156 6.242188 C 38.207031 6.40625 38.332031 6.578125 38.449219 6.785156 C 38.460938 6.808594 38.460938 6.808594 38.472656 6.832031 C 38.835938 7.472656 38.875 8.257812 38.761719 8.972656 C 38.734375 9 38.734375 9 38.671875 9 C 38.625 9 38.625 9 38.578125 9 C 38.5625 9 38.546875 9 38.53125 9 C 38.472656 9 38.417969 9 38.363281 9 C 38.324219 9 38.285156 9 38.242188 9 C 38.136719 9 38.027344 9 37.917969 9 C 37.804688 9 37.695312 9 37.582031 9 C 37.367188 9 37.152344 9 36.9375 9 C 36.695312 9 36.453125 9 36.207031 9 C 35.707031 9 35.207031 9 34.703125 9 C 34.714844 9.089844 34.726562 9.183594 34.738281 9.273438 C 34.742188 9.300781 34.742188 9.328125 34.746094 9.351562 C 34.8125 9.898438 35.007812 10.441406 35.4375 10.808594 C 35.933594 11.1875 36.476562 11.269531 37.089844 11.203125 C 37.539062 11.128906 37.90625 10.847656 38.222656 10.535156 C 38.347656 10.417969 38.347656 10.417969 38.425781 10.417969 C 38.464844 10.445312 38.464844 10.445312 38.503906 10.488281 C 38.589844 10.585938 38.683594 10.671875 38.785156 10.753906 C 38.679688 11.046875 38.46875 11.28125 38.257812 11.5 C 38.242188 11.519531 38.222656 11.535156 38.207031 11.554688 C 37.792969 12 37.171875 12.246094 36.574219 12.320312 C 36.554688 12.320312 36.535156 12.324219 36.515625 12.328125 C 35.640625 12.425781 34.773438 12.210938 34.074219 11.671875 C 33.421875 11.125 33.078125 10.363281 32.976562 9.527344 C 32.972656 9.496094 32.972656 9.496094 32.96875 9.460938 C 32.871094 8.5 33.074219 7.515625 33.675781 6.746094 C 33.707031 6.710938 33.738281 6.675781 33.769531 6.640625 C 33.78125 6.621094 33.796875 6.605469 33.8125 6.585938 C 34.316406 5.988281 35.136719 5.640625 35.902344 5.566406 C 36.699219 5.511719 37.429688 5.699219 38.035156 6.242188 Z M 35.226562 6.652344 C 34.949219 7.007812 34.820312 7.386719 34.746094 7.824219 C 34.742188 7.851562 34.738281 7.875 34.734375 7.898438 C 34.730469 7.921875 34.726562 7.949219 34.722656 7.972656 C 34.71875 7.992188 34.714844 8.015625 34.710938 8.035156 C 34.703125 8.097656 34.703125 8.15625 34.703125 8.222656 C 34.703125 8.242188 34.703125 8.261719 34.703125 8.28125 C 34.703125 8.292969 34.703125 8.308594 34.703125 8.324219 C 34.972656 8.328125 35.242188 8.328125 35.507812 8.328125 C 35.632812 8.328125 35.757812 8.328125 35.882812 8.332031 C 36.003906 8.332031 36.125 8.332031 36.246094 8.332031 C 36.289062 8.332031 36.335938 8.332031 36.382812 8.332031 C 36.445312 8.332031 36.511719 8.332031 36.574219 8.332031 C 36.59375 8.332031 36.613281 8.332031 36.632812 8.332031 C 36.800781 8.332031 36.964844 8.304688 37.085938 8.183594 C 37.273438 7.9375 37.277344 7.609375 37.246094 7.3125 C 37.195312 6.96875 37.015625 6.636719 36.730469 6.425781 C 36.226562 6.113281 35.617188 6.195312 35.226562 6.652344 Z M 35.226562 6.652344 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 112.726562 6.085938 C 112.90625 6.242188 113.058594 6.414062 113.183594 6.617188 C 113.199219 6.636719 113.210938 6.65625 113.226562 6.679688 C 113.628906 7.320312 113.699219 8.167969 113.566406 8.902344 C 113.523438 8.945312 113.449219 8.929688 113.386719 8.929688 C 113.371094 8.929688 113.355469 8.929688 113.339844 8.929688 C 113.28125 8.929688 113.226562 8.929688 113.171875 8.929688 C 113.132812 8.929688 113.089844 8.933594 113.050781 8.933594 C 112.945312 8.933594 112.835938 8.933594 112.726562 8.933594 C 112.613281 8.933594 112.5 8.933594 112.386719 8.933594 C 112.175781 8.9375 111.960938 8.9375 111.746094 8.9375 C 111.503906 8.941406 111.257812 8.941406 111.015625 8.941406 C 110.515625 8.945312 110.011719 8.949219 109.511719 8.949219 C 109.519531 9.023438 109.527344 9.097656 109.535156 9.171875 C 109.535156 9.191406 109.539062 9.210938 109.539062 9.230469 C 109.554688 9.378906 109.578125 9.523438 109.613281 9.667969 C 109.621094 9.6875 109.625 9.710938 109.628906 9.730469 C 109.703125 10.011719 109.808594 10.261719 109.992188 10.488281 C 110.003906 10.507812 110.019531 10.527344 110.035156 10.542969 C 110.320312 10.898438 110.765625 11.117188 111.214844 11.164062 C 111.839844 11.203125 112.339844 11.078125 112.820312 10.671875 C 112.9375 10.570312 113.050781 10.457031 113.160156 10.347656 C 113.230469 10.378906 113.28125 10.414062 113.339844 10.46875 C 113.355469 10.480469 113.367188 10.496094 113.382812 10.507812 C 113.398438 10.523438 113.414062 10.539062 113.429688 10.554688 C 113.445312 10.566406 113.460938 10.582031 113.476562 10.597656 C 113.515625 10.632812 113.554688 10.671875 113.59375 10.707031 C 113.324219 11.316406 112.769531 11.816406 112.15625 12.066406 C 112.054688 12.105469 111.953125 12.136719 111.847656 12.171875 C 111.832031 12.175781 111.816406 12.179688 111.800781 12.183594 C 111.507812 12.265625 111.214844 12.28125 110.914062 12.28125 C 110.898438 12.28125 110.878906 12.28125 110.859375 12.28125 C 110.554688 12.277344 110.261719 12.257812 109.96875 12.175781 C 109.941406 12.167969 109.941406 12.167969 109.914062 12.160156 C 109.203125 11.953125 108.628906 11.503906 108.238281 10.875 C 108.230469 10.859375 108.222656 10.847656 108.210938 10.832031 C 107.699219 9.980469 107.648438 8.855469 107.878906 7.90625 C 108.074219 7.136719 108.570312 6.417969 109.253906 6 C 110.304688 5.378906 111.75 5.261719 112.726562 6.085938 Z M 110.105469 6.496094 C 109.710938 6.9375 109.507812 7.546875 109.511719 8.136719 C 109.511719 8.160156 109.511719 8.179688 109.511719 8.203125 C 109.511719 8.21875 109.511719 8.234375 109.511719 8.253906 C 109.78125 8.253906 110.050781 8.253906 110.316406 8.257812 C 110.441406 8.257812 110.566406 8.257812 110.691406 8.257812 C 110.8125 8.257812 110.933594 8.257812 111.054688 8.257812 C 111.097656 8.257812 111.144531 8.261719 111.191406 8.261719 C 111.253906 8.261719 111.320312 8.261719 111.382812 8.261719 C 111.402344 8.261719 111.421875 8.261719 111.441406 8.261719 C 111.59375 8.261719 111.746094 8.234375 111.871094 8.140625 C 112.082031 7.886719 112.078125 7.605469 112.054688 7.289062 C 112.011719 6.949219 111.867188 6.6875 111.625 6.449219 C 111.609375 6.433594 111.59375 6.417969 111.582031 6.40625 C 111.164062 6.015625 110.496094 6.121094 110.105469 6.496094 Z M 110.105469 6.496094 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 119.207031 6.039062 C 119.210938 6.308594 119.203125 6.578125 119.1875 6.847656 C 119.183594 6.910156 119.183594 6.972656 119.179688 7.035156 C 119.175781 7.078125 119.175781 7.117188 119.171875 7.160156 C 119.171875 7.175781 119.171875 7.195312 119.171875 7.214844 C 119.164062 7.308594 119.152344 7.390625 119.136719 7.484375 C 118.835938 7.484375 118.535156 7.484375 118.222656 7.484375 C 118.207031 7.40625 118.191406 7.328125 118.171875 7.246094 C 118.15625 7.171875 118.140625 7.097656 118.121094 7.023438 C 118.109375 6.96875 118.101562 6.917969 118.089844 6.867188 C 118.070312 6.792969 118.054688 6.714844 118.039062 6.640625 C 118.035156 6.617188 118.027344 6.59375 118.023438 6.570312 C 118.019531 6.550781 118.015625 6.527344 118.007812 6.503906 C 118.003906 6.484375 118 6.464844 117.996094 6.445312 C 117.984375 6.398438 117.984375 6.398438 117.960938 6.351562 C 117.902344 6.332031 117.847656 6.316406 117.789062 6.300781 C 117.765625 6.296875 117.765625 6.296875 117.738281 6.289062 C 117.339844 6.1875 116.835938 6.167969 116.464844 6.375 C 116.296875 6.480469 116.203125 6.609375 116.128906 6.789062 C 116.082031 7.042969 116.105469 7.261719 116.234375 7.484375 C 116.496094 7.828125 117.082031 7.953125 117.46875 8.070312 C 118.183594 8.289062 118.960938 8.597656 119.359375 9.277344 C 119.578125 9.714844 119.621094 10.257812 119.496094 10.734375 C 119.316406 11.277344 118.957031 11.703125 118.449219 11.964844 C 117.460938 12.445312 116.246094 12.394531 115.222656 12.054688 C 115.007812 11.972656 114.804688 11.867188 114.601562 11.765625 C 114.570312 11.234375 114.574219 10.707031 114.574219 10.175781 C 114.886719 10.175781 115.195312 10.175781 115.511719 10.175781 C 115.539062 10.304688 115.539062 10.304688 115.5625 10.433594 C 115.582031 10.515625 115.597656 10.597656 115.613281 10.679688 C 115.625 10.734375 115.636719 10.792969 115.648438 10.847656 C 115.664062 10.929688 115.679688 11.011719 115.695312 11.09375 C 115.703125 11.121094 115.707031 11.144531 115.710938 11.171875 C 115.71875 11.195312 115.722656 11.21875 115.726562 11.242188 C 115.730469 11.261719 115.734375 11.285156 115.738281 11.304688 C 115.75 11.355469 115.75 11.355469 115.777344 11.40625 C 116.324219 11.617188 117.03125 11.667969 117.578125 11.4375 C 117.800781 11.332031 117.949219 11.207031 118.039062 10.972656 C 118.089844 10.761719 118.082031 10.527344 117.992188 10.328125 C 117.910156 10.191406 117.820312 10.105469 117.6875 10.023438 C 117.664062 10.003906 117.636719 9.988281 117.609375 9.972656 C 117.265625 9.769531 116.875 9.65625 116.496094 9.527344 C 116.066406 9.386719 115.683594 9.222656 115.320312 8.949219 C 115.296875 8.933594 115.273438 8.917969 115.25 8.898438 C 115.226562 8.875 115.226562 8.875 115.199219 8.855469 C 115.199219 8.839844 115.199219 8.824219 115.199219 8.804688 C 115.1875 8.800781 115.171875 8.796875 115.160156 8.789062 C 114.933594 8.65625 114.792969 8.285156 114.726562 8.046875 C 114.605469 7.507812 114.6875 6.964844 114.984375 6.496094 C 115.347656 5.957031 115.902344 5.671875 116.523438 5.542969 C 117.460938 5.367188 118.386719 5.574219 119.207031 6.039062 Z M 119.207031 6.039062 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 67.945312 6.109375 C 67.96875 6.136719 67.96875 6.136719 67.96875 6.1875 C 67.96875 6.210938 67.96875 6.234375 67.964844 6.257812 C 67.964844 6.285156 67.964844 6.3125 67.964844 6.339844 C 67.960938 6.367188 67.960938 6.398438 67.960938 6.425781 C 67.960938 6.457031 67.957031 6.484375 67.957031 6.515625 C 67.941406 6.863281 67.917969 7.207031 67.894531 7.554688 C 67.59375 7.554688 67.292969 7.554688 66.984375 7.554688 C 66.921875 7.3125 66.863281 7.070312 66.808594 6.828125 C 66.804688 6.796875 66.796875 6.769531 66.789062 6.742188 C 66.785156 6.714844 66.777344 6.6875 66.773438 6.660156 C 66.765625 6.632812 66.761719 6.609375 66.753906 6.585938 C 66.742188 6.519531 66.742188 6.519531 66.742188 6.425781 C 66.707031 6.414062 66.667969 6.402344 66.628906 6.390625 C 66.605469 6.386719 66.585938 6.378906 66.5625 6.371094 C 66.355469 6.320312 66.15625 6.296875 65.941406 6.296875 C 65.917969 6.296875 65.894531 6.296875 65.871094 6.296875 C 65.5625 6.300781 65.296875 6.351562 65.0625 6.566406 C 64.894531 6.742188 64.859375 6.90625 64.863281 7.148438 C 64.867188 7.285156 64.890625 7.390625 64.96875 7.507812 C 64.976562 7.519531 64.984375 7.535156 64.996094 7.550781 C 65.261719 7.921875 65.914062 8.0625 66.328125 8.179688 C 67.054688 8.390625 67.703125 8.726562 68.089844 9.40625 C 68.214844 9.648438 68.289062 9.90625 68.304688 10.175781 C 68.304688 10.199219 68.304688 10.21875 68.308594 10.242188 C 68.324219 10.753906 68.15625 11.1875 67.824219 11.574219 C 67.808594 11.589844 67.796875 11.605469 67.78125 11.621094 C 67.28125 12.164062 66.515625 12.347656 65.808594 12.390625 C 65.144531 12.414062 64.535156 12.34375 63.910156 12.117188 C 63.886719 12.109375 63.886719 12.109375 63.859375 12.097656 C 63.675781 12.03125 63.507812 11.929688 63.335938 11.835938 C 63.335938 11.632812 63.335938 11.429688 63.335938 11.226562 C 63.335938 11.132812 63.335938 11.039062 63.335938 10.945312 C 63.332031 10.851562 63.332031 10.761719 63.332031 10.671875 C 63.332031 10.636719 63.332031 10.601562 63.332031 10.566406 C 63.332031 10.515625 63.332031 10.46875 63.332031 10.421875 C 63.332031 10.390625 63.332031 10.363281 63.332031 10.335938 C 63.335938 10.273438 63.335938 10.273438 63.359375 10.25 C 63.421875 10.246094 63.484375 10.246094 63.550781 10.246094 C 63.570312 10.246094 63.585938 10.246094 63.605469 10.246094 C 63.648438 10.246094 63.6875 10.246094 63.726562 10.246094 C 63.789062 10.246094 63.851562 10.246094 63.914062 10.246094 C 63.953125 10.246094 63.992188 10.246094 64.03125 10.246094 C 64.050781 10.246094 64.066406 10.246094 64.085938 10.246094 C 64.21875 10.246094 64.21875 10.246094 64.273438 10.273438 C 64.285156 10.316406 64.285156 10.316406 64.296875 10.375 C 64.300781 10.394531 64.304688 10.414062 64.308594 10.4375 C 64.316406 10.460938 64.320312 10.484375 64.324219 10.507812 C 64.328125 10.53125 64.332031 10.554688 64.339844 10.578125 C 64.347656 10.628906 64.359375 10.679688 64.367188 10.730469 C 64.382812 10.808594 64.398438 10.882812 64.414062 10.960938 C 64.421875 11.007812 64.433594 11.058594 64.441406 11.105469 C 64.445312 11.128906 64.453125 11.152344 64.457031 11.175781 C 64.476562 11.285156 64.492188 11.386719 64.488281 11.5 C 64.53125 11.511719 64.53125 11.511719 64.578125 11.519531 C 64.691406 11.546875 64.804688 11.574219 64.921875 11.605469 C 65.117188 11.648438 65.308594 11.648438 65.507812 11.652344 C 65.539062 11.652344 65.570312 11.652344 65.601562 11.652344 C 65.964844 11.652344 66.320312 11.59375 66.605469 11.359375 C 66.761719 11.199219 66.820312 11.003906 66.828125 10.789062 C 66.820312 10.566406 66.761719 10.382812 66.601562 10.226562 C 66.214844 9.933594 65.765625 9.789062 65.3125 9.640625 C 64.621094 9.414062 63.949219 9.125 63.59375 8.445312 C 63.378906 8 63.375 7.464844 63.53125 6.996094 C 63.761719 6.410156 64.183594 6.027344 64.753906 5.773438 C 65.792969 5.351562 66.988281 5.59375 67.945312 6.109375 Z M 67.945312 6.109375 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 105.941406 5.769531 C 105.960938 5.777344 105.976562 5.785156 105.996094 5.792969 C 106.1875 5.867188 106.351562 5.964844 106.535156 6.0625 C 106.511719 6.539062 106.488281 7.015625 106.464844 7.507812 C 106.164062 7.507812 105.863281 7.507812 105.550781 7.507812 C 105.445312 7.101562 105.445312 7.101562 105.410156 6.941406 C 105.40625 6.925781 105.402344 6.910156 105.398438 6.890625 C 105.386719 6.839844 105.375 6.789062 105.367188 6.738281 C 105.359375 6.703125 105.351562 6.667969 105.34375 6.632812 C 105.324219 6.546875 105.304688 6.460938 105.289062 6.375 C 105.234375 6.359375 105.183594 6.34375 105.128906 6.328125 C 105.097656 6.320312 105.070312 6.3125 105.039062 6.304688 C 104.859375 6.253906 104.6875 6.25 104.503906 6.25 C 104.464844 6.25 104.464844 6.25 104.421875 6.25 C 104.136719 6.246094 103.90625 6.3125 103.664062 6.464844 C 103.507812 6.621094 103.417969 6.816406 103.414062 7.042969 C 103.425781 7.25 103.492188 7.433594 103.632812 7.585938 C 103.976562 7.886719 104.484375 8.003906 104.910156 8.132812 C 105.628906 8.351562 106.285156 8.667969 106.667969 9.355469 C 106.878906 9.800781 106.9375 10.371094 106.785156 10.84375 C 106.554688 11.417969 106.144531 11.8125 105.585938 12.070312 C 104.601562 12.488281 103.335938 12.402344 102.359375 12.007812 C 102.203125 11.9375 102.046875 11.859375 101.902344 11.765625 C 101.894531 11.699219 101.894531 11.699219 101.894531 11.617188 C 101.894531 11.585938 101.894531 11.554688 101.890625 11.523438 C 101.890625 11.488281 101.890625 11.453125 101.890625 11.417969 C 101.890625 11.382812 101.890625 11.347656 101.890625 11.3125 C 101.890625 11.222656 101.886719 11.128906 101.886719 11.039062 C 101.886719 10.925781 101.886719 10.816406 101.882812 10.707031 C 101.882812 10.539062 101.882812 10.371094 101.878906 10.203125 C 102.1875 10.203125 102.496094 10.203125 102.816406 10.203125 C 102.871094 10.363281 102.871094 10.363281 102.886719 10.449219 C 102.890625 10.46875 102.894531 10.488281 102.898438 10.507812 C 102.902344 10.527344 102.90625 10.546875 102.910156 10.566406 C 102.914062 10.585938 102.917969 10.609375 102.921875 10.628906 C 102.933594 10.671875 102.941406 10.71875 102.949219 10.761719 C 102.964844 10.828125 102.976562 10.894531 102.988281 10.960938 C 103 11.003906 103.007812 11.046875 103.015625 11.089844 C 103.019531 11.109375 103.023438 11.132812 103.027344 11.152344 C 103.046875 11.246094 103.0625 11.332031 103.054688 11.429688 C 103.699219 11.59375 104.421875 11.726562 105.03125 11.386719 C 105.21875 11.265625 105.316406 11.125 105.375 10.914062 C 105.402344 10.691406 105.378906 10.496094 105.273438 10.292969 C 104.921875 9.867188 104.363281 9.730469 103.859375 9.5625 C 103.1875 9.339844 102.511719 9.058594 102.167969 8.398438 C 101.949219 7.929688 101.9375 7.414062 102.097656 6.929688 C 102.101562 6.90625 102.109375 6.886719 102.117188 6.863281 C 102.269531 6.417969 102.628906 6.066406 103.03125 5.847656 C 103.054688 5.832031 103.078125 5.820312 103.101562 5.808594 C 103.382812 5.65625 103.699219 5.574219 104.015625 5.535156 C 104.035156 5.53125 104.054688 5.527344 104.074219 5.527344 C 104.714844 5.449219 105.34375 5.535156 105.941406 5.769531 Z M 105.941406 5.769531 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 59.953125 3.921875 C 60.316406 3.921875 60.679688 3.921875 61.054688 3.921875 C 61.058594 4.292969 61.054688 4.667969 61.046875 5.039062 C 61.042969 5.066406 61.042969 5.066406 61.042969 5.09375 C 61.042969 5.144531 61.042969 5.195312 61.039062 5.246094 C 61.039062 5.277344 61.039062 5.304688 61.035156 5.335938 C 61.03125 5.472656 61.019531 5.613281 61.007812 5.75 C 61.53125 5.75 62.054688 5.75 62.59375 5.75 C 62.59375 6.035156 62.59375 6.320312 62.59375 6.617188 C 62.0625 6.617188 61.53125 6.617188 60.984375 6.617188 C 60.984375 7.128906 60.988281 7.644531 60.988281 8.160156 C 60.992188 8.398438 60.992188 8.636719 60.992188 8.875 C 60.992188 9.082031 60.992188 9.292969 60.996094 9.5 C 60.996094 9.609375 60.996094 9.71875 60.996094 9.832031 C 60.996094 9.933594 60.996094 10.039062 60.996094 10.140625 C 60.996094 10.179688 60.996094 10.21875 60.996094 10.253906 C 60.992188 10.765625 60.992188 10.765625 61.199219 11.210938 C 61.34375 11.347656 61.507812 11.40625 61.703125 11.40625 C 61.941406 11.371094 62.144531 11.289062 62.355469 11.175781 C 62.457031 11.125 62.457031 11.125 62.519531 11.117188 C 62.558594 11.140625 62.558594 11.140625 62.597656 11.183594 C 62.613281 11.195312 62.625 11.210938 62.640625 11.226562 C 62.652344 11.238281 62.667969 11.253906 62.683594 11.269531 C 62.695312 11.285156 62.710938 11.300781 62.726562 11.316406 C 62.761719 11.351562 62.796875 11.390625 62.832031 11.429688 C 62.785156 11.5625 62.707031 11.65625 62.617188 11.765625 C 62.605469 11.78125 62.59375 11.792969 62.578125 11.808594 C 62.375 12.03125 62.085938 12.183594 61.800781 12.269531 C 61.777344 12.277344 61.75 12.285156 61.726562 12.292969 C 61.511719 12.347656 61.296875 12.351562 61.078125 12.351562 C 61.046875 12.351562 61.019531 12.351562 60.988281 12.351562 C 60.523438 12.351562 60.085938 12.210938 59.730469 11.898438 C 59.542969 11.699219 59.425781 11.40625 59.375 11.140625 C 59.371094 11.117188 59.367188 11.097656 59.363281 11.074219 C 59.351562 10.988281 59.347656 10.902344 59.347656 10.8125 C 59.347656 10.792969 59.347656 10.777344 59.347656 10.757812 C 59.347656 10.695312 59.347656 10.636719 59.347656 10.578125 C 59.347656 10.535156 59.347656 10.492188 59.347656 10.449219 C 59.347656 10.332031 59.347656 10.214844 59.347656 10.097656 C 59.351562 9.972656 59.351562 9.851562 59.351562 9.730469 C 59.351562 9.496094 59.351562 9.265625 59.351562 9.035156 C 59.351562 8.769531 59.351562 8.507812 59.351562 8.242188 C 59.351562 7.703125 59.351562 7.160156 59.351562 6.617188 C 59.035156 6.617188 58.71875 6.617188 58.390625 6.617188 C 58.390625 6.371094 58.390625 6.125 58.390625 5.871094 C 58.914062 5.800781 58.914062 5.800781 59.449219 5.726562 C 59.480469 5.601562 59.515625 5.476562 59.550781 5.351562 C 59.574219 5.269531 59.59375 5.191406 59.617188 5.113281 C 59.652344 4.988281 59.6875 4.863281 59.722656 4.738281 C 59.75 4.640625 59.777344 4.539062 59.804688 4.4375 C 59.816406 4.398438 59.824219 4.359375 59.835938 4.324219 C 59.851562 4.269531 59.867188 4.214844 59.882812 4.160156 C 59.886719 4.144531 59.890625 4.128906 59.894531 4.113281 C 59.914062 4.046875 59.929688 3.984375 59.953125 3.921875 Z M 59.953125 3.921875 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 93.351562 5.554688 C 93.40625 5.59375 93.429688 5.617188 93.445312 5.679688 C 93.449219 5.75 93.445312 5.8125 93.441406 5.878906 C 93.441406 5.90625 93.441406 5.929688 93.441406 5.957031 C 93.4375 6.015625 93.4375 6.070312 93.433594 6.128906 C 93.429688 6.273438 93.425781 6.417969 93.421875 6.5625 C 93.417969 6.617188 93.417969 6.671875 93.417969 6.726562 C 93.402344 7.175781 93.40625 7.625 93.40625 8.074219 C 93.40625 8.195312 93.40625 8.3125 93.40625 8.429688 C 93.40625 8.644531 93.40625 8.859375 93.40625 9.074219 C 93.40625 9.320312 93.40625 9.570312 93.40625 9.816406 C 93.40625 10.320312 93.40625 10.828125 93.40625 11.332031 C 93.425781 11.335938 93.449219 11.339844 93.46875 11.34375 C 93.542969 11.355469 93.613281 11.371094 93.6875 11.382812 C 93.734375 11.390625 93.785156 11.398438 93.832031 11.40625 C 93.859375 11.414062 93.890625 11.417969 93.921875 11.425781 C 93.949219 11.429688 93.976562 11.433594 94.003906 11.4375 C 94.070312 11.449219 94.136719 11.464844 94.199219 11.476562 C 94.199219 11.675781 94.199219 11.875 94.199219 12.078125 C 93.105469 12.078125 92.015625 12.078125 90.886719 12.078125 C 90.886719 11.878906 90.886719 11.679688 90.886719 11.476562 C 90.988281 11.457031 91.085938 11.433594 91.1875 11.414062 C 91.222656 11.40625 91.253906 11.402344 91.289062 11.394531 C 91.339844 11.382812 91.386719 11.375 91.4375 11.363281 C 91.480469 11.355469 91.480469 11.355469 91.527344 11.34375 C 91.601562 11.332031 91.675781 11.332031 91.753906 11.332031 C 91.753906 10.894531 91.753906 10.457031 91.753906 10.023438 C 91.753906 9.820312 91.753906 9.617188 91.753906 9.414062 C 91.753906 9.234375 91.753906 9.058594 91.753906 8.882812 C 91.753906 8.789062 91.753906 8.695312 91.753906 8.601562 C 91.753906 8.066406 91.746094 7.535156 91.726562 7 C 91.683594 6.996094 91.683594 6.996094 91.636719 6.988281 C 91.539062 6.976562 91.4375 6.964844 91.339844 6.953125 C 91.296875 6.945312 91.25 6.941406 91.207031 6.933594 C 91.144531 6.925781 91.082031 6.917969 91.019531 6.910156 C 90.988281 6.90625 90.988281 6.90625 90.957031 6.902344 C 90.820312 6.882812 90.820312 6.882812 90.792969 6.855469 C 90.789062 6.816406 90.789062 6.777344 90.789062 6.738281 C 90.789062 6.714844 90.789062 6.691406 90.789062 6.667969 C 90.789062 6.640625 90.789062 6.617188 90.789062 6.589844 C 90.789062 6.566406 90.789062 6.539062 90.789062 6.515625 C 90.792969 6.453125 90.792969 6.390625 90.792969 6.328125 C 90.96875 6.253906 91.148438 6.1875 91.328125 6.125 C 91.355469 6.117188 91.382812 6.105469 91.414062 6.097656 C 91.503906 6.066406 91.59375 6.03125 91.683594 6 C 91.808594 5.957031 91.929688 5.914062 92.054688 5.871094 C 92.070312 5.867188 92.085938 5.859375 92.101562 5.855469 C 92.285156 5.792969 92.46875 5.726562 92.652344 5.660156 C 92.667969 5.652344 92.6875 5.644531 92.703125 5.640625 C 92.78125 5.609375 92.859375 5.582031 92.9375 5.554688 C 92.976562 5.539062 92.976562 5.539062 93.019531 5.523438 C 93.050781 5.511719 93.050781 5.511719 93.082031 5.5 C 93.1875 5.476562 93.261719 5.503906 93.351562 5.554688 Z M 93.351562 5.554688 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 42.214844 5.652344 C 42.214844 7.542969 42.214844 9.433594 42.214844 11.378906 C 42.535156 11.441406 42.535156 11.441406 42.863281 11.5 C 42.917969 11.515625 42.976562 11.53125 43.03125 11.550781 C 43.03125 11.738281 43.03125 11.929688 43.03125 12.125 C 41.929688 12.125 40.832031 12.125 39.695312 12.125 C 39.695312 11.9375 39.695312 11.746094 39.695312 11.550781 C 39.875 11.5 40.054688 11.460938 40.234375 11.425781 C 40.265625 11.417969 40.265625 11.417969 40.296875 11.410156 C 40.316406 11.40625 40.335938 11.402344 40.355469 11.398438 C 40.375 11.394531 40.394531 11.390625 40.410156 11.386719 C 40.46875 11.378906 40.523438 11.378906 40.585938 11.378906 C 40.582031 10.886719 40.578125 10.390625 40.574219 9.898438 C 40.574219 9.667969 40.574219 9.4375 40.570312 9.207031 C 40.570312 9.007812 40.570312 8.808594 40.570312 8.605469 C 40.566406 8.5 40.566406 8.394531 40.566406 8.289062 C 40.566406 8.191406 40.566406 8.089844 40.566406 7.988281 C 40.566406 7.953125 40.566406 7.917969 40.566406 7.878906 C 40.5625 7.683594 40.558594 7.488281 40.550781 7.292969 C 40.546875 7.273438 40.546875 7.253906 40.546875 7.234375 C 40.542969 7.140625 40.542969 7.140625 40.511719 7.050781 C 40.445312 7.035156 40.378906 7.027344 40.308594 7.019531 C 40.289062 7.015625 40.269531 7.011719 40.25 7.011719 C 40.183594 7.003906 40.121094 6.996094 40.054688 6.988281 C 40.011719 6.980469 39.96875 6.976562 39.921875 6.96875 C 39.816406 6.957031 39.707031 6.941406 39.601562 6.929688 C 39.601562 6.746094 39.601562 6.5625 39.601562 6.375 C 39.964844 6.242188 40.328125 6.109375 40.695312 5.980469 C 40.777344 5.953125 40.859375 5.921875 40.945312 5.894531 C 41 5.875 41.054688 5.855469 41.109375 5.835938 C 41.246094 5.789062 41.386719 5.738281 41.523438 5.6875 C 41.550781 5.675781 41.578125 5.667969 41.605469 5.65625 C 41.660156 5.636719 41.710938 5.617188 41.761719 5.597656 C 41.785156 5.589844 41.808594 5.578125 41.835938 5.570312 C 41.863281 5.558594 41.863281 5.558594 41.894531 5.546875 C 42.027344 5.515625 42.09375 5.585938 42.214844 5.652344 Z M 42.214844 5.652344 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 8.640625 9.261719 C 8.972656 9.519531 9.191406 9.859375 9.277344 10.273438 C 9.328125 10.675781 9.265625 11.089844 9.019531 11.421875 C 8.734375 11.769531 8.371094 12.007812 7.917969 12.058594 C 7.476562 12.09375 7.078125 11.957031 6.742188 11.667969 C 6.71875 11.648438 6.71875 11.648438 6.695312 11.628906 C 6.421875 11.378906 6.261719 10.992188 6.234375 10.628906 C 6.226562 10.179688 6.355469 9.789062 6.664062 9.457031 C 7.191406 8.921875 8.019531 8.84375 8.640625 9.261719 Z M 8.640625 9.261719 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 2.855469 4.089844 C 2.941406 4.15625 3.019531 4.230469 3.097656 4.308594 C 3.113281 4.324219 3.128906 4.339844 3.148438 4.359375 C 3.414062 4.640625 3.542969 5.027344 3.539062 5.410156 C 3.519531 5.851562 3.332031 6.21875 3.015625 6.527344 C 2.707031 6.792969 2.304688 6.921875 1.898438 6.898438 C 1.578125 6.871094 1.308594 6.769531 1.054688 6.570312 C 1.03125 6.546875 1.03125 6.546875 1.003906 6.527344 C 0.699219 6.277344 0.527344 5.898438 0.484375 5.511719 C 0.453125 5.121094 0.558594 4.730469 0.804688 4.425781 C 1.003906 4.191406 1.226562 4.03125 1.511719 3.921875 C 1.53125 3.914062 1.550781 3.90625 1.570312 3.898438 C 1.988281 3.757812 2.496094 3.84375 2.855469 4.089844 Z M 2.855469 4.089844 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 2.960938 11.683594 C 3.269531 11.949219 3.492188 12.316406 3.53125 12.726562 C 3.558594 13.152344 3.449219 13.550781 3.171875 13.878906 C 2.875 14.203125 2.519531 14.375 2.082031 14.417969 C 1.671875 14.433594 1.28125 14.28125 0.972656 14.011719 C 0.660156 13.714844 0.488281 13.324219 0.476562 12.890625 C 0.480469 12.53125 0.59375 12.214844 0.816406 11.933594 C 0.828125 11.917969 0.839844 11.902344 0.851562 11.882812 C 1.078125 11.597656 1.433594 11.421875 1.785156 11.363281 C 2.207031 11.316406 2.628906 11.417969 2.960938 11.683594 Z M 2.960938 11.683594 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 14.449219 4.167969 C 14.507812 4.222656 14.5625 4.273438 14.617188 4.332031 C 14.628906 4.34375 14.640625 4.355469 14.65625 4.367188 C 14.914062 4.632812 15.015625 5.023438 15.03125 5.378906 C 15.019531 5.734375 14.902344 6.046875 14.6875 6.328125 C 14.675781 6.34375 14.664062 6.359375 14.652344 6.378906 C 14.410156 6.679688 14.042969 6.851562 13.664062 6.898438 C 13.242188 6.925781 12.84375 6.816406 12.523438 6.535156 C 12.484375 6.5 12.445312 6.460938 12.40625 6.425781 C 12.394531 6.410156 12.378906 6.394531 12.363281 6.378906 C 12.085938 6.089844 11.988281 5.707031 11.992188 5.316406 C 12.003906 4.914062 12.167969 4.53125 12.457031 4.25 C 13.023438 3.75 13.847656 3.714844 14.449219 4.167969 Z M 14.449219 4.167969 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 42.046875 2.648438 C 42.253906 2.816406 42.375 3.03125 42.40625 3.296875 C 42.433594 3.558594 42.351562 3.808594 42.191406 4.019531 C 42.007812 4.214844 41.785156 4.351562 41.507812 4.363281 C 41.46875 4.363281 41.429688 4.363281 41.390625 4.363281 C 41.371094 4.363281 41.351562 4.363281 41.332031 4.363281 C 41.058594 4.355469 40.832031 4.273438 40.625 4.089844 C 40.476562 3.933594 40.359375 3.734375 40.34375 3.511719 C 40.34375 3.496094 40.339844 3.480469 40.339844 3.460938 C 40.328125 3.230469 40.390625 2.992188 40.542969 2.8125 C 40.554688 2.796875 40.570312 2.78125 40.585938 2.765625 C 40.597656 2.75 40.613281 2.734375 40.632812 2.714844 C 41.019531 2.339844 41.621094 2.332031 42.046875 2.648438 Z M 42.046875 2.648438 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;" d="M 93.210938 2.566406 C 93.453125 2.757812 93.570312 2.96875 93.609375 3.273438 C 93.621094 3.53125 93.550781 3.773438 93.378906 3.972656 C 93.367188 3.988281 93.351562 4.003906 93.335938 4.019531 C 93.316406 4.039062 93.316406 4.039062 93.296875 4.058594 C 93.066406 4.28125 92.78125 4.316406 92.476562 4.3125 C 92.355469 4.308594 92.25 4.285156 92.136719 4.234375 C 92.117188 4.226562 92.101562 4.21875 92.082031 4.210938 C 91.871094 4.105469 91.703125 3.9375 91.605469 3.722656 C 91.515625 3.449219 91.515625 3.171875 91.632812 2.90625 C 91.773438 2.652344 92 2.484375 92.277344 2.402344 C 92.605469 2.324219 92.933594 2.375 93.210938 2.566406 Z M 93.210938 2.566406 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 8.320312 5.960938 C 8.539062 6.117188 8.664062 6.320312 8.726562 6.582031 C 8.769531 6.839844 8.710938 7.089844 8.574219 7.3125 C 8.410156 7.535156 8.207031 7.65625 7.945312 7.722656 C 7.621094 7.753906 7.355469 7.6875 7.105469 7.484375 C 6.921875 7.3125 6.8125 7.078125 6.792969 6.832031 C 6.789062 6.535156 6.871094 6.28125 7.078125 6.0625 C 7.4375 5.738281 7.914062 5.710938 8.320312 5.960938 Z M 8.320312 5.960938 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.431373%,73.725492%,19.607843%);fill-opacity:1;" d="M 14.09375 0.820312 C 14.289062 0.96875 14.421875 1.179688 14.472656 1.417969 C 14.5 1.714844 14.464844 1.980469 14.273438 2.214844 C 14.082031 2.421875 13.890625 2.558594 13.605469 2.582031 C 13.320312 2.585938 13.078125 2.535156 12.863281 2.332031 C 12.660156 2.128906 12.550781 1.910156 12.542969 1.621094 C 12.546875 1.332031 12.644531 1.117188 12.839844 0.910156 C 13.199219 0.574219 13.6875 0.5625 14.09375 0.820312 Z M 14.09375 0.820312 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 2.574219 0.808594 C 2.769531 0.972656 2.925781 1.164062 2.976562 1.417969 C 2.996094 1.71875 2.972656 1.976562 2.777344 2.214844 C 2.585938 2.421875 2.394531 2.558594 2.109375 2.582031 C 1.824219 2.585938 1.582031 2.53125 1.367188 2.332031 C 1.226562 2.195312 1.136719 2.066406 1.078125 1.875 C 1.074219 1.863281 1.070312 1.847656 1.066406 1.832031 C 1.015625 1.570312 1.054688 1.3125 1.195312 1.089844 C 1.515625 0.644531 2.101562 0.484375 2.574219 0.808594 Z M 2.574219 0.808594 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 2.550781 8.316406 C 2.582031 8.34375 2.609375 8.371094 2.640625 8.398438 C 2.65625 8.414062 2.671875 8.429688 2.691406 8.445312 C 2.878906 8.640625 2.960938 8.847656 2.964844 9.121094 C 2.960938 9.398438 2.882812 9.613281 2.6875 9.816406 C 2.5 9.996094 2.257812 10.109375 1.992188 10.105469 C 1.695312 10.085938 1.449219 9.972656 1.246094 9.753906 C 1.074219 9.535156 1.003906 9.277344 1.03125 9 C 1.089844 8.710938 1.214844 8.484375 1.453125 8.3125 C 1.789062 8.105469 2.222656 8.085938 2.550781 8.316406 Z M 2.550781 8.316406 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 14.058594 8.34375 C 14.269531 8.496094 14.425781 8.714844 14.472656 8.972656 C 14.496094 9.300781 14.441406 9.542969 14.238281 9.804688 C 14.148438 9.90625 14.042969 9.972656 13.921875 10.03125 C 13.894531 10.046875 13.894531 10.046875 13.867188 10.058594 C 13.660156 10.144531 13.386719 10.136719 13.175781 10.066406 C 12.929688 9.960938 12.714844 9.769531 12.613281 9.519531 C 12.601562 9.484375 12.585938 9.445312 12.574219 9.40625 C 12.570312 9.390625 12.566406 9.378906 12.5625 9.363281 C 12.511719 9.109375 12.550781 8.855469 12.679688 8.632812 C 12.824219 8.421875 13.003906 8.277344 13.246094 8.203125 C 13.261719 8.199219 13.277344 8.195312 13.292969 8.191406 C 13.570312 8.136719 13.820312 8.195312 14.058594 8.34375 Z M 14.058594 8.34375 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 8.375 13.523438 C 8.605469 13.730469 8.71875 13.984375 8.742188 14.289062 C 8.734375 14.554688 8.621094 14.789062 8.445312 14.984375 C 8.25 15.164062 7.996094 15.25 7.734375 15.253906 C 7.46875 15.242188 7.25 15.136719 7.0625 14.953125 C 6.863281 14.730469 6.789062 14.488281 6.792969 14.195312 C 6.832031 13.894531 6.964844 13.664062 7.199219 13.472656 C 7.582031 13.230469 8.015625 13.25 8.375 13.523438 Z M 8.375 13.523438 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 14.027344 12.066406 C 14.25 12.234375 14.421875 12.449219 14.472656 12.726562 C 14.492188 13.019531 14.464844 13.269531 14.273438 13.5 C 14.089844 13.699219 13.886719 13.84375 13.609375 13.863281 C 13.3125 13.867188 13.058594 13.800781 12.832031 13.589844 C 12.730469 13.480469 12.65625 13.371094 12.601562 13.234375 C 12.589844 13.207031 12.582031 13.183594 12.570312 13.15625 C 12.519531 12.886719 12.539062 12.625 12.679688 12.386719 C 12.984375 11.945312 13.558594 11.765625 14.027344 12.066406 Z M 14.027344 12.066406 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;" d="M 8.269531 2.203125 C 8.492188 2.371094 8.652344 2.574219 8.703125 2.855469 C 8.738281 3.113281 8.695312 3.371094 8.535156 3.582031 C 8.355469 3.796875 8.136719 3.949219 7.851562 3.976562 C 7.539062 3.988281 7.289062 3.894531 7.054688 3.679688 C 6.851562 3.449219 6.796875 3.222656 6.808594 2.914062 C 6.824219 2.671875 6.929688 2.480469 7.105469 2.308594 C 7.445312 2.039062 7.886719 1.964844 8.269531 2.203125 Z M 8.269531 2.203125 "/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/line/editor/collapse.svg b/app/components/base/icons/assets/vender/line/editor/collapse.svg
deleted file mode 100644
index b54e046..0000000
--- a/app/components/base/icons/assets/vender/line/editor/collapse.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Icon L">
-<g id="Vector">
-<path d="M2.66602 11.3333H0.666016L3.33268 8.66667L5.99935 11.3333H3.99935L3.99935 14H2.66602L2.66602 11.3333Z" fill="#354052"/>
-<path d="M2.66602 4.66667L2.66602 2L3.99935 2L3.99935 4.66667L5.99935 4.66667L3.33268 7.33333L0.666016 4.66667L2.66602 4.66667Z" fill="#354052"/>
-<path d="M7.33268 2.66667H13.9993V4H7.33268V2.66667ZM7.33268 12H13.9993V13.3333H7.33268V12ZM5.99935 7.33333H13.9993V8.66667H5.99935V7.33333Z" fill="#354052"/>
-</g>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/other/anthropic-text.svg b/app/components/base/icons/assets/vender/other/anthropic-text.svg
deleted file mode 100644
index cace17d..0000000
--- a/app/components/base/icons/assets/vender/other/anthropic-text.svg
+++ /dev/null
@@ -1,78 +0,0 @@
-<svg width="90" height="20" viewBox="0 0 90 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g clip-path="url(#clip0_8587_60274)">
-<mask id="mask0_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M89.375 4.99805H0V14.998H89.375V4.99805Z" fill="white"/>
-</mask>
-<g mask="url(#mask0_8587_60274)">
-<mask id="mask1_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99609H89.375V14.9961H0V4.99609Z" fill="white"/>
-</mask>
-<g mask="url(#mask1_8587_60274)">
-<mask id="mask2_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99414H89.375V14.9941H0V4.99414Z" fill="white"/>
-</mask>
-<g mask="url(#mask2_8587_60274)">
-<mask id="mask3_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask3_8587_60274)">
-<path d="M18.1273 11.9244L13.7773 5.15625H11.4297V14.825H13.4321V8.05688L17.7821 14.825H20.1297V5.15625H18.1273V11.9244Z" fill="black" fill-opacity="0.92"/>
-</g>
-<mask id="mask4_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask4_8587_60274)">
-<path d="M21.7969 7.02094H25.0423V14.825H27.1139V7.02094H30.3594V5.15625H21.7969V7.02094Z" fill="black" fill-opacity="0.92"/>
-</g>
-<mask id="mask5_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask5_8587_60274)">
-<path d="M38.6442 9.00994H34.0871V5.15625H32.0156V14.825H34.0871V10.8746H38.6442V14.825H40.7156V5.15625H38.6442V9.00994Z" fill="black" fill-opacity="0.92"/>
-</g>
-<mask id="mask6_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask6_8587_60274)">
-<path d="M45.3376 7.02094H47.893C48.9152 7.02094 49.4539 7.39387 49.4539 8.09831C49.4539 8.80275 48.9152 9.17569 47.893 9.17569H45.3376V7.02094ZM51.5259 8.09831C51.5259 6.27506 50.186 5.15625 47.9897 5.15625H43.2656V14.825H45.3376V11.0404H47.6443L49.7164 14.825H52.0094L49.715 10.7521C50.8666 10.3094 51.5259 9.37721 51.5259 8.09831Z" fill="black" fill-opacity="0.92"/>
-</g>
-<mask id="mask7_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask7_8587_60274)">
-<path d="M57.8732 13.0565C56.2438 13.0565 55.2496 11.8963 55.2496 10.004C55.2496 8.08416 56.2438 6.92394 57.8732 6.92394C59.4887 6.92394 60.4691 8.08416 60.4691 10.004C60.4691 11.8963 59.4887 13.0565 57.8732 13.0565ZM57.8732 4.99023C55.0839 4.99023 53.1094 7.06206 53.1094 10.004C53.1094 12.9184 55.0839 14.9902 57.8732 14.9902C60.6486 14.9902 62.6094 12.9184 62.6094 10.004C62.6094 7.06206 60.6486 4.99023 57.8732 4.99023Z" fill="black" fill-opacity="0.92"/>
-</g>
-<mask id="mask8_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask8_8587_60274)">
-<path d="M69.1794 9.45194H66.6233V7.02094H69.1794C70.2019 7.02094 70.7407 7.43532 70.7407 8.23644C70.7407 9.03756 70.2019 9.45194 69.1794 9.45194ZM69.2762 5.15625H64.5508V14.825H66.6233V11.3166H69.2762C71.473 11.3166 72.8133 10.1564 72.8133 8.23644C72.8133 6.3165 71.473 5.15625 69.2762 5.15625Z" fill="black" fill-opacity="0.92"/>
-</g>
-<mask id="mask9_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask9_8587_60274)">
-<path d="M86.8413 11.5786C86.4823 12.5179 85.7642 13.0565 84.7837 13.0565C83.1542 13.0565 82.16 11.8963 82.16 10.004C82.16 8.08416 83.1542 6.92394 84.7837 6.92394C85.7642 6.92394 86.4823 7.46261 86.8413 8.40183H89.0369C88.4984 6.33002 86.8827 4.99023 84.7837 4.99023C81.9942 4.99023 80.0195 7.06206 80.0195 10.004C80.0195 12.9184 81.9942 14.9902 84.7837 14.9902C86.8965 14.9902 88.5122 13.6366 89.0508 11.5786H86.8413Z" fill="black" fill-opacity="0.92"/>
-</g>
-<mask id="mask10_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask10_8587_60274)">
-<path d="M73.6484 5.15625L77.5033 14.825H79.6172L75.7624 5.15625H73.6484Z" fill="black" fill-opacity="0.92"/>
-</g>
-<mask id="mask11_8587_60274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="90" height="11">
-<path d="M0 4.99219H89.375V14.9922H0V4.99219Z" fill="white"/>
-</mask>
-<g mask="url(#mask11_8587_60274)">
-<path d="M3.64038 10.9989L4.95938 7.60106L6.27838 10.9989H3.64038ZM3.85422 5.15625L0 14.825H2.15505L2.9433 12.7946H6.97558L7.76371 14.825H9.91875L6.06453 5.15625H3.85422Z" fill="black" fill-opacity="0.92"/>
-</g>
-</g>
-</g>
-</g>
-</g>
-<defs>
-<clipPath id="clip0_8587_60274">
-<rect width="89.375" height="10" fill="white" transform="translate(0 5)"/>
-</clipPath>
-</defs>
-</svg>
diff --git a/app/components/base/icons/assets/vender/other/group.svg b/app/components/base/icons/assets/vender/other/group.svg
deleted file mode 100644
index 90f1e6b..0000000
--- a/app/components/base/icons/assets/vender/other/group.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="14" height="16" viewBox="0 0 14 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Group">
-<path id="Vector" d="M5.6475 8.0115L0.333496 5.05884V11.3335C0.333491 11.4524 0.365258 11.569 0.425506 11.6715C0.485754 11.7739 0.572294 11.8584 0.676163 11.9162L6.3335 15.0588V9.17684C6.33344 8.93907 6.26981 8.70565 6.14919 8.50075C6.02857 8.29586 5.85536 8.12694 5.6475 8.0115Z" fill="#354052"/>
-<path id="Vector_2" d="M7.66699 9.17684V15.0588L13.3243 11.9162C13.4282 11.8584 13.5147 11.7739 13.575 11.6715C13.6352 11.569 13.667 11.4524 13.667 11.3335V5.05884L8.35299 8.0115C8.14513 8.12694 7.97192 8.29586 7.8513 8.50075C7.73068 8.70565 7.66705 8.93907 7.66699 9.17684Z" fill="#676F83"/>
-<path id="Vector_3" d="M10.1913 2.34351C9.804 3.33351 8.588 4.00017 7 4.00017C5.412 4.00017 4.196 3.33351 3.80867 2.34351L1 3.90417L6.35267 6.87817C6.5507 6.98815 6.77348 7.04586 7 7.04586C7.22652 7.04586 7.4493 6.98815 7.64733 6.87817L13 3.90417L10.1913 2.34351Z" fill="#676F83"/>
-<path id="Vector_4" d="M7 2.66675C8.10457 2.66675 9 2.21903 9 1.66675C9 1.11446 8.10457 0.666748 7 0.666748C5.89543 0.666748 5 1.11446 5 1.66675C5 2.21903 5.89543 2.66675 7 2.66675Z" fill="#354052"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/other/openai.svg b/app/components/base/icons/assets/vender/other/openai.svg
deleted file mode 100644
index 5a9a93b..0000000
--- a/app/components/base/icons/assets/vender/other/openai.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<svg width="80" height="22" viewBox="0 0 80 22" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M25.1152 10.5767C25.1152 14.1738 27.4253 16.6818 30.6264 16.6818C33.8274 16.6818 36.1375 14.1738 36.1375 10.5767C36.1375 6.97961 33.8274 4.47156 30.6264 4.47156C27.4253 4.47156 25.1152 6.97961 25.1152 10.5767ZM34.0254 10.5767C34.0254 13.1507 32.6229 14.8173 30.6264 14.8173C28.6298 14.8173 27.2273 13.1507 27.2273 10.5767C27.2273 8.00263 28.6298 6.3361 30.6264 6.3361C32.6229 6.3361 34.0254 8.00263 34.0254 10.5767Z" fill="black"/>
-<path d="M42.0868 16.6819C44.5124 16.6819 45.8984 14.6358 45.8984 12.1773C45.8984 9.71871 44.5124 7.67267 42.0868 7.67267C40.9648 7.67267 40.1398 8.11818 39.5953 8.76169V7.83767H37.6152V19.4704H39.5953V15.5928C40.1398 16.2364 40.9648 16.6819 42.0868 16.6819ZM39.5458 11.9298C39.5458 10.2962 40.4698 9.40521 41.6908 9.40521C43.1264 9.40521 43.9019 10.5272 43.9019 12.1773C43.9019 13.8273 43.1264 14.9493 41.6908 14.9493C40.4698 14.9493 39.5458 14.0418 39.5458 12.4413V11.9298Z" fill="black"/>
-<path d="M51.2545 16.6819C52.987 16.6819 54.3565 15.7743 54.967 14.2563L53.2675 13.6128C53.0035 14.5038 52.228 14.9988 51.2545 14.9988C49.9839 14.9988 49.0929 14.0913 48.9444 12.6063H55.0165V11.9463C55.0165 9.57021 53.68 7.67267 51.172 7.67267C48.6639 7.67267 47.0469 9.63621 47.0469 12.1773C47.0469 14.8503 48.7794 16.6819 51.2545 16.6819ZM51.1555 9.3392C52.4095 9.3392 53.0035 10.1642 53.02 11.1212H49.0434C49.3404 9.94972 50.1324 9.3392 51.1555 9.3392Z" fill="black"/>
-<path d="M56.5039 16.5004H58.484V11.4182C58.484 10.1807 59.3915 9.52071 60.2825 9.52071C61.3715 9.52071 61.8005 10.2962 61.8005 11.3687V16.5004H63.7806V10.7912C63.7806 8.9267 62.6915 7.67267 60.8765 7.67267C59.7545 7.67267 58.979 8.18418 58.484 8.76169V7.83767H56.5039V16.5004Z" fill="black"/>
-<path d="M69.5799 4.65308L65.0918 16.5003H67.1873L68.1939 13.7943H73.309L74.332 16.5003H76.4605L71.9724 4.65308H69.5799ZM70.7349 6.99613L72.616 11.9462H68.8869L70.7349 6.99613Z" fill="black"/>
-<path d="M79.8581 4.6875H77.7461V16.5348H79.8581V4.6875Z" fill="black"/>
-<path d="M20.2769 9.00436C20.776 7.50627 20.6041 5.86517 19.8059 4.50251C18.6055 2.41247 16.1924 1.3372 13.8356 1.84321C12.7871 0.662057 11.2808 -0.00964523 9.70154 -2.00271e-05C7.29248 -0.00552014 5.155 1.54551 4.41386 3.83769C2.86626 4.15463 1.53042 5.12334 0.748717 6.49631C-0.460621 8.58085 -0.184928 11.2085 1.43073 12.9961C0.931596 14.4942 1.10348 16.1353 1.90168 17.4979C3.10208 19.588 5.51526 20.6632 7.87206 20.1572C8.91983 21.3384 10.4269 22.0101 12.0061 21.9998C14.4165 22.006 16.5547 20.4535 17.2958 18.1593C18.8434 17.8424 20.1793 16.8737 20.961 15.5007C22.1689 13.4161 21.8925 10.7905 20.2776 9.00298L20.2769 9.00436ZM12.0075 20.5622C11.0429 20.5635 10.1085 20.226 9.36809 19.6079C9.40178 19.59 9.46022 19.5577 9.49803 19.5343L13.8789 17.0043C14.103 16.8771 14.2405 16.6385 14.2391 16.3807V10.2048L16.0906 11.2738C16.1105 11.2835 16.1236 11.3027 16.1264 11.3247V16.4391C16.1236 18.7134 14.2818 20.5574 12.0075 20.5622ZM3.14952 16.7788C2.6662 15.9441 2.49225 14.9658 2.65795 14.0163C2.69026 14.0356 2.74732 14.0707 2.78789 14.094L7.16873 16.6241C7.3908 16.754 7.6658 16.754 7.88856 16.6241L13.2367 13.5358V15.6739C13.2381 15.6959 13.2278 15.7173 13.2106 15.731L8.78233 18.2879C6.80985 19.4236 4.29079 18.7485 3.15021 16.7788H3.14952ZM1.99656 7.21613C2.47782 6.38012 3.23752 5.74073 4.14229 5.40866C4.14229 5.44647 4.14023 5.51316 4.14023 5.55991V10.6207C4.13885 10.8778 4.27636 11.1164 4.4998 11.2436L9.84798 14.3312L7.9965 15.4003C7.97794 15.4127 7.95456 15.4147 7.93393 15.4058L3.50496 12.8469C1.53661 11.707 0.86147 9.18861 1.99587 7.21682L1.99656 7.21613ZM17.2085 10.7561L11.8603 7.66783L13.7118 6.59943C13.7304 6.58706 13.7537 6.585 13.7744 6.59393L18.2033 9.1508C20.1751 10.29 20.851 12.8125 19.7118 14.7843C19.2298 15.6189 18.4708 16.2583 17.5667 16.5911V11.379C17.5688 11.1219 17.432 10.884 17.2092 10.7561H17.2085ZM19.0511 7.98271C19.0187 7.96278 18.9617 7.9284 18.9211 7.90502L14.5403 5.37497C14.3182 5.24503 14.0432 5.24503 13.8204 5.37497L8.47226 8.46329V6.32512C8.47088 6.30311 8.4812 6.2818 8.49838 6.26805L12.9267 3.71325C14.8991 2.57541 17.4209 3.25261 18.5581 5.22578C19.0387 6.05905 19.2126 7.03463 19.0497 7.98271H19.0511ZM7.46574 11.7936L5.61357 10.7245C5.59363 10.7149 5.58057 10.6956 5.57782 10.6736V5.55922C5.5792 3.28218 7.42655 1.43689 9.7036 1.43826C10.6668 1.43826 11.5991 1.77652 12.3395 2.39253C12.3058 2.41041 12.2481 2.44272 12.2096 2.46609L7.82874 4.99615C7.60461 5.12334 7.46711 5.36122 7.46849 5.61904L7.46574 11.7922V11.7936ZM8.47157 9.62519L10.8538 8.24947L13.236 9.6245V12.3752L10.8538 13.7503L8.47157 12.3752V9.62519Z" fill="black"/>
-</svg>
diff --git a/app/components/base/icons/assets/vender/plugin/box-sparkle-fill.svg b/app/components/base/icons/assets/vender/plugin/box-sparkle-fill.svg
deleted file mode 100644
index 3ec651f..0000000
--- a/app/components/base/icons/assets/vender/plugin/box-sparkle-fill.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Icon">
-<path id="Vector" fill-rule="evenodd" clip-rule="evenodd" d="M11.3891 2.41987C11.6635 2.58871 11.749 2.94802 11.5802 3.22239L10.3324 5.25H11.0833C11.4055 5.25 11.6667 5.51117 11.6667 5.83334V11.6667C11.6667 12.311 11.1444 12.8333 10.5 12.8333H3.50001C2.85568 12.8333 2.33334 12.311 2.33334 11.6667V5.83334C2.33334 5.51117 2.59451 5.25 2.91668 5.25H8.96252L10.5865 2.61094C10.7554 2.33657 11.1147 2.25102 11.3891 2.41987ZM5.83334 7.58334C5.51118 7.58334 5.25001 7.84449 5.25001 8.16667C5.25001 8.48884 5.51118 8.75 5.83334 8.75H8.16668C8.48885 8.75 8.75001 8.48884 8.75001 8.16667C8.75001 7.84449 8.48885 7.58334 8.16668 7.58334H5.83334Z" fill="#676F83"/>
-<g id="Vector_2" opacity="0.5">
-<path d="M6.91257 1.79347C6.96898 1.76525 7.01477 1.71948 7.043 1.66303L7.32195 1.10508C7.42946 0.890105 7.73623 0.890105 7.84374 1.10508L8.12269 1.66303C8.15093 1.71948 8.19672 1.76525 8.25313 1.79347L8.81108 2.07245C9.0261 2.17994 9.0261 2.48672 8.81108 2.5942L8.25313 2.87318C8.19672 2.9014 8.15093 2.94717 8.12269 3.00362L7.84374 3.56158C7.73623 3.77655 7.42946 3.77655 7.32195 3.56158L7.043 3.00362C7.01477 2.94717 6.96898 2.9014 6.91257 2.87318L6.35461 2.5942C6.13965 2.48672 6.13965 2.17994 6.35461 2.07245L6.91257 1.79347Z" fill="#676F83"/>
-<path d="M3.80145 2.7657C3.85789 2.73748 3.90366 2.69171 3.93189 2.63526L4.11364 2.27174C4.22113 2.05677 4.5279 2.05677 4.63539 2.27174L4.81715 2.63526C4.84537 2.6917 4.89114 2.73748 4.94759 2.7657L5.3111 2.94745C5.52607 3.05494 5.52607 3.36172 5.3111 3.4692L4.94759 3.65096C4.89114 3.67919 4.84537 3.72495 4.81715 3.7814L4.63539 4.14491C4.5279 4.35988 4.22113 4.35988 4.11364 4.14491L3.93189 3.7814C3.90366 3.72495 3.85789 3.67919 3.80145 3.65096L3.43793 3.4692C3.22296 3.36172 3.22296 3.05494 3.43793 2.94745L3.80145 2.7657Z" fill="#676F83"/>
-</g>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/plugin/left-corner.svg b/app/components/base/icons/assets/vender/plugin/left-corner.svg
deleted file mode 100644
index 9b360e4..0000000
--- a/app/components/base/icons/assets/vender/plugin/left-corner.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg width="13" height="20" viewBox="0 0 13 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path id="Shape" d="M0 0H13V20C9.98017 20 7.26458 18.1615 6.14305 15.3576L0 0Z" fill="#F9FAFB"/>
-</svg>
diff --git a/app/components/base/icons/assets/vender/solid/files/file-zip.svg b/app/components/base/icons/assets/vender/solid/files/file-zip.svg
deleted file mode 100644
index 213606a..0000000
--- a/app/components/base/icons/assets/vender/solid/files/file-zip.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Icon">
-<path id="Vector" d="M3.99999 1.33325H7.99999V5.33325C7.99999 6.06963 8.59692 6.66659 9.33332 6.66659H13.3333V13.3333C13.3333 14.0697 12.7364 14.6666 12 14.6666H6.66666V13.3333H7.99999V11.9999H6.66666V10.6666H7.99999V9.33325H6.66666V7.99992H5.33332V9.33325H6.66666V10.6666H5.33332V11.9999H6.66666V13.3333H5.33332V14.6666H3.99999C3.26361 14.6666 2.66666 14.0697 2.66666 13.3333V2.66659C2.66666 1.93021 3.26361 1.33325 3.99999 1.33325Z" fill="#676F83"/>
-<path id="Vector_2" opacity="0.5" d="M12.9428 4.99993C13.0415 5.09868 13.1232 5.21133 13.1859 5.33327H9.33334V1.48071C9.45528 1.54338 9.56794 1.62504 9.66668 1.72379L12.9428 4.99993Z" fill="#676F83"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/solid/general/arrow-down-round-fill.svg b/app/components/base/icons/assets/vender/solid/general/arrow-down-round-fill.svg
deleted file mode 100644
index 9566fcc..0000000
--- a/app/components/base/icons/assets/vender/solid/general/arrow-down-round-fill.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="arrow-down-round-fill">
-<path id="Vector" d="M6.02913 6.23572C5.08582 6.23572 4.56482 7.33027 5.15967 8.06239L7.13093 10.4885C7.57922 11.0403 8.42149 11.0403 8.86986 10.4885L10.8411 8.06239C11.4359 7.33027 10.9149 6.23572 9.97158 6.23572H6.02913Z" fill="#101828"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/solid/general/github.svg b/app/components/base/icons/assets/vender/solid/general/github.svg
deleted file mode 100644
index c7b203d..0000000
--- a/app/components/base/icons/assets/vender/solid/general/github.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="Icon">
-<path id="Vector" d="M8 1C4.1325 1 1 4.1325 1 8C1 11.0975 3.00375 13.7137 5.78625 14.6413C6.13625 14.7025 6.2675 14.4925 6.2675 14.3088C6.2675 14.1425 6.25875 13.5913 6.25875 13.005C4.5 13.3288 4.045 12.5763 3.905 12.1825C3.82625 11.9812 3.485 11.36 3.1875 11.1937C2.9425 11.0625 2.5925 10.7387 3.17875 10.73C3.73 10.7212 4.12375 11.2375 4.255 11.4475C4.885 12.5062 5.89125 12.2088 6.29375 12.025C6.355 11.57 6.53875 11.2638 6.74 11.0887C5.1825 10.9137 3.555 10.31 3.555 7.6325C3.555 6.87125 3.82625 6.24125 4.2725 5.75125C4.2025 5.57625 3.9575 4.85875 4.3425 3.89625C4.3425 3.89625 4.92875 3.7125 6.2675 4.61375C6.8275 4.45625 7.4225 4.3775 8.0175 4.3775C8.6125 4.3775 9.2075 4.45625 9.7675 4.61375C11.1063 3.70375 11.6925 3.89625 11.6925 3.89625C12.0775 4.85875 11.8325 5.57625 11.7625 5.75125C12.2087 6.24125 12.48 6.8625 12.48 7.6325C12.48 10.3187 10.8438 10.9137 9.28625 11.0887C9.54 11.3075 9.75875 11.7275 9.75875 12.3837C9.75875 13.32 9.75 14.0725 9.75 14.3088C9.75 14.4925 9.88125 14.7113 10.2312 14.6413C11.6209 14.1721 12.8284 13.279 13.6839 12.0877C14.5393 10.8963 14.9996 9.46668 15 8C15 4.1325 11.8675 1 8 1Z" fill="#676F83"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/solid/mediaAndDevices/audio-support-icon.svg b/app/components/base/icons/assets/vender/solid/mediaAndDevices/audio-support-icon.svg
deleted file mode 100644
index cad145c..0000000
--- a/app/components/base/icons/assets/vender/solid/mediaAndDevices/audio-support-icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none">
-  <path d="M10.3567 3.56405L10.2334 3.84689C10.1432 4.05396 9.8568 4.05396 9.76655 3.84689L9.6433 3.56405C9.42355 3.05973 9.02775 2.6582 8.53385 2.43854L8.154 2.26961C7.94865 2.17826 7.94865 1.8794 8.154 1.78806L8.5126 1.62857C9.0192 1.40325 9.4221 0.986865 9.63805 0.465414L9.76465 0.159767C9.8529 -0.0532556 10.1471 -0.0532556 10.2353 0.159767L10.3619 0.465414C10.5779 0.986865 10.9808 1.40325 11.4874 1.62857L11.846 1.78806C12.0514 1.8794 12.0514 2.17826 11.846 2.26961L11.4662 2.43854C10.9723 2.6582 10.5764 3.05973 10.3567 3.56405ZM4.25 3H3.25V9H4.25V3ZM2 5H1V7H2V5ZM6.5 1H5.5V11H6.5V1ZM8.75 4H7.75V9H8.75V4ZM11 5H10V7H11V5Z" fill="#676F83"/>
-</svg>
\ No newline at end of file
diff --git a/app/components/base/icons/assets/vender/solid/mediaAndDevices/document-support-icon.svg b/app/components/base/icons/assets/vender/solid/mediaAndDevices/document-support-icon.svg
deleted file mode 100644
index d7c0978..0000000
--- a/app/components/base/icons/assets/vender/solid/mediaAndDevices/document-support-icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none">
-  <path d="M10.5 4V10.4966C10.5 10.7751 10.2776 11 10.0033 11H1.9967C1.72248 11 1.5 10.778 1.5 10.5041V1.4959C1.5 1.22766 1.72435 1 2.00111 1H7.4984L10.5 4ZM9.5 4.5H7V2H2.5V10H9.5V4.5ZM4 3.5H5.5V4.5H4V3.5ZM4 5.5H8V6.5H4V5.5ZM4 7.5H8V8.5H4V7.5Z" fill="#676F83"/>
-</svg>
\ No newline at end of file
diff --git a/app/components/base/icons/assets/vender/solid/mediaAndDevices/video-support-icon.svg b/app/components/base/icons/assets/vender/solid/mediaAndDevices/video-support-icon.svg
deleted file mode 100644
index f87aa02..0000000
--- a/app/components/base/icons/assets/vender/solid/mediaAndDevices/video-support-icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none">
-  <path d="M10.2334 4.3469L10.3567 4.06406C10.5764 3.55974 10.9723 3.15821 11.4662 2.93854L11.846 2.76961C12.0514 2.67827 12.0514 2.37941 11.846 2.28806L11.4874 2.12857C10.9808 1.90326 10.5779 1.48687 10.3619 0.965415L10.2353 0.659765C10.1471 0.446745 9.8529 0.446745 9.76465 0.659765L9.63805 0.965415C9.4221 1.48687 9.0192 1.90326 8.5126 2.12857L8.154 2.28806C7.94865 2.37941 7.94865 2.67827 8.154 2.76961L8.53385 2.93854C9.02775 3.15821 9.42355 3.55974 9.6433 4.06406L9.76655 4.3469C9.8568 4.55396 10.1432 4.55396 10.2334 4.3469ZM1.4959 1.5H7V2.5H4V9.5H8V4.5H9V5.5H10H11V10.0033C11 10.2776 10.7723 10.5 10.5041 10.5H1.4959C1.22203 10.5 1 10.2775 1 10.0033V1.9967C1 1.72238 1.22766 1.5 1.4959 1.5ZM2 2.5V3.5H3V2.5H2ZM2 4.5V5.5H3V4.5H2ZM2 6.5V7.5H3V6.5H2ZM9 6.5V7.5H10V6.5H9ZM2 8.5V9.5H3V8.5H2ZM9 8.5V9.5H10V8.5H9Z" fill="#676F83"/>
-</svg>
\ No newline at end of file
diff --git a/app/components/base/icons/assets/vender/workflow/agent.svg b/app/components/base/icons/assets/vender/workflow/agent.svg
deleted file mode 100644
index f30c0b4..0000000
--- a/app/components/base/icons/assets/vender/workflow/agent.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="agent">
-<g id="Vector">
-<path d="M14.7401 5.80454C14.5765 4.77996 14.1638 3.79808 13.5306 2.97273C12.8973 2.14738 12.0648 1.48568 11.1185 1.06589C10.1722 0.646098 9.12632 0.461106 8.08751 0.546487C7.05582 0.624753 6.04548 0.966277 5.17744 1.53548C4.3094 2.09758 3.58366 2.88024 3.09272 3.79808C2.59466 4.70881 2.33852 5.7405 2.33852 6.7793V7.22756L1.25703 9.3692C1.04357 9.80322 1.22145 10.3368 1.65547 10.5574L2.3314 10.8989V12.3006C2.3314 12.82 2.53063 13.3038 2.90061 13.6738C3.2706 14.0367 3.75442 14.243 4.27382 14.243H6.01702V14.7624C6.01702 15.1538 6.3372 15.4739 6.72853 15.4739C7.11986 15.4739 7.44004 15.1538 7.44004 14.7624V13.7094C7.44004 13.2185 7.04159 12.82 6.55065 12.82H4.27382C4.13864 12.82 4.00345 12.7631 3.91095 12.6706C3.81846 12.5781 3.76154 12.4429 3.76154 12.3077V10.5716C3.76154 10.2301 3.56943 9.92417 3.2706 9.77476L2.77254 9.52573L3.66904 7.73984C3.72596 7.61889 3.76154 7.4837 3.76154 7.34851V6.77219C3.76154 5.96818 3.96076 5.17129 4.34498 4.4669C4.72919 3.76251 5.28417 3.15772 5.9601 2.7237C6.63603 2.28968 7.41158 2.02643 8.20847 1.96239C9.00536 1.89835 9.81648 2.04066 10.5493 2.36795C11.2822 2.69524 11.9225 3.20042 12.4135 3.84077C12.8973 4.47402 13.2246 5.23533 13.3456 6.02511C13.4665 6.81488 13.3954 7.63312 13.125 8.38731C12.8617 9.12017 12.4206 9.78187 11.8585 10.3084C11.6735 10.4792 11.5668 10.7139 11.5668 10.9701V14.7624C11.5668 15.1538 11.887 15.4739 12.2783 15.4739C12.6696 15.4739 12.9898 15.1538 12.9898 14.7624V11.1978C13.6515 10.5432 14.1567 9.73918 14.4697 8.87114C14.8184 7.89637 14.918 6.83623 14.7615 5.81165L14.7401 5.80454Z" fill="white"/>
-<path d="M10.8055 7.99599C10.8909 7.83234 10.962 7.66158 11.0189 7.4837H11.6522C12.0435 7.4837 12.3637 7.16352 12.3637 6.77219C12.3637 6.38086 12.0435 6.06068 11.6522 6.06068H11.0189C10.9691 5.8828 10.898 5.71204 10.8055 5.54839L11.2537 5.10014C11.5312 4.82266 11.5312 4.3744 11.2537 4.09692C10.9762 3.81943 10.528 3.81943 10.2505 4.09692L9.80225 4.54517C9.6386 4.45267 9.46784 4.38863 9.28996 4.33171V3.69847C9.28996 3.30714 8.96978 2.98696 8.57845 2.98696C8.18712 2.98696 7.86694 3.30714 7.86694 3.69847V4.33171C7.68907 4.38152 7.5183 4.45267 7.35466 4.54517L6.90641 4.09692C6.62892 3.81943 6.18067 3.81943 5.90318 4.09692C5.62569 4.3744 5.62569 4.82266 5.90318 5.10014L6.35143 5.54839C6.26605 5.71204 6.1949 5.8828 6.13798 6.06068H5.50473C5.1134 6.06068 4.79323 6.38086 4.79323 6.77219C4.79323 7.16352 5.1134 7.4837 5.50473 7.4837H6.13798C6.18778 7.66158 6.25893 7.83234 6.35143 7.99599L5.90318 8.44424C5.62569 8.72172 5.62569 9.16997 5.90318 9.44746C6.04548 9.58976 6.22336 9.6538 6.40835 9.6538C6.59334 9.6538 6.77122 9.58265 6.91352 9.44746L7.36177 8.99921C7.52542 9.08459 7.69618 9.15574 7.87406 9.21267V9.84591C7.87406 10.2372 8.19424 10.5574 8.58557 10.5574C8.9769 10.5574 9.29708 10.2372 9.29708 9.84591V9.21267C9.47496 9.16286 9.64572 9.09171 9.80936 8.99921L10.2576 9.44746C10.3999 9.58976 10.5778 9.6538 10.7628 9.6538C10.9478 9.6538 11.1257 9.58265 11.268 9.44746C11.5454 9.16997 11.5454 8.72172 11.268 8.44424L10.8197 7.99599H10.8055ZM7.44004 6.77219C7.44004 6.14606 7.94521 5.64089 8.57134 5.64089C9.19747 5.64089 9.70264 6.14606 9.70264 6.77219C9.70264 7.39832 9.19747 7.90349 8.57134 7.90349C7.94521 7.90349 7.44004 7.39832 7.44004 6.77219Z" fill="white"/>
-</g>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/workflow/loop-end.svg b/app/components/base/icons/assets/vender/workflow/loop-end.svg
deleted file mode 100644
index cedacb9..0000000
--- a/app/components/base/icons/assets/vender/workflow/loop-end.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="ongoing">
-<path id="Vector" fill-rule="evenodd" clip-rule="evenodd" d="M8 2.75C5.10051 2.75 2.75 5.10051 2.75 8C2.75 10.8995 5.1005 13.25 8 13.25C8.41421 13.25 8.75 13.5858 8.75 14C8.75 14.4142 8.41421 14.75 8 14.75C4.27208 14.75 1.25 11.7279 1.25 8C1.25 4.27208 4.27208 1.25 8 1.25C8.41421 1.25 8.75 1.58579 8.75 2C8.75 2.41421 8.41421 2.75 8 2.75ZM10.3508 2.42715C10.5582 2.06861 11.017 1.94608 11.3755 2.15349C11.9971 2.51301 12.5556 2.96859 13.0311 3.49984C13.3073 3.8085 13.281 4.28264 12.9724 4.55887C12.6637 4.8351 12.1896 4.80882 11.9133 4.50016C11.5429 4.08625 11.1079 3.73153 10.6245 3.4519C10.2659 3.2445 10.1434 2.7857 10.3508 2.42715ZM8.13634 5.46967C8.42923 5.17678 8.9041 5.17678 9.197 5.46967L11.197 7.46967C11.4899 7.76256 11.4899 8.23744 11.197 8.53033L9.197 10.5303C8.9041 10.8232 8.42923 10.8232 8.13634 10.5303C7.84344 10.2374 7.84344 9.76256 8.13634 9.46967L8.85601 8.75H5.33333C4.91912 8.75 4.58333 8.41421 4.58333 8C4.58333 7.58579 4.91912 7.25 5.33333 7.25H8.85601L8.13634 6.53033C7.84344 6.23744 7.84344 5.76256 8.13634 5.46967ZM13.7414 6.09691C14.1478 6.01676 14.5422 6.28123 14.6224 6.68762C14.7062 7.1128 14.75 7.55166 14.75 8C14.75 8.44834 14.7062 8.88721 14.6224 9.31234C14.5422 9.71872 14.1478 9.98318 13.7414 9.90302C13.335 9.82287 13.0706 9.42845 13.1507 9.02206C13.2158 8.69213 13.25 8.35046 13.25 8C13.25 7.64954 13.2158 7.30787 13.1507 6.97785C13.0706 6.57146 13.335 6.17705 13.7414 6.09691ZM12.9723 11.4411C13.281 11.7173 13.3073 12.1915 13.0311 12.5002C12.5556 13.0314 11.9971 13.487 11.3756 13.8465C11.017 14.0539 10.5582 13.9314 10.3508 13.5729C10.1434 13.2143 10.2659 12.7556 10.6244 12.5481C11.1079 12.2685 11.5429 11.9138 11.9133 11.4999C12.1895 11.1912 12.6637 11.1649 12.9723 11.4411Z" fill="white"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/assets/vender/workflow/loop.svg b/app/components/base/icons/assets/vender/workflow/loop.svg
deleted file mode 100644
index 6692c4d..0000000
--- a/app/components/base/icons/assets/vender/workflow/loop.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="18" height="16" viewBox="0 0 18 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="loop">
-<path id="Vector" fill-rule="evenodd" clip-rule="evenodd" d="M2.02915 5.34506C3.50752 3.88498 5.9006 3.88498 7.37896 5.34506L8.99983 6.94588L10.6207 5.34506C12.0991 3.88499 14.4921 3.88498 15.9705 5.34506C17.454 6.81027 17.454 9.18971 15.9705 10.6549C14.4921 12.115 12.0991 12.115 10.6207 10.655L8.99983 9.05413L7.37896 10.655C5.9006 12.115 3.50753 12.115 2.02916 10.655C0.545627 9.18974 0.545611 6.81028 2.02915 5.34506ZM7.93251 8L6.32492 6.4123C5.4308 5.52924 3.97732 5.52923 3.08319 6.4123C2.19426 7.29026 2.19426 8.70975 3.0832 9.58772C3.97733 10.4708 5.4308 10.4707 6.32492 9.58771C6.32492 9.58772 6.32492 9.58771 6.32492 9.58771L7.93251 8ZM10.0671 8L11.6747 9.5877C11.6747 9.58769 11.6747 9.58771 11.6747 9.5877C12.5688 10.4707 14.0223 10.4707 14.9165 9.58773C15.8054 8.70975 15.8054 7.29024 14.9165 6.41229C14.0223 5.52923 12.5689 5.52924 11.6747 6.4123C11.6747 6.4123 11.6747 6.41229 11.6747 6.4123L10.0671 8Z" fill="white"/>
-</g>
-</svg>
diff --git a/app/components/base/icons/script.mjs b/app/components/base/icons/script.mjs
deleted file mode 100644
index 7f9d7b7..0000000
--- a/app/components/base/icons/script.mjs
+++ /dev/null
@@ -1,174 +0,0 @@
-import path from 'node:path'
-import { access, appendFile, mkdir, open, readdir, rm, writeFile } from 'node:fs/promises'
-import { fileURLToPath } from 'node:url'
-import { parseXml } from '@rgrove/parse-xml'
-import { camelCase, template } from 'lodash-es'
-
-const __dirname = path.dirname(fileURLToPath(import.meta.url))
-
-const generateDir = async (currentPath) => {
-  try {
-    await mkdir(currentPath, { recursive: true })
-  }
-  catch (err) {
-    console.error(err.message)
-  }
-}
-const processSvgStructure = (svgStructure, replaceFillOrStrokeColor) => {
-  if (svgStructure?.children.length) {
-    svgStructure.children = svgStructure.children.filter(c => c.type !== 'text')
-
-    svgStructure.children.forEach((child) => {
-      if (child?.name === 'path' && replaceFillOrStrokeColor) {
-        if (child?.attributes?.stroke)
-          child.attributes.stroke = 'currentColor'
-
-        if (child?.attributes.fill)
-          child.attributes.fill = 'currentColor'
-      }
-      if (child?.children.length)
-        processSvgStructure(child, replaceFillOrStrokeColor)
-    })
-  }
-}
-const generateSvgComponent = async (fileHandle, entry, pathList, replaceFillOrStrokeColor) => {
-  const currentPath = path.resolve(__dirname, 'src', ...pathList.slice(2))
-
-  try {
-    await access(currentPath)
-  }
-  catch {
-    await generateDir(currentPath)
-  }
-
-  const svgString = await fileHandle.readFile({ encoding: 'utf8' })
-  const svgJson = parseXml(svgString).toJSON()
-  const svgStructure = svgJson.children[0]
-  processSvgStructure(svgStructure, replaceFillOrStrokeColor)
-  const prefixFileName = camelCase(entry.split('.')[0])
-  const fileName = prefixFileName.charAt(0).toUpperCase() + prefixFileName.slice(1)
-  const svgData = {
-    icon: svgStructure,
-    name: fileName,
-  }
-
-  const componentRender = template(`
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './<%= svgName %>.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = '<%= svgName %>'
-
-export default Icon
-`.trim())
-
-  await writeFile(path.resolve(currentPath, `${fileName}.json`), JSON.stringify(svgData, '', '\t'))
-  await writeFile(path.resolve(currentPath, `${fileName}.tsx`), `${componentRender({ svgName: fileName })}\n`)
-
-  const indexingRender = template(`
-export { default as <%= svgName %> } from './<%= svgName %>'
-`.trim())
-
-  await appendFile(path.resolve(currentPath, 'index.ts'), `${indexingRender({ svgName: fileName })}\n`)
-}
-
-const generateImageComponent = async (entry, pathList) => {
-  const currentPath = path.resolve(__dirname, 'src', ...pathList.slice(2))
-
-  try {
-    await access(currentPath)
-  }
-  catch {
-    await generateDir(currentPath)
-  }
-
-  const prefixFileName = camelCase(entry.split('.')[0])
-  const fileName = prefixFileName.charAt(0).toUpperCase() + prefixFileName.slice(1)
-
-  const componentCSSRender = template(`
-.wrapper {
-  display: inline-flex;
-  background: url(<%= assetPath %>) center center no-repeat;
-  background-size: contain;
-}
-`.trim())
-
-  await writeFile(path.resolve(currentPath, `${fileName}.module.css`), `${componentCSSRender({ assetPath: path.posix.join('~@/app/components/base/icons/assets', ...pathList.slice(2), entry) })}\n`)
-
-  const componentRender = template(`
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import cn from '@/utils/classnames'
-import s from './<%= fileName %>.module.css'
-
-const Icon = (
-  {
-    ref,
-    className,
-    ...restProps
-  }: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> & {
-    ref?: React.RefObject<HTMLSpanElement>;
-  },
-) => <span className={cn(s.wrapper, className)} {...restProps} ref={ref} />
-
-Icon.displayName = '<%= fileName %>'
-
-export default Icon
-`.trim())
-
-  await writeFile(path.resolve(currentPath, `${fileName}.tsx`), `${componentRender({ fileName })}\n`)
-
-  const indexingRender = template(`
-export { default as <%= fileName %> } from './<%= fileName %>'
-`.trim())
-
-  await appendFile(path.resolve(currentPath, 'index.ts'), `${indexingRender({ fileName })}\n`)
-}
-
-const walk = async (entry, pathList, replaceFillOrStrokeColor) => {
-  const currentPath = path.resolve(...pathList, entry)
-  let fileHandle
-
-  try {
-    fileHandle = await open(currentPath)
-    const stat = await fileHandle.stat()
-
-    if (stat.isDirectory()) {
-      const files = await readdir(currentPath)
-
-      for (const file of files)
-        await walk(file, [...pathList, entry], replaceFillOrStrokeColor)
-    }
-
-    if (stat.isFile() && /.+\.svg$/g.test(entry))
-      await generateSvgComponent(fileHandle, entry, pathList, replaceFillOrStrokeColor)
-
-    if (stat.isFile() && /.+\.png$/g.test(entry))
-      await generateImageComponent(entry, pathList)
-  }
-  finally {
-    fileHandle?.close()
-  }
-}
-
-(async () => {
-  await rm(path.resolve(__dirname, 'src'), { recursive: true, force: true })
-  await walk('public', [__dirname, 'assets'])
-  await walk('vender', [__dirname, 'assets'], true)
-  await walk('image', [__dirname, 'assets'])
-})()
diff --git a/app/components/base/icons/src/public/billing/ArCube1.json b/app/components/base/icons/src/public/billing/ArCube1.json
deleted file mode 100644
index 89d9786..0000000
--- a/app/components/base/icons/src/public/billing/ArCube1.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "28",
-			"height": "28",
-			"viewBox": "0 0 28 28",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M14.0002 14V23.9166M14.0002 14L5.25 9.07806M14.0002 14L22.4731 9.2338M23.625 9.95052V18.0493C23.625 18.8924 23.1703 19.6697 22.4356 20.0831L15.1439 24.1846C14.4336 24.5842 13.5663 24.5842 12.8561 24.1846L5.56439 20.0831C4.82967 19.6697 4.375 18.8924 4.375 18.0493V9.95052C4.375 9.10756 4.82967 8.33012 5.56439 7.91684L12.8561 3.81529C13.5663 3.41574 14.4336 3.41574 15.1439 3.81529L22.4356 7.91684C23.1703 8.33012 23.625 9.10756 23.625 9.95052Z",
-					"stroke": "#101828",
-					"stroke-width": "1.5",
-					"stroke-linecap": "round",
-					"stroke-linejoin": "round"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "ArCube1"
-}
diff --git a/app/components/base/icons/src/public/billing/ArCube1.tsx b/app/components/base/icons/src/public/billing/ArCube1.tsx
deleted file mode 100644
index dfd3c41..0000000
--- a/app/components/base/icons/src/public/billing/ArCube1.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './ArCube1.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'ArCube1'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/Asterisk.json b/app/components/base/icons/src/public/billing/Asterisk.json
deleted file mode 100644
index d4a2e91..0000000
--- a/app/components/base/icons/src/public/billing/Asterisk.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "28",
-			"height": "28",
-			"viewBox": "0 0 28 28",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "asterisk"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M14.0033 3.20837V24.7917M4.65747 8.60421L23.3492 19.3959M4.6586 19.3959L23.3503 8.60421",
-							"stroke": "#101828",
-							"stroke-width": "1.5",
-							"stroke-linecap": "round"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "Asterisk"
-}
diff --git a/app/components/base/icons/src/public/billing/Asterisk.tsx b/app/components/base/icons/src/public/billing/Asterisk.tsx
deleted file mode 100644
index 71b778b..0000000
--- a/app/components/base/icons/src/public/billing/Asterisk.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Asterisk.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Asterisk'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/AwsMarketplace.json b/app/components/base/icons/src/public/billing/AwsMarketplace.json
deleted file mode 100644
index 8aeb93f..0000000
--- a/app/components/base/icons/src/public/billing/AwsMarketplace.json
+++ /dev/null
@@ -1,179 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "126",
-			"height": "24",
-			"viewBox": "0 0 126 24",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"clip-path": "url(#clip0_394_42756)"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M47.3963 14.5593V8.71609C47.3963 8.14631 47.2869 7.73413 47.0682 7.45531C46.8494 7.1886 46.5091 7.04313 46.0473 7.04313C45.2209 7.04313 44.3824 7.29771 43.5438 7.80687C43.556 7.89173 43.556 7.97659 43.556 8.06145C43.556 8.14631 43.556 8.2433 43.556 8.32816V14.5351H41.8667V8.69184C41.8667 8.12207 41.7573 7.70989 41.5386 7.43106C41.3198 7.16436 40.9795 7.01888 40.5177 7.01888C39.6549 7.01888 38.8284 7.27346 38.0385 7.7705V14.523H36.3492V5.9157H37.759L37.9291 6.77642C39.0229 6.0248 40.0802 5.66112 41.1132 5.66112C42.1705 5.66112 42.8875 6.06117 43.2521 6.86128C44.3702 6.06117 45.5004 5.66112 46.6185 5.66112C47.3963 5.66112 48.004 5.87933 48.4172 6.32788C48.8425 6.7643 49.0491 7.39469 49.0491 8.20693V14.523H47.3963V14.5593Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M56.0492 14.5593L55.9156 13.6744C55.5023 14.0259 55.0527 14.2926 54.5666 14.4866C54.0683 14.6806 53.5822 14.7775 53.0961 14.7775C52.294 14.7775 51.6498 14.5472 51.1637 14.0865C50.6776 13.6259 50.4346 13.0197 50.4346 12.2439C50.4346 11.4195 50.7262 10.7527 51.3217 10.2678C51.9172 9.77078 52.7072 9.52832 53.7037 9.52832C54.36 9.52832 55.077 9.62531 55.8426 9.81927V8.70397C55.8426 8.09782 55.709 7.6614 55.4294 7.41894C55.1499 7.16436 54.6759 7.04313 54.0075 7.04313C53.0474 7.04313 52.0509 7.21285 51.0179 7.56441V6.37637C51.4311 6.15816 51.9294 6.00056 52.5127 5.87933C53.1082 5.7581 53.7037 5.69749 54.2992 5.69749C55.3808 5.69749 56.1708 5.9157 56.6812 6.36425C57.1916 6.81279 57.4468 7.49168 57.4468 8.41302V14.5593H56.0492ZM53.4971 13.5046C54.2627 13.5046 55.0527 13.2137 55.8426 12.6439V10.9103C55.2471 10.7649 54.6516 10.6921 54.044 10.6921C52.7679 10.6921 52.1238 11.1892 52.1238 12.1711C52.1238 12.5954 52.2453 12.9349 52.4763 13.1652C52.7193 13.3834 53.0596 13.5046 53.4971 13.5046Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M59.3792 14.5593V5.95207H60.7889L60.9712 7.22497C61.2872 6.88553 61.5788 6.61883 61.8584 6.43698C62.1379 6.25514 62.4053 6.10966 62.6969 6.0248C62.9764 5.93994 63.2924 5.89145 63.6206 5.89145C63.8393 5.89145 64.0702 5.90357 64.3133 5.93994V7.46743C63.9487 7.41894 63.6449 7.39469 63.3896 7.39469C62.4782 7.39469 61.7004 7.6614 61.0563 8.20693V14.5593H59.3792Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M65.3584 14.5593V2H67.0477V9.71017L70.7057 5.96419H72.7596L68.6762 10.0496L73.027 14.5593H70.9002L67.0355 10.486V14.5593H65.3584Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M74.5704 10.6194C74.5947 11.5892 74.8378 12.3166 75.2996 12.7773C75.7614 13.2379 76.4663 13.4683 77.4385 13.4683C78.3378 13.4683 79.2493 13.2985 80.1729 12.947V14.1472C79.3587 14.5836 78.3621 14.8139 77.1833 14.8139C75.7857 14.8139 74.7284 14.426 74.0235 13.6622C73.3065 12.8985 72.954 11.7589 72.954 10.2557C72.954 8.81307 73.3065 7.69776 74.0235 6.90978C74.7405 6.12179 75.7371 5.70961 77.0131 5.70961C78.0948 5.70961 78.9212 6.01268 79.4924 6.61883C80.0757 7.22497 80.3552 8.0857 80.3552 9.18888C80.3552 9.72229 80.3066 10.2072 80.2215 10.6315H74.5704V10.6194ZM76.9159 6.97039C76.1989 6.97039 75.6399 7.1886 75.251 7.60078C74.8499 8.02508 74.6312 8.65547 74.5704 9.49195H78.8118C78.824 9.40709 78.824 9.2495 78.824 9.05553C78.824 8.36452 78.666 7.84324 78.3379 7.49168C78.0219 7.15223 77.5479 6.97039 76.9159 6.97039Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M86.9421 14.3532C86.3831 14.5715 85.7511 14.6806 85.0584 14.6806C83.4421 14.6806 82.64 13.8804 82.64 12.2681V7.27346H81.0722V6.1824L82.6886 5.97631L82.9438 3.52749H84.3171V5.93994H86.8692V7.26134H84.3171V12.1832C84.3171 12.6075 84.4143 12.8985 84.5966 13.0682C84.7789 13.2379 85.107 13.3228 85.5567 13.3228C86.0185 13.3228 86.4803 13.2622 86.93 13.1531V14.3532H86.9421Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M88.0967 5.95207H89.5064L89.6644 6.83704C90.5273 6.0733 91.4874 5.69749 92.5447 5.69749C93.6506 5.69749 94.5135 6.09754 95.1454 6.89765C95.7774 7.69776 96.0933 8.7767 96.0933 10.1466C96.0933 11.5407 95.7531 12.656 95.0846 13.4925C94.4162 14.329 93.5291 14.7533 92.411 14.7533C91.3901 14.7533 90.5151 14.4139 89.7738 13.7471V18.0628H88.0967V5.95207ZM92.0585 7.05525C91.2564 7.05525 90.4908 7.30983 89.7738 7.83112V12.5712C90.5151 13.1167 91.2564 13.3834 92.0221 13.3834C93.5898 13.3834 94.3676 12.3287 94.3676 10.2315C94.3676 9.15251 94.1732 8.36453 93.7964 7.84324C93.4318 7.32196 92.8485 7.05525 92.0585 7.05525Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M100.711 14.4381C100.335 14.5715 99.9337 14.6442 99.484 14.6442C98.8885 14.6442 98.4267 14.4745 98.1107 14.1229C97.7948 13.7835 97.6368 13.2864 97.6368 12.6439V2H99.326V12.5348C99.326 12.7894 99.3746 12.9834 99.484 13.1046C99.5934 13.2258 99.7757 13.2864 100.019 13.2864C100.25 13.2864 100.481 13.2743 100.711 13.2379V14.4381Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M107.225 14.5593L107.092 13.6744C106.679 14.0259 106.229 14.2926 105.743 14.4866C105.245 14.6806 104.758 14.7775 104.272 14.7775C103.47 14.7775 102.826 14.5472 102.34 14.0865C101.854 13.6259 101.611 13.0197 101.611 12.2439C101.611 11.4195 101.902 10.7527 102.498 10.2678C103.093 9.77078 103.883 9.52832 104.88 9.52832C105.536 9.52832 106.253 9.62531 107.019 9.81927V8.70397C107.019 8.09782 106.885 7.6614 106.606 7.41894C106.326 7.16436 105.852 7.04313 105.184 7.04313C104.224 7.04313 103.227 7.21285 102.194 7.56441V6.37637C102.607 6.15816 103.106 6.00056 103.689 5.87933C104.284 5.7581 104.88 5.69749 105.475 5.69749C106.557 5.69749 107.347 5.9157 107.857 6.36425C108.368 6.81279 108.623 7.49168 108.623 8.41302V14.5593H107.225ZM104.673 13.5046C105.439 13.5046 106.229 13.2137 107.019 12.6439V10.9103C106.423 10.7649 105.828 10.6921 105.22 10.6921C103.944 10.6921 103.3 11.1892 103.3 12.1711C103.3 12.5954 103.422 12.9349 103.652 13.1652C103.896 13.3834 104.236 13.5046 104.673 13.5046Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M116.571 14.232C115.915 14.5715 115.149 14.7412 114.286 14.7412C112.95 14.7412 111.929 14.3532 111.212 13.5895C110.507 12.8258 110.142 11.7226 110.142 10.2678C110.142 8.82519 110.507 7.72201 111.236 6.93402C111.965 6.14603 112.998 5.7581 114.335 5.7581C115.101 5.7581 115.805 5.9157 116.474 6.23089V7.43106C115.83 7.22497 115.198 7.12799 114.566 7.12799C113.618 7.12799 112.925 7.37045 112.512 7.85536C112.087 8.34028 111.88 9.10402 111.88 10.1587V10.3769C111.88 11.4074 112.099 12.159 112.512 12.6439C112.937 13.1288 113.606 13.3713 114.529 13.3713C115.137 13.3713 115.805 13.2622 116.535 13.0318V14.232H116.571Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M118.965 10.6194C118.99 11.5892 119.233 12.3166 119.694 12.7773C120.156 13.2379 120.861 13.4683 121.833 13.4683C122.733 13.4683 123.644 13.2985 124.568 12.947V14.1472C123.754 14.5836 122.757 14.8139 121.578 14.8139C120.181 14.8139 119.123 14.426 118.418 13.6622C117.701 12.8985 117.349 11.7589 117.349 10.2557C117.349 8.81307 117.701 7.69776 118.418 6.90978C119.135 6.12179 120.132 5.70961 121.408 5.70961C122.49 5.70961 123.316 6.01268 123.887 6.61883C124.471 7.22497 124.75 8.0857 124.75 9.18888C124.75 9.72229 124.701 10.2072 124.616 10.6315H118.965V10.6194ZM121.311 6.97039C120.594 6.97039 120.035 7.1886 119.646 7.60078C119.245 8.02508 119.026 8.65547 118.965 9.49195H123.207C123.219 9.40709 123.219 9.2495 123.219 9.05553C123.219 8.36452 123.061 7.84324 122.733 7.49168C122.405 7.15223 121.931 6.97039 121.311 6.97039Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M27.0036 14.8139C26.4567 14.8139 25.922 14.7533 25.3994 14.6321C24.8768 14.5108 24.4758 14.3775 24.1962 14.2199C24.0261 14.1229 23.9167 14.0259 23.8803 13.9289C23.8317 13.832 23.8195 13.735 23.8195 13.638V13.1167C23.8195 12.8985 23.8924 12.7894 24.0504 12.7894C24.1112 12.7894 24.1719 12.8015 24.2449 12.8258C24.3056 12.85 24.4029 12.8864 24.5122 12.9349C24.8647 13.0925 25.2414 13.2137 25.6546 13.2985C26.0678 13.3834 26.481 13.4198 26.8942 13.4198C27.5505 13.4198 28.0487 13.3107 28.4133 13.0803C28.7658 12.85 28.9481 12.5227 28.9481 12.0984C28.9481 11.8074 28.8508 11.565 28.6686 11.371C28.4862 11.177 28.1338 10.9952 27.6234 10.8255L26.1164 10.3527C25.3508 10.1102 24.8039 9.75866 24.4515 9.29799C24.1112 8.83732 23.9289 8.34028 23.9289 7.79475C23.9289 7.35832 24.0261 6.97039 24.2084 6.64307C24.3907 6.31575 24.6459 6.0248 24.9497 5.79447C25.2536 5.56413 25.6182 5.38229 26.0313 5.26106C26.4446 5.13983 26.8821 5.07922 27.3439 5.07922C27.5748 5.07922 27.8057 5.09134 28.0487 5.12771C28.2797 5.16408 28.5106 5.20045 28.7172 5.24894C28.9238 5.29743 29.1304 5.34592 29.3127 5.40654C29.495 5.46715 29.6408 5.52777 29.7502 5.58838C29.896 5.67324 29.9932 5.7581 30.054 5.84296C30.1148 5.92782 30.1391 6.03693 30.1391 6.1824V6.66732C30.1391 6.88553 30.0661 6.99464 29.9082 6.99464C29.8231 6.99464 29.6894 6.95827 29.5071 6.87341C28.9116 6.6067 28.2432 6.47335 27.514 6.47335C26.9185 6.47335 26.4567 6.57033 26.1286 6.7643C25.8004 6.95827 25.6425 7.26134 25.6425 7.68564C25.6425 7.97659 25.7397 8.21905 25.9463 8.42514C26.1529 8.61911 26.5296 8.81307 27.0887 8.99492L28.5592 9.46771C29.3127 9.71017 29.8474 10.0375 30.1634 10.4618C30.4793 10.8861 30.6495 11.371 30.6495 11.9165C30.6495 12.3651 30.5644 12.7651 30.3821 13.1167C30.1998 13.4683 29.9446 13.7835 29.6286 14.038C29.3127 14.2926 28.9238 14.4866 28.4741 14.6199C28.0244 14.7412 27.5383 14.8139 27.0036 14.8139ZM13.6718 14.5351C13.4895 14.5351 13.3558 14.4987 13.2707 14.4381C13.1856 14.3775 13.1127 14.232 13.052 14.0259L10.6214 6.01268C10.5606 5.80659 10.5363 5.67324 10.5363 5.6005C10.5363 5.43078 10.6214 5.34592 10.7915 5.34592H11.8124C12.0068 5.34592 12.1405 5.38229 12.2256 5.4429C12.2985 5.50352 12.3714 5.64899 12.4322 5.85508L14.1822 12.7045L15.7742 5.85508C15.8228 5.64899 15.8836 5.51564 15.9687 5.4429C16.0538 5.38229 16.1874 5.34592 16.3819 5.34592H17.2204C17.4149 5.34592 17.5486 5.38229 17.6336 5.4429C17.7187 5.50352 17.7795 5.64899 17.8281 5.85508L19.4687 12.8015L21.2674 5.85508C21.3281 5.64899 21.4011 5.51564 21.474 5.4429C21.5469 5.38229 21.6927 5.34592 21.8872 5.34592H22.8473C23.0174 5.34592 23.1025 5.43078 23.1025 5.6005C23.1025 5.64899 23.0903 5.69749 23.0903 5.7581C23.0781 5.81871 23.0538 5.90357 23.0174 6.01268L20.5138 14.0259C20.4531 14.232 20.3802 14.3654 20.2951 14.4381C20.21 14.4987 20.0763 14.5351 19.894 14.5351H19.0069C18.8124 14.5351 18.6787 14.4987 18.5937 14.426C18.5086 14.3532 18.4478 14.2199 18.3992 14.0138L16.7829 7.3462L15.1787 14.0138C15.1301 14.2199 15.0693 14.3532 14.9842 14.426C14.8992 14.4987 14.7655 14.5351 14.571 14.5351H13.6718ZM5.32267 13.4077C5.66296 13.4077 6.0154 13.347 6.39214 13.2137C6.76888 13.0925 7.09701 12.8621 7.37653 12.5469C7.54667 12.353 7.6682 12.1347 7.72897 11.8802C7.78973 11.6377 7.82619 11.3346 7.82619 10.9831V10.5466C7.52237 10.4739 7.20639 10.4133 6.86611 10.3769C6.53797 10.3406 6.20984 10.3163 5.89387 10.3163C5.20114 10.3163 4.69072 10.4497 4.35044 10.7285C4.01015 11.0073 3.84001 11.4074 3.84001 11.9287C3.84001 12.4136 3.96154 12.7773 4.21675 13.0197C4.49627 13.2864 4.84871 13.4077 5.32267 13.4077ZM9.53976 11.8317C9.53976 12.2196 9.57622 12.5227 9.66129 12.753C9.73421 12.9834 9.85574 13.2258 10.0016 13.4925C10.0502 13.5774 10.0745 13.6501 10.0745 13.7228C10.0745 13.832 10.0137 13.9289 9.88005 14.0259L9.21163 14.4866C9.11441 14.5472 9.02934 14.5715 8.94427 14.5715C8.83489 14.5715 8.73767 14.523 8.64044 14.426C8.49461 14.2805 8.37308 14.1229 8.2637 13.9411C8.16647 13.7713 8.0571 13.5653 7.94772 13.3349C7.13347 14.2926 6.11262 14.7654 4.89732 14.7654C4.0223 14.7654 3.32959 14.523 2.83131 14.0259C2.32089 13.5289 2.06567 12.8621 2.06567 12.0378C2.06567 11.1528 2.38165 10.4497 3.01361 9.90413C3.64556 9.37073 4.49627 9.0919 5.55358 9.0919C5.90602 9.0919 6.27061 9.11614 6.64735 9.17676C7.02409 9.22525 7.42514 9.31011 7.83834 9.40709V8.64335C7.83834 7.85536 7.68036 7.30983 7.35222 6.98251C7.02409 6.66732 6.46506 6.4976 5.66296 6.4976C5.29837 6.4976 4.92163 6.54609 4.54488 6.63095C4.16814 6.71581 3.7914 6.83704 3.42681 6.98251C3.25667 7.05525 3.13514 7.10374 3.06222 7.11587C2.9893 7.12799 2.94069 7.14011 2.90423 7.14011C2.75839 7.14011 2.68548 7.031 2.68548 6.81279V6.30363C2.68548 6.13391 2.70978 6.01268 2.75839 5.93994C2.80701 5.86721 2.90423 5.79447 3.05007 5.72173C3.41466 5.53989 3.85216 5.38229 4.36259 5.24894C4.87301 5.11559 5.40775 5.05497 5.97894 5.05497C7.21854 5.05497 8.11786 5.3338 8.70121 5.90357C9.2724 6.46123 9.56407 7.30983 9.56407 8.44938V11.8317H9.53976Z",
-							"fill": "white"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M28.9723 19.8449C25.5573 22.3665 20.5989 23.7 16.3332 23.7C10.3539 23.7 4.97014 21.4936 0.886731 17.8204C0.570753 17.5294 0.850272 17.1415 1.23917 17.3597C5.63855 19.9177 11.0709 21.4451 16.6978 21.4451C20.4895 21.4451 24.658 20.6572 28.4862 19.0448C29.0573 18.8023 29.5313 19.4327 28.9723 19.8449Z",
-							"fill": "#FF9900"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "M30.3942 18.2205C29.9567 17.6628 27.5018 17.9537 26.3958 18.0871C26.0677 18.1235 26.0069 17.8325 26.3108 17.6264C28.2674 16.2565 31.4758 16.6566 31.8525 17.1051C32.2293 17.5658 31.7553 20.7784 29.9202 22.3059C29.6407 22.5362 29.3733 22.415 29.4949 22.0998C29.9081 21.0815 30.8317 18.7902 30.3942 18.2205Z",
-							"fill": "#FF9900"
-						},
-						"children": []
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "clipPath",
-						"attributes": {
-							"id": "clip0_394_42756"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "rect",
-								"attributes": {
-									"width": "124.5",
-									"height": "24",
-									"fill": "white",
-									"transform": "translate(0.75)"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "AwsMarketplace"
-}
diff --git a/app/components/base/icons/src/public/billing/AwsMarketplace.tsx b/app/components/base/icons/src/public/billing/AwsMarketplace.tsx
deleted file mode 100644
index 7ea4e14..0000000
--- a/app/components/base/icons/src/public/billing/AwsMarketplace.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './AwsMarketplace.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'AwsMarketplace'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/Azure.json b/app/components/base/icons/src/public/billing/Azure.json
deleted file mode 100644
index fb6a9b9..0000000
--- a/app/components/base/icons/src/public/billing/Azure.json
+++ /dev/null
@@ -1,193 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "21",
-			"height": "20",
-			"viewBox": "0 0 21 20",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Group 5"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M7.08403 0.812966H12.8543L6.86419 18.5609C6.80263 18.7433 6.68542 18.9018 6.52907 19.0141C6.37271 19.1263 6.18509 19.1867 5.99261 19.1868H1.50193C1.35609 19.1868 1.21234 19.1521 1.08258 19.0855C0.952814 19.019 0.840765 18.9225 0.755699 18.804C0.670633 18.6855 0.614995 18.5485 0.593389 18.4043C0.571782 18.2601 0.584829 18.1128 0.631448 17.9746L6.21222 1.43879C6.27376 1.25634 6.39099 1.09779 6.54739 0.985482C6.70379 0.873171 6.89148 0.812976 7.08403 0.812966Z",
-							"fill": "url(#paint0_linear_644_3772)"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_2",
-							"d": "M15.469 12.7173H6.31874C6.23367 12.7173 6.15054 12.7428 6.08019 12.7906C6.00984 12.8384 5.95552 12.9063 5.92431 12.9855C5.8931 13.0646 5.88644 13.1513 5.90521 13.2343C5.92398 13.3173 5.96731 13.3927 6.02954 13.4506L11.9093 18.9386C12.0805 19.0983 12.3059 19.187 12.54 19.187H17.7212L15.469 12.7173Z",
-							"fill": "#0078D4"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_3",
-							"d": "M7.08432 0.813056C6.88967 0.812309 6.69988 0.873821 6.54267 0.988606C6.38547 1.10339 6.26908 1.26543 6.21052 1.45107L0.638609 17.9596C0.588854 18.0983 0.573233 18.2469 0.593069 18.3929C0.612904 18.5389 0.667613 18.678 0.752567 18.7984C0.83752 18.9188 0.950219 19.0169 1.08113 19.0845C1.21204 19.1522 1.35731 19.1873 1.50466 19.1869H6.11124C6.28281 19.1562 6.44316 19.0806 6.57593 18.9676C6.7087 18.8547 6.80911 18.7086 6.86692 18.5442L7.97807 15.2695L11.9471 18.9715C12.1134 19.109 12.3221 19.1851 12.5379 19.1869H17.6998L15.4359 12.7172L8.83614 12.7188L12.8754 0.813056H7.08432Z",
-							"fill": "url(#paint1_linear_644_3772)"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_4",
-							"d": "M14.4539 1.43799C14.3925 1.25583 14.2754 1.09755 14.1193 0.985434C13.9631 0.87332 13.7757 0.813027 13.5835 0.813049H7.15259C7.34482 0.81306 7.53221 0.873366 7.68837 0.985475C7.84453 1.09758 7.96159 1.25585 8.02307 1.43799L13.6041 17.9744C13.6507 18.1126 13.6638 18.26 13.6422 18.4042C13.6206 18.5485 13.565 18.6856 13.4799 18.8041C13.3949 18.9226 13.2828 19.0191 13.153 19.0857C13.0232 19.1523 12.8795 19.1871 12.7336 19.1871H19.1647C19.3105 19.187 19.4543 19.1523 19.584 19.0856C19.7138 19.019 19.8258 18.9225 19.9109 18.804C19.9959 18.6855 20.0515 18.5484 20.0731 18.4042C20.0947 18.2599 20.0816 18.1126 20.0349 17.9744L14.4539 1.43799Z",
-							"fill": "url(#paint2_linear_644_3772)"
-						},
-						"children": []
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint0_linear_644_3772",
-							"x1": "9.1871",
-							"y1": "2.17453",
-							"x2": "3.19457",
-							"y2": "19.878",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#114A8B"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#0669BC"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint1_linear_644_3772",
-							"x1": "11.0593",
-							"y1": "10.4249",
-							"x2": "9.67315",
-							"y2": "10.8936",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-opacity": "0.3"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.071",
-									"stop-opacity": "0.2"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.321",
-									"stop-opacity": "0.1"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.623",
-									"stop-opacity": "0.05"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-opacity": "0"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint2_linear_644_3772",
-							"x1": "10.2966",
-							"y1": "1.65827",
-							"x2": "16.8746",
-							"y2": "19.1833",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#3CCBF4"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#2892DF"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "Azure"
-}
diff --git a/app/components/base/icons/src/public/billing/Azure.tsx b/app/components/base/icons/src/public/billing/Azure.tsx
deleted file mode 100644
index fe47611..0000000
--- a/app/components/base/icons/src/public/billing/Azure.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Azure.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Azure'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/Buildings.json b/app/components/base/icons/src/public/billing/Buildings.json
deleted file mode 100644
index 62d22f9..0000000
--- a/app/components/base/icons/src/public/billing/Buildings.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "29",
-			"height": "28",
-			"viewBox": "0 0 29 28",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "buildings"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M5.04134 22.4583H17.2913M5.04134 22.4583V6.70833C5.04134 5.41967 6.08601 4.375 7.37467 4.375H14.958C16.2467 4.375 17.2913 5.41967 17.2913 6.70833V9.33333M5.04134 22.4583H2.70801M17.2913 22.4583V9.33333M17.2913 22.4583H24.2913M17.2913 9.33333H21.958C23.2467 9.33333 24.2913 10.378 24.2913 11.6667V22.4583M24.2913 22.4583H26.6247M12.6247 10.2083H9.70801M9.70801 14.875H12.6247",
-							"stroke": "white",
-							"stroke-width": "1.5",
-							"stroke-linecap": "round",
-							"stroke-linejoin": "round"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "Buildings"
-}
diff --git a/app/components/base/icons/src/public/billing/Buildings.tsx b/app/components/base/icons/src/public/billing/Buildings.tsx
deleted file mode 100644
index eaed4e8..0000000
--- a/app/components/base/icons/src/public/billing/Buildings.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Buildings.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Buildings'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/Diamond.json b/app/components/base/icons/src/public/billing/Diamond.json
deleted file mode 100644
index 6717026..0000000
--- a/app/components/base/icons/src/public/billing/Diamond.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "29",
-			"height": "28",
-			"viewBox": "0 0 29 28",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "diamond"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M10.2499 9.04167L7.62486 11.6667L10.2499 14.2917M15.9831 22.8501L25.4978 13.3353C26.4164 12.4168 26.408 10.925 25.4791 10.017L20.3883 5.03988C19.9523 4.61365 19.3668 4.375 18.7571 4.375H9.90929C9.29958 4.375 8.71408 4.61365 8.27811 5.03988L3.18727 10.017C2.25844 10.925 2.25002 12.4168 3.16852 13.3353L12.6833 22.8501C13.5945 23.7613 15.0719 23.7613 15.9831 22.8501Z",
-							"stroke": "#DC6803",
-							"stroke-width": "1.5",
-							"stroke-linecap": "round",
-							"stroke-linejoin": "round"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "Diamond"
-}
diff --git a/app/components/base/icons/src/public/billing/Diamond.tsx b/app/components/base/icons/src/public/billing/Diamond.tsx
deleted file mode 100644
index 18226e3..0000000
--- a/app/components/base/icons/src/public/billing/Diamond.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Diamond.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Diamond'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/GoogleCloud.json b/app/components/base/icons/src/public/billing/GoogleCloud.json
deleted file mode 100644
index 0c55bda..0000000
--- a/app/components/base/icons/src/public/billing/GoogleCloud.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "22",
-			"height": "18",
-			"viewBox": "0 0 22 18",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Group 4"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M14.1587 5.40399H14.7992L16.6247 3.57855L16.7143 2.80353C15.6686 1.88054 14.4049 1.23936 13.0424 0.94058C11.68 0.641797 10.2639 0.695269 8.92788 1.09594C7.59187 1.49662 6.38006 2.23127 5.40691 3.2305C4.43376 4.22973 3.73142 5.46055 3.36621 6.80669C3.56957 6.72334 3.79485 6.70982 4.00672 6.76826L7.6576 6.16619C7.6576 6.16619 7.84334 5.85874 7.93942 5.87796C8.72169 5.01883 9.80276 4.4912 10.9613 4.40309C12.1199 4.31497 13.2683 4.67304 14.1715 5.40399H14.1587Z",
-							"fill": "#EA4335"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_2",
-							"d": "M19.225 6.80663C18.8055 5.2615 17.944 3.87244 16.7463 2.80988L14.1843 5.3719C14.7182 5.80819 15.1461 6.36003 15.4357 6.9858C15.7253 7.61158 15.869 8.29494 15.856 8.98435V9.43911C16.1554 9.43911 16.4519 9.49809 16.7286 9.61268C17.0052 9.72727 17.2566 9.89523 17.4683 10.107C17.6801 10.3187 17.848 10.5701 17.9626 10.8467C18.0772 11.1234 18.1362 11.4199 18.1362 11.7193C18.1362 12.0187 18.0772 12.3153 17.9626 12.5919C17.848 12.8685 17.6801 13.1199 17.4683 13.3316C17.2566 13.5434 17.0052 13.7113 16.7286 13.8259C16.4519 13.9405 16.1554 13.9995 15.856 13.9995H11.2956L10.8408 14.4607V17.1956L11.2956 17.6504H15.856C17.1295 17.6603 18.3723 17.2601 19.4007 16.5089C20.429 15.7577 21.1883 14.6954 21.5662 13.4792C21.944 12.2631 21.9204 10.9576 21.4988 9.75589C21.0771 8.55419 20.2799 7.52012 19.225 6.80663Z",
-							"fill": "#4285F4"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_3",
-							"d": "M6.72886 17.625H11.2893V13.9741H6.72886C6.40396 13.9741 6.08286 13.9042 5.78732 13.7692L5.14681 13.9677L3.30856 15.7932L3.14844 16.4337C4.17929 17.2121 5.43714 17.6306 6.72886 17.625Z",
-							"fill": "#34A853"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_4",
-							"d": "M6.7289 5.78196C5.49325 5.78934 4.29076 6.18247 3.28939 6.90643C2.28801 7.6304 1.53775 8.64904 1.1434 9.8201C0.749049 10.9912 0.730302 12.2561 1.08978 13.4384C1.44925 14.6206 2.16899 15.661 3.14848 16.4143L5.79377 13.7691C5.4576 13.6172 5.16331 13.386 4.93613 13.0954C4.70895 12.8048 4.55567 12.4634 4.48944 12.1005C4.42321 11.7376 4.446 11.3641 4.55587 11.0119C4.66574 10.6598 4.8594 10.3396 5.12024 10.0788C5.38107 9.81792 5.7013 9.62426 6.05343 9.51439C6.40557 9.40452 6.7791 9.38172 7.14198 9.44795C7.50487 9.51418 7.84626 9.66747 8.13688 9.89465C8.4275 10.1218 8.65867 10.4161 8.81055 10.7523L11.4558 8.10699C10.9006 7.38115 10.185 6.79357 9.36499 6.39023C8.54496 5.98688 7.64275 5.7787 6.7289 5.78196Z",
-							"fill": "#FBBC05"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "GoogleCloud"
-}
diff --git a/app/components/base/icons/src/public/billing/GoogleCloud.tsx b/app/components/base/icons/src/public/billing/GoogleCloud.tsx
deleted file mode 100644
index 6750a7c..0000000
--- a/app/components/base/icons/src/public/billing/GoogleCloud.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './GoogleCloud.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'GoogleCloud'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/Group2.json b/app/components/base/icons/src/public/billing/Group2.json
deleted file mode 100644
index 8cc0896..0000000
--- a/app/components/base/icons/src/public/billing/Group2.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "29",
-			"height": "28",
-			"viewBox": "0 0 29 28",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M17.4942 15.3771C21.1508 13.8584 25.694 15.7846 27.1017 21.1559C27.4448 22.465 26.348 23.625 24.9948 23.625H19.6233M13.2066 8.16667C13.2066 10.2608 11.509 11.9583 9.41493 11.9583C7.32086 11.9583 5.62326 10.2608 5.62326 8.16667C5.62326 6.07258 7.32086 4.375 9.41493 4.375C11.509 4.375 13.2066 6.07258 13.2066 8.16667ZM23.7066 8.16667C23.7066 10.2608 22.009 11.9583 19.9149 11.9583C17.8209 11.9583 16.1232 10.2608 16.1232 8.16667C16.1232 6.07258 17.8209 4.375 19.9149 4.375C22.009 4.375 23.7066 6.07258 23.7066 8.16667ZM14.328 23.625H4.3352C2.98193 23.625 1.88599 22.4589 2.22976 21.15C4.42721 12.7833 14.2359 12.7833 16.4335 21.15C16.7772 22.4589 15.6813 23.625 14.328 23.625Z",
-					"stroke": "#444CE7",
-					"stroke-width": "1.5",
-					"stroke-linecap": "round",
-					"stroke-linejoin": "round"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "Group2"
-}
diff --git a/app/components/base/icons/src/public/billing/Group2.tsx b/app/components/base/icons/src/public/billing/Group2.tsx
deleted file mode 100644
index 792b454..0000000
--- a/app/components/base/icons/src/public/billing/Group2.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Group2.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Group2'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/Keyframe.json b/app/components/base/icons/src/public/billing/Keyframe.json
deleted file mode 100644
index ed0dcb4..0000000
--- a/app/components/base/icons/src/public/billing/Keyframe.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "29",
-			"height": "28",
-			"viewBox": "0 0 29 28",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M15.9831 3.98321C15.072 3.072 13.5945 3.072 12.6833 3.98321L4.31648 12.35C3.40526 13.2612 3.40524 14.7386 4.31647 15.6499L12.6833 24.0167C13.5945 24.9279 15.072 24.9279 15.9831 24.0167L24.35 15.6499C25.2612 14.7386 25.2612 13.2612 24.35 12.35L15.9831 3.98321Z",
-					"stroke": "#155AEF",
-					"stroke-width": "1.5",
-					"stroke-linejoin": "round"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "Keyframe"
-}
diff --git a/app/components/base/icons/src/public/billing/Keyframe.tsx b/app/components/base/icons/src/public/billing/Keyframe.tsx
deleted file mode 100644
index a82aad9..0000000
--- a/app/components/base/icons/src/public/billing/Keyframe.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Keyframe.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Keyframe'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/billing/SparklesSoft.json b/app/components/base/icons/src/public/billing/SparklesSoft.json
deleted file mode 100644
index b6a5a6d..0000000
--- a/app/components/base/icons/src/public/billing/SparklesSoft.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "13",
-			"height": "13",
-			"viewBox": "0 0 13 13",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"opacity": "0.5",
-					"d": "M9.75878 1.67256C9.74813 1.57435 9.6684 1.5001 9.5735 1.5C9.47861 1.4999 9.39874 1.57397 9.38789 1.67217C9.33725 2.12931 9.20693 2.44292 9.00273 2.65564C8.79849 2.86835 8.49744 3.00411 8.05857 3.05683C7.9643 3.06816 7.89321 3.15136 7.89331 3.2502C7.89341 3.34905 7.96469 3.43208 8.05896 3.44321C8.49038 3.49411 8.79835 3.62984 9.00773 3.84402C9.216 4.05703 9.34877 4.3702 9.38736 4.82276C9.39595 4.92317 9.47673 5.00011 9.5735 5C9.67027 4.99988 9.75096 4.92276 9.75926 4.82232C9.79627 4.37742 9.92894 4.05719 10.1386 3.83882C10.3482 3.62045 10.6556 3.48223 11.0827 3.44372C11.1792 3.43503 11.2532 3.35103 11.2533 3.25022C11.2534 3.14942 11.1795 3.06524 11.0832 3.05632C10.6487 3.01612 10.3481 2.87779 10.1436 2.66085C9.93797 2.44273 9.80765 2.12197 9.75878 1.67256Z",
-					"fill": "#FCFCFD"
-				},
-				"children": []
-			},
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M6.45025 2.94373C6.42279 2.69117 6.21783 2.50026 5.9738 2.5C5.72982 2.49974 5.52443 2.69021 5.49649 2.94271C5.36631 4.11822 5.0312 4.92465 4.50609 5.47164C3.98098 6.0186 3.20681 6.3677 2.07832 6.5033C1.83592 6.5324 1.65307 6.74635 1.65332 7.0005C1.65357 7.2547 1.83684 7.4682 2.0793 7.4968C3.1887 7.6277 3.9805 7.97675 4.51896 8.5275C5.05449 9.07525 5.39598 9.8805 5.49519 11.0442C5.51722 11.3024 5.72502 11.5003 5.97385 11.5C6.22273 11.4997 6.43009 11.3014 6.45154 11.0431C6.54658 9.89905 6.88782 9.07565 7.42686 8.5141C7.96595 7.9526 8.75641 7.59715 9.8547 7.49815C10.1026 7.4758 10.293 7.2598 10.2933 7.00055C10.2936 6.74135 10.1037 6.5249 9.8558 6.50195C8.7386 6.3986 7.96556 6.0429 7.43972 5.48504C6.911 4.92415 6.57591 4.09936 6.45025 2.94373Z",
-					"fill": "#FCFCFD"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "SparklesSoft"
-}
diff --git a/app/components/base/icons/src/public/billing/SparklesSoft.tsx b/app/components/base/icons/src/public/billing/SparklesSoft.tsx
deleted file mode 100644
index b3f94d0..0000000
--- a/app/components/base/icons/src/public/billing/SparklesSoft.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './SparklesSoft.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'SparklesSoft'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/common/Gdpr.json b/app/components/base/icons/src/public/common/Gdpr.json
deleted file mode 100644
index 1e030b5..0000000
--- a/app/components/base/icons/src/public/common/Gdpr.json
+++ /dev/null
@@ -1,340 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "23",
-			"height": "28",
-			"viewBox": "0 0 23 28",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Group"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Group_2"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector",
-									"d": "M11.0371 28L10.7001 27.8596C8.90271 27.1013 0 23.001 0 16.8786V4.32497L11.0371 0L22.0742 4.32497V16.8786C22.0742 23.001 13.1434 27.1013 11.3741 27.8596L11.0371 28ZM1.71314 5.47643V16.8786C1.71314 18.9569 3.11735 21.0632 5.86961 23.1414C7.89167 24.658 10.0822 25.7252 11.0652 26.1464C12.0481 25.6971 14.2387 24.658 16.2608 23.1414C19.013 21.0632 20.4173 18.9569 20.4173 16.8786V5.47643L11.0652 1.82548L1.71314 5.47643Z",
-									"fill": "white"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Group_3"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_4"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_2",
-											"d": "M11.0371 0.898682V27.0732C12.666 26.3711 21.2317 22.4674 21.2317 16.8786C21.2317 10.672 21.2317 4.88664 21.2317 4.88664L11.0371 0.898682Z",
-											"fill": "#1611D3"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_5"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_3",
-											"d": "M11.0371 0.898682V27.0732C9.40823 26.3711 0.842529 22.4674 0.842529 16.8786C0.842529 10.672 0.842529 4.88664 0.842529 4.88664L11.0371 0.898682Z",
-											"fill": "#0D00A0"
-										},
-										"children": []
-									}
-								]
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Group_6"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_4",
-									"d": "M7.1333 15.5306C7.04905 15.5867 6.93671 15.6429 6.82437 15.671C6.71204 15.7272 6.5997 15.7552 6.48736 15.7833C6.37503 15.8114 6.23461 15.8395 6.0661 15.8676C5.92568 15.8957 5.72909 15.8957 5.56058 15.8957C5.33591 15.8957 5.1674 15.8676 4.97081 15.8114C4.80231 15.7552 4.6338 15.671 4.52147 15.5867C4.40913 15.5025 4.26871 15.3621 4.18445 15.2216C4.07212 15.0812 4.01595 14.9408 3.9317 14.7723C3.84745 14.6038 3.81936 14.4353 3.79128 14.2668C3.76319 14.0983 3.73511 13.9017 3.73511 13.7332C3.73511 13.5366 3.76319 13.34 3.79128 13.1715C3.81936 12.9749 3.87553 12.8064 3.95978 12.6379C4.04403 12.4694 4.12829 12.329 4.24062 12.1885C4.35296 12.0481 4.4653 11.9358 4.60572 11.8235C4.74614 11.7111 4.91465 11.6549 5.08315 11.5988C5.25166 11.5426 5.44825 11.5145 5.64484 11.5145C5.75717 11.5145 5.84143 11.5145 5.92568 11.5145C6.00993 11.5145 6.09418 11.5426 6.15035 11.5426C6.2346 11.5426 6.29077 11.5707 6.34694 11.5988C6.40311 11.6269 6.48736 11.6549 6.54353 11.683C6.5997 11.7111 6.68395 11.7673 6.74012 11.8235C6.79629 11.8796 6.88054 11.9358 6.9648 11.992L6.57162 12.5256C6.48736 12.4413 6.40311 12.3571 6.31886 12.3009C6.23461 12.2447 6.15035 12.1885 6.09418 12.1605C6.00993 12.1324 5.92568 12.1043 5.84143 12.1043C5.75717 12.1043 5.67292 12.0762 5.56058 12.0762C5.39208 12.0762 5.22357 12.1043 5.08315 12.1885C4.94273 12.2728 4.83039 12.3851 4.74614 12.5256C4.66189 12.666 4.57764 12.8345 4.52147 13.003C4.4653 13.1715 4.43721 13.3962 4.43721 13.6208C4.43721 13.8455 4.4653 14.0702 4.49338 14.2668C4.52147 14.4634 4.60572 14.66 4.68997 14.8004C4.77422 14.9408 4.88656 15.0812 5.05507 15.1655C5.19549 15.2497 5.36399 15.3059 5.58867 15.3059C5.64484 15.3059 5.70101 15.3059 5.75717 15.3059C5.81334 15.3059 5.89759 15.3059 5.95376 15.2778C6.00993 15.2778 6.09418 15.2497 6.15035 15.2497C6.20652 15.2497 6.26269 15.2216 6.31886 15.2216V13.7894H7.04905V15.5306H7.1333Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_5",
-									"d": "M8.93074 11.5707C9.32391 11.5707 9.66093 11.6268 9.91368 11.7392C10.1945 11.8515 10.3911 11.9919 10.5877 12.1885C10.7562 12.3851 10.8685 12.5817 10.9528 12.8345C11.0371 13.0872 11.0651 13.34 11.0651 13.6208C11.0651 13.8174 11.0371 14.014 11.009 14.1825C10.9809 14.351 10.9247 14.5476 10.8685 14.7161C10.7843 14.8846 10.7 15.025 10.5877 15.1655C10.4754 15.3059 10.3349 15.4182 10.1664 15.5025C9.99794 15.5867 9.82943 15.671 9.60476 15.7271C9.38008 15.7833 9.15541 15.8114 8.87457 15.8114H7.83545V11.5988H8.93074V11.5707ZM8.62181 12.1324V15.2497H8.84648C9.04307 15.2497 9.23966 15.2216 9.43625 15.1374C9.60476 15.0812 9.77326 14.9689 9.8856 14.8285C10.026 14.688 10.1103 14.5195 10.1945 14.3229C10.2788 14.1263 10.3069 13.8736 10.3069 13.5927C10.3069 13.3962 10.2788 13.2276 10.2226 13.0311C10.1664 12.8626 10.0822 12.694 9.96985 12.5536C9.85752 12.4132 9.7171 12.3009 9.54859 12.2166C9.38008 12.1324 9.15541 12.0762 8.90265 12.0762H8.62181V12.1324Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_6",
-									"d": "M12.5537 14.1825V15.8114H11.8235V11.5988H13.0311C13.312 11.5988 13.5366 11.6268 13.7332 11.683C13.9298 11.7392 14.0983 11.8234 14.2106 11.9358C14.3511 12.0481 14.4353 12.1885 14.4915 12.3289C14.5477 12.4694 14.5757 12.6379 14.5757 12.8345C14.5757 12.8906 14.5757 12.9749 14.5477 13.0872C14.5196 13.1715 14.4915 13.2838 14.4634 13.3681C14.4072 13.4804 14.3511 13.5647 14.2668 13.6489C14.1826 13.7332 14.0983 13.8174 13.9579 13.9017C13.8175 13.9859 13.677 14.0421 13.5085 14.0983C13.34 14.1544 13.1434 14.1544 12.8907 14.1544H12.5537V14.1825ZM12.5537 13.6208H12.9188C13.0592 13.6208 13.1715 13.5927 13.2839 13.5647C13.3962 13.5366 13.4805 13.4804 13.5647 13.4242C13.649 13.3681 13.7051 13.2838 13.7613 13.1715C13.8175 13.0872 13.8175 12.9749 13.8175 12.8345C13.8175 12.7221 13.7894 12.6379 13.7613 12.5536C13.7332 12.4694 13.677 12.3851 13.6209 12.3289C13.5647 12.2728 13.4524 12.2166 13.34 12.1604C13.2277 12.1324 13.0873 12.1043 12.9188 12.1043H12.5537V13.6208Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_7",
-									"d": "M15.9519 15.8114H15.2217V11.5988H16.4293C16.7101 11.5988 16.9348 11.6268 17.1314 11.683C17.328 11.7392 17.4965 11.8234 17.6088 11.9077C17.7493 12.02 17.8335 12.1324 17.8897 12.2728C17.9459 12.4132 17.9739 12.5817 17.9739 12.7502C17.9739 12.8625 17.9459 13.003 17.9178 13.1153C17.8897 13.2276 17.8335 13.3681 17.7493 13.4804C17.665 13.5927 17.5808 13.7051 17.4403 13.7893C17.2999 13.8736 17.1595 13.9578 16.9629 14.014L18.2548 15.8114H17.4123L16.2889 14.0983C16.2327 14.0983 16.2046 14.0983 16.1485 14.0983C16.0923 14.0983 16.0361 14.0983 15.9519 14.0702V15.8114ZM15.9519 13.5085C16.008 13.5085 16.0642 13.5085 16.1204 13.5085C16.1765 13.5085 16.2327 13.5085 16.2889 13.5085C16.4293 13.5085 16.5697 13.4804 16.6821 13.4523C16.7944 13.4242 16.9067 13.3681 16.991 13.3119C17.0752 13.2557 17.1314 13.1715 17.1876 13.0872C17.2437 13.003 17.2437 12.8906 17.2437 12.7783C17.2437 12.666 17.2157 12.5536 17.1876 12.4694C17.1595 12.3851 17.1033 12.3289 17.0472 12.2728C16.991 12.2166 16.8787 12.1885 16.7663 12.1604C16.654 12.1324 16.4855 12.1324 16.317 12.1324H15.98V13.5085H15.9519Z",
-									"fill": "white"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Group_7"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_8"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_8",
-											"d": "M11.0372 4.63391L11.3461 5.56069H12.301L11.5427 6.12238L11.8236 7.02107L11.0372 6.45939L10.2789 7.02107L10.5598 6.12238L9.80151 5.56069H10.7564L11.0372 4.63391Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_9"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_9",
-											"d": "M14.3231 5.53259L14.632 6.43129H15.5869L14.8005 6.99297L15.1095 7.91975L14.3231 7.35807L13.5648 7.91975L13.8457 6.99297L13.0593 6.43129H14.0423L14.3231 5.53259Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_10"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_10",
-											"d": "M17.0472 7.9198L17.3281 8.81849H18.2829L17.5247 9.38018L17.8055 10.307L17.0472 9.74528L16.2609 10.307L16.5698 9.38018L15.7834 8.81849H16.7383L17.0472 7.9198Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_11"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_11",
-											"d": "M11.0372 19.7714L11.3461 20.6981H12.301L11.5427 21.2598L11.8236 22.1585L11.0372 21.5968L10.2789 22.1585L10.5598 21.2598L9.80151 20.6981H10.7564L11.0372 19.7714Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_12"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_12",
-											"d": "M14.3231 18.985L14.632 19.8837H15.5869L14.8005 20.4454L15.1095 21.3721L14.3231 20.8105L13.5648 21.3721L13.8457 20.4454L13.0593 19.8837H14.0423L14.3231 18.985Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_13"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_13",
-											"d": "M17.0472 17.019L17.3281 17.9458H18.2829L17.5247 18.5075L17.8055 19.4062L17.0472 18.8445L16.2609 19.4062L16.5698 18.5075L15.7834 17.9458H16.7383L17.0472 17.019Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_14"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_14",
-											"d": "M7.77942 5.53259L7.47049 6.43129H6.51562L7.30199 6.99297L6.99306 7.91975L7.77942 7.35807L8.53769 7.91975L8.25685 6.99297L9.01512 6.43129H8.06026L7.77942 5.53259Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_15"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_15",
-											"d": "M5.05529 7.9198L4.77444 8.81849H3.81958L4.57785 9.38018L4.29701 10.307L5.05529 9.74528L5.84165 10.307L5.53272 9.38018L6.31908 8.81849H5.36421L5.05529 7.9198Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_16"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_16",
-											"d": "M7.77942 18.985L7.47049 19.8837H6.51562L7.30199 20.4454L6.99306 21.3721L7.77942 20.8105L8.53769 21.3721L8.25685 20.4454L9.01512 19.8837H8.06026L7.77942 18.985Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_17"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_17",
-											"d": "M5.05529 17.019L4.77444 17.9458H3.81958L4.57785 18.5075L4.29701 19.4062L5.05529 18.8445L5.84165 19.4062L5.53272 18.5075L6.31908 17.9458H5.36421L5.05529 17.019Z",
-											"fill": "#F7BC37"
-										},
-										"children": []
-									}
-								]
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "Gdpr"
-}
diff --git a/app/components/base/icons/src/public/common/Gdpr.tsx b/app/components/base/icons/src/public/common/Gdpr.tsx
deleted file mode 100644
index 5141b57..0000000
--- a/app/components/base/icons/src/public/common/Gdpr.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Gdpr.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Gdpr'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/common/Iso.json b/app/components/base/icons/src/public/common/Iso.json
deleted file mode 100644
index 50f0267..0000000
--- a/app/components/base/icons/src/public/common/Iso.json
+++ /dev/null
@@ -1,121 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"fill": "none",
-			"height": "64",
-			"viewBox": "0 0 64 64",
-			"width": "64",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "m8 9.82143c0-2.6628 2.2386-4.82143 5-4.82143h38c2.7614 0 5 2.15863 5 4.82143v44.35717c0 2.6628-2.2386 4.8214-5 4.8214h-38c-2.7614 0-5-2.1586-5-4.8214z",
-					"fill": "#2a3e92"
-				},
-				"children": []
-			},
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"fill": "#fff"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "m43.4424 46.9899v-1.84h3.08v7.31h-2.05v-5.47z"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "m36.5801 48.7c0-1.1467.2333-2.05.7-2.71.4666-.66 1.2-.99 2.2-.99s1.7333.33 2.2.99c.4733.66.71 1.5633.71 2.71 0 1.16-.2334 2.07-.7 2.73-.4667.66-1.2034.99-2.21.99-1.0067 0-1.7434-.33-2.21-.99-.46-.66-.69-1.57-.69-2.73zm3.87 0c0-.6-.0634-1.0567-.19-1.37-.1267-.32-.3867-.48-.78-.48-.3934 0-.6534.16-.78.48-.1267.3133-.19.77-.19 1.37 0 .6133.06 1.08.18 1.4.1266.3133.39.47.79.47s.66-.1567.78-.47c.1266-.32.19-.7867.19-1.4z"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "m29.5078 48.7c0-1.1467.2333-2.05.7-2.71s1.2-.99 2.2-.99 1.7333.33 2.2.99c.4733.66.71 1.5633.71 2.71 0 1.16-.2333 2.07-.7 2.73s-1.2033.99-2.21.99-1.7433-.33-2.21-.99c-.46-.66-.69-1.57-.69-2.73zm3.87 0c0-.6-.0633-1.0567-.19-1.37-.1267-.32-.3867-.48-.78-.48s-.6533.16-.78.48c-.1267.3133-.19.77-.19 1.37 0 .6133.06 1.08.18 1.4.1267.3133.39.47.79.47s.66-.1567.78-.47c.1267-.32.19-.7867.19-1.4z"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "m28.4533 46.6099-2.4 5.85h-2.01l2.42-5.62h-2.85v-1.68h4.84z"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "m17.52 50.89c.6467-.5067 1.1767-.9433 1.59-1.31s.76-.7433 1.04-1.13c.28-.3933.42-.7667.42-1.12 0-.2133-.05-.38-.15-.5-.0933-.12-.2333-.18-.42-.18-.1933 0-.3433.0833-.45.25-.1067.16-.1567.3967-.15.71h-1.9c.02-.5933.15-1.0833.39-1.47.24-.3933.5533-.68.94-.86.3867-.1867.8167-.28 1.29-.28.82 0 1.43.2033 1.83.61s.6.9333.6 1.58c0 .6933-.2333 1.3433-.7 1.95-.46.6067-1.0367 1.15-1.73 1.63h2.5v1.59h-5.1z"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"clip-rule": "evenodd",
-							"d": "m32.5672 11.0281c1.0059.0357 2.2045.2319 3.2746.5387 3.289.9417 6.1071 2.9857 8.1332 5.8894.1106.1605.2033.3103.2033.3317 0 .0286-.1605.0393-.5136.0393h-.5137l-.1641-.2319c-.453-.6278-1.3377-1.6123-1.9191-2.1296l-.2497-.2212-.61.1534c-1.0916.2676-2.2937.4852-3.4923.6314-.2711.0357-.4923.0749-.4923.0856 0 .0143.05.1855.1106.3782.1391.4601.3532 1.2306.3532 1.2877 0 .0357-.1106.0464-.4459.0464h-.4424l-.0606-.2069c-.0144-.0559-.0371-.1365-.0606-.22-.0229-.0816-.0466-.1661-.0643-.233-.1141-.3924-.2889-.9239-.3174-.956-.0143-.0179-.2497-.0143-.5208.0071-.2676.0214-1.0274.0571-1.6838.082-1.2592.0428-3.0321.0036-4.2164-.0963-.3032-.0249-.5636-.0357-.5778-.0214-.0286.0286-.2854.8312-.4067 1.2842l-.0963.3603h-.4388c-.4031 0-.4423-.0071-.4423-.0642 0-.0785.2033-.8347.3567-1.3234.0607-.1855.0963-.3496.0785-.3639-.0143-.0107-.1926-.0428-.3995-.0642-.9739-.1106-2.3865-.371-3.4673-.635l-.6671-.1641-.1891.1606c-.5743.4922-1.4982 1.5053-1.9726 2.1581l-.214.2961h-.5244c-.2925 0-.528-.0107-.528-.0214 0-.0464.5708-.8383.8918-1.245 1.3698-1.7158 3.0464-3.0642 5.0298-4.0451 1.5124-.7492 2.9893-1.1879 4.7265-1.4126.4387-.0571 1.6016-.1178 1.8727-.0999.0678.0035.3675.0178.66.0249zm-1.2702.8884c-.824.2818-1.6088 1.1736-2.3293 2.6468-.1641.3318-.3068.635-.3175.6671-.0179.0499.0107.0642.1641.0821.8846.0963 3.2033.1462 4.4661.0927 1.516-.0642 1.6587-.0749 1.6587-.1427 0-.0892-.5351-1.1629-.7634-1.5267-.4637-.7491-.9239-1.27-1.3947-1.5803-.4959-.321-.9988-.4031-1.484-.239zm-1.9937.139c-1.912.4031-3.4745 1.0487-5.1082 2.1189-.3996.2604-.528.371-.4281.371.0123 0 .1824.0368.3973.0833l.1093.0237c.8632.1962 2.6646.4922 3.2925.5422l.1355.0107.1498-.3567c.4352-1.0167 1.113-2.1261 1.6623-2.704.1213-.1284.1213-.1319.0393-.1284-.05.0036-.1605.0179-.2497.0393zm5.6573 1.2843c-.2069-.3318-.6135-.8918-.8597-1.1772l-.0035-.004c-.0584-.0664-.0945-.1073-.0853-.126.0148-.0301.1474-.0021.4938.0711l.0088.0018c1.673.3532 3.3567 1.0666 4.8764 2.069.2782.1819.5065.346.5065.3639 0 .0891-2.6576.5564-3.7812.667l-.2319.0214-.1248-.3103c-.1641-.4174-.5458-1.1665-.7991-1.5767z",
-							"fill-rule": "evenodd"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "m30.8906 19.1863c.5565.0678.8704.082 2.365.0927l1.7194.0143v3.849h-3.0642l-.0214-.8383-.214-.0856c-.6136-.2426-1.4376-.3746-2.3544-.3781-.9025 0-1.3091.0784-1.6979.3388-.3996.2605-.4566.792-.1249 1.1201.346.3496.7705.4602 2.6611.6956 1.6338.2069 2.2652.3389 3.0571.6493.3817.1498.8633.4316 1.1629.6849.4423.3674.8062.9738.9738 1.6159.1249.478.1606 1.3983.0714 1.887-.1534.8348-.4673 1.434-1.0416 1.9798-.6207.5922-1.4198.981-2.522 1.2271-1.2164.2747-2.9394.3175-4.6659.1213-.5922-.0642-.9346-.0785-2.3579-.0892l-1.6694-.0142v-3.8133h3.0677v.7847l.1391.0714c.4531.2283 1.3841.3959 2.3651.4173 1.6908.0428 2.4506-.2568 2.4542-.9702 0-.2783-.0785-.4281-.3139-.5922-.3425-.2426-.824-.3531-2.3615-.5493-1.8478-.239-2.579-.4067-3.3817-.7848-1.2806-.6064-1.912-1.5303-2.0404-2.9857-.0713-.7706.0535-1.4911.3567-2.1189.6814-1.4091 2.2402-2.2188 4.6552-2.4186.4851-.0392 2.1617.0143 2.7824.0892z"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"clip-rule": "evenodd",
-							"d": "m48.2307 20.9806c-.981-.9774-2.2474-1.5767-3.8383-1.8157-.3924-.0607-1.8371-.1035-2.1938-.0678-1.0631.1106-1.9228.3353-2.7182.7099-1.9049.9025-3.0892 2.579-3.3817 4.7907-.0607.4673-.0714 1.5945-.0179 2.0404.1356 1.1166.4745 2.0726 1.0238 2.9073.4531.6849 1.2913 1.4375 2.0797 1.8656 1.1665.635 2.7967.9524 4.3983.8597 3.0571-.1819 5.2295-1.6873 6.0678-4.2057.2461-.742.3496-1.4483.3496-2.39.0035-1.9655-.5743-3.4994-1.7693-4.6944zm-7.7841 3.6847c.214-1.5268.906-2.3722 2.0939-2.5541.2961-.0464.9132-.0179 1.2093.0499.5279.1284 1.0023.4566 1.2949.9025.4209.635.5957 1.4019.5957 2.6112-.0036 1.4732-.2533 2.3258-.874 2.9429-.4459.4495-.8561.6136-1.6088.6492-1.4447.0678-2.3187-.6635-2.6575-2.2259-.1071-.4994-.1356-1.78-.0535-2.3757z",
-							"fill-rule": "evenodd"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"d": "m22.2402 22.5002h-2.069v6.4209h2.069v3.1748l-8.2224-.0178-.0107-1.5803-.0071-1.5767h2.069v-6.4209l-1.0238-.0071-1.0274-.0107-.0107-1.5803-.0071-1.5767h8.2402z"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"clip-rule": "evenodd",
-							"d": "m22.5684 35.9913c-.5601-.4852-1.5518-1.5874-2.0048-2.2295l-.1177-.1677h-.5315c-.4174 0-.528.0107-.5066.0428.4495.767 1.4769 2.0012 2.2973 2.7646 2.3865 2.2188 5.1367 3.503 8.4007 3.9239.6278.0785 2.547.0892 3.2105.0178 4.0202-.4459 7.6551-2.472 10.1165-5.6432.2747-.3532.7455-1.031.7455-1.0773 0-.0143-.2318-.0286-.5136-.0286h-.5101l-.3104.4067c-.1676.2247-.4816.6064-.6956.8525-.371.4174-1.1415 1.1843-1.3127 1.2985-.0713.0464-.132.0392-.6421-.0928-.9845-.2497-2.283-.4958-3.3282-.6278-.2461-.0285-.4958-.0642-.56-.0749l-.1142-.0178.0892-.2569c.0963-.2782.4067-1.3912.4067-1.4518 0-.025-.1499-.0357-.4495-.0285l-.4495.0107-.1177.428c-.0642.2355-.1712.5957-.239.8026l-.1213.3746h-.2318c-.1249 0-.5886-.025-1.0309-.0535-1.4091-.0928-4.4126-.0607-5.5648.0571l-.1998.0214-.1498-.4745-.0158-.053c-.0769-.2586-.1768-.5945-.2268-.7746l-.0963-.346h-.4388c-.3995 0-.4423.0072-.4423.0642 0 .0785.2105.8419.3567 1.3021.0607.1962.107.3567.0999.3602-.0071.0036-.2997.0428-.6528.0857-1.1415.1391-2.2473.3424-3.3639.6171l-.5814.1427zm7.698.0141c-.9631.0535-1.623.0927-1.6337.1034-.0286.0286.4209.9525.6563 1.3591.5066.8704 1.006 1.4554 1.5196 1.7907.3354.2176.5387.289.8704.3175.3246.025.5601-.0285.9239-.214.4103-.2105 1.0024-.8062 1.4055-1.4162.2675-.4031.931-1.6694.931-1.7764 0-.0571-.0749-.0678-.7669-.1142-.585-.0392-3.4352-.0749-3.9061-.0499zm-3.7032.3211c.3603-.0499.7027-.0963.7598-.1035.0606-.0107.1676-.0142.2425-.0107l.1356.0036.1712.3924c.4424 1.0166.9881 1.9156 1.566 2.5755.107.1249.1748.2247.1534.2247s-.264-.0463-.5386-.107c-1.327-.2782-2.654-.7812-3.874-1.4625-.4709-.2604-1.409-.8633-1.4732-.9418-.0286-.0356.0998-.0749.5778-.1783.7527-.1605 1.4233-.2747 2.2795-.3924zm9.2354.0962c-.132.3353-.5743 1.2129-.8062 1.5946-.2497.4137-.5529.8347-.8169 1.1379-.1105.1284-.1926.2354-.1855.2461.0393.0393 1.2521-.2532 1.9014-.4601 1.1664-.371 2.6361-1.0987 3.6991-1.83l.3139-.2176-.189-.0428c-.956-.2212-2.1011-.4281-3.0107-.5458-.3139-.0392-.6279-.0785-.6956-.0892-.0483-.0055-.0779-.0089-.101.0018-.0367.017-.057.0694-.1095.2051z",
-							"fill-rule": "evenodd"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "Iso"
-}
diff --git a/app/components/base/icons/src/public/common/Iso.tsx b/app/components/base/icons/src/public/common/Iso.tsx
deleted file mode 100644
index db4b515..0000000
--- a/app/components/base/icons/src/public/common/Iso.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Iso.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Iso'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/common/Soc2.json b/app/components/base/icons/src/public/common/Soc2.json
deleted file mode 100644
index 38b9c5e..0000000
--- a/app/components/base/icons/src/public/common/Soc2.json
+++ /dev/null
@@ -1,938 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "28",
-			"height": "28",
-			"viewBox": "0 0 28 28",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Group 7"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M14 28C21.732 28 28 21.732 28 14C28 6.26801 21.732 0 14 0C6.26801 0 0 6.26801 0 14C0 21.732 6.26801 28 14 28Z",
-							"fill": "url(#paint0_linear_6186_11887)"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_2",
-							"d": "M13.9999 24.8636C19.9997 24.8636 24.8636 19.9997 24.8636 13.9999C24.8636 8.00006 19.9997 3.13623 13.9999 3.13623C8.00006 3.13623 3.13623 8.00006 3.13623 13.9999C3.13623 19.9997 8.00006 24.8636 13.9999 24.8636Z",
-							"fill": "url(#paint1_linear_6186_11887)"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Group"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_3",
-									"d": "M5.43048 23.2492C5.46819 23.2107 5.48424 23.1666 5.47862 23.1177C5.473 23.0687 5.44412 22.9997 5.39197 22.909C5.33901 22.8192 5.30772 22.7462 5.29809 22.69C5.28365 22.6106 5.30291 22.5432 5.35586 22.4878C5.40721 22.4341 5.4714 22.4124 5.54762 22.4212C5.62384 22.43 5.69605 22.4678 5.76425 22.5344C5.81079 22.5793 5.84368 22.6282 5.86294 22.6812C5.8822 22.7341 5.88621 22.7871 5.87578 22.8384C5.86535 22.8898 5.84048 22.9355 5.80277 22.9748L5.74339 22.9171C5.78993 22.8689 5.80999 22.8152 5.80597 22.755C5.80116 22.6948 5.77147 22.6379 5.71692 22.5841C5.66316 22.5327 5.6094 22.5031 5.55484 22.4966C5.50028 22.4902 5.45455 22.5055 5.41684 22.544C5.38234 22.5793 5.3687 22.6226 5.37512 22.6724C5.38154 22.7221 5.40802 22.7863 5.45455 22.8641C5.50028 22.9419 5.53077 23.0053 5.54521 23.0551C5.55966 23.1048 5.56287 23.1497 5.55404 23.1915C5.54522 23.2332 5.52435 23.2709 5.49066 23.3054C5.4377 23.3608 5.37271 23.3832 5.29649 23.3736C5.22027 23.364 5.14645 23.3247 5.07424 23.2557C5.0253 23.2083 4.98839 23.1554 4.96432 23.0984C4.94025 23.0414 4.93303 22.9861 4.94186 22.9339C4.95148 22.8818 4.97555 22.8352 5.01487 22.7943L5.07424 22.8513C5.0269 22.9002 5.00765 22.9572 5.01647 23.0214C5.0261 23.0856 5.0606 23.1465 5.12158 23.2059C5.17614 23.2581 5.2315 23.2885 5.28686 23.2966C5.34303 23.3046 5.39036 23.2885 5.42888 23.2492H5.43048Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_4",
-									"d": "M6.31617 23.7556C6.2584 23.8238 6.19662 23.8744 6.12923 23.9065C6.06183 23.9386 5.99524 23.9498 5.92784 23.941C5.86044 23.9321 5.79786 23.9033 5.74009 23.8551C5.65344 23.7821 5.60931 23.6922 5.60771 23.5855C5.6061 23.4788 5.65023 23.3721 5.73849 23.267L5.80268 23.19C5.85964 23.1226 5.92223 23.072 5.98962 23.0399C6.05702 23.0078 6.12522 22.9958 6.19261 23.0046C6.26001 23.0135 6.32259 23.0415 6.37956 23.0897C6.43652 23.1378 6.47584 23.194 6.4967 23.2582C6.51756 23.3224 6.51836 23.3898 6.49991 23.4604C6.48145 23.531 6.44455 23.6 6.38999 23.6666L6.31537 23.7556H6.31617ZM6.32099 23.6224C6.39641 23.5326 6.43492 23.4459 6.43652 23.3609C6.43893 23.2758 6.40443 23.2044 6.33382 23.145C6.26482 23.0873 6.1886 23.0664 6.10436 23.0825C6.02091 23.0993 5.94068 23.1531 5.86365 23.2437L5.79866 23.3216C5.72485 23.4098 5.68634 23.4965 5.68393 23.5823C5.68152 23.6682 5.71522 23.7404 5.78583 23.7998C5.85724 23.8591 5.93426 23.8808 6.0161 23.8631C6.09874 23.8455 6.17817 23.7917 6.25439 23.7003L6.32018 23.6216L6.32099 23.6224Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_5",
-									"d": "M6.97267 24.3966C6.90367 24.4728 6.82825 24.5153 6.74641 24.5226C6.66457 24.5306 6.58113 24.5041 6.49769 24.4439C6.43912 24.4022 6.3982 24.3501 6.37413 24.2883C6.35006 24.2265 6.34524 24.1599 6.35969 24.0893C6.37413 24.0187 6.40542 23.9481 6.45516 23.8791L6.52898 23.7772C6.57953 23.7074 6.63649 23.6536 6.69988 23.6175C6.76326 23.5814 6.82905 23.5646 6.89565 23.5686C6.96304 23.5726 7.02643 23.5959 7.0866 23.6392C7.17085 23.7002 7.2214 23.7708 7.23744 23.8518C7.25349 23.9328 7.23664 24.0155 7.1869 24.1021L7.1195 24.054C7.19973 23.908 7.17486 23.7892 7.04649 23.6961C6.97508 23.6448 6.89886 23.6304 6.81782 23.6536C6.73678 23.6769 6.66217 23.7347 6.59477 23.8293L6.52497 23.9256C6.45918 24.0163 6.42788 24.1037 6.43029 24.188C6.4327 24.2722 6.4688 24.3388 6.53941 24.3902C6.60921 24.4407 6.6734 24.4616 6.73277 24.4536C6.79215 24.4455 6.84991 24.411 6.90608 24.3509L6.97347 24.399L6.97267 24.3966Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_6",
-									"d": "M7.31909 24.9735L7.65768 24.4119L7.55578 24.3501L7.58948 24.2939L7.69138 24.3557L7.73631 24.2811C7.77482 24.2177 7.81975 24.1792 7.87271 24.1648C7.92566 24.1503 7.98022 24.1607 8.03799 24.1952C8.06366 24.2105 8.08613 24.2289 8.10458 24.249L8.06527 24.3028C8.04922 24.2867 8.02996 24.2723 8.0075 24.2586C7.96979 24.2362 7.93368 24.2297 7.89838 24.241C7.86308 24.2522 7.83259 24.2787 7.80691 24.322L7.76038 24.399L7.90801 24.4881L7.87431 24.5443L7.72668 24.4552L7.38809 25.0168L7.31989 24.9751L7.31909 24.9735Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_7",
-									"d": "M7.82238 24.8435C7.85528 24.7825 7.8962 24.7336 7.94675 24.6975C7.99649 24.6614 8.05105 24.6413 8.10882 24.6373C8.16659 24.6333 8.22275 24.6461 8.27811 24.6758C8.36236 24.7216 8.41531 24.7874 8.43617 24.8756C8.45703 24.9631 8.44099 25.0561 8.38803 25.154L8.38001 25.1685C8.34711 25.2302 8.30539 25.2792 8.25565 25.3153C8.2059 25.3514 8.15214 25.3715 8.09438 25.3755C8.03661 25.3787 7.98044 25.3658 7.92589 25.3361C7.84164 25.2912 7.78949 25.2246 7.76863 25.1372C7.74777 25.0497 7.76381 24.9566 7.81597 24.8588L7.82319 24.8443L7.82238 24.8435ZM7.88256 24.9013C7.84164 24.9775 7.828 25.0505 7.84084 25.1203C7.85367 25.1901 7.89219 25.2423 7.95637 25.2768C8.01976 25.3105 8.08395 25.3137 8.14974 25.2864C8.21553 25.2591 8.26929 25.2054 8.31261 25.1251L8.31983 25.1115C8.34631 25.0634 8.36075 25.0136 8.36476 24.9639C8.36878 24.9141 8.35995 24.8692 8.33909 24.8291C8.31823 24.7898 8.28694 24.7585 8.24522 24.736C8.18263 24.7023 8.11845 24.6991 8.05265 24.7272C7.98686 24.7553 7.9323 24.809 7.88978 24.8884L7.88256 24.9013Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_8",
-									"d": "M8.97134 25.1115C8.9577 25.101 8.94166 25.0922 8.92481 25.0842C8.87988 25.0625 8.83575 25.0577 8.79242 25.0673C8.7491 25.0778 8.70978 25.1034 8.67368 25.1452L8.46106 25.5929L8.38965 25.5592L8.69855 24.9069L8.76915 24.9406L8.72101 25.0449C8.79563 24.9855 8.87506 24.9767 8.95931 25.016C8.97937 25.0256 8.99381 25.036 9.00344 25.0465L8.97054 25.1115H8.97134Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_9",
-									"d": "M9.77199 25.8825C9.79124 25.832 9.78883 25.7854 9.76476 25.7429C9.74069 25.7004 9.68614 25.6474 9.60269 25.5857C9.51925 25.5239 9.46148 25.4685 9.43019 25.4212C9.38526 25.3538 9.37643 25.284 9.40371 25.2126C9.43019 25.1436 9.47994 25.0978 9.55375 25.0762C9.62757 25.0545 9.7086 25.0609 9.79766 25.0946C9.85784 25.1179 9.90758 25.15 9.94609 25.1909C9.98461 25.2326 10.0095 25.2784 10.0199 25.3305C10.0303 25.3819 10.0255 25.4332 10.0063 25.4846L9.92924 25.4549C9.95251 25.3931 9.95091 25.3345 9.92283 25.2808C9.89474 25.227 9.845 25.1861 9.77359 25.1596C9.70459 25.1331 9.64281 25.1275 9.58986 25.1428C9.5369 25.158 9.5008 25.1909 9.48234 25.2407C9.46469 25.2872 9.4687 25.3313 9.49518 25.3746C9.52085 25.418 9.5706 25.4661 9.64361 25.5191C9.71663 25.572 9.76958 25.6186 9.80247 25.6587C9.83537 25.6988 9.85623 25.7389 9.86426 25.7806C9.87228 25.8224 9.86827 25.8649 9.85142 25.9106C9.82414 25.982 9.77359 26.0286 9.70058 26.0502C9.62676 26.0719 9.54332 26.0647 9.45025 26.0294C9.38606 26.0053 9.3315 25.9716 9.28737 25.9283C9.24244 25.8849 9.21436 25.8376 9.20233 25.7862C9.19029 25.7349 9.1943 25.6819 9.21436 25.629L9.29139 25.6579C9.26732 25.7221 9.27213 25.7814 9.30583 25.8368C9.33953 25.8922 9.39569 25.9347 9.47512 25.9652C9.54573 25.9916 9.60831 25.9981 9.66287 25.9828C9.71743 25.9676 9.75433 25.9347 9.77439 25.8833L9.77199 25.8825Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_10",
-									"d": "M10.2131 26.2917C10.1545 26.2733 10.1064 26.2428 10.0679 26.1995C10.0294 26.1561 10.0053 26.104 9.99485 26.0446C9.98442 25.9844 9.98924 25.9226 10.0093 25.8585L10.0181 25.8312C10.039 25.7646 10.0703 25.7092 10.112 25.6643C10.1537 25.6194 10.2027 25.5889 10.258 25.5728C10.3134 25.5568 10.3679 25.5568 10.4209 25.5728C10.5043 25.5985 10.5621 25.6482 10.5934 25.7205C10.6247 25.7927 10.6247 25.8785 10.5942 25.9772L10.5806 26.0197L10.0887 25.8673L10.0839 25.8817C10.0598 25.9596 10.0623 26.0318 10.0903 26.0976C10.1192 26.1633 10.1674 26.2067 10.2356 26.2283C10.2765 26.2412 10.315 26.2444 10.3503 26.2396C10.3856 26.2348 10.4217 26.2195 10.4578 26.1946L10.4939 26.246C10.4129 26.3094 10.319 26.3246 10.2123 26.2917H10.2131ZM10.4008 25.6378C10.3439 25.6202 10.2885 25.6258 10.2364 25.6563C10.1842 25.686 10.1425 25.7349 10.112 25.8031L10.5252 25.9315L10.5276 25.9234C10.5461 25.8569 10.5437 25.7967 10.5212 25.7437C10.4987 25.6908 10.4578 25.6555 10.4008 25.6378Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_11",
-									"d": "M11.1407 25.856C11.1254 25.8488 11.1078 25.8424 11.0893 25.8384C11.0412 25.8255 10.997 25.8287 10.9561 25.8472C10.916 25.8657 10.8823 25.8985 10.8542 25.9459L10.7299 26.4257L10.6528 26.4056L10.8334 25.7068L10.9088 25.726L10.8815 25.8376C10.9441 25.7654 11.0203 25.7413 11.1102 25.7646C11.1318 25.7702 11.1479 25.7774 11.1591 25.7862L11.139 25.856H11.1407Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_12",
-									"d": "M11.3831 26.4659L11.7233 25.9123L11.8036 25.9292L11.392 26.5807L11.3286 26.5678L11.2114 25.8064L11.2917 25.8232L11.3831 26.4667V26.4659Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_13",
-									"d": "M11.895 26.6737L11.8164 26.66L11.936 25.9484L12.0146 25.962L11.895 26.6737ZM11.9568 25.7406C11.9592 25.7261 11.9664 25.7141 11.9777 25.7053C11.9889 25.6964 12.0034 25.694 12.0194 25.6964C12.0362 25.6996 12.0483 25.7069 12.0563 25.7181C12.0643 25.7301 12.0675 25.743 12.0651 25.7582C12.0627 25.7727 12.0555 25.7847 12.0443 25.7927C12.033 25.8007 12.0186 25.804 12.0017 25.8007C11.9849 25.7983 11.9729 25.7911 11.9648 25.7791C11.9568 25.767 11.9544 25.7542 11.9568 25.7398V25.7406Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_14",
-									"d": "M12.4061 26.6929C12.4615 26.7002 12.5096 26.6905 12.5505 26.664C12.5915 26.6376 12.6171 26.5999 12.626 26.5509L12.7022 26.5605C12.6942 26.6039 12.6757 26.6424 12.646 26.6745C12.6163 26.7074 12.5794 26.7314 12.5353 26.7459C12.4912 26.7603 12.4454 26.7651 12.3973 26.7595C12.3034 26.7475 12.2328 26.7058 12.1863 26.6336C12.1398 26.5613 12.1229 26.4699 12.1373 26.36L12.1406 26.3359C12.1494 26.2653 12.1694 26.2043 12.2015 26.153C12.2328 26.1016 12.2737 26.0647 12.3235 26.0406C12.3732 26.0166 12.4294 26.0085 12.4912 26.0166C12.5698 26.0262 12.6316 26.0583 12.6765 26.1112C12.7214 26.1642 12.7407 26.2292 12.7351 26.3062L12.6589 26.2966C12.6621 26.2404 12.6476 26.1923 12.6155 26.153C12.5826 26.1136 12.5385 26.0912 12.4823 26.084C12.4109 26.0751 12.3524 26.0936 12.3058 26.1401C12.2601 26.1867 12.2312 26.2565 12.2192 26.3495L12.216 26.3728C12.2047 26.4643 12.216 26.5381 12.2481 26.5942C12.281 26.6504 12.3339 26.6833 12.4053 26.6921L12.4061 26.6929Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_15",
-									"d": "M13.1466 26.8301C13.0856 26.8261 13.0311 26.8068 12.9837 26.7739C12.9364 26.7402 12.9011 26.6961 12.877 26.6399C12.8529 26.5846 12.8433 26.5228 12.8481 26.4562L12.8497 26.4273C12.8545 26.3583 12.8722 26.2965 12.9027 26.2428C12.9332 26.189 12.9733 26.1481 13.0238 26.12C13.0744 26.0919 13.1265 26.0791 13.1827 26.0831C13.2702 26.0887 13.3376 26.1232 13.3849 26.1866C13.4322 26.25 13.4523 26.3326 13.4451 26.4361L13.4419 26.4811L12.9284 26.4458V26.461C12.9219 26.5429 12.9404 26.6119 12.9837 26.6696C13.027 26.7274 13.084 26.7587 13.1546 26.7635C13.1971 26.7667 13.2357 26.7611 13.2694 26.7483C13.3031 26.7354 13.3343 26.7122 13.3632 26.6801L13.4106 26.721C13.3464 26.802 13.2581 26.8381 13.1474 26.8309L13.1466 26.8301ZM13.1779 26.1505C13.1177 26.1465 13.0664 26.165 13.0222 26.2059C12.9781 26.2468 12.9492 26.3046 12.9356 26.3776L13.3672 26.4073V26.3984C13.3704 26.3294 13.3544 26.2717 13.3199 26.2251C13.2854 26.1794 13.2381 26.1537 13.1779 26.1497V26.1505Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_16",
-									"d": "M14.6863 26.3993C14.6887 26.4884 14.6751 26.5678 14.6454 26.636C14.6165 26.7042 14.5732 26.7571 14.517 26.7949C14.4608 26.8326 14.395 26.8526 14.3196 26.8542C14.2065 26.8566 14.1134 26.8189 14.042 26.7395C13.9706 26.6601 13.9329 26.5517 13.9297 26.4137L13.9273 26.3135C13.9249 26.2252 13.9385 26.1466 13.9682 26.0776C13.9979 26.0086 14.0412 25.9548 14.0974 25.9171C14.1535 25.8794 14.2193 25.8593 14.2939 25.8569C14.3686 25.8553 14.4352 25.8714 14.4929 25.9059C14.5507 25.9404 14.5964 25.9901 14.6293 26.0551C14.6622 26.1201 14.6799 26.1963 14.6839 26.283L14.6871 26.3993H14.6863ZM14.602 26.2958C14.5988 26.1787 14.5707 26.088 14.5162 26.023C14.4616 25.958 14.3886 25.9267 14.2963 25.9291C14.2065 25.9315 14.1351 25.966 14.0829 26.0342C14.0308 26.1024 14.0067 26.1955 14.0091 26.3143L14.0115 26.4154C14.0147 26.5301 14.0436 26.6207 14.0982 26.6873C14.1535 26.7531 14.2265 26.7852 14.318 26.7828C14.4111 26.7804 14.4825 26.7459 14.533 26.6777C14.5836 26.6095 14.6069 26.5164 14.6044 26.3985L14.602 26.2958Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_17",
-									"d": "M15.1989 26.1353C15.182 26.1337 15.1636 26.1337 15.1443 26.1353C15.0946 26.1393 15.0536 26.1562 15.0216 26.1866C14.9895 26.2171 14.9678 26.2597 14.9582 26.3134L14.9983 26.8077L14.9189 26.8141L14.8611 26.0952L14.9389 26.0888L14.9493 26.2027C14.9846 26.1144 15.0488 26.0663 15.1419 26.0591C15.1644 26.0575 15.182 26.0591 15.1949 26.0639L15.1989 26.1361V26.1353Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_18",
-									"d": "M15.3144 26.4129C15.3 26.3005 15.3136 26.2091 15.3545 26.1369C15.3955 26.0646 15.4588 26.0237 15.5439 26.0125C15.641 25.9997 15.7204 26.0293 15.7814 26.0999L15.7718 25.9964L15.8456 25.9868L15.9362 26.6881C15.9483 26.7803 15.9314 26.8565 15.8873 26.9167C15.8424 26.9769 15.7766 27.013 15.6883 27.0242C15.6386 27.0307 15.5896 27.0258 15.5415 27.009C15.4933 26.9921 15.454 26.9673 15.4235 26.9336L15.4621 26.8798C15.527 26.9416 15.5976 26.9673 15.6755 26.9568C15.7413 26.948 15.791 26.9223 15.8223 26.8782C15.8544 26.8341 15.8664 26.7779 15.8592 26.7081L15.8472 26.6183C15.8055 26.6953 15.7365 26.7402 15.6394 26.753C15.5567 26.7635 15.4853 26.7394 15.4268 26.68C15.3682 26.6207 15.3313 26.534 15.3168 26.4217L15.3152 26.4113L15.3144 26.4129ZM15.3963 26.4161C15.4083 26.5075 15.4356 26.5773 15.4789 26.6247C15.5222 26.6728 15.5776 26.6921 15.6442 26.684C15.7413 26.6712 15.8047 26.6191 15.8343 26.526L15.791 26.193C15.7661 26.1497 15.7357 26.1184 15.6971 26.0983C15.6594 26.0791 15.6161 26.0719 15.5672 26.0783C15.5006 26.0871 15.4524 26.12 15.4219 26.177C15.3914 26.2339 15.3834 26.3134 15.3963 26.4153V26.4161Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_19",
-									"d": "M16.6271 26.5773C16.615 26.5565 16.6038 26.5244 16.5934 26.4811C16.5725 26.522 16.5428 26.5565 16.5043 26.5838C16.4658 26.611 16.4225 26.6295 16.3743 26.6391C16.3061 26.652 16.2476 26.6439 16.1978 26.6142C16.1481 26.5846 16.1184 26.5404 16.1071 26.4827C16.0935 26.4137 16.112 26.3535 16.1617 26.3021C16.2115 26.2508 16.2877 26.2155 16.3904 26.1954L16.5324 26.1681L16.5171 26.0879C16.5075 26.0374 16.4842 26.0005 16.4473 25.9772C16.4104 25.9539 16.3623 25.9483 16.3021 25.9595C16.2476 25.97 16.205 25.9924 16.1745 26.0277C16.1441 26.0622 16.1328 26.1 16.14 26.1393L16.0614 26.1537C16.051 26.0975 16.067 26.0438 16.112 25.9924C16.1561 25.9411 16.2171 25.9082 16.2933 25.8938C16.3719 25.8785 16.4385 25.8865 16.4915 25.917C16.5444 25.9475 16.5789 25.9981 16.5934 26.0687L16.6576 26.404C16.6704 26.4722 16.688 26.5228 16.7089 26.5541L16.7105 26.5621L16.6271 26.5781V26.5773ZM16.3695 26.5685C16.4217 26.5581 16.4666 26.5364 16.5027 26.5035C16.5388 26.4706 16.5629 26.4305 16.5733 26.3848L16.5436 26.2291L16.4032 26.2564C16.3254 26.2725 16.2668 26.2981 16.2283 26.3342C16.1898 26.3703 16.1745 26.4129 16.1842 26.461C16.1922 26.5011 16.2131 26.5308 16.2476 26.5517C16.2821 26.5725 16.323 26.5781 16.3703 26.5685H16.3695Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_20",
-									"d": "M16.8277 25.7934L16.8606 25.9122C16.8759 25.8624 16.8999 25.8215 16.9336 25.7886C16.9673 25.7557 17.0074 25.7333 17.0548 25.7212C17.1294 25.702 17.1912 25.7092 17.2385 25.7421C17.2859 25.775 17.3204 25.8336 17.3428 25.9178L17.46 26.3767L17.3829 26.3968L17.265 25.9379C17.2489 25.8753 17.2233 25.8328 17.1896 25.8087C17.1559 25.7846 17.1101 25.7798 17.0532 25.7951C17.005 25.8071 16.9665 25.8328 16.9376 25.8721C16.9088 25.9114 16.8919 25.9587 16.8871 26.0141L17.0099 26.4931L16.9328 26.5131L16.7539 25.8143L16.8277 25.7951V25.7934Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_21",
-									"d": "M17.4094 25.4204C17.4054 25.406 17.4062 25.3923 17.4126 25.3795C17.4191 25.3667 17.4303 25.3578 17.4463 25.353C17.4624 25.3482 17.4768 25.349 17.4897 25.3562C17.5025 25.3634 17.5105 25.3739 17.5153 25.3883C17.5194 25.4028 17.5186 25.4164 17.5121 25.4284C17.5057 25.4413 17.4937 25.4501 17.4776 25.4549C17.4616 25.4597 17.4471 25.4589 17.4351 25.4517C17.4231 25.4445 17.4142 25.434 17.4102 25.4196L17.4094 25.4204ZM17.7689 26.2837L17.6927 26.307L17.4832 25.6162L17.5595 25.5929L17.7689 26.2837Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_22",
-									"d": "M18.0281 26.1313L18.471 25.9772L18.4935 26.0406L17.9575 26.2267L17.9382 26.1714L18.1565 25.4669L17.7561 25.6057L17.7336 25.5399L18.2295 25.3674L18.2495 25.4244L18.0297 26.1297L18.0281 26.1313Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_23",
-									"d": "M19.0799 25.8031C19.0639 25.7854 19.0462 25.7558 19.027 25.7156C19.0149 25.7598 18.9925 25.7999 18.9604 25.8344C18.9283 25.8689 18.889 25.8962 18.844 25.9146C18.7799 25.9411 18.7205 25.9443 18.6659 25.925C18.6114 25.9058 18.5728 25.8689 18.5504 25.8143C18.5239 25.7493 18.5295 25.6868 18.568 25.6266C18.6065 25.5664 18.6739 25.5167 18.7702 25.4765L18.9042 25.4212L18.8729 25.345C18.8529 25.2976 18.8232 25.2655 18.7823 25.2511C18.7413 25.2366 18.6932 25.2398 18.637 25.2631C18.5857 25.284 18.5488 25.3153 18.5255 25.3554C18.503 25.3955 18.499 25.434 18.5143 25.4709L18.4397 25.5006C18.418 25.4477 18.4236 25.3915 18.4565 25.3321C18.4902 25.2727 18.5424 25.2286 18.6146 25.1989C18.6892 25.1684 18.755 25.1628 18.8135 25.1821C18.8721 25.2013 18.9154 25.2447 18.9443 25.3105L19.0743 25.6258C19.1008 25.69 19.1281 25.7357 19.1545 25.7622L19.1578 25.7694L19.0791 25.8023L19.0799 25.8031ZM18.8264 25.8456C18.8761 25.8256 18.9146 25.7951 18.9435 25.755C18.9724 25.7148 18.9877 25.6715 18.9885 25.6242L18.9283 25.4773L18.7967 25.5319C18.7237 25.5632 18.6715 25.6001 18.641 25.6434C18.6106 25.6868 18.6041 25.7309 18.6234 25.7766C18.6386 25.8143 18.6659 25.8392 18.7036 25.8528C18.7413 25.8657 18.7831 25.8633 18.8272 25.8448L18.8264 25.8456Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_24",
-									"d": "M19.083 24.8058L19.1616 24.9727L19.2964 24.9093L19.3245 24.9687L19.1897 25.032L19.3943 25.4677C19.4112 25.5038 19.4304 25.5279 19.4521 25.5391C19.4737 25.5504 19.4994 25.5496 19.5299 25.5351C19.5419 25.5295 19.5604 25.5183 19.5853 25.5014L19.6157 25.5584C19.5997 25.5744 19.5756 25.5897 19.5435 25.6049C19.4938 25.6282 19.4513 25.6306 19.4152 25.6129C19.3791 25.5945 19.3478 25.5576 19.3213 25.5022L19.1167 25.0665L18.9963 25.1227L18.9683 25.0633L19.0886 25.0072L19.01 24.8403L19.0822 24.8066L19.083 24.8058Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_25",
-									"d": "M19.3438 24.6526C19.3374 24.639 19.3358 24.6254 19.3398 24.6117C19.3438 24.5981 19.3535 24.5876 19.3687 24.5796C19.384 24.5716 19.3984 24.5708 19.412 24.5756C19.4257 24.5804 19.4361 24.5893 19.4425 24.6029C19.449 24.6165 19.4506 24.6294 19.4465 24.643C19.4425 24.6566 19.4329 24.6671 19.4177 24.6751C19.4024 24.6831 19.388 24.6839 19.3751 24.6799C19.3623 24.6759 19.3519 24.6663 19.3446 24.6526H19.3438ZM19.8493 25.4389L19.7779 25.475L19.4506 24.8316L19.522 24.7955L19.8493 25.4389Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_26",
-									"d": "M19.8461 25.0264C19.8115 24.9663 19.7931 24.9053 19.7891 24.8435C19.7851 24.7817 19.7971 24.7256 19.8244 24.6742C19.8517 24.6229 19.8926 24.5819 19.9471 24.5515C20.0306 24.5041 20.1148 24.4953 20.1999 24.525C20.2849 24.5547 20.3547 24.6172 20.4093 24.7143L20.4173 24.7288C20.4518 24.7897 20.4711 24.8507 20.4751 24.9125C20.4791 24.9743 20.4671 25.0304 20.4398 25.081C20.4125 25.1315 20.3708 25.1717 20.3162 25.2029C20.2328 25.2503 20.1485 25.2591 20.0635 25.2294C19.9784 25.2005 19.9086 25.1372 19.8533 25.0401L19.8452 25.0264H19.8461ZM19.9271 25.0064C19.9696 25.0818 20.0242 25.1323 20.09 25.158C20.1558 25.1837 20.2207 25.1797 20.2841 25.1436C20.3467 25.1083 20.3844 25.0553 20.3957 24.9855C20.4069 24.9157 20.3908 24.8411 20.3459 24.7617L20.3387 24.748C20.3114 24.6999 20.2777 24.6614 20.2376 24.6317C20.1975 24.602 20.155 24.5851 20.11 24.5811C20.0659 24.5771 20.0226 24.5876 19.9808 24.6108C19.9191 24.6461 19.8822 24.6983 19.8701 24.7697C19.8581 24.8403 19.8749 24.9149 19.9191 24.9935L19.9263 25.0064H19.9271Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_27",
-									"d": "M20.4318 24.2803L20.5016 24.3822C20.5 24.3301 20.5096 24.2835 20.5313 24.2418C20.5521 24.2001 20.5834 24.1664 20.6244 24.1391C20.6893 24.0966 20.7495 24.0838 20.8049 24.0998C20.8602 24.1159 20.9116 24.16 20.9597 24.233L21.2173 24.6302L21.1507 24.6735L20.8923 24.2755C20.857 24.2218 20.8193 24.1889 20.7792 24.1768C20.7391 24.1648 20.695 24.1752 20.6452 24.2073C20.6035 24.2346 20.5754 24.2707 20.561 24.3172C20.5465 24.3638 20.5449 24.4143 20.5586 24.4681L20.8281 24.8829L20.7616 24.9262L20.3684 24.3213L20.4318 24.2795V24.2803Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_28",
-									"d": "M21.6546 24.0886C21.6313 24.0565 21.5993 24.0404 21.5599 24.0404C21.5198 24.0404 21.4701 24.0532 21.4107 24.0805C21.3513 24.1078 21.3016 24.1247 21.2631 24.1311C21.2246 24.1383 21.1901 24.1359 21.1612 24.1263C21.1323 24.1166 21.1074 24.0966 21.0858 24.0677C21.0521 24.022 21.0432 23.9698 21.0593 23.912C21.0753 23.8543 21.1138 23.8029 21.1732 23.7588C21.2382 23.7115 21.3016 23.689 21.3642 23.6922C21.4267 23.6954 21.4773 23.7227 21.515 23.774L21.4508 23.8214C21.4259 23.7877 21.3906 23.7692 21.3457 23.7676C21.3008 23.766 21.2567 23.7813 21.2133 23.8133C21.1708 23.8446 21.1443 23.8791 21.1323 23.9168C21.1203 23.9546 21.1259 23.9883 21.1475 24.0187C21.1692 24.0476 21.1965 24.0621 21.2294 24.0629C21.2623 24.0629 21.312 24.0492 21.3778 24.0212C21.4436 23.9931 21.4966 23.9762 21.5359 23.9706C21.5752 23.965 21.6089 23.9674 21.6386 23.9786C21.6675 23.9899 21.6931 24.0099 21.7156 24.0404C21.7517 24.0894 21.7605 24.1431 21.7429 24.2017C21.7252 24.2603 21.6843 24.3132 21.6201 24.3597C21.5527 24.4095 21.4853 24.4336 21.4195 24.432C21.3529 24.4303 21.3016 24.4039 21.2647 24.3541L21.3289 24.3068C21.3594 24.3429 21.3963 24.3605 21.4412 24.3597C21.4861 24.3589 21.5319 24.3413 21.58 24.306C21.6249 24.2731 21.6538 24.2362 21.6666 24.1969C21.6795 24.1575 21.6755 24.1214 21.653 24.0918L21.6546 24.0886Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_29",
-									"d": "M22.7023 23.6914L22.6518 23.7363L21.8848 22.8778L21.9353 22.8329L22.7023 23.6914Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_30",
-									"d": "M23.418 22.3659C23.3868 22.337 23.3523 22.3258 23.3145 22.3322C23.2776 22.3386 23.2239 22.3627 23.1533 22.4044C23.0827 22.4461 23.0217 22.4742 22.9687 22.4886C22.8684 22.5159 22.785 22.4999 22.7192 22.4397C22.6614 22.3867 22.6358 22.3193 22.6414 22.2383C22.647 22.1573 22.6847 22.0786 22.7529 22.004C22.7986 21.9543 22.8484 21.9182 22.9029 21.8957C22.9567 21.8732 23.0113 21.8668 23.0658 21.8756C23.1204 21.8845 23.1677 21.9077 23.2094 21.9454L23.0955 22.069C23.0586 22.0345 23.0185 22.0193 22.9752 22.0241C22.9326 22.0281 22.8909 22.0522 22.8516 22.0955C22.8147 22.1364 22.7938 22.1757 22.7906 22.2142C22.7874 22.2527 22.801 22.2864 22.8323 22.3145C22.8588 22.3386 22.8917 22.3466 22.931 22.3386C22.9711 22.3306 23.0241 22.3057 23.0923 22.2656C23.1597 22.2255 23.2199 22.1974 23.272 22.1829C23.3242 22.1685 23.3707 22.1661 23.4124 22.1757C23.4541 22.1853 23.4935 22.2062 23.5304 22.2399C23.5897 22.2945 23.6162 22.3611 23.6098 22.4389C23.6034 22.5167 23.5641 22.5953 23.4919 22.6732C23.4445 22.7253 23.3916 22.7638 23.3322 22.7895C23.2736 22.8152 23.2159 22.8248 23.1597 22.8176C23.1035 22.8104 23.0538 22.7871 23.0089 22.7454L23.1228 22.621C23.1637 22.6579 23.207 22.674 23.2544 22.6675C23.3009 22.6611 23.3474 22.633 23.394 22.5825C23.4333 22.5392 23.455 22.4991 23.4574 22.4605C23.4598 22.4228 23.4469 22.3907 23.418 22.3643V22.3659Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_31",
-									"d": "M24.0366 22.0386C23.9724 22.1188 23.8946 22.1629 23.8039 22.1718C23.7133 22.1806 23.6266 22.1517 23.5424 22.0843L23.5271 22.0715C23.471 22.0265 23.43 21.9752 23.4028 21.9182C23.3763 21.8612 23.3659 21.8027 23.3731 21.7441C23.3803 21.6855 23.4028 21.6318 23.4413 21.5836C23.5031 21.5074 23.5753 21.4681 23.6571 21.4657C23.7389 21.4633 23.8256 21.4978 23.9147 21.57L23.9652 21.6109L23.6691 21.9776C23.7189 22.0113 23.7678 22.0249 23.8168 22.0201C23.8657 22.0145 23.9066 21.9912 23.9403 21.9503C23.9869 21.8925 24.0013 21.8267 23.9845 21.7529L24.104 21.7369C24.1193 21.7866 24.1217 21.8372 24.1096 21.8901C24.0976 21.9423 24.0735 21.992 24.0358 22.0386H24.0366ZM23.5432 21.6655C23.5151 21.7 23.5047 21.7377 23.5119 21.7786C23.5191 21.8195 23.5416 21.8604 23.5801 21.9014L23.7742 21.6607L23.7646 21.6534C23.7205 21.6221 23.6788 21.6077 23.6419 21.6101C23.6042 21.6125 23.5713 21.631 23.5432 21.6663V21.6655Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_32",
-									"d": "M24.0584 21.0357C24.0432 21.0509 24.0287 21.0678 24.0151 21.0862C23.9718 21.1464 23.9653 21.2034 23.9958 21.2579L24.3946 21.5484L24.2991 21.6791L23.7158 21.2547L23.8065 21.1295L23.8739 21.1737C23.8466 21.1055 23.853 21.0429 23.8939 20.9867C23.9076 20.9683 23.9212 20.9546 23.9349 20.9458L24.0576 21.0357H24.0584Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_33",
-									"d": "M24.5717 20.9305L24.2243 20.5197L24.3166 20.3801L24.7827 20.9851L24.7057 21.103L23.9644 20.9177L24.0566 20.7773L24.5733 20.9313L24.5717 20.9305Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_34",
-									"d": "M24.2029 20.1997C24.1812 20.1868 24.1676 20.1692 24.1619 20.1475C24.1555 20.1258 24.1603 20.1018 24.1756 20.0769C24.1908 20.052 24.2093 20.0368 24.2318 20.0312C24.2542 20.0255 24.2759 20.0296 24.2975 20.0424C24.3184 20.0552 24.332 20.0721 24.3377 20.0945C24.3433 20.117 24.3385 20.1403 24.324 20.1652C24.3088 20.19 24.2903 20.2053 24.2687 20.2109C24.247 20.2157 24.2253 20.2125 24.2045 20.1997H24.2029ZM25.071 20.5182L24.9876 20.657L24.3681 20.2863L24.4516 20.1475L25.071 20.5182Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_35",
-									"d": "M25.2146 20.0271C25.2339 19.9918 25.2395 19.9565 25.2315 19.922C25.2235 19.8875 25.205 19.861 25.1745 19.8426L25.2475 19.7086C25.286 19.7318 25.3165 19.7639 25.3382 19.8056C25.3599 19.8474 25.3703 19.8931 25.3687 19.9436C25.3671 19.9942 25.3542 20.0423 25.3294 20.0881C25.2812 20.1771 25.2146 20.2317 25.1288 20.2525C25.0429 20.2734 24.9499 20.2566 24.8488 20.202L24.8343 20.194C24.738 20.1418 24.6747 20.0744 24.6442 19.991C24.6137 19.9075 24.6233 19.8217 24.6715 19.7326C24.7124 19.6572 24.7677 19.6075 24.8375 19.5842C24.9073 19.5601 24.9788 19.5665 25.0518 19.6035L24.9788 19.7374C24.9418 19.719 24.9049 19.7158 24.8688 19.7262C24.8327 19.7366 24.8054 19.7599 24.7854 19.796C24.7605 19.8426 24.7581 19.8867 24.7782 19.93C24.7982 19.9733 24.8416 20.0134 24.9098 20.0504L24.933 20.0624C25.002 20.0993 25.0598 20.1153 25.1071 20.1081C25.1545 20.1009 25.1906 20.0744 25.2162 20.0279L25.2146 20.0271Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_36",
-									"d": "M25.6743 19.398C25.6309 19.4911 25.5659 19.5529 25.4809 19.5834C25.3959 19.6139 25.3036 19.6066 25.2065 19.5609L25.188 19.5521C25.1231 19.5216 25.0701 19.4815 25.0308 19.4325C24.9915 19.3836 24.9674 19.329 24.9602 19.2705C24.953 19.2119 24.9618 19.1541 24.9883 19.098C25.03 19.0089 25.0902 18.9535 25.1696 18.9311C25.249 18.9086 25.3405 18.9222 25.4448 18.9704L25.5042 18.9977L25.3052 19.4253C25.3614 19.4462 25.4127 19.4478 25.4584 19.4309C25.505 19.4141 25.5387 19.3812 25.5611 19.3338C25.5924 19.2664 25.5908 19.199 25.5563 19.1316L25.6686 19.0875C25.6951 19.1316 25.7096 19.1814 25.7104 19.2352C25.7112 19.2889 25.6991 19.3427 25.6743 19.3972V19.398ZM25.1054 19.1541C25.087 19.1942 25.0853 19.2335 25.1022 19.2713C25.119 19.309 25.1511 19.3435 25.1977 19.374L25.3285 19.0939L25.3172 19.0891C25.2667 19.0691 25.2234 19.0651 25.1872 19.0763C25.1511 19.0875 25.1239 19.1132 25.1046 19.1541H25.1054Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_37",
-									"d": "M25.8155 17.7453C25.9054 17.7774 25.9784 17.8199 26.0354 17.8753C26.0923 17.9306 26.1284 17.9932 26.1445 18.063C26.1605 18.1328 26.1549 18.2059 26.1284 18.2813C26.102 18.3551 26.061 18.4153 26.0041 18.4602C25.9471 18.5051 25.8797 18.5324 25.8019 18.5404C25.7232 18.5485 25.6406 18.5372 25.5532 18.5067L25.5018 18.4883C25.4127 18.457 25.3389 18.4129 25.282 18.3575C25.225 18.3013 25.1881 18.2387 25.172 18.1681C25.156 18.0975 25.1616 18.0253 25.1881 17.9507C25.2146 17.8761 25.2555 17.8159 25.3116 17.771C25.3678 17.7261 25.4352 17.6996 25.5138 17.6924C25.5925 17.6843 25.6759 17.6964 25.7658 17.7277L25.8163 17.7453H25.8155ZM25.712 17.8873C25.6109 17.8512 25.5259 17.8432 25.4585 17.8625C25.3911 17.8817 25.3445 17.9266 25.3197 17.9972C25.2956 18.0662 25.3036 18.1296 25.3437 18.1874C25.3839 18.2452 25.4529 18.2917 25.5515 18.3278L25.6045 18.3463C25.7048 18.3816 25.7898 18.3896 25.8588 18.3695C25.9278 18.3495 25.9744 18.3053 25.9993 18.2355C26.0241 18.1649 26.0161 18.1015 25.976 18.0446C25.9359 17.9876 25.8637 17.9411 25.761 17.905L25.7128 17.8881L25.712 17.8873Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_38",
-									"d": "M25.8541 17.1956C25.8444 17.2149 25.8372 17.2357 25.8308 17.2574C25.8099 17.3288 25.8236 17.385 25.8709 17.4251L26.3451 17.5615L26.3002 17.7171L25.6069 17.5173L25.6495 17.3689L25.7281 17.3874C25.6783 17.332 25.6639 17.2718 25.6832 17.2052C25.6896 17.1828 25.6976 17.1651 25.708 17.1531L25.8541 17.1956Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_39",
-									"d": "M26.0747 17.182C25.9656 17.1563 25.8846 17.1106 25.8316 17.044C25.7787 16.9774 25.7618 16.902 25.7819 16.8169C25.8003 16.7367 25.8437 16.6805 25.9102 16.6477L25.8412 16.6236L25.8749 16.4816L26.5561 16.6412C26.6484 16.6629 26.7142 16.7086 26.7543 16.7784C26.7944 16.8482 26.8024 16.9317 26.78 17.0296C26.7679 17.0809 26.7455 17.1291 26.7126 17.1732C26.6797 17.2173 26.6428 17.2478 26.6019 17.2655L26.5248 17.1684C26.5938 17.1331 26.6364 17.0801 26.6532 17.0095C26.6652 16.9574 26.6612 16.9124 26.6396 16.8755C26.6179 16.8386 26.5802 16.8137 26.5248 16.8009L26.4775 16.7897C26.5176 16.8466 26.5289 16.9132 26.5112 16.9894C26.4919 17.0713 26.4438 17.1315 26.366 17.1684C26.2881 17.2053 26.1919 17.2101 26.0763 17.1828L26.0747 17.182ZM26.1253 17.028C26.1959 17.0448 26.2545 17.0432 26.3018 17.0239C26.3491 17.0047 26.3788 16.9694 26.3908 16.918C26.4061 16.8547 26.3892 16.8009 26.3419 16.7576L26.033 16.6854C25.9728 16.703 25.9351 16.7431 25.9199 16.8065C25.9078 16.8587 25.9191 16.9036 25.9536 16.9421C25.9881 16.9806 26.045 17.0095 26.1253 17.028Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_40",
-									"d": "M26.6877 16.0219C26.6733 16.0267 26.65 16.0291 26.6179 16.0291C26.662 16.0892 26.6781 16.1558 26.6661 16.2297C26.654 16.3011 26.6235 16.3556 26.5754 16.3941C26.5273 16.4326 26.4727 16.4463 26.4125 16.4359C26.3371 16.423 26.2833 16.3853 26.252 16.3219C26.2208 16.2585 26.2143 16.1751 26.232 16.07L26.2488 15.9721L26.2023 15.9641C26.1654 15.9577 26.1341 15.9633 26.1084 15.9801C26.0828 15.997 26.0667 16.0267 26.0595 16.0684C26.0531 16.1045 26.0571 16.1358 26.0715 16.1623C26.086 16.1887 26.1068 16.204 26.1349 16.2088L26.1076 16.3685C26.0683 16.362 26.0346 16.3428 26.0049 16.3115C25.9752 16.2802 25.9544 16.2401 25.9431 16.1927C25.9311 16.1446 25.9303 16.0941 25.9399 16.0387C25.9544 15.9553 25.9865 15.8927 26.0362 15.8502C26.0868 15.8076 26.1493 15.7924 26.2256 15.8036L26.5465 15.8582C26.6107 15.8694 26.6628 15.8686 26.7046 15.8574L26.7158 15.859L26.6885 16.0219H26.6877ZM26.5433 16.1783C26.5489 16.147 26.5457 16.1157 26.5353 16.0852C26.5248 16.0547 26.508 16.0307 26.4839 16.0122L26.3499 15.9898L26.3355 16.0756C26.3259 16.135 26.3283 16.1807 26.3435 16.2144C26.3588 16.2481 26.386 16.2674 26.4237 16.2738C26.4542 16.2786 26.4807 16.273 26.5024 16.2553C26.524 16.2377 26.5377 16.212 26.5433 16.1783Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_41",
-									"d": "M26.0384 15.453L26.1219 15.457C26.0633 15.3968 26.0392 15.3238 26.0481 15.2379C26.0641 15.0887 26.158 15.0213 26.3289 15.0374L26.8031 15.0879L26.7862 15.2492L26.3217 15.1994C26.2759 15.1946 26.2414 15.201 26.2174 15.2179C26.1933 15.2355 26.1788 15.266 26.174 15.3109C26.1668 15.3759 26.1909 15.4273 26.247 15.4658L26.7573 15.5204L26.7405 15.6816L26.0232 15.6046L26.0392 15.453H26.0384Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_42",
-									"d": "M25.9078 14.8416C25.883 14.84 25.8629 14.8312 25.8477 14.8143C25.8324 14.7975 25.8252 14.7742 25.8276 14.7453C25.8292 14.7165 25.8388 14.694 25.8565 14.6787C25.8741 14.6635 25.895 14.6571 25.9199 14.6587C25.9439 14.6603 25.964 14.6691 25.9792 14.6868C25.9945 14.7036 26.0009 14.7269 25.9993 14.7566C25.9977 14.7855 25.9881 14.8079 25.9712 14.8224C25.9544 14.8368 25.9335 14.844 25.9086 14.8424L25.9078 14.8416ZM26.8257 14.7261L26.8161 14.8882L26.0956 14.8432L26.1052 14.6812L26.8257 14.7261Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_43",
-									"d": "M26.7116 14.3489L26.7196 13.9646L26.8488 13.967L26.8368 14.5527L26.7309 14.5503L26.2535 14.1748L26.2463 14.5343L26.1155 14.5319L26.1267 13.967L26.2294 13.9694L26.7116 14.3497V14.3489Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_44",
-									"d": "M26.8312 13.3741C26.8176 13.3813 26.7951 13.3885 26.7646 13.395C26.82 13.4447 26.8497 13.5065 26.8521 13.5811C26.8545 13.6533 26.8361 13.7135 26.7967 13.7608C26.7574 13.8082 26.7069 13.833 26.6459 13.8354C26.5689 13.8386 26.5087 13.8122 26.4662 13.756C26.4229 13.7006 26.3996 13.6196 26.3956 13.5137L26.3916 13.4142L26.3442 13.4158C26.3065 13.4174 26.2776 13.4287 26.256 13.4503C26.2343 13.472 26.2247 13.5041 26.2255 13.5466C26.2271 13.5835 26.2375 13.6132 26.2568 13.6365C26.276 13.6597 26.3001 13.6702 26.3282 13.6694L26.3338 13.8314C26.2945 13.833 26.2568 13.821 26.2215 13.7961C26.1862 13.7712 26.1581 13.7367 26.1364 13.6918C26.1156 13.6477 26.1035 13.5971 26.1019 13.5418C26.0987 13.4575 26.1172 13.3893 26.1581 13.3372C26.199 13.285 26.2576 13.2578 26.3338 13.2529L26.6587 13.2409C26.7237 13.2385 26.7751 13.2273 26.8128 13.208H26.824L26.8304 13.3725L26.8312 13.3741ZM26.7213 13.5562C26.7205 13.5241 26.7117 13.4944 26.6948 13.4672C26.678 13.4399 26.6563 13.419 26.6299 13.4062L26.4943 13.411L26.4975 13.4985C26.4999 13.5586 26.5119 13.6028 26.5336 13.6324C26.5552 13.6621 26.5857 13.6758 26.6242 13.6742C26.6555 13.6734 26.6796 13.6621 26.6973 13.6405C26.7149 13.6188 26.7229 13.5915 26.7221 13.5562H26.7213Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_45",
-									"d": "M25.8997 12.9119L26.0746 12.8967L26.0641 12.7699L26.1837 12.7595L26.1941 12.8862L26.5953 12.8517C26.6226 12.8493 26.6418 12.8421 26.6531 12.8301C26.6643 12.818 26.6691 12.798 26.6667 12.7707C26.6651 12.7522 26.6611 12.7338 26.6555 12.7145L26.7806 12.7041C26.7943 12.7402 26.8023 12.7747 26.8047 12.8092C26.8151 12.9336 26.7517 13.001 26.6153 13.013L26.2078 13.0475L26.2182 13.1654L26.0986 13.1759L26.0882 13.0579L25.9133 13.0732L25.8997 12.9119Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_46",
-									"d": "M25.8638 12.672C25.8389 12.6752 25.8172 12.6696 25.7996 12.656C25.7819 12.6423 25.7707 12.6207 25.7675 12.5918C25.7643 12.5629 25.7699 12.5388 25.7843 12.5212C25.7988 12.5035 25.818 12.4931 25.8429 12.4899C25.867 12.4867 25.8886 12.4923 25.9063 12.5067C25.9239 12.5212 25.9352 12.542 25.9384 12.5717C25.9416 12.6014 25.9368 12.6239 25.9223 12.6415C25.9079 12.6592 25.8886 12.6696 25.8646 12.672H25.8638ZM26.7463 12.3944L26.7656 12.5557L26.0491 12.6407L26.0298 12.4795L26.7463 12.3944Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_47",
-									"d": "M26.365 12.2814C26.2952 12.2926 26.2302 12.2894 26.17 12.2709C26.1098 12.2525 26.0601 12.2212 26.0216 12.1755C25.9831 12.1305 25.959 12.0752 25.9478 12.0102C25.9317 11.9139 25.9502 11.8312 26.0015 11.7606C26.0537 11.6908 26.1299 11.6443 26.2318 11.6226L26.2695 11.6154C26.3401 11.6042 26.4043 11.6066 26.4645 11.625C26.5246 11.6427 26.5736 11.6748 26.6121 11.7197C26.6506 11.7647 26.6755 11.8208 26.6859 11.8866C26.7028 11.9869 26.6827 12.0728 26.6257 12.1442C26.5688 12.2156 26.4845 12.2605 26.373 12.279L26.365 12.2806V12.2814ZM26.3521 12.1193C26.4251 12.1073 26.4805 12.0824 26.5166 12.0455C26.5535 12.0086 26.5672 11.9628 26.5575 11.9091C26.5487 11.8553 26.5206 11.8168 26.4733 11.7935C26.426 11.7703 26.3618 11.7655 26.2807 11.7791C26.2085 11.7911 26.154 11.816 26.1171 11.8537C26.0801 11.8914 26.0657 11.9372 26.0745 11.9901C26.0834 12.0423 26.1106 12.08 26.1572 12.104C26.2037 12.1281 26.2679 12.1329 26.3505 12.1193H26.3521Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_48",
-									"d": "M25.8461 11.4036L25.9263 11.3803C25.8517 11.3426 25.8044 11.2816 25.7851 11.1974C25.7514 11.0513 25.818 10.9575 25.9849 10.9157L26.4494 10.8082L26.4855 10.9663L26.0298 11.0714C25.9849 11.0818 25.9544 11.0987 25.9375 11.1235C25.9207 11.1476 25.9175 11.1821 25.9271 11.2254C25.9416 11.2888 25.9817 11.3297 26.0467 11.3474L26.5473 11.2319L26.5842 11.3899L25.8814 11.552L25.8469 11.4036H25.8461Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_49",
-									"d": "M26.0946 10.2811C26.0665 10.2891 26.0489 10.3068 26.0416 10.3341C26.0336 10.3613 26.032 10.4031 26.0368 10.4592C26.0416 10.5154 26.04 10.5635 26.0336 10.6044C26.0192 10.6935 25.9758 10.7481 25.9052 10.7689C25.8459 10.7866 25.7881 10.7761 25.7335 10.7376C25.679 10.6991 25.6397 10.6414 25.6164 10.5635C25.5923 10.4809 25.5923 10.4079 25.6188 10.3445C25.6445 10.2811 25.6902 10.2402 25.7552 10.2209L25.8009 10.3766C25.7712 10.3854 25.7496 10.4039 25.7359 10.4319C25.7223 10.46 25.7215 10.4921 25.7319 10.529C25.7424 10.5635 25.7584 10.5884 25.7801 10.6052C25.8025 10.6221 25.8266 10.6269 25.8531 10.6189C25.8772 10.6117 25.8924 10.5964 25.8996 10.5724C25.9068 10.5483 25.9084 10.5042 25.9036 10.4392C25.8988 10.3742 25.9012 10.322 25.9093 10.2811C25.9173 10.241 25.9325 10.2089 25.9534 10.184C25.9742 10.1591 26.0031 10.1415 26.0408 10.1311C26.1034 10.1126 26.1612 10.1238 26.2149 10.164C26.2687 10.2041 26.308 10.2659 26.3329 10.3493C26.3497 10.4063 26.3545 10.4592 26.3465 10.5098C26.3393 10.5603 26.3208 10.6028 26.2928 10.6381C26.2639 10.6734 26.2294 10.6975 26.1877 10.7095L26.1427 10.5587C26.1788 10.5459 26.2029 10.5234 26.2149 10.4921C26.227 10.4608 26.227 10.4239 26.2149 10.3814C26.2029 10.3405 26.1861 10.3116 26.1644 10.2947C26.1427 10.2779 26.1187 10.2731 26.0938 10.2811H26.0946Z",
-									"fill": "white"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Group_2"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Group_3"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_50",
-											"d": "M8.9457 10.9173H6.97035L6.52184 12.1393H6.13672L7.78312 7.78821H8.13294L9.77933 12.1393H9.39662L8.9457 10.9173ZM7.08428 10.6068H8.82937L7.95642 8.23672L7.08348 10.6068H7.08428Z",
-											"fill": "white"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_51",
-											"d": "M10.8064 12.1401H10.439V7.78906H10.8064V12.1401Z",
-											"fill": "white"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_52",
-											"d": "M15.0067 10.7833C14.9569 11.2415 14.7933 11.5921 14.5149 11.8352C14.2364 12.0783 13.8666 12.1995 13.4044 12.1995C13.0819 12.1995 12.7962 12.1184 12.5483 11.9572C12.3004 11.7959 12.1086 11.5672 11.973 11.2712C11.8375 10.9751 11.7685 10.6373 11.7668 10.2562V9.69135C11.7668 9.30462 11.8342 8.96202 11.9698 8.66355C12.1054 8.36508 12.3004 8.13401 12.5539 7.97194C12.8083 7.80987 13.1003 7.72803 13.4309 7.72803C13.8971 7.72803 14.2653 7.85319 14.5349 8.10432C14.8045 8.35546 14.9618 8.70287 15.0059 9.14736H14.6352C14.5437 8.40841 14.1418 8.03853 13.4309 8.03853C13.0361 8.03853 12.7224 8.18616 12.4881 8.48142C12.2539 8.77668 12.1367 9.18427 12.1367 9.70499V10.2377C12.1367 10.74 12.2507 11.1412 12.4785 11.4396C12.7064 11.7389 13.0153 11.8882 13.4036 11.8882C13.7919 11.8882 14.0776 11.7959 14.2733 11.6113C14.4683 11.4268 14.5895 11.1508 14.6352 10.7817H15.0059L15.0067 10.7833Z",
-											"fill": "white"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_53",
-											"d": "M16.2061 10.3678V12.1401H15.8386V7.78906H17.3205C17.7731 7.78906 18.1301 7.9046 18.3917 8.13567C18.654 8.36675 18.7848 8.68447 18.7848 9.08885C18.7848 9.49323 18.6588 9.81256 18.4069 10.0348C18.155 10.2571 17.7899 10.3678 17.3117 10.3678H16.2061ZM16.2061 10.0573H17.3205C17.6768 10.0573 17.9488 9.97222 18.1365 9.80293C18.3235 9.63364 18.4173 9.39695 18.4173 9.09366C18.4173 8.79038 18.3243 8.55209 18.1381 8.37397C17.952 8.19505 17.6872 8.10438 17.3446 8.10037H16.2061V10.0581V10.0573Z",
-											"fill": "white"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_54",
-											"d": "M21.4823 10.9173H19.507L19.0585 12.1393H18.6733L20.3197 7.78821H20.6696L22.316 12.1393H21.9332L21.4823 10.9173ZM19.6201 10.6068H21.3652L20.4922 8.23672L19.6193 10.6068H19.6201Z",
-											"fill": "white"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_55",
-											"d": "M11.4289 18.1368C11.4289 17.8961 11.3438 17.7051 11.1745 17.5647C11.0052 17.4243 10.6955 17.2911 10.2454 17.1643C9.79532 17.0376 9.46636 16.8996 9.25936 16.7503C8.9641 16.5393 8.81727 16.2625 8.81727 15.9199C8.81727 15.5773 8.95447 15.3165 9.22807 15.1087C9.50167 14.9009 9.85229 14.7966 10.2783 14.7966C10.5672 14.7966 10.8255 14.8528 11.0542 14.9643C11.2821 15.0758 11.4594 15.2315 11.5845 15.4305C11.7097 15.6295 11.7731 15.8517 11.7731 16.0972H11.4024C11.4024 15.7996 11.3005 15.5605 11.0975 15.3791C10.8945 15.1978 10.6217 15.1079 10.2783 15.1079C9.93493 15.1079 9.68059 15.1826 9.48321 15.331C9.28584 15.4794 9.18715 15.6736 9.18715 15.9135C9.18715 16.1349 9.27541 16.3155 9.45272 16.4551C9.63004 16.5947 9.91407 16.7182 10.304 16.8249C10.6947 16.9317 10.99 17.0424 11.1914 17.1571C11.3928 17.2718 11.5444 17.4082 11.6455 17.5679C11.7474 17.7276 11.798 17.9153 11.798 18.1328C11.798 18.4754 11.6608 18.7506 11.3872 18.9576C11.1136 19.1646 10.7525 19.2681 10.304 19.2681C9.99751 19.2681 9.71589 19.2135 9.45994 19.1036C9.204 18.9937 9.00983 18.8404 8.87745 18.643C8.74506 18.4457 8.67847 18.2194 8.67847 17.9651H9.04594C9.04594 18.2716 9.16067 18.5139 9.38934 18.6912C9.618 18.8685 9.92289 18.9568 10.304 18.9568C10.6426 18.9568 10.9146 18.8821 11.12 18.7329C11.3254 18.5837 11.4281 18.3855 11.4281 18.1384L11.4289 18.1368Z",
-											"fill": "white"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_56",
-											"d": "M15.7455 17.267C15.7455 17.6673 15.6765 18.0188 15.5377 18.3221C15.3989 18.6245 15.2015 18.858 14.9448 19.0217C14.688 19.1854 14.3911 19.2664 14.0542 19.2664C13.5463 19.2664 13.1355 19.0843 12.8234 18.7208C12.5105 18.3574 12.354 17.8663 12.354 17.2493V16.8008C12.354 16.4045 12.4246 16.053 12.565 15.7473C12.7054 15.4417 12.9044 15.2066 13.1612 15.0421C13.4179 14.8776 13.714 14.7958 14.0485 14.7958C14.3831 14.7958 14.6784 14.8768 14.9343 15.0381C15.1903 15.1994 15.3876 15.4272 15.5273 15.7225C15.6669 16.0177 15.7391 16.3587 15.7455 16.7479V17.2678V17.267ZM15.378 16.7944C15.378 16.2705 15.2593 15.8597 15.0226 15.5628C14.7851 15.2659 14.4609 15.1175 14.0485 15.1175C13.6361 15.1175 13.3216 15.2667 13.0817 15.5644C12.8418 15.8621 12.7215 16.2785 12.7215 16.8121V17.2662C12.7215 17.7821 12.841 18.1913 13.0801 18.4929C13.3192 18.7946 13.6442 18.9455 14.0542 18.9455C14.4642 18.9455 14.7955 18.7962 15.0282 18.4986C15.2617 18.2009 15.378 17.7861 15.378 17.2541V16.7936V16.7944Z",
-											"fill": "white"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"id": "Vector_57",
-											"d": "M19.6922 17.8495C19.6425 18.3076 19.4788 18.6583 19.2004 18.9014C18.922 19.1445 18.5521 19.2656 18.09 19.2656C17.7674 19.2656 17.4818 19.1846 17.2339 19.0233C16.9859 18.862 16.7942 18.6334 16.6586 18.3373C16.523 18.0413 16.454 17.7035 16.4524 17.3224V16.7575C16.4524 16.3708 16.5198 16.0282 16.6554 15.7297C16.791 15.4312 16.9859 15.2002 17.2395 15.0381C17.4938 14.876 17.7859 14.7942 18.1164 14.7942C18.5826 14.7942 18.9509 14.9194 19.2205 15.1705C19.49 15.4216 19.6473 15.769 19.6914 16.2135H19.3208C19.2293 15.4746 18.8273 15.1047 18.1164 15.1047C17.7217 15.1047 17.408 15.2523 17.1737 15.5476C16.9394 15.8428 16.8223 16.2504 16.8223 16.7712V17.3039C16.8223 17.8062 16.9362 18.2073 17.1641 18.5058C17.3919 18.8051 17.7008 18.9543 18.0892 18.9543C18.4775 18.9543 18.7631 18.862 18.9589 18.6775C19.1539 18.493 19.275 18.217 19.3208 17.8479H19.6914L19.6922 17.8495Z",
-											"fill": "white"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_58",
-									"d": "M6.00195 13.5538H22.5871",
-									"stroke": "white",
-									"stroke-width": "0.111926",
-									"stroke-linecap": "round",
-									"stroke-linejoin": "round"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Group_4"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_59",
-									"d": "M8.72524 21.7257C8.71722 21.7089 8.71 21.68 8.70518 21.6374C8.63859 21.7064 8.55916 21.7409 8.46609 21.7409C8.38345 21.7409 8.31525 21.7177 8.26229 21.6711C8.20934 21.6246 8.18286 21.5652 8.18286 21.493C8.18286 21.4056 8.21576 21.3382 8.28235 21.2892C8.34895 21.2411 8.44202 21.217 8.56237 21.217H8.70197V21.1512C8.70197 21.1015 8.68673 21.0614 8.65704 21.0317C8.62736 21.002 8.58323 20.9868 8.52466 20.9868C8.47331 20.9868 8.43078 20.9996 8.39628 21.0253C8.36178 21.0509 8.34413 21.0822 8.34413 21.1191H8.19971C8.19971 21.0774 8.21496 21.0365 8.24464 20.998C8.27433 20.9587 8.31444 20.9282 8.36579 20.9057C8.41634 20.8833 8.47251 20.8712 8.53348 20.8712C8.63057 20.8712 8.70599 20.8953 8.76055 20.9434C8.8151 20.9916 8.84399 21.0582 8.84559 21.1432V21.5291C8.84559 21.6062 8.85522 21.6671 8.87528 21.7129V21.7249H8.72444L8.72524 21.7257ZM8.48695 21.6166C8.53188 21.6166 8.5744 21.6046 8.61452 21.5821C8.65464 21.5588 8.68432 21.5283 8.70197 21.4914V21.3189H8.58965C8.41393 21.3189 8.32568 21.3703 8.32568 21.473C8.32568 21.5179 8.34092 21.5532 8.37061 21.5781C8.4003 21.6037 8.43881 21.6158 8.48615 21.6158L8.48695 21.6166Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_60",
-									"d": "M9.03174 20.6642C9.03174 20.6409 9.03896 20.6209 9.0534 20.6056C9.06784 20.5904 9.0887 20.5815 9.11679 20.5815C9.14487 20.5815 9.16573 20.5896 9.18017 20.6056C9.19461 20.6217 9.20183 20.6409 9.20183 20.6642C9.20183 20.6875 9.19461 20.7067 9.18017 20.722C9.16573 20.7372 9.14487 20.7452 9.11679 20.7452C9.0887 20.7452 9.06784 20.7372 9.0534 20.722C9.03896 20.7067 9.03174 20.6866 9.03174 20.6642ZM9.18659 21.7257H9.04297V20.8864H9.18659V21.7257Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_61",
-									"d": "M9.71276 21.6246C9.76411 21.6246 9.80824 21.6094 9.84675 21.5781C9.88526 21.5468 9.90612 21.5083 9.91013 21.4618H10.0457C10.0433 21.5099 10.0265 21.5556 9.99598 21.599C9.96549 21.6423 9.92457 21.6768 9.87403 21.7025C9.82348 21.7281 9.76892 21.741 9.71276 21.741C9.59882 21.741 9.50736 21.7025 9.43996 21.6262C9.37257 21.55 9.33887 21.4457 9.33887 21.3133V21.2893C9.33887 21.2074 9.35411 21.1352 9.3838 21.071C9.41348 21.0076 9.45681 20.9579 9.51297 20.9226C9.56914 20.8873 9.63573 20.8696 9.71195 20.8696C9.80583 20.8696 9.88446 20.8977 9.94624 20.9539C10.0088 21.01 10.0417 21.0831 10.0457 21.1737H9.91013C9.90612 21.1192 9.88526 21.075 9.84835 21.0397C9.81144 21.0052 9.76571 20.9876 9.71115 20.9876C9.63814 20.9876 9.58198 21.0141 9.54186 21.0662C9.50174 21.1184 9.48168 21.1946 9.48168 21.2941V21.3213C9.48168 21.4184 9.50174 21.4922 9.54106 21.5444C9.58117 21.5965 9.63814 21.623 9.71195 21.623L9.71276 21.6246Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_62",
-									"d": "M10.877 21.3156C10.877 21.4432 10.8481 21.5459 10.7895 21.6245C10.731 21.7024 10.6523 21.7417 10.552 21.7417C10.4518 21.7417 10.3699 21.7096 10.3113 21.6446V22.049H10.1677V20.8872H10.2985L10.3057 20.9803C10.3643 20.9081 10.4453 20.8719 10.5488 20.8719C10.6523 20.8719 10.7294 20.9097 10.7879 20.9859C10.8465 21.0621 10.8762 21.168 10.8762 21.3028V21.3156H10.877ZM10.7334 21.2996C10.7334 21.2049 10.7133 21.1303 10.6732 21.0757C10.6331 21.0212 10.5777 20.9939 10.5071 20.9939C10.4205 20.9939 10.3555 21.0324 10.3113 21.1094V21.5106C10.3547 21.5868 10.4197 21.6253 10.5087 21.6253C10.5777 21.6253 10.6323 21.5981 10.6724 21.5435C10.7133 21.4889 10.7334 21.4079 10.7334 21.3004V21.2996Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_63",
-									"d": "M11.5373 21.7257C11.5292 21.7089 11.522 21.68 11.5172 21.6374C11.4506 21.7064 11.3712 21.7409 11.2781 21.7409C11.1955 21.7409 11.1273 21.7177 11.0743 21.6711C11.0214 21.6246 10.9949 21.5652 10.9949 21.493C10.9949 21.4056 11.0278 21.3382 11.0944 21.2892C11.161 21.2411 11.254 21.217 11.3744 21.217H11.514V21.1512C11.514 21.1015 11.4987 21.0614 11.4691 21.0317C11.4394 21.002 11.3952 20.9868 11.3367 20.9868C11.2853 20.9868 11.2428 20.9996 11.2083 21.0253C11.1738 21.0509 11.1561 21.0822 11.1561 21.1191H11.0117C11.0117 21.0774 11.027 21.0365 11.0567 20.998C11.0863 20.9587 11.1265 20.9282 11.1778 20.9057C11.2284 20.8833 11.2845 20.8712 11.3455 20.8712C11.4426 20.8712 11.518 20.8953 11.5726 20.9434C11.6271 20.9916 11.656 21.0582 11.6576 21.1432V21.5291C11.6576 21.6062 11.6672 21.6671 11.6873 21.7129V21.7249H11.5365L11.5373 21.7257ZM11.299 21.6166C11.3439 21.6166 11.3864 21.6046 11.4265 21.5821C11.4666 21.5588 11.4963 21.5283 11.514 21.4914V21.3189H11.4017C11.2259 21.3189 11.1377 21.3703 11.1377 21.473C11.1377 21.5179 11.1529 21.5532 11.1826 21.5781C11.2123 21.6037 11.2508 21.6158 11.2982 21.6158L11.299 21.6166Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_64",
-									"d": "M11.8462 21.6511C11.8462 21.6262 11.8534 21.6054 11.8687 21.5893C11.8839 21.5733 11.9056 21.5645 11.9353 21.5645C11.9649 21.5645 11.9874 21.5725 12.0026 21.5893C12.0179 21.6062 12.0259 21.6262 12.0259 21.6511C12.0259 21.676 12.0179 21.6944 12.0026 21.7105C11.9874 21.7265 11.9649 21.7346 11.9353 21.7346C11.9056 21.7346 11.8839 21.7265 11.8687 21.7105C11.8534 21.6944 11.8462 21.6744 11.8462 21.6511Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_65",
-									"d": "M12.1841 21.2988C12.1841 21.217 12.2001 21.1423 12.2322 21.0773C12.2643 21.0124 12.3092 20.961 12.367 20.9257C12.4248 20.8904 12.4906 20.8719 12.5644 20.8719C12.6783 20.8719 12.7714 20.9113 12.842 20.9907C12.9126 21.0701 12.9479 21.1752 12.9479 21.306V21.3164C12.9479 21.3983 12.9327 21.4713 12.9014 21.5363C12.8701 21.6013 12.8252 21.6518 12.7674 21.6879C12.7088 21.724 12.6422 21.7425 12.5668 21.7425C12.4529 21.7425 12.3606 21.7032 12.29 21.6237C12.2194 21.5443 12.1841 21.44 12.1841 21.31V21.2996V21.2988ZM12.3277 21.3156C12.3277 21.4087 12.3494 21.4833 12.3927 21.5395C12.436 21.5957 12.4938 21.6237 12.566 21.6237C12.6382 21.6237 12.6968 21.5949 12.7393 21.5379C12.7818 21.4809 12.8035 21.4007 12.8035 21.298C12.8035 21.2057 12.7818 21.1311 12.7377 21.0741C12.6944 21.0172 12.6358 20.9883 12.5636 20.9883C12.4914 20.9883 12.436 21.0164 12.3919 21.0725C12.3478 21.1287 12.3269 21.2097 12.3269 21.3148L12.3277 21.3156Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_66",
-									"d": "M13.4936 21.0156C13.472 21.0124 13.4487 21.01 13.423 21.01C13.3292 21.01 13.265 21.0501 13.2313 21.1304V21.7257H13.0876V20.8865H13.2273L13.2297 20.9835C13.277 20.9089 13.3436 20.8712 13.4294 20.8712C13.4575 20.8712 13.4784 20.8744 13.4928 20.8824V21.0156H13.4936Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_67",
-									"d": "M13.5361 21.2996C13.5361 21.1688 13.5666 21.0645 13.6268 20.9875C13.687 20.9105 13.7672 20.8719 13.8675 20.8719C13.9678 20.8719 14.0496 20.9081 14.1074 20.9803L14.1146 20.8872H14.2454V21.7064C14.2454 21.8147 14.2133 21.9005 14.1491 21.9631C14.0849 22.0257 13.9983 22.057 13.89 22.057C13.8298 22.057 13.7704 22.0442 13.7126 22.0185C13.6549 21.9928 13.6107 21.9575 13.5803 21.9126L13.6549 21.8267C13.7167 21.903 13.7913 21.9407 13.8803 21.9407C13.9501 21.9407 14.0047 21.9206 14.0432 21.8821C14.0825 21.8428 14.1018 21.7874 14.1018 21.716V21.6438C14.044 21.7104 13.9662 21.7433 13.8667 21.7433C13.7672 21.7433 13.6894 21.704 13.6284 21.6245C13.5674 21.5451 13.5369 21.4376 13.5369 21.3012L13.5361 21.2996ZM13.6806 21.3156C13.6806 21.4103 13.6998 21.4849 13.7391 21.5387C13.7776 21.5924 13.8322 21.6197 13.902 21.6197C13.9927 21.6197 14.0593 21.5788 14.101 21.4962V21.1135C14.0568 21.0332 13.9911 20.9931 13.9036 20.9931C13.8338 20.9931 13.7792 21.0204 13.7399 21.0749C13.7006 21.1295 13.6814 21.2097 13.6814 21.3164L13.6806 21.3156Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_68",
-									"d": "M14.4505 21.8228H14.3269L14.7987 20.5968H14.9214L14.4505 21.8228Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_69",
-									"d": "M15.5251 21.5035C15.5251 21.4649 15.5107 21.4345 15.481 21.4128C15.4521 21.3911 15.4008 21.3727 15.3286 21.3574C15.2556 21.3422 15.1986 21.3229 15.1553 21.3013C15.1127 21.2796 15.0815 21.2539 15.0606 21.2234C15.0405 21.1938 15.0301 21.1577 15.0301 21.1167C15.0301 21.0477 15.059 20.99 15.1176 20.9426C15.1761 20.8953 15.2499 20.8712 15.3406 20.8712C15.4361 20.8712 15.5131 20.8961 15.5717 20.945C15.6311 20.994 15.6607 21.0574 15.6607 21.1336H15.5163C15.5163 21.0943 15.4995 21.0606 15.4666 21.0317C15.4337 21.0028 15.3912 20.9892 15.3406 20.9892C15.2901 20.9892 15.2475 21.0004 15.2179 21.0237C15.1882 21.0461 15.1737 21.0758 15.1737 21.1127C15.1737 21.1472 15.1874 21.1737 15.2146 21.1913C15.2419 21.209 15.2917 21.2258 15.3631 21.2419C15.4345 21.2579 15.4931 21.2772 15.5372 21.2997C15.5813 21.3221 15.6142 21.3486 15.6359 21.3799C15.6575 21.4112 15.668 21.4489 15.668 21.4946C15.668 21.5692 15.6383 21.6294 15.5781 21.6752C15.5179 21.7201 15.4401 21.7434 15.3446 21.7434C15.2772 21.7434 15.2179 21.7313 15.1665 21.7081C15.1152 21.684 15.0742 21.6511 15.0453 21.6086C15.0165 21.566 15.0012 21.5195 15.0012 21.4698H15.1448C15.1472 21.5179 15.1665 21.5556 15.2026 21.5845C15.2387 21.6134 15.2861 21.627 15.3446 21.627C15.3992 21.627 15.4425 21.6158 15.4754 21.5941C15.5083 21.5725 15.5243 21.5428 15.5243 21.5059L15.5251 21.5035Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_70",
-									"d": "M15.7778 21.2988C15.7778 21.217 15.7939 21.1423 15.826 21.0773C15.8581 21.0124 15.903 20.961 15.9608 20.9257C16.0185 20.8904 16.0843 20.8719 16.1581 20.8719C16.2721 20.8719 16.3651 20.9113 16.4358 20.9907C16.5064 21.0701 16.5417 21.1752 16.5417 21.306V21.3164C16.5417 21.3983 16.5264 21.4713 16.4951 21.5363C16.4638 21.6013 16.4189 21.6518 16.3611 21.6879C16.3026 21.724 16.236 21.7425 16.1605 21.7425C16.0466 21.7425 15.9543 21.7032 15.8837 21.6237C15.8131 21.5443 15.7778 21.44 15.7778 21.31V21.2996V21.2988ZM15.9223 21.3156C15.9223 21.4087 15.9439 21.4833 15.9872 21.5395C16.0306 21.5957 16.0883 21.6237 16.1605 21.6237C16.2328 21.6237 16.2913 21.5949 16.3339 21.5379C16.3764 21.4809 16.398 21.4007 16.398 21.298C16.398 21.2057 16.3764 21.1311 16.3322 21.0741C16.2889 21.0172 16.2304 20.9883 16.1581 20.9883C16.0859 20.9883 16.0306 21.0164 15.9864 21.0725C15.9423 21.1287 15.9215 21.2097 15.9215 21.3148L15.9223 21.3156Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_71",
-									"d": "M17.0182 21.6246C17.0695 21.6246 17.1137 21.6094 17.1522 21.5781C17.1907 21.5468 17.2115 21.5083 17.2156 21.4618H17.3511C17.3487 21.5099 17.3319 21.5556 17.3014 21.599C17.2709 21.6423 17.23 21.6768 17.1794 21.7025C17.1289 21.7281 17.0743 21.741 17.0182 21.741C16.9042 21.741 16.8128 21.7025 16.7454 21.6262C16.678 21.55 16.6443 21.4457 16.6443 21.3133V21.2893C16.6443 21.2074 16.6595 21.1352 16.6892 21.071C16.7189 21.0076 16.7622 20.9579 16.8184 20.9226C16.8746 20.8873 16.9412 20.8696 17.0174 20.8696C17.1112 20.8696 17.1899 20.8977 17.2517 20.9539C17.3142 21.01 17.3471 21.0831 17.3511 21.1737H17.2156C17.2115 21.1192 17.1907 21.075 17.1538 21.0397C17.1169 21.0052 17.0711 20.9876 17.0166 20.9876C16.9436 20.9876 16.8874 21.0141 16.8473 21.0662C16.8072 21.1184 16.7871 21.1946 16.7871 21.2941V21.3213C16.7871 21.4184 16.8072 21.4922 16.8465 21.5444C16.8866 21.5965 16.9436 21.623 17.0174 21.623L17.0182 21.6246Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_72",
-									"d": "M18.0637 21.3469H18.2202V21.4641H18.0637V21.7264H17.9193V21.4641H17.405V21.3798L17.9105 20.5975H18.0629V21.3477L18.0637 21.3469ZM17.5687 21.3469H17.9201V20.7933L17.9033 20.8246L17.5687 21.3469Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_73",
-									"d": "M18.814 21.5035C18.814 21.4649 18.7995 21.4345 18.7698 21.4128C18.7402 21.3911 18.6896 21.3727 18.6174 21.3574C18.5444 21.3422 18.4874 21.3229 18.4441 21.3013C18.4016 21.2796 18.3703 21.2539 18.3494 21.2234C18.3294 21.1938 18.3189 21.1577 18.3189 21.1167C18.3189 21.0477 18.3478 20.99 18.4064 20.9426C18.4649 20.8953 18.5388 20.8712 18.6294 20.8712C18.7249 20.8712 18.8019 20.8961 18.8605 20.945C18.9199 20.994 18.9496 21.0574 18.9496 21.1336H18.8051C18.8051 21.0943 18.7883 21.0606 18.7554 21.0317C18.7217 21.0036 18.68 20.9892 18.6294 20.9892C18.5789 20.9892 18.5364 21.0004 18.5067 21.0237C18.477 21.0461 18.4625 21.0758 18.4625 21.1127C18.4625 21.1472 18.4762 21.1737 18.5035 21.1913C18.5307 21.209 18.5805 21.2258 18.6519 21.2419C18.7233 21.2579 18.7819 21.2772 18.826 21.2997C18.8701 21.3221 18.903 21.3486 18.9247 21.3799C18.9464 21.4112 18.9568 21.4489 18.9568 21.4946C18.9568 21.5692 18.9271 21.6294 18.8669 21.6752C18.8067 21.7201 18.7289 21.7434 18.6334 21.7434C18.566 21.7434 18.5067 21.7313 18.4553 21.7081C18.404 21.684 18.3631 21.6511 18.3342 21.6086C18.3053 21.566 18.29 21.5195 18.29 21.4698H18.4337C18.4361 21.5179 18.4553 21.5556 18.4914 21.5845C18.5275 21.6126 18.5749 21.627 18.6334 21.627C18.688 21.627 18.7313 21.6158 18.7642 21.5941C18.7971 21.5725 18.8132 21.5428 18.8132 21.5059L18.814 21.5035Z",
-									"fill": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "Vector_74",
-									"d": "M19.0664 21.2988C19.0664 21.217 19.0825 21.1423 19.1145 21.0773C19.1466 21.0116 19.1916 20.961 19.2493 20.9257C19.3071 20.8904 19.3729 20.8719 19.4467 20.8719C19.5606 20.8719 19.6537 20.9113 19.7243 20.9907C19.7949 21.0701 19.8302 21.1752 19.8302 21.306V21.3164C19.8302 21.3983 19.815 21.4713 19.7837 21.5363C19.7524 21.6013 19.7075 21.6518 19.6497 21.6879C19.5911 21.724 19.5245 21.7425 19.4491 21.7425C19.3352 21.7425 19.2429 21.7032 19.1723 21.6237C19.1017 21.5443 19.0664 21.44 19.0664 21.31V21.2996V21.2988ZM19.21 21.3156C19.21 21.4087 19.2317 21.4833 19.275 21.5395C19.3183 21.5957 19.3761 21.6237 19.4483 21.6237C19.5205 21.6237 19.5791 21.5949 19.6216 21.5379C19.665 21.4809 19.6858 21.4007 19.6858 21.298C19.6858 21.2057 19.6641 21.1311 19.62 21.0741C19.5767 21.0172 19.5181 20.9883 19.4459 20.9883C19.3737 20.9883 19.3183 21.0164 19.2742 21.0725C19.2301 21.1287 19.2092 21.2097 19.2092 21.3148L19.21 21.3156Z",
-									"fill": "white"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_75",
-							"d": "M25.8569 25.0298V25.1269H25.67V25.6147H25.5536V25.1269H25.3667V25.0298H25.8569ZM26.4892 25.6147L26.4675 25.2713C26.4651 25.2264 26.4651 25.1702 26.4635 25.1076H26.4571C26.4418 25.159 26.425 25.228 26.4073 25.2817L26.3022 25.6059H26.1819L26.0768 25.2729C26.0663 25.228 26.0487 25.159 26.0358 25.1076H26.0294C26.0294 25.1614 26.027 25.2175 26.0254 25.2713L26.0038 25.6147H25.8922L25.9356 25.0306H26.1097L26.2108 25.3162C26.2236 25.3612 26.234 25.4045 26.2493 25.4647H26.2517C26.2669 25.4109 26.2798 25.3612 26.2926 25.3186L26.3937 25.0306H26.5614L26.6063 25.6147H26.49H26.4892Z",
-							"fill": "#231F20"
-						},
-						"children": []
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint0_linear_6186_11887",
-							"x1": "28",
-							"y1": "14",
-							"x2": "0",
-							"y2": "14",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#2161AD"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.18",
-									"stop-color": "#1F69B3"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.47",
-									"stop-color": "#1C82C4"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.84",
-									"stop-color": "#16A9E1"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#14BDEF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint1_linear_6186_11887",
-							"x1": "3.13623",
-							"y1": "13.9999",
-							"x2": "24.8636",
-							"y2": "13.9999",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#2161AD"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.18",
-									"stop-color": "#1F69B3"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.47",
-									"stop-color": "#1C82C4"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "0.84",
-									"stop-color": "#16A9E1"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#14BDEF"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "Soc2"
-}
diff --git a/app/components/base/icons/src/public/common/Soc2.tsx b/app/components/base/icons/src/public/common/Soc2.tsx
deleted file mode 100644
index b94d523..0000000
--- a/app/components/base/icons/src/public/common/Soc2.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Soc2.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Soc2'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/education/Triangle.json b/app/components/base/icons/src/public/education/Triangle.json
deleted file mode 100644
index ab00049..0000000
--- a/app/components/base/icons/src/public/education/Triangle.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "16",
-			"height": "22",
-			"viewBox": "0 0 16 22",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"id": "Rectangle 979",
-					"d": "M0 0H16L9.91493 16.7339C8.76529 19.8955 5.76063 22 2.39658 22H0V0Z",
-					"fill": "white"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "Triangle"
-}
diff --git a/app/components/base/icons/src/public/education/Triangle.tsx b/app/components/base/icons/src/public/education/Triangle.tsx
deleted file mode 100644
index 85aa518..0000000
--- a/app/components/base/icons/src/public/education/Triangle.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Triangle.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Triangle'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/education/index.ts b/app/components/base/icons/src/public/education/index.ts
deleted file mode 100644
index de505db..0000000
--- a/app/components/base/icons/src/public/education/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { default as Triangle } from './Triangle'
diff --git a/app/components/base/icons/src/public/llm/AnthropicDark.json b/app/components/base/icons/src/public/llm/AnthropicDark.json
deleted file mode 100644
index ca066c2..0000000
--- a/app/components/base/icons/src/public/llm/AnthropicDark.json
+++ /dev/null
@@ -1,1046 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "90",
-			"height": "10",
-			"viewBox": "0 0 90 10",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Anthropic",
-					"clip-path": "url(#clip0_5981_49007)"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Clip path group"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "mask",
-								"attributes": {
-									"id": "mask0_5981_49007",
-									"style": "mask-type:luminance",
-									"maskUnits": "userSpaceOnUse",
-									"x": "0",
-									"y": "-1",
-									"width": "90",
-									"height": "11"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "g",
-										"attributes": {
-											"id": "__lottie_element_2"
-										},
-										"children": [
-											{
-												"type": "element",
-												"name": "path",
-												"attributes": {
-													"id": "Vector",
-													"d": "M89.375 -0.00195312H0V9.99805H89.375V-0.00195312Z",
-													"fill": "white"
-												},
-												"children": []
-											}
-										]
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"mask": "url(#mask0_5981_49007)"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "g",
-										"attributes": {
-											"id": "Group"
-										},
-										"children": [
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"id": "Clip path group_2"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "mask",
-														"attributes": {
-															"id": "mask1_5981_49007",
-															"style": "mask-type:luminance",
-															"maskUnits": "userSpaceOnUse",
-															"x": "0",
-															"y": "-1",
-															"width": "90",
-															"height": "11"
-														},
-														"children": [
-															{
-																"type": "element",
-																"name": "g",
-																"attributes": {
-																	"id": "__lottie_element_4"
-																},
-																"children": [
-																	{
-																		"type": "element",
-																		"name": "path",
-																		"attributes": {
-																			"id": "Vector_2",
-																			"d": "M0 -0.00390625H89.375V9.99609H0V-0.00390625Z",
-																			"fill": "white"
-																		},
-																		"children": []
-																	}
-																]
-															}
-														]
-													},
-													{
-														"type": "element",
-														"name": "g",
-														"attributes": {
-															"mask": "url(#mask1_5981_49007)"
-														},
-														"children": [
-															{
-																"type": "element",
-																"name": "g",
-																"attributes": {
-																	"id": "Group_2"
-																},
-																"children": [
-																	{
-																		"type": "element",
-																		"name": "g",
-																		"attributes": {
-																			"id": "Clip path group_3"
-																		},
-																		"children": [
-																			{
-																				"type": "element",
-																				"name": "mask",
-																				"attributes": {
-																					"id": "mask2_5981_49007",
-																					"style": "mask-type:luminance",
-																					"maskUnits": "userSpaceOnUse",
-																					"x": "0",
-																					"y": "-1",
-																					"width": "90",
-																					"height": "11"
-																				},
-																				"children": [
-																					{
-																						"type": "element",
-																						"name": "g",
-																						"attributes": {
-																							"id": "__lottie_element_12"
-																						},
-																						"children": [
-																							{
-																								"type": "element",
-																								"name": "path",
-																								"attributes": {
-																									"id": "Vector_3",
-																									"d": "M0 -0.00585938H89.375V9.99414H0V-0.00585938Z",
-																									"fill": "white"
-																								},
-																								"children": []
-																							}
-																						]
-																					}
-																				]
-																			},
-																			{
-																				"type": "element",
-																				"name": "g",
-																				"attributes": {
-																					"mask": "url(#mask2_5981_49007)"
-																				},
-																				"children": [
-																					{
-																						"type": "element",
-																						"name": "g",
-																						"attributes": {
-																							"id": "Group_3"
-																						},
-																						"children": [
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_4"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask3_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_89"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_4",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask3_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_4"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_5"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_6"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_5",
-																																			"d": "M18.1273 6.92438L13.7773 0.15625H11.4297V9.82501H13.4321V3.05688L17.7821 9.82501H20.1297V0.15625H18.1273V6.92438Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_5"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask4_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_80"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_6",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask4_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_7"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_8"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_9"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_7",
-																																			"d": "M21.7969 2.02094H25.0423V9.82501H27.1139V2.02094H30.3594V0.15625H21.7969V2.02094Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_6"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask5_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_71"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_8",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask5_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_10"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_11"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_12"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_9",
-																																			"d": "M38.6442 4.00994H34.0871V0.15625H32.0156V9.82501H34.0871V5.87463H38.6442V9.82501H40.7156V0.15625H38.6442V4.00994Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_7"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask6_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_62"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_10",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask6_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_13"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_14"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_15"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_11",
-																																			"d": "M45.3376 2.02094H47.893C48.9152 2.02094 49.4539 2.39387 49.4539 3.09831C49.4539 3.80275 48.9152 4.17569 47.893 4.17569H45.3376V2.02094ZM51.5259 3.09831C51.5259 1.27506 50.186 0.15625 47.9897 0.15625H43.2656V9.82501H45.3376V6.04037H47.6443L49.7164 9.82501H52.0094L49.715 5.75211C50.8666 5.30941 51.5259 4.37721 51.5259 3.09831Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_8"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask7_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_53"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_12",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask7_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_16"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_17"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_18"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_13",
-																																			"d": "M57.8732 8.05653C56.2438 8.05653 55.2496 6.89631 55.2496 5.00404C55.2496 3.08416 56.2438 1.92394 57.8732 1.92394C59.4887 1.92394 60.4691 3.08416 60.4691 5.00404C60.4691 6.89631 59.4887 8.05653 57.8732 8.05653ZM57.8732 -0.00976562C55.0839 -0.00976562 53.1094 2.06206 53.1094 5.00404C53.1094 7.91841 55.0839 9.99023 57.8732 9.99023C60.6486 9.99023 62.6094 7.91841 62.6094 5.00404C62.6094 2.06206 60.6486 -0.00976562 57.8732 -0.00976562Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_9"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask8_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_44"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_14",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask8_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_19"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_20"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_21"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_15",
-																																			"d": "M69.1794 4.45194H66.6233V2.02094H69.1794C70.2019 2.02094 70.7407 2.43532 70.7407 3.23644C70.7407 4.03756 70.2019 4.45194 69.1794 4.45194ZM69.2762 0.15625H64.5508V9.82501H66.6233V6.31662H69.2762C71.473 6.31662 72.8133 5.15637 72.8133 3.23644C72.8133 1.3165 71.473 0.15625 69.2762 0.15625Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_10"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask9_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_35"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_16",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask9_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_22"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_23"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_24"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_17",
-																																			"d": "M86.8413 6.57863C86.4823 7.51786 85.7642 8.05653 84.7837 8.05653C83.1542 8.05653 82.16 6.89631 82.16 5.00404C82.16 3.08416 83.1542 1.92394 84.7837 1.92394C85.7642 1.92394 86.4823 2.46261 86.8413 3.40183H89.0369C88.4984 1.33002 86.8827 -0.00976562 84.7837 -0.00976562C81.9942 -0.00976562 80.0195 2.06206 80.0195 5.00404C80.0195 7.91841 81.9942 9.99023 84.7837 9.99023C86.8965 9.99023 88.5122 8.63664 89.0508 6.57863H86.8413Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_11"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask10_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_26"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_18",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask10_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_25"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_26"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_27"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_19",
-																																			"d": "M73.6484 0.15625L77.5033 9.82501H79.6172L75.7624 0.15625H73.6484Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_12"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask11_5981_49007",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_17"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_20",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask11_5981_49007)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_28"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_29"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_30"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_21",
-																																			"d": "M3.64038 5.99893L4.95938 2.60106L6.27838 5.99893H3.64038ZM3.85422 0.15625L0 9.82501H2.15505L2.9433 7.79456H6.97558L7.76371 9.82501H9.91875L6.06453 0.15625H3.85422Z",
-																																			"fill": "black",
-																																			"fill-opacity": "0.95"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							}
-																						]
-																					}
-																				]
-																			}
-																		]
-																	}
-																]
-															}
-														]
-													}
-												]
-											}
-										]
-									}
-								]
-							}
-						]
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "clipPath",
-						"attributes": {
-							"id": "clip0_5981_49007"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "rect",
-								"attributes": {
-									"width": "89.375",
-									"height": "10",
-									"fill": "white"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "AnthropicDark"
-}
diff --git a/app/components/base/icons/src/public/llm/AnthropicDark.tsx b/app/components/base/icons/src/public/llm/AnthropicDark.tsx
deleted file mode 100644
index d174400..0000000
--- a/app/components/base/icons/src/public/llm/AnthropicDark.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './AnthropicDark.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'AnthropicDark'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/llm/AnthropicLight.json b/app/components/base/icons/src/public/llm/AnthropicLight.json
deleted file mode 100644
index 2d2b0aa..0000000
--- a/app/components/base/icons/src/public/llm/AnthropicLight.json
+++ /dev/null
@@ -1,1046 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "90",
-			"height": "10",
-			"viewBox": "0 0 90 10",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Anthropic",
-					"clip-path": "url(#clip0_5981_52010)"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Clip path group"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "mask",
-								"attributes": {
-									"id": "mask0_5981_52010",
-									"style": "mask-type:luminance",
-									"maskUnits": "userSpaceOnUse",
-									"x": "0",
-									"y": "-1",
-									"width": "90",
-									"height": "11"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "g",
-										"attributes": {
-											"id": "__lottie_element_2"
-										},
-										"children": [
-											{
-												"type": "element",
-												"name": "path",
-												"attributes": {
-													"id": "Vector",
-													"d": "M89.375 -0.00195312H0V9.99805H89.375V-0.00195312Z",
-													"fill": "white"
-												},
-												"children": []
-											}
-										]
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"mask": "url(#mask0_5981_52010)"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "g",
-										"attributes": {
-											"id": "Group"
-										},
-										"children": [
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"id": "Clip path group_2"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "mask",
-														"attributes": {
-															"id": "mask1_5981_52010",
-															"style": "mask-type:luminance",
-															"maskUnits": "userSpaceOnUse",
-															"x": "0",
-															"y": "-1",
-															"width": "90",
-															"height": "11"
-														},
-														"children": [
-															{
-																"type": "element",
-																"name": "g",
-																"attributes": {
-																	"id": "__lottie_element_4"
-																},
-																"children": [
-																	{
-																		"type": "element",
-																		"name": "path",
-																		"attributes": {
-																			"id": "Vector_2",
-																			"d": "M0 -0.00390625H89.375V9.99609H0V-0.00390625Z",
-																			"fill": "white"
-																		},
-																		"children": []
-																	}
-																]
-															}
-														]
-													},
-													{
-														"type": "element",
-														"name": "g",
-														"attributes": {
-															"mask": "url(#mask1_5981_52010)"
-														},
-														"children": [
-															{
-																"type": "element",
-																"name": "g",
-																"attributes": {
-																	"id": "Group_2"
-																},
-																"children": [
-																	{
-																		"type": "element",
-																		"name": "g",
-																		"attributes": {
-																			"id": "Clip path group_3"
-																		},
-																		"children": [
-																			{
-																				"type": "element",
-																				"name": "mask",
-																				"attributes": {
-																					"id": "mask2_5981_52010",
-																					"style": "mask-type:luminance",
-																					"maskUnits": "userSpaceOnUse",
-																					"x": "0",
-																					"y": "-1",
-																					"width": "90",
-																					"height": "11"
-																				},
-																				"children": [
-																					{
-																						"type": "element",
-																						"name": "g",
-																						"attributes": {
-																							"id": "__lottie_element_12"
-																						},
-																						"children": [
-																							{
-																								"type": "element",
-																								"name": "path",
-																								"attributes": {
-																									"id": "Vector_3",
-																									"d": "M0 -0.00585938H89.375V9.99414H0V-0.00585938Z",
-																									"fill": "white"
-																								},
-																								"children": []
-																							}
-																						]
-																					}
-																				]
-																			},
-																			{
-																				"type": "element",
-																				"name": "g",
-																				"attributes": {
-																					"mask": "url(#mask2_5981_52010)"
-																				},
-																				"children": [
-																					{
-																						"type": "element",
-																						"name": "g",
-																						"attributes": {
-																							"id": "Group_3"
-																						},
-																						"children": [
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_4"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask3_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_89"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_4",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask3_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_4"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_5"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_6"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_5",
-																																			"d": "M18.1273 6.92438L13.7773 0.15625H11.4297V9.82501H13.4321V3.05688L17.7821 9.82501H20.1297V0.15625H18.1273V6.92438Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_5"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask4_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_80"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_6",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask4_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_7"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_8"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_9"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_7",
-																																			"d": "M21.7969 2.02094H25.0423V9.82501H27.1139V2.02094H30.3594V0.15625H21.7969V2.02094Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_6"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask5_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_71"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_8",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask5_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_10"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_11"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_12"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_9",
-																																			"d": "M38.6442 4.00994H34.0871V0.15625H32.0156V9.82501H34.0871V5.87463H38.6442V9.82501H40.7156V0.15625H38.6442V4.00994Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_7"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask6_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_62"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_10",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask6_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_13"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_14"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_15"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_11",
-																																			"d": "M45.3376 2.02094H47.893C48.9152 2.02094 49.4539 2.39387 49.4539 3.09831C49.4539 3.80275 48.9152 4.17569 47.893 4.17569H45.3376V2.02094ZM51.5259 3.09831C51.5259 1.27506 50.186 0.15625 47.9897 0.15625H43.2656V9.82501H45.3376V6.04037H47.6443L49.7164 9.82501H52.0094L49.715 5.75211C50.8666 5.30941 51.5259 4.37721 51.5259 3.09831Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_8"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask7_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_53"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_12",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask7_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_16"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_17"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_18"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_13",
-																																			"d": "M57.8732 8.05653C56.2438 8.05653 55.2496 6.89631 55.2496 5.00404C55.2496 3.08416 56.2438 1.92394 57.8732 1.92394C59.4887 1.92394 60.4691 3.08416 60.4691 5.00404C60.4691 6.89631 59.4887 8.05653 57.8732 8.05653ZM57.8732 -0.00976562C55.0839 -0.00976562 53.1094 2.06206 53.1094 5.00404C53.1094 7.91841 55.0839 9.99023 57.8732 9.99023C60.6486 9.99023 62.6094 7.91841 62.6094 5.00404C62.6094 2.06206 60.6486 -0.00976562 57.8732 -0.00976562Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_9"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask8_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_44"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_14",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask8_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_19"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_20"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_21"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_15",
-																																			"d": "M69.1794 4.45194H66.6233V2.02094H69.1794C70.2019 2.02094 70.7407 2.43532 70.7407 3.23644C70.7407 4.03756 70.2019 4.45194 69.1794 4.45194ZM69.2762 0.15625H64.5508V9.82501H66.6233V6.31662H69.2762C71.473 6.31662 72.8133 5.15637 72.8133 3.23644C72.8133 1.3165 71.473 0.15625 69.2762 0.15625Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_10"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask9_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_35"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_16",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask9_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_22"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_23"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_24"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_17",
-																																			"d": "M86.8413 6.57863C86.4823 7.51786 85.7642 8.05653 84.7837 8.05653C83.1542 8.05653 82.16 6.89631 82.16 5.00404C82.16 3.08416 83.1542 1.92394 84.7837 1.92394C85.7642 1.92394 86.4823 2.46261 86.8413 3.40183H89.0369C88.4984 1.33002 86.8827 -0.00976562 84.7837 -0.00976562C81.9942 -0.00976562 80.0195 2.06206 80.0195 5.00404C80.0195 7.91841 81.9942 9.99023 84.7837 9.99023C86.8965 9.99023 88.5122 8.63664 89.0508 6.57863H86.8413Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_11"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask10_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_26"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_18",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask10_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_25"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_26"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_27"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_19",
-																																			"d": "M73.6484 0.15625L77.5033 9.82501H79.6172L75.7624 0.15625H73.6484Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							},
-																							{
-																								"type": "element",
-																								"name": "g",
-																								"attributes": {
-																									"id": "Clip path group_12"
-																								},
-																								"children": [
-																									{
-																										"type": "element",
-																										"name": "mask",
-																										"attributes": {
-																											"id": "mask11_5981_52010",
-																											"style": "mask-type:luminance",
-																											"maskUnits": "userSpaceOnUse",
-																											"x": "0",
-																											"y": "-1",
-																											"width": "90",
-																											"height": "11"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "__lottie_element_17"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "path",
-																														"attributes": {
-																															"id": "Vector_20",
-																															"d": "M0 -0.0078125H89.375V9.99219H0V-0.0078125Z",
-																															"fill": "white"
-																														},
-																														"children": []
-																													}
-																												]
-																											}
-																										]
-																									},
-																									{
-																										"type": "element",
-																										"name": "g",
-																										"attributes": {
-																											"mask": "url(#mask11_5981_52010)"
-																										},
-																										"children": [
-																											{
-																												"type": "element",
-																												"name": "g",
-																												"attributes": {
-																													"id": "Group_28"
-																												},
-																												"children": [
-																													{
-																														"type": "element",
-																														"name": "g",
-																														"attributes": {
-																															"id": "Group_29"
-																														},
-																														"children": [
-																															{
-																																"type": "element",
-																																"name": "g",
-																																"attributes": {
-																																	"id": "Group_30"
-																																},
-																																"children": [
-																																	{
-																																		"type": "element",
-																																		"name": "path",
-																																		"attributes": {
-																																			"id": "Vector_21",
-																																			"d": "M3.64038 5.99893L4.95938 2.60106L6.27838 5.99893H3.64038ZM3.85422 0.15625L0 9.82501H2.15505L2.9433 7.79456H6.97558L7.76371 9.82501H9.91875L6.06453 0.15625H3.85422Z",
-																																			"fill": "white",
-																																			"fill-opacity": "0.8"
-																																		},
-																																		"children": []
-																																	}
-																																]
-																															}
-																														]
-																													}
-																												]
-																											}
-																										]
-																									}
-																								]
-																							}
-																						]
-																					}
-																				]
-																			}
-																		]
-																	}
-																]
-															}
-														]
-													}
-												]
-											}
-										]
-									}
-								]
-							}
-						]
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "clipPath",
-						"attributes": {
-							"id": "clip0_5981_52010"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "rect",
-								"attributes": {
-									"width": "89.375",
-									"height": "10",
-									"fill": "white"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "AnthropicLight"
-}
diff --git a/app/components/base/icons/src/public/llm/AnthropicLight.tsx b/app/components/base/icons/src/public/llm/AnthropicLight.tsx
deleted file mode 100644
index 0cacdf7..0000000
--- a/app/components/base/icons/src/public/llm/AnthropicLight.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './AnthropicLight.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'AnthropicLight'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/other/Message3Fill.json b/app/components/base/icons/src/public/other/Message3Fill.json
deleted file mode 100644
index ae84890..0000000
--- a/app/components/base/icons/src/public/other/Message3Fill.json
+++ /dev/null
@@ -1,173 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "24",
-			"height": "24",
-			"viewBox": "0 0 24 24",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "message-3-fill"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Vector",
-							"filter": "url(#filter0_d_1071_49501)"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M2 8.99374C2 5.68349 4.67654 3 8.00066 3H15.9993C19.3134 3 22 5.69478 22 8.99374V21H8.00066C4.68659 21 2 18.3052 2 15.0063V8.99374ZM14 11V13H16V11H14ZM8 11V13H10V11H8Z",
-									"fill": "url(#paint0_linear_1071_49501)"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "filter",
-						"attributes": {
-							"id": "filter0_d_1071_49501",
-							"x": "1.5",
-							"y": "2.75",
-							"width": "21",
-							"height": "19",
-							"filterUnits": "userSpaceOnUse",
-							"color-interpolation-filters": "sRGB"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "feFlood",
-								"attributes": {
-									"flood-opacity": "0",
-									"result": "BackgroundImageFix"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"in": "SourceAlpha",
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
-									"result": "hardAlpha"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feOffset",
-								"attributes": {
-									"dy": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feGaussianBlur",
-								"attributes": {
-									"stdDeviation": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feComposite",
-								"attributes": {
-									"in2": "hardAlpha",
-									"operator": "out"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in2": "BackgroundImageFix",
-									"result": "effect1_dropShadow_1071_49501"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in": "SourceGraphic",
-									"in2": "effect1_dropShadow_1071_49501",
-									"result": "shape"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint0_linear_1071_49501",
-							"x1": "12",
-							"y1": "3",
-							"x2": "12",
-							"y2": "21",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#296DFF"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#0BA5EC"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "Message3Fill"
-}
diff --git a/app/components/base/icons/src/public/other/Message3Fill.tsx b/app/components/base/icons/src/public/other/Message3Fill.tsx
deleted file mode 100644
index 0411377..0000000
--- a/app/components/base/icons/src/public/other/Message3Fill.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Message3Fill.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Message3Fill'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/plugins/PartnerDark.json b/app/components/base/icons/src/public/plugins/PartnerDark.json
deleted file mode 100644
index af3f208..0000000
--- a/app/components/base/icons/src/public/plugins/PartnerDark.json
+++ /dev/null
@@ -1,447 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "20",
-			"height": "20",
-			"viewBox": "0 0 20 20",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Partner"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "mask",
-						"attributes": {
-							"id": "mask0_6296_109592",
-							"style": "mask-type:alpha",
-							"maskUnits": "userSpaceOnUse",
-							"x": "1",
-							"y": "0",
-							"width": "18",
-							"height": "20"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Mask"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z",
-											"fill": "#932F19"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z",
-											"fill": "url(#paint0_linear_6296_109592)",
-											"fill-opacity": "0.9"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.47222 1.78016C8.45993 1.20991 8.90155 0.958665 9.36471 0.860217C9.78356 0.771189 10.2164 0.771189 10.6353 0.860217C11.0984 0.958665 11.5401 1.20991 12.5278 1.78016L15.8547 3.70096C16.8424 4.27121 17.2808 4.52805 17.5976 4.87994C17.8842 5.19815 18.1006 5.57304 18.2329 5.98028C18.3792 6.43061 18.3825 6.9387 18.3825 8.0792V11.9208C18.3825 13.0613 18.3792 13.5694 18.2329 14.0197C18.1006 14.427 17.8842 14.8018 17.5976 15.1201C17.2808 15.4719 16.8424 15.7288 15.8547 16.299L12.5278 18.2198C11.5401 18.7901 11.0984 19.0413 10.6353 19.1398C10.2164 19.2288 9.78356 19.2288 9.36471 19.1398C8.90155 19.0413 8.45993 18.7901 7.47222 18.2198L4.1453 16.299C3.1576 15.7288 2.7192 15.4719 2.40236 15.1201C2.11584 14.8018 1.89939 14.427 1.76707 14.0197C1.62075 13.5694 1.61752 13.0613 1.61752 11.9208V8.0792C1.61752 6.9387 1.62075 6.43061 1.76707 5.98028C1.89939 5.57304 2.11584 5.19815 2.40236 4.87994C2.7192 4.52805 3.1576 4.27121 4.1453 3.70096L7.47222 1.78016Z",
-											"stroke": "url(#paint1_linear_6296_109592)",
-											"stroke-opacity": "0.8",
-											"stroke-width": "0.555556"
-										},
-										"children": []
-									}
-								]
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"mask": "url(#mask0_6296_109592)"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "badge-bg"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z",
-											"fill": "#932F19"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z",
-											"fill": "url(#paint2_linear_6296_109592)",
-											"fill-opacity": "0.9"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.58333 1.97261C8.58402 1.39487 8.99036 1.16698 9.41092 1.07758C9.7993 0.99503 10.2007 0.99503 10.5891 1.07758C11.0096 1.16698 11.416 1.39487 12.4167 1.97261L15.7436 3.89341C16.7443 4.47116 17.1448 4.70911 17.4325 5.02863C17.6982 5.3237 17.8989 5.67133 18.0216 6.04895C18.1544 6.45786 18.1603 6.92371 18.1603 8.0792V11.9208C18.1603 13.0763 18.1544 13.5421 18.0216 13.951C17.8989 14.3287 17.6982 14.6763 17.4325 14.9714C17.1448 15.2909 16.7443 15.5288 15.7436 16.1066L12.4167 18.0274C11.416 18.6051 11.0096 18.833 10.5891 18.9224C10.2007 19.005 9.7993 19.005 9.41092 18.9224C8.99036 18.833 8.58402 18.6051 7.58333 18.0274L4.25641 16.1066C3.25572 15.5288 2.8552 15.2909 2.5675 14.9714C2.30182 14.6763 2.10112 14.3287 1.97842 13.951C1.84556 13.5421 1.83975 13.0763 1.83975 11.9208V8.0792C1.83975 6.92371 1.84556 6.45786 1.97842 6.04895C2.10112 5.67133 2.30182 5.3237 2.5675 5.02863C2.8552 4.70911 3.25572 4.47116 4.25641 3.89341L7.58333 1.97261Z",
-											"stroke": "url(#paint3_linear_6296_109592)",
-											"stroke-opacity": "0.8"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "handshake",
-									"filter": "url(#filter0_d_6296_109592)"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M11.0969 9.64841C10.895 9.44642 10.5675 9.44642 10.3656 9.64841L9.99991 10.0141C9.59596 10.418 8.94109 10.418 8.53717 10.0141C8.13325 9.61015 8.13325 8.95527 8.53717 8.55135L11.4491 5.63868C12.5371 5.39255 13.7238 5.69302 14.5709 6.54011C15.8221 7.79128 15.8807 9.78339 14.7469 11.104L13.6567 12.2081L11.0969 9.64841ZM5.42889 6.54011C6.55286 5.41614 8.27475 5.25452 9.57067 6.05524L7.80581 7.81999C6.99797 8.62783 6.99797 9.9376 7.80581 10.7454C8.58917 11.5288 9.8445 11.5525 10.6564 10.8167L10.7313 10.7454L12.9253 12.9395L10.7313 15.1336C10.3273 15.5375 9.67245 15.5375 9.26855 15.1336L5.42889 11.2939C4.11615 9.9812 4.11615 7.85284 5.42889 6.54011Z",
-											"fill": "url(#paint4_linear_6296_109592)",
-											"shape-rendering": "crispEdges"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "highlight",
-									"opacity": "0.5",
-									"d": "M0 0H15.5556L5.26663 20H0V0Z",
-									"fill": "url(#paint5_linear_6296_109592)"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "filter",
-						"attributes": {
-							"id": "filter0_d_6296_109592",
-							"x": "3.94434",
-							"y": "5.30556",
-							"width": "12.1111",
-							"height": "10.881",
-							"filterUnits": "userSpaceOnUse",
-							"color-interpolation-filters": "sRGB"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "feFlood",
-								"attributes": {
-									"flood-opacity": "0",
-									"result": "BackgroundImageFix"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"in": "SourceAlpha",
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
-									"result": "hardAlpha"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feOffset",
-								"attributes": {
-									"dy": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feGaussianBlur",
-								"attributes": {
-									"stdDeviation": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feComposite",
-								"attributes": {
-									"in2": "hardAlpha",
-									"operator": "out"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in2": "BackgroundImageFix",
-									"result": "effect1_dropShadow_6296_109592"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in": "SourceGraphic",
-									"in2": "effect1_dropShadow_6296_109592",
-									"result": "shape"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint0_linear_6296_109592",
-							"x1": "0",
-							"y1": "0",
-							"x2": "22.6412",
-							"y2": "1.78551",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#FF692E"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#E04F16"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint1_linear_6296_109592",
-							"x1": "8.55422",
-							"y1": "-1.28187e-07",
-							"x2": "19.7802",
-							"y2": "12.7346",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.2"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#FF4405"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint2_linear_6296_109592",
-							"x1": "0",
-							"y1": "0",
-							"x2": "22.6412",
-							"y2": "1.78551",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#FF692E"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#E04F16"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint3_linear_6296_109592",
-							"x1": "8.55422",
-							"y1": "-1.28187e-07",
-							"x2": "19.7802",
-							"y2": "12.7346",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.2"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#FF4405"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint4_linear_6296_109592",
-							"x1": "9.99989",
-							"y1": "5.55556",
-							"x2": "9.99989",
-							"y2": "15.4365",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.95"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "white",
-									"stop-opacity": "0.8"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint5_linear_6296_109592",
-							"x1": "-4.78632",
-							"y1": "4.375",
-							"x2": "16.2164",
-							"y2": "10.4",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.12"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "white",
-									"stop-opacity": "0.2"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "PartnerDark"
-}
diff --git a/app/components/base/icons/src/public/plugins/PartnerDark.tsx b/app/components/base/icons/src/public/plugins/PartnerDark.tsx
deleted file mode 100644
index 4277762..0000000
--- a/app/components/base/icons/src/public/plugins/PartnerDark.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './PartnerDark.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'PartnerDark'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/plugins/PartnerLight.json b/app/components/base/icons/src/public/plugins/PartnerLight.json
deleted file mode 100644
index 3d7391b..0000000
--- a/app/components/base/icons/src/public/plugins/PartnerLight.json
+++ /dev/null
@@ -1,446 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "20",
-			"height": "20",
-			"viewBox": "0 0 20 20",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Partner"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "mask",
-						"attributes": {
-							"id": "mask0_6291_109635",
-							"style": "mask-type:alpha",
-							"maskUnits": "userSpaceOnUse",
-							"x": "1",
-							"y": "0",
-							"width": "18",
-							"height": "20"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Mask"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z",
-											"fill": "#F9DBAF"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z",
-											"fill": "url(#paint0_linear_6291_109635)",
-											"fill-opacity": "0.9"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.47222 1.78016C8.45993 1.20991 8.90155 0.958665 9.36471 0.860217C9.78356 0.771189 10.2164 0.771189 10.6353 0.860217C11.0984 0.958665 11.5401 1.20991 12.5278 1.78016L15.8547 3.70096C16.8424 4.27121 17.2808 4.52805 17.5976 4.87994C17.8842 5.19815 18.1006 5.57304 18.2329 5.98028C18.3792 6.43061 18.3825 6.9387 18.3825 8.0792V11.9208C18.3825 13.0613 18.3792 13.5694 18.2329 14.0197C18.1006 14.427 17.8842 14.8018 17.5976 15.1201C17.2808 15.4719 16.8424 15.7288 15.8547 16.299L12.5278 18.2198C11.5401 18.7901 11.0984 19.0413 10.6353 19.1398C10.2164 19.2288 9.78356 19.2288 9.36471 19.1398C8.90155 19.0413 8.45993 18.7901 7.47222 18.2198L4.1453 16.299C3.1576 15.7288 2.7192 15.4719 2.40236 15.1201C2.11584 14.8018 1.89939 14.427 1.76707 14.0197C1.62075 13.5694 1.61752 13.0613 1.61752 11.9208V8.0792C1.61752 6.9387 1.62075 6.43061 1.76707 5.98028C1.89939 5.57304 2.11584 5.19815 2.40236 4.87994C2.7192 4.52805 3.1576 4.27121 4.1453 3.70096L7.47222 1.78016Z",
-											"stroke": "url(#paint1_linear_6291_109635)",
-											"stroke-opacity": "0.8",
-											"stroke-width": "0.555556"
-										},
-										"children": []
-									}
-								]
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"mask": "url(#mask0_6291_109635)"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "badge-bg"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z",
-											"fill": "#F9DBAF"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.33333 1.5396C8.30481 0.978718 8.79055 0.698276 9.30696 0.58851C9.76388 0.491388 10.2361 0.491388 10.693 0.58851C11.2094 0.698276 11.6952 0.978718 12.6667 1.5396L15.9936 3.4604C16.9651 4.02128 17.4508 4.30172 17.8041 4.69407C18.1166 5.04121 18.3528 5.45018 18.4971 5.89444C18.6603 6.39655 18.6603 6.95744 18.6603 8.0792V11.9208C18.6603 13.0426 18.6603 13.6034 18.4971 14.1056C18.3528 14.5498 18.1166 14.9588 17.8041 15.3059C17.4508 15.6983 16.9651 15.9787 15.9936 16.5396L12.6667 18.4604C11.6952 19.0213 11.2094 19.3017 10.693 19.4115C10.2361 19.5086 9.76388 19.5086 9.30696 19.4115C8.79055 19.3017 8.30481 19.0213 7.33333 18.4604L4.00641 16.5396C3.03493 15.9787 2.5492 15.6983 2.19593 15.3059C1.88336 14.9588 1.64724 14.5498 1.50289 14.1056C1.33975 13.6034 1.33975 13.0426 1.33975 11.9208V8.0792C1.33975 6.95744 1.33975 6.39655 1.50289 5.89444C1.64724 5.45018 1.88336 5.04121 2.19593 4.69407C2.5492 4.30172 3.03493 4.02128 4.00641 3.4604L7.33333 1.5396Z",
-											"fill": "url(#paint2_linear_6291_109635)",
-											"fill-opacity": "0.9"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M7.58333 1.97261C8.58402 1.39487 8.99036 1.16698 9.41092 1.07758C9.7993 0.99503 10.2007 0.99503 10.5891 1.07758C11.0096 1.16698 11.416 1.39487 12.4167 1.97261L15.7436 3.89341C16.7443 4.47116 17.1448 4.70911 17.4325 5.02863C17.6982 5.3237 17.8989 5.67133 18.0216 6.04895C18.1544 6.45786 18.1603 6.92371 18.1603 8.0792V11.9208C18.1603 13.0763 18.1544 13.5421 18.0216 13.951C17.8989 14.3287 17.6982 14.6763 17.4325 14.9714C17.1448 15.2909 16.7443 15.5288 15.7436 16.1066L12.4167 18.0274C11.416 18.6051 11.0096 18.833 10.5891 18.9224C10.2007 19.005 9.7993 19.005 9.41092 18.9224C8.99036 18.833 8.58402 18.6051 7.58333 18.0274L4.25641 16.1066C3.25572 15.5288 2.8552 15.2909 2.5675 14.9714C2.30182 14.6763 2.10112 14.3287 1.97842 13.951C1.84556 13.5421 1.83975 13.0763 1.83975 11.9208V8.0792C1.83975 6.92371 1.84556 6.45786 1.97842 6.04895C2.10112 5.67133 2.30182 5.3237 2.5675 5.02863C2.8552 4.70911 3.25572 4.47116 4.25641 3.89341L7.58333 1.97261Z",
-											"stroke": "url(#paint3_linear_6291_109635)",
-											"stroke-opacity": "0.8"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "handshake",
-									"filter": "url(#filter0_d_6291_109635)"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M11.0969 9.64852C10.895 9.44652 10.5675 9.44652 10.3656 9.64852L9.99991 10.0142C9.59596 10.4181 8.94109 10.4181 8.53717 10.0142C8.13325 9.61025 8.13325 8.95537 8.53717 8.55146L11.4491 5.63879C12.5371 5.39265 13.7238 5.69313 14.5709 6.54022C15.8221 7.79139 15.8807 9.7835 14.7469 11.1041L13.6567 12.2083L11.0969 9.64852ZM5.42889 6.54022C6.55286 5.41625 8.27475 5.25463 9.57067 6.05534L7.80581 7.8201C6.99797 8.62794 6.99797 9.93771 7.80581 10.7456C8.58917 11.5289 9.8445 11.5526 10.6564 10.8168L10.7313 10.7456L12.9253 12.9396L10.7313 15.1337C10.3273 15.5376 9.67245 15.5376 9.26855 15.1337L5.42889 11.294C4.11615 9.98131 4.11615 7.85295 5.42889 6.54022Z",
-											"fill": "url(#paint4_linear_6291_109635)",
-											"shape-rendering": "crispEdges"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "highlight",
-									"opacity": "0.5",
-									"d": "M0 0H15.5556L5.26663 20H0V0Z",
-									"fill": "url(#paint5_linear_6291_109635)"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "filter",
-						"attributes": {
-							"id": "filter0_d_6291_109635",
-							"x": "3.94434",
-							"y": "5.30566",
-							"width": "12.1111",
-							"height": "10.8809",
-							"filterUnits": "userSpaceOnUse",
-							"color-interpolation-filters": "sRGB"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "feFlood",
-								"attributes": {
-									"flood-opacity": "0",
-									"result": "BackgroundImageFix"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"in": "SourceAlpha",
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
-									"result": "hardAlpha"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feOffset",
-								"attributes": {
-									"dy": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feGaussianBlur",
-								"attributes": {
-									"stdDeviation": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feComposite",
-								"attributes": {
-									"in2": "hardAlpha",
-									"operator": "out"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in2": "BackgroundImageFix",
-									"result": "effect1_dropShadow_6291_109635"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in": "SourceGraphic",
-									"in2": "effect1_dropShadow_6291_109635",
-									"result": "shape"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint0_linear_6291_109635",
-							"x1": "0",
-							"y1": "0",
-							"x2": "22.6412",
-							"y2": "1.78551",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#FF692E"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#E04F16"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint1_linear_6291_109635",
-							"x1": "8.55422",
-							"y1": "-1.28187e-07",
-							"x2": "19.7802",
-							"y2": "12.7346",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.95"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#E62E05"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint2_linear_6291_109635",
-							"x1": "0",
-							"y1": "0",
-							"x2": "22.6412",
-							"y2": "1.78551",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#FF692E"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#E04F16"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint3_linear_6291_109635",
-							"x1": "8.55422",
-							"y1": "-1.28187e-07",
-							"x2": "19.7802",
-							"y2": "12.7346",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.95"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#E62E05"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint4_linear_6291_109635",
-							"x1": "9.99989",
-							"y1": "5.55566",
-							"x2": "9.99989",
-							"y2": "15.4366",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "white",
-									"stop-opacity": "0.9"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint5_linear_6291_109635",
-							"x1": "-4.78632",
-							"y1": "4.375",
-							"x2": "16.2164",
-							"y2": "10.4",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.12"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "white",
-									"stop-opacity": "0.3"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "PartnerLight"
-}
diff --git a/app/components/base/icons/src/public/plugins/PartnerLight.tsx b/app/components/base/icons/src/public/plugins/PartnerLight.tsx
deleted file mode 100644
index 3591c96..0000000
--- a/app/components/base/icons/src/public/plugins/PartnerLight.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './PartnerLight.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'PartnerLight'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/plugins/VerifiedDark.json b/app/components/base/icons/src/public/plugins/VerifiedDark.json
deleted file mode 100644
index ed22826..0000000
--- a/app/components/base/icons/src/public/plugins/VerifiedDark.json
+++ /dev/null
@@ -1,457 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "20",
-			"height": "20",
-			"viewBox": "0 0 20 20",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Verified"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "mask",
-						"attributes": {
-							"id": "mask0_6296_109593",
-							"style": "mask-type:alpha",
-							"maskUnits": "userSpaceOnUse",
-							"x": "0",
-							"y": "0",
-							"width": "20",
-							"height": "20"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Mask"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M8.08817 1.62521C9.14394 0.569383 10.8558 0.569374 11.9116 1.62521L12.8128 2.52641C12.9819 2.69542 13.2111 2.79037 13.4501 2.79037H14.5059C15.9991 2.79037 17.2095 4.00082 17.2095 5.49398V6.54981C17.2095 6.78882 17.3045 7.01805 17.4735 7.18706L18.3747 8.08826C19.4305 9.1441 19.4305 10.8559 18.3747 11.9118L17.4735 12.813C17.3045 12.982 17.2095 13.2112 17.2095 13.4502V14.506C17.2095 15.9992 15.9991 17.2096 14.5059 17.2096H13.4501C13.2111 17.2096 12.9819 17.3046 12.8128 17.4736L11.9116 18.3748C10.8558 19.4306 9.14403 19.4306 8.08817 18.3748L7.18696 17.4736C7.01795 17.3046 6.78873 17.2096 6.54972 17.2096H5.49389C4.00072 17.2096 2.79028 15.9992 2.79028 14.506V13.4502C2.79028 13.2112 2.69533 12.982 2.52632 12.813L1.62513 11.9118C0.569295 10.8559 0.569295 9.1441 1.62512 8.08826L2.52632 7.18706C2.69533 7.01806 2.79028 6.78882 2.79028 6.54981V5.49398C2.79028 4.00082 4.00072 2.79037 5.49389 2.79037H6.54972C6.78873 2.79037 7.01795 2.69542 7.18696 2.52641L8.08817 1.62521Z",
-											"fill": "#003DC1"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M8.08817 1.62521C9.14394 0.569383 10.8558 0.569374 11.9116 1.62521L12.8128 2.52641C12.9819 2.69542 13.2111 2.79037 13.4501 2.79037H14.5059C15.9991 2.79037 17.2095 4.00082 17.2095 5.49398V6.54981C17.2095 6.78882 17.3045 7.01805 17.4735 7.18706L18.3747 8.08826C19.4305 9.1441 19.4305 10.8559 18.3747 11.9118L17.4735 12.813C17.3045 12.982 17.2095 13.2112 17.2095 13.4502V14.506C17.2095 15.9992 15.9991 17.2096 14.5059 17.2096H13.4501C13.2111 17.2096 12.9819 17.3046 12.8128 17.4736L11.9116 18.3748C10.8558 19.4306 9.14403 19.4306 8.08817 18.3748L7.18696 17.4736C7.01795 17.3046 6.78873 17.2096 6.54972 17.2096H5.49389C4.00072 17.2096 2.79028 15.9992 2.79028 14.506V13.4502C2.79028 13.2112 2.69533 12.982 2.52632 12.813L1.62513 11.9118C0.569295 10.8559 0.569295 9.1441 1.62512 8.08826L2.52632 7.18706C2.69533 7.01806 2.79028 6.78882 2.79028 6.54981V5.49398C2.79028 4.00082 4.00072 2.79037 5.49389 2.79037H6.54972C6.78873 2.79037 7.01795 2.69542 7.18696 2.52641L8.08817 1.62521Z",
-											"fill": "url(#paint0_linear_6296_109593)",
-											"fill-opacity": "0.9"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M8.27881 1.81585L8.27881 1.81585C9.2293 0.865317 10.7704 0.865301 11.721 1.81585L12.6222 2.71705L12.6222 2.71709C12.8418 2.9366 13.1395 3.05997 13.4501 3.05997H14.5059C15.8502 3.05997 16.9399 4.14972 16.9399 5.49398V6.54981C16.9399 6.86036 17.0633 7.15813 17.2828 7.37768L17.2829 7.3777L18.1841 8.2789L18.3747 8.08826L18.1841 8.27891C19.1346 9.22945 19.1346 10.7706 18.1841 11.7211L17.2829 12.6224C17.0633 12.8419 16.9399 13.1397 16.9399 13.4502V14.506C16.9399 15.8503 15.8502 16.94 14.5059 16.94H13.4501C13.1395 16.94 12.8418 17.0634 12.6222 17.2829L12.6222 17.2829L11.721 18.1841C10.7704 19.1347 9.22939 19.1347 8.27881 18.1841L7.37761 17.2829L7.37759 17.2829C7.15804 17.0634 6.86027 16.94 6.54972 16.94H5.49389C4.14962 16.94 3.05989 15.8503 3.05989 14.506V13.4502C3.05989 13.1398 2.93655 12.8419 2.71696 12.6224C2.71696 12.6223 2.71695 12.6223 2.71694 12.6223L1.81577 11.7211C0.865224 10.7706 0.865226 9.22945 1.81576 8.2789L2.71696 7.3777C2.71696 7.3777 2.71696 7.3777 2.71696 7.3777C2.93654 7.15813 3.05989 6.86033 3.05989 6.54981V5.49398C3.05989 4.14972 4.14963 3.05997 5.49389 3.05997H6.54972C6.86024 3.05997 7.15803 2.93662 7.3776 2.71706L7.37761 2.71705L8.27881 1.81585Z",
-											"stroke": "url(#paint1_linear_6296_109593)",
-											"stroke-opacity": "0.8",
-											"stroke-width": "0.539216"
-										},
-										"children": []
-									}
-								]
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"mask": "url(#mask0_6296_109593)"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "badge-bg"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M8.08817 1.62521C9.14394 0.569383 10.8558 0.569374 11.9116 1.62521L12.8128 2.52641C12.9819 2.69542 13.2111 2.79037 13.4501 2.79037H14.5059C15.9991 2.79037 17.2095 4.00082 17.2095 5.49398V6.54981C17.2095 6.78882 17.3045 7.01805 17.4735 7.18706L18.3747 8.08826C19.4305 9.1441 19.4305 10.8559 18.3747 11.9118L17.4735 12.813C17.3045 12.982 17.2095 13.2112 17.2095 13.4502V14.506C17.2095 15.9992 15.9991 17.2096 14.5059 17.2096H13.4501C13.2111 17.2096 12.9819 17.3046 12.8128 17.4736L11.9116 18.3748C10.8558 19.4306 9.14403 19.4306 8.08817 18.3748L7.18696 17.4736C7.01795 17.3046 6.78873 17.2096 6.54972 17.2096H5.49389C4.00072 17.2096 2.79028 15.9992 2.79028 14.506V13.4502C2.79028 13.2112 2.69533 12.982 2.52632 12.813L1.62513 11.9118C0.569295 10.8559 0.569295 9.1441 1.62512 8.08826L2.52632 7.18706C2.69533 7.01806 2.79028 6.78882 2.79028 6.54981V5.49398C2.79028 4.00082 4.00072 2.79037 5.49389 2.79037H6.54972C6.78873 2.79037 7.01795 2.69542 7.18696 2.52641L8.08817 1.62521Z",
-											"fill": "#003DC1"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M8.08817 1.62521C9.14394 0.569383 10.8558 0.569374 11.9116 1.62521L12.8128 2.52641C12.9819 2.69542 13.2111 2.79037 13.4501 2.79037H14.5059C15.9991 2.79037 17.2095 4.00082 17.2095 5.49398V6.54981C17.2095 6.78882 17.3045 7.01805 17.4735 7.18706L18.3747 8.08826C19.4305 9.1441 19.4305 10.8559 18.3747 11.9118L17.4735 12.813C17.3045 12.982 17.2095 13.2112 17.2095 13.4502V14.506C17.2095 15.9992 15.9991 17.2096 14.5059 17.2096H13.4501C13.2111 17.2096 12.9819 17.3046 12.8128 17.4736L11.9116 18.3748C10.8558 19.4306 9.14403 19.4306 8.08817 18.3748L7.18696 17.4736C7.01795 17.3046 6.78873 17.2096 6.54972 17.2096H5.49389C4.00072 17.2096 2.79028 15.9992 2.79028 14.506V13.4502C2.79028 13.2112 2.69533 12.982 2.52632 12.813L1.62513 11.9118C0.569295 10.8559 0.569295 9.1441 1.62512 8.08826L2.52632 7.18706C2.69533 7.01806 2.79028 6.78882 2.79028 6.54981V5.49398C2.79028 4.00082 4.00072 2.79037 5.49389 2.79037H6.54972C6.78873 2.79037 7.01795 2.69542 7.18696 2.52641L8.08817 1.62521Z",
-											"fill": "url(#paint2_linear_6296_109593)",
-											"fill-opacity": "0.9"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M8.44172 1.97876L8.44173 1.97875C9.30224 1.11821 10.6975 1.11818 11.5581 1.97876L12.4593 2.87997L12.4593 2.88003C12.7221 3.1427 13.0784 3.29037 13.4501 3.29037H14.5059C15.723 3.29037 16.7095 4.27696 16.7095 5.49398V6.54981C16.7095 6.92148 16.8572 7.27785 17.1199 7.54057L17.1199 7.54061L18.0211 8.44182L18.3747 8.08826L18.0211 8.44182C18.8817 9.30239 18.8817 10.6976 18.0211 11.5582L17.1199 12.4594C16.8572 12.7222 16.7095 13.0786 16.7095 13.4502V14.506C16.7095 15.7231 15.723 16.7096 14.5059 16.7096H13.4501C13.0784 16.7096 12.7221 16.8573 12.4594 17.1199L12.4593 17.12L11.5581 18.0212C10.6975 18.8818 9.30233 18.8818 8.44172 18.0212L7.54052 17.12L7.54048 17.12C7.27775 16.8573 6.92139 16.7096 6.54972 16.7096H5.49389C4.27686 16.7096 3.29028 15.7231 3.29028 14.506V13.4502C3.29028 13.0787 3.14267 12.7222 2.87984 12.4594L1.97868 11.5582C1.11811 10.6976 1.11811 9.30238 1.97867 8.44181L2.87986 7.54062C2.87987 7.54062 2.87987 7.54061 2.87987 7.54061C3.14266 7.27784 3.29028 6.92143 3.29028 6.54981V5.49398C3.29028 4.27696 4.27687 3.29037 5.49389 3.29037H6.54972C6.92135 3.29037 7.27774 3.14273 7.54051 2.87998L7.54052 2.87997L8.44172 1.97876Z",
-											"stroke": "url(#paint3_linear_6296_109593)",
-											"stroke-opacity": "0.8"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "check",
-									"filter": "url(#filter0_d_6296_109593)"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M13.4219 6.98132C13.8732 7.28924 13.9829 7.89545 13.667 8.33533L10.04 13.3858C9.87754 13.612 9.62408 13.7602 9.34287 13.7934C9.06166 13.8266 8.77923 13.7417 8.56605 13.5599L6.49346 11.7923C6.0789 11.4387 6.03689 10.8245 6.39963 10.4204C6.76238 10.0163 7.39252 9.97533 7.80709 10.3289L9.04316 11.3831L12.0328 7.22026C12.3487 6.78038 12.9706 6.6734 13.4219 6.98132Z",
-											"fill": "url(#paint4_linear_6296_109593)",
-											"shape-rendering": "crispEdges"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "highlight",
-									"opacity": "0.5",
-									"d": "M0 0H15.5556L5.26663 20H0V0Z",
-									"fill": "url(#paint5_linear_6296_109593)"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "filter",
-						"attributes": {
-							"id": "filter0_d_6296_109593",
-							"x": "5.65283",
-							"y": "6.55549",
-							"width": "8.69458",
-							"height": "7.995",
-							"filterUnits": "userSpaceOnUse",
-							"color-interpolation-filters": "sRGB"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "feFlood",
-								"attributes": {
-									"flood-opacity": "0",
-									"result": "BackgroundImageFix"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"in": "SourceAlpha",
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
-									"result": "hardAlpha"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feOffset",
-								"attributes": {
-									"dy": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feGaussianBlur",
-								"attributes": {
-									"stdDeviation": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feComposite",
-								"attributes": {
-									"in2": "hardAlpha",
-									"operator": "out"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in2": "BackgroundImageFix",
-									"result": "effect1_dropShadow_6296_109593"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in": "SourceGraphic",
-									"in2": "effect1_dropShadow_6296_109593",
-									"result": "shape"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint0_linear_6296_109593",
-							"x1": "16.302",
-							"y1": "19.1667",
-							"x2": "-0.37184",
-							"y2": "14.8201",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#296DFF"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#5289FF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint1_linear_6296_109593",
-							"x1": "8.67462",
-							"y1": "0.833336",
-							"x2": "18.9651",
-							"y2": "12.5067",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.2"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#296DFF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint2_linear_6296_109593",
-							"x1": "16.302",
-							"y1": "19.1667",
-							"x2": "-0.37184",
-							"y2": "14.8201",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#296DFF"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#5289FF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint3_linear_6296_109593",
-							"x1": "8.67462",
-							"y1": "0.833336",
-							"x2": "18.9651",
-							"y2": "12.5067",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.2"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#296DFF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint4_linear_6296_109593",
-							"x1": "10.0001",
-							"y1": "6.80549",
-							"x2": "10.0001",
-							"y2": "13.8005",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.95"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "white",
-									"stop-opacity": "0.8"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint5_linear_6296_109593",
-							"x1": "-4.78632",
-							"y1": "4.375",
-							"x2": "16.2164",
-							"y2": "10.4",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.12"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "white",
-									"stop-opacity": "0.2"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "VerifiedDark"
-}
diff --git a/app/components/base/icons/src/public/plugins/VerifiedDark.tsx b/app/components/base/icons/src/public/plugins/VerifiedDark.tsx
deleted file mode 100644
index 03d045d..0000000
--- a/app/components/base/icons/src/public/plugins/VerifiedDark.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './VerifiedDark.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'VerifiedDark'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/plugins/VerifiedLight.json b/app/components/base/icons/src/public/plugins/VerifiedLight.json
deleted file mode 100644
index b31fe65..0000000
--- a/app/components/base/icons/src/public/plugins/VerifiedLight.json
+++ /dev/null
@@ -1,456 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "20",
-			"height": "20",
-			"viewBox": "0 0 20 20",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Verified"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "mask",
-						"attributes": {
-							"id": "mask0_6295_120949",
-							"style": "mask-type:alpha",
-							"maskUnits": "userSpaceOnUse",
-							"x": "0",
-							"y": "0",
-							"width": "20",
-							"height": "20"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "Mask"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M8.08817 1.62512C9.14394 0.569299 10.8558 0.56929 11.9116 1.62512L12.8128 2.52633C12.9819 2.69533 13.2111 2.79028 13.4501 2.79028H14.5059C15.9991 2.79028 17.2095 4.00074 17.2095 5.4939V6.54972C17.2095 6.78874 17.3045 7.01796 17.4735 7.18697L18.3747 8.08818C19.4305 9.14401 19.4305 10.8559 18.3747 11.9117L17.4735 12.8129C17.3045 12.9819 17.2095 13.2112 17.2095 13.4502V14.5059C17.2095 15.9991 15.9991 17.2095 14.5059 17.2095H13.4501C13.2111 17.2095 12.9819 17.3045 12.8128 17.4735L11.9116 18.3747C10.8558 19.4305 9.14403 19.4305 8.08817 18.3747L7.18696 17.4735C7.01795 17.3045 6.78873 17.2095 6.54972 17.2095H5.49389C4.00072 17.2095 2.79028 15.9991 2.79028 14.5059V13.4502C2.79028 13.2112 2.69533 12.9819 2.52632 12.8129L1.62513 11.9117C0.569295 10.8559 0.569295 9.14401 1.62512 8.08818L2.52632 7.18697C2.69533 7.01797 2.79028 6.78874 2.79028 6.54972V5.4939C2.79028 4.00074 4.00072 2.79028 5.49389 2.79028H6.54972C6.78873 2.79028 7.01795 2.69533 7.18696 2.52633L8.08817 1.62512Z",
-											"fill": "#B2CAFF"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M8.08817 1.62512C9.14394 0.569299 10.8558 0.56929 11.9116 1.62512L12.8128 2.52633C12.9819 2.69533 13.2111 2.79028 13.4501 2.79028H14.5059C15.9991 2.79028 17.2095 4.00074 17.2095 5.4939V6.54972C17.2095 6.78874 17.3045 7.01796 17.4735 7.18697L18.3747 8.08818C19.4305 9.14401 19.4305 10.8559 18.3747 11.9117L17.4735 12.8129C17.3045 12.9819 17.2095 13.2112 17.2095 13.4502V14.5059C17.2095 15.9991 15.9991 17.2095 14.5059 17.2095H13.4501C13.2111 17.2095 12.9819 17.3045 12.8128 17.4735L11.9116 18.3747C10.8558 19.4305 9.14403 19.4305 8.08817 18.3747L7.18696 17.4735C7.01795 17.3045 6.78873 17.2095 6.54972 17.2095H5.49389C4.00072 17.2095 2.79028 15.9991 2.79028 14.5059V13.4502C2.79028 13.2112 2.69533 12.9819 2.52632 12.8129L1.62513 11.9117C0.569295 10.8559 0.569295 9.14401 1.62512 8.08818L2.52632 7.18697C2.69533 7.01797 2.79028 6.78874 2.79028 6.54972V5.4939C2.79028 4.00074 4.00072 2.79028 5.49389 2.79028H6.54972C6.78873 2.79028 7.01795 2.69533 7.18696 2.52633L8.08817 1.62512Z",
-											"fill": "url(#paint0_linear_6295_120949)",
-											"fill-opacity": "0.9"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M8.27881 1.81577L8.27881 1.81576C9.2293 0.865233 10.7704 0.865217 11.721 1.81577L12.6222 2.71697L12.6222 2.71701C12.8418 2.93652 13.1395 3.05989 13.4501 3.05989H14.5059C15.8502 3.05989 16.9399 4.14963 16.9399 5.4939V6.54972C16.9399 6.86027 17.0633 7.15805 17.2828 7.3776L17.2829 7.37762L18.1841 8.27882L18.3747 8.08818L18.1841 8.27882C19.1346 9.22937 19.1346 10.7705 18.1841 11.7211L17.2829 12.6223C17.0633 12.8418 16.9399 13.1396 16.9399 13.4502V14.5059C16.9399 15.8502 15.8502 16.9399 14.5059 16.9399H13.4501C13.1395 16.9399 12.8418 17.0633 12.6222 17.2828L12.6222 17.2829L11.721 18.1841C10.7704 19.1346 9.22939 19.1346 8.27881 18.1841L7.37761 17.2829L7.37759 17.2828C7.15804 17.0633 6.86027 16.9399 6.54972 16.9399H5.49389C4.14962 16.9399 3.05989 15.8502 3.05989 14.5059V13.4502C3.05989 13.1397 2.93655 12.8418 2.71696 12.6223C2.71696 12.6223 2.71695 12.6223 2.71694 12.6222L1.81577 11.7211C0.865224 10.7705 0.865226 9.22936 1.81576 8.27882L2.71696 7.37762C2.71696 7.37762 2.71696 7.37762 2.71696 7.37762C2.93654 7.15805 3.05989 6.86024 3.05989 6.54972V5.4939C3.05989 4.14964 4.14963 3.05989 5.49389 3.05989H6.54972C6.86024 3.05989 7.15803 2.93653 7.3776 2.71698L7.37761 2.71697L8.27881 1.81577Z",
-											"stroke": "url(#paint1_linear_6295_120949)",
-											"stroke-opacity": "0.8",
-											"stroke-width": "0.539216"
-										},
-										"children": []
-									}
-								]
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"mask": "url(#mask0_6295_120949)"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "badge-bg"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M8.08817 1.62512C9.14394 0.569299 10.8558 0.56929 11.9116 1.62512L12.8128 2.52633C12.9819 2.69533 13.2111 2.79028 13.4501 2.79028H14.5059C15.9991 2.79028 17.2095 4.00074 17.2095 5.4939V6.54972C17.2095 6.78874 17.3045 7.01796 17.4735 7.18697L18.3747 8.08818C19.4305 9.14401 19.4305 10.8559 18.3747 11.9117L17.4735 12.8129C17.3045 12.9819 17.2095 13.2112 17.2095 13.4502V14.5059C17.2095 15.9991 15.9991 17.2095 14.5059 17.2095H13.4501C13.2111 17.2095 12.9819 17.3045 12.8128 17.4735L11.9116 18.3747C10.8558 19.4305 9.14403 19.4305 8.08817 18.3747L7.18696 17.4735C7.01795 17.3045 6.78873 17.2095 6.54972 17.2095H5.49389C4.00072 17.2095 2.79028 15.9991 2.79028 14.5059V13.4502C2.79028 13.2112 2.69533 12.9819 2.52632 12.8129L1.62513 11.9117C0.569295 10.8559 0.569295 9.14401 1.62512 8.08818L2.52632 7.18697C2.69533 7.01797 2.79028 6.78874 2.79028 6.54972V5.4939C2.79028 4.00074 4.00072 2.79028 5.49389 2.79028H6.54972C6.78873 2.79028 7.01795 2.69533 7.18696 2.52633L8.08817 1.62512Z",
-											"fill": "#B2CAFF"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M8.08817 1.62512C9.14394 0.569299 10.8558 0.56929 11.9116 1.62512L12.8128 2.52633C12.9819 2.69533 13.2111 2.79028 13.4501 2.79028H14.5059C15.9991 2.79028 17.2095 4.00074 17.2095 5.4939V6.54972C17.2095 6.78874 17.3045 7.01796 17.4735 7.18697L18.3747 8.08818C19.4305 9.14401 19.4305 10.8559 18.3747 11.9117L17.4735 12.8129C17.3045 12.9819 17.2095 13.2112 17.2095 13.4502V14.5059C17.2095 15.9991 15.9991 17.2095 14.5059 17.2095H13.4501C13.2111 17.2095 12.9819 17.3045 12.8128 17.4735L11.9116 18.3747C10.8558 19.4305 9.14403 19.4305 8.08817 18.3747L7.18696 17.4735C7.01795 17.3045 6.78873 17.2095 6.54972 17.2095H5.49389C4.00072 17.2095 2.79028 15.9991 2.79028 14.5059V13.4502C2.79028 13.2112 2.69533 12.9819 2.52632 12.8129L1.62513 11.9117C0.569295 10.8559 0.569295 9.14401 1.62512 8.08818L2.52632 7.18697C2.69533 7.01797 2.79028 6.78874 2.79028 6.54972V5.4939C2.79028 4.00074 4.00072 2.79028 5.49389 2.79028H6.54972C6.78873 2.79028 7.01795 2.69533 7.18696 2.52633L8.08817 1.62512Z",
-											"fill": "url(#paint2_linear_6295_120949)",
-											"fill-opacity": "0.9"
-										},
-										"children": []
-									},
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M8.44172 1.97868L8.44173 1.97867C9.30224 1.11812 10.6975 1.1181 11.5581 1.97868L12.4593 2.87988L12.4593 2.87995C12.7221 3.14262 13.0784 3.29028 13.4501 3.29028H14.5059C15.723 3.29028 16.7095 4.27687 16.7095 5.4939V6.54972C16.7095 6.9214 16.8572 7.27776 17.1199 7.54049L17.1199 7.54053L18.0211 8.44173L18.3747 8.08818L18.0211 8.44174C18.8817 9.3023 18.8817 10.6976 18.0211 11.5582L17.1199 12.4594C16.8572 12.7221 16.7095 13.0785 16.7095 13.4502V14.5059C16.7095 15.723 15.723 16.7095 14.5059 16.7095H13.4501C13.0784 16.7095 12.7221 16.8573 12.4594 17.1198L12.4593 17.1199L11.5581 18.0211C10.6975 18.8817 9.30233 18.8817 8.44172 18.0211L7.54052 17.1199L7.54048 17.1199C7.27775 16.8572 6.92139 16.7095 6.54972 16.7095H5.49389C4.27686 16.7095 3.29028 15.723 3.29028 14.5059V13.4502C3.29028 13.0786 3.14267 12.7221 2.87984 12.4593L1.97868 11.5582C1.11811 10.6976 1.11811 9.3023 1.97867 8.44173L2.87986 7.54054C2.87987 7.54053 2.87987 7.54053 2.87987 7.54053C3.14266 7.27775 3.29028 6.92134 3.29028 6.54972V5.4939C3.29028 4.27688 4.27687 3.29028 5.49389 3.29028H6.54972C6.92135 3.29028 7.27774 3.14265 7.54051 2.87989L7.54052 2.87988L8.44172 1.97868Z",
-											"stroke": "url(#paint3_linear_6295_120949)",
-											"stroke-opacity": "0.8"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"id": "check",
-									"filter": "url(#filter0_d_6295_120949)"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"fill-rule": "evenodd",
-											"clip-rule": "evenodd",
-											"d": "M13.4219 6.98125C13.8732 7.28917 13.9829 7.89538 13.667 8.33526L10.04 13.3857C9.87754 13.6119 9.62408 13.7601 9.34287 13.7933C9.06166 13.8266 8.77923 13.7417 8.56605 13.5599L6.49346 11.7922C6.0789 11.4386 6.03689 10.8244 6.39963 10.4203C6.76238 10.0162 7.39252 9.97526 7.80709 10.3288L9.04316 11.3831L12.0328 7.22019C12.3487 6.78031 12.9706 6.67333 13.4219 6.98125Z",
-											"fill": "url(#paint4_linear_6295_120949)",
-											"shape-rendering": "crispEdges"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"id": "highlight",
-									"opacity": "0.5",
-									"d": "M0 0H15.5556L5.26663 20H0V0Z",
-									"fill": "url(#paint5_linear_6295_120949)"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "filter",
-						"attributes": {
-							"id": "filter0_d_6295_120949",
-							"x": "5.65283",
-							"y": "6.55542",
-							"width": "8.69458",
-							"height": "7.99512",
-							"filterUnits": "userSpaceOnUse",
-							"color-interpolation-filters": "sRGB"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "feFlood",
-								"attributes": {
-									"flood-opacity": "0",
-									"result": "BackgroundImageFix"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"in": "SourceAlpha",
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
-									"result": "hardAlpha"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feOffset",
-								"attributes": {
-									"dy": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feGaussianBlur",
-								"attributes": {
-									"stdDeviation": "0.25"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feComposite",
-								"attributes": {
-									"in2": "hardAlpha",
-									"operator": "out"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feColorMatrix",
-								"attributes": {
-									"type": "matrix",
-									"values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in2": "BackgroundImageFix",
-									"result": "effect1_dropShadow_6295_120949"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "feBlend",
-								"attributes": {
-									"mode": "normal",
-									"in": "SourceGraphic",
-									"in2": "effect1_dropShadow_6295_120949",
-									"result": "shape"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint0_linear_6295_120949",
-							"x1": "16.302",
-							"y1": "19.1666",
-							"x2": "-0.37184",
-							"y2": "14.82",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#155AEF"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#5289FF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint1_linear_6295_120949",
-							"x1": "8.67462",
-							"y1": "0.833252",
-							"x2": "18.9651",
-							"y2": "12.5066",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.95"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#155AEF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint2_linear_6295_120949",
-							"x1": "16.302",
-							"y1": "19.1666",
-							"x2": "-0.37184",
-							"y2": "14.82",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "#155AEF"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#5289FF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint3_linear_6295_120949",
-							"x1": "8.67462",
-							"y1": "0.833252",
-							"x2": "18.9651",
-							"y2": "12.5066",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.95"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "#155AEF"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint4_linear_6295_120949",
-							"x1": "10.0001",
-							"y1": "6.80542",
-							"x2": "10.0001",
-							"y2": "13.8004",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "white",
-									"stop-opacity": "0.9"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "linearGradient",
-						"attributes": {
-							"id": "paint5_linear_6295_120949",
-							"x1": "-4.78632",
-							"y1": "4.375",
-							"x2": "16.2164",
-							"y2": "10.4",
-							"gradientUnits": "userSpaceOnUse"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"stop-color": "white",
-									"stop-opacity": "0.12"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "stop",
-								"attributes": {
-									"offset": "1",
-									"stop-color": "white",
-									"stop-opacity": "0.3"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "VerifiedLight"
-}
diff --git a/app/components/base/icons/src/public/plugins/VerifiedLight.tsx b/app/components/base/icons/src/public/plugins/VerifiedLight.tsx
deleted file mode 100644
index 675a584..0000000
--- a/app/components/base/icons/src/public/plugins/VerifiedLight.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './VerifiedLight.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'VerifiedLight'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/tracing/WeaveIcon.json b/app/components/base/icons/src/public/tracing/WeaveIcon.json
deleted file mode 100644
index 1a96e70..0000000
--- a/app/components/base/icons/src/public/tracing/WeaveIcon.json
+++ /dev/null
@@ -1,279 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"xmlns": "http://www.w3.org/2000/svg",
-			"xmlns:xlink": "http://www.w3.org/1999/xlink",
-			"width": "120px",
-			"height": "16px",
-			"viewBox": "0 0 120 16",
-			"version": "1.1"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "surface1"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 20.847656 3.292969 C 20.875 3.292969 20.902344 3.292969 20.933594 3.292969 C 20.949219 3.292969 20.964844 3.292969 20.980469 3.292969 C 21.035156 3.292969 21.089844 3.292969 21.140625 3.292969 C 21.179688 3.292969 21.21875 3.292969 21.253906 3.292969 C 21.359375 3.292969 21.464844 3.292969 21.566406 3.292969 C 21.675781 3.292969 21.78125 3.292969 21.890625 3.292969 C 22.097656 3.292969 22.300781 3.292969 22.507812 3.292969 C 22.738281 3.292969 22.972656 3.292969 23.207031 3.296875 C 23.6875 3.296875 24.167969 3.296875 24.648438 3.296875 C 24.648438 3.519531 24.648438 3.742188 24.648438 3.96875 C 24.113281 4.042969 24.113281 4.042969 23.566406 4.113281 C 23.667969 4.496094 23.769531 4.882812 23.867188 5.265625 C 23.878906 5.308594 23.878906 5.308594 23.890625 5.351562 C 24.128906 6.269531 24.371094 7.183594 24.609375 8.097656 C 24.675781 8.339844 24.738281 8.582031 24.800781 8.824219 C 24.816406 8.878906 24.832031 8.933594 24.84375 8.992188 C 24.867188 9.078125 24.890625 9.167969 24.914062 9.257812 C 24.921875 9.289062 24.933594 9.320312 24.941406 9.355469 C 24.953125 9.398438 24.964844 9.441406 24.976562 9.484375 C 24.984375 9.523438 24.984375 9.523438 24.996094 9.558594 C 25.007812 9.625 25.007812 9.625 25.007812 9.71875 C 25.023438 9.71875 25.039062 9.71875 25.054688 9.71875 C 25.058594 9.707031 25.058594 9.695312 25.0625 9.679688 C 25.097656 9.492188 25.152344 9.3125 25.210938 9.128906 C 25.222656 9.097656 25.234375 9.0625 25.246094 9.027344 C 25.269531 8.953125 25.292969 8.882812 25.316406 8.808594 C 25.355469 8.691406 25.390625 8.574219 25.429688 8.457031 C 25.464844 8.339844 25.503906 8.21875 25.542969 8.097656 C 25.660156 7.738281 25.773438 7.375 25.890625 7.011719 C 25.902344 6.96875 25.917969 6.921875 25.933594 6.875 C 26.226562 5.945312 26.519531 5.019531 26.808594 4.089844 C 26.785156 4.089844 26.765625 4.089844 26.742188 4.085938 C 26.507812 4.074219 26.273438 4.046875 26.042969 4.015625 C 26.007812 4.011719 25.972656 4.007812 25.933594 4.003906 C 25.851562 3.992188 25.765625 3.980469 25.679688 3.96875 C 25.679688 3.746094 25.679688 3.523438 25.679688 3.296875 C 26.175781 3.296875 26.667969 3.296875 27.160156 3.296875 C 27.390625 3.292969 27.621094 3.292969 27.851562 3.292969 C 28.050781 3.292969 28.25 3.292969 28.449219 3.292969 C 28.554688 3.292969 28.660156 3.292969 28.765625 3.292969 C 28.867188 3.292969 28.964844 3.292969 29.066406 3.292969 C 29.101562 3.292969 29.140625 3.292969 29.175781 3.292969 C 29.226562 3.292969 29.273438 3.292969 29.324219 3.292969 C 29.367188 3.292969 29.367188 3.292969 29.410156 3.292969 C 29.472656 3.296875 29.472656 3.296875 29.496094 3.320312 C 29.5 3.367188 29.5 3.417969 29.5 3.464844 C 29.5 3.492188 29.5 3.515625 29.5 3.542969 C 29.496094 3.59375 29.496094 3.59375 29.496094 3.648438 C 29.496094 3.753906 29.496094 3.859375 29.496094 3.96875 C 29.09375 4.015625 28.6875 4.066406 28.273438 4.113281 C 28.679688 5.460938 28.679688 5.460938 29.089844 6.808594 C 29.105469 6.859375 29.121094 6.910156 29.136719 6.960938 C 29.234375 7.292969 29.335938 7.625 29.4375 7.960938 C 29.484375 8.113281 29.53125 8.265625 29.578125 8.417969 C 29.605469 8.507812 29.632812 8.597656 29.660156 8.691406 C 29.878906 9.40625 29.878906 9.40625 29.976562 9.746094 C 30.027344 9.664062 30.046875 9.601562 30.070312 9.507812 C 30.078125 9.484375 30.078125 9.484375 30.085938 9.457031 C 30.101562 9.402344 30.117188 9.34375 30.132812 9.289062 C 30.144531 9.25 30.152344 9.207031 30.164062 9.167969 C 30.1875 9.082031 30.214844 8.992188 30.238281 8.90625 C 30.292969 8.691406 30.351562 8.480469 30.410156 8.269531 C 30.433594 8.191406 30.453125 8.117188 30.472656 8.042969 C 30.621094 7.5 30.769531 6.960938 30.921875 6.421875 C 30.949219 6.324219 30.976562 6.226562 31 6.128906 C 31.066406 5.902344 31.128906 5.675781 31.191406 5.449219 C 31.230469 5.308594 31.269531 5.164062 31.308594 5.023438 C 31.335938 4.925781 31.363281 4.828125 31.390625 4.734375 C 31.402344 4.6875 31.414062 4.640625 31.429688 4.59375 C 31.445312 4.53125 31.464844 4.46875 31.480469 4.40625 C 31.488281 4.386719 31.492188 4.367188 31.496094 4.347656 C 31.515625 4.277344 31.535156 4.207031 31.558594 4.136719 C 31.210938 4.074219 30.855469 4.023438 30.503906 3.96875 C 30.503906 3.746094 30.503906 3.523438 30.503906 3.296875 C 30.878906 3.296875 31.253906 3.296875 31.628906 3.296875 C 31.804688 3.292969 31.976562 3.292969 32.152344 3.292969 C 32.304688 3.292969 32.457031 3.292969 32.605469 3.292969 C 32.6875 3.292969 32.769531 3.292969 32.847656 3.292969 C 32.9375 3.292969 33.027344 3.292969 33.117188 3.292969 C 33.144531 3.292969 33.171875 3.292969 33.199219 3.292969 C 33.222656 3.292969 33.246094 3.292969 33.273438 3.292969 C 33.304688 3.292969 33.304688 3.292969 33.335938 3.292969 C 33.382812 3.296875 33.382812 3.296875 33.40625 3.320312 C 33.410156 3.367188 33.410156 3.414062 33.410156 3.460938 C 33.410156 3.488281 33.410156 3.515625 33.410156 3.542969 C 33.410156 3.574219 33.410156 3.605469 33.410156 3.632812 C 33.410156 3.664062 33.410156 3.695312 33.410156 3.726562 C 33.410156 3.796875 33.410156 3.871094 33.40625 3.945312 C 33.292969 3.964844 33.175781 3.984375 33.0625 4.007812 C 33.023438 4.011719 32.984375 4.019531 32.945312 4.027344 C 32.738281 4.0625 32.535156 4.097656 32.328125 4.113281 C 32.320312 4.144531 32.320312 4.144531 32.3125 4.179688 C 32.238281 4.480469 32.15625 4.78125 32.070312 5.082031 C 32.058594 5.128906 32.042969 5.171875 32.03125 5.21875 C 31.875 5.78125 31.714844 6.347656 31.550781 6.910156 C 31.375 7.535156 31.195312 8.160156 31.019531 8.785156 C 30.992188 8.871094 30.96875 8.957031 30.945312 9.042969 C 30.835938 9.433594 30.722656 9.820312 30.613281 10.210938 C 30.566406 10.378906 30.519531 10.542969 30.472656 10.707031 C 30.445312 10.804688 30.417969 10.902344 30.390625 11 C 30.277344 11.390625 30.167969 11.785156 30.046875 12.175781 C 29.730469 12.175781 29.414062 12.175781 29.089844 12.175781 C 29.03125 12.003906 29.03125 12.003906 28.976562 11.832031 C 28.925781 11.675781 28.878906 11.523438 28.828125 11.367188 C 28.820312 11.347656 28.8125 11.328125 28.808594 11.304688 C 28.632812 10.769531 28.460938 10.230469 28.285156 9.695312 C 28.144531 9.273438 28.007812 8.847656 27.875 8.425781 C 27.695312 7.867188 27.515625 7.308594 27.332031 6.753906 C 27.304688 6.679688 27.28125 6.605469 27.257812 6.53125 C 27.238281 6.476562 27.222656 6.425781 27.207031 6.375 C 27.046875 5.894531 27.046875 5.894531 27.046875 5.796875 C 27.03125 5.796875 27.015625 5.796875 27 5.796875 C 26.996094 5.8125 26.996094 5.828125 26.992188 5.84375 C 26.964844 5.988281 26.925781 6.132812 26.882812 6.273438 C 26.875 6.296875 26.867188 6.316406 26.859375 6.339844 C 26.84375 6.390625 26.828125 6.4375 26.8125 6.488281 C 26.769531 6.625 26.726562 6.761719 26.683594 6.898438 C 26.675781 6.929688 26.664062 6.957031 26.65625 6.988281 C 26.546875 7.328125 26.445312 7.667969 26.339844 8.007812 C 26.316406 8.078125 26.296875 8.144531 26.273438 8.214844 C 26.230469 8.355469 26.1875 8.496094 26.144531 8.636719 C 26.074219 8.863281 26.007812 9.089844 25.9375 9.3125 C 25.933594 9.328125 25.925781 9.347656 25.921875 9.363281 C 25.894531 9.449219 25.871094 9.535156 25.84375 9.617188 C 25.796875 9.769531 25.75 9.921875 25.703125 10.074219 C 25.675781 10.15625 25.652344 10.242188 25.625 10.328125 C 25.613281 10.363281 25.605469 10.394531 25.59375 10.429688 C 25.414062 11.011719 25.234375 11.59375 25.054688 12.175781 C 24.738281 12.175781 24.421875 12.175781 24.097656 12.175781 C 23.816406 11.230469 23.535156 10.285156 23.261719 9.339844 C 23.253906 9.320312 23.25 9.304688 23.246094 9.285156 C 23.195312 9.117188 23.144531 8.949219 23.097656 8.78125 C 22.960938 8.3125 22.824219 7.84375 22.6875 7.375 C 22.664062 7.304688 22.644531 7.234375 22.625 7.164062 C 22.414062 6.449219 22.207031 5.738281 22 5.027344 C 21.976562 4.953125 21.953125 4.878906 21.933594 4.804688 C 21.898438 4.683594 21.859375 4.5625 21.824219 4.441406 C 21.820312 4.421875 21.8125 4.402344 21.808594 4.382812 C 21.796875 4.347656 21.785156 4.3125 21.777344 4.28125 C 21.753906 4.203125 21.742188 4.148438 21.742188 4.066406 C 21.726562 4.066406 21.710938 4.0625 21.691406 4.0625 C 21.382812 4.042969 21.070312 4.003906 20.761719 3.96875 C 20.757812 3.863281 20.757812 3.753906 20.757812 3.648438 C 20.757812 3.617188 20.757812 3.585938 20.757812 3.554688 C 20.757812 3.523438 20.757812 3.496094 20.757812 3.464844 C 20.757812 3.4375 20.757812 3.410156 20.757812 3.382812 C 20.761719 3.296875 20.761719 3.296875 20.847656 3.292969 Z M 20.847656 3.292969 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 82.488281 3.25 C 83.046875 3.246094 83.605469 3.246094 84.167969 3.246094 C 84.425781 3.246094 84.6875 3.246094 84.945312 3.246094 C 85.171875 3.242188 85.398438 3.242188 85.625 3.242188 C 85.746094 3.242188 85.867188 3.242188 85.984375 3.242188 C 88.15625 3.238281 88.15625 3.238281 88.894531 3.898438 C 88.914062 3.914062 88.9375 3.929688 88.957031 3.945312 C 89.191406 4.144531 89.363281 4.402344 89.472656 4.691406 C 89.480469 4.714844 89.492188 4.742188 89.5 4.765625 C 89.65625 5.25 89.601562 5.785156 89.382812 6.234375 C 89.117188 6.753906 88.695312 7.078125 88.152344 7.265625 C 87.984375 7.320312 87.816406 7.367188 87.648438 7.410156 C 87.664062 7.414062 87.679688 7.417969 87.699219 7.421875 C 88.523438 7.605469 89.300781 7.851562 89.78125 8.597656 C 90.0625 9.0625 90.125 9.636719 90.003906 10.164062 C 89.808594 10.804688 89.363281 11.304688 88.78125 11.621094 C 88.324219 11.863281 87.820312 11.988281 87.3125 12.054688 C 87.28125 12.058594 87.253906 12.0625 87.222656 12.066406 C 86.777344 12.121094 86.332031 12.109375 85.882812 12.105469 C 85.765625 12.105469 85.644531 12.105469 85.523438 12.105469 C 85.300781 12.105469 85.074219 12.105469 84.847656 12.105469 C 84.589844 12.105469 84.332031 12.105469 84.074219 12.105469 C 83.546875 12.105469 83.015625 12.101562 82.488281 12.101562 C 82.488281 11.878906 82.488281 11.65625 82.488281 11.429688 C 82.859375 11.390625 83.234375 11.347656 83.617188 11.308594 C 83.617188 8.910156 83.617188 6.511719 83.617188 4.042969 C 83.488281 4.035156 83.363281 4.027344 83.230469 4.019531 C 83.117188 4.007812 83.003906 3.996094 82.890625 3.980469 C 82.863281 3.980469 82.832031 3.976562 82.804688 3.972656 C 82.695312 3.960938 82.59375 3.949219 82.488281 3.921875 C 82.488281 3.699219 82.488281 3.476562 82.488281 3.25 Z M 85.390625 3.96875 C 85.390625 4.242188 85.386719 4.515625 85.382812 4.785156 C 85.382812 4.914062 85.378906 5.039062 85.378906 5.164062 C 85.371094 5.824219 85.367188 6.484375 85.367188 7.144531 C 86.488281 7.183594 86.488281 7.183594 87.457031 6.691406 C 87.796875 6.320312 87.859375 5.832031 87.847656 5.351562 C 87.832031 4.992188 87.71875 4.644531 87.460938 4.378906 C 87 3.96875 86.363281 3.964844 85.78125 3.96875 C 85.742188 3.96875 85.703125 3.96875 85.667969 3.96875 C 85.574219 3.96875 85.484375 3.96875 85.390625 3.96875 Z M 85.390625 7.84375 C 85.390625 9.003906 85.390625 10.160156 85.390625 11.355469 C 86.28125 11.386719 86.28125 11.386719 87.152344 11.21875 C 87.171875 11.214844 87.1875 11.207031 87.207031 11.199219 C 87.578125 11.066406 87.886719 10.824219 88.066406 10.46875 C 88.28125 9.988281 88.289062 9.417969 88.125 8.921875 C 87.960938 8.492188 87.664062 8.234375 87.257812 8.046875 C 86.664062 7.804688 86.023438 7.84375 85.390625 7.84375 Z M 85.390625 7.84375 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 76.167969 3.476562 C 76.367188 3.671875 76.507812 3.917969 76.585938 4.1875 C 76.589844 4.203125 76.59375 4.222656 76.601562 4.242188 C 76.707031 4.675781 76.621094 5.144531 76.414062 5.53125 C 76.34375 5.644531 76.265625 5.746094 76.175781 5.847656 C 76.15625 5.867188 76.136719 5.886719 76.117188 5.910156 C 75.71875 6.332031 75.199219 6.617188 74.6875 6.882812 C 74.707031 6.902344 74.726562 6.921875 74.746094 6.941406 C 74.972656 7.191406 74.972656 7.191406 75.066406 7.296875 C 75.140625 7.382812 75.21875 7.464844 75.300781 7.542969 C 75.351562 7.59375 75.394531 7.640625 75.4375 7.695312 C 75.527344 7.796875 75.621094 7.894531 75.714844 7.992188 C 76.089844 8.394531 76.089844 8.394531 76.253906 8.585938 C 76.351562 8.695312 76.449219 8.800781 76.546875 8.90625 C 76.621094 8.980469 76.691406 9.058594 76.761719 9.136719 C 76.773438 9.152344 76.789062 9.164062 76.800781 9.179688 C 76.824219 9.207031 76.851562 9.234375 76.875 9.261719 C 76.933594 9.324219 76.992188 9.382812 77.0625 9.429688 C 77.070312 9.410156 77.070312 9.410156 77.082031 9.386719 C 77.113281 9.304688 77.152344 9.230469 77.195312 9.15625 C 77.5625 8.476562 77.800781 7.753906 77.976562 7 C 77.953125 7 77.933594 6.996094 77.910156 6.996094 C 77.707031 6.96875 77.5 6.9375 77.296875 6.902344 C 77.273438 6.898438 77.25 6.894531 77.222656 6.890625 C 77.050781 6.859375 77.050781 6.859375 76.96875 6.832031 C 76.960938 6.328125 76.960938 6.328125 77.015625 6.160156 C 77.949219 6.160156 78.886719 6.160156 79.847656 6.160156 C 79.847656 6.367188 79.847656 6.574219 79.847656 6.785156 C 79.53125 6.839844 79.214844 6.894531 78.886719 6.953125 C 78.859375 7.046875 78.832031 7.140625 78.804688 7.234375 C 78.539062 8.09375 78.164062 9.035156 77.601562 9.746094 C 77.5625 9.792969 77.5625 9.792969 77.566406 9.851562 C 77.601562 9.933594 77.648438 9.980469 77.714844 10.039062 C 77.792969 10.113281 77.867188 10.1875 77.9375 10.269531 C 78.027344 10.375 78.125 10.46875 78.222656 10.566406 C 78.308594 10.65625 78.390625 10.742188 78.472656 10.839844 C 78.539062 10.914062 78.601562 10.933594 78.695312 10.949219 C 78.71875 10.953125 78.746094 10.957031 78.769531 10.960938 C 78.796875 10.964844 78.824219 10.96875 78.851562 10.972656 C 78.875 10.980469 78.902344 10.984375 78.933594 10.988281 C 79.019531 11.003906 79.105469 11.019531 79.191406 11.03125 C 79.277344 11.046875 79.363281 11.0625 79.449219 11.078125 C 79.503906 11.085938 79.558594 11.097656 79.613281 11.105469 C 79.648438 11.113281 79.648438 11.113281 79.6875 11.117188 C 79.707031 11.121094 79.730469 11.125 79.75 11.128906 C 79.800781 11.140625 79.800781 11.140625 79.824219 11.164062 C 79.820312 11.421875 79.785156 11.679688 79.753906 11.933594 C 79.691406 11.949219 79.632812 11.964844 79.570312 11.980469 C 79.546875 11.984375 79.546875 11.984375 79.519531 11.992188 C 79.214844 12.066406 78.910156 12.085938 78.597656 12.085938 C 78.539062 12.085938 78.484375 12.085938 78.425781 12.085938 C 77.847656 12.089844 77.332031 11.917969 76.894531 11.523438 C 76.855469 11.484375 76.816406 11.445312 76.777344 11.40625 C 76.71875 11.347656 76.660156 11.296875 76.601562 11.242188 C 76.578125 11.21875 76.578125 11.21875 76.554688 11.195312 C 76.515625 11.160156 76.476562 11.125 76.441406 11.089844 C 76.429688 11.101562 76.417969 11.109375 76.410156 11.117188 C 76.140625 11.351562 75.859375 11.554688 75.542969 11.71875 C 75.511719 11.738281 75.476562 11.757812 75.445312 11.777344 C 75.3125 11.847656 75.179688 11.894531 75.039062 11.9375 C 75.011719 11.945312 75.011719 11.945312 74.984375 11.953125 C 74.632812 12.058594 74.269531 12.089844 73.90625 12.085938 C 73.84375 12.085938 73.785156 12.085938 73.722656 12.089844 C 72.941406 12.089844 72.222656 11.824219 71.652344 11.28125 C 71.203125 10.820312 71.023438 10.246094 71.03125 9.609375 C 71.042969 9.058594 71.230469 8.546875 71.59375 8.132812 C 71.609375 8.113281 71.625 8.09375 71.644531 8.070312 C 71.980469 7.683594 72.398438 7.421875 72.839844 7.171875 C 72.871094 7.152344 72.902344 7.132812 72.9375 7.113281 C 72.960938 7.101562 72.984375 7.085938 73.007812 7.074219 C 72.996094 7.0625 72.988281 7.050781 72.976562 7.042969 C 72.398438 6.425781 72.09375 5.613281 72.113281 4.773438 C 72.128906 4.371094 72.257812 3.988281 72.527344 3.679688 C 72.542969 3.660156 72.558594 3.644531 72.570312 3.625 C 72.917969 3.210938 73.496094 2.996094 74.015625 2.933594 C 74.050781 2.929688 74.050781 2.929688 74.082031 2.925781 C 74.804688 2.847656 75.621094 2.964844 76.167969 3.476562 Z M 73.671875 3.796875 C 73.433594 4.113281 73.414062 4.4375 73.457031 4.820312 C 73.550781 5.460938 73.921875 5.9375 74.328125 6.425781 C 74.398438 6.390625 74.449219 6.355469 74.503906 6.300781 C 74.527344 6.28125 74.527344 6.28125 74.550781 6.257812 C 74.566406 6.242188 74.582031 6.226562 74.597656 6.210938 C 74.613281 6.191406 74.628906 6.175781 74.644531 6.160156 C 74.773438 6.03125 74.890625 5.894531 75 5.75 C 75.019531 5.726562 75.035156 5.699219 75.054688 5.675781 C 75.335938 5.292969 75.5 4.859375 75.457031 4.378906 C 75.40625 4.078125 75.289062 3.820312 75.035156 3.636719 C 74.59375 3.363281 74.03125 3.410156 73.671875 3.796875 Z M 73.046875 7.828125 C 72.664062 8.226562 72.519531 8.789062 72.519531 9.332031 C 72.53125 9.800781 72.71875 10.257812 73.039062 10.601562 C 73.46875 10.996094 73.980469 11.140625 74.550781 11.125 C 74.960938 11.105469 75.339844 11.003906 75.703125 10.8125 C 75.71875 10.804688 75.738281 10.796875 75.753906 10.785156 C 75.84375 10.738281 75.90625 10.699219 75.960938 10.609375 C 75.949219 10.601562 75.941406 10.589844 75.933594 10.582031 C 75.460938 10.074219 75.460938 10.074219 75.25 9.8125 C 75.1875 9.738281 75.125 9.664062 75.0625 9.59375 C 74.972656 9.484375 74.882812 9.375 74.796875 9.265625 C 74.695312 9.132812 74.589844 9.003906 74.480469 8.878906 C 74.390625 8.773438 74.304688 8.667969 74.214844 8.5625 C 74.152344 8.484375 74.085938 8.40625 74.019531 8.328125 C 73.921875 8.214844 73.828125 8.101562 73.734375 7.984375 C 73.726562 7.96875 73.714844 7.957031 73.703125 7.941406 C 73.683594 7.914062 73.660156 7.886719 73.640625 7.859375 C 73.589844 7.792969 73.539062 7.730469 73.488281 7.667969 C 73.460938 7.632812 73.460938 7.632812 73.433594 7.601562 C 73.414062 7.578125 73.414062 7.578125 73.390625 7.554688 C 73.265625 7.554688 73.132812 7.742188 73.046875 7.828125 Z M 73.046875 7.828125 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 49.992188 5.535156 C 50.101562 5.609375 50.101562 5.609375 50.136719 5.679688 C 50.136719 5.746094 50.140625 5.8125 50.140625 5.882812 C 50.140625 5.914062 50.140625 5.914062 50.140625 5.941406 C 50.140625 5.984375 50.140625 6.027344 50.140625 6.070312 C 50.140625 6.136719 50.140625 6.203125 50.140625 6.269531 C 50.140625 6.308594 50.140625 6.351562 50.140625 6.390625 C 50.140625 6.410156 50.140625 6.429688 50.140625 6.453125 C 50.140625 6.589844 50.140625 6.589844 50.113281 6.617188 C 50.074219 6.617188 50.035156 6.621094 49.996094 6.621094 C 49.972656 6.621094 49.949219 6.621094 49.921875 6.621094 C 49.894531 6.621094 49.871094 6.617188 49.84375 6.617188 C 49.816406 6.617188 49.789062 6.617188 49.757812 6.617188 C 49.671875 6.617188 49.585938 6.617188 49.5 6.617188 C 49.441406 6.617188 49.378906 6.617188 49.320312 6.617188 C 49.175781 6.617188 49.03125 6.617188 48.886719 6.617188 C 48.898438 6.640625 48.90625 6.660156 48.917969 6.683594 C 48.929688 6.714844 48.945312 6.746094 48.957031 6.773438 C 48.964844 6.789062 48.96875 6.804688 48.976562 6.820312 C 49.203125 7.339844 49.195312 8 48.988281 8.523438 C 48.75 9.0625 48.355469 9.457031 47.804688 9.671875 C 47.066406 9.941406 46.210938 9.941406 45.457031 9.746094 C 45.277344 10.003906 45.214844 10.273438 45.238281 10.585938 C 45.269531 10.699219 45.316406 10.761719 45.402344 10.835938 C 45.617188 10.945312 45.851562 10.949219 46.089844 10.949219 C 46.113281 10.953125 46.132812 10.953125 46.15625 10.953125 C 46.203125 10.953125 46.25 10.953125 46.292969 10.953125 C 46.367188 10.953125 46.441406 10.953125 46.515625 10.953125 C 46.726562 10.953125 46.9375 10.957031 47.144531 10.957031 C 47.273438 10.957031 47.402344 10.957031 47.53125 10.960938 C 47.582031 10.960938 47.628906 10.960938 47.675781 10.960938 C 48.324219 10.960938 49.039062 11.019531 49.53125 11.492188 C 49.546875 11.511719 49.566406 11.53125 49.585938 11.550781 C 49.601562 11.566406 49.617188 11.582031 49.636719 11.597656 C 49.957031 11.929688 50.0625 12.394531 50.066406 12.84375 C 50.054688 13.351562 49.847656 13.800781 49.511719 14.171875 C 49.496094 14.191406 49.480469 14.207031 49.460938 14.226562 C 48.8125 14.921875 47.769531 15.179688 46.855469 15.210938 C 45.890625 15.234375 44.761719 15.230469 44.015625 14.523438 C 43.738281 14.222656 43.660156 13.886719 43.671875 13.488281 C 43.679688 13.363281 43.699219 13.253906 43.753906 13.136719 C 43.761719 13.117188 43.769531 13.09375 43.78125 13.074219 C 43.996094 12.644531 44.386719 12.410156 44.785156 12.175781 C 44.765625 12.167969 44.746094 12.160156 44.730469 12.152344 C 44.398438 11.996094 44.222656 11.808594 44.089844 11.476562 C 43.988281 11.136719 44.070312 10.757812 44.222656 10.453125 C 44.421875 10.109375 44.695312 9.824219 44.976562 9.550781 C 44.960938 9.542969 44.945312 9.53125 44.925781 9.523438 C 44.757812 9.417969 44.613281 9.304688 44.472656 9.167969 C 44.457031 9.152344 44.441406 9.136719 44.425781 9.121094 C 44.214844 8.902344 44.085938 8.597656 44.015625 8.300781 C 44.011719 8.28125 44.003906 8.257812 44 8.238281 C 43.882812 7.675781 43.964844 7.042969 44.277344 6.558594 C 44.621094 6.070312 45.09375 5.773438 45.671875 5.628906 C 45.6875 5.625 45.703125 5.621094 45.71875 5.617188 C 46.25 5.492188 46.917969 5.496094 47.449219 5.628906 C 47.464844 5.632812 47.480469 5.636719 47.496094 5.640625 C 47.6875 5.691406 47.867188 5.761719 48.046875 5.84375 C 48.0625 5.851562 48.078125 5.859375 48.09375 5.867188 C 48.164062 5.902344 48.226562 5.933594 48.289062 5.980469 C 48.390625 6.066406 48.390625 6.066406 48.515625 6.082031 C 48.582031 6.0625 48.644531 6.035156 48.707031 6.003906 C 48.730469 5.996094 48.753906 5.984375 48.78125 5.976562 C 48.855469 5.941406 48.929688 5.910156 49.003906 5.875 C 49.054688 5.851562 49.101562 5.832031 49.152344 5.808594 C 49.320312 5.738281 49.488281 5.664062 49.652344 5.585938 C 49.679688 5.574219 49.703125 5.566406 49.730469 5.554688 C 49.75 5.542969 49.769531 5.535156 49.789062 5.523438 C 49.867188 5.503906 49.917969 5.515625 49.992188 5.535156 Z M 45.835938 6.507812 C 45.472656 6.984375 45.421875 7.597656 45.492188 8.175781 C 45.550781 8.542969 45.6875 8.890625 45.980469 9.132812 C 46.207031 9.285156 46.46875 9.3125 46.734375 9.277344 C 47.015625 9.21875 47.210938 9.089844 47.375 8.855469 C 47.683594 8.375 47.742188 7.746094 47.640625 7.191406 C 47.5625 6.859375 47.402344 6.507812 47.117188 6.308594 C 46.703125 6.074219 46.152344 6.148438 45.835938 6.507812 Z M 45.238281 12.367188 C 44.957031 12.734375 44.867188 13.113281 44.902344 13.570312 C 44.957031 13.84375 45.09375 14.058594 45.316406 14.226562 C 45.613281 14.417969 46.015625 14.496094 46.367188 14.507812 C 46.394531 14.507812 46.394531 14.507812 46.417969 14.507812 C 47.132812 14.527344 47.90625 14.457031 48.453125 13.945312 C 48.652344 13.738281 48.710938 13.515625 48.703125 13.230469 C 48.683594 12.992188 48.570312 12.800781 48.394531 12.644531 C 48.113281 12.441406 47.726562 12.449219 47.398438 12.449219 C 47.355469 12.449219 47.3125 12.449219 47.269531 12.449219 C 47.15625 12.449219 47.046875 12.449219 46.933594 12.449219 C 46.753906 12.449219 46.574219 12.445312 46.394531 12.445312 C 46.332031 12.445312 46.269531 12.445312 46.210938 12.445312 C 45.882812 12.445312 45.5625 12.414062 45.238281 12.367188 Z M 45.238281 12.367188 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 53.039062 2.382812 C 53.0625 2.390625 53.0625 2.390625 53.085938 2.398438 C 53.140625 2.429688 53.171875 2.453125 53.207031 2.503906 C 53.230469 2.617188 53.21875 2.730469 53.214844 2.84375 C 53.210938 2.878906 53.210938 2.914062 53.210938 2.953125 C 53.207031 3.027344 53.203125 3.105469 53.199219 3.183594 C 53.191406 3.371094 53.183594 3.558594 53.179688 3.746094 C 53.175781 3.792969 53.175781 3.835938 53.175781 3.882812 C 53.15625 4.441406 53.15625 5 53.15625 5.5625 C 53.15625 5.640625 53.15625 5.71875 53.15625 5.792969 C 53.15625 6.085938 53.160156 6.375 53.160156 6.664062 C 53.179688 6.644531 53.195312 6.625 53.214844 6.605469 C 53.238281 6.578125 53.261719 6.550781 53.285156 6.523438 C 53.296875 6.511719 53.3125 6.5 53.324219 6.484375 C 53.78125 5.984375 54.445312 5.601562 55.128906 5.550781 C 55.640625 5.535156 56.128906 5.578125 56.527344 5.929688 C 56.566406 5.964844 56.601562 6 56.640625 6.039062 C 56.664062 6.0625 56.664062 6.0625 56.691406 6.089844 C 57.246094 6.660156 57.203125 7.570312 57.203125 8.304688 C 57.203125 8.414062 57.203125 8.523438 57.207031 8.632812 C 57.207031 8.839844 57.207031 9.042969 57.207031 9.25 C 57.207031 9.484375 57.210938 9.722656 57.210938 9.957031 C 57.210938 10.4375 57.214844 10.921875 57.214844 11.40625 C 57.246094 11.410156 57.246094 11.410156 57.28125 11.414062 C 57.308594 11.417969 57.335938 11.421875 57.363281 11.425781 C 57.40625 11.433594 57.40625 11.433594 57.445312 11.441406 C 57.558594 11.457031 57.671875 11.480469 57.785156 11.503906 C 57.808594 11.507812 57.828125 11.511719 57.851562 11.515625 C 57.878906 11.519531 57.878906 11.519531 57.910156 11.527344 C 57.929688 11.53125 57.949219 11.535156 57.964844 11.539062 C 58.007812 11.550781 58.007812 11.550781 58.03125 11.574219 C 58.035156 11.613281 58.035156 11.65625 58.035156 11.695312 C 58.035156 11.71875 58.035156 11.746094 58.035156 11.769531 C 58.035156 11.796875 58.035156 11.824219 58.035156 11.851562 C 58.035156 11.875 58.035156 11.902344 58.035156 11.929688 C 58.035156 11.964844 58.035156 11.964844 58.035156 12.003906 C 58.035156 12.027344 58.035156 12.050781 58.035156 12.074219 C 58.03125 12.125 58.03125 12.125 58.007812 12.148438 C 57.964844 12.152344 57.921875 12.152344 57.882812 12.152344 C 57.839844 12.152344 57.839844 12.152344 57.796875 12.152344 C 57.769531 12.152344 57.738281 12.152344 57.707031 12.152344 C 57.675781 12.152344 57.640625 12.152344 57.609375 12.152344 C 57.523438 12.152344 57.433594 12.152344 57.347656 12.152344 C 57.257812 12.152344 57.164062 12.152344 57.074219 12.152344 C 56.917969 12.152344 56.765625 12.152344 56.613281 12.152344 C 56.433594 12.152344 56.257812 12.152344 56.082031 12.152344 C 55.929688 12.152344 55.777344 12.152344 55.625 12.152344 C 55.53125 12.152344 55.441406 12.152344 55.351562 12.152344 C 55.265625 12.152344 55.179688 12.152344 55.09375 12.152344 C 55.046875 12.152344 55 12.152344 54.953125 12.152344 C 54.925781 12.152344 54.898438 12.152344 54.871094 12.152344 C 54.847656 12.152344 54.824219 12.152344 54.796875 12.152344 C 54.742188 12.148438 54.742188 12.148438 54.71875 12.125 C 54.71875 12.085938 54.71875 12.042969 54.71875 12.003906 C 54.71875 11.976562 54.71875 11.953125 54.71875 11.925781 C 54.71875 11.902344 54.71875 11.875 54.71875 11.847656 C 54.71875 11.820312 54.71875 11.796875 54.71875 11.769531 C 54.71875 11.703125 54.71875 11.636719 54.71875 11.574219 C 54.8125 11.53125 54.902344 11.507812 55.003906 11.488281 C 55.03125 11.480469 55.0625 11.476562 55.09375 11.46875 C 55.113281 11.464844 55.128906 11.460938 55.144531 11.460938 C 55.191406 11.449219 55.242188 11.441406 55.289062 11.429688 C 55.527344 11.378906 55.527344 11.378906 55.585938 11.378906 C 55.582031 10.90625 55.582031 10.433594 55.578125 9.960938 C 55.578125 9.742188 55.578125 9.523438 55.574219 9.304688 C 55.574219 9.109375 55.574219 8.917969 55.574219 8.726562 C 55.574219 8.625 55.570312 8.527344 55.570312 8.425781 C 55.570312 8.328125 55.570312 8.234375 55.570312 8.136719 C 55.570312 8.101562 55.570312 8.066406 55.570312 8.03125 C 55.570312 7.664062 55.554688 7.199219 55.289062 6.917969 C 55.054688 6.722656 54.742188 6.746094 54.457031 6.761719 C 54.101562 6.800781 53.738281 7.007812 53.464844 7.234375 C 53.425781 7.265625 53.425781 7.265625 53.371094 7.300781 C 53.273438 7.371094 53.214844 7.421875 53.1875 7.539062 C 53.179688 7.640625 53.179688 7.742188 53.183594 7.84375 C 53.183594 7.882812 53.183594 7.921875 53.183594 7.960938 C 53.183594 8.066406 53.183594 8.167969 53.1875 8.273438 C 53.1875 8.386719 53.1875 8.496094 53.1875 8.605469 C 53.1875 8.8125 53.191406 9.023438 53.191406 9.230469 C 53.195312 9.46875 53.195312 9.703125 53.195312 9.941406 C 53.199219 10.429688 53.203125 10.917969 53.207031 11.40625 C 53.238281 11.410156 53.238281 11.410156 53.265625 11.414062 C 53.351562 11.429688 53.4375 11.445312 53.523438 11.464844 C 53.554688 11.46875 53.585938 11.472656 53.613281 11.480469 C 53.644531 11.484375 53.671875 11.492188 53.703125 11.496094 C 53.730469 11.5 53.753906 11.507812 53.78125 11.511719 C 53.847656 11.523438 53.910156 11.535156 53.976562 11.550781 C 53.976562 11.746094 53.976562 11.945312 53.976562 12.148438 C 52.890625 12.148438 51.804688 12.148438 50.6875 12.148438 C 50.6875 11.953125 50.6875 11.753906 50.6875 11.550781 C 50.964844 11.492188 51.242188 11.4375 51.527344 11.378906 C 51.542969 11.160156 51.554688 10.945312 51.554688 10.722656 C 51.554688 10.691406 51.554688 10.660156 51.554688 10.628906 C 51.554688 10.546875 51.558594 10.464844 51.558594 10.378906 C 51.558594 10.289062 51.558594 10.199219 51.558594 10.109375 C 51.558594 9.953125 51.558594 9.796875 51.558594 9.640625 C 51.558594 9.414062 51.558594 9.1875 51.5625 8.960938 C 51.5625 8.59375 51.5625 8.230469 51.5625 7.863281 C 51.566406 7.507812 51.566406 7.152344 51.566406 6.792969 C 51.566406 6.773438 51.566406 6.75 51.566406 6.726562 C 51.566406 6.617188 51.566406 6.507812 51.566406 6.398438 C 51.570312 5.484375 51.574219 4.570312 51.574219 3.65625 C 51.554688 3.65625 51.535156 3.652344 51.515625 3.652344 C 51.476562 3.648438 51.476562 3.648438 51.4375 3.644531 C 51.414062 3.644531 51.386719 3.640625 51.359375 3.640625 C 51.277344 3.632812 51.195312 3.621094 51.113281 3.609375 C 51.082031 3.605469 51.054688 3.601562 51.023438 3.597656 C 50.996094 3.59375 50.964844 3.589844 50.933594 3.582031 C 50.902344 3.578125 50.871094 3.574219 50.839844 3.570312 C 50.765625 3.558594 50.691406 3.546875 50.617188 3.535156 C 50.617188 3.347656 50.617188 3.15625 50.617188 2.960938 C 50.910156 2.875 51.207031 2.796875 51.5 2.722656 C 51.523438 2.714844 51.542969 2.710938 51.5625 2.707031 C 51.671875 2.679688 51.777344 2.652344 51.886719 2.625 C 51.972656 2.601562 52.0625 2.578125 52.152344 2.554688 C 52.257812 2.527344 52.367188 2.5 52.472656 2.472656 C 52.515625 2.460938 52.554688 2.453125 52.597656 2.441406 C 52.652344 2.425781 52.710938 2.410156 52.765625 2.398438 C 52.78125 2.394531 52.800781 2.386719 52.816406 2.382812 C 52.898438 2.363281 52.960938 2.351562 53.039062 2.382812 Z M 53.039062 2.382812 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 99.691406 6.011719 C 100.109375 6.40625 100.234375 7.003906 100.273438 7.554688 C 100.277344 7.667969 100.277344 7.785156 100.277344 7.898438 C 100.277344 7.933594 100.277344 7.964844 100.277344 8 C 100.277344 8.074219 100.277344 8.144531 100.277344 8.21875 C 100.277344 8.332031 100.277344 8.445312 100.277344 8.558594 C 100.28125 8.886719 100.28125 9.210938 100.28125 9.535156 C 100.28125 9.714844 100.28125 9.894531 100.285156 10.074219 C 100.285156 10.171875 100.285156 10.265625 100.285156 10.359375 C 100.285156 10.449219 100.285156 10.539062 100.285156 10.628906 C 100.285156 10.675781 100.285156 10.726562 100.285156 10.773438 C 100.289062 10.964844 100.292969 11.167969 100.417969 11.320312 C 100.53125 11.378906 100.636719 11.398438 100.757812 11.367188 C 100.898438 11.308594 101.003906 11.21875 101.113281 11.117188 C 101.226562 11.199219 101.339844 11.289062 101.449219 11.378906 C 101.394531 11.527344 101.300781 11.640625 101.207031 11.765625 C 101.179688 11.804688 101.179688 11.804688 101.152344 11.84375 C 100.859375 12.152344 100.476562 12.265625 100.058594 12.277344 C 99.699219 12.269531 99.332031 12.164062 99.066406 11.910156 C 98.933594 11.757812 98.761719 11.519531 98.761719 11.308594 C 98.582031 11.449219 98.582031 11.449219 98.417969 11.605469 C 98.289062 11.738281 98.140625 11.847656 97.992188 11.957031 C 97.96875 11.972656 97.949219 11.992188 97.925781 12.007812 C 97.488281 12.3125 96.855469 12.339844 96.34375 12.25 C 95.917969 12.15625 95.527344 11.929688 95.28125 11.558594 C 95.035156 11.136719 94.964844 10.617188 95.082031 10.140625 C 95.289062 9.527344 95.746094 9.175781 96.300781 8.894531 C 96.941406 8.582031 97.644531 8.375 98.328125 8.179688 C 98.34375 8.175781 98.359375 8.171875 98.375 8.167969 C 98.472656 8.140625 98.566406 8.113281 98.664062 8.085938 C 98.695312 7.195312 98.695312 7.195312 98.328125 6.425781 C 98.121094 6.230469 97.828125 6.203125 97.558594 6.203125 C 97.53125 6.203125 97.53125 6.203125 97.503906 6.203125 C 97.339844 6.207031 97.171875 6.21875 97.007812 6.230469 C 97.003906 6.257812 97.003906 6.289062 97 6.316406 C 96.984375 6.46875 96.957031 6.617188 96.925781 6.765625 C 96.917969 6.816406 96.910156 6.863281 96.902344 6.910156 C 96.832031 7.273438 96.738281 7.585938 96.425781 7.808594 C 96.191406 7.933594 95.945312 7.933594 95.6875 7.867188 C 95.515625 7.808594 95.40625 7.707031 95.320312 7.546875 C 95.234375 7.347656 95.238281 7.183594 95.308594 6.980469 C 95.316406 6.957031 95.316406 6.957031 95.324219 6.929688 C 95.421875 6.644531 95.574219 6.441406 95.785156 6.230469 C 95.800781 6.214844 95.816406 6.195312 95.835938 6.179688 C 96.734375 5.308594 98.742188 5.21875 99.691406 6.011719 Z M 98.394531 8.742188 C 98.292969 8.777344 98.1875 8.8125 98.082031 8.847656 C 97.574219 9.007812 97.011719 9.230469 96.746094 9.722656 C 96.582031 10.042969 96.554688 10.355469 96.648438 10.703125 C 96.71875 10.914062 96.816406 11.042969 97.011719 11.152344 C 97.296875 11.292969 97.609375 11.304688 97.910156 11.199219 C 98.058594 11.132812 98.207031 11.050781 98.34375 10.960938 C 98.398438 10.921875 98.398438 10.921875 98.46875 10.890625 C 98.558594 10.839844 98.644531 10.789062 98.679688 10.683594 C 98.703125 10.542969 98.695312 10.402344 98.691406 10.257812 C 98.6875 10.214844 98.6875 10.167969 98.6875 10.121094 C 98.6875 10 98.683594 9.878906 98.683594 9.757812 C 98.679688 9.636719 98.679688 9.511719 98.675781 9.386719 C 98.675781 9.144531 98.667969 8.902344 98.664062 8.660156 C 98.578125 8.660156 98.476562 8.714844 98.394531 8.742188 Z M 98.394531 8.742188 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 38.035156 6.242188 C 38.207031 6.40625 38.332031 6.578125 38.449219 6.785156 C 38.460938 6.808594 38.460938 6.808594 38.472656 6.832031 C 38.835938 7.472656 38.875 8.257812 38.761719 8.972656 C 38.734375 9 38.734375 9 38.671875 9 C 38.625 9 38.625 9 38.578125 9 C 38.5625 9 38.546875 9 38.53125 9 C 38.472656 9 38.417969 9 38.363281 9 C 38.324219 9 38.285156 9 38.242188 9 C 38.136719 9 38.027344 9 37.917969 9 C 37.804688 9 37.695312 9 37.582031 9 C 37.367188 9 37.152344 9 36.9375 9 C 36.695312 9 36.453125 9 36.207031 9 C 35.707031 9 35.207031 9 34.703125 9 C 34.714844 9.089844 34.726562 9.183594 34.738281 9.273438 C 34.742188 9.300781 34.742188 9.328125 34.746094 9.351562 C 34.8125 9.898438 35.007812 10.441406 35.4375 10.808594 C 35.933594 11.1875 36.476562 11.269531 37.089844 11.203125 C 37.539062 11.128906 37.90625 10.847656 38.222656 10.535156 C 38.347656 10.417969 38.347656 10.417969 38.425781 10.417969 C 38.464844 10.445312 38.464844 10.445312 38.503906 10.488281 C 38.589844 10.585938 38.683594 10.671875 38.785156 10.753906 C 38.679688 11.046875 38.46875 11.28125 38.257812 11.5 C 38.242188 11.519531 38.222656 11.535156 38.207031 11.554688 C 37.792969 12 37.171875 12.246094 36.574219 12.320312 C 36.554688 12.320312 36.535156 12.324219 36.515625 12.328125 C 35.640625 12.425781 34.773438 12.210938 34.074219 11.671875 C 33.421875 11.125 33.078125 10.363281 32.976562 9.527344 C 32.972656 9.496094 32.972656 9.496094 32.96875 9.460938 C 32.871094 8.5 33.074219 7.515625 33.675781 6.746094 C 33.707031 6.710938 33.738281 6.675781 33.769531 6.640625 C 33.78125 6.621094 33.796875 6.605469 33.8125 6.585938 C 34.316406 5.988281 35.136719 5.640625 35.902344 5.566406 C 36.699219 5.511719 37.429688 5.699219 38.035156 6.242188 Z M 35.226562 6.652344 C 34.949219 7.007812 34.820312 7.386719 34.746094 7.824219 C 34.742188 7.851562 34.738281 7.875 34.734375 7.898438 C 34.730469 7.921875 34.726562 7.949219 34.722656 7.972656 C 34.71875 7.992188 34.714844 8.015625 34.710938 8.035156 C 34.703125 8.097656 34.703125 8.15625 34.703125 8.222656 C 34.703125 8.242188 34.703125 8.261719 34.703125 8.28125 C 34.703125 8.292969 34.703125 8.308594 34.703125 8.324219 C 34.972656 8.328125 35.242188 8.328125 35.507812 8.328125 C 35.632812 8.328125 35.757812 8.328125 35.882812 8.332031 C 36.003906 8.332031 36.125 8.332031 36.246094 8.332031 C 36.289062 8.332031 36.335938 8.332031 36.382812 8.332031 C 36.445312 8.332031 36.511719 8.332031 36.574219 8.332031 C 36.59375 8.332031 36.613281 8.332031 36.632812 8.332031 C 36.800781 8.332031 36.964844 8.304688 37.085938 8.183594 C 37.273438 7.9375 37.277344 7.609375 37.246094 7.3125 C 37.195312 6.96875 37.015625 6.636719 36.730469 6.425781 C 36.226562 6.113281 35.617188 6.195312 35.226562 6.652344 Z M 35.226562 6.652344 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 112.726562 6.085938 C 112.90625 6.242188 113.058594 6.414062 113.183594 6.617188 C 113.199219 6.636719 113.210938 6.65625 113.226562 6.679688 C 113.628906 7.320312 113.699219 8.167969 113.566406 8.902344 C 113.523438 8.945312 113.449219 8.929688 113.386719 8.929688 C 113.371094 8.929688 113.355469 8.929688 113.339844 8.929688 C 113.28125 8.929688 113.226562 8.929688 113.171875 8.929688 C 113.132812 8.929688 113.089844 8.933594 113.050781 8.933594 C 112.945312 8.933594 112.835938 8.933594 112.726562 8.933594 C 112.613281 8.933594 112.5 8.933594 112.386719 8.933594 C 112.175781 8.9375 111.960938 8.9375 111.746094 8.9375 C 111.503906 8.941406 111.257812 8.941406 111.015625 8.941406 C 110.515625 8.945312 110.011719 8.949219 109.511719 8.949219 C 109.519531 9.023438 109.527344 9.097656 109.535156 9.171875 C 109.535156 9.191406 109.539062 9.210938 109.539062 9.230469 C 109.554688 9.378906 109.578125 9.523438 109.613281 9.667969 C 109.621094 9.6875 109.625 9.710938 109.628906 9.730469 C 109.703125 10.011719 109.808594 10.261719 109.992188 10.488281 C 110.003906 10.507812 110.019531 10.527344 110.035156 10.542969 C 110.320312 10.898438 110.765625 11.117188 111.214844 11.164062 C 111.839844 11.203125 112.339844 11.078125 112.820312 10.671875 C 112.9375 10.570312 113.050781 10.457031 113.160156 10.347656 C 113.230469 10.378906 113.28125 10.414062 113.339844 10.46875 C 113.355469 10.480469 113.367188 10.496094 113.382812 10.507812 C 113.398438 10.523438 113.414062 10.539062 113.429688 10.554688 C 113.445312 10.566406 113.460938 10.582031 113.476562 10.597656 C 113.515625 10.632812 113.554688 10.671875 113.59375 10.707031 C 113.324219 11.316406 112.769531 11.816406 112.15625 12.066406 C 112.054688 12.105469 111.953125 12.136719 111.847656 12.171875 C 111.832031 12.175781 111.816406 12.179688 111.800781 12.183594 C 111.507812 12.265625 111.214844 12.28125 110.914062 12.28125 C 110.898438 12.28125 110.878906 12.28125 110.859375 12.28125 C 110.554688 12.277344 110.261719 12.257812 109.96875 12.175781 C 109.941406 12.167969 109.941406 12.167969 109.914062 12.160156 C 109.203125 11.953125 108.628906 11.503906 108.238281 10.875 C 108.230469 10.859375 108.222656 10.847656 108.210938 10.832031 C 107.699219 9.980469 107.648438 8.855469 107.878906 7.90625 C 108.074219 7.136719 108.570312 6.417969 109.253906 6 C 110.304688 5.378906 111.75 5.261719 112.726562 6.085938 Z M 110.105469 6.496094 C 109.710938 6.9375 109.507812 7.546875 109.511719 8.136719 C 109.511719 8.160156 109.511719 8.179688 109.511719 8.203125 C 109.511719 8.21875 109.511719 8.234375 109.511719 8.253906 C 109.78125 8.253906 110.050781 8.253906 110.316406 8.257812 C 110.441406 8.257812 110.566406 8.257812 110.691406 8.257812 C 110.8125 8.257812 110.933594 8.257812 111.054688 8.257812 C 111.097656 8.257812 111.144531 8.261719 111.191406 8.261719 C 111.253906 8.261719 111.320312 8.261719 111.382812 8.261719 C 111.402344 8.261719 111.421875 8.261719 111.441406 8.261719 C 111.59375 8.261719 111.746094 8.234375 111.871094 8.140625 C 112.082031 7.886719 112.078125 7.605469 112.054688 7.289062 C 112.011719 6.949219 111.867188 6.6875 111.625 6.449219 C 111.609375 6.433594 111.59375 6.417969 111.582031 6.40625 C 111.164062 6.015625 110.496094 6.121094 110.105469 6.496094 Z M 110.105469 6.496094 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 119.207031 6.039062 C 119.210938 6.308594 119.203125 6.578125 119.1875 6.847656 C 119.183594 6.910156 119.183594 6.972656 119.179688 7.035156 C 119.175781 7.078125 119.175781 7.117188 119.171875 7.160156 C 119.171875 7.175781 119.171875 7.195312 119.171875 7.214844 C 119.164062 7.308594 119.152344 7.390625 119.136719 7.484375 C 118.835938 7.484375 118.535156 7.484375 118.222656 7.484375 C 118.207031 7.40625 118.191406 7.328125 118.171875 7.246094 C 118.15625 7.171875 118.140625 7.097656 118.121094 7.023438 C 118.109375 6.96875 118.101562 6.917969 118.089844 6.867188 C 118.070312 6.792969 118.054688 6.714844 118.039062 6.640625 C 118.035156 6.617188 118.027344 6.59375 118.023438 6.570312 C 118.019531 6.550781 118.015625 6.527344 118.007812 6.503906 C 118.003906 6.484375 118 6.464844 117.996094 6.445312 C 117.984375 6.398438 117.984375 6.398438 117.960938 6.351562 C 117.902344 6.332031 117.847656 6.316406 117.789062 6.300781 C 117.765625 6.296875 117.765625 6.296875 117.738281 6.289062 C 117.339844 6.1875 116.835938 6.167969 116.464844 6.375 C 116.296875 6.480469 116.203125 6.609375 116.128906 6.789062 C 116.082031 7.042969 116.105469 7.261719 116.234375 7.484375 C 116.496094 7.828125 117.082031 7.953125 117.46875 8.070312 C 118.183594 8.289062 118.960938 8.597656 119.359375 9.277344 C 119.578125 9.714844 119.621094 10.257812 119.496094 10.734375 C 119.316406 11.277344 118.957031 11.703125 118.449219 11.964844 C 117.460938 12.445312 116.246094 12.394531 115.222656 12.054688 C 115.007812 11.972656 114.804688 11.867188 114.601562 11.765625 C 114.570312 11.234375 114.574219 10.707031 114.574219 10.175781 C 114.886719 10.175781 115.195312 10.175781 115.511719 10.175781 C 115.539062 10.304688 115.539062 10.304688 115.5625 10.433594 C 115.582031 10.515625 115.597656 10.597656 115.613281 10.679688 C 115.625 10.734375 115.636719 10.792969 115.648438 10.847656 C 115.664062 10.929688 115.679688 11.011719 115.695312 11.09375 C 115.703125 11.121094 115.707031 11.144531 115.710938 11.171875 C 115.71875 11.195312 115.722656 11.21875 115.726562 11.242188 C 115.730469 11.261719 115.734375 11.285156 115.738281 11.304688 C 115.75 11.355469 115.75 11.355469 115.777344 11.40625 C 116.324219 11.617188 117.03125 11.667969 117.578125 11.4375 C 117.800781 11.332031 117.949219 11.207031 118.039062 10.972656 C 118.089844 10.761719 118.082031 10.527344 117.992188 10.328125 C 117.910156 10.191406 117.820312 10.105469 117.6875 10.023438 C 117.664062 10.003906 117.636719 9.988281 117.609375 9.972656 C 117.265625 9.769531 116.875 9.65625 116.496094 9.527344 C 116.066406 9.386719 115.683594 9.222656 115.320312 8.949219 C 115.296875 8.933594 115.273438 8.917969 115.25 8.898438 C 115.226562 8.875 115.226562 8.875 115.199219 8.855469 C 115.199219 8.839844 115.199219 8.824219 115.199219 8.804688 C 115.1875 8.800781 115.171875 8.796875 115.160156 8.789062 C 114.933594 8.65625 114.792969 8.285156 114.726562 8.046875 C 114.605469 7.507812 114.6875 6.964844 114.984375 6.496094 C 115.347656 5.957031 115.902344 5.671875 116.523438 5.542969 C 117.460938 5.367188 118.386719 5.574219 119.207031 6.039062 Z M 119.207031 6.039062 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 67.945312 6.109375 C 67.96875 6.136719 67.96875 6.136719 67.96875 6.1875 C 67.96875 6.210938 67.96875 6.234375 67.964844 6.257812 C 67.964844 6.285156 67.964844 6.3125 67.964844 6.339844 C 67.960938 6.367188 67.960938 6.398438 67.960938 6.425781 C 67.960938 6.457031 67.957031 6.484375 67.957031 6.515625 C 67.941406 6.863281 67.917969 7.207031 67.894531 7.554688 C 67.59375 7.554688 67.292969 7.554688 66.984375 7.554688 C 66.921875 7.3125 66.863281 7.070312 66.808594 6.828125 C 66.804688 6.796875 66.796875 6.769531 66.789062 6.742188 C 66.785156 6.714844 66.777344 6.6875 66.773438 6.660156 C 66.765625 6.632812 66.761719 6.609375 66.753906 6.585938 C 66.742188 6.519531 66.742188 6.519531 66.742188 6.425781 C 66.707031 6.414062 66.667969 6.402344 66.628906 6.390625 C 66.605469 6.386719 66.585938 6.378906 66.5625 6.371094 C 66.355469 6.320312 66.15625 6.296875 65.941406 6.296875 C 65.917969 6.296875 65.894531 6.296875 65.871094 6.296875 C 65.5625 6.300781 65.296875 6.351562 65.0625 6.566406 C 64.894531 6.742188 64.859375 6.90625 64.863281 7.148438 C 64.867188 7.285156 64.890625 7.390625 64.96875 7.507812 C 64.976562 7.519531 64.984375 7.535156 64.996094 7.550781 C 65.261719 7.921875 65.914062 8.0625 66.328125 8.179688 C 67.054688 8.390625 67.703125 8.726562 68.089844 9.40625 C 68.214844 9.648438 68.289062 9.90625 68.304688 10.175781 C 68.304688 10.199219 68.304688 10.21875 68.308594 10.242188 C 68.324219 10.753906 68.15625 11.1875 67.824219 11.574219 C 67.808594 11.589844 67.796875 11.605469 67.78125 11.621094 C 67.28125 12.164062 66.515625 12.347656 65.808594 12.390625 C 65.144531 12.414062 64.535156 12.34375 63.910156 12.117188 C 63.886719 12.109375 63.886719 12.109375 63.859375 12.097656 C 63.675781 12.03125 63.507812 11.929688 63.335938 11.835938 C 63.335938 11.632812 63.335938 11.429688 63.335938 11.226562 C 63.335938 11.132812 63.335938 11.039062 63.335938 10.945312 C 63.332031 10.851562 63.332031 10.761719 63.332031 10.671875 C 63.332031 10.636719 63.332031 10.601562 63.332031 10.566406 C 63.332031 10.515625 63.332031 10.46875 63.332031 10.421875 C 63.332031 10.390625 63.332031 10.363281 63.332031 10.335938 C 63.335938 10.273438 63.335938 10.273438 63.359375 10.25 C 63.421875 10.246094 63.484375 10.246094 63.550781 10.246094 C 63.570312 10.246094 63.585938 10.246094 63.605469 10.246094 C 63.648438 10.246094 63.6875 10.246094 63.726562 10.246094 C 63.789062 10.246094 63.851562 10.246094 63.914062 10.246094 C 63.953125 10.246094 63.992188 10.246094 64.03125 10.246094 C 64.050781 10.246094 64.066406 10.246094 64.085938 10.246094 C 64.21875 10.246094 64.21875 10.246094 64.273438 10.273438 C 64.285156 10.316406 64.285156 10.316406 64.296875 10.375 C 64.300781 10.394531 64.304688 10.414062 64.308594 10.4375 C 64.316406 10.460938 64.320312 10.484375 64.324219 10.507812 C 64.328125 10.53125 64.332031 10.554688 64.339844 10.578125 C 64.347656 10.628906 64.359375 10.679688 64.367188 10.730469 C 64.382812 10.808594 64.398438 10.882812 64.414062 10.960938 C 64.421875 11.007812 64.433594 11.058594 64.441406 11.105469 C 64.445312 11.128906 64.453125 11.152344 64.457031 11.175781 C 64.476562 11.285156 64.492188 11.386719 64.488281 11.5 C 64.53125 11.511719 64.53125 11.511719 64.578125 11.519531 C 64.691406 11.546875 64.804688 11.574219 64.921875 11.605469 C 65.117188 11.648438 65.308594 11.648438 65.507812 11.652344 C 65.539062 11.652344 65.570312 11.652344 65.601562 11.652344 C 65.964844 11.652344 66.320312 11.59375 66.605469 11.359375 C 66.761719 11.199219 66.820312 11.003906 66.828125 10.789062 C 66.820312 10.566406 66.761719 10.382812 66.601562 10.226562 C 66.214844 9.933594 65.765625 9.789062 65.3125 9.640625 C 64.621094 9.414062 63.949219 9.125 63.59375 8.445312 C 63.378906 8 63.375 7.464844 63.53125 6.996094 C 63.761719 6.410156 64.183594 6.027344 64.753906 5.773438 C 65.792969 5.351562 66.988281 5.59375 67.945312 6.109375 Z M 67.945312 6.109375 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 105.941406 5.769531 C 105.960938 5.777344 105.976562 5.785156 105.996094 5.792969 C 106.1875 5.867188 106.351562 5.964844 106.535156 6.0625 C 106.511719 6.539062 106.488281 7.015625 106.464844 7.507812 C 106.164062 7.507812 105.863281 7.507812 105.550781 7.507812 C 105.445312 7.101562 105.445312 7.101562 105.410156 6.941406 C 105.40625 6.925781 105.402344 6.910156 105.398438 6.890625 C 105.386719 6.839844 105.375 6.789062 105.367188 6.738281 C 105.359375 6.703125 105.351562 6.667969 105.34375 6.632812 C 105.324219 6.546875 105.304688 6.460938 105.289062 6.375 C 105.234375 6.359375 105.183594 6.34375 105.128906 6.328125 C 105.097656 6.320312 105.070312 6.3125 105.039062 6.304688 C 104.859375 6.253906 104.6875 6.25 104.503906 6.25 C 104.464844 6.25 104.464844 6.25 104.421875 6.25 C 104.136719 6.246094 103.90625 6.3125 103.664062 6.464844 C 103.507812 6.621094 103.417969 6.816406 103.414062 7.042969 C 103.425781 7.25 103.492188 7.433594 103.632812 7.585938 C 103.976562 7.886719 104.484375 8.003906 104.910156 8.132812 C 105.628906 8.351562 106.285156 8.667969 106.667969 9.355469 C 106.878906 9.800781 106.9375 10.371094 106.785156 10.84375 C 106.554688 11.417969 106.144531 11.8125 105.585938 12.070312 C 104.601562 12.488281 103.335938 12.402344 102.359375 12.007812 C 102.203125 11.9375 102.046875 11.859375 101.902344 11.765625 C 101.894531 11.699219 101.894531 11.699219 101.894531 11.617188 C 101.894531 11.585938 101.894531 11.554688 101.890625 11.523438 C 101.890625 11.488281 101.890625 11.453125 101.890625 11.417969 C 101.890625 11.382812 101.890625 11.347656 101.890625 11.3125 C 101.890625 11.222656 101.886719 11.128906 101.886719 11.039062 C 101.886719 10.925781 101.886719 10.816406 101.882812 10.707031 C 101.882812 10.539062 101.882812 10.371094 101.878906 10.203125 C 102.1875 10.203125 102.496094 10.203125 102.816406 10.203125 C 102.871094 10.363281 102.871094 10.363281 102.886719 10.449219 C 102.890625 10.46875 102.894531 10.488281 102.898438 10.507812 C 102.902344 10.527344 102.90625 10.546875 102.910156 10.566406 C 102.914062 10.585938 102.917969 10.609375 102.921875 10.628906 C 102.933594 10.671875 102.941406 10.71875 102.949219 10.761719 C 102.964844 10.828125 102.976562 10.894531 102.988281 10.960938 C 103 11.003906 103.007812 11.046875 103.015625 11.089844 C 103.019531 11.109375 103.023438 11.132812 103.027344 11.152344 C 103.046875 11.246094 103.0625 11.332031 103.054688 11.429688 C 103.699219 11.59375 104.421875 11.726562 105.03125 11.386719 C 105.21875 11.265625 105.316406 11.125 105.375 10.914062 C 105.402344 10.691406 105.378906 10.496094 105.273438 10.292969 C 104.921875 9.867188 104.363281 9.730469 103.859375 9.5625 C 103.1875 9.339844 102.511719 9.058594 102.167969 8.398438 C 101.949219 7.929688 101.9375 7.414062 102.097656 6.929688 C 102.101562 6.90625 102.109375 6.886719 102.117188 6.863281 C 102.269531 6.417969 102.628906 6.066406 103.03125 5.847656 C 103.054688 5.832031 103.078125 5.820312 103.101562 5.808594 C 103.382812 5.65625 103.699219 5.574219 104.015625 5.535156 C 104.035156 5.53125 104.054688 5.527344 104.074219 5.527344 C 104.714844 5.449219 105.34375 5.535156 105.941406 5.769531 Z M 105.941406 5.769531 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 59.953125 3.921875 C 60.316406 3.921875 60.679688 3.921875 61.054688 3.921875 C 61.058594 4.292969 61.054688 4.667969 61.046875 5.039062 C 61.042969 5.066406 61.042969 5.066406 61.042969 5.09375 C 61.042969 5.144531 61.042969 5.195312 61.039062 5.246094 C 61.039062 5.277344 61.039062 5.304688 61.035156 5.335938 C 61.03125 5.472656 61.019531 5.613281 61.007812 5.75 C 61.53125 5.75 62.054688 5.75 62.59375 5.75 C 62.59375 6.035156 62.59375 6.320312 62.59375 6.617188 C 62.0625 6.617188 61.53125 6.617188 60.984375 6.617188 C 60.984375 7.128906 60.988281 7.644531 60.988281 8.160156 C 60.992188 8.398438 60.992188 8.636719 60.992188 8.875 C 60.992188 9.082031 60.992188 9.292969 60.996094 9.5 C 60.996094 9.609375 60.996094 9.71875 60.996094 9.832031 C 60.996094 9.933594 60.996094 10.039062 60.996094 10.140625 C 60.996094 10.179688 60.996094 10.21875 60.996094 10.253906 C 60.992188 10.765625 60.992188 10.765625 61.199219 11.210938 C 61.34375 11.347656 61.507812 11.40625 61.703125 11.40625 C 61.941406 11.371094 62.144531 11.289062 62.355469 11.175781 C 62.457031 11.125 62.457031 11.125 62.519531 11.117188 C 62.558594 11.140625 62.558594 11.140625 62.597656 11.183594 C 62.613281 11.195312 62.625 11.210938 62.640625 11.226562 C 62.652344 11.238281 62.667969 11.253906 62.683594 11.269531 C 62.695312 11.285156 62.710938 11.300781 62.726562 11.316406 C 62.761719 11.351562 62.796875 11.390625 62.832031 11.429688 C 62.785156 11.5625 62.707031 11.65625 62.617188 11.765625 C 62.605469 11.78125 62.59375 11.792969 62.578125 11.808594 C 62.375 12.03125 62.085938 12.183594 61.800781 12.269531 C 61.777344 12.277344 61.75 12.285156 61.726562 12.292969 C 61.511719 12.347656 61.296875 12.351562 61.078125 12.351562 C 61.046875 12.351562 61.019531 12.351562 60.988281 12.351562 C 60.523438 12.351562 60.085938 12.210938 59.730469 11.898438 C 59.542969 11.699219 59.425781 11.40625 59.375 11.140625 C 59.371094 11.117188 59.367188 11.097656 59.363281 11.074219 C 59.351562 10.988281 59.347656 10.902344 59.347656 10.8125 C 59.347656 10.792969 59.347656 10.777344 59.347656 10.757812 C 59.347656 10.695312 59.347656 10.636719 59.347656 10.578125 C 59.347656 10.535156 59.347656 10.492188 59.347656 10.449219 C 59.347656 10.332031 59.347656 10.214844 59.347656 10.097656 C 59.351562 9.972656 59.351562 9.851562 59.351562 9.730469 C 59.351562 9.496094 59.351562 9.265625 59.351562 9.035156 C 59.351562 8.769531 59.351562 8.507812 59.351562 8.242188 C 59.351562 7.703125 59.351562 7.160156 59.351562 6.617188 C 59.035156 6.617188 58.71875 6.617188 58.390625 6.617188 C 58.390625 6.371094 58.390625 6.125 58.390625 5.871094 C 58.914062 5.800781 58.914062 5.800781 59.449219 5.726562 C 59.480469 5.601562 59.515625 5.476562 59.550781 5.351562 C 59.574219 5.269531 59.59375 5.191406 59.617188 5.113281 C 59.652344 4.988281 59.6875 4.863281 59.722656 4.738281 C 59.75 4.640625 59.777344 4.539062 59.804688 4.4375 C 59.816406 4.398438 59.824219 4.359375 59.835938 4.324219 C 59.851562 4.269531 59.867188 4.214844 59.882812 4.160156 C 59.886719 4.144531 59.890625 4.128906 59.894531 4.113281 C 59.914062 4.046875 59.929688 3.984375 59.953125 3.921875 Z M 59.953125 3.921875 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 93.351562 5.554688 C 93.40625 5.59375 93.429688 5.617188 93.445312 5.679688 C 93.449219 5.75 93.445312 5.8125 93.441406 5.878906 C 93.441406 5.90625 93.441406 5.929688 93.441406 5.957031 C 93.4375 6.015625 93.4375 6.070312 93.433594 6.128906 C 93.429688 6.273438 93.425781 6.417969 93.421875 6.5625 C 93.417969 6.617188 93.417969 6.671875 93.417969 6.726562 C 93.402344 7.175781 93.40625 7.625 93.40625 8.074219 C 93.40625 8.195312 93.40625 8.3125 93.40625 8.429688 C 93.40625 8.644531 93.40625 8.859375 93.40625 9.074219 C 93.40625 9.320312 93.40625 9.570312 93.40625 9.816406 C 93.40625 10.320312 93.40625 10.828125 93.40625 11.332031 C 93.425781 11.335938 93.449219 11.339844 93.46875 11.34375 C 93.542969 11.355469 93.613281 11.371094 93.6875 11.382812 C 93.734375 11.390625 93.785156 11.398438 93.832031 11.40625 C 93.859375 11.414062 93.890625 11.417969 93.921875 11.425781 C 93.949219 11.429688 93.976562 11.433594 94.003906 11.4375 C 94.070312 11.449219 94.136719 11.464844 94.199219 11.476562 C 94.199219 11.675781 94.199219 11.875 94.199219 12.078125 C 93.105469 12.078125 92.015625 12.078125 90.886719 12.078125 C 90.886719 11.878906 90.886719 11.679688 90.886719 11.476562 C 90.988281 11.457031 91.085938 11.433594 91.1875 11.414062 C 91.222656 11.40625 91.253906 11.402344 91.289062 11.394531 C 91.339844 11.382812 91.386719 11.375 91.4375 11.363281 C 91.480469 11.355469 91.480469 11.355469 91.527344 11.34375 C 91.601562 11.332031 91.675781 11.332031 91.753906 11.332031 C 91.753906 10.894531 91.753906 10.457031 91.753906 10.023438 C 91.753906 9.820312 91.753906 9.617188 91.753906 9.414062 C 91.753906 9.234375 91.753906 9.058594 91.753906 8.882812 C 91.753906 8.789062 91.753906 8.695312 91.753906 8.601562 C 91.753906 8.066406 91.746094 7.535156 91.726562 7 C 91.683594 6.996094 91.683594 6.996094 91.636719 6.988281 C 91.539062 6.976562 91.4375 6.964844 91.339844 6.953125 C 91.296875 6.945312 91.25 6.941406 91.207031 6.933594 C 91.144531 6.925781 91.082031 6.917969 91.019531 6.910156 C 90.988281 6.90625 90.988281 6.90625 90.957031 6.902344 C 90.820312 6.882812 90.820312 6.882812 90.792969 6.855469 C 90.789062 6.816406 90.789062 6.777344 90.789062 6.738281 C 90.789062 6.714844 90.789062 6.691406 90.789062 6.667969 C 90.789062 6.640625 90.789062 6.617188 90.789062 6.589844 C 90.789062 6.566406 90.789062 6.539062 90.789062 6.515625 C 90.792969 6.453125 90.792969 6.390625 90.792969 6.328125 C 90.96875 6.253906 91.148438 6.1875 91.328125 6.125 C 91.355469 6.117188 91.382812 6.105469 91.414062 6.097656 C 91.503906 6.066406 91.59375 6.03125 91.683594 6 C 91.808594 5.957031 91.929688 5.914062 92.054688 5.871094 C 92.070312 5.867188 92.085938 5.859375 92.101562 5.855469 C 92.285156 5.792969 92.46875 5.726562 92.652344 5.660156 C 92.667969 5.652344 92.6875 5.644531 92.703125 5.640625 C 92.78125 5.609375 92.859375 5.582031 92.9375 5.554688 C 92.976562 5.539062 92.976562 5.539062 93.019531 5.523438 C 93.050781 5.511719 93.050781 5.511719 93.082031 5.5 C 93.1875 5.476562 93.261719 5.503906 93.351562 5.554688 Z M 93.351562 5.554688 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 42.214844 5.652344 C 42.214844 7.542969 42.214844 9.433594 42.214844 11.378906 C 42.535156 11.441406 42.535156 11.441406 42.863281 11.5 C 42.917969 11.515625 42.976562 11.53125 43.03125 11.550781 C 43.03125 11.738281 43.03125 11.929688 43.03125 12.125 C 41.929688 12.125 40.832031 12.125 39.695312 12.125 C 39.695312 11.9375 39.695312 11.746094 39.695312 11.550781 C 39.875 11.5 40.054688 11.460938 40.234375 11.425781 C 40.265625 11.417969 40.265625 11.417969 40.296875 11.410156 C 40.316406 11.40625 40.335938 11.402344 40.355469 11.398438 C 40.375 11.394531 40.394531 11.390625 40.410156 11.386719 C 40.46875 11.378906 40.523438 11.378906 40.585938 11.378906 C 40.582031 10.886719 40.578125 10.390625 40.574219 9.898438 C 40.574219 9.667969 40.574219 9.4375 40.570312 9.207031 C 40.570312 9.007812 40.570312 8.808594 40.570312 8.605469 C 40.566406 8.5 40.566406 8.394531 40.566406 8.289062 C 40.566406 8.191406 40.566406 8.089844 40.566406 7.988281 C 40.566406 7.953125 40.566406 7.917969 40.566406 7.878906 C 40.5625 7.683594 40.558594 7.488281 40.550781 7.292969 C 40.546875 7.273438 40.546875 7.253906 40.546875 7.234375 C 40.542969 7.140625 40.542969 7.140625 40.511719 7.050781 C 40.445312 7.035156 40.378906 7.027344 40.308594 7.019531 C 40.289062 7.015625 40.269531 7.011719 40.25 7.011719 C 40.183594 7.003906 40.121094 6.996094 40.054688 6.988281 C 40.011719 6.980469 39.96875 6.976562 39.921875 6.96875 C 39.816406 6.957031 39.707031 6.941406 39.601562 6.929688 C 39.601562 6.746094 39.601562 6.5625 39.601562 6.375 C 39.964844 6.242188 40.328125 6.109375 40.695312 5.980469 C 40.777344 5.953125 40.859375 5.921875 40.945312 5.894531 C 41 5.875 41.054688 5.855469 41.109375 5.835938 C 41.246094 5.789062 41.386719 5.738281 41.523438 5.6875 C 41.550781 5.675781 41.578125 5.667969 41.605469 5.65625 C 41.660156 5.636719 41.710938 5.617188 41.761719 5.597656 C 41.785156 5.589844 41.808594 5.578125 41.835938 5.570312 C 41.863281 5.558594 41.863281 5.558594 41.894531 5.546875 C 42.027344 5.515625 42.09375 5.585938 42.214844 5.652344 Z M 42.214844 5.652344 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 8.640625 9.261719 C 8.972656 9.519531 9.191406 9.859375 9.277344 10.273438 C 9.328125 10.675781 9.265625 11.089844 9.019531 11.421875 C 8.734375 11.769531 8.371094 12.007812 7.917969 12.058594 C 7.476562 12.09375 7.078125 11.957031 6.742188 11.667969 C 6.71875 11.648438 6.71875 11.648438 6.695312 11.628906 C 6.421875 11.378906 6.261719 10.992188 6.234375 10.628906 C 6.226562 10.179688 6.355469 9.789062 6.664062 9.457031 C 7.191406 8.921875 8.019531 8.84375 8.640625 9.261719 Z M 8.640625 9.261719 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 2.855469 4.089844 C 2.941406 4.15625 3.019531 4.230469 3.097656 4.308594 C 3.113281 4.324219 3.128906 4.339844 3.148438 4.359375 C 3.414062 4.640625 3.542969 5.027344 3.539062 5.410156 C 3.519531 5.851562 3.332031 6.21875 3.015625 6.527344 C 2.707031 6.792969 2.304688 6.921875 1.898438 6.898438 C 1.578125 6.871094 1.308594 6.769531 1.054688 6.570312 C 1.03125 6.546875 1.03125 6.546875 1.003906 6.527344 C 0.699219 6.277344 0.527344 5.898438 0.484375 5.511719 C 0.453125 5.121094 0.558594 4.730469 0.804688 4.425781 C 1.003906 4.191406 1.226562 4.03125 1.511719 3.921875 C 1.53125 3.914062 1.550781 3.90625 1.570312 3.898438 C 1.988281 3.757812 2.496094 3.84375 2.855469 4.089844 Z M 2.855469 4.089844 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 2.960938 11.683594 C 3.269531 11.949219 3.492188 12.316406 3.53125 12.726562 C 3.558594 13.152344 3.449219 13.550781 3.171875 13.878906 C 2.875 14.203125 2.519531 14.375 2.082031 14.417969 C 1.671875 14.433594 1.28125 14.28125 0.972656 14.011719 C 0.660156 13.714844 0.488281 13.324219 0.476562 12.890625 C 0.480469 12.53125 0.59375 12.214844 0.816406 11.933594 C 0.828125 11.917969 0.839844 11.902344 0.851562 11.882812 C 1.078125 11.597656 1.433594 11.421875 1.785156 11.363281 C 2.207031 11.316406 2.628906 11.417969 2.960938 11.683594 Z M 2.960938 11.683594 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 14.449219 4.167969 C 14.507812 4.222656 14.5625 4.273438 14.617188 4.332031 C 14.628906 4.34375 14.640625 4.355469 14.65625 4.367188 C 14.914062 4.632812 15.015625 5.023438 15.03125 5.378906 C 15.019531 5.734375 14.902344 6.046875 14.6875 6.328125 C 14.675781 6.34375 14.664062 6.359375 14.652344 6.378906 C 14.410156 6.679688 14.042969 6.851562 13.664062 6.898438 C 13.242188 6.925781 12.84375 6.816406 12.523438 6.535156 C 12.484375 6.5 12.445312 6.460938 12.40625 6.425781 C 12.394531 6.410156 12.378906 6.394531 12.363281 6.378906 C 12.085938 6.089844 11.988281 5.707031 11.992188 5.316406 C 12.003906 4.914062 12.167969 4.53125 12.457031 4.25 C 13.023438 3.75 13.847656 3.714844 14.449219 4.167969 Z M 14.449219 4.167969 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 42.046875 2.648438 C 42.253906 2.816406 42.375 3.03125 42.40625 3.296875 C 42.433594 3.558594 42.351562 3.808594 42.191406 4.019531 C 42.007812 4.214844 41.785156 4.351562 41.507812 4.363281 C 41.46875 4.363281 41.429688 4.363281 41.390625 4.363281 C 41.371094 4.363281 41.351562 4.363281 41.332031 4.363281 C 41.058594 4.355469 40.832031 4.273438 40.625 4.089844 C 40.476562 3.933594 40.359375 3.734375 40.34375 3.511719 C 40.34375 3.496094 40.339844 3.480469 40.339844 3.460938 C 40.328125 3.230469 40.390625 2.992188 40.542969 2.8125 C 40.554688 2.796875 40.570312 2.78125 40.585938 2.765625 C 40.597656 2.75 40.613281 2.734375 40.632812 2.714844 C 41.019531 2.339844 41.621094 2.332031 42.046875 2.648438 Z M 42.046875 2.648438 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 93.210938 2.566406 C 93.453125 2.757812 93.570312 2.96875 93.609375 3.273438 C 93.621094 3.53125 93.550781 3.773438 93.378906 3.972656 C 93.367188 3.988281 93.351562 4.003906 93.335938 4.019531 C 93.316406 4.039062 93.316406 4.039062 93.296875 4.058594 C 93.066406 4.28125 92.78125 4.316406 92.476562 4.3125 C 92.355469 4.308594 92.25 4.285156 92.136719 4.234375 C 92.117188 4.226562 92.101562 4.21875 92.082031 4.210938 C 91.871094 4.105469 91.703125 3.9375 91.605469 3.722656 C 91.515625 3.449219 91.515625 3.171875 91.632812 2.90625 C 91.773438 2.652344 92 2.484375 92.277344 2.402344 C 92.605469 2.324219 92.933594 2.375 93.210938 2.566406 Z M 93.210938 2.566406 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 8.320312 5.960938 C 8.539062 6.117188 8.664062 6.320312 8.726562 6.582031 C 8.769531 6.839844 8.710938 7.089844 8.574219 7.3125 C 8.410156 7.535156 8.207031 7.65625 7.945312 7.722656 C 7.621094 7.753906 7.355469 7.6875 7.105469 7.484375 C 6.921875 7.3125 6.8125 7.078125 6.792969 6.832031 C 6.789062 6.535156 6.871094 6.28125 7.078125 6.0625 C 7.4375 5.738281 7.914062 5.710938 8.320312 5.960938 Z M 8.320312 5.960938 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.431373%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 14.09375 0.820312 C 14.289062 0.96875 14.421875 1.179688 14.472656 1.417969 C 14.5 1.714844 14.464844 1.980469 14.273438 2.214844 C 14.082031 2.421875 13.890625 2.558594 13.605469 2.582031 C 13.320312 2.585938 13.078125 2.535156 12.863281 2.332031 C 12.660156 2.128906 12.550781 1.910156 12.542969 1.621094 C 12.546875 1.332031 12.644531 1.117188 12.839844 0.910156 C 13.199219 0.574219 13.6875 0.5625 14.09375 0.820312 Z M 14.09375 0.820312 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 2.574219 0.808594 C 2.769531 0.972656 2.925781 1.164062 2.976562 1.417969 C 2.996094 1.71875 2.972656 1.976562 2.777344 2.214844 C 2.585938 2.421875 2.394531 2.558594 2.109375 2.582031 C 1.824219 2.585938 1.582031 2.53125 1.367188 2.332031 C 1.226562 2.195312 1.136719 2.066406 1.078125 1.875 C 1.074219 1.863281 1.070312 1.847656 1.066406 1.832031 C 1.015625 1.570312 1.054688 1.3125 1.195312 1.089844 C 1.515625 0.644531 2.101562 0.484375 2.574219 0.808594 Z M 2.574219 0.808594 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 2.550781 8.316406 C 2.582031 8.34375 2.609375 8.371094 2.640625 8.398438 C 2.65625 8.414062 2.671875 8.429688 2.691406 8.445312 C 2.878906 8.640625 2.960938 8.847656 2.964844 9.121094 C 2.960938 9.398438 2.882812 9.613281 2.6875 9.816406 C 2.5 9.996094 2.257812 10.109375 1.992188 10.105469 C 1.695312 10.085938 1.449219 9.972656 1.246094 9.753906 C 1.074219 9.535156 1.003906 9.277344 1.03125 9 C 1.089844 8.710938 1.214844 8.484375 1.453125 8.3125 C 1.789062 8.105469 2.222656 8.085938 2.550781 8.316406 Z M 2.550781 8.316406 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 14.058594 8.34375 C 14.269531 8.496094 14.425781 8.714844 14.472656 8.972656 C 14.496094 9.300781 14.441406 9.542969 14.238281 9.804688 C 14.148438 9.90625 14.042969 9.972656 13.921875 10.03125 C 13.894531 10.046875 13.894531 10.046875 13.867188 10.058594 C 13.660156 10.144531 13.386719 10.136719 13.175781 10.066406 C 12.929688 9.960938 12.714844 9.769531 12.613281 9.519531 C 12.601562 9.484375 12.585938 9.445312 12.574219 9.40625 C 12.570312 9.390625 12.566406 9.378906 12.5625 9.363281 C 12.511719 9.109375 12.550781 8.855469 12.679688 8.632812 C 12.824219 8.421875 13.003906 8.277344 13.246094 8.203125 C 13.261719 8.199219 13.277344 8.195312 13.292969 8.191406 C 13.570312 8.136719 13.820312 8.195312 14.058594 8.34375 Z M 14.058594 8.34375 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 8.375 13.523438 C 8.605469 13.730469 8.71875 13.984375 8.742188 14.289062 C 8.734375 14.554688 8.621094 14.789062 8.445312 14.984375 C 8.25 15.164062 7.996094 15.25 7.734375 15.253906 C 7.46875 15.242188 7.25 15.136719 7.0625 14.953125 C 6.863281 14.730469 6.789062 14.488281 6.792969 14.195312 C 6.832031 13.894531 6.964844 13.664062 7.199219 13.472656 C 7.582031 13.230469 8.015625 13.25 8.375 13.523438 Z M 8.375 13.523438 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 14.027344 12.066406 C 14.25 12.234375 14.421875 12.449219 14.472656 12.726562 C 14.492188 13.019531 14.464844 13.269531 14.273438 13.5 C 14.089844 13.699219 13.886719 13.84375 13.609375 13.863281 C 13.3125 13.867188 13.058594 13.800781 12.832031 13.589844 C 12.730469 13.480469 12.65625 13.371094 12.601562 13.234375 C 12.589844 13.207031 12.582031 13.183594 12.570312 13.15625 C 12.519531 12.886719 12.539062 12.625 12.679688 12.386719 C 12.984375 11.945312 13.558594 11.765625 14.027344 12.066406 Z M 14.027344 12.066406 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 8.269531 2.203125 C 8.492188 2.371094 8.652344 2.574219 8.703125 2.855469 C 8.738281 3.113281 8.695312 3.371094 8.535156 3.582031 C 8.355469 3.796875 8.136719 3.949219 7.851562 3.976562 C 7.539062 3.988281 7.289062 3.894531 7.054688 3.679688 C 6.851562 3.449219 6.796875 3.222656 6.808594 2.914062 C 6.824219 2.671875 6.929688 2.480469 7.105469 2.308594 C 7.445312 2.039062 7.886719 1.964844 8.269531 2.203125 Z M 8.269531 2.203125 "
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "WeaveIcon"
-}
diff --git a/app/components/base/icons/src/public/tracing/WeaveIcon.tsx b/app/components/base/icons/src/public/tracing/WeaveIcon.tsx
deleted file mode 100644
index fd66bd7..0000000
--- a/app/components/base/icons/src/public/tracing/WeaveIcon.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './WeaveIcon.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconBaseProps, IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseProps, 'data'>>((
-  props,
-  ref,
-) => <IconBase {...props} ref={ref} data={data as IconData} />)
-
-Icon.displayName = 'WeaveIcon'
-
-export default Icon
diff --git a/app/components/base/icons/src/public/tracing/WeaveIconBig.json b/app/components/base/icons/src/public/tracing/WeaveIconBig.json
deleted file mode 100644
index 5557e23..0000000
--- a/app/components/base/icons/src/public/tracing/WeaveIconBig.json
+++ /dev/null
@@ -1,279 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"xmlns": "http://www.w3.org/2000/svg",
-			"xmlns:xlink": "http://www.w3.org/1999/xlink",
-			"width": "124px",
-			"height": "16px",
-			"viewBox": "0 0 120 16",
-			"version": "1.1"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "surface1"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 20.847656 3.292969 C 20.875 3.292969 20.902344 3.292969 20.933594 3.292969 C 20.949219 3.292969 20.964844 3.292969 20.980469 3.292969 C 21.035156 3.292969 21.089844 3.292969 21.140625 3.292969 C 21.179688 3.292969 21.21875 3.292969 21.253906 3.292969 C 21.359375 3.292969 21.464844 3.292969 21.566406 3.292969 C 21.675781 3.292969 21.78125 3.292969 21.890625 3.292969 C 22.097656 3.292969 22.300781 3.292969 22.507812 3.292969 C 22.738281 3.292969 22.972656 3.292969 23.207031 3.296875 C 23.6875 3.296875 24.167969 3.296875 24.648438 3.296875 C 24.648438 3.519531 24.648438 3.742188 24.648438 3.96875 C 24.113281 4.042969 24.113281 4.042969 23.566406 4.113281 C 23.667969 4.496094 23.769531 4.882812 23.867188 5.265625 C 23.878906 5.308594 23.878906 5.308594 23.890625 5.351562 C 24.128906 6.269531 24.371094 7.183594 24.609375 8.097656 C 24.675781 8.339844 24.738281 8.582031 24.800781 8.824219 C 24.816406 8.878906 24.832031 8.933594 24.84375 8.992188 C 24.867188 9.078125 24.890625 9.167969 24.914062 9.257812 C 24.921875 9.289062 24.933594 9.320312 24.941406 9.355469 C 24.953125 9.398438 24.964844 9.441406 24.976562 9.484375 C 24.984375 9.523438 24.984375 9.523438 24.996094 9.558594 C 25.007812 9.625 25.007812 9.625 25.007812 9.71875 C 25.023438 9.71875 25.039062 9.71875 25.054688 9.71875 C 25.058594 9.707031 25.058594 9.695312 25.0625 9.679688 C 25.097656 9.492188 25.152344 9.3125 25.210938 9.128906 C 25.222656 9.097656 25.234375 9.0625 25.246094 9.027344 C 25.269531 8.953125 25.292969 8.882812 25.316406 8.808594 C 25.355469 8.691406 25.390625 8.574219 25.429688 8.457031 C 25.464844 8.339844 25.503906 8.21875 25.542969 8.097656 C 25.660156 7.738281 25.773438 7.375 25.890625 7.011719 C 25.902344 6.96875 25.917969 6.921875 25.933594 6.875 C 26.226562 5.945312 26.519531 5.019531 26.808594 4.089844 C 26.785156 4.089844 26.765625 4.089844 26.742188 4.085938 C 26.507812 4.074219 26.273438 4.046875 26.042969 4.015625 C 26.007812 4.011719 25.972656 4.007812 25.933594 4.003906 C 25.851562 3.992188 25.765625 3.980469 25.679688 3.96875 C 25.679688 3.746094 25.679688 3.523438 25.679688 3.296875 C 26.175781 3.296875 26.667969 3.296875 27.160156 3.296875 C 27.390625 3.292969 27.621094 3.292969 27.851562 3.292969 C 28.050781 3.292969 28.25 3.292969 28.449219 3.292969 C 28.554688 3.292969 28.660156 3.292969 28.765625 3.292969 C 28.867188 3.292969 28.964844 3.292969 29.066406 3.292969 C 29.101562 3.292969 29.140625 3.292969 29.175781 3.292969 C 29.226562 3.292969 29.273438 3.292969 29.324219 3.292969 C 29.367188 3.292969 29.367188 3.292969 29.410156 3.292969 C 29.472656 3.296875 29.472656 3.296875 29.496094 3.320312 C 29.5 3.367188 29.5 3.417969 29.5 3.464844 C 29.5 3.492188 29.5 3.515625 29.5 3.542969 C 29.496094 3.59375 29.496094 3.59375 29.496094 3.648438 C 29.496094 3.753906 29.496094 3.859375 29.496094 3.96875 C 29.09375 4.015625 28.6875 4.066406 28.273438 4.113281 C 28.679688 5.460938 28.679688 5.460938 29.089844 6.808594 C 29.105469 6.859375 29.121094 6.910156 29.136719 6.960938 C 29.234375 7.292969 29.335938 7.625 29.4375 7.960938 C 29.484375 8.113281 29.53125 8.265625 29.578125 8.417969 C 29.605469 8.507812 29.632812 8.597656 29.660156 8.691406 C 29.878906 9.40625 29.878906 9.40625 29.976562 9.746094 C 30.027344 9.664062 30.046875 9.601562 30.070312 9.507812 C 30.078125 9.484375 30.078125 9.484375 30.085938 9.457031 C 30.101562 9.402344 30.117188 9.34375 30.132812 9.289062 C 30.144531 9.25 30.152344 9.207031 30.164062 9.167969 C 30.1875 9.082031 30.214844 8.992188 30.238281 8.90625 C 30.292969 8.691406 30.351562 8.480469 30.410156 8.269531 C 30.433594 8.191406 30.453125 8.117188 30.472656 8.042969 C 30.621094 7.5 30.769531 6.960938 30.921875 6.421875 C 30.949219 6.324219 30.976562 6.226562 31 6.128906 C 31.066406 5.902344 31.128906 5.675781 31.191406 5.449219 C 31.230469 5.308594 31.269531 5.164062 31.308594 5.023438 C 31.335938 4.925781 31.363281 4.828125 31.390625 4.734375 C 31.402344 4.6875 31.414062 4.640625 31.429688 4.59375 C 31.445312 4.53125 31.464844 4.46875 31.480469 4.40625 C 31.488281 4.386719 31.492188 4.367188 31.496094 4.347656 C 31.515625 4.277344 31.535156 4.207031 31.558594 4.136719 C 31.210938 4.074219 30.855469 4.023438 30.503906 3.96875 C 30.503906 3.746094 30.503906 3.523438 30.503906 3.296875 C 30.878906 3.296875 31.253906 3.296875 31.628906 3.296875 C 31.804688 3.292969 31.976562 3.292969 32.152344 3.292969 C 32.304688 3.292969 32.457031 3.292969 32.605469 3.292969 C 32.6875 3.292969 32.769531 3.292969 32.847656 3.292969 C 32.9375 3.292969 33.027344 3.292969 33.117188 3.292969 C 33.144531 3.292969 33.171875 3.292969 33.199219 3.292969 C 33.222656 3.292969 33.246094 3.292969 33.273438 3.292969 C 33.304688 3.292969 33.304688 3.292969 33.335938 3.292969 C 33.382812 3.296875 33.382812 3.296875 33.40625 3.320312 C 33.410156 3.367188 33.410156 3.414062 33.410156 3.460938 C 33.410156 3.488281 33.410156 3.515625 33.410156 3.542969 C 33.410156 3.574219 33.410156 3.605469 33.410156 3.632812 C 33.410156 3.664062 33.410156 3.695312 33.410156 3.726562 C 33.410156 3.796875 33.410156 3.871094 33.40625 3.945312 C 33.292969 3.964844 33.175781 3.984375 33.0625 4.007812 C 33.023438 4.011719 32.984375 4.019531 32.945312 4.027344 C 32.738281 4.0625 32.535156 4.097656 32.328125 4.113281 C 32.320312 4.144531 32.320312 4.144531 32.3125 4.179688 C 32.238281 4.480469 32.15625 4.78125 32.070312 5.082031 C 32.058594 5.128906 32.042969 5.171875 32.03125 5.21875 C 31.875 5.78125 31.714844 6.347656 31.550781 6.910156 C 31.375 7.535156 31.195312 8.160156 31.019531 8.785156 C 30.992188 8.871094 30.96875 8.957031 30.945312 9.042969 C 30.835938 9.433594 30.722656 9.820312 30.613281 10.210938 C 30.566406 10.378906 30.519531 10.542969 30.472656 10.707031 C 30.445312 10.804688 30.417969 10.902344 30.390625 11 C 30.277344 11.390625 30.167969 11.785156 30.046875 12.175781 C 29.730469 12.175781 29.414062 12.175781 29.089844 12.175781 C 29.03125 12.003906 29.03125 12.003906 28.976562 11.832031 C 28.925781 11.675781 28.878906 11.523438 28.828125 11.367188 C 28.820312 11.347656 28.8125 11.328125 28.808594 11.304688 C 28.632812 10.769531 28.460938 10.230469 28.285156 9.695312 C 28.144531 9.273438 28.007812 8.847656 27.875 8.425781 C 27.695312 7.867188 27.515625 7.308594 27.332031 6.753906 C 27.304688 6.679688 27.28125 6.605469 27.257812 6.53125 C 27.238281 6.476562 27.222656 6.425781 27.207031 6.375 C 27.046875 5.894531 27.046875 5.894531 27.046875 5.796875 C 27.03125 5.796875 27.015625 5.796875 27 5.796875 C 26.996094 5.8125 26.996094 5.828125 26.992188 5.84375 C 26.964844 5.988281 26.925781 6.132812 26.882812 6.273438 C 26.875 6.296875 26.867188 6.316406 26.859375 6.339844 C 26.84375 6.390625 26.828125 6.4375 26.8125 6.488281 C 26.769531 6.625 26.726562 6.761719 26.683594 6.898438 C 26.675781 6.929688 26.664062 6.957031 26.65625 6.988281 C 26.546875 7.328125 26.445312 7.667969 26.339844 8.007812 C 26.316406 8.078125 26.296875 8.144531 26.273438 8.214844 C 26.230469 8.355469 26.1875 8.496094 26.144531 8.636719 C 26.074219 8.863281 26.007812 9.089844 25.9375 9.3125 C 25.933594 9.328125 25.925781 9.347656 25.921875 9.363281 C 25.894531 9.449219 25.871094 9.535156 25.84375 9.617188 C 25.796875 9.769531 25.75 9.921875 25.703125 10.074219 C 25.675781 10.15625 25.652344 10.242188 25.625 10.328125 C 25.613281 10.363281 25.605469 10.394531 25.59375 10.429688 C 25.414062 11.011719 25.234375 11.59375 25.054688 12.175781 C 24.738281 12.175781 24.421875 12.175781 24.097656 12.175781 C 23.816406 11.230469 23.535156 10.285156 23.261719 9.339844 C 23.253906 9.320312 23.25 9.304688 23.246094 9.285156 C 23.195312 9.117188 23.144531 8.949219 23.097656 8.78125 C 22.960938 8.3125 22.824219 7.84375 22.6875 7.375 C 22.664062 7.304688 22.644531 7.234375 22.625 7.164062 C 22.414062 6.449219 22.207031 5.738281 22 5.027344 C 21.976562 4.953125 21.953125 4.878906 21.933594 4.804688 C 21.898438 4.683594 21.859375 4.5625 21.824219 4.441406 C 21.820312 4.421875 21.8125 4.402344 21.808594 4.382812 C 21.796875 4.347656 21.785156 4.3125 21.777344 4.28125 C 21.753906 4.203125 21.742188 4.148438 21.742188 4.066406 C 21.726562 4.066406 21.710938 4.0625 21.691406 4.0625 C 21.382812 4.042969 21.070312 4.003906 20.761719 3.96875 C 20.757812 3.863281 20.757812 3.753906 20.757812 3.648438 C 20.757812 3.617188 20.757812 3.585938 20.757812 3.554688 C 20.757812 3.523438 20.757812 3.496094 20.757812 3.464844 C 20.757812 3.4375 20.757812 3.410156 20.757812 3.382812 C 20.761719 3.296875 20.761719 3.296875 20.847656 3.292969 Z M 20.847656 3.292969 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 82.488281 3.25 C 83.046875 3.246094 83.605469 3.246094 84.167969 3.246094 C 84.425781 3.246094 84.6875 3.246094 84.945312 3.246094 C 85.171875 3.242188 85.398438 3.242188 85.625 3.242188 C 85.746094 3.242188 85.867188 3.242188 85.984375 3.242188 C 88.15625 3.238281 88.15625 3.238281 88.894531 3.898438 C 88.914062 3.914062 88.9375 3.929688 88.957031 3.945312 C 89.191406 4.144531 89.363281 4.402344 89.472656 4.691406 C 89.480469 4.714844 89.492188 4.742188 89.5 4.765625 C 89.65625 5.25 89.601562 5.785156 89.382812 6.234375 C 89.117188 6.753906 88.695312 7.078125 88.152344 7.265625 C 87.984375 7.320312 87.816406 7.367188 87.648438 7.410156 C 87.664062 7.414062 87.679688 7.417969 87.699219 7.421875 C 88.523438 7.605469 89.300781 7.851562 89.78125 8.597656 C 90.0625 9.0625 90.125 9.636719 90.003906 10.164062 C 89.808594 10.804688 89.363281 11.304688 88.78125 11.621094 C 88.324219 11.863281 87.820312 11.988281 87.3125 12.054688 C 87.28125 12.058594 87.253906 12.0625 87.222656 12.066406 C 86.777344 12.121094 86.332031 12.109375 85.882812 12.105469 C 85.765625 12.105469 85.644531 12.105469 85.523438 12.105469 C 85.300781 12.105469 85.074219 12.105469 84.847656 12.105469 C 84.589844 12.105469 84.332031 12.105469 84.074219 12.105469 C 83.546875 12.105469 83.015625 12.101562 82.488281 12.101562 C 82.488281 11.878906 82.488281 11.65625 82.488281 11.429688 C 82.859375 11.390625 83.234375 11.347656 83.617188 11.308594 C 83.617188 8.910156 83.617188 6.511719 83.617188 4.042969 C 83.488281 4.035156 83.363281 4.027344 83.230469 4.019531 C 83.117188 4.007812 83.003906 3.996094 82.890625 3.980469 C 82.863281 3.980469 82.832031 3.976562 82.804688 3.972656 C 82.695312 3.960938 82.59375 3.949219 82.488281 3.921875 C 82.488281 3.699219 82.488281 3.476562 82.488281 3.25 Z M 85.390625 3.96875 C 85.390625 4.242188 85.386719 4.515625 85.382812 4.785156 C 85.382812 4.914062 85.378906 5.039062 85.378906 5.164062 C 85.371094 5.824219 85.367188 6.484375 85.367188 7.144531 C 86.488281 7.183594 86.488281 7.183594 87.457031 6.691406 C 87.796875 6.320312 87.859375 5.832031 87.847656 5.351562 C 87.832031 4.992188 87.71875 4.644531 87.460938 4.378906 C 87 3.96875 86.363281 3.964844 85.78125 3.96875 C 85.742188 3.96875 85.703125 3.96875 85.667969 3.96875 C 85.574219 3.96875 85.484375 3.96875 85.390625 3.96875 Z M 85.390625 7.84375 C 85.390625 9.003906 85.390625 10.160156 85.390625 11.355469 C 86.28125 11.386719 86.28125 11.386719 87.152344 11.21875 C 87.171875 11.214844 87.1875 11.207031 87.207031 11.199219 C 87.578125 11.066406 87.886719 10.824219 88.066406 10.46875 C 88.28125 9.988281 88.289062 9.417969 88.125 8.921875 C 87.960938 8.492188 87.664062 8.234375 87.257812 8.046875 C 86.664062 7.804688 86.023438 7.84375 85.390625 7.84375 Z M 85.390625 7.84375 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 76.167969 3.476562 C 76.367188 3.671875 76.507812 3.917969 76.585938 4.1875 C 76.589844 4.203125 76.59375 4.222656 76.601562 4.242188 C 76.707031 4.675781 76.621094 5.144531 76.414062 5.53125 C 76.34375 5.644531 76.265625 5.746094 76.175781 5.847656 C 76.15625 5.867188 76.136719 5.886719 76.117188 5.910156 C 75.71875 6.332031 75.199219 6.617188 74.6875 6.882812 C 74.707031 6.902344 74.726562 6.921875 74.746094 6.941406 C 74.972656 7.191406 74.972656 7.191406 75.066406 7.296875 C 75.140625 7.382812 75.21875 7.464844 75.300781 7.542969 C 75.351562 7.59375 75.394531 7.640625 75.4375 7.695312 C 75.527344 7.796875 75.621094 7.894531 75.714844 7.992188 C 76.089844 8.394531 76.089844 8.394531 76.253906 8.585938 C 76.351562 8.695312 76.449219 8.800781 76.546875 8.90625 C 76.621094 8.980469 76.691406 9.058594 76.761719 9.136719 C 76.773438 9.152344 76.789062 9.164062 76.800781 9.179688 C 76.824219 9.207031 76.851562 9.234375 76.875 9.261719 C 76.933594 9.324219 76.992188 9.382812 77.0625 9.429688 C 77.070312 9.410156 77.070312 9.410156 77.082031 9.386719 C 77.113281 9.304688 77.152344 9.230469 77.195312 9.15625 C 77.5625 8.476562 77.800781 7.753906 77.976562 7 C 77.953125 7 77.933594 6.996094 77.910156 6.996094 C 77.707031 6.96875 77.5 6.9375 77.296875 6.902344 C 77.273438 6.898438 77.25 6.894531 77.222656 6.890625 C 77.050781 6.859375 77.050781 6.859375 76.96875 6.832031 C 76.960938 6.328125 76.960938 6.328125 77.015625 6.160156 C 77.949219 6.160156 78.886719 6.160156 79.847656 6.160156 C 79.847656 6.367188 79.847656 6.574219 79.847656 6.785156 C 79.53125 6.839844 79.214844 6.894531 78.886719 6.953125 C 78.859375 7.046875 78.832031 7.140625 78.804688 7.234375 C 78.539062 8.09375 78.164062 9.035156 77.601562 9.746094 C 77.5625 9.792969 77.5625 9.792969 77.566406 9.851562 C 77.601562 9.933594 77.648438 9.980469 77.714844 10.039062 C 77.792969 10.113281 77.867188 10.1875 77.9375 10.269531 C 78.027344 10.375 78.125 10.46875 78.222656 10.566406 C 78.308594 10.65625 78.390625 10.742188 78.472656 10.839844 C 78.539062 10.914062 78.601562 10.933594 78.695312 10.949219 C 78.71875 10.953125 78.746094 10.957031 78.769531 10.960938 C 78.796875 10.964844 78.824219 10.96875 78.851562 10.972656 C 78.875 10.980469 78.902344 10.984375 78.933594 10.988281 C 79.019531 11.003906 79.105469 11.019531 79.191406 11.03125 C 79.277344 11.046875 79.363281 11.0625 79.449219 11.078125 C 79.503906 11.085938 79.558594 11.097656 79.613281 11.105469 C 79.648438 11.113281 79.648438 11.113281 79.6875 11.117188 C 79.707031 11.121094 79.730469 11.125 79.75 11.128906 C 79.800781 11.140625 79.800781 11.140625 79.824219 11.164062 C 79.820312 11.421875 79.785156 11.679688 79.753906 11.933594 C 79.691406 11.949219 79.632812 11.964844 79.570312 11.980469 C 79.546875 11.984375 79.546875 11.984375 79.519531 11.992188 C 79.214844 12.066406 78.910156 12.085938 78.597656 12.085938 C 78.539062 12.085938 78.484375 12.085938 78.425781 12.085938 C 77.847656 12.089844 77.332031 11.917969 76.894531 11.523438 C 76.855469 11.484375 76.816406 11.445312 76.777344 11.40625 C 76.71875 11.347656 76.660156 11.296875 76.601562 11.242188 C 76.578125 11.21875 76.578125 11.21875 76.554688 11.195312 C 76.515625 11.160156 76.476562 11.125 76.441406 11.089844 C 76.429688 11.101562 76.417969 11.109375 76.410156 11.117188 C 76.140625 11.351562 75.859375 11.554688 75.542969 11.71875 C 75.511719 11.738281 75.476562 11.757812 75.445312 11.777344 C 75.3125 11.847656 75.179688 11.894531 75.039062 11.9375 C 75.011719 11.945312 75.011719 11.945312 74.984375 11.953125 C 74.632812 12.058594 74.269531 12.089844 73.90625 12.085938 C 73.84375 12.085938 73.785156 12.085938 73.722656 12.089844 C 72.941406 12.089844 72.222656 11.824219 71.652344 11.28125 C 71.203125 10.820312 71.023438 10.246094 71.03125 9.609375 C 71.042969 9.058594 71.230469 8.546875 71.59375 8.132812 C 71.609375 8.113281 71.625 8.09375 71.644531 8.070312 C 71.980469 7.683594 72.398438 7.421875 72.839844 7.171875 C 72.871094 7.152344 72.902344 7.132812 72.9375 7.113281 C 72.960938 7.101562 72.984375 7.085938 73.007812 7.074219 C 72.996094 7.0625 72.988281 7.050781 72.976562 7.042969 C 72.398438 6.425781 72.09375 5.613281 72.113281 4.773438 C 72.128906 4.371094 72.257812 3.988281 72.527344 3.679688 C 72.542969 3.660156 72.558594 3.644531 72.570312 3.625 C 72.917969 3.210938 73.496094 2.996094 74.015625 2.933594 C 74.050781 2.929688 74.050781 2.929688 74.082031 2.925781 C 74.804688 2.847656 75.621094 2.964844 76.167969 3.476562 Z M 73.671875 3.796875 C 73.433594 4.113281 73.414062 4.4375 73.457031 4.820312 C 73.550781 5.460938 73.921875 5.9375 74.328125 6.425781 C 74.398438 6.390625 74.449219 6.355469 74.503906 6.300781 C 74.527344 6.28125 74.527344 6.28125 74.550781 6.257812 C 74.566406 6.242188 74.582031 6.226562 74.597656 6.210938 C 74.613281 6.191406 74.628906 6.175781 74.644531 6.160156 C 74.773438 6.03125 74.890625 5.894531 75 5.75 C 75.019531 5.726562 75.035156 5.699219 75.054688 5.675781 C 75.335938 5.292969 75.5 4.859375 75.457031 4.378906 C 75.40625 4.078125 75.289062 3.820312 75.035156 3.636719 C 74.59375 3.363281 74.03125 3.410156 73.671875 3.796875 Z M 73.046875 7.828125 C 72.664062 8.226562 72.519531 8.789062 72.519531 9.332031 C 72.53125 9.800781 72.71875 10.257812 73.039062 10.601562 C 73.46875 10.996094 73.980469 11.140625 74.550781 11.125 C 74.960938 11.105469 75.339844 11.003906 75.703125 10.8125 C 75.71875 10.804688 75.738281 10.796875 75.753906 10.785156 C 75.84375 10.738281 75.90625 10.699219 75.960938 10.609375 C 75.949219 10.601562 75.941406 10.589844 75.933594 10.582031 C 75.460938 10.074219 75.460938 10.074219 75.25 9.8125 C 75.1875 9.738281 75.125 9.664062 75.0625 9.59375 C 74.972656 9.484375 74.882812 9.375 74.796875 9.265625 C 74.695312 9.132812 74.589844 9.003906 74.480469 8.878906 C 74.390625 8.773438 74.304688 8.667969 74.214844 8.5625 C 74.152344 8.484375 74.085938 8.40625 74.019531 8.328125 C 73.921875 8.214844 73.828125 8.101562 73.734375 7.984375 C 73.726562 7.96875 73.714844 7.957031 73.703125 7.941406 C 73.683594 7.914062 73.660156 7.886719 73.640625 7.859375 C 73.589844 7.792969 73.539062 7.730469 73.488281 7.667969 C 73.460938 7.632812 73.460938 7.632812 73.433594 7.601562 C 73.414062 7.578125 73.414062 7.578125 73.390625 7.554688 C 73.265625 7.554688 73.132812 7.742188 73.046875 7.828125 Z M 73.046875 7.828125 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 49.992188 5.535156 C 50.101562 5.609375 50.101562 5.609375 50.136719 5.679688 C 50.136719 5.746094 50.140625 5.8125 50.140625 5.882812 C 50.140625 5.914062 50.140625 5.914062 50.140625 5.941406 C 50.140625 5.984375 50.140625 6.027344 50.140625 6.070312 C 50.140625 6.136719 50.140625 6.203125 50.140625 6.269531 C 50.140625 6.308594 50.140625 6.351562 50.140625 6.390625 C 50.140625 6.410156 50.140625 6.429688 50.140625 6.453125 C 50.140625 6.589844 50.140625 6.589844 50.113281 6.617188 C 50.074219 6.617188 50.035156 6.621094 49.996094 6.621094 C 49.972656 6.621094 49.949219 6.621094 49.921875 6.621094 C 49.894531 6.621094 49.871094 6.617188 49.84375 6.617188 C 49.816406 6.617188 49.789062 6.617188 49.757812 6.617188 C 49.671875 6.617188 49.585938 6.617188 49.5 6.617188 C 49.441406 6.617188 49.378906 6.617188 49.320312 6.617188 C 49.175781 6.617188 49.03125 6.617188 48.886719 6.617188 C 48.898438 6.640625 48.90625 6.660156 48.917969 6.683594 C 48.929688 6.714844 48.945312 6.746094 48.957031 6.773438 C 48.964844 6.789062 48.96875 6.804688 48.976562 6.820312 C 49.203125 7.339844 49.195312 8 48.988281 8.523438 C 48.75 9.0625 48.355469 9.457031 47.804688 9.671875 C 47.066406 9.941406 46.210938 9.941406 45.457031 9.746094 C 45.277344 10.003906 45.214844 10.273438 45.238281 10.585938 C 45.269531 10.699219 45.316406 10.761719 45.402344 10.835938 C 45.617188 10.945312 45.851562 10.949219 46.089844 10.949219 C 46.113281 10.953125 46.132812 10.953125 46.15625 10.953125 C 46.203125 10.953125 46.25 10.953125 46.292969 10.953125 C 46.367188 10.953125 46.441406 10.953125 46.515625 10.953125 C 46.726562 10.953125 46.9375 10.957031 47.144531 10.957031 C 47.273438 10.957031 47.402344 10.957031 47.53125 10.960938 C 47.582031 10.960938 47.628906 10.960938 47.675781 10.960938 C 48.324219 10.960938 49.039062 11.019531 49.53125 11.492188 C 49.546875 11.511719 49.566406 11.53125 49.585938 11.550781 C 49.601562 11.566406 49.617188 11.582031 49.636719 11.597656 C 49.957031 11.929688 50.0625 12.394531 50.066406 12.84375 C 50.054688 13.351562 49.847656 13.800781 49.511719 14.171875 C 49.496094 14.191406 49.480469 14.207031 49.460938 14.226562 C 48.8125 14.921875 47.769531 15.179688 46.855469 15.210938 C 45.890625 15.234375 44.761719 15.230469 44.015625 14.523438 C 43.738281 14.222656 43.660156 13.886719 43.671875 13.488281 C 43.679688 13.363281 43.699219 13.253906 43.753906 13.136719 C 43.761719 13.117188 43.769531 13.09375 43.78125 13.074219 C 43.996094 12.644531 44.386719 12.410156 44.785156 12.175781 C 44.765625 12.167969 44.746094 12.160156 44.730469 12.152344 C 44.398438 11.996094 44.222656 11.808594 44.089844 11.476562 C 43.988281 11.136719 44.070312 10.757812 44.222656 10.453125 C 44.421875 10.109375 44.695312 9.824219 44.976562 9.550781 C 44.960938 9.542969 44.945312 9.53125 44.925781 9.523438 C 44.757812 9.417969 44.613281 9.304688 44.472656 9.167969 C 44.457031 9.152344 44.441406 9.136719 44.425781 9.121094 C 44.214844 8.902344 44.085938 8.597656 44.015625 8.300781 C 44.011719 8.28125 44.003906 8.257812 44 8.238281 C 43.882812 7.675781 43.964844 7.042969 44.277344 6.558594 C 44.621094 6.070312 45.09375 5.773438 45.671875 5.628906 C 45.6875 5.625 45.703125 5.621094 45.71875 5.617188 C 46.25 5.492188 46.917969 5.496094 47.449219 5.628906 C 47.464844 5.632812 47.480469 5.636719 47.496094 5.640625 C 47.6875 5.691406 47.867188 5.761719 48.046875 5.84375 C 48.0625 5.851562 48.078125 5.859375 48.09375 5.867188 C 48.164062 5.902344 48.226562 5.933594 48.289062 5.980469 C 48.390625 6.066406 48.390625 6.066406 48.515625 6.082031 C 48.582031 6.0625 48.644531 6.035156 48.707031 6.003906 C 48.730469 5.996094 48.753906 5.984375 48.78125 5.976562 C 48.855469 5.941406 48.929688 5.910156 49.003906 5.875 C 49.054688 5.851562 49.101562 5.832031 49.152344 5.808594 C 49.320312 5.738281 49.488281 5.664062 49.652344 5.585938 C 49.679688 5.574219 49.703125 5.566406 49.730469 5.554688 C 49.75 5.542969 49.769531 5.535156 49.789062 5.523438 C 49.867188 5.503906 49.917969 5.515625 49.992188 5.535156 Z M 45.835938 6.507812 C 45.472656 6.984375 45.421875 7.597656 45.492188 8.175781 C 45.550781 8.542969 45.6875 8.890625 45.980469 9.132812 C 46.207031 9.285156 46.46875 9.3125 46.734375 9.277344 C 47.015625 9.21875 47.210938 9.089844 47.375 8.855469 C 47.683594 8.375 47.742188 7.746094 47.640625 7.191406 C 47.5625 6.859375 47.402344 6.507812 47.117188 6.308594 C 46.703125 6.074219 46.152344 6.148438 45.835938 6.507812 Z M 45.238281 12.367188 C 44.957031 12.734375 44.867188 13.113281 44.902344 13.570312 C 44.957031 13.84375 45.09375 14.058594 45.316406 14.226562 C 45.613281 14.417969 46.015625 14.496094 46.367188 14.507812 C 46.394531 14.507812 46.394531 14.507812 46.417969 14.507812 C 47.132812 14.527344 47.90625 14.457031 48.453125 13.945312 C 48.652344 13.738281 48.710938 13.515625 48.703125 13.230469 C 48.683594 12.992188 48.570312 12.800781 48.394531 12.644531 C 48.113281 12.441406 47.726562 12.449219 47.398438 12.449219 C 47.355469 12.449219 47.3125 12.449219 47.269531 12.449219 C 47.15625 12.449219 47.046875 12.449219 46.933594 12.449219 C 46.753906 12.449219 46.574219 12.445312 46.394531 12.445312 C 46.332031 12.445312 46.269531 12.445312 46.210938 12.445312 C 45.882812 12.445312 45.5625 12.414062 45.238281 12.367188 Z M 45.238281 12.367188 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 53.039062 2.382812 C 53.0625 2.390625 53.0625 2.390625 53.085938 2.398438 C 53.140625 2.429688 53.171875 2.453125 53.207031 2.503906 C 53.230469 2.617188 53.21875 2.730469 53.214844 2.84375 C 53.210938 2.878906 53.210938 2.914062 53.210938 2.953125 C 53.207031 3.027344 53.203125 3.105469 53.199219 3.183594 C 53.191406 3.371094 53.183594 3.558594 53.179688 3.746094 C 53.175781 3.792969 53.175781 3.835938 53.175781 3.882812 C 53.15625 4.441406 53.15625 5 53.15625 5.5625 C 53.15625 5.640625 53.15625 5.71875 53.15625 5.792969 C 53.15625 6.085938 53.160156 6.375 53.160156 6.664062 C 53.179688 6.644531 53.195312 6.625 53.214844 6.605469 C 53.238281 6.578125 53.261719 6.550781 53.285156 6.523438 C 53.296875 6.511719 53.3125 6.5 53.324219 6.484375 C 53.78125 5.984375 54.445312 5.601562 55.128906 5.550781 C 55.640625 5.535156 56.128906 5.578125 56.527344 5.929688 C 56.566406 5.964844 56.601562 6 56.640625 6.039062 C 56.664062 6.0625 56.664062 6.0625 56.691406 6.089844 C 57.246094 6.660156 57.203125 7.570312 57.203125 8.304688 C 57.203125 8.414062 57.203125 8.523438 57.207031 8.632812 C 57.207031 8.839844 57.207031 9.042969 57.207031 9.25 C 57.207031 9.484375 57.210938 9.722656 57.210938 9.957031 C 57.210938 10.4375 57.214844 10.921875 57.214844 11.40625 C 57.246094 11.410156 57.246094 11.410156 57.28125 11.414062 C 57.308594 11.417969 57.335938 11.421875 57.363281 11.425781 C 57.40625 11.433594 57.40625 11.433594 57.445312 11.441406 C 57.558594 11.457031 57.671875 11.480469 57.785156 11.503906 C 57.808594 11.507812 57.828125 11.511719 57.851562 11.515625 C 57.878906 11.519531 57.878906 11.519531 57.910156 11.527344 C 57.929688 11.53125 57.949219 11.535156 57.964844 11.539062 C 58.007812 11.550781 58.007812 11.550781 58.03125 11.574219 C 58.035156 11.613281 58.035156 11.65625 58.035156 11.695312 C 58.035156 11.71875 58.035156 11.746094 58.035156 11.769531 C 58.035156 11.796875 58.035156 11.824219 58.035156 11.851562 C 58.035156 11.875 58.035156 11.902344 58.035156 11.929688 C 58.035156 11.964844 58.035156 11.964844 58.035156 12.003906 C 58.035156 12.027344 58.035156 12.050781 58.035156 12.074219 C 58.03125 12.125 58.03125 12.125 58.007812 12.148438 C 57.964844 12.152344 57.921875 12.152344 57.882812 12.152344 C 57.839844 12.152344 57.839844 12.152344 57.796875 12.152344 C 57.769531 12.152344 57.738281 12.152344 57.707031 12.152344 C 57.675781 12.152344 57.640625 12.152344 57.609375 12.152344 C 57.523438 12.152344 57.433594 12.152344 57.347656 12.152344 C 57.257812 12.152344 57.164062 12.152344 57.074219 12.152344 C 56.917969 12.152344 56.765625 12.152344 56.613281 12.152344 C 56.433594 12.152344 56.257812 12.152344 56.082031 12.152344 C 55.929688 12.152344 55.777344 12.152344 55.625 12.152344 C 55.53125 12.152344 55.441406 12.152344 55.351562 12.152344 C 55.265625 12.152344 55.179688 12.152344 55.09375 12.152344 C 55.046875 12.152344 55 12.152344 54.953125 12.152344 C 54.925781 12.152344 54.898438 12.152344 54.871094 12.152344 C 54.847656 12.152344 54.824219 12.152344 54.796875 12.152344 C 54.742188 12.148438 54.742188 12.148438 54.71875 12.125 C 54.71875 12.085938 54.71875 12.042969 54.71875 12.003906 C 54.71875 11.976562 54.71875 11.953125 54.71875 11.925781 C 54.71875 11.902344 54.71875 11.875 54.71875 11.847656 C 54.71875 11.820312 54.71875 11.796875 54.71875 11.769531 C 54.71875 11.703125 54.71875 11.636719 54.71875 11.574219 C 54.8125 11.53125 54.902344 11.507812 55.003906 11.488281 C 55.03125 11.480469 55.0625 11.476562 55.09375 11.46875 C 55.113281 11.464844 55.128906 11.460938 55.144531 11.460938 C 55.191406 11.449219 55.242188 11.441406 55.289062 11.429688 C 55.527344 11.378906 55.527344 11.378906 55.585938 11.378906 C 55.582031 10.90625 55.582031 10.433594 55.578125 9.960938 C 55.578125 9.742188 55.578125 9.523438 55.574219 9.304688 C 55.574219 9.109375 55.574219 8.917969 55.574219 8.726562 C 55.574219 8.625 55.570312 8.527344 55.570312 8.425781 C 55.570312 8.328125 55.570312 8.234375 55.570312 8.136719 C 55.570312 8.101562 55.570312 8.066406 55.570312 8.03125 C 55.570312 7.664062 55.554688 7.199219 55.289062 6.917969 C 55.054688 6.722656 54.742188 6.746094 54.457031 6.761719 C 54.101562 6.800781 53.738281 7.007812 53.464844 7.234375 C 53.425781 7.265625 53.425781 7.265625 53.371094 7.300781 C 53.273438 7.371094 53.214844 7.421875 53.1875 7.539062 C 53.179688 7.640625 53.179688 7.742188 53.183594 7.84375 C 53.183594 7.882812 53.183594 7.921875 53.183594 7.960938 C 53.183594 8.066406 53.183594 8.167969 53.1875 8.273438 C 53.1875 8.386719 53.1875 8.496094 53.1875 8.605469 C 53.1875 8.8125 53.191406 9.023438 53.191406 9.230469 C 53.195312 9.46875 53.195312 9.703125 53.195312 9.941406 C 53.199219 10.429688 53.203125 10.917969 53.207031 11.40625 C 53.238281 11.410156 53.238281 11.410156 53.265625 11.414062 C 53.351562 11.429688 53.4375 11.445312 53.523438 11.464844 C 53.554688 11.46875 53.585938 11.472656 53.613281 11.480469 C 53.644531 11.484375 53.671875 11.492188 53.703125 11.496094 C 53.730469 11.5 53.753906 11.507812 53.78125 11.511719 C 53.847656 11.523438 53.910156 11.535156 53.976562 11.550781 C 53.976562 11.746094 53.976562 11.945312 53.976562 12.148438 C 52.890625 12.148438 51.804688 12.148438 50.6875 12.148438 C 50.6875 11.953125 50.6875 11.753906 50.6875 11.550781 C 50.964844 11.492188 51.242188 11.4375 51.527344 11.378906 C 51.542969 11.160156 51.554688 10.945312 51.554688 10.722656 C 51.554688 10.691406 51.554688 10.660156 51.554688 10.628906 C 51.554688 10.546875 51.558594 10.464844 51.558594 10.378906 C 51.558594 10.289062 51.558594 10.199219 51.558594 10.109375 C 51.558594 9.953125 51.558594 9.796875 51.558594 9.640625 C 51.558594 9.414062 51.558594 9.1875 51.5625 8.960938 C 51.5625 8.59375 51.5625 8.230469 51.5625 7.863281 C 51.566406 7.507812 51.566406 7.152344 51.566406 6.792969 C 51.566406 6.773438 51.566406 6.75 51.566406 6.726562 C 51.566406 6.617188 51.566406 6.507812 51.566406 6.398438 C 51.570312 5.484375 51.574219 4.570312 51.574219 3.65625 C 51.554688 3.65625 51.535156 3.652344 51.515625 3.652344 C 51.476562 3.648438 51.476562 3.648438 51.4375 3.644531 C 51.414062 3.644531 51.386719 3.640625 51.359375 3.640625 C 51.277344 3.632812 51.195312 3.621094 51.113281 3.609375 C 51.082031 3.605469 51.054688 3.601562 51.023438 3.597656 C 50.996094 3.59375 50.964844 3.589844 50.933594 3.582031 C 50.902344 3.578125 50.871094 3.574219 50.839844 3.570312 C 50.765625 3.558594 50.691406 3.546875 50.617188 3.535156 C 50.617188 3.347656 50.617188 3.15625 50.617188 2.960938 C 50.910156 2.875 51.207031 2.796875 51.5 2.722656 C 51.523438 2.714844 51.542969 2.710938 51.5625 2.707031 C 51.671875 2.679688 51.777344 2.652344 51.886719 2.625 C 51.972656 2.601562 52.0625 2.578125 52.152344 2.554688 C 52.257812 2.527344 52.367188 2.5 52.472656 2.472656 C 52.515625 2.460938 52.554688 2.453125 52.597656 2.441406 C 52.652344 2.425781 52.710938 2.410156 52.765625 2.398438 C 52.78125 2.394531 52.800781 2.386719 52.816406 2.382812 C 52.898438 2.363281 52.960938 2.351562 53.039062 2.382812 Z M 53.039062 2.382812 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 99.691406 6.011719 C 100.109375 6.40625 100.234375 7.003906 100.273438 7.554688 C 100.277344 7.667969 100.277344 7.785156 100.277344 7.898438 C 100.277344 7.933594 100.277344 7.964844 100.277344 8 C 100.277344 8.074219 100.277344 8.144531 100.277344 8.21875 C 100.277344 8.332031 100.277344 8.445312 100.277344 8.558594 C 100.28125 8.886719 100.28125 9.210938 100.28125 9.535156 C 100.28125 9.714844 100.28125 9.894531 100.285156 10.074219 C 100.285156 10.171875 100.285156 10.265625 100.285156 10.359375 C 100.285156 10.449219 100.285156 10.539062 100.285156 10.628906 C 100.285156 10.675781 100.285156 10.726562 100.285156 10.773438 C 100.289062 10.964844 100.292969 11.167969 100.417969 11.320312 C 100.53125 11.378906 100.636719 11.398438 100.757812 11.367188 C 100.898438 11.308594 101.003906 11.21875 101.113281 11.117188 C 101.226562 11.199219 101.339844 11.289062 101.449219 11.378906 C 101.394531 11.527344 101.300781 11.640625 101.207031 11.765625 C 101.179688 11.804688 101.179688 11.804688 101.152344 11.84375 C 100.859375 12.152344 100.476562 12.265625 100.058594 12.277344 C 99.699219 12.269531 99.332031 12.164062 99.066406 11.910156 C 98.933594 11.757812 98.761719 11.519531 98.761719 11.308594 C 98.582031 11.449219 98.582031 11.449219 98.417969 11.605469 C 98.289062 11.738281 98.140625 11.847656 97.992188 11.957031 C 97.96875 11.972656 97.949219 11.992188 97.925781 12.007812 C 97.488281 12.3125 96.855469 12.339844 96.34375 12.25 C 95.917969 12.15625 95.527344 11.929688 95.28125 11.558594 C 95.035156 11.136719 94.964844 10.617188 95.082031 10.140625 C 95.289062 9.527344 95.746094 9.175781 96.300781 8.894531 C 96.941406 8.582031 97.644531 8.375 98.328125 8.179688 C 98.34375 8.175781 98.359375 8.171875 98.375 8.167969 C 98.472656 8.140625 98.566406 8.113281 98.664062 8.085938 C 98.695312 7.195312 98.695312 7.195312 98.328125 6.425781 C 98.121094 6.230469 97.828125 6.203125 97.558594 6.203125 C 97.53125 6.203125 97.53125 6.203125 97.503906 6.203125 C 97.339844 6.207031 97.171875 6.21875 97.007812 6.230469 C 97.003906 6.257812 97.003906 6.289062 97 6.316406 C 96.984375 6.46875 96.957031 6.617188 96.925781 6.765625 C 96.917969 6.816406 96.910156 6.863281 96.902344 6.910156 C 96.832031 7.273438 96.738281 7.585938 96.425781 7.808594 C 96.191406 7.933594 95.945312 7.933594 95.6875 7.867188 C 95.515625 7.808594 95.40625 7.707031 95.320312 7.546875 C 95.234375 7.347656 95.238281 7.183594 95.308594 6.980469 C 95.316406 6.957031 95.316406 6.957031 95.324219 6.929688 C 95.421875 6.644531 95.574219 6.441406 95.785156 6.230469 C 95.800781 6.214844 95.816406 6.195312 95.835938 6.179688 C 96.734375 5.308594 98.742188 5.21875 99.691406 6.011719 Z M 98.394531 8.742188 C 98.292969 8.777344 98.1875 8.8125 98.082031 8.847656 C 97.574219 9.007812 97.011719 9.230469 96.746094 9.722656 C 96.582031 10.042969 96.554688 10.355469 96.648438 10.703125 C 96.71875 10.914062 96.816406 11.042969 97.011719 11.152344 C 97.296875 11.292969 97.609375 11.304688 97.910156 11.199219 C 98.058594 11.132812 98.207031 11.050781 98.34375 10.960938 C 98.398438 10.921875 98.398438 10.921875 98.46875 10.890625 C 98.558594 10.839844 98.644531 10.789062 98.679688 10.683594 C 98.703125 10.542969 98.695312 10.402344 98.691406 10.257812 C 98.6875 10.214844 98.6875 10.167969 98.6875 10.121094 C 98.6875 10 98.683594 9.878906 98.683594 9.757812 C 98.679688 9.636719 98.679688 9.511719 98.675781 9.386719 C 98.675781 9.144531 98.667969 8.902344 98.664062 8.660156 C 98.578125 8.660156 98.476562 8.714844 98.394531 8.742188 Z M 98.394531 8.742188 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 38.035156 6.242188 C 38.207031 6.40625 38.332031 6.578125 38.449219 6.785156 C 38.460938 6.808594 38.460938 6.808594 38.472656 6.832031 C 38.835938 7.472656 38.875 8.257812 38.761719 8.972656 C 38.734375 9 38.734375 9 38.671875 9 C 38.625 9 38.625 9 38.578125 9 C 38.5625 9 38.546875 9 38.53125 9 C 38.472656 9 38.417969 9 38.363281 9 C 38.324219 9 38.285156 9 38.242188 9 C 38.136719 9 38.027344 9 37.917969 9 C 37.804688 9 37.695312 9 37.582031 9 C 37.367188 9 37.152344 9 36.9375 9 C 36.695312 9 36.453125 9 36.207031 9 C 35.707031 9 35.207031 9 34.703125 9 C 34.714844 9.089844 34.726562 9.183594 34.738281 9.273438 C 34.742188 9.300781 34.742188 9.328125 34.746094 9.351562 C 34.8125 9.898438 35.007812 10.441406 35.4375 10.808594 C 35.933594 11.1875 36.476562 11.269531 37.089844 11.203125 C 37.539062 11.128906 37.90625 10.847656 38.222656 10.535156 C 38.347656 10.417969 38.347656 10.417969 38.425781 10.417969 C 38.464844 10.445312 38.464844 10.445312 38.503906 10.488281 C 38.589844 10.585938 38.683594 10.671875 38.785156 10.753906 C 38.679688 11.046875 38.46875 11.28125 38.257812 11.5 C 38.242188 11.519531 38.222656 11.535156 38.207031 11.554688 C 37.792969 12 37.171875 12.246094 36.574219 12.320312 C 36.554688 12.320312 36.535156 12.324219 36.515625 12.328125 C 35.640625 12.425781 34.773438 12.210938 34.074219 11.671875 C 33.421875 11.125 33.078125 10.363281 32.976562 9.527344 C 32.972656 9.496094 32.972656 9.496094 32.96875 9.460938 C 32.871094 8.5 33.074219 7.515625 33.675781 6.746094 C 33.707031 6.710938 33.738281 6.675781 33.769531 6.640625 C 33.78125 6.621094 33.796875 6.605469 33.8125 6.585938 C 34.316406 5.988281 35.136719 5.640625 35.902344 5.566406 C 36.699219 5.511719 37.429688 5.699219 38.035156 6.242188 Z M 35.226562 6.652344 C 34.949219 7.007812 34.820312 7.386719 34.746094 7.824219 C 34.742188 7.851562 34.738281 7.875 34.734375 7.898438 C 34.730469 7.921875 34.726562 7.949219 34.722656 7.972656 C 34.71875 7.992188 34.714844 8.015625 34.710938 8.035156 C 34.703125 8.097656 34.703125 8.15625 34.703125 8.222656 C 34.703125 8.242188 34.703125 8.261719 34.703125 8.28125 C 34.703125 8.292969 34.703125 8.308594 34.703125 8.324219 C 34.972656 8.328125 35.242188 8.328125 35.507812 8.328125 C 35.632812 8.328125 35.757812 8.328125 35.882812 8.332031 C 36.003906 8.332031 36.125 8.332031 36.246094 8.332031 C 36.289062 8.332031 36.335938 8.332031 36.382812 8.332031 C 36.445312 8.332031 36.511719 8.332031 36.574219 8.332031 C 36.59375 8.332031 36.613281 8.332031 36.632812 8.332031 C 36.800781 8.332031 36.964844 8.304688 37.085938 8.183594 C 37.273438 7.9375 37.277344 7.609375 37.246094 7.3125 C 37.195312 6.96875 37.015625 6.636719 36.730469 6.425781 C 36.226562 6.113281 35.617188 6.195312 35.226562 6.652344 Z M 35.226562 6.652344 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 112.726562 6.085938 C 112.90625 6.242188 113.058594 6.414062 113.183594 6.617188 C 113.199219 6.636719 113.210938 6.65625 113.226562 6.679688 C 113.628906 7.320312 113.699219 8.167969 113.566406 8.902344 C 113.523438 8.945312 113.449219 8.929688 113.386719 8.929688 C 113.371094 8.929688 113.355469 8.929688 113.339844 8.929688 C 113.28125 8.929688 113.226562 8.929688 113.171875 8.929688 C 113.132812 8.929688 113.089844 8.933594 113.050781 8.933594 C 112.945312 8.933594 112.835938 8.933594 112.726562 8.933594 C 112.613281 8.933594 112.5 8.933594 112.386719 8.933594 C 112.175781 8.9375 111.960938 8.9375 111.746094 8.9375 C 111.503906 8.941406 111.257812 8.941406 111.015625 8.941406 C 110.515625 8.945312 110.011719 8.949219 109.511719 8.949219 C 109.519531 9.023438 109.527344 9.097656 109.535156 9.171875 C 109.535156 9.191406 109.539062 9.210938 109.539062 9.230469 C 109.554688 9.378906 109.578125 9.523438 109.613281 9.667969 C 109.621094 9.6875 109.625 9.710938 109.628906 9.730469 C 109.703125 10.011719 109.808594 10.261719 109.992188 10.488281 C 110.003906 10.507812 110.019531 10.527344 110.035156 10.542969 C 110.320312 10.898438 110.765625 11.117188 111.214844 11.164062 C 111.839844 11.203125 112.339844 11.078125 112.820312 10.671875 C 112.9375 10.570312 113.050781 10.457031 113.160156 10.347656 C 113.230469 10.378906 113.28125 10.414062 113.339844 10.46875 C 113.355469 10.480469 113.367188 10.496094 113.382812 10.507812 C 113.398438 10.523438 113.414062 10.539062 113.429688 10.554688 C 113.445312 10.566406 113.460938 10.582031 113.476562 10.597656 C 113.515625 10.632812 113.554688 10.671875 113.59375 10.707031 C 113.324219 11.316406 112.769531 11.816406 112.15625 12.066406 C 112.054688 12.105469 111.953125 12.136719 111.847656 12.171875 C 111.832031 12.175781 111.816406 12.179688 111.800781 12.183594 C 111.507812 12.265625 111.214844 12.28125 110.914062 12.28125 C 110.898438 12.28125 110.878906 12.28125 110.859375 12.28125 C 110.554688 12.277344 110.261719 12.257812 109.96875 12.175781 C 109.941406 12.167969 109.941406 12.167969 109.914062 12.160156 C 109.203125 11.953125 108.628906 11.503906 108.238281 10.875 C 108.230469 10.859375 108.222656 10.847656 108.210938 10.832031 C 107.699219 9.980469 107.648438 8.855469 107.878906 7.90625 C 108.074219 7.136719 108.570312 6.417969 109.253906 6 C 110.304688 5.378906 111.75 5.261719 112.726562 6.085938 Z M 110.105469 6.496094 C 109.710938 6.9375 109.507812 7.546875 109.511719 8.136719 C 109.511719 8.160156 109.511719 8.179688 109.511719 8.203125 C 109.511719 8.21875 109.511719 8.234375 109.511719 8.253906 C 109.78125 8.253906 110.050781 8.253906 110.316406 8.257812 C 110.441406 8.257812 110.566406 8.257812 110.691406 8.257812 C 110.8125 8.257812 110.933594 8.257812 111.054688 8.257812 C 111.097656 8.257812 111.144531 8.261719 111.191406 8.261719 C 111.253906 8.261719 111.320312 8.261719 111.382812 8.261719 C 111.402344 8.261719 111.421875 8.261719 111.441406 8.261719 C 111.59375 8.261719 111.746094 8.234375 111.871094 8.140625 C 112.082031 7.886719 112.078125 7.605469 112.054688 7.289062 C 112.011719 6.949219 111.867188 6.6875 111.625 6.449219 C 111.609375 6.433594 111.59375 6.417969 111.582031 6.40625 C 111.164062 6.015625 110.496094 6.121094 110.105469 6.496094 Z M 110.105469 6.496094 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 119.207031 6.039062 C 119.210938 6.308594 119.203125 6.578125 119.1875 6.847656 C 119.183594 6.910156 119.183594 6.972656 119.179688 7.035156 C 119.175781 7.078125 119.175781 7.117188 119.171875 7.160156 C 119.171875 7.175781 119.171875 7.195312 119.171875 7.214844 C 119.164062 7.308594 119.152344 7.390625 119.136719 7.484375 C 118.835938 7.484375 118.535156 7.484375 118.222656 7.484375 C 118.207031 7.40625 118.191406 7.328125 118.171875 7.246094 C 118.15625 7.171875 118.140625 7.097656 118.121094 7.023438 C 118.109375 6.96875 118.101562 6.917969 118.089844 6.867188 C 118.070312 6.792969 118.054688 6.714844 118.039062 6.640625 C 118.035156 6.617188 118.027344 6.59375 118.023438 6.570312 C 118.019531 6.550781 118.015625 6.527344 118.007812 6.503906 C 118.003906 6.484375 118 6.464844 117.996094 6.445312 C 117.984375 6.398438 117.984375 6.398438 117.960938 6.351562 C 117.902344 6.332031 117.847656 6.316406 117.789062 6.300781 C 117.765625 6.296875 117.765625 6.296875 117.738281 6.289062 C 117.339844 6.1875 116.835938 6.167969 116.464844 6.375 C 116.296875 6.480469 116.203125 6.609375 116.128906 6.789062 C 116.082031 7.042969 116.105469 7.261719 116.234375 7.484375 C 116.496094 7.828125 117.082031 7.953125 117.46875 8.070312 C 118.183594 8.289062 118.960938 8.597656 119.359375 9.277344 C 119.578125 9.714844 119.621094 10.257812 119.496094 10.734375 C 119.316406 11.277344 118.957031 11.703125 118.449219 11.964844 C 117.460938 12.445312 116.246094 12.394531 115.222656 12.054688 C 115.007812 11.972656 114.804688 11.867188 114.601562 11.765625 C 114.570312 11.234375 114.574219 10.707031 114.574219 10.175781 C 114.886719 10.175781 115.195312 10.175781 115.511719 10.175781 C 115.539062 10.304688 115.539062 10.304688 115.5625 10.433594 C 115.582031 10.515625 115.597656 10.597656 115.613281 10.679688 C 115.625 10.734375 115.636719 10.792969 115.648438 10.847656 C 115.664062 10.929688 115.679688 11.011719 115.695312 11.09375 C 115.703125 11.121094 115.707031 11.144531 115.710938 11.171875 C 115.71875 11.195312 115.722656 11.21875 115.726562 11.242188 C 115.730469 11.261719 115.734375 11.285156 115.738281 11.304688 C 115.75 11.355469 115.75 11.355469 115.777344 11.40625 C 116.324219 11.617188 117.03125 11.667969 117.578125 11.4375 C 117.800781 11.332031 117.949219 11.207031 118.039062 10.972656 C 118.089844 10.761719 118.082031 10.527344 117.992188 10.328125 C 117.910156 10.191406 117.820312 10.105469 117.6875 10.023438 C 117.664062 10.003906 117.636719 9.988281 117.609375 9.972656 C 117.265625 9.769531 116.875 9.65625 116.496094 9.527344 C 116.066406 9.386719 115.683594 9.222656 115.320312 8.949219 C 115.296875 8.933594 115.273438 8.917969 115.25 8.898438 C 115.226562 8.875 115.226562 8.875 115.199219 8.855469 C 115.199219 8.839844 115.199219 8.824219 115.199219 8.804688 C 115.1875 8.800781 115.171875 8.796875 115.160156 8.789062 C 114.933594 8.65625 114.792969 8.285156 114.726562 8.046875 C 114.605469 7.507812 114.6875 6.964844 114.984375 6.496094 C 115.347656 5.957031 115.902344 5.671875 116.523438 5.542969 C 117.460938 5.367188 118.386719 5.574219 119.207031 6.039062 Z M 119.207031 6.039062 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 67.945312 6.109375 C 67.96875 6.136719 67.96875 6.136719 67.96875 6.1875 C 67.96875 6.210938 67.96875 6.234375 67.964844 6.257812 C 67.964844 6.285156 67.964844 6.3125 67.964844 6.339844 C 67.960938 6.367188 67.960938 6.398438 67.960938 6.425781 C 67.960938 6.457031 67.957031 6.484375 67.957031 6.515625 C 67.941406 6.863281 67.917969 7.207031 67.894531 7.554688 C 67.59375 7.554688 67.292969 7.554688 66.984375 7.554688 C 66.921875 7.3125 66.863281 7.070312 66.808594 6.828125 C 66.804688 6.796875 66.796875 6.769531 66.789062 6.742188 C 66.785156 6.714844 66.777344 6.6875 66.773438 6.660156 C 66.765625 6.632812 66.761719 6.609375 66.753906 6.585938 C 66.742188 6.519531 66.742188 6.519531 66.742188 6.425781 C 66.707031 6.414062 66.667969 6.402344 66.628906 6.390625 C 66.605469 6.386719 66.585938 6.378906 66.5625 6.371094 C 66.355469 6.320312 66.15625 6.296875 65.941406 6.296875 C 65.917969 6.296875 65.894531 6.296875 65.871094 6.296875 C 65.5625 6.300781 65.296875 6.351562 65.0625 6.566406 C 64.894531 6.742188 64.859375 6.90625 64.863281 7.148438 C 64.867188 7.285156 64.890625 7.390625 64.96875 7.507812 C 64.976562 7.519531 64.984375 7.535156 64.996094 7.550781 C 65.261719 7.921875 65.914062 8.0625 66.328125 8.179688 C 67.054688 8.390625 67.703125 8.726562 68.089844 9.40625 C 68.214844 9.648438 68.289062 9.90625 68.304688 10.175781 C 68.304688 10.199219 68.304688 10.21875 68.308594 10.242188 C 68.324219 10.753906 68.15625 11.1875 67.824219 11.574219 C 67.808594 11.589844 67.796875 11.605469 67.78125 11.621094 C 67.28125 12.164062 66.515625 12.347656 65.808594 12.390625 C 65.144531 12.414062 64.535156 12.34375 63.910156 12.117188 C 63.886719 12.109375 63.886719 12.109375 63.859375 12.097656 C 63.675781 12.03125 63.507812 11.929688 63.335938 11.835938 C 63.335938 11.632812 63.335938 11.429688 63.335938 11.226562 C 63.335938 11.132812 63.335938 11.039062 63.335938 10.945312 C 63.332031 10.851562 63.332031 10.761719 63.332031 10.671875 C 63.332031 10.636719 63.332031 10.601562 63.332031 10.566406 C 63.332031 10.515625 63.332031 10.46875 63.332031 10.421875 C 63.332031 10.390625 63.332031 10.363281 63.332031 10.335938 C 63.335938 10.273438 63.335938 10.273438 63.359375 10.25 C 63.421875 10.246094 63.484375 10.246094 63.550781 10.246094 C 63.570312 10.246094 63.585938 10.246094 63.605469 10.246094 C 63.648438 10.246094 63.6875 10.246094 63.726562 10.246094 C 63.789062 10.246094 63.851562 10.246094 63.914062 10.246094 C 63.953125 10.246094 63.992188 10.246094 64.03125 10.246094 C 64.050781 10.246094 64.066406 10.246094 64.085938 10.246094 C 64.21875 10.246094 64.21875 10.246094 64.273438 10.273438 C 64.285156 10.316406 64.285156 10.316406 64.296875 10.375 C 64.300781 10.394531 64.304688 10.414062 64.308594 10.4375 C 64.316406 10.460938 64.320312 10.484375 64.324219 10.507812 C 64.328125 10.53125 64.332031 10.554688 64.339844 10.578125 C 64.347656 10.628906 64.359375 10.679688 64.367188 10.730469 C 64.382812 10.808594 64.398438 10.882812 64.414062 10.960938 C 64.421875 11.007812 64.433594 11.058594 64.441406 11.105469 C 64.445312 11.128906 64.453125 11.152344 64.457031 11.175781 C 64.476562 11.285156 64.492188 11.386719 64.488281 11.5 C 64.53125 11.511719 64.53125 11.511719 64.578125 11.519531 C 64.691406 11.546875 64.804688 11.574219 64.921875 11.605469 C 65.117188 11.648438 65.308594 11.648438 65.507812 11.652344 C 65.539062 11.652344 65.570312 11.652344 65.601562 11.652344 C 65.964844 11.652344 66.320312 11.59375 66.605469 11.359375 C 66.761719 11.199219 66.820312 11.003906 66.828125 10.789062 C 66.820312 10.566406 66.761719 10.382812 66.601562 10.226562 C 66.214844 9.933594 65.765625 9.789062 65.3125 9.640625 C 64.621094 9.414062 63.949219 9.125 63.59375 8.445312 C 63.378906 8 63.375 7.464844 63.53125 6.996094 C 63.761719 6.410156 64.183594 6.027344 64.753906 5.773438 C 65.792969 5.351562 66.988281 5.59375 67.945312 6.109375 Z M 67.945312 6.109375 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 105.941406 5.769531 C 105.960938 5.777344 105.976562 5.785156 105.996094 5.792969 C 106.1875 5.867188 106.351562 5.964844 106.535156 6.0625 C 106.511719 6.539062 106.488281 7.015625 106.464844 7.507812 C 106.164062 7.507812 105.863281 7.507812 105.550781 7.507812 C 105.445312 7.101562 105.445312 7.101562 105.410156 6.941406 C 105.40625 6.925781 105.402344 6.910156 105.398438 6.890625 C 105.386719 6.839844 105.375 6.789062 105.367188 6.738281 C 105.359375 6.703125 105.351562 6.667969 105.34375 6.632812 C 105.324219 6.546875 105.304688 6.460938 105.289062 6.375 C 105.234375 6.359375 105.183594 6.34375 105.128906 6.328125 C 105.097656 6.320312 105.070312 6.3125 105.039062 6.304688 C 104.859375 6.253906 104.6875 6.25 104.503906 6.25 C 104.464844 6.25 104.464844 6.25 104.421875 6.25 C 104.136719 6.246094 103.90625 6.3125 103.664062 6.464844 C 103.507812 6.621094 103.417969 6.816406 103.414062 7.042969 C 103.425781 7.25 103.492188 7.433594 103.632812 7.585938 C 103.976562 7.886719 104.484375 8.003906 104.910156 8.132812 C 105.628906 8.351562 106.285156 8.667969 106.667969 9.355469 C 106.878906 9.800781 106.9375 10.371094 106.785156 10.84375 C 106.554688 11.417969 106.144531 11.8125 105.585938 12.070312 C 104.601562 12.488281 103.335938 12.402344 102.359375 12.007812 C 102.203125 11.9375 102.046875 11.859375 101.902344 11.765625 C 101.894531 11.699219 101.894531 11.699219 101.894531 11.617188 C 101.894531 11.585938 101.894531 11.554688 101.890625 11.523438 C 101.890625 11.488281 101.890625 11.453125 101.890625 11.417969 C 101.890625 11.382812 101.890625 11.347656 101.890625 11.3125 C 101.890625 11.222656 101.886719 11.128906 101.886719 11.039062 C 101.886719 10.925781 101.886719 10.816406 101.882812 10.707031 C 101.882812 10.539062 101.882812 10.371094 101.878906 10.203125 C 102.1875 10.203125 102.496094 10.203125 102.816406 10.203125 C 102.871094 10.363281 102.871094 10.363281 102.886719 10.449219 C 102.890625 10.46875 102.894531 10.488281 102.898438 10.507812 C 102.902344 10.527344 102.90625 10.546875 102.910156 10.566406 C 102.914062 10.585938 102.917969 10.609375 102.921875 10.628906 C 102.933594 10.671875 102.941406 10.71875 102.949219 10.761719 C 102.964844 10.828125 102.976562 10.894531 102.988281 10.960938 C 103 11.003906 103.007812 11.046875 103.015625 11.089844 C 103.019531 11.109375 103.023438 11.132812 103.027344 11.152344 C 103.046875 11.246094 103.0625 11.332031 103.054688 11.429688 C 103.699219 11.59375 104.421875 11.726562 105.03125 11.386719 C 105.21875 11.265625 105.316406 11.125 105.375 10.914062 C 105.402344 10.691406 105.378906 10.496094 105.273438 10.292969 C 104.921875 9.867188 104.363281 9.730469 103.859375 9.5625 C 103.1875 9.339844 102.511719 9.058594 102.167969 8.398438 C 101.949219 7.929688 101.9375 7.414062 102.097656 6.929688 C 102.101562 6.90625 102.109375 6.886719 102.117188 6.863281 C 102.269531 6.417969 102.628906 6.066406 103.03125 5.847656 C 103.054688 5.832031 103.078125 5.820312 103.101562 5.808594 C 103.382812 5.65625 103.699219 5.574219 104.015625 5.535156 C 104.035156 5.53125 104.054688 5.527344 104.074219 5.527344 C 104.714844 5.449219 105.34375 5.535156 105.941406 5.769531 Z M 105.941406 5.769531 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 59.953125 3.921875 C 60.316406 3.921875 60.679688 3.921875 61.054688 3.921875 C 61.058594 4.292969 61.054688 4.667969 61.046875 5.039062 C 61.042969 5.066406 61.042969 5.066406 61.042969 5.09375 C 61.042969 5.144531 61.042969 5.195312 61.039062 5.246094 C 61.039062 5.277344 61.039062 5.304688 61.035156 5.335938 C 61.03125 5.472656 61.019531 5.613281 61.007812 5.75 C 61.53125 5.75 62.054688 5.75 62.59375 5.75 C 62.59375 6.035156 62.59375 6.320312 62.59375 6.617188 C 62.0625 6.617188 61.53125 6.617188 60.984375 6.617188 C 60.984375 7.128906 60.988281 7.644531 60.988281 8.160156 C 60.992188 8.398438 60.992188 8.636719 60.992188 8.875 C 60.992188 9.082031 60.992188 9.292969 60.996094 9.5 C 60.996094 9.609375 60.996094 9.71875 60.996094 9.832031 C 60.996094 9.933594 60.996094 10.039062 60.996094 10.140625 C 60.996094 10.179688 60.996094 10.21875 60.996094 10.253906 C 60.992188 10.765625 60.992188 10.765625 61.199219 11.210938 C 61.34375 11.347656 61.507812 11.40625 61.703125 11.40625 C 61.941406 11.371094 62.144531 11.289062 62.355469 11.175781 C 62.457031 11.125 62.457031 11.125 62.519531 11.117188 C 62.558594 11.140625 62.558594 11.140625 62.597656 11.183594 C 62.613281 11.195312 62.625 11.210938 62.640625 11.226562 C 62.652344 11.238281 62.667969 11.253906 62.683594 11.269531 C 62.695312 11.285156 62.710938 11.300781 62.726562 11.316406 C 62.761719 11.351562 62.796875 11.390625 62.832031 11.429688 C 62.785156 11.5625 62.707031 11.65625 62.617188 11.765625 C 62.605469 11.78125 62.59375 11.792969 62.578125 11.808594 C 62.375 12.03125 62.085938 12.183594 61.800781 12.269531 C 61.777344 12.277344 61.75 12.285156 61.726562 12.292969 C 61.511719 12.347656 61.296875 12.351562 61.078125 12.351562 C 61.046875 12.351562 61.019531 12.351562 60.988281 12.351562 C 60.523438 12.351562 60.085938 12.210938 59.730469 11.898438 C 59.542969 11.699219 59.425781 11.40625 59.375 11.140625 C 59.371094 11.117188 59.367188 11.097656 59.363281 11.074219 C 59.351562 10.988281 59.347656 10.902344 59.347656 10.8125 C 59.347656 10.792969 59.347656 10.777344 59.347656 10.757812 C 59.347656 10.695312 59.347656 10.636719 59.347656 10.578125 C 59.347656 10.535156 59.347656 10.492188 59.347656 10.449219 C 59.347656 10.332031 59.347656 10.214844 59.347656 10.097656 C 59.351562 9.972656 59.351562 9.851562 59.351562 9.730469 C 59.351562 9.496094 59.351562 9.265625 59.351562 9.035156 C 59.351562 8.769531 59.351562 8.507812 59.351562 8.242188 C 59.351562 7.703125 59.351562 7.160156 59.351562 6.617188 C 59.035156 6.617188 58.71875 6.617188 58.390625 6.617188 C 58.390625 6.371094 58.390625 6.125 58.390625 5.871094 C 58.914062 5.800781 58.914062 5.800781 59.449219 5.726562 C 59.480469 5.601562 59.515625 5.476562 59.550781 5.351562 C 59.574219 5.269531 59.59375 5.191406 59.617188 5.113281 C 59.652344 4.988281 59.6875 4.863281 59.722656 4.738281 C 59.75 4.640625 59.777344 4.539062 59.804688 4.4375 C 59.816406 4.398438 59.824219 4.359375 59.835938 4.324219 C 59.851562 4.269531 59.867188 4.214844 59.882812 4.160156 C 59.886719 4.144531 59.890625 4.128906 59.894531 4.113281 C 59.914062 4.046875 59.929688 3.984375 59.953125 3.921875 Z M 59.953125 3.921875 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 93.351562 5.554688 C 93.40625 5.59375 93.429688 5.617188 93.445312 5.679688 C 93.449219 5.75 93.445312 5.8125 93.441406 5.878906 C 93.441406 5.90625 93.441406 5.929688 93.441406 5.957031 C 93.4375 6.015625 93.4375 6.070312 93.433594 6.128906 C 93.429688 6.273438 93.425781 6.417969 93.421875 6.5625 C 93.417969 6.617188 93.417969 6.671875 93.417969 6.726562 C 93.402344 7.175781 93.40625 7.625 93.40625 8.074219 C 93.40625 8.195312 93.40625 8.3125 93.40625 8.429688 C 93.40625 8.644531 93.40625 8.859375 93.40625 9.074219 C 93.40625 9.320312 93.40625 9.570312 93.40625 9.816406 C 93.40625 10.320312 93.40625 10.828125 93.40625 11.332031 C 93.425781 11.335938 93.449219 11.339844 93.46875 11.34375 C 93.542969 11.355469 93.613281 11.371094 93.6875 11.382812 C 93.734375 11.390625 93.785156 11.398438 93.832031 11.40625 C 93.859375 11.414062 93.890625 11.417969 93.921875 11.425781 C 93.949219 11.429688 93.976562 11.433594 94.003906 11.4375 C 94.070312 11.449219 94.136719 11.464844 94.199219 11.476562 C 94.199219 11.675781 94.199219 11.875 94.199219 12.078125 C 93.105469 12.078125 92.015625 12.078125 90.886719 12.078125 C 90.886719 11.878906 90.886719 11.679688 90.886719 11.476562 C 90.988281 11.457031 91.085938 11.433594 91.1875 11.414062 C 91.222656 11.40625 91.253906 11.402344 91.289062 11.394531 C 91.339844 11.382812 91.386719 11.375 91.4375 11.363281 C 91.480469 11.355469 91.480469 11.355469 91.527344 11.34375 C 91.601562 11.332031 91.675781 11.332031 91.753906 11.332031 C 91.753906 10.894531 91.753906 10.457031 91.753906 10.023438 C 91.753906 9.820312 91.753906 9.617188 91.753906 9.414062 C 91.753906 9.234375 91.753906 9.058594 91.753906 8.882812 C 91.753906 8.789062 91.753906 8.695312 91.753906 8.601562 C 91.753906 8.066406 91.746094 7.535156 91.726562 7 C 91.683594 6.996094 91.683594 6.996094 91.636719 6.988281 C 91.539062 6.976562 91.4375 6.964844 91.339844 6.953125 C 91.296875 6.945312 91.25 6.941406 91.207031 6.933594 C 91.144531 6.925781 91.082031 6.917969 91.019531 6.910156 C 90.988281 6.90625 90.988281 6.90625 90.957031 6.902344 C 90.820312 6.882812 90.820312 6.882812 90.792969 6.855469 C 90.789062 6.816406 90.789062 6.777344 90.789062 6.738281 C 90.789062 6.714844 90.789062 6.691406 90.789062 6.667969 C 90.789062 6.640625 90.789062 6.617188 90.789062 6.589844 C 90.789062 6.566406 90.789062 6.539062 90.789062 6.515625 C 90.792969 6.453125 90.792969 6.390625 90.792969 6.328125 C 90.96875 6.253906 91.148438 6.1875 91.328125 6.125 C 91.355469 6.117188 91.382812 6.105469 91.414062 6.097656 C 91.503906 6.066406 91.59375 6.03125 91.683594 6 C 91.808594 5.957031 91.929688 5.914062 92.054688 5.871094 C 92.070312 5.867188 92.085938 5.859375 92.101562 5.855469 C 92.285156 5.792969 92.46875 5.726562 92.652344 5.660156 C 92.667969 5.652344 92.6875 5.644531 92.703125 5.640625 C 92.78125 5.609375 92.859375 5.582031 92.9375 5.554688 C 92.976562 5.539062 92.976562 5.539062 93.019531 5.523438 C 93.050781 5.511719 93.050781 5.511719 93.082031 5.5 C 93.1875 5.476562 93.261719 5.503906 93.351562 5.554688 Z M 93.351562 5.554688 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 42.214844 5.652344 C 42.214844 7.542969 42.214844 9.433594 42.214844 11.378906 C 42.535156 11.441406 42.535156 11.441406 42.863281 11.5 C 42.917969 11.515625 42.976562 11.53125 43.03125 11.550781 C 43.03125 11.738281 43.03125 11.929688 43.03125 12.125 C 41.929688 12.125 40.832031 12.125 39.695312 12.125 C 39.695312 11.9375 39.695312 11.746094 39.695312 11.550781 C 39.875 11.5 40.054688 11.460938 40.234375 11.425781 C 40.265625 11.417969 40.265625 11.417969 40.296875 11.410156 C 40.316406 11.40625 40.335938 11.402344 40.355469 11.398438 C 40.375 11.394531 40.394531 11.390625 40.410156 11.386719 C 40.46875 11.378906 40.523438 11.378906 40.585938 11.378906 C 40.582031 10.886719 40.578125 10.390625 40.574219 9.898438 C 40.574219 9.667969 40.574219 9.4375 40.570312 9.207031 C 40.570312 9.007812 40.570312 8.808594 40.570312 8.605469 C 40.566406 8.5 40.566406 8.394531 40.566406 8.289062 C 40.566406 8.191406 40.566406 8.089844 40.566406 7.988281 C 40.566406 7.953125 40.566406 7.917969 40.566406 7.878906 C 40.5625 7.683594 40.558594 7.488281 40.550781 7.292969 C 40.546875 7.273438 40.546875 7.253906 40.546875 7.234375 C 40.542969 7.140625 40.542969 7.140625 40.511719 7.050781 C 40.445312 7.035156 40.378906 7.027344 40.308594 7.019531 C 40.289062 7.015625 40.269531 7.011719 40.25 7.011719 C 40.183594 7.003906 40.121094 6.996094 40.054688 6.988281 C 40.011719 6.980469 39.96875 6.976562 39.921875 6.96875 C 39.816406 6.957031 39.707031 6.941406 39.601562 6.929688 C 39.601562 6.746094 39.601562 6.5625 39.601562 6.375 C 39.964844 6.242188 40.328125 6.109375 40.695312 5.980469 C 40.777344 5.953125 40.859375 5.921875 40.945312 5.894531 C 41 5.875 41.054688 5.855469 41.109375 5.835938 C 41.246094 5.789062 41.386719 5.738281 41.523438 5.6875 C 41.550781 5.675781 41.578125 5.667969 41.605469 5.65625 C 41.660156 5.636719 41.710938 5.617188 41.761719 5.597656 C 41.785156 5.589844 41.808594 5.578125 41.835938 5.570312 C 41.863281 5.558594 41.863281 5.558594 41.894531 5.546875 C 42.027344 5.515625 42.09375 5.585938 42.214844 5.652344 Z M 42.214844 5.652344 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 8.640625 9.261719 C 8.972656 9.519531 9.191406 9.859375 9.277344 10.273438 C 9.328125 10.675781 9.265625 11.089844 9.019531 11.421875 C 8.734375 11.769531 8.371094 12.007812 7.917969 12.058594 C 7.476562 12.09375 7.078125 11.957031 6.742188 11.667969 C 6.71875 11.648438 6.71875 11.648438 6.695312 11.628906 C 6.421875 11.378906 6.261719 10.992188 6.234375 10.628906 C 6.226562 10.179688 6.355469 9.789062 6.664062 9.457031 C 7.191406 8.921875 8.019531 8.84375 8.640625 9.261719 Z M 8.640625 9.261719 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 2.855469 4.089844 C 2.941406 4.15625 3.019531 4.230469 3.097656 4.308594 C 3.113281 4.324219 3.128906 4.339844 3.148438 4.359375 C 3.414062 4.640625 3.542969 5.027344 3.539062 5.410156 C 3.519531 5.851562 3.332031 6.21875 3.015625 6.527344 C 2.707031 6.792969 2.304688 6.921875 1.898438 6.898438 C 1.578125 6.871094 1.308594 6.769531 1.054688 6.570312 C 1.03125 6.546875 1.03125 6.546875 1.003906 6.527344 C 0.699219 6.277344 0.527344 5.898438 0.484375 5.511719 C 0.453125 5.121094 0.558594 4.730469 0.804688 4.425781 C 1.003906 4.191406 1.226562 4.03125 1.511719 3.921875 C 1.53125 3.914062 1.550781 3.90625 1.570312 3.898438 C 1.988281 3.757812 2.496094 3.84375 2.855469 4.089844 Z M 2.855469 4.089844 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 2.960938 11.683594 C 3.269531 11.949219 3.492188 12.316406 3.53125 12.726562 C 3.558594 13.152344 3.449219 13.550781 3.171875 13.878906 C 2.875 14.203125 2.519531 14.375 2.082031 14.417969 C 1.671875 14.433594 1.28125 14.28125 0.972656 14.011719 C 0.660156 13.714844 0.488281 13.324219 0.476562 12.890625 C 0.480469 12.53125 0.59375 12.214844 0.816406 11.933594 C 0.828125 11.917969 0.839844 11.902344 0.851562 11.882812 C 1.078125 11.597656 1.433594 11.421875 1.785156 11.363281 C 2.207031 11.316406 2.628906 11.417969 2.960938 11.683594 Z M 2.960938 11.683594 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 14.449219 4.167969 C 14.507812 4.222656 14.5625 4.273438 14.617188 4.332031 C 14.628906 4.34375 14.640625 4.355469 14.65625 4.367188 C 14.914062 4.632812 15.015625 5.023438 15.03125 5.378906 C 15.019531 5.734375 14.902344 6.046875 14.6875 6.328125 C 14.675781 6.34375 14.664062 6.359375 14.652344 6.378906 C 14.410156 6.679688 14.042969 6.851562 13.664062 6.898438 C 13.242188 6.925781 12.84375 6.816406 12.523438 6.535156 C 12.484375 6.5 12.445312 6.460938 12.40625 6.425781 C 12.394531 6.410156 12.378906 6.394531 12.363281 6.378906 C 12.085938 6.089844 11.988281 5.707031 11.992188 5.316406 C 12.003906 4.914062 12.167969 4.53125 12.457031 4.25 C 13.023438 3.75 13.847656 3.714844 14.449219 4.167969 Z M 14.449219 4.167969 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 42.046875 2.648438 C 42.253906 2.816406 42.375 3.03125 42.40625 3.296875 C 42.433594 3.558594 42.351562 3.808594 42.191406 4.019531 C 42.007812 4.214844 41.785156 4.351562 41.507812 4.363281 C 41.46875 4.363281 41.429688 4.363281 41.390625 4.363281 C 41.371094 4.363281 41.351562 4.363281 41.332031 4.363281 C 41.058594 4.355469 40.832031 4.273438 40.625 4.089844 C 40.476562 3.933594 40.359375 3.734375 40.34375 3.511719 C 40.34375 3.496094 40.339844 3.480469 40.339844 3.460938 C 40.328125 3.230469 40.390625 2.992188 40.542969 2.8125 C 40.554688 2.796875 40.570312 2.78125 40.585938 2.765625 C 40.597656 2.75 40.613281 2.734375 40.632812 2.714844 C 41.019531 2.339844 41.621094 2.332031 42.046875 2.648438 Z M 42.046875 2.648438 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(10.196079%,11.372549%,14.117648%);fill-opacity:1;",
-							"d": "M 93.210938 2.566406 C 93.453125 2.757812 93.570312 2.96875 93.609375 3.273438 C 93.621094 3.53125 93.550781 3.773438 93.378906 3.972656 C 93.367188 3.988281 93.351562 4.003906 93.335938 4.019531 C 93.316406 4.039062 93.316406 4.039062 93.296875 4.058594 C 93.066406 4.28125 92.78125 4.316406 92.476562 4.3125 C 92.355469 4.308594 92.25 4.285156 92.136719 4.234375 C 92.117188 4.226562 92.101562 4.21875 92.082031 4.210938 C 91.871094 4.105469 91.703125 3.9375 91.605469 3.722656 C 91.515625 3.449219 91.515625 3.171875 91.632812 2.90625 C 91.773438 2.652344 92 2.484375 92.277344 2.402344 C 92.605469 2.324219 92.933594 2.375 93.210938 2.566406 Z M 93.210938 2.566406 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 8.320312 5.960938 C 8.539062 6.117188 8.664062 6.320312 8.726562 6.582031 C 8.769531 6.839844 8.710938 7.089844 8.574219 7.3125 C 8.410156 7.535156 8.207031 7.65625 7.945312 7.722656 C 7.621094 7.753906 7.355469 7.6875 7.105469 7.484375 C 6.921875 7.3125 6.8125 7.078125 6.792969 6.832031 C 6.789062 6.535156 6.871094 6.28125 7.078125 6.0625 C 7.4375 5.738281 7.914062 5.710938 8.320312 5.960938 Z M 8.320312 5.960938 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.431373%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 14.09375 0.820312 C 14.289062 0.96875 14.421875 1.179688 14.472656 1.417969 C 14.5 1.714844 14.464844 1.980469 14.273438 2.214844 C 14.082031 2.421875 13.890625 2.558594 13.605469 2.582031 C 13.320312 2.585938 13.078125 2.535156 12.863281 2.332031 C 12.660156 2.128906 12.550781 1.910156 12.542969 1.621094 C 12.546875 1.332031 12.644531 1.117188 12.839844 0.910156 C 13.199219 0.574219 13.6875 0.5625 14.09375 0.820312 Z M 14.09375 0.820312 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 2.574219 0.808594 C 2.769531 0.972656 2.925781 1.164062 2.976562 1.417969 C 2.996094 1.71875 2.972656 1.976562 2.777344 2.214844 C 2.585938 2.421875 2.394531 2.558594 2.109375 2.582031 C 1.824219 2.585938 1.582031 2.53125 1.367188 2.332031 C 1.226562 2.195312 1.136719 2.066406 1.078125 1.875 C 1.074219 1.863281 1.070312 1.847656 1.066406 1.832031 C 1.015625 1.570312 1.054688 1.3125 1.195312 1.089844 C 1.515625 0.644531 2.101562 0.484375 2.574219 0.808594 Z M 2.574219 0.808594 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 2.550781 8.316406 C 2.582031 8.34375 2.609375 8.371094 2.640625 8.398438 C 2.65625 8.414062 2.671875 8.429688 2.691406 8.445312 C 2.878906 8.640625 2.960938 8.847656 2.964844 9.121094 C 2.960938 9.398438 2.882812 9.613281 2.6875 9.816406 C 2.5 9.996094 2.257812 10.109375 1.992188 10.105469 C 1.695312 10.085938 1.449219 9.972656 1.246094 9.753906 C 1.074219 9.535156 1.003906 9.277344 1.03125 9 C 1.089844 8.710938 1.214844 8.484375 1.453125 8.3125 C 1.789062 8.105469 2.222656 8.085938 2.550781 8.316406 Z M 2.550781 8.316406 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 14.058594 8.34375 C 14.269531 8.496094 14.425781 8.714844 14.472656 8.972656 C 14.496094 9.300781 14.441406 9.542969 14.238281 9.804688 C 14.148438 9.90625 14.042969 9.972656 13.921875 10.03125 C 13.894531 10.046875 13.894531 10.046875 13.867188 10.058594 C 13.660156 10.144531 13.386719 10.136719 13.175781 10.066406 C 12.929688 9.960938 12.714844 9.769531 12.613281 9.519531 C 12.601562 9.484375 12.585938 9.445312 12.574219 9.40625 C 12.570312 9.390625 12.566406 9.378906 12.5625 9.363281 C 12.511719 9.109375 12.550781 8.855469 12.679688 8.632812 C 12.824219 8.421875 13.003906 8.277344 13.246094 8.203125 C 13.261719 8.199219 13.277344 8.195312 13.292969 8.191406 C 13.570312 8.136719 13.820312 8.195312 14.058594 8.34375 Z M 14.058594 8.34375 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 8.375 13.523438 C 8.605469 13.730469 8.71875 13.984375 8.742188 14.289062 C 8.734375 14.554688 8.621094 14.789062 8.445312 14.984375 C 8.25 15.164062 7.996094 15.25 7.734375 15.253906 C 7.46875 15.242188 7.25 15.136719 7.0625 14.953125 C 6.863281 14.730469 6.789062 14.488281 6.792969 14.195312 C 6.832031 13.894531 6.964844 13.664062 7.199219 13.472656 C 7.582031 13.230469 8.015625 13.25 8.375 13.523438 Z M 8.375 13.523438 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 14.027344 12.066406 C 14.25 12.234375 14.421875 12.449219 14.472656 12.726562 C 14.492188 13.019531 14.464844 13.269531 14.273438 13.5 C 14.089844 13.699219 13.886719 13.84375 13.609375 13.863281 C 13.3125 13.867188 13.058594 13.800781 12.832031 13.589844 C 12.730469 13.480469 12.65625 13.371094 12.601562 13.234375 C 12.589844 13.207031 12.582031 13.183594 12.570312 13.15625 C 12.519531 12.886719 12.539062 12.625 12.679688 12.386719 C 12.984375 11.945312 13.558594 11.765625 14.027344 12.066406 Z M 14.027344 12.066406 "
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"style": " stroke:none;fill-rule:nonzero;fill:rgb(98.823529%,73.725492%,19.607843%);fill-opacity:1;",
-							"d": "M 8.269531 2.203125 C 8.492188 2.371094 8.652344 2.574219 8.703125 2.855469 C 8.738281 3.113281 8.695312 3.371094 8.535156 3.582031 C 8.355469 3.796875 8.136719 3.949219 7.851562 3.976562 C 7.539062 3.988281 7.289062 3.894531 7.054688 3.679688 C 6.851562 3.449219 6.796875 3.222656 6.808594 2.914062 C 6.824219 2.671875 6.929688 2.480469 7.105469 2.308594 C 7.445312 2.039062 7.886719 1.964844 8.269531 2.203125 Z M 8.269531 2.203125 "
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "WeaveIconBig"
-}
diff --git a/app/components/base/icons/src/public/tracing/WeaveIconBig.tsx b/app/components/base/icons/src/public/tracing/WeaveIconBig.tsx
deleted file mode 100644
index 1d2bb9f..0000000
--- a/app/components/base/icons/src/public/tracing/WeaveIconBig.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './WeaveIconBig.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconBaseProps, IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = React.forwardRef<React.MutableRefObject<SVGElement>, Omit<IconBaseProps, 'data'>>((
-  props,
-  ref,
-) => <IconBase {...props} ref={ref} data={data as IconData} />)
-
-Icon.displayName = 'WeaveIconBig'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/line/editor/Collapse.json b/app/components/base/icons/src/vender/line/editor/Collapse.json
deleted file mode 100644
index 5e3cf08..0000000
--- a/app/components/base/icons/src/vender/line/editor/Collapse.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "16",
-			"height": "16",
-			"viewBox": "0 0 16 16",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Icon L"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Vector"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M2.66602 11.3333H0.666016L3.33268 8.66667L5.99935 11.3333H3.99935L3.99935 14H2.66602L2.66602 11.3333Z",
-									"fill": "currentColor"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M2.66602 4.66667L2.66602 2L3.99935 2L3.99935 4.66667L5.99935 4.66667L3.33268 7.33333L0.666016 4.66667L2.66602 4.66667Z",
-									"fill": "currentColor"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M7.33268 2.66667H13.9993V4H7.33268V2.66667ZM7.33268 12H13.9993V13.3333H7.33268V12ZM5.99935 7.33333H13.9993V8.66667H5.99935V7.33333Z",
-									"fill": "currentColor"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "Collapse"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/line/editor/Collapse.tsx b/app/components/base/icons/src/vender/line/editor/Collapse.tsx
deleted file mode 100644
index 6f43dde..0000000
--- a/app/components/base/icons/src/vender/line/editor/Collapse.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Collapse.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Collapse'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/other/AnthropicText.json b/app/components/base/icons/src/vender/other/AnthropicText.json
deleted file mode 100644
index a65ef47..0000000
--- a/app/components/base/icons/src/vender/other/AnthropicText.json
+++ /dev/null
@@ -1,539 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "90",
-			"height": "20",
-			"viewBox": "0 0 90 20",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"clip-path": "url(#clip0_8587_60274)"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "mask",
-						"attributes": {
-							"id": "mask0_8587_60274",
-							"style": "mask-type:luminance",
-							"maskUnits": "userSpaceOnUse",
-							"x": "0",
-							"y": "4",
-							"width": "90",
-							"height": "11"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M89.375 4.99805H0V14.998H89.375V4.99805Z",
-									"fill": "currentColor"
-								},
-								"children": []
-							}
-						]
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"mask": "url(#mask0_8587_60274)"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "mask",
-								"attributes": {
-									"id": "mask1_8587_60274",
-									"style": "mask-type:luminance",
-									"maskUnits": "userSpaceOnUse",
-									"x": "0",
-									"y": "4",
-									"width": "90",
-									"height": "11"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "path",
-										"attributes": {
-											"d": "M0 4.99609H89.375V14.9961H0V4.99609Z",
-											"fill": "currentColor"
-										},
-										"children": []
-									}
-								]
-							},
-							{
-								"type": "element",
-								"name": "g",
-								"attributes": {
-									"mask": "url(#mask1_8587_60274)"
-								},
-								"children": [
-									{
-										"type": "element",
-										"name": "mask",
-										"attributes": {
-											"id": "mask2_8587_60274",
-											"style": "mask-type:luminance",
-											"maskUnits": "userSpaceOnUse",
-											"x": "0",
-											"y": "4",
-											"width": "90",
-											"height": "11"
-										},
-										"children": [
-											{
-												"type": "element",
-												"name": "path",
-												"attributes": {
-													"d": "M0 4.99414H89.375V14.9941H0V4.99414Z",
-													"fill": "currentColor"
-												},
-												"children": []
-											}
-										]
-									},
-									{
-										"type": "element",
-										"name": "g",
-										"attributes": {
-											"mask": "url(#mask2_8587_60274)"
-										},
-										"children": [
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask3_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask3_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M18.1273 11.9244L13.7773 5.15625H11.4297V14.825H13.4321V8.05688L17.7821 14.825H20.1297V5.15625H18.1273V11.9244Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask4_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask4_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M21.7969 7.02094H25.0423V14.825H27.1139V7.02094H30.3594V5.15625H21.7969V7.02094Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask5_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask5_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M38.6442 9.00994H34.0871V5.15625H32.0156V14.825H34.0871V10.8746H38.6442V14.825H40.7156V5.15625H38.6442V9.00994Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask6_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask6_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M45.3376 7.02094H47.893C48.9152 7.02094 49.4539 7.39387 49.4539 8.09831C49.4539 8.80275 48.9152 9.17569 47.893 9.17569H45.3376V7.02094ZM51.5259 8.09831C51.5259 6.27506 50.186 5.15625 47.9897 5.15625H43.2656V14.825H45.3376V11.0404H47.6443L49.7164 14.825H52.0094L49.715 10.7521C50.8666 10.3094 51.5259 9.37721 51.5259 8.09831Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask7_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask7_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M57.8732 13.0565C56.2438 13.0565 55.2496 11.8963 55.2496 10.004C55.2496 8.08416 56.2438 6.92394 57.8732 6.92394C59.4887 6.92394 60.4691 8.08416 60.4691 10.004C60.4691 11.8963 59.4887 13.0565 57.8732 13.0565ZM57.8732 4.99023C55.0839 4.99023 53.1094 7.06206 53.1094 10.004C53.1094 12.9184 55.0839 14.9902 57.8732 14.9902C60.6486 14.9902 62.6094 12.9184 62.6094 10.004C62.6094 7.06206 60.6486 4.99023 57.8732 4.99023Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask8_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask8_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M69.1794 9.45194H66.6233V7.02094H69.1794C70.2019 7.02094 70.7407 7.43532 70.7407 8.23644C70.7407 9.03756 70.2019 9.45194 69.1794 9.45194ZM69.2762 5.15625H64.5508V14.825H66.6233V11.3166H69.2762C71.473 11.3166 72.8133 10.1564 72.8133 8.23644C72.8133 6.3165 71.473 5.15625 69.2762 5.15625Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask9_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask9_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M86.8413 11.5786C86.4823 12.5179 85.7642 13.0565 84.7837 13.0565C83.1542 13.0565 82.16 11.8963 82.16 10.004C82.16 8.08416 83.1542 6.92394 84.7837 6.92394C85.7642 6.92394 86.4823 7.46261 86.8413 8.40183H89.0369C88.4984 6.33002 86.8827 4.99023 84.7837 4.99023C81.9942 4.99023 80.0195 7.06206 80.0195 10.004C80.0195 12.9184 81.9942 14.9902 84.7837 14.9902C86.8965 14.9902 88.5122 13.6366 89.0508 11.5786H86.8413Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask10_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask10_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M73.6484 5.15625L77.5033 14.825H79.6172L75.7624 5.15625H73.6484Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "mask",
-												"attributes": {
-													"id": "mask11_8587_60274",
-													"style": "mask-type:luminance",
-													"maskUnits": "userSpaceOnUse",
-													"x": "0",
-													"y": "4",
-													"width": "90",
-													"height": "11"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M0 4.99219H89.375V14.9922H0V4.99219Z",
-															"fill": "currentColor"
-														},
-														"children": []
-													}
-												]
-											},
-											{
-												"type": "element",
-												"name": "g",
-												"attributes": {
-													"mask": "url(#mask11_8587_60274)"
-												},
-												"children": [
-													{
-														"type": "element",
-														"name": "path",
-														"attributes": {
-															"d": "M3.64038 10.9989L4.95938 7.60106L6.27838 10.9989H3.64038ZM3.85422 5.15625L0 14.825H2.15505L2.9433 12.7946H6.97558L7.76371 14.825H9.91875L6.06453 5.15625H3.85422Z",
-															"fill": "currentColor",
-															"fill-opacity": "0.92"
-														},
-														"children": []
-													}
-												]
-											}
-										]
-									}
-								]
-							}
-						]
-					}
-				]
-			},
-			{
-				"type": "element",
-				"name": "defs",
-				"attributes": {},
-				"children": [
-					{
-						"type": "element",
-						"name": "clipPath",
-						"attributes": {
-							"id": "clip0_8587_60274"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "rect",
-								"attributes": {
-									"width": "89.375",
-									"height": "10",
-									"fill": "white",
-									"transform": "translate(0 5)"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "AnthropicText"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/other/AnthropicText.tsx b/app/components/base/icons/src/vender/other/AnthropicText.tsx
deleted file mode 100644
index be9ebd3..0000000
--- a/app/components/base/icons/src/vender/other/AnthropicText.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './AnthropicText.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'AnthropicText'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/other/Group.json b/app/components/base/icons/src/vender/other/Group.json
deleted file mode 100644
index 078febb..0000000
--- a/app/components/base/icons/src/vender/other/Group.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "14",
-			"height": "16",
-			"viewBox": "0 0 14 16",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Group"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M5.6475 8.0115L0.333496 5.05884V11.3335C0.333491 11.4524 0.365258 11.569 0.425506 11.6715C0.485754 11.7739 0.572294 11.8584 0.676163 11.9162L6.3335 15.0588V9.17684C6.33344 8.93907 6.26981 8.70565 6.14919 8.50075C6.02857 8.29586 5.85536 8.12694 5.6475 8.0115Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_2",
-							"d": "M7.66699 9.17684V15.0588L13.3243 11.9162C13.4282 11.8584 13.5147 11.7739 13.575 11.6715C13.6352 11.569 13.667 11.4524 13.667 11.3335V5.05884L8.35299 8.0115C8.14513 8.12694 7.97192 8.29586 7.8513 8.50075C7.73068 8.70565 7.66705 8.93907 7.66699 9.17684Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_3",
-							"d": "M10.1913 2.34351C9.804 3.33351 8.588 4.00017 7 4.00017C5.412 4.00017 4.196 3.33351 3.80867 2.34351L1 3.90417L6.35267 6.87817C6.5507 6.98815 6.77348 7.04586 7 7.04586C7.22652 7.04586 7.4493 6.98815 7.64733 6.87817L13 3.90417L10.1913 2.34351Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_4",
-							"d": "M7 2.66675C8.10457 2.66675 9 2.21903 9 1.66675C9 1.11446 8.10457 0.666748 7 0.666748C5.89543 0.666748 5 1.11446 5 1.66675C5 2.21903 5.89543 2.66675 7 2.66675Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "Group"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/other/Group.tsx b/app/components/base/icons/src/vender/other/Group.tsx
deleted file mode 100644
index 7b72300..0000000
--- a/app/components/base/icons/src/vender/other/Group.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Group.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Group'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/other/Openai.json b/app/components/base/icons/src/vender/other/Openai.json
deleted file mode 100644
index 236f66f..0000000
--- a/app/components/base/icons/src/vender/other/Openai.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "80",
-			"height": "22",
-			"viewBox": "0 0 80 22",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M25.1152 10.5767C25.1152 14.1738 27.4253 16.6818 30.6264 16.6818C33.8274 16.6818 36.1375 14.1738 36.1375 10.5767C36.1375 6.97961 33.8274 4.47156 30.6264 4.47156C27.4253 4.47156 25.1152 6.97961 25.1152 10.5767ZM34.0254 10.5767C34.0254 13.1507 32.6229 14.8173 30.6264 14.8173C28.6298 14.8173 27.2273 13.1507 27.2273 10.5767C27.2273 8.00263 28.6298 6.3361 30.6264 6.3361C32.6229 6.3361 34.0254 8.00263 34.0254 10.5767Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			},
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M42.0868 16.6819C44.5124 16.6819 45.8984 14.6358 45.8984 12.1773C45.8984 9.71871 44.5124 7.67267 42.0868 7.67267C40.9648 7.67267 40.1398 8.11818 39.5953 8.76169V7.83767H37.6152V19.4704H39.5953V15.5928C40.1398 16.2364 40.9648 16.6819 42.0868 16.6819ZM39.5458 11.9298C39.5458 10.2962 40.4698 9.40521 41.6908 9.40521C43.1264 9.40521 43.9019 10.5272 43.9019 12.1773C43.9019 13.8273 43.1264 14.9493 41.6908 14.9493C40.4698 14.9493 39.5458 14.0418 39.5458 12.4413V11.9298Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			},
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M51.2545 16.6819C52.987 16.6819 54.3565 15.7743 54.967 14.2563L53.2675 13.6128C53.0035 14.5038 52.228 14.9988 51.2545 14.9988C49.9839 14.9988 49.0929 14.0913 48.9444 12.6063H55.0165V11.9463C55.0165 9.57021 53.68 7.67267 51.172 7.67267C48.6639 7.67267 47.0469 9.63621 47.0469 12.1773C47.0469 14.8503 48.7794 16.6819 51.2545 16.6819ZM51.1555 9.3392C52.4095 9.3392 53.0035 10.1642 53.02 11.1212H49.0434C49.3404 9.94972 50.1324 9.3392 51.1555 9.3392Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			},
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M56.5039 16.5004H58.484V11.4182C58.484 10.1807 59.3915 9.52071 60.2825 9.52071C61.3715 9.52071 61.8005 10.2962 61.8005 11.3687V16.5004H63.7806V10.7912C63.7806 8.9267 62.6915 7.67267 60.8765 7.67267C59.7545 7.67267 58.979 8.18418 58.484 8.76169V7.83767H56.5039V16.5004Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			},
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M69.5799 4.65308L65.0918 16.5003H67.1873L68.1939 13.7943H73.309L74.332 16.5003H76.4605L71.9724 4.65308H69.5799ZM70.7349 6.99613L72.616 11.9462H68.8869L70.7349 6.99613Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			},
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M79.8581 4.6875H77.7461V16.5348H79.8581V4.6875Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			},
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M20.2769 9.00436C20.776 7.50627 20.6041 5.86517 19.8059 4.50251C18.6055 2.41247 16.1924 1.3372 13.8356 1.84321C12.7871 0.662057 11.2808 -0.00964523 9.70154 -2.00271e-05C7.29248 -0.00552014 5.155 1.54551 4.41386 3.83769C2.86626 4.15463 1.53042 5.12334 0.748717 6.49631C-0.460621 8.58085 -0.184928 11.2085 1.43073 12.9961C0.931596 14.4942 1.10348 16.1353 1.90168 17.4979C3.10208 19.588 5.51526 20.6632 7.87206 20.1572C8.91983 21.3384 10.4269 22.0101 12.0061 21.9998C14.4165 22.006 16.5547 20.4535 17.2958 18.1593C18.8434 17.8424 20.1793 16.8737 20.961 15.5007C22.1689 13.4161 21.8925 10.7905 20.2776 9.00298L20.2769 9.00436ZM12.0075 20.5622C11.0429 20.5635 10.1085 20.226 9.36809 19.6079C9.40178 19.59 9.46022 19.5577 9.49803 19.5343L13.8789 17.0043C14.103 16.8771 14.2405 16.6385 14.2391 16.3807V10.2048L16.0906 11.2738C16.1105 11.2835 16.1236 11.3027 16.1264 11.3247V16.4391C16.1236 18.7134 14.2818 20.5574 12.0075 20.5622ZM3.14952 16.7788C2.6662 15.9441 2.49225 14.9658 2.65795 14.0163C2.69026 14.0356 2.74732 14.0707 2.78789 14.094L7.16873 16.6241C7.3908 16.754 7.6658 16.754 7.88856 16.6241L13.2367 13.5358V15.6739C13.2381 15.6959 13.2278 15.7173 13.2106 15.731L8.78233 18.2879C6.80985 19.4236 4.29079 18.7485 3.15021 16.7788H3.14952ZM1.99656 7.21613C2.47782 6.38012 3.23752 5.74073 4.14229 5.40866C4.14229 5.44647 4.14023 5.51316 4.14023 5.55991V10.6207C4.13885 10.8778 4.27636 11.1164 4.4998 11.2436L9.84798 14.3312L7.9965 15.4003C7.97794 15.4127 7.95456 15.4147 7.93393 15.4058L3.50496 12.8469C1.53661 11.707 0.86147 9.18861 1.99587 7.21682L1.99656 7.21613ZM17.2085 10.7561L11.8603 7.66783L13.7118 6.59943C13.7304 6.58706 13.7537 6.585 13.7744 6.59393L18.2033 9.1508C20.1751 10.29 20.851 12.8125 19.7118 14.7843C19.2298 15.6189 18.4708 16.2583 17.5667 16.5911V11.379C17.5688 11.1219 17.432 10.884 17.2092 10.7561H17.2085ZM19.0511 7.98271C19.0187 7.96278 18.9617 7.9284 18.9211 7.90502L14.5403 5.37497C14.3182 5.24503 14.0432 5.24503 13.8204 5.37497L8.47226 8.46329V6.32512C8.47088 6.30311 8.4812 6.2818 8.49838 6.26805L12.9267 3.71325C14.8991 2.57541 17.4209 3.25261 18.5581 5.22578C19.0387 6.05905 19.2126 7.03463 19.0497 7.98271H19.0511ZM7.46574 11.7936L5.61357 10.7245C5.59363 10.7149 5.58057 10.6956 5.57782 10.6736V5.55922C5.5792 3.28218 7.42655 1.43689 9.7036 1.43826C10.6668 1.43826 11.5991 1.77652 12.3395 2.39253C12.3058 2.41041 12.2481 2.44272 12.2096 2.46609L7.82874 4.99615C7.60461 5.12334 7.46711 5.36122 7.46849 5.61904L7.46574 11.7922V11.7936ZM8.47157 9.62519L10.8538 8.24947L13.236 9.6245V12.3752L10.8538 13.7503L8.47157 12.3752V9.62519Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "Openai"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/other/Openai.tsx b/app/components/base/icons/src/vender/other/Openai.tsx
deleted file mode 100644
index bcb7337..0000000
--- a/app/components/base/icons/src/vender/other/Openai.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Openai.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Openai'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/plugin/BoxSparkleFill.json b/app/components/base/icons/src/vender/plugin/BoxSparkleFill.json
deleted file mode 100644
index 3733f98..0000000
--- a/app/components/base/icons/src/vender/plugin/BoxSparkleFill.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "14",
-			"height": "14",
-			"viewBox": "0 0 14 14",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Icon"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"fill-rule": "evenodd",
-							"clip-rule": "evenodd",
-							"d": "M11.3891 2.41987C11.6635 2.58871 11.749 2.94802 11.5802 3.22239L10.3324 5.25H11.0833C11.4055 5.25 11.6667 5.51117 11.6667 5.83334V11.6667C11.6667 12.311 11.1444 12.8333 10.5 12.8333H3.50001C2.85568 12.8333 2.33334 12.311 2.33334 11.6667V5.83334C2.33334 5.51117 2.59451 5.25 2.91668 5.25H8.96252L10.5865 2.61094C10.7554 2.33657 11.1147 2.25102 11.3891 2.41987ZM5.83334 7.58334C5.51118 7.58334 5.25001 7.84449 5.25001 8.16667C5.25001 8.48884 5.51118 8.75 5.83334 8.75H8.16668C8.48885 8.75 8.75001 8.48884 8.75001 8.16667C8.75001 7.84449 8.48885 7.58334 8.16668 7.58334H5.83334Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Vector_2",
-							"opacity": "0.5"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M6.91257 1.79347C6.96898 1.76525 7.01477 1.71948 7.043 1.66303L7.32195 1.10508C7.42946 0.890105 7.73623 0.890105 7.84374 1.10508L8.12269 1.66303C8.15093 1.71948 8.19672 1.76525 8.25313 1.79347L8.81108 2.07245C9.0261 2.17994 9.0261 2.48672 8.81108 2.5942L8.25313 2.87318C8.19672 2.9014 8.15093 2.94717 8.12269 3.00362L7.84374 3.56158C7.73623 3.77655 7.42946 3.77655 7.32195 3.56158L7.043 3.00362C7.01477 2.94717 6.96898 2.9014 6.91257 2.87318L6.35461 2.5942C6.13965 2.48672 6.13965 2.17994 6.35461 2.07245L6.91257 1.79347Z",
-									"fill": "currentColor"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M3.80145 2.7657C3.85789 2.73748 3.90366 2.69171 3.93189 2.63526L4.11364 2.27174C4.22113 2.05677 4.5279 2.05677 4.63539 2.27174L4.81715 2.63526C4.84537 2.6917 4.89114 2.73748 4.94759 2.7657L5.3111 2.94745C5.52607 3.05494 5.52607 3.36172 5.3111 3.4692L4.94759 3.65096C4.89114 3.67919 4.84537 3.72495 4.81715 3.7814L4.63539 4.14491C4.5279 4.35988 4.22113 4.35988 4.11364 4.14491L3.93189 3.7814C3.90366 3.72495 3.85789 3.67919 3.80145 3.65096L3.43793 3.4692C3.22296 3.36172 3.22296 3.05494 3.43793 2.94745L3.80145 2.7657Z",
-									"fill": "currentColor"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "BoxSparkleFill"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/plugin/BoxSparkleFill.tsx b/app/components/base/icons/src/vender/plugin/BoxSparkleFill.tsx
deleted file mode 100644
index 500f3e7..0000000
--- a/app/components/base/icons/src/vender/plugin/BoxSparkleFill.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './BoxSparkleFill.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'BoxSparkleFill'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/plugin/LeftCorner.json b/app/components/base/icons/src/vender/plugin/LeftCorner.json
deleted file mode 100644
index d4cd0cd..0000000
--- a/app/components/base/icons/src/vender/plugin/LeftCorner.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "13",
-			"height": "20",
-			"viewBox": "0 0 13 20",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"id": "Shape",
-					"d": "M0 0H13V20C9.98017 20 7.26458 18.1615 6.14305 15.3576L0 0Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "LeftCorner"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/plugin/LeftCorner.tsx b/app/components/base/icons/src/vender/plugin/LeftCorner.tsx
deleted file mode 100644
index 93b6827..0000000
--- a/app/components/base/icons/src/vender/plugin/LeftCorner.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './LeftCorner.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'LeftCorner'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/plugin/index.ts b/app/components/base/icons/src/vender/plugin/index.ts
deleted file mode 100644
index 943c764..0000000
--- a/app/components/base/icons/src/vender/plugin/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as BoxSparkleFill } from './BoxSparkleFill'
-export { default as LeftCorner } from './LeftCorner'
diff --git a/app/components/base/icons/src/vender/solid/files/FileZip.json b/app/components/base/icons/src/vender/solid/files/FileZip.json
deleted file mode 100644
index 11fe823..0000000
--- a/app/components/base/icons/src/vender/solid/files/FileZip.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "16",
-			"height": "16",
-			"viewBox": "0 0 16 16",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Icon"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M3.99999 1.33325H7.99999V5.33325C7.99999 6.06963 8.59692 6.66659 9.33332 6.66659H13.3333V13.3333C13.3333 14.0697 12.7364 14.6666 12 14.6666H6.66666V13.3333H7.99999V11.9999H6.66666V10.6666H7.99999V9.33325H6.66666V7.99992H5.33332V9.33325H6.66666V10.6666H5.33332V11.9999H6.66666V13.3333H5.33332V14.6666H3.99999C3.26361 14.6666 2.66666 14.0697 2.66666 13.3333V2.66659C2.66666 1.93021 3.26361 1.33325 3.99999 1.33325Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					},
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector_2",
-							"opacity": "0.5",
-							"d": "M12.9428 4.99993C13.0415 5.09868 13.1232 5.21133 13.1859 5.33327H9.33334V1.48071C9.45528 1.54338 9.56794 1.62504 9.66668 1.72379L12.9428 4.99993Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "FileZip"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/solid/files/FileZip.tsx b/app/components/base/icons/src/vender/solid/files/FileZip.tsx
deleted file mode 100644
index fc22a3a..0000000
--- a/app/components/base/icons/src/vender/solid/files/FileZip.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './FileZip.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'FileZip'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/solid/general/ArrowDownRoundFill.json b/app/components/base/icons/src/vender/solid/general/ArrowDownRoundFill.json
deleted file mode 100644
index 4e7da3c..0000000
--- a/app/components/base/icons/src/vender/solid/general/ArrowDownRoundFill.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "16",
-			"height": "16",
-			"viewBox": "0 0 16 16",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "arrow-down-round-fill"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M6.02913 6.23572C5.08582 6.23572 4.56482 7.33027 5.15967 8.06239L7.13093 10.4885C7.57922 11.0403 8.42149 11.0403 8.86986 10.4885L10.8411 8.06239C11.4359 7.33027 10.9149 6.23572 9.97158 6.23572H6.02913Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "ArrowDownRoundFill"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/solid/general/ArrowDownRoundFill.tsx b/app/components/base/icons/src/vender/solid/general/ArrowDownRoundFill.tsx
deleted file mode 100644
index c766a72..0000000
--- a/app/components/base/icons/src/vender/solid/general/ArrowDownRoundFill.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './ArrowDownRoundFill.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'ArrowDownRoundFill'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/solid/general/Github.json b/app/components/base/icons/src/vender/solid/general/Github.json
deleted file mode 100644
index 46e6942..0000000
--- a/app/components/base/icons/src/vender/solid/general/Github.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "16",
-			"height": "16",
-			"viewBox": "0 0 16 16",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "Icon"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"d": "M8 1C4.1325 1 1 4.1325 1 8C1 11.0975 3.00375 13.7137 5.78625 14.6413C6.13625 14.7025 6.2675 14.4925 6.2675 14.3088C6.2675 14.1425 6.25875 13.5913 6.25875 13.005C4.5 13.3288 4.045 12.5763 3.905 12.1825C3.82625 11.9812 3.485 11.36 3.1875 11.1937C2.9425 11.0625 2.5925 10.7387 3.17875 10.73C3.73 10.7212 4.12375 11.2375 4.255 11.4475C4.885 12.5062 5.89125 12.2088 6.29375 12.025C6.355 11.57 6.53875 11.2638 6.74 11.0887C5.1825 10.9137 3.555 10.31 3.555 7.6325C3.555 6.87125 3.82625 6.24125 4.2725 5.75125C4.2025 5.57625 3.9575 4.85875 4.3425 3.89625C4.3425 3.89625 4.92875 3.7125 6.2675 4.61375C6.8275 4.45625 7.4225 4.3775 8.0175 4.3775C8.6125 4.3775 9.2075 4.45625 9.7675 4.61375C11.1063 3.70375 11.6925 3.89625 11.6925 3.89625C12.0775 4.85875 11.8325 5.57625 11.7625 5.75125C12.2087 6.24125 12.48 6.8625 12.48 7.6325C12.48 10.3187 10.8438 10.9137 9.28625 11.0887C9.54 11.3075 9.75875 11.7275 9.75875 12.3837C9.75875 13.32 9.75 14.0725 9.75 14.3088C9.75 14.4925 9.88125 14.7113 10.2312 14.6413C11.6209 14.1721 12.8284 13.279 13.6839 12.0877C14.5393 10.8963 14.9996 9.46668 15 8C15 4.1325 11.8675 1 8 1Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "Github"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/solid/general/Github.tsx b/app/components/base/icons/src/vender/solid/general/Github.tsx
deleted file mode 100644
index 9c6f418..0000000
--- a/app/components/base/icons/src/vender/solid/general/Github.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Github.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Github'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/solid/mediaAndDevices/AudioSupportIcon.json b/app/components/base/icons/src/vender/solid/mediaAndDevices/AudioSupportIcon.json
deleted file mode 100644
index cd3006b..0000000
--- a/app/components/base/icons/src/vender/solid/mediaAndDevices/AudioSupportIcon.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"xmlns": "http://www.w3.org/2000/svg",
-			"width": "12",
-			"height": "12",
-			"viewBox": "0 0 12 12",
-			"fill": "none"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M10.3567 3.56405L10.2334 3.84689C10.1432 4.05396 9.8568 4.05396 9.76655 3.84689L9.6433 3.56405C9.42355 3.05973 9.02775 2.6582 8.53385 2.43854L8.154 2.26961C7.94865 2.17826 7.94865 1.8794 8.154 1.78806L8.5126 1.62857C9.0192 1.40325 9.4221 0.986865 9.63805 0.465414L9.76465 0.159767C9.8529 -0.0532556 10.1471 -0.0532556 10.2353 0.159767L10.3619 0.465414C10.5779 0.986865 10.9808 1.40325 11.4874 1.62857L11.846 1.78806C12.0514 1.8794 12.0514 2.17826 11.846 2.26961L11.4662 2.43854C10.9723 2.6582 10.5764 3.05973 10.3567 3.56405ZM4.25 3H3.25V9H4.25V3ZM2 5H1V7H2V5ZM6.5 1H5.5V11H6.5V1ZM8.75 4H7.75V9H8.75V4ZM11 5H10V7H11V5Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "AudioSupportIcon"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/solid/mediaAndDevices/AudioSupportIcon.tsx b/app/components/base/icons/src/vender/solid/mediaAndDevices/AudioSupportIcon.tsx
deleted file mode 100644
index 663866f..0000000
--- a/app/components/base/icons/src/vender/solid/mediaAndDevices/AudioSupportIcon.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './AudioSupportIcon.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'AudioSupportIcon'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/solid/mediaAndDevices/DocumentSupportIcon.json b/app/components/base/icons/src/vender/solid/mediaAndDevices/DocumentSupportIcon.json
deleted file mode 100644
index 49cb6a5..0000000
--- a/app/components/base/icons/src/vender/solid/mediaAndDevices/DocumentSupportIcon.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"xmlns": "http://www.w3.org/2000/svg",
-			"width": "12",
-			"height": "12",
-			"viewBox": "0 0 12 12",
-			"fill": "none"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M10.5 4V10.4966C10.5 10.7751 10.2776 11 10.0033 11H1.9967C1.72248 11 1.5 10.778 1.5 10.5041V1.4959C1.5 1.22766 1.72435 1 2.00111 1H7.4984L10.5 4ZM9.5 4.5H7V2H2.5V10H9.5V4.5ZM4 3.5H5.5V4.5H4V3.5ZM4 5.5H8V6.5H4V5.5ZM4 7.5H8V8.5H4V7.5Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "DocumentSupportIcon"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/solid/mediaAndDevices/DocumentSupportIcon.tsx b/app/components/base/icons/src/vender/solid/mediaAndDevices/DocumentSupportIcon.tsx
deleted file mode 100644
index 5bad91e..0000000
--- a/app/components/base/icons/src/vender/solid/mediaAndDevices/DocumentSupportIcon.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './DocumentSupportIcon.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'DocumentSupportIcon'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/solid/mediaAndDevices/VideoSupportIcon.json b/app/components/base/icons/src/vender/solid/mediaAndDevices/VideoSupportIcon.json
deleted file mode 100644
index 4bc6881..0000000
--- a/app/components/base/icons/src/vender/solid/mediaAndDevices/VideoSupportIcon.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"xmlns": "http://www.w3.org/2000/svg",
-			"width": "12",
-			"height": "12",
-			"viewBox": "0 0 12 12",
-			"fill": "none"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "path",
-				"attributes": {
-					"d": "M10.2334 4.3469L10.3567 4.06406C10.5764 3.55974 10.9723 3.15821 11.4662 2.93854L11.846 2.76961C12.0514 2.67827 12.0514 2.37941 11.846 2.28806L11.4874 2.12857C10.9808 1.90326 10.5779 1.48687 10.3619 0.965415L10.2353 0.659765C10.1471 0.446745 9.8529 0.446745 9.76465 0.659765L9.63805 0.965415C9.4221 1.48687 9.0192 1.90326 8.5126 2.12857L8.154 2.28806C7.94865 2.37941 7.94865 2.67827 8.154 2.76961L8.53385 2.93854C9.02775 3.15821 9.42355 3.55974 9.6433 4.06406L9.76655 4.3469C9.8568 4.55396 10.1432 4.55396 10.2334 4.3469ZM1.4959 1.5H7V2.5H4V9.5H8V4.5H9V5.5H10H11V10.0033C11 10.2776 10.7723 10.5 10.5041 10.5H1.4959C1.22203 10.5 1 10.2775 1 10.0033V1.9967C1 1.72238 1.22766 1.5 1.4959 1.5ZM2 2.5V3.5H3V2.5H2ZM2 4.5V5.5H3V4.5H2ZM2 6.5V7.5H3V6.5H2ZM9 6.5V7.5H10V6.5H9ZM2 8.5V9.5H3V8.5H2ZM9 8.5V9.5H10V8.5H9Z",
-					"fill": "currentColor"
-				},
-				"children": []
-			}
-		]
-	},
-	"name": "VideoSupportIcon"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/solid/mediaAndDevices/VideoSupportIcon.tsx b/app/components/base/icons/src/vender/solid/mediaAndDevices/VideoSupportIcon.tsx
deleted file mode 100644
index 4822f83..0000000
--- a/app/components/base/icons/src/vender/solid/mediaAndDevices/VideoSupportIcon.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './VideoSupportIcon.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'VideoSupportIcon'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/workflow/Agent.json b/app/components/base/icons/src/vender/workflow/Agent.json
deleted file mode 100644
index e7ed193..0000000
--- a/app/components/base/icons/src/vender/workflow/Agent.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "16",
-			"height": "16",
-			"viewBox": "0 0 16 16",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "agent"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "g",
-						"attributes": {
-							"id": "Vector"
-						},
-						"children": [
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M14.7401 5.80454C14.5765 4.77996 14.1638 3.79808 13.5306 2.97273C12.8973 2.14738 12.0648 1.48568 11.1185 1.06589C10.1722 0.646098 9.12632 0.461106 8.08751 0.546487C7.05582 0.624753 6.04548 0.966277 5.17744 1.53548C4.3094 2.09758 3.58366 2.88024 3.09272 3.79808C2.59466 4.70881 2.33852 5.7405 2.33852 6.7793V7.22756L1.25703 9.3692C1.04357 9.80322 1.22145 10.3368 1.65547 10.5574L2.3314 10.8989V12.3006C2.3314 12.82 2.53063 13.3038 2.90061 13.6738C3.2706 14.0367 3.75442 14.243 4.27382 14.243H6.01702V14.7624C6.01702 15.1538 6.3372 15.4739 6.72853 15.4739C7.11986 15.4739 7.44004 15.1538 7.44004 14.7624V13.7094C7.44004 13.2185 7.04159 12.82 6.55065 12.82H4.27382C4.13864 12.82 4.00345 12.7631 3.91095 12.6706C3.81846 12.5781 3.76154 12.4429 3.76154 12.3077V10.5716C3.76154 10.2301 3.56943 9.92417 3.2706 9.77476L2.77254 9.52573L3.66904 7.73984C3.72596 7.61889 3.76154 7.4837 3.76154 7.34851V6.77219C3.76154 5.96818 3.96076 5.17129 4.34498 4.4669C4.72919 3.76251 5.28417 3.15772 5.9601 2.7237C6.63603 2.28968 7.41158 2.02643 8.20847 1.96239C9.00536 1.89835 9.81648 2.04066 10.5493 2.36795C11.2822 2.69524 11.9225 3.20042 12.4135 3.84077C12.8973 4.47402 13.2246 5.23533 13.3456 6.02511C13.4665 6.81488 13.3954 7.63312 13.125 8.38731C12.8617 9.12017 12.4206 9.78187 11.8585 10.3084C11.6735 10.4792 11.5668 10.7139 11.5668 10.9701V14.7624C11.5668 15.1538 11.887 15.4739 12.2783 15.4739C12.6696 15.4739 12.9898 15.1538 12.9898 14.7624V11.1978C13.6515 10.5432 14.1567 9.73918 14.4697 8.87114C14.8184 7.89637 14.918 6.83623 14.7615 5.81165L14.7401 5.80454Z",
-									"fill": "currentColor"
-								},
-								"children": []
-							},
-							{
-								"type": "element",
-								"name": "path",
-								"attributes": {
-									"d": "M10.8055 7.99599C10.8909 7.83234 10.962 7.66158 11.0189 7.4837H11.6522C12.0435 7.4837 12.3637 7.16352 12.3637 6.77219C12.3637 6.38086 12.0435 6.06068 11.6522 6.06068H11.0189C10.9691 5.8828 10.898 5.71204 10.8055 5.54839L11.2537 5.10014C11.5312 4.82266 11.5312 4.3744 11.2537 4.09692C10.9762 3.81943 10.528 3.81943 10.2505 4.09692L9.80225 4.54517C9.6386 4.45267 9.46784 4.38863 9.28996 4.33171V3.69847C9.28996 3.30714 8.96978 2.98696 8.57845 2.98696C8.18712 2.98696 7.86694 3.30714 7.86694 3.69847V4.33171C7.68907 4.38152 7.5183 4.45267 7.35466 4.54517L6.90641 4.09692C6.62892 3.81943 6.18067 3.81943 5.90318 4.09692C5.62569 4.3744 5.62569 4.82266 5.90318 5.10014L6.35143 5.54839C6.26605 5.71204 6.1949 5.8828 6.13798 6.06068H5.50473C5.1134 6.06068 4.79323 6.38086 4.79323 6.77219C4.79323 7.16352 5.1134 7.4837 5.50473 7.4837H6.13798C6.18778 7.66158 6.25893 7.83234 6.35143 7.99599L5.90318 8.44424C5.62569 8.72172 5.62569 9.16997 5.90318 9.44746C6.04548 9.58976 6.22336 9.6538 6.40835 9.6538C6.59334 9.6538 6.77122 9.58265 6.91352 9.44746L7.36177 8.99921C7.52542 9.08459 7.69618 9.15574 7.87406 9.21267V9.84591C7.87406 10.2372 8.19424 10.5574 8.58557 10.5574C8.9769 10.5574 9.29708 10.2372 9.29708 9.84591V9.21267C9.47496 9.16286 9.64572 9.09171 9.80936 8.99921L10.2576 9.44746C10.3999 9.58976 10.5778 9.6538 10.7628 9.6538C10.9478 9.6538 11.1257 9.58265 11.268 9.44746C11.5454 9.16997 11.5454 8.72172 11.268 8.44424L10.8197 7.99599H10.8055ZM7.44004 6.77219C7.44004 6.14606 7.94521 5.64089 8.57134 5.64089C9.19747 5.64089 9.70264 6.14606 9.70264 6.77219C9.70264 7.39832 9.19747 7.90349 8.57134 7.90349C7.94521 7.90349 7.44004 7.39832 7.44004 6.77219Z",
-									"fill": "currentColor"
-								},
-								"children": []
-							}
-						]
-					}
-				]
-			}
-		]
-	},
-	"name": "Agent"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/workflow/Agent.tsx b/app/components/base/icons/src/vender/workflow/Agent.tsx
deleted file mode 100644
index 58a2426..0000000
--- a/app/components/base/icons/src/vender/workflow/Agent.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Agent.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Agent'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/workflow/Loop.json b/app/components/base/icons/src/vender/workflow/Loop.json
deleted file mode 100644
index 65a70d8..0000000
--- a/app/components/base/icons/src/vender/workflow/Loop.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "18",
-			"height": "16",
-			"viewBox": "0 0 18 16",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "loop"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"fill-rule": "evenodd",
-							"clip-rule": "evenodd",
-							"d": "M2.02915 5.34506C3.50752 3.88498 5.9006 3.88498 7.37896 5.34506L8.99983 6.94588L10.6207 5.34506C12.0991 3.88499 14.4921 3.88498 15.9705 5.34506C17.454 6.81027 17.454 9.18971 15.9705 10.6549C14.4921 12.115 12.0991 12.115 10.6207 10.655L8.99983 9.05413L7.37896 10.655C5.9006 12.115 3.50753 12.115 2.02916 10.655C0.545627 9.18974 0.545611 6.81028 2.02915 5.34506ZM7.93251 8L6.32492 6.4123C5.4308 5.52924 3.97732 5.52923 3.08319 6.4123C2.19426 7.29026 2.19426 8.70975 3.0832 9.58772C3.97733 10.4708 5.4308 10.4707 6.32492 9.58771C6.32492 9.58772 6.32492 9.58771 6.32492 9.58771L7.93251 8ZM10.0671 8L11.6747 9.5877C11.6747 9.58769 11.6747 9.58771 11.6747 9.5877C12.5688 10.4707 14.0223 10.4707 14.9165 9.58773C15.8054 8.70975 15.8054 7.29024 14.9165 6.41229C14.0223 5.52923 12.5689 5.52924 11.6747 6.4123C11.6747 6.4123 11.6747 6.41229 11.6747 6.4123L10.0671 8Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "Loop"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/workflow/Loop.tsx b/app/components/base/icons/src/vender/workflow/Loop.tsx
deleted file mode 100644
index 3ac3ffd..0000000
--- a/app/components/base/icons/src/vender/workflow/Loop.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './Loop.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'Loop'
-
-export default Icon
diff --git a/app/components/base/icons/src/vender/workflow/LoopEnd.json b/app/components/base/icons/src/vender/workflow/LoopEnd.json
deleted file mode 100644
index 1427dfd..0000000
--- a/app/components/base/icons/src/vender/workflow/LoopEnd.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-	"icon": {
-		"type": "element",
-		"isRootNode": true,
-		"name": "svg",
-		"attributes": {
-			"width": "16",
-			"height": "16",
-			"viewBox": "0 0 16 16",
-			"fill": "none",
-			"xmlns": "http://www.w3.org/2000/svg"
-		},
-		"children": [
-			{
-				"type": "element",
-				"name": "g",
-				"attributes": {
-					"id": "ongoing"
-				},
-				"children": [
-					{
-						"type": "element",
-						"name": "path",
-						"attributes": {
-							"id": "Vector",
-							"fill-rule": "evenodd",
-							"clip-rule": "evenodd",
-							"d": "M8 2.75C5.10051 2.75 2.75 5.10051 2.75 8C2.75 10.8995 5.1005 13.25 8 13.25C8.41421 13.25 8.75 13.5858 8.75 14C8.75 14.4142 8.41421 14.75 8 14.75C4.27208 14.75 1.25 11.7279 1.25 8C1.25 4.27208 4.27208 1.25 8 1.25C8.41421 1.25 8.75 1.58579 8.75 2C8.75 2.41421 8.41421 2.75 8 2.75ZM10.3508 2.42715C10.5582 2.06861 11.017 1.94608 11.3755 2.15349C11.9971 2.51301 12.5556 2.96859 13.0311 3.49984C13.3073 3.8085 13.281 4.28264 12.9724 4.55887C12.6637 4.8351 12.1896 4.80882 11.9133 4.50016C11.5429 4.08625 11.1079 3.73153 10.6245 3.4519C10.2659 3.2445 10.1434 2.7857 10.3508 2.42715ZM8.13634 5.46967C8.42923 5.17678 8.9041 5.17678 9.197 5.46967L11.197 7.46967C11.4899 7.76256 11.4899 8.23744 11.197 8.53033L9.197 10.5303C8.9041 10.8232 8.42923 10.8232 8.13634 10.5303C7.84344 10.2374 7.84344 9.76256 8.13634 9.46967L8.85601 8.75H5.33333C4.91912 8.75 4.58333 8.41421 4.58333 8C4.58333 7.58579 4.91912 7.25 5.33333 7.25H8.85601L8.13634 6.53033C7.84344 6.23744 7.84344 5.76256 8.13634 5.46967ZM13.7414 6.09691C14.1478 6.01676 14.5422 6.28123 14.6224 6.68762C14.7062 7.1128 14.75 7.55166 14.75 8C14.75 8.44834 14.7062 8.88721 14.6224 9.31234C14.5422 9.71872 14.1478 9.98318 13.7414 9.90302C13.335 9.82287 13.0706 9.42845 13.1507 9.02206C13.2158 8.69213 13.25 8.35046 13.25 8C13.25 7.64954 13.2158 7.30787 13.1507 6.97785C13.0706 6.57146 13.335 6.17705 13.7414 6.09691ZM12.9723 11.4411C13.281 11.7173 13.3073 12.1915 13.0311 12.5002C12.5556 13.0314 11.9971 13.487 11.3756 13.8465C11.017 14.0539 10.5582 13.9314 10.3508 13.5729C10.1434 13.2143 10.2659 12.7556 10.6244 12.5481C11.1079 12.2685 11.5429 11.9138 11.9133 11.4999C12.1895 11.1912 12.6637 11.1649 12.9723 11.4411Z",
-							"fill": "currentColor"
-						},
-						"children": []
-					}
-				]
-			}
-		]
-	},
-	"name": "LoopEnd"
-}
\ No newline at end of file
diff --git a/app/components/base/icons/src/vender/workflow/LoopEnd.tsx b/app/components/base/icons/src/vender/workflow/LoopEnd.tsx
deleted file mode 100644
index 0b8f71d..0000000
--- a/app/components/base/icons/src/vender/workflow/LoopEnd.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// GENERATE BY script
-// DON NOT EDIT IT MANUALLY
-
-import * as React from 'react'
-import data from './LoopEnd.json'
-import IconBase from '@/app/components/base/icons/IconBase'
-import type { IconData } from '@/app/components/base/icons/IconBase'
-
-const Icon = (
-  {
-    ref,
-    ...props
-  }: React.SVGProps<SVGSVGElement> & {
-    ref?: React.RefObject<React.MutableRefObject<HTMLOrSVGElement>>;
-  },
-) => <IconBase {...props} ref={ref} data={data as IconData} />
-
-Icon.displayName = 'LoopEnd'
-
-export default Icon
diff --git a/app/components/base/icons/utils.spec.ts b/app/components/base/icons/utils.spec.ts
deleted file mode 100644
index bfa8e39..0000000
--- a/app/components/base/icons/utils.spec.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import type { AbstractNode } from './utils'
-import { generate, normalizeAttrs } from './utils'
-import { render } from '@testing-library/react'
-import '@testing-library/jest-dom'
-
-describe('generate icon base utils', () => {
-  describe('normalizeAttrs', () => {
-    it('should normalize class to className', () => {
-      const attrs = { class: 'test-class' }
-      const result = normalizeAttrs(attrs)
-      expect(result).toEqual({ className: 'test-class' })
-    })
-
-    it('should normalize style string to style object', () => {
-      const attrs = { style: 'color:red;font-size:14px;' }
-      const result = normalizeAttrs(attrs)
-      expect(result).toEqual({ style: { color: 'red', fontSize: '14px' } })
-    })
-
-    it('should handle attributes with dashes and colons', () => {
-      const attrs = { 'data-test': 'value', 'xlink:href': 'url' }
-      const result = normalizeAttrs(attrs)
-      expect(result).toEqual({ dataTest: 'value', xlinkHref: 'url' })
-    })
-  })
-
-  describe('generate', () => {
-    it('should generate React elements from AbstractNode', () => {
-      const node: AbstractNode = {
-        name: 'div',
-        attributes: { class: 'container' },
-        children: [
-          {
-            name: 'span',
-            attributes: { style: 'color:blue;' },
-            children: [],
-          },
-        ],
-      }
-
-      const { container } = render(generate(node, 'key'))
-      // to svg element
-      expect(container.firstChild).toHaveClass('container')
-      expect(container.querySelector('span')).toHaveStyle({ color: 'blue' })
-    })
-
-    // add not has children
-    it('should generate React elements without children', () => {
-      const node: AbstractNode = {
-        name: 'div',
-        attributes: { class: 'container' },
-      }
-      const { container } = render(generate(node, 'key'))
-      // to svg element
-      expect(container.firstChild).toHaveClass('container')
-    })
-
-    it('should merge rootProps when provided', () => {
-      const node: AbstractNode = {
-        name: 'div',
-        attributes: { class: 'container' },
-        children: [],
-      }
-
-      const rootProps = { id: 'root' }
-      const { container } = render(generate(node, 'key', rootProps))
-      expect(container.querySelector('div')).toHaveAttribute('id', 'root')
-    })
-  })
-})
diff --git a/app/components/base/input-number/index.spec.tsx b/app/components/base/input-number/index.spec.tsx
deleted file mode 100644
index 8dfd118..0000000
--- a/app/components/base/input-number/index.spec.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react'
-import { InputNumber } from './index'
-
-jest.mock('react-i18next', () => ({
-  useTranslation: () => ({
-    t: (key: string) => key,
-  }),
-}))
-
-describe('InputNumber Component', () => {
-  const defaultProps = {
-    onChange: jest.fn(),
-  }
-
-  afterEach(() => {
-    jest.clearAllMocks()
-  })
-
-  it('renders input with default values', () => {
-    render(<InputNumber {...defaultProps} />)
-    const input = screen.getByRole('textbox')
-    expect(input).toBeInTheDocument()
-  })
-
-  it('handles increment button click', () => {
-    render(<InputNumber {...defaultProps} value={5} />)
-    const incrementBtn = screen.getByRole('button', { name: /increment/i })
-
-    fireEvent.click(incrementBtn)
-    expect(defaultProps.onChange).toHaveBeenCalledWith(6)
-  })
-
-  it('handles decrement button click', () => {
-    render(<InputNumber {...defaultProps} value={5} />)
-    const decrementBtn = screen.getByRole('button', { name: /decrement/i })
-
-    fireEvent.click(decrementBtn)
-    expect(defaultProps.onChange).toHaveBeenCalledWith(4)
-  })
-
-  it('respects max value constraint', () => {
-    render(<InputNumber {...defaultProps} value={10} max={10} />)
-    const incrementBtn = screen.getByRole('button', { name: /increment/i })
-
-    fireEvent.click(incrementBtn)
-    expect(defaultProps.onChange).not.toHaveBeenCalled()
-  })
-
-  it('respects min value constraint', () => {
-    render(<InputNumber {...defaultProps} value={0} min={0} />)
-    const decrementBtn = screen.getByRole('button', { name: /decrement/i })
-
-    fireEvent.click(decrementBtn)
-    expect(defaultProps.onChange).not.toHaveBeenCalled()
-  })
-
-  it('handles direct input changes', () => {
-    render(<InputNumber {...defaultProps} />)
-    const input = screen.getByRole('textbox')
-
-    fireEvent.change(input, { target: { value: '42' } })
-    expect(defaultProps.onChange).toHaveBeenCalledWith(42)
-  })
-
-  it('handles empty input', () => {
-    render(<InputNumber {...defaultProps} value={0} />)
-    const input = screen.getByRole('textbox')
-
-    fireEvent.change(input, { target: { value: '' } })
-    expect(defaultProps.onChange).toHaveBeenCalledWith(undefined)
-  })
-
-  it('handles invalid input', () => {
-    render(<InputNumber {...defaultProps} />)
-    const input = screen.getByRole('textbox')
-
-    fireEvent.change(input, { target: { value: 'abc' } })
-    expect(defaultProps.onChange).not.toHaveBeenCalled()
-  })
-
-  it('displays unit when provided', () => {
-    const unit = 'px'
-    render(<InputNumber {...defaultProps} unit={unit} />)
-    expect(screen.getByText(unit)).toBeInTheDocument()
-  })
-
-  it('disables controls when disabled prop is true', () => {
-    render(<InputNumber {...defaultProps} disabled />)
-    const input = screen.getByRole('textbox')
-    const incrementBtn = screen.getByRole('button', { name: /increment/i })
-    const decrementBtn = screen.getByRole('button', { name: /decrement/i })
-
-    expect(input).toBeDisabled()
-    expect(incrementBtn).toBeDisabled()
-    expect(decrementBtn).toBeDisabled()
-  })
-})
diff --git a/app/components/base/input/index.spec.tsx b/app/components/base/input/index.spec.tsx
deleted file mode 100644
index 12dd9bc..0000000
--- a/app/components/base/input/index.spec.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-import React from 'react'
-import { fireEvent, render, screen } from '@testing-library/react'
-import '@testing-library/jest-dom'
-import Input, { inputVariants } from './index'
-
-// Mock the i18n hook
-jest.mock('react-i18next', () => ({
-  useTranslation: () => ({
-    t: (key: string) => {
-      const translations: Record<string, string> = {
-        'common.operation.search': 'Search',
-        'common.placeholder.input': 'Please input',
-      }
-      return translations[key] || ''
-    },
-  }),
-}))
-
-describe('Input component', () => {
-  describe('Variants', () => {
-    it('should return correct classes for regular size', () => {
-      const result = inputVariants({ size: 'regular' })
-      expect(result).toContain('px-3')
-      expect(result).toContain('radius-md')
-      expect(result).toContain('system-sm-regular')
-    })
-
-    it('should return correct classes for large size', () => {
-      const result = inputVariants({ size: 'large' })
-      expect(result).toContain('px-4')
-      expect(result).toContain('radius-lg')
-      expect(result).toContain('system-md-regular')
-    })
-
-    it('should use regular size as default', () => {
-      const result = inputVariants({})
-      expect(result).toContain('px-3')
-      expect(result).toContain('radius-md')
-      expect(result).toContain('system-sm-regular')
-    })
-  })
-
-  it('renders correctly with default props', () => {
-    render(<Input />)
-    const input = screen.getByPlaceholderText('Please input')
-    expect(input).toBeInTheDocument()
-    expect(input).not.toBeDisabled()
-    expect(input).not.toHaveClass('cursor-not-allowed')
-  })
-
-  it('shows left icon when showLeftIcon is true', () => {
-    render(<Input showLeftIcon />)
-    const searchIcon = document.querySelector('svg')
-    expect(searchIcon).toBeInTheDocument()
-    const input = screen.getByPlaceholderText('Search')
-    expect(input).toHaveClass('pl-[26px]')
-  })
-
-  it('shows clear icon when showClearIcon is true and has value', () => {
-    render(<Input showClearIcon value="test" />)
-    const clearIcon = document.querySelector('.group svg')
-    expect(clearIcon).toBeInTheDocument()
-    const input = screen.getByDisplayValue('test')
-    expect(input).toHaveClass('pr-[26px]')
-  })
-
-  it('does not show clear icon when disabled, even with value', () => {
-    render(<Input showClearIcon value="test" disabled />)
-    const clearIcon = document.querySelector('.group svg')
-    expect(clearIcon).not.toBeInTheDocument()
-  })
-
-  it('calls onClear when clear icon is clicked', () => {
-    const onClear = jest.fn()
-    render(<Input showClearIcon value="test" onClear={onClear} />)
-    const clearIconContainer = document.querySelector('.group')
-    fireEvent.click(clearIconContainer!)
-    expect(onClear).toHaveBeenCalledTimes(1)
-  })
-
-  it('shows warning icon when destructive is true', () => {
-    render(<Input destructive />)
-    const warningIcon = document.querySelector('svg')
-    expect(warningIcon).toBeInTheDocument()
-    const input = screen.getByPlaceholderText('Please input')
-    expect(input).toHaveClass('border-components-input-border-destructive')
-  })
-
-  it('applies disabled styles when disabled', () => {
-    render(<Input disabled />)
-    const input = screen.getByPlaceholderText('Please input')
-    expect(input).toBeDisabled()
-    expect(input).toHaveClass('cursor-not-allowed')
-    expect(input).toHaveClass('bg-components-input-bg-disabled')
-  })
-
-  it('displays custom unit when provided', () => {
-    render(<Input unit="km" />)
-    const unitElement = screen.getByText('km')
-    expect(unitElement).toBeInTheDocument()
-  })
-
-  it('applies custom className and style', () => {
-    const customClass = 'test-class'
-    const customStyle = { color: 'red' }
-    render(<Input className={customClass} styleCss={customStyle} />)
-    const input = screen.getByPlaceholderText('Please input')
-    expect(input).toHaveClass(customClass)
-    expect(input).toHaveStyle('color: red')
-  })
-
-  it('applies large size variant correctly', () => {
-    render(<Input size={'large' as any} />)
-    const input = screen.getByPlaceholderText('Please input')
-    expect(input.className).toContain(inputVariants({ size: 'large' }))
-  })
-
-  it('uses custom placeholder when provided', () => {
-    const placeholder = 'Custom placeholder'
-    render(<Input placeholder={placeholder} />)
-    const input = screen.getByPlaceholderText(placeholder)
-    expect(input).toBeInTheDocument()
-  })
-})
diff --git a/app/components/base/install-button/index.tsx b/app/components/base/install-button/index.tsx
deleted file mode 100644
index 0d9e953..0000000
--- a/app/components/base/install-button/index.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import Button from '../button'
-import { RiInstallLine, RiLoader2Line } from '@remixicon/react'
-
-type InstallButtonProps = {
-  loading: boolean
-  onInstall: (e: React.MouseEvent) => void
-  t: any
-}
-
-const InstallButton = ({ loading, onInstall, t }: InstallButtonProps) => {
-  return (
-    <Button size='small' className='z-[100]' onClick={onInstall}>
-      <div className={`flex items-center justify-center gap-1 px-[3px]
-        ${loading ? 'text-components-button-secondary-text-disabled' : 'text-components-button-secondary-text'}
-        system-xs-medium`}
-      >
-        {loading ? t('workflow.nodes.agent.pluginInstaller.installing') : t('workflow.nodes.agent.pluginInstaller.install')}
-      </div>
-      {loading
-        ? <RiLoader2Line className='h-3.5 w-3.5 animate-spin text-text-quaternary' />
-        : <RiInstallLine className='h-3.5 w-3.5 text-text-secondary' />
-      }
-    </Button>
-  )
-}
-
-export default InstallButton
diff --git a/app/components/base/loading/index.spec.tsx b/app/components/base/loading/index.spec.tsx
deleted file mode 100644
index 03e2cfb..0000000
--- a/app/components/base/loading/index.spec.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import React from 'react'
-import { render } from '@testing-library/react'
-import '@testing-library/jest-dom'
-import Loading from './index'
-
-describe('Loading Component', () => {
-  it('renders correctly with default props', () => {
-    const { container } = render(<Loading />)
-    expect(container.firstChild).toHaveClass('flex w-full items-center justify-center')
-    expect(container.firstChild).not.toHaveClass('h-full')
-  })
-
-  it('renders correctly with area type', () => {
-    const { container } = render(<Loading type="area" />)
-    expect(container.firstChild).not.toHaveClass('h-full')
-  })
-
-  it('renders correctly with app type', () => {
-    const { container } = render(<Loading type='app' />)
-    expect(container.firstChild).toHaveClass('h-full')
-  })
-
-  it('contains SVG with spin-animation class', () => {
-    const { container } = render(<Loading />)
-
-    const svgElement = container.querySelector('svg')
-    expect(svgElement).toHaveClass('spin-animation')
-  })
-})
diff --git a/app/components/base/logo/dify-logo.tsx b/app/components/base/logo/dify-logo.tsx
deleted file mode 100644
index ce59ba7..0000000
--- a/app/components/base/logo/dify-logo.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import { WEB_PREFIX } from '@/config'
-import classNames from '@/utils/classnames'
-import useTheme from '@/hooks/use-theme'
-
-export type LogoStyle = 'default' | 'monochromeWhite'
-
-export const logoPathMap: Record<LogoStyle, string> = {
-  default: '/logo/logo.svg',
-  monochromeWhite: '/logo/logo-monochrome-white.svg',
-}
-
-export type LogoSize = 'large' | 'medium' | 'small'
-
-export const logoSizeMap: Record<LogoSize, string> = {
-  large: 'w-16 h-7',
-  medium: 'w-12 h-[22px]',
-  small: 'w-9 h-4',
-}
-
-type DifyLogoProps = {
-  style?: LogoStyle
-  size?: LogoSize
-  className?: string
-}
-
-const DifyLogo: FC<DifyLogoProps> = ({
-  style = 'default',
-  size = 'medium',
-  className,
-}) => {
-  const { theme } = useTheme()
-  const themedStyle = (theme === 'dark' && style === 'default') ? 'monochromeWhite' : style
-
-  return (
-    <img
-      src={`${WEB_PREFIX}${logoPathMap[themedStyle]}`}
-      className={classNames('block object-contain', logoSizeMap[size], className)}
-      alt='Dify logo'
-    />
-  )
-}
-
-export default DifyLogo
diff --git a/app/components/base/markdown-blocks/music.tsx b/app/components/base/markdown-blocks/music.tsx
deleted file mode 100644
index 7edd171..0000000
--- a/app/components/base/markdown-blocks/music.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import abcjs from 'abcjs'
-import { useEffect, useRef } from 'react'
-import 'abcjs/abcjs-audio.css'
-
-const MarkdownMusic = ({ children }: { children: React.ReactNode }) => {
-  const containerRef = useRef<HTMLDivElement>(null)
-  const controlsRef = useRef<HTMLDivElement>(null)
-
-  useEffect(() => {
-    if (containerRef.current && controlsRef.current) {
-      if (typeof children === 'string') {
-        const visualObjs = abcjs.renderAbc(containerRef.current, children, {
-          add_classes: true, // Add classes to SVG elements for cursor tracking
-          responsive: 'resize', // Make notation responsive
-        })
-        const synthControl = new abcjs.synth.SynthController()
-        synthControl.load(controlsRef.current, {}, { displayPlay: true })
-        const synth = new abcjs.synth.CreateSynth()
-        const visualObj = visualObjs[0]
-        synth.init({ visualObj }).then(() => {
-          synthControl.setTune(visualObj, false)
-        })
-        containerRef.current.style.overflow = 'auto'
-      }
-    }
-  }, [children])
-
-  return (
-    <div style={{ minWidth: '100%', overflow: 'auto' }}>
-      <div ref={containerRef} />
-      <div ref={controlsRef} />
-    </div>
-  )
-}
-MarkdownMusic.displayName = 'MarkdownMusic'
-
-export default MarkdownMusic
diff --git a/app/components/base/markdown-blocks/think-block.tsx b/app/components/base/markdown-blocks/think-block.tsx
deleted file mode 100644
index 565582e..0000000
--- a/app/components/base/markdown-blocks/think-block.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import React, { useEffect, useRef, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-
-const hasEndThink = (children: any): boolean => {
-  if (typeof children === 'string')
-    return children.includes('[ENDTHINKFLAG]')
-
-  if (Array.isArray(children))
-    return children.some(child => hasEndThink(child))
-
-  if (children?.props?.children)
-    return hasEndThink(children.props.children)
-
-  return false
-}
-
-const removeEndThink = (children: any): any => {
-  if (typeof children === 'string')
-    return children.replace('[ENDTHINKFLAG]', '')
-
-  if (Array.isArray(children))
-    return children.map(child => removeEndThink(child))
-
-  if (children?.props?.children) {
-    return React.cloneElement(
-      children,
-      {
-        ...children.props,
-        children: removeEndThink(children.props.children),
-      },
-    )
-  }
-
-  return children
-}
-
-const useThinkTimer = (children: any) => {
-  const [startTime] = useState(Date.now())
-  const [elapsedTime, setElapsedTime] = useState(0)
-  const [isComplete, setIsComplete] = useState(false)
-  const timerRef = useRef<NodeJS.Timeout>()
-
-  useEffect(() => {
-    if (isComplete) return
-
-    timerRef.current = setInterval(() => {
-      setElapsedTime(Math.floor((Date.now() - startTime) / 100) / 10)
-    }, 100)
-
-    return () => {
-      if (timerRef.current)
-        clearInterval(timerRef.current)
-    }
-  }, [startTime, isComplete])
-
-  useEffect(() => {
-    if (hasEndThink(children))
-      setIsComplete(true)
-  }, [children])
-
-  return { elapsedTime, isComplete }
-}
-
-export const ThinkBlock = ({ children, ...props }: any) => {
-  const { elapsedTime, isComplete } = useThinkTimer(children)
-  const displayContent = removeEndThink(children)
-  const { t } = useTranslation()
-
-  if (!(props['data-think'] ?? false))
-    return (<details {...props}>{children}</details>)
-
-  return (
-    <details {...(!isComplete && { open: true })} className="group">
-      <summary className="flex cursor-pointer select-none list-none items-center whitespace-nowrap pl-2 font-bold text-gray-500">
-        <div className="flex shrink-0 items-center">
-          <svg
-            className="mr-2 h-3 w-3 transition-transform duration-500 group-open:rotate-90"
-            fill="none"
-            stroke="currentColor"
-            viewBox="0 0 24 24"
-          >
-            <path
-              strokeLinecap="round"
-              strokeLinejoin="round"
-              strokeWidth={2}
-              d="M9 5l7 7-7 7"
-            />
-          </svg>
-          {isComplete ? `${t('common.chat.thought')}(${elapsedTime.toFixed(1)}s)` : `${t('common.chat.thinking')}(${elapsedTime.toFixed(1)}s)`}
-        </div>
-      </summary>
-      <div className="ml-2 border-l border-gray-300 bg-gray-50 p-3 text-gray-500">
-        {displayContent}
-      </div>
-    </details>
-  )
-}
-
-export default ThinkBlock
diff --git a/app/components/base/mermaid/utils.spec.ts b/app/components/base/mermaid/utils.spec.ts
deleted file mode 100644
index 6ea7f17..0000000
--- a/app/components/base/mermaid/utils.spec.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { cleanUpSvgCode } from './utils'
-
-describe('cleanUpSvgCode', () => {
-  it('replaces old-style <br> tags with the new style', () => {
-    const result = cleanUpSvgCode('<br>test<br>')
-    expect(result).toEqual('<br/>test<br/>')
-  })
-})
diff --git a/app/components/base/mermaid/utils.ts b/app/components/base/mermaid/utils.ts
deleted file mode 100644
index 7d94150..0000000
--- a/app/components/base/mermaid/utils.ts
+++ /dev/null
@@ -1,232 +0,0 @@
-export function cleanUpSvgCode(svgCode: string): string {
-  return svgCode.replaceAll('<br>', '<br/>')
-}
-
-/**
- * Preprocesses mermaid code to fix common syntax issues
- */
-export function preprocessMermaidCode(code: string): string {
-  if (!code || typeof code !== 'string')
-    return ''
-
-  // First check if this is a gantt chart
-  if (code.trim().startsWith('gantt')) {
-    // For gantt charts, we need to ensure each task is on its own line
-    // Split the code into lines and process each line separately
-    const lines = code.split('\n').map(line => line.trim())
-    return lines.join('\n')
-  }
-
-  return code
-    // Replace English colons with Chinese colons in section nodes to avoid parsing issues
-    .replace(/section\s+([^:]+):/g, (match, sectionName) => `section ${sectionName}锛歚)
-    // Fix common syntax issues
-    .replace(/fifopacket/g, 'rect')
-    // Clean up empty lines and extra spaces
-    .trim()
-}
-
-/**
- * Prepares mermaid code based on selected style
- */
-export function prepareMermaidCode(code: string, style: 'classic' | 'handDrawn'): string {
-  let finalCode = preprocessMermaidCode(code)
-
-  // Special handling for gantt charts
-  if (finalCode.trim().startsWith('gantt')) {
-    // For gantt charts, preserve the structure exactly as is
-    return finalCode
-  }
-
-  if (style === 'handDrawn') {
-    finalCode = finalCode
-      // Remove style definitions that interfere with hand-drawn style
-      .replace(/style\s+[^\n]+/g, '')
-      .replace(/linkStyle\s+[^\n]+/g, '')
-      .replace(/^flowchart/, 'graph')
-      // Remove any styles that might interfere with hand-drawn style
-      .replace(/class="[^"]*"/g, '')
-      .replace(/fill="[^"]*"/g, '')
-      .replace(/stroke="[^"]*"/g, '')
-
-    // Ensure hand-drawn style charts always start with graph
-    if (!finalCode.startsWith('graph') && !finalCode.startsWith('flowchart'))
-      finalCode = `graph TD\n${finalCode}`
-  }
-
-  return finalCode
-}
-
-/**
- * Converts SVG to base64 string for image rendering
- */
-export function svgToBase64(svgGraph: string): Promise<string> {
-  if (!svgGraph)
-    return Promise.resolve('')
-
-  try {
-    // Ensure SVG has correct XML declaration
-    if (!svgGraph.includes('<?xml'))
-      svgGraph = `<?xml version="1.0" encoding="UTF-8"?>${svgGraph}`
-
-    const blob = new Blob([new TextEncoder().encode(svgGraph)], { type: 'image/svg+xml;charset=utf-8' })
-    return new Promise((resolve, reject) => {
-      const reader = new FileReader()
-      reader.onloadend = () => resolve(reader.result as string)
-      reader.onerror = reject
-      reader.readAsDataURL(blob)
-    })
-  }
-  catch (error) {
-    console.error('Error converting SVG to base64:', error)
-    return Promise.resolve('')
-  }
-}
-
-/**
- * Processes SVG for theme styling
- */
-export function processSvgForTheme(
-  svg: string,
-  isDark: boolean,
-  isHandDrawn: boolean,
-  themes: {
-    light: any
-    dark: any
-  },
-): string {
-  let processedSvg = svg
-
-  if (isDark) {
-    processedSvg = processedSvg
-      .replace(/style="fill: ?#000000"/g, 'style="fill: #e2e8f0"')
-      .replace(/style="stroke: ?#000000"/g, 'style="stroke: #94a3b8"')
-      .replace(/<rect [^>]*fill="#ffffff"/g, '<rect $& fill="#1e293b"')
-
-    if (isHandDrawn) {
-      processedSvg = processedSvg
-        .replace(/fill="#[a-fA-F0-9]{6}"/g, `fill="${themes.dark.nodeColors[0].bg}"`)
-        .replace(/stroke="#[a-fA-F0-9]{6}"/g, `stroke="${themes.dark.connectionColor}"`)
-        .replace(/stroke-width="1"/g, 'stroke-width="1.5"')
-    }
-    else {
-      let i = 0
-      themes.dark.nodeColors.forEach(() => {
-        const regex = /fill="#[a-fA-F0-9]{6}"[^>]*class="node-[^"]*"/g
-        processedSvg = processedSvg.replace(regex, (match: string) => {
-          const colorIndex = i % themes.dark.nodeColors.length
-          i++
-          return match.replace(/fill="#[a-fA-F0-9]{6}"/, `fill="${themes.dark.nodeColors[colorIndex].bg}"`)
-        })
-      })
-
-      processedSvg = processedSvg
-        .replace(/<path [^>]*stroke="#[a-fA-F0-9]{6}"/g,
-          `<path stroke="${themes.dark.connectionColor}" stroke-width="1.5"`)
-        .replace(/<(line|polyline) [^>]*stroke="#[a-fA-F0-9]{6}"/g,
-          `<$1 stroke="${themes.dark.connectionColor}" stroke-width="1.5"`)
-    }
-  }
-  else {
-    if (isHandDrawn) {
-      processedSvg = processedSvg
-        .replace(/fill="#[a-fA-F0-9]{6}"/g, `fill="${themes.light.nodeColors[0].bg}"`)
-        .replace(/stroke="#[a-fA-F0-9]{6}"/g, `stroke="${themes.light.connectionColor}"`)
-        .replace(/stroke-width="1"/g, 'stroke-width="1.5"')
-    }
-    else {
-      themes.light.nodeColors.forEach(() => {
-        const regex = /fill="#[a-fA-F0-9]{6}"[^>]*class="node-[^"]*"/g
-        let i = 0
-        processedSvg = processedSvg.replace(regex, (match: string) => {
-          const colorIndex = i % themes.light.nodeColors.length
-          i++
-          return match.replace(/fill="#[a-fA-F0-9]{6}"/, `fill="${themes.light.nodeColors[colorIndex].bg}"`)
-        })
-      })
-
-      processedSvg = processedSvg
-        .replace(/<path [^>]*stroke="#[a-fA-F0-9]{6}"/g,
-          `<path stroke="${themes.light.connectionColor}"`)
-        .replace(/<(line|polyline) [^>]*stroke="#[a-fA-F0-9]{6}"/g,
-          `<$1 stroke="${themes.light.connectionColor}"`)
-    }
-  }
-
-  return processedSvg
-}
-
-/**
- * Checks if mermaid code is complete and valid
- */
-export function isMermaidCodeComplete(code: string): boolean {
-  if (!code || code.trim().length === 0)
-    return false
-
-  try {
-    const trimmedCode = code.trim()
-
-    // Special handling for gantt charts
-    if (trimmedCode.startsWith('gantt')) {
-      // For gantt charts, check if it has at least a title and one task
-      const lines = trimmedCode.split('\n').filter(line => line.trim().length > 0)
-      return lines.length >= 3
-    }
-
-    // Check for basic syntax structure
-    const hasValidStart = /^(graph|flowchart|sequenceDiagram|classDiagram|classDef|class|stateDiagram|gantt|pie|er|journey|requirementDiagram)/.test(trimmedCode)
-
-    // Check for balanced brackets and parentheses
-    const isBalanced = (() => {
-      const stack = []
-      const pairs = { '{': '}', '[': ']', '(': ')' }
-
-      for (const char of trimmedCode) {
-        if (char in pairs) {
-          stack.push(char)
-        }
-        else if (Object.values(pairs).includes(char)) {
-          const last = stack.pop()
-          if (pairs[last as keyof typeof pairs] !== char)
-            return false
-        }
-      }
-
-      return stack.length === 0
-    })()
-
-    // Check for common syntax errors
-    const hasNoSyntaxErrors = !trimmedCode.includes('undefined')
-                           && !trimmedCode.includes('[object Object]')
-                           && trimmedCode.split('\n').every(line =>
-                             !(line.includes('-->') && !line.match(/\S+\s*-->\s*\S+/)))
-
-    return hasValidStart && isBalanced && hasNoSyntaxErrors
-  }
-  catch (error) {
-    console.debug('Mermaid code validation error:', error)
-    return false
-  }
-}
-
-/**
- * Helper to wait for DOM element with retry mechanism
- */
-export function waitForDOMElement(callback: () => Promise<any>, maxAttempts = 3, delay = 100): Promise<any> {
-  return new Promise((resolve, reject) => {
-    let attempts = 0
-    const tryRender = async () => {
-      try {
-        resolve(await callback())
-      }
-      catch (error) {
-        attempts++
-        if (attempts < maxAttempts)
-          setTimeout(tryRender, delay)
-        else
-          reject(error)
-      }
-    }
-    tryRender()
-  })
-}
diff --git a/app/components/base/modal-like-wrap/index.tsx b/app/components/base/modal-like-wrap/index.tsx
deleted file mode 100644
index cf18ef1..0000000
--- a/app/components/base/modal-like-wrap/index.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import cn from '@/utils/classnames'
-import { useTranslation } from 'react-i18next'
-import Button from '../button'
-import { RiCloseLine } from '@remixicon/react'
-
-type Props = {
-  title: string
-  className?: string
-  beforeHeader?: React.ReactNode
-  onClose: () => void
-  hideCloseBtn?: boolean
-  onConfirm: () => void
-  children: React.ReactNode
-}
-
-const ModalLikeWrap: FC<Props> = ({
-  title,
-  className,
-  beforeHeader,
-  children,
-  onClose,
-  hideCloseBtn,
-  onConfirm,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className={cn('w-[320px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg px-3 pb-4 pt-3.5 shadow-xl', className)}>
-      {beforeHeader || null}
-      <div className='mb-1 flex h-6 items-center justify-between'>
-        <div className='system-xl-semibold text-text-primary'>{title}</div>
-        {!hideCloseBtn && (
-          <div
-            className='cursor-pointer p-1.5 text-text-tertiary'
-            onClick={onClose}
-          >
-            <RiCloseLine className='size-4' />
-          </div>
-        )}
-      </div>
-      <div className='mt-2'>{children}</div>
-      <div className='mt-4 flex justify-end'>
-        <Button
-          className='mr-2'
-          onClick={onClose}>{t('common.operation.cancel')}</Button>
-        <Button
-          onClick={onConfirm}
-          variant='primary'
-        >{t('common.operation.save')}</Button>
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(ModalLikeWrap)
diff --git a/app/components/base/new-audio-button/index.tsx b/app/components/base/new-audio-button/index.tsx
deleted file mode 100644
index 107b53b..0000000
--- a/app/components/base/new-audio-button/index.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-'use client'
-import { useState } from 'react'
-import { useParams, usePathname } from 'next/navigation'
-import {
-  RiVolumeUpLine,
-} from '@remixicon/react'
-import { t } from 'i18next'
-import Tooltip from '@/app/components/base/tooltip'
-import { AudioPlayerManager } from '@/app/components/base/audio-btn/audio.player.manager'
-import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
-
-type AudioBtnProps = {
-  id?: string
-  voice?: string
-  value?: string
-}
-
-type AudioState = 'initial' | 'loading' | 'playing' | 'paused' | 'ended'
-
-const AudioBtn = ({
-  id,
-  voice,
-  value,
-}: AudioBtnProps) => {
-  const [audioState, setAudioState] = useState<AudioState>('initial')
-
-  const params = useParams()
-  const pathname = usePathname()
-  const audio_finished_call = (event: string): any => {
-    switch (event) {
-      case 'ended':
-        setAudioState('ended')
-        break
-      case 'paused':
-        setAudioState('ended')
-        break
-      case 'loaded':
-        setAudioState('loading')
-        break
-      case 'play':
-        setAudioState('playing')
-        break
-      case 'error':
-        setAudioState('ended')
-        break
-    }
-  }
-  let url = ''
-  let isPublic = false
-
-  if (params.token) {
-    url = '/text-to-audio'
-    isPublic = true
-  }
-  else if (params.appId) {
-    if (pathname.search('explore/installed') > -1)
-      url = `/installed-apps/${params.appId}/text-to-audio`
-    else
-      url = `/apps/${params.appId}/text-to-audio`
-  }
-  const handleToggle = async () => {
-    if (audioState === 'playing' || audioState === 'loading') {
-      setTimeout(() => setAudioState('paused'), 1)
-      AudioPlayerManager.getInstance().getAudioPlayer(url, isPublic, id, value, voice, audio_finished_call).pauseAudio()
-    }
-    else {
-      setTimeout(() => setAudioState('loading'), 1)
-      AudioPlayerManager.getInstance().getAudioPlayer(url, isPublic, id, value, voice, audio_finished_call).playAudio()
-    }
-  }
-
-  const tooltipContent = {
-    initial: t('appApi.play'),
-    ended: t('appApi.play'),
-    paused: t('appApi.pause'),
-    playing: t('appApi.playing'),
-    loading: t('appApi.loading'),
-  }[audioState]
-
-  return (
-    <Tooltip
-      popupContent={tooltipContent}
-    >
-      <ActionButton
-        state={
-          audioState === 'loading' || audioState === 'playing'
-            ? ActionButtonState.Active
-            : ActionButtonState.Default
-        }
-        onClick={handleToggle}
-        disabled={audioState === 'loading'}
-      >
-        <RiVolumeUpLine className='h-4 w-4' />
-      </ActionButton>
-    </Tooltip>
-  )
-}
-
-export default AudioBtn
diff --git a/app/components/base/portal-to-follow-elem/index.spec.tsx b/app/components/base/portal-to-follow-elem/index.spec.tsx
deleted file mode 100644
index 74790d7..0000000
--- a/app/components/base/portal-to-follow-elem/index.spec.tsx
+++ /dev/null
@@ -1,121 +0,0 @@
-import React from 'react'
-import { cleanup, fireEvent, render } from '@testing-library/react'
-import '@testing-library/jest-dom'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '.'
-
-afterEach(cleanup)
-
-describe('PortalToFollowElem', () => {
-  describe('Context and Provider', () => {
-    test('should throw error when using context outside provider', () => {
-      // Suppress console.error for this test
-      const originalError = console.error
-      console.error = jest.fn()
-
-      expect(() => {
-        render(
-          <PortalToFollowElemTrigger>Trigger </PortalToFollowElemTrigger>,
-        )
-      }).toThrow('PortalToFollowElem components must be wrapped in <PortalToFollowElem />')
-
-      console.error = originalError
-    })
-
-    test('should not throw when used within provider', () => {
-      expect(() => {
-        render(
-          <PortalToFollowElem>
-            <PortalToFollowElemTrigger>Trigger </PortalToFollowElemTrigger>
-          </PortalToFollowElem>,
-        )
-      }).not.toThrow()
-    })
-  })
-
-  describe('PortalToFollowElemTrigger', () => {
-    test('should render children correctly', () => {
-      const { getByText } = render(
-        <PortalToFollowElem>
-          <PortalToFollowElemTrigger>Trigger Text </PortalToFollowElemTrigger>
-        </PortalToFollowElem>,
-      )
-      expect(getByText('Trigger Text')).toBeInTheDocument()
-    })
-
-    test('should handle asChild prop correctly', () => {
-      const { getByRole } = render(
-        <PortalToFollowElem>
-          <PortalToFollowElemTrigger asChild >
-            <button>Button Trigger </button>
-          </PortalToFollowElemTrigger>
-        </PortalToFollowElem>,
-      )
-
-      expect(getByRole('button')).toHaveTextContent('Button Trigger')
-    })
-  })
-
-  describe('PortalToFollowElemContent', () => {
-    test('should not render content when closed', () => {
-      const { queryByText } = render(
-        <PortalToFollowElem open={false} >
-          <PortalToFollowElemTrigger>Trigger </PortalToFollowElemTrigger>
-          <PortalToFollowElemContent > Popup Content </PortalToFollowElemContent>
-        </PortalToFollowElem>,
-      )
-
-      expect(queryByText('Popup Content')).not.toBeInTheDocument()
-    })
-
-    test('should render content when open', () => {
-      const { getByText } = render(
-        <PortalToFollowElem open={true} >
-          <PortalToFollowElemTrigger>Trigger </PortalToFollowElemTrigger>
-          <PortalToFollowElemContent > Popup Content </PortalToFollowElemContent>
-        </PortalToFollowElem>,
-      )
-
-      expect(getByText('Popup Content')).toBeInTheDocument()
-    })
-  })
-
-  describe('Controlled behavior', () => {
-    test('should call onOpenChange when interaction happens', () => {
-      const handleOpenChange = jest.fn()
-
-      const { getByText } = render(
-        <PortalToFollowElem onOpenChange={handleOpenChange} >
-          <PortalToFollowElemTrigger>Hover Me </PortalToFollowElemTrigger>
-          <PortalToFollowElemContent > Content </PortalToFollowElemContent>
-        </PortalToFollowElem>,
-      )
-
-      fireEvent.mouseEnter(getByText('Hover Me'))
-      expect(handleOpenChange).toHaveBeenCalled()
-
-      fireEvent.mouseLeave(getByText('Hover Me'))
-      expect(handleOpenChange).toHaveBeenCalled()
-    })
-  })
-
-  describe('Configuration options', () => {
-    test('should accept placement prop', () => {
-      // Since we can't easily test actual positioning, we'll check if the prop is passed correctly
-      const useFloatingMock = jest.spyOn(require('@floating-ui/react'), 'useFloating')
-
-      render(
-        <PortalToFollowElem placement="top-start" >
-          <PortalToFollowElemTrigger>Trigger </PortalToFollowElemTrigger>
-        </PortalToFollowElem>,
-      )
-
-      expect(useFloatingMock).toHaveBeenCalledWith(
-        expect.objectContaining({
-          placement: 'top-start',
-        }),
-      )
-
-      useFloatingMock.mockRestore()
-    })
-  })
-})
diff --git a/app/components/base/segmented-control/index.tsx b/app/components/base/segmented-control/index.tsx
deleted file mode 100644
index bd921e4..0000000
--- a/app/components/base/segmented-control/index.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import React from 'react'
-import classNames from '@/utils/classnames'
-import type { RemixiconComponentType } from '@remixicon/react'
-import Divider from '../divider'
-
-// Updated generic type to allow enum values
-type SegmentedControlProps<T extends string | number | symbol> = {
-  options: { Icon: RemixiconComponentType, text: string, value: T }[]
-  value: T
-  onChange: (value: T) => void
-  className?: string
-}
-
-export const SegmentedControl = <T extends string | number | symbol>({
-  options,
-  value,
-  onChange,
-  className,
-}: SegmentedControlProps<T>): JSX.Element => {
-  const selectedOptionIndex = options.findIndex(option => option.value === value)
-
-  return (
-    <div className={classNames(
-      'flex items-center rounded-lg bg-components-segmented-control-bg-normal gap-x-[1px] p-0.5',
-      className,
-    )}>
-      {options.map((option, index) => {
-        const { Icon } = option
-        const isSelected = index === selectedOptionIndex
-        const isNextSelected = index === selectedOptionIndex - 1
-        const isLast = index === options.length - 1
-        return (
-          <button
-            type='button'
-            key={String(option.value)}
-            className={classNames(
-              'flex items-center justify-center relative px-2 py-1 rounded-lg gap-x-0.5 group border-0.5 border-transparent',
-              isSelected
-                ? 'border-components-segmented-control-item-active-border bg-components-segmented-control-item-active-bg shadow-xs shadow-shadow-shadow-3'
-                : 'hover:bg-state-base-hover',
-            )}
-            onClick={() => onChange(option.value)}
-          >
-            <span className='flex h-5 w-5 items-center justify-center'>
-              <Icon className={classNames(
-                'w-4 h-4 text-text-tertiary',
-                isSelected ? 'text-text-accent-light-mode-only' : 'group-hover:text-text-secondary',
-              )} />
-            </span>
-            <span className={classNames(
-              'p-0.5 text-text-tertiary system-sm-medium',
-              isSelected ? 'text-text-accent-light-mode-only' : 'group-hover:text-text-secondary',
-            )}>
-              {option.text}
-            </span>
-            {!isLast && !isSelected && !isNextSelected && (
-              <div className='absolute right-[-1px] top-0 flex h-full items-center'>
-                <Divider type='vertical' className='mx-0 h-3.5' />
-              </div>
-            )}
-          </button>
-        )
-      })}
-    </div>
-  )
-}
-
-export default React.memo(SegmentedControl) as typeof SegmentedControl
diff --git a/app/components/base/select/pure.tsx b/app/components/base/select/pure.tsx
deleted file mode 100644
index 81cc2fb..0000000
--- a/app/components/base/select/pure.tsx
+++ /dev/null
@@ -1,157 +0,0 @@
-import {
-  useCallback,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowDownSLine,
-  RiCheckLine,
-} from '@remixicon/react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import type {
-  PortalToFollowElemOptions,
-} from '@/app/components/base/portal-to-follow-elem'
-import cn from '@/utils/classnames'
-
-type Option = {
-  label: string
-  value: string
-}
-
-type PureSelectProps = {
-  options: Option[]
-  value?: string
-  onChange?: (value: string) => void
-  containerProps?: PortalToFollowElemOptions & {
-    open?: boolean
-    onOpenChange?: (open: boolean) => void
-  }
-  triggerProps?: {
-    className?: string
-  },
-  popupProps?: {
-    wrapperClassName?: string
-    className?: string
-    itemClassName?: string
-    title?: string
-  },
-}
-const PureSelect = ({
-  options,
-  value,
-  onChange,
-  containerProps,
-  triggerProps,
-  popupProps,
-}: PureSelectProps) => {
-  const { t } = useTranslation()
-  const {
-    open,
-    onOpenChange,
-    placement,
-    offset,
-  } = containerProps || {}
-  const {
-    className: triggerClassName,
-  } = triggerProps || {}
-  const {
-    wrapperClassName: popupWrapperClassName,
-    className: popupClassName,
-    itemClassName: popupItemClassName,
-    title: popupTitle,
-  } = popupProps || {}
-
-  const [localOpen, setLocalOpen] = useState(false)
-  const mergedOpen = open ?? localOpen
-
-  const handleOpenChange = useCallback((openValue: boolean) => {
-    onOpenChange?.(openValue)
-    setLocalOpen(openValue)
-  }, [onOpenChange])
-
-  const selectedOption = options.find(option => option.value === value)
-  const triggerText = selectedOption?.label || t('common.placeholder.select')
-
-  return (
-    <PortalToFollowElem
-      placement={placement || 'bottom-start'}
-      offset={offset || 4}
-      open={mergedOpen}
-      onOpenChange={handleOpenChange}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => handleOpenChange(!mergedOpen)}
-        asChild
-      >
-        <div
-          className={cn(
-            'system-sm-regular group flex h-8 cursor-pointer items-center rounded-lg bg-components-input-bg-normal px-2 text-components-input-text-filled hover:bg-state-base-hover-alt',
-            mergedOpen && 'bg-state-base-hover-alt',
-            triggerClassName,
-          )}
-        >
-          <div
-            className='grow'
-            title={triggerText}
-          >
-            {triggerText}
-          </div>
-          <RiArrowDownSLine
-            className={cn(
-              'h-4 w-4 shrink-0 text-text-quaternary group-hover:text-text-secondary',
-              mergedOpen && 'text-text-secondary',
-            )}
-          />
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className={cn(
-        'z-10',
-        popupWrapperClassName,
-      )}>
-        <div
-          className={cn(
-            'rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg',
-            popupClassName,
-          )}
-        >
-          {
-            popupTitle && (
-              <div className='system-xs-medium-uppercase flex h-[22px] items-center px-3 text-text-tertiary'>
-                {popupTitle}
-              </div>
-            )
-          }
-          {
-            options.map(option => (
-              <div
-                key={option.value}
-                className={cn(
-                  'system-sm-medium flex h-8 cursor-pointer items-center rounded-lg px-2 text-text-secondary hover:bg-state-base-hover',
-                  popupItemClassName,
-                )}
-                title={option.label}
-                onClick={() => {
-                  onChange?.(option.value)
-                  handleOpenChange(false)
-                }}
-              >
-                <div className='mr-1 grow truncate px-1'>
-                  {option.label}
-                </div>
-                {
-                  value === option.value && <RiCheckLine className='h-4 w-4 shrink-0 text-text-accent' />
-                }
-              </div>
-            ))
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default PureSelect
diff --git a/app/components/base/spinner/index.spec.tsx b/app/components/base/spinner/index.spec.tsx
deleted file mode 100644
index 0c4f0f6..0000000
--- a/app/components/base/spinner/index.spec.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import React from 'react'
-import { render } from '@testing-library/react'
-import '@testing-library/jest-dom'
-import Spinner from './index'
-
-describe('Spinner component', () => {
-  it('should render correctly when loading is true', () => {
-    const { container } = render(<Spinner loading={true} />)
-    const spinner = container.firstChild as HTMLElement
-
-    expect(spinner).toHaveClass('animate-spin')
-
-    // Check for accessibility text
-    const screenReaderText = spinner.querySelector('span')
-    expect(screenReaderText).toBeInTheDocument()
-    expect(screenReaderText).toHaveTextContent('Loading...')
-  })
-
-  it('should be hidden when loading is false', () => {
-    const { container } = render(<Spinner loading={false} />)
-    const spinner = container.firstChild as HTMLElement
-
-    expect(spinner).toHaveClass('hidden')
-  })
-
-  it('should render with custom className', () => {
-    const customClass = 'text-blue-500'
-    const { container } = render(<Spinner loading={true} className={customClass} />)
-    const spinner = container.firstChild as HTMLElement
-
-    expect(spinner).toHaveClass(customClass)
-  })
-
-  it('should render children correctly', () => {
-    const childText = 'Child content'
-    const { getByText } = render(
-      <Spinner loading={true}>{childText}</Spinner>,
-    )
-
-    expect(getByText(childText)).toBeInTheDocument()
-  })
-
-  it('should use default loading value (false) when not provided', () => {
-    const { container } = render(<Spinner />)
-    const spinner = container.firstChild as HTMLElement
-
-    expect(spinner).toHaveClass('hidden')
-  })
-})
diff --git a/app/components/base/theme-selector.tsx b/app/components/base/theme-selector.tsx
deleted file mode 100644
index 8dfe1d2..0000000
--- a/app/components/base/theme-selector.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-'use client'
-
-import { useState } from 'react'
-import {
-  RiCheckLine,
-  RiComputerLine,
-  RiMoonLine,
-  RiSunLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { useTheme } from 'next-themes'
-import ActionButton from '@/app/components/base/action-button'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-
-export type Theme = 'light' | 'dark' | 'system'
-
-export default function ThemeSelector() {
-  const { t } = useTranslation()
-  const { theme, setTheme } = useTheme()
-  const [open, setOpen] = useState(false)
-
-  const handleThemeChange = (newTheme: Theme) => {
-    setTheme(newTheme)
-    setOpen(false)
-  }
-
-  const getCurrentIcon = () => {
-    switch (theme) {
-      case 'light': return <RiSunLine className='h-4 w-4 text-text-tertiary' />
-      case 'dark': return <RiMoonLine className='h-4 w-4 text-text-tertiary' />
-      default: return <RiComputerLine className='h-4 w-4 text-text-tertiary' />
-    }
-  }
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{ mainAxis: 6 }}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => setOpen(!open)}
-      >
-        <ActionButton
-          className={`h-8 w-8 p-[6px] ${open && 'bg-state-base-hover'}`}
-        >
-          {getCurrentIcon()}
-        </ActionButton>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className='flex w-[144px] flex-col items-start rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          <button
-            className='flex w-full items-center gap-1 rounded-lg px-2 py-1.5 text-text-secondary hover:bg-state-base-hover'
-            onClick={() => handleThemeChange('light')}
-          >
-            <RiSunLine className='h-4 w-4 text-text-tertiary' />
-            <div className='flex grow items-center justify-start px-1'>
-              <span className='system-md-regular'>{t('common.theme.light')}</span>
-            </div>
-            {theme === 'light' && <div className='flex h-4 w-4 shrink-0 items-center justify-center'>
-              <RiCheckLine className='h-4 w-4 text-text-accent' />
-            </div>}
-          </button>
-          <button
-            className='flex w-full items-center gap-1 rounded-lg px-2 py-1.5 text-text-secondary hover:bg-state-base-hover'
-            onClick={() => handleThemeChange('dark')}
-          >
-            <RiMoonLine className='h-4 w-4 text-text-tertiary' />
-            <div className='flex grow items-center justify-start px-1'>
-              <span className='system-md-regular'>{t('common.theme.dark')}</span>
-            </div>
-            {theme === 'dark' && <div className='flex h-4 w-4 shrink-0 items-center justify-center'>
-              <RiCheckLine className='h-4 w-4 text-text-accent' />
-            </div>}
-          </button>
-          <button
-            className='flex w-full items-center gap-1 rounded-lg px-2 py-1.5 text-text-secondary hover:bg-state-base-hover'
-            onClick={() => handleThemeChange('system')}
-          >
-            <RiComputerLine className='h-4 w-4 text-text-tertiary' />
-            <div className='flex grow items-center justify-start px-1'>
-              <span className='system-md-regular'>{t('common.theme.auto')}</span>
-            </div>
-            {theme === 'system' && <div className='flex h-4 w-4 shrink-0 items-center justify-center'>
-              <RiCheckLine className='h-4 w-4 text-text-accent' />
-            </div>}
-          </button>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
diff --git a/app/components/base/theme-switcher.tsx b/app/components/base/theme-switcher.tsx
deleted file mode 100644
index 902d064..0000000
--- a/app/components/base/theme-switcher.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-'use client'
-import {
-  RiComputerLine,
-  RiMoonLine,
-  RiSunLine,
-} from '@remixicon/react'
-import { useTheme } from 'next-themes'
-import cn from '@/utils/classnames'
-
-export type Theme = 'light' | 'dark' | 'system'
-
-export default function ThemeSwitcher() {
-  const { theme, setTheme } = useTheme()
-
-  const handleThemeChange = (newTheme: Theme) => {
-    setTheme(newTheme)
-  }
-
-  return (
-    <div className='flex items-center rounded-[10px] bg-components-segmented-control-bg-normal p-0.5'>
-      <div
-        className={cn(
-          'rounded-lg px-2 py-1 text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary',
-          theme === 'system' && 'bg-components-segmented-control-item-active-bg text-text-accent-light-mode-only shadow-sm hover:bg-components-segmented-control-item-active-bg hover:text-text-accent-light-mode-only',
-        )}
-        onClick={() => handleThemeChange('system')}
-      >
-        <div className='p-0.5'>
-          <RiComputerLine className='h-4 w-4' />
-        </div>
-      </div>
-      <div className={cn('h-[14px] w-px bg-transparent', theme === 'dark' && 'bg-divider-regular')}></div>
-      <div
-        className={cn(
-          'rounded-lg px-2 py-1 text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary',
-          theme === 'light' && 'bg-components-segmented-control-item-active-bg text-text-accent-light-mode-only shadow-sm hover:bg-components-segmented-control-item-active-bg hover:text-text-accent-light-mode-only',
-        )}
-        onClick={() => handleThemeChange('light')}
-      >
-        <div className='p-0.5'>
-          <RiSunLine className='h-4 w-4' />
-        </div>
-      </div>
-      <div className={cn('h-[14px] w-px bg-transparent', theme === 'system' && 'bg-divider-regular')}></div>
-      <div
-        className={cn(
-          'rounded-lg px-2 py-1 text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary',
-          theme === 'dark' && 'bg-components-segmented-control-item-active-bg text-text-accent-light-mode-only shadow-sm hover:bg-components-segmented-control-item-active-bg hover:text-text-accent-light-mode-only',
-        )}
-        onClick={() => handleThemeChange('dark')}
-      >
-        <div className='p-0.5'>
-          <RiMoonLine className='h-4 w-4' />
-        </div>
-      </div>
-    </div>
-  )
-}
diff --git a/app/components/base/toast/index.spec.tsx b/app/components/base/toast/index.spec.tsx
deleted file mode 100644
index 2dac8d2..0000000
--- a/app/components/base/toast/index.spec.tsx
+++ /dev/null
@@ -1,193 +0,0 @@
-import type { ReactNode } from 'react'
-import React from 'react'
-import { act, render, screen, waitFor } from '@testing-library/react'
-import Toast, { ToastProvider, useToastContext } from '.'
-import '@testing-library/jest-dom'
-import { noop } from 'lodash-es'
-
-// Mock timers for testing timeouts
-jest.useFakeTimers()
-
-const TestComponent = () => {
-  const { notify, close } = useToastContext()
-
-  return (
-    <div>
-      <button onClick={() => notify({ message: 'Notification message', type: 'info' })}>
-        Show Toast
-      </button>
-      <button onClick={close}>Close Toast</button>
-    </div>
-  )
-}
-
-describe('Toast', () => {
-  describe('Toast Component', () => {
-    test('renders toast with correct type and message', () => {
-      render(
-        <ToastProvider>
-          <Toast type="success" message="Success message" />
-        </ToastProvider>,
-      )
-
-      expect(screen.getByText('Success message')).toBeInTheDocument()
-    })
-
-    test('renders with different types', () => {
-      const { rerender } = render(
-        <ToastProvider>
-          <Toast type="success" message="Success message" />
-        </ToastProvider>,
-      )
-
-      expect(document.querySelector('.text-text-success')).toBeInTheDocument()
-
-      rerender(
-        <ToastProvider>
-          <Toast type="error" message="Error message" />
-        </ToastProvider>,
-      )
-
-      expect(document.querySelector('.text-text-destructive')).toBeInTheDocument()
-    })
-
-    test('renders with custom component', () => {
-      render(
-        <ToastProvider>
-          <Toast
-            message="Message with custom component"
-            customComponent={<span data-testid="custom-component">Custom</span>}
-          />
-        </ToastProvider>,
-      )
-
-      expect(screen.getByTestId('custom-component')).toBeInTheDocument()
-    })
-
-    test('renders children content', () => {
-      render(
-        <ToastProvider>
-          <Toast message="Message with children">
-            <span>Additional information</span>
-          </Toast>
-        </ToastProvider>,
-      )
-
-      expect(screen.getByText('Additional information')).toBeInTheDocument()
-    })
-
-    test('does not render close button when close is undefined', () => {
-      // Create a modified context where close is undefined
-      const CustomToastContext = React.createContext({ notify: noop, close: undefined })
-
-      // Create a wrapper component using the custom context
-      const Wrapper = ({ children }: { children: ReactNode }) => (
-        <CustomToastContext.Provider value={{ notify: noop, close: undefined }}>
-          {children}
-        </CustomToastContext.Provider>
-      )
-
-      render(
-        <Wrapper>
-          <Toast message="No close button" type="info" />
-        </Wrapper>,
-      )
-
-      expect(screen.getByText('No close button')).toBeInTheDocument()
-      // Ensure the close button is not rendered
-      expect(document.querySelector('.h-4.w-4.shrink-0.text-text-tertiary')).not.toBeInTheDocument()
-    })
-  })
-
-  describe('ToastProvider and Context', () => {
-    test('shows and hides toast using context', async () => {
-      render(
-        <ToastProvider>
-          <TestComponent />
-        </ToastProvider>,
-      )
-
-      // No toast initially
-      expect(screen.queryByText('Notification message')).not.toBeInTheDocument()
-
-      // Show toast
-      act(() => {
-        screen.getByText('Show Toast').click()
-      })
-      expect(screen.getByText('Notification message')).toBeInTheDocument()
-
-      // Close toast
-      act(() => {
-        screen.getByText('Close Toast').click()
-      })
-      expect(screen.queryByText('Notification message')).not.toBeInTheDocument()
-    })
-
-    test('automatically hides toast after duration', async () => {
-      render(
-        <ToastProvider>
-          <TestComponent />
-        </ToastProvider>,
-      )
-
-      // Show toast
-      act(() => {
-        screen.getByText('Show Toast').click()
-      })
-      expect(screen.getByText('Notification message')).toBeInTheDocument()
-
-      // Fast-forward timer
-      act(() => {
-        jest.advanceTimersByTime(3000) // Default for info type is 3000ms
-      })
-
-      // Toast should be gone
-      await waitFor(() => {
-        expect(screen.queryByText('Notification message')).not.toBeInTheDocument()
-      })
-    })
-  })
-
-  describe('Toast.notify static method', () => {
-    test('creates and removes toast from DOM', async () => {
-      act(() => {
-        // Call the static method
-        Toast.notify({ message: 'Static notification', type: 'warning' })
-      })
-
-      // Toast should be in document
-      expect(screen.getByText('Static notification')).toBeInTheDocument()
-
-      // Fast-forward timer
-      act(() => {
-        jest.advanceTimersByTime(6000) // Default for warning type is 6000ms
-      })
-
-      // Toast should be removed
-      await waitFor(() => {
-        expect(screen.queryByText('Static notification')).not.toBeInTheDocument()
-      })
-    })
-
-    test('calls onClose callback after duration', async () => {
-      const onCloseMock = jest.fn()
-      act(() => {
-        Toast.notify({
-          message: 'Closing notification',
-          type: 'success',
-          onClose: onCloseMock,
-        })
-      })
-
-      // Fast-forward timer
-      act(() => {
-        jest.advanceTimersByTime(3000) // Default for success type is 3000ms
-      })
-
-      // onClose should be called
-      await waitFor(() => {
-        expect(onCloseMock).toHaveBeenCalled()
-      })
-    })
-  })
-})
diff --git a/app/components/base/tooltip/content.tsx b/app/components/base/tooltip/content.tsx
deleted file mode 100644
index f30940a..0000000
--- a/app/components/base/tooltip/content.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import type { FC, PropsWithChildren, ReactNode } from 'react'
-
-export type ToolTipContentProps = {
-  title?: ReactNode
-  action?: ReactNode
-} & PropsWithChildren
-
-export const ToolTipContent: FC<ToolTipContentProps> = ({
-  title,
-  action,
-  children,
-}) => {
-  return (
-    <div className='w-[180px]'>
-      {title && (
-        <div className='mb-1.5 font-semibold text-text-secondary'>{title}</div>
-      )}
-      <div className='mb-1.5 text-text-tertiary'>{children}</div>
-      {action && <div className='cursor-pointer text-text-accent'>{action}</div>}
-    </div>
-  )
-}
diff --git a/app/components/base/tooltip/index.spec.tsx b/app/components/base/tooltip/index.spec.tsx
deleted file mode 100644
index 1b9b7a0..0000000
--- a/app/components/base/tooltip/index.spec.tsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import React from 'react'
-import { act, cleanup, fireEvent, render, screen } from '@testing-library/react'
-import '@testing-library/jest-dom'
-import Tooltip from './index'
-
-afterEach(cleanup)
-
-describe('Tooltip', () => {
-  describe('Rendering', () => {
-    test('should render default tooltip with question icon', () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip popupContent="Tooltip content" triggerClassName={triggerClassName} />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      expect(trigger).not.toBeNull()
-      expect(trigger?.querySelector('svg')).not.toBeNull() // question icon
-    })
-
-    test('should render with custom children', () => {
-      const { getByText } = render(
-        <Tooltip popupContent="Tooltip content">
-          <button>Hover me</button>
-        </Tooltip>,
-      )
-      expect(getByText('Hover me').textContent).toBe('Hover me')
-    })
-  })
-
-  describe('Disabled state', () => {
-    test('should not show tooltip when disabled', () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip popupContent="Tooltip content" disabled triggerClassName={triggerClassName} />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      act(() => {
-        fireEvent.mouseEnter(trigger!)
-      })
-      expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
-    })
-  })
-
-  describe('Trigger methods', () => {
-    test('should open on hover when triggerMethod is hover', () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip popupContent="Tooltip content" triggerClassName={triggerClassName} />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      act(() => {
-        fireEvent.mouseEnter(trigger!)
-      })
-      expect(screen.queryByText('Tooltip content')).toBeInTheDocument()
-    })
-
-    test('should close on mouse leave when triggerMethod is hover', () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip popupContent="Tooltip content" triggerClassName={triggerClassName} />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      act(() => {
-        fireEvent.mouseEnter(trigger!)
-        fireEvent.mouseLeave(trigger!)
-      })
-      expect(screen.queryByText('Tooltip content')).not.toBeInTheDocument()
-    })
-
-    test('should toggle on click when triggerMethod is click', () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip popupContent="Tooltip content" triggerMethod="click" triggerClassName={triggerClassName} />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      act(() => {
-        fireEvent.click(trigger!)
-      })
-      expect(screen.queryByText('Tooltip content')).toBeInTheDocument()
-    })
-
-    test('should not close immediately on mouse leave when needsDelay is true', () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip popupContent="Tooltip content" triggerMethod="hover" needsDelay triggerClassName={triggerClassName} />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      act(() => {
-        fireEvent.mouseEnter(trigger!)
-        fireEvent.mouseLeave(trigger!)
-      })
-      expect(screen.queryByText('Tooltip content')).toBeInTheDocument()
-    })
-  })
-
-  describe('Styling and positioning', () => {
-    test('should apply custom trigger className', () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip popupContent="Tooltip content" triggerClassName={triggerClassName} />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      expect(trigger?.className).toContain('custom-trigger')
-    })
-
-    test('should apply custom popup className', async () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip popupContent="Tooltip content" triggerClassName={triggerClassName} popupClassName="custom-popup" />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      act(() => {
-        fireEvent.mouseEnter(trigger!)
-      })
-      expect((await screen.findByText('Tooltip content'))?.className).toContain('custom-popup')
-    })
-
-    test('should apply noDecoration when specified', async () => {
-      const triggerClassName = 'custom-trigger'
-      const { container } = render(<Tooltip
-        popupContent="Tooltip content"
-        triggerClassName={triggerClassName}
-        noDecoration
-      />)
-      const trigger = container.querySelector(`.${triggerClassName}`)
-      act(() => {
-        fireEvent.mouseEnter(trigger!)
-      })
-      expect((await screen.findByText('Tooltip content'))?.className).not.toContain('bg-components-panel-bg')
-    })
-  })
-})
diff --git a/app/components/base/with-input-validation/index.spec.tsx b/app/components/base/with-input-validation/index.spec.tsx
deleted file mode 100644
index 732a16d..0000000
--- a/app/components/base/with-input-validation/index.spec.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { render, screen } from '@testing-library/react'
-import '@testing-library/jest-dom'
-import { z } from 'zod'
-import withValidation from '.'
-import { noop } from 'lodash-es'
-
-describe('withValidation HOC', () => {
-  // schema for validation
-  const schema = z.object({ name: z.string() })
-  type Props = z.infer<typeof schema> & {
-    age: number
-  }
-
-  const TestComponent = ({ name, age }: Props) => (
-    <div>{name} - {age}</div>
-  )
-  const WrappedComponent = withValidation(TestComponent, schema)
-
-  beforeAll(() => {
-    jest.spyOn(console, 'error').mockImplementation(noop)
-  })
-
-  afterAll(() => {
-    jest.restoreAllMocks()
-  })
-
-  it('renders the component when validation passes', () => {
-    render(<WrappedComponent name='Valid Name' age={30} />)
-    expect(screen.getByText('Valid Name - 30')).toBeInTheDocument()
-  })
-
-  it('renders the component when props is invalid but not in schema ', () => {
-    render(<WrappedComponent name='Valid Name' age={'aaa' as any} />)
-    expect(screen.getByText('Valid Name - aaa')).toBeInTheDocument()
-  })
-
-  it('does not render the component when validation fails', () => {
-    render(<WrappedComponent name={123 as any} age={30} />)
-    expect(screen.queryByText('123 - 30')).toBeNull()
-  })
-})
diff --git a/app/components/base/with-input-validation/index.tsx b/app/components/base/with-input-validation/index.tsx
deleted file mode 100644
index 6036b79..0000000
--- a/app/components/base/with-input-validation/index.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-'use client'
-import React from 'react'
-import type { ZodSchema } from 'zod'
-
-function withValidation<T extends Record<string, unknown>, K extends keyof T>(
-  WrappedComponent: React.ComponentType<T>,
-  schema: ZodSchema<Pick<T, K>>,
-) {
-  return function EnsuredComponent(props: T) {
-    const partialProps = Object.fromEntries(
-      Object.entries(props).filter(([key]) => key in (schema._def as any).shape),
-    ) as Pick<T, K>
-
-    const checkRes = schema.safeParse(partialProps)
-    if (!checkRes.success) {
-      console.error(checkRes.error)
-      // Maybe there is a better way to handle this, like error logic placeholder
-      return null
-    }
-    return <WrappedComponent {...props} />
-  }
-}
-
-export default withValidation
diff --git a/app/components/billing/pricing/self-hosted-plan-item.tsx b/app/components/billing/pricing/self-hosted-plan-item.tsx
deleted file mode 100644
index 491fdfe..0000000
--- a/app/components/billing/pricing/self-hosted-plan-item.tsx
+++ /dev/null
@@ -1,176 +0,0 @@
-'use client'
-import type { FC, ReactNode } from 'react'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiArrowRightUpLine, RiBrain2Line, RiCheckLine, RiQuestionLine } from '@remixicon/react'
-import { SelfHostedPlan } from '../type'
-import { contactSalesUrl, getStartedWithCommunityUrl, getWithPremiumUrl } from '../config'
-import Toast from '../../base/toast'
-import Tooltip from '../../base/tooltip'
-import { Asterisk, AwsMarketplace, Azure, Buildings, Diamond, GoogleCloud } from '../../base/icons/src/public/billing'
-import type { PlanRange } from './select-plan-range'
-import cn from '@/utils/classnames'
-import { useAppContext } from '@/context/app-context'
-
-type Props = {
-  plan: SelfHostedPlan
-  planRange: PlanRange
-  canPay: boolean
-}
-
-const KeyValue = ({ label, tooltip, textColor, tooltipIconColor }: { icon: ReactNode; label: string; tooltip?: string; textColor: string; tooltipIconColor: string }) => {
-  return (
-    <div className={cn('flex', textColor)}>
-      <div className='flex size-4 items-center justify-center'>
-        <RiCheckLine />
-      </div>
-      <div className={cn('system-sm-regular ml-2 mr-0.5', textColor)}>{label}</div>
-      {tooltip && (
-        <Tooltip
-          asChild
-          popupContent={tooltip}
-          popupClassName='w-[200px]'
-        >
-          <div className='flex size-4 items-center justify-center'>
-            <RiQuestionLine className={cn(tooltipIconColor)} />
-          </div>
-        </Tooltip>
-      )}
-    </div>
-  )
-}
-
-const style = {
-  [SelfHostedPlan.community]: {
-    icon: <Asterisk className='size-7 text-text-primary' />,
-    title: 'text-text-primary',
-    price: 'text-text-primary',
-    priceTip: 'text-text-tertiary',
-    description: 'text-util-colors-gray-gray-600',
-    bg: 'border-effects-highlight-lightmode-off bg-background-section-burn',
-    btnStyle: 'bg-components-button-secondary-bg hover:bg-components-button-secondary-bg-hover border-[0.5px] border-components-button-secondary-border text-text-primary',
-    values: 'text-text-secondary',
-    tooltipIconColor: 'text-text-tertiary',
-  },
-  [SelfHostedPlan.premium]: {
-    icon: <Diamond className='size-7 text-text-warning' />,
-    title: 'text-text-primary',
-    price: 'text-text-primary',
-    priceTip: 'text-text-tertiary',
-    description: 'text-text-warning',
-    bg: 'border-effects-highlight bg-background-section-burn',
-    btnStyle: 'bg-third-party-aws hover:bg-third-party-aws-hover border border-components-button-primary-border text-text-primary-on-surface shadow-xs',
-    values: 'text-text-secondary',
-    tooltipIconColor: 'text-text-tertiary',
-  },
-  [SelfHostedPlan.enterprise]: {
-    icon: <Buildings className='size-7 text-text-primary-on-surface' />,
-    title: 'text-text-primary-on-surface',
-    price: 'text-text-primary-on-surface',
-    priceTip: 'text-text-primary-on-surface',
-    description: 'text-text-primary-on-surface',
-    bg: 'border-effects-highlight bg-[#155AEF] text-text-primary-on-surface',
-    btnStyle: 'bg-white bg-opacity-96 hover:opacity-85 border-[0.5px] border-components-button-secondary-border text-[#155AEF] shadow-xs',
-    values: 'text-text-primary-on-surface',
-    tooltipIconColor: 'text-text-primary-on-surface',
-  },
-}
-const SelfHostedPlanItem: FC<Props> = ({
-  plan,
-}) => {
-  const { t } = useTranslation()
-  const isFreePlan = plan === SelfHostedPlan.community
-  const isPremiumPlan = plan === SelfHostedPlan.premium
-  const i18nPrefix = `billing.plans.${plan}`
-  const isEnterprisePlan = plan === SelfHostedPlan.enterprise
-  const { isCurrentWorkspaceManager } = useAppContext()
-  const features = t(`${i18nPrefix}.features`, { returnObjects: true }) as string[]
-  const handleGetPayUrl = () => {
-    // Only workspace manager can buy plan
-    if (!isCurrentWorkspaceManager) {
-      Toast.notify({
-        type: 'error',
-        message: t('billing.buyPermissionDeniedTip'),
-        className: 'z-[1001]',
-      })
-      return
-    }
-    if (isFreePlan) {
-      window.location.href = getStartedWithCommunityUrl
-      return
-    }
-    if (isPremiumPlan) {
-      window.location.href = getWithPremiumUrl
-      return
-    }
-
-    if (isEnterprisePlan)
-      window.location.href = contactSalesUrl
-  }
-  return (
-    <div className={cn(`relative flex w-[374px] flex-col overflow-hidden rounded-2xl
-      border-[0.5px] hover:border-effects-highlight hover:shadow-lg hover:backdrop-blur-[5px]`, style[plan].bg)}>
-      <div>
-        <div className={cn(isEnterprisePlan ? 'z-1 absolute bottom-0 left-0 right-0 top-0 bg-price-enterprise-background' : '')} >
-        </div>
-        {isEnterprisePlan && <div className='z-15 absolute -left-[90px] -top-[104px] size-[341px] rounded-full bg-[#09328c] opacity-15 mix-blend-plus-darker blur-[80px]'></div>}
-        {isEnterprisePlan && <div className='z-15 absolute -bottom-[72px] -right-[40px] size-[341px] rounded-full bg-[#e2eafb] opacity-15 mix-blend-plus-darker blur-[80px]'></div>}
-      </div>
-      <div className='relative z-10 min-h-[559px] w-full p-6'>
-        <div className=' flex min-h-[108px] flex-col gap-y-1'>
-          {style[plan].icon}
-          <div className='flex items-center'>
-            <div className={cn('system-md-semibold uppercase leading-[125%]', style[plan].title)}>{t(`${i18nPrefix}.name`)}</div>
-          </div>
-          <div className={cn(style[plan].description, 'system-sm-regular')}>{t(`${i18nPrefix}.description`)}</div>
-        </div>
-        <div className='my-3'>
-          <div className='flex items-end'>
-            <div className={cn('shrink-0 text-[28px] font-bold leading-[125%]', style[plan].price)}>{t(`${i18nPrefix}.price`)}</div>
-            {!isFreePlan
-              && <span className={cn('ml-2 py-1 text-[14px] font-normal leading-normal', style[plan].priceTip)}>
-                {t(`${i18nPrefix}.priceTip`)}
-              </span>}
-          </div>
-        </div>
-
-        <div
-          className={cn('system-md-semibold flex h-[44px] cursor-pointer items-center justify-center rounded-full px-5 py-3',
-            style[plan].btnStyle)}
-          onClick={handleGetPayUrl}
-        >
-          {t(`${i18nPrefix}.btnText`)}
-          {isPremiumPlan
-            && <>
-              <div className='mx-1 pt-[6px]'>
-                <AwsMarketplace className='h-6' />
-              </div>
-              <RiArrowRightUpLine className='size-4' />
-            </>}
-        </div>
-        <div className={cn('system-sm-semibold mb-2 mt-6', style[plan].values)}>{t(`${i18nPrefix}.includesTitle`)}</div>
-        <div className='flex flex-col gap-y-3'>
-          {features.map(v =>
-            <KeyValue key={`${plan}-${v}`}
-              textColor={style[plan].values}
-              tooltipIconColor={style[plan].tooltipIconColor}
-              icon={<RiBrain2Line />}
-              label={v}
-            />)}
-        </div>
-        {isPremiumPlan && <div className='mt-[68px]'>
-          <div className='flex items-center gap-x-1'>
-            <div className='flex size-8 items-center justify-center rounded-lg border-[0.5px] border-components-panel-border-subtle bg-background-default shadow-xs'>
-              <Azure />
-            </div>
-            <div className='flex size-8 items-center justify-center rounded-lg border-[0.5px] border-components-panel-border-subtle bg-background-default shadow-xs'>
-              <GoogleCloud />
-            </div>
-          </div>
-          <span className={cn('system-xs-regular mt-2', style[plan].tooltipIconColor)}>{t('billing.plans.premium.comingSoon')}</span>
-        </div>}
-      </div>
-    </div>
-  )
-}
-export default React.memo(SelfHostedPlanItem)
diff --git a/app/components/datasets/create/assets/watercrawl.svg b/app/components/datasets/create/assets/watercrawl.svg
deleted file mode 100644
index bd4e6ba..0000000
--- a/app/components/datasets/create/assets/watercrawl.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
-    <path style="fill: rgb(0, 23, 87); stroke: rgb(13, 14, 52);" d="M 247.794 213.903 L 246.81 76.976 L 254.345 76.963 L 254.592 213.989 L 247.794 213.903 Z"/>
-    <ellipse style="fill: rgb(0, 23, 87); stroke: rgb(0, 23, 87);" cx="250.025" cy="43.859" rx="33.966" ry="33.906"/>
-    <path style="fill: rgb(30, 141, 166); stroke: rgb(30, 141, 166);" d="M 282.472 260.389 L 414.181 330.253 L 410.563 336.234 L 279.38 265.739 L 282.472 260.389 Z"/>
-    <path style="fill: rgb(15, 17, 57); stroke: rgb(13, 14, 52);" d="M 255.105 281.394 L 254.485 417.656 L 246.156 417.691 L 246.688 280.51 L 255.105 281.394 Z"/>
-    <path style="paint-order: fill; fill: rgb(30, 141, 166); stroke: rgb(30, 141, 166);" d="M 279.486 229.517 L 410.351 160.07 L 413.923 167.04 L 283.727 235.998 L 279.486 229.517 Z"/>
-    <path style="fill: rgb(15, 164, 161); stroke: rgb(15, 164, 161);" d="M 88.545 164.884 L 219.797 236.07 L 222.867 229.568 L 90.887 159.47 L 88.545 164.884 Z"/>
-    <path style="fill: rgb(15, 164, 161); stroke: rgb(15, 164, 161);" d="M 224.76 266.9 L 95.55 334.829 L 92.878 328.37 L 219.955 261.275 L 224.76 266.9 Z"/>
-    <ellipse style="paint-order: fill; fill: rgb(2, 181, 225); stroke: rgb(2, 181, 225);" cx="251.242" cy="247.466" rx="33.966" ry="33.906"/>
-    <path style="fill: rgb(13, 14, 52); stroke: rgb(13, 14, 52);" d="M 279.502 433.617 L 408.666 359.443 C 408.666 359.443 412.398 366.965 412.398 366.916 C 412.398 366.867 281.544 440.217 281.544 440.217 L 279.502 433.617 Z"/>
-    <path style="fill: rgb(13, 14, 52); stroke: rgb(13, 14, 52);" d="M 223.119 431.408 L 96.643 361.068 L 93.265 368.047 L 218.895 438.099 L 223.119 431.408 Z"/>
-    <ellipse style="fill: rgb(0, 23, 87); stroke: rgb(0, 23, 87);" cx="250.504" cy="451.168" rx="33.966" ry="33.906"/>
-    <path style="fill: rgb(90, 191, 187); stroke: rgb(90, 191, 187);" d="M 435.665 180.895 L 435.859 316.869 L 443.103 315.579 L 442.56 180.697 L 435.665 180.895 Z"/>
-    <ellipse style="fill: rgb(0, 23, 87); stroke: rgb(0, 23, 87);" cx="441.06" cy="349.665" rx="33.966" ry="33.906"/>
-    <ellipse style="fill: rgb(2, 181, 225); stroke: rgb(2, 181, 225);" cx="441.512" cy="147.767" rx="33.966" ry="33.906"/>
-    <path style="fill: rgb(84, 187, 181); stroke: rgb(84, 187, 181);" d="M 64.755 314.523 L 57.928 315.006 L 58.307 182.961 L 65.169 182.865 L 64.755 314.523 Z"/>
-    <ellipse style="fill: rgb(0, 23, 87); stroke: rgb(0, 23, 87);" cx="58.177" cy="149.757" rx="33.966" ry="33.906"/>
-    <ellipse style="fill: rgb(61, 224, 203); stroke: rgb(61, 224, 203);" cx="65.909" cy="348.17" rx="33.966" ry="33.906"/>
-</svg>
diff --git a/app/components/datasets/create/website/watercrawl/header.tsx b/app/components/datasets/create/website/watercrawl/header.tsx
deleted file mode 100644
index 38b2813..0000000
--- a/app/components/datasets/create/website/watercrawl/header.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiBookOpenLine, RiEqualizer2Line } from '@remixicon/react'
-import Button from '@/app/components/base/button'
-
-const I18N_PREFIX = 'datasetCreation.stepOne.website'
-
-type Props = {
-  onSetting: () => void
-}
-
-const Header: FC<Props> = ({
-  onSetting,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex h-6 items-center justify-between'>
-      <div className='flex items-center'>
-        <div className='text-base font-medium text-text-secondary'>{t(`${I18N_PREFIX}.watercrawlTitle`)}</div>
-        <div className='ml-2 mr-2 h-3.5 w-px bg-divider-regular' />
-        <Button className='flex h-6 items-center gap-x-[1px] px-1.5' onClick={onSetting}>
-          <RiEqualizer2Line className='h-3.5 w-3.5 text-components-button-secondary-text' />
-          <span className='px-[3px] text-xs font-medium text-components-button-secondary-text'>
-            {t(`${I18N_PREFIX}.configureWatercrawl`)}
-          </span>
-        </Button>
-      </div>
-      <a
-        href='https://docs.watercrawl.dev/'
-        target='_blank'
-        rel='noopener noreferrer'
-        className='inline-flex items-center gap-x-1 text-xs font-medium text-text-accent'
-      >
-        <RiBookOpenLine className='h-3.5 w-3.5 text-text-accent' />
-        <span>{t(`${I18N_PREFIX}.watercrawlDoc`)}</span>
-      </a>
-    </div>
-  )
-}
-export default React.memo(Header)
diff --git a/app/components/datasets/create/website/watercrawl/index.tsx b/app/components/datasets/create/website/watercrawl/index.tsx
deleted file mode 100644
index bd4faa1..0000000
--- a/app/components/datasets/create/website/watercrawl/index.tsx
+++ /dev/null
@@ -1,217 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useEffect, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import UrlInput from '../base/url-input'
-import OptionsWrap from '../base/options-wrap'
-import CrawledResult from '../base/crawled-result'
-import Crawling from '../base/crawling'
-import ErrorMessage from '../base/error-message'
-import Header from './header'
-import Options from './options'
-import { useModalContext } from '@/context/modal-context'
-import type { CrawlOptions, CrawlResultItem } from '@/models/datasets'
-import Toast from '@/app/components/base/toast'
-import { checkWatercrawlTaskStatus, createWatercrawlTask } from '@/service/datasets'
-import { sleep } from '@/utils'
-
-const ERROR_I18N_PREFIX = 'common.errorMsg'
-const I18N_PREFIX = 'datasetCreation.stepOne.website'
-
-type Props = {
-  onPreview: (payload: CrawlResultItem) => void
-  checkedCrawlResult: CrawlResultItem[]
-  onCheckedCrawlResultChange: (payload: CrawlResultItem[]) => void
-  onJobIdChange: (jobId: string) => void
-  crawlOptions: CrawlOptions
-  onCrawlOptionsChange: (payload: CrawlOptions) => void
-}
-
-enum Step {
-  init = 'init',
-  running = 'running',
-  finished = 'finished',
-}
-
-const WaterCrawl: FC<Props> = ({
-  onPreview,
-  checkedCrawlResult,
-  onCheckedCrawlResultChange,
-  onJobIdChange,
-  crawlOptions,
-  onCrawlOptionsChange,
-}) => {
-  const { t } = useTranslation()
-  const [step, setStep] = useState<Step>(Step.init)
-  const [controlFoldOptions, setControlFoldOptions] = useState<number>(0)
-  useEffect(() => {
-    if (step !== Step.init)
-      setControlFoldOptions(Date.now())
-  }, [step])
-  const { setShowAccountSettingModal } = useModalContext()
-  const handleSetting = useCallback(() => {
-    setShowAccountSettingModal({
-      payload: 'data-source',
-    })
-  }, [setShowAccountSettingModal])
-
-  const checkValid = useCallback((url: string) => {
-    let errorMsg = ''
-    if (!url) {
-      errorMsg = t(`${ERROR_I18N_PREFIX}.fieldRequired`, {
-        field: 'url',
-      })
-    }
-
-    if (!errorMsg && !((url.startsWith('http://') || url.startsWith('https://'))))
-      errorMsg = t(`${ERROR_I18N_PREFIX}.urlError`)
-
-    if (!errorMsg && (crawlOptions.limit === null || crawlOptions.limit === undefined || crawlOptions.limit === '')) {
-      errorMsg = t(`${ERROR_I18N_PREFIX}.fieldRequired`, {
-        field: t(`${I18N_PREFIX}.limit`),
-      })
-    }
-
-    return {
-      isValid: !errorMsg,
-      errorMsg,
-    }
-  }, [crawlOptions, t])
-
-  const isInit = step === Step.init
-  const isCrawlFinished = step === Step.finished
-  const isRunning = step === Step.running
-  const [crawlResult, setCrawlResult] = useState<{
-    current: number
-    total: number
-    data: CrawlResultItem[]
-    time_consuming: number | string
-  } | undefined>(undefined)
-  const [crawlErrorMessage, setCrawlErrorMessage] = useState('')
-  const showError = isCrawlFinished && crawlErrorMessage
-
-  const waitForCrawlFinished = useCallback(async (jobId: string): Promise<any> => {
-    try {
-      const res = await checkWatercrawlTaskStatus(jobId) as any
-      if (res.status === 'completed') {
-        return {
-          isError: false,
-          data: {
-            ...res,
-            total: Math.min(res.total, Number.parseFloat(crawlOptions.limit as string)),
-          },
-        }
-      }
-      if (res.status === 'error' || !res.status) {
-        // can't get the error message from the watercrawl api
-        return {
-          isError: true,
-          errorMessage: res.message,
-          data: {
-            data: [],
-          },
-        }
-      }
-      // update the progress
-      setCrawlResult({
-        ...res,
-        total: Math.min(res.total, Number.parseFloat(crawlOptions.limit as string)),
-      })
-      onCheckedCrawlResultChange(res.data || []) // default select the crawl result
-      await sleep(2500)
-      return await waitForCrawlFinished(jobId)
-    }
-    catch (e: any) {
-      const errorBody = await e.json()
-      return {
-        isError: true,
-        errorMessage: errorBody.message,
-        data: {
-          data: [],
-        },
-      }
-    }
-  }, [crawlOptions.limit])
-
-  const handleRun = useCallback(async (url: string) => {
-    const { isValid, errorMsg } = checkValid(url)
-    if (!isValid) {
-      Toast.notify({
-        message: errorMsg!,
-        type: 'error',
-      })
-      return
-    }
-    setStep(Step.running)
-    try {
-      const passToServerCrawlOptions: any = {
-        ...crawlOptions,
-      }
-      if (crawlOptions.max_depth === '')
-        delete passToServerCrawlOptions.max_depth
-
-      const res = await createWatercrawlTask({
-        url,
-        options: passToServerCrawlOptions,
-      }) as any
-      const jobId = res.job_id
-      onJobIdChange(jobId)
-      const { isError, data, errorMessage } = await waitForCrawlFinished(jobId)
-      if (isError) {
-        setCrawlErrorMessage(errorMessage || t(`${I18N_PREFIX}.unknownError`))
-      }
-      else {
-        setCrawlResult(data)
-        onCheckedCrawlResultChange(data.data || []) // default select the crawl result
-        setCrawlErrorMessage('')
-      }
-    }
-    catch (e) {
-      setCrawlErrorMessage(t(`${I18N_PREFIX}.unknownError`)!)
-      console.log(e)
-    }
-    finally {
-      setStep(Step.finished)
-    }
-  }, [checkValid, crawlOptions, onJobIdChange, t, waitForCrawlFinished])
-
-  return (
-    <div>
-      <Header onSetting={handleSetting} />
-      <div className='mt-2 rounded-xl border border-components-panel-border bg-background-default-subtle p-4 pb-0'>
-        <UrlInput onRun={handleRun} isRunning={isRunning} />
-        <OptionsWrap
-          className='mt-4'
-          controlFoldOptions={controlFoldOptions}
-        >
-          <Options className='mt-2' payload={crawlOptions} onChange={onCrawlOptionsChange} />
-        </OptionsWrap>
-
-        {!isInit && (
-          <div className='relative left-[-16px] mt-3 w-[calc(100%_+_32px)] rounded-b-xl'>
-            {isRunning
-              && <Crawling
-                className='mt-2'
-                crawledNum={crawlResult?.current || 0}
-                totalNum={crawlResult?.total || Number.parseFloat(crawlOptions.limit as string) || 0}
-              />}
-            {showError && (
-              <ErrorMessage className='rounded-b-xl' title={t(`${I18N_PREFIX}.exceptionErrorTitle`)} errorMsg={crawlErrorMessage} />
-            )}
-            {isCrawlFinished && !showError
-              && <CrawledResult
-                className='mb-2'
-                list={crawlResult?.data || []}
-                checkedList={checkedCrawlResult}
-                onSelectedChange={onCheckedCrawlResultChange}
-                onPreview={onPreview}
-                usedTime={Number.parseFloat(crawlResult?.time_consuming as string) || 0}
-              />
-            }
-          </div>
-        )}
-      </div>
-    </div>
-  )
-}
-export default React.memo(WaterCrawl)
diff --git a/app/components/datasets/create/website/watercrawl/options.tsx b/app/components/datasets/create/website/watercrawl/options.tsx
deleted file mode 100644
index dea6c0e..0000000
--- a/app/components/datasets/create/website/watercrawl/options.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import CheckboxWithLabel from '../base/checkbox-with-label'
-import Field from '../base/field'
-import cn from '@/utils/classnames'
-import type { CrawlOptions } from '@/models/datasets'
-
-const I18N_PREFIX = 'datasetCreation.stepOne.website'
-
-type Props = {
-  className?: string
-  payload: CrawlOptions
-  onChange: (payload: CrawlOptions) => void
-}
-
-const Options: FC<Props> = ({
-  className = '',
-  payload,
-  onChange,
-}) => {
-  const { t } = useTranslation()
-
-  const handleChange = useCallback((key: keyof CrawlOptions) => {
-    return (value: any) => {
-      onChange({
-        ...payload,
-        [key]: value,
-      })
-    }
-  }, [payload, onChange])
-  return (
-    <div className={cn(className, ' space-y-2')}>
-      <CheckboxWithLabel
-        label={t(`${I18N_PREFIX}.crawlSubPage`)}
-        isChecked={payload.crawl_sub_pages}
-        onChange={handleChange('crawl_sub_pages')}
-        labelClassName='text-[13px] leading-[16px] font-medium text-text-secondary'
-      />
-      <div className='flex justify-between space-x-4'>
-        <Field
-          className='shrink-0 grow'
-          label={t(`${I18N_PREFIX}.limit`)}
-          value={payload.limit}
-          onChange={handleChange('limit')}
-          isNumber
-          isRequired
-        />
-        <Field
-          className='shrink-0 grow'
-          label={t(`${I18N_PREFIX}.maxDepth`)}
-          value={payload.max_depth}
-          onChange={handleChange('max_depth')}
-          isNumber
-          tooltip={t(`${I18N_PREFIX}.maxDepthTooltip`)!}
-        />
-      </div>
-
-      <div className='flex justify-between space-x-4'>
-        <Field
-          className='shrink-0 grow'
-          label={t(`${I18N_PREFIX}.excludePaths`)}
-          value={payload.excludes}
-          onChange={handleChange('excludes')}
-          placeholder='blog/*, /about/*'
-        />
-        <Field
-          className='shrink-0 grow'
-          label={t(`${I18N_PREFIX}.includeOnlyPaths`)}
-          value={payload.includes}
-          onChange={handleChange('includes')}
-          placeholder='articles/*'
-        />
-      </div>
-      <CheckboxWithLabel
-        label={t(`${I18N_PREFIX}.extractOnlyMainContent`)}
-        isChecked={payload.only_main_content}
-        onChange={handleChange('only_main_content')}
-        labelClassName='text-[13px] leading-[16px] font-medium text-text-secondary'
-      />
-    </div>
-  )
-}
-export default React.memo(Options)
diff --git a/app/components/datasets/documents/detail/completed/segment-card/chunk-content.tsx b/app/components/datasets/documents/detail/completed/segment-card/chunk-content.tsx
deleted file mode 100644
index d93eb94..0000000
--- a/app/components/datasets/documents/detail/completed/segment-card/chunk-content.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import React, { type FC } from 'react'
-import cn from '@/utils/classnames'
-import { useSegmentListContext } from '..'
-import { Markdown } from '@/app/components/base/markdown'
-
-type ChunkContentProps = {
-  detail: {
-    answer?: string
-    content: string
-    sign_content: string
-  }
-  isFullDocMode: boolean
-  className?: string
-}
-
-const ChunkContent: FC<ChunkContentProps> = ({
-  detail,
-  isFullDocMode,
-  className,
-}) => {
-  const { answer, content, sign_content } = detail
-  const isCollapsed = useSegmentListContext(s => s.isCollapsed)
-
-  if (answer) {
-    return (
-      <div className={className}>
-        <div className='flex gap-x-1'>
-          <div className='w-4 shrink-0 text-[13px] font-medium leading-[20px] text-text-tertiary'>Q</div>
-          <div
-            className={cn('body-md-regular text-text-secondary',
-              isCollapsed ? 'line-clamp-2' : 'line-clamp-20',
-            )}>
-            {content}
-          </div>
-        </div>
-        <div className='flex gap-x-1'>
-          <div className='w-4 shrink-0 text-[13px] font-medium leading-[20px] text-text-tertiary'>A</div>
-          <div className={cn('body-md-regular text-text-secondary',
-            isCollapsed ? 'line-clamp-2' : 'line-clamp-20',
-          )}>
-            {answer}
-          </div>
-        </div>
-      </div>
-    )
-  }
-  return <Markdown
-    className={cn('!mt-0.5 !text-text-secondary',
-      isFullDocMode ? 'line-clamp-3' : isCollapsed ? 'line-clamp-2' : 'line-clamp-20',
-      className,
-    )}
-    content={sign_content || content || ''}
-    customDisallowedElements={['input']}
-  />
-}
-
-export default React.memo(ChunkContent)
diff --git a/app/components/datasets/documents/detail/completed/segment-card/index.tsx b/app/components/datasets/documents/detail/completed/segment-card/index.tsx
deleted file mode 100644
index 584a60b..0000000
--- a/app/components/datasets/documents/detail/completed/segment-card/index.tsx
+++ /dev/null
@@ -1,254 +0,0 @@
-import React, { type FC, useCallback, useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiDeleteBinLine, RiEditLine } from '@remixicon/react'
-import { StatusItem } from '../../../list'
-import { useDocumentContext } from '../../index'
-import ChildSegmentList from '../child-segment-list'
-import Tag from '../common/tag'
-import Dot from '../common/dot'
-import { SegmentIndexTag } from '../common/segment-index-tag'
-import ParentChunkCardSkeleton from '../skeleton/parent-chunk-card-skeleton'
-import type { ChildChunkDetail, SegmentDetailModel } from '@/models/datasets'
-import Switch from '@/app/components/base/switch'
-import Divider from '@/app/components/base/divider'
-import { formatNumber } from '@/utils/format'
-import Confirm from '@/app/components/base/confirm'
-import cn from '@/utils/classnames'
-import Badge from '@/app/components/base/badge'
-import { isAfter } from '@/utils/time'
-import Tooltip from '@/app/components/base/tooltip'
-import ChunkContent from './chunk-content'
-
-type ISegmentCardProps = {
-  loading: boolean
-  detail?: SegmentDetailModel & { document?: { name: string } }
-  onClick?: () => void
-  onChangeSwitch?: (enabled: boolean, segId?: string) => Promise<void>
-  onDelete?: (segId: string) => Promise<void>
-  onDeleteChildChunk?: (segId: string, childChunkId: string) => Promise<void>
-  handleAddNewChildChunk?: (parentChunkId: string) => void
-  onClickSlice?: (childChunk: ChildChunkDetail) => void
-  onClickEdit?: () => void
-  className?: string
-  archived?: boolean
-  embeddingAvailable?: boolean
-  focused: {
-    segmentIndex: boolean
-    segmentContent: boolean
-  }
-}
-
-const SegmentCard: FC<ISegmentCardProps> = ({
-  detail = {},
-  onClick,
-  onChangeSwitch,
-  onDelete,
-  onDeleteChildChunk,
-  handleAddNewChildChunk,
-  onClickSlice,
-  onClickEdit,
-  loading = true,
-  className = '',
-  archived,
-  embeddingAvailable,
-  focused,
-}) => {
-  const { t } = useTranslation()
-  const {
-    id,
-    position,
-    enabled,
-    content,
-    sign_content,
-    word_count,
-    hit_count,
-    answer,
-    keywords,
-    child_chunks = [],
-    created_at,
-    updated_at,
-  } = detail as Required<ISegmentCardProps>['detail']
-  const [showModal, setShowModal] = useState(false)
-  const mode = useDocumentContext(s => s.mode)
-  const parentMode = useDocumentContext(s => s.parentMode)
-
-  const isGeneralMode = useMemo(() => {
-    return mode === 'custom'
-  }, [mode])
-
-  const isParentChildMode = useMemo(() => {
-    return mode === 'hierarchical'
-  }, [mode])
-
-  const isParagraphMode = useMemo(() => {
-    return mode === 'hierarchical' && parentMode === 'paragraph'
-  }, [mode, parentMode])
-
-  const isFullDocMode = useMemo(() => {
-    return mode === 'hierarchical' && parentMode === 'full-doc'
-  }, [mode, parentMode])
-
-  const chunkEdited = useMemo(() => {
-    if (mode === 'hierarchical' && parentMode === 'full-doc')
-      return false
-    return isAfter(updated_at * 1000, created_at * 1000)
-  }, [mode, parentMode, updated_at, created_at])
-
-  const contentOpacity = useMemo(() => {
-    return (enabled || focused.segmentContent) ? '' : 'opacity-50 group-hover/card:opacity-100'
-  }, [enabled, focused.segmentContent])
-
-  const handleClickCard = useCallback(() => {
-    if (mode !== 'hierarchical' || parentMode !== 'full-doc')
-      onClick?.()
-  }, [mode, parentMode, onClick])
-
-  const wordCountText = useMemo(() => {
-    const total = formatNumber(word_count)
-    return `${total} ${t('datasetDocuments.segment.characters', { count: word_count })}`
-  }, [word_count, t])
-
-  const labelPrefix = useMemo(() => {
-    return isParentChildMode ? t('datasetDocuments.segment.parentChunk') : t('datasetDocuments.segment.chunk')
-  }, [isParentChildMode, t])
-
-  if (loading)
-    return <ParentChunkCardSkeleton />
-
-  return (
-    <div
-      className={cn(
-        'group/card w-full rounded-xl px-3',
-        isFullDocMode ? '' : 'pb-2 pt-2.5 hover:bg-dataset-chunk-detail-card-hover-bg',
-        focused.segmentContent ? 'bg-dataset-chunk-detail-card-hover-bg' : '',
-        className,
-      )}
-      onClick={handleClickCard}
-    >
-      <div className='relative flex h-5 items-center justify-between'>
-        <>
-          <div className='flex items-center gap-x-2'>
-            <SegmentIndexTag
-              className={cn(contentOpacity)}
-              iconClassName={focused.segmentIndex ? 'text-text-accent' : ''}
-              labelClassName={focused.segmentIndex ? 'text-text-accent' : ''}
-              positionId={position}
-              label={isFullDocMode ? labelPrefix : ''}
-              labelPrefix={labelPrefix}
-            />
-            <Dot />
-            <div className={cn('system-xs-medium text-text-tertiary', contentOpacity)}>{wordCountText}</div>
-            <Dot />
-            <div className={cn('system-xs-medium text-text-tertiary', contentOpacity)}>{`${formatNumber(hit_count)} ${t('datasetDocuments.segment.hitCount')}`}</div>
-            {chunkEdited && (
-              <>
-                <Dot />
-                <Badge text={t('datasetDocuments.segment.edited') as string} uppercase className={contentOpacity} />
-              </>
-            )}
-          </div>
-          {!isFullDocMode
-            ? <div className='flex items-center'>
-              <StatusItem status={enabled ? 'enabled' : 'disabled'} reverse textCls="text-text-tertiary system-xs-regular" />
-              {embeddingAvailable && (
-                <div className="absolute -right-2.5 -top-2 z-20 hidden items-center gap-x-0.5 rounded-[10px] border-[0.5px]
-                      border-components-actionbar-border bg-components-actionbar-bg p-1 shadow-md backdrop-blur-[5px] group-hover/card:flex">
-                  {!archived && (
-                    <>
-                      <Tooltip
-                        popupContent='Edit'
-                        popupClassName='text-text-secondary system-xs-medium'
-                      >
-                        <div
-                          className='flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-lg hover:bg-state-base-hover'
-                          onClick={(e) => {
-                            e.stopPropagation()
-                            onClickEdit?.()
-                          }}>
-                          <RiEditLine className='h-4 w-4 text-text-tertiary' />
-                        </div>
-                      </Tooltip>
-                      <Tooltip
-                        popupContent='Delete'
-                        popupClassName='text-text-secondary system-xs-medium'
-                      >
-                        <div className='group/delete flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-lg hover:bg-state-destructive-hover'
-                          onClick={(e) => {
-                            e.stopPropagation()
-                            setShowModal(true)
-                          }
-                          }>
-                          <RiDeleteBinLine className='h-4 w-4 text-text-tertiary group-hover/delete:text-text-destructive' />
-                        </div>
-                      </Tooltip>
-                      <Divider type="vertical" className="h-3.5 bg-divider-regular" />
-                    </>
-                  )}
-                  <div
-                    onClick={(e: React.MouseEvent<HTMLDivElement, MouseEvent>) =>
-                      e.stopPropagation()
-                    }
-                    className="flex items-center"
-                  >
-                    <Switch
-                      size='md'
-                      disabled={archived || detail?.status !== 'completed'}
-                      defaultValue={enabled}
-                      onChange={async (val) => {
-                        await onChangeSwitch?.(val, id)
-                      }}
-                    />
-                  </div>
-                </div>
-              )}
-            </div>
-            : null}
-        </>
-      </div>
-      <ChunkContent
-        detail={{
-          answer,
-          content,
-          sign_content,
-        }}
-        isFullDocMode={isFullDocMode}
-        className={contentOpacity}
-      />
-      {isGeneralMode && <div className={cn('flex flex-wrap items-center gap-2 py-1.5', contentOpacity)}>
-        {keywords?.map(keyword => <Tag key={keyword} text={keyword} />)}
-      </div>}
-      {
-        isFullDocMode
-          ? <button
-            type='button'
-            className='system-xs-semibold-uppercase mb-2 mt-0.5 text-text-accent'
-            onClick={() => onClick?.()}
-          >{t('common.operation.viewMore')}</button>
-          : null
-      }
-      {
-        isParagraphMode && child_chunks.length > 0
-          && <ChildSegmentList
-            parentChunkId={id}
-            childChunks={child_chunks}
-            enabled={enabled}
-            onDelete={onDeleteChildChunk!}
-            handleAddNewChildChunk={handleAddNewChildChunk}
-            onClickSlice={onClickSlice}
-            focused={focused.segmentContent}
-          />
-      }
-      {showModal
-        && <Confirm
-          isShow={showModal}
-          title={t('datasetDocuments.segment.delete')}
-          confirmText={t('common.operation.sure')}
-          onConfirm={async () => { await onDelete?.(id) }}
-          onCancel={() => setShowModal(false)}
-        />
-      }
-    </div>
-  )
-}
-
-export default React.memo(SegmentCard)
diff --git a/app/components/datasets/metadata/add-metadata-button.tsx b/app/components/datasets/metadata/add-metadata-button.tsx
deleted file mode 100644
index c342750..0000000
--- a/app/components/datasets/metadata/add-metadata-button.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import Button from '../../base/button'
-import { RiAddLine } from '@remixicon/react'
-import cn from '@/utils/classnames'
-import { useTranslation } from 'react-i18next'
-
-type Props = {
-  className?: string
-  onClick?: () => void
-}
-
-const AddedMetadataButton: FC<Props> = ({
-  className,
-  onClick,
-}) => {
-  const { t } = useTranslation()
-  return (
-    <Button
-      className={cn('flex w-full items-center', className)}
-      size='small'
-      variant='tertiary'
-      onClick={onClick}
-    >
-      <RiAddLine className='mr-1 size-3.5' />
-      <div>{t('dataset.metadata.addMetadata')}</div>
-    </Button>
-  )
-}
-export default React.memo(AddedMetadataButton)
diff --git a/app/components/datasets/metadata/base/date-picker.tsx b/app/components/datasets/metadata/base/date-picker.tsx
deleted file mode 100644
index f2bf1e4..0000000
--- a/app/components/datasets/metadata/base/date-picker.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-import { useCallback } from 'react'
-import dayjs from 'dayjs'
-import {
-  RiCalendarLine,
-  RiCloseCircleFill,
-} from '@remixicon/react'
-import DatePicker from '@/app/components/base/date-and-time-picker/date-picker'
-import cn from '@/utils/classnames'
-import type { TriggerProps } from '@/app/components/base/date-and-time-picker/types'
-import useTimestamp from '@/hooks/use-timestamp'
-import { useTranslation } from 'react-i18next'
-
-type Props = {
-  className?: string
-  value?: number
-  onChange: (date: number | null) => void
-}
-const WrappedDatePicker = ({
-  className,
-  value,
-  onChange,
-}: Props) => {
-  const { t } = useTranslation()
-  // const { userProfile: { timezone } } = useAppContext()
-  const { formatTime: formatTimestamp } = useTimestamp()
-
-  const handleDateChange = useCallback((date?: dayjs.Dayjs) => {
-    if (date)
-      onChange(date.unix())
-    else
-      onChange(null)
-  }, [onChange])
-
-  const renderTrigger = useCallback(({
-    handleClickTrigger,
-  }: TriggerProps) => {
-    return (
-      <div onClick={handleClickTrigger} className={cn('group flex items-center rounded-md bg-components-input-bg-normal', className)}>
-        <div
-          className={cn(
-            'grow',
-            value ? 'text-text-secondary' : 'text-text-tertiary',
-          )}
-        >
-          {value ? formatTimestamp(value, t('datasetDocuments.metadata.dateTimeFormat')) : t('dataset.metadata.chooseTime')}
-        </div>
-        <RiCloseCircleFill
-          className={cn(
-            'hidden h-4 w-4 cursor-pointer hover:text-components-input-text-filled group-hover:block',
-            value && 'text-text-quaternary',
-          )}
-          onClick={() => handleDateChange()}
-        />
-        <RiCalendarLine
-          className={cn(
-            'block h-4 w-4 shrink-0 group-hover:hidden',
-            value ? 'text-text-quaternary' : 'text-text-tertiary',
-          )}
-        />
-      </div>
-    )
-  }, [className, value, formatTimestamp, t, handleDateChange])
-
-  return (
-    <DatePicker
-      value={dayjs(value ? value * 1000 : Date.now())}
-      onChange={handleDateChange}
-      onClear={handleDateChange}
-      renderTrigger={renderTrigger}
-      triggerWrapClassName='w-full'
-      popupZIndexClassname='z-[1000]'
-    />
-  )
-}
-
-export default WrappedDatePicker
diff --git a/app/components/datasets/metadata/edit-metadata-batch/add-row.tsx b/app/components/datasets/metadata/edit-metadata-batch/add-row.tsx
deleted file mode 100644
index 500bca3..0000000
--- a/app/components/datasets/metadata/edit-metadata-batch/add-row.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { MetadataItemWithEdit } from '../types'
-import cn from '@/utils/classnames'
-import Label from './label'
-import InputCombined from './input-combined'
-import { RiIndeterminateCircleLine } from '@remixicon/react'
-
-type Props = {
-  className?: string
-  payload: MetadataItemWithEdit
-  onChange: (value: MetadataItemWithEdit) => void
-  onRemove: () => void
-}
-
-const AddRow: FC<Props> = ({
-  className,
-  payload,
-  onChange,
-  onRemove,
-}) => {
-  return (
-    <div className={cn('flex h-6 items-center space-x-0.5', className)}>
-      <Label text={payload.name} />
-      <InputCombined
-        type={payload.type}
-        value={payload.value}
-        onChange={value => onChange({ ...payload, value })}
-      />
-      <div
-        className={
-          cn(
-            'cursor-pointer rounded-md p-1 text-text-tertiary hover:bg-state-destructive-hover hover:text-text-destructive',
-          )
-        }
-        onClick={onRemove}
-      >
-        <RiIndeterminateCircleLine className='size-4' />
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(AddRow)
diff --git a/app/components/datasets/metadata/edit-metadata-batch/edit-row.tsx b/app/components/datasets/metadata/edit-metadata-batch/edit-row.tsx
deleted file mode 100644
index 63b4338..0000000
--- a/app/components/datasets/metadata/edit-metadata-batch/edit-row.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { type MetadataItemWithEdit, UpdateType } from '../types'
-import Label from './label'
-import { RiDeleteBinLine } from '@remixicon/react'
-import cn from '@/utils/classnames'
-import InputHasSetMultipleValue from './input-has-set-multiple-value'
-import InputCombined from './input-combined'
-import EditedBeacon from './edited-beacon'
-
-type Props = {
-  payload: MetadataItemWithEdit
-  onChange: (payload: MetadataItemWithEdit) => void
-  onRemove: (id: string) => void
-  onReset: (id: string) => void
-}
-
-const EditMetadatabatchItem: FC<Props> = ({
-  payload,
-  onChange,
-  onRemove,
-  onReset,
-}) => {
-  const isUpdated = payload.isUpdated
-  const isDeleted = payload.updateType === UpdateType.delete
-  return (
-    <div className='flex h-6 items-center space-x-0.5'>
-      {isUpdated ? <EditedBeacon onReset={() => onReset(payload.id)} /> : <div className='size-4 shrink-0' />}
-      <Label text={payload.name} isDeleted={isDeleted} />
-      {payload.isMultipleValue
-        ? <InputHasSetMultipleValue
-          onClear={() => onChange({ ...payload, value: null, isMultipleValue: false })}
-          readOnly={isDeleted}
-        />
-        : <InputCombined
-          type={payload.type}
-          value={payload.value}
-          onChange={v => onChange({ ...payload, value: v as string })}
-          readOnly={isDeleted}
-        />}
-
-      <div
-        className={
-          cn(
-            'cursor-pointer rounded-md p-1 text-text-tertiary hover:bg-state-destructive-hover hover:text-text-destructive',
-            isDeleted && 'cursor-default bg-state-destructive-hover  text-text-destructive')
-        }
-        onClick={() => onRemove(payload.id)}
-      >
-        <RiDeleteBinLine className='size-4' />
-      </div>
-    </div>
-  )
-}
-export default React.memo(EditMetadatabatchItem)
diff --git a/app/components/datasets/metadata/edit-metadata-batch/edited-beacon.tsx b/app/components/datasets/metadata/edit-metadata-batch/edited-beacon.tsx
deleted file mode 100644
index ba41918..0000000
--- a/app/components/datasets/metadata/edit-metadata-batch/edited-beacon.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useRef } from 'react'
-import { useHover } from 'ahooks'
-import { RiResetLeftLine } from '@remixicon/react'
-import Tooltip from '@/app/components/base/tooltip'
-import { useTranslation } from 'react-i18next'
-
-type Props = {
-  onReset: () => void
-}
-
-const EditedBeacon: FC<Props> = ({
-  onReset,
-}) => {
-  const { t } = useTranslation()
-  const ref = useRef(null)
-  const isHovering = useHover(ref)
-
-  return (
-    <div ref={ref} className='size-4 cursor-pointer'>
-      {isHovering ? (
-        <Tooltip popupContent={t('common.operation.reset')}>
-          <div className='flex size-4 items-center justify-center rounded-full bg-text-accent-secondary' onClick={onReset}>
-            <RiResetLeftLine className='size-[10px] text-text-primary-on-surface' />
-          </div>
-        </Tooltip>
-      ) : (
-        <div className='flex size-4 items-center justify-center'>
-          <div className='size-1 rounded-full bg-text-accent-secondary'></div>
-        </div>
-      )}
-    </div>
-  )
-}
-export default React.memo(EditedBeacon)
diff --git a/app/components/datasets/metadata/edit-metadata-batch/input-combined.tsx b/app/components/datasets/metadata/edit-metadata-batch/input-combined.tsx
deleted file mode 100644
index fd7bb89..0000000
--- a/app/components/datasets/metadata/edit-metadata-batch/input-combined.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { DataType } from '../types'
-import Input from '@/app/components/base/input'
-import { InputNumber } from '@/app/components/base/input-number'
-import cn from '@/utils/classnames'
-import Datepicker from '../base/date-picker'
-
-type Props = {
-  className?: string
-  type: DataType
-  value: any
-  onChange: (value: any) => void
-  readOnly?: boolean
-}
-
-const InputCombined: FC<Props> = ({
-  className: configClassName,
-  type,
-  value,
-  onChange,
-  readOnly,
-}) => {
-  const className = cn('h-6 grow p-0.5 text-xs')
-  if (type === DataType.time) {
-    return (
-      <Datepicker
-        className={className}
-        value={value}
-        onChange={onChange}
-      />
-    )
-  }
-
-  if (type === DataType.number) {
-    return (
-      <div className='grow text-[0]'>
-        <InputNumber
-          className={cn(className, 'rounded-l-md')}
-          value={value}
-          onChange={onChange}
-          size='regular'
-          controlWrapClassName='overflow-hidden'
-          controlClassName='pt-0 pb-0'
-          readOnly={readOnly}
-        />
-      </div>
-    )
-  }
-  return (
-    <Input
-      wrapperClassName={configClassName}
-      className={cn(className, 'rounded-md')}
-      value={value}
-      onChange={e => onChange(e.target.value)}
-      readOnly={readOnly}
-    />
-  )
-}
-export default React.memo(InputCombined)
diff --git a/app/components/datasets/metadata/edit-metadata-batch/input-has-set-multiple-value.tsx b/app/components/datasets/metadata/edit-metadata-batch/input-has-set-multiple-value.tsx
deleted file mode 100644
index 1e6d457..0000000
--- a/app/components/datasets/metadata/edit-metadata-batch/input-has-set-multiple-value.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-'use client'
-import { RiCloseLine } from '@remixicon/react'
-import type { FC } from 'react'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import cn from '@/utils/classnames'
-
-type Props = {
-  onClear: () => void
-  readOnly?: boolean
-}
-
-const InputHasSetMultipleValue: FC<Props> = ({
-  onClear,
-  readOnly,
-}) => {
-  const { t } = useTranslation()
-  return (
-    <div className='h-6 grow rounded-md bg-components-input-bg-normal p-0.5 text-[0]'>
-      <div className={cn('inline-flex h-5 items-center space-x-0.5 rounded-[5px] border-[0.5px] border-components-panel-border bg-components-badge-white-to-dark pl-1.5 pr-0.5 shadow-xs', readOnly && 'pr-1.5')}>
-        <div className='system-xs-regular text-text-secondary'>{t('dataset.metadata.batchEditMetadata.multipleValue')}</div>
-        {!readOnly && (
-          <div className='cursor-pointer rounded-[4px] p-px text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary'>
-            <RiCloseLine
-              className='size-3.5 '
-              onClick={onClear}
-            />
-          </div>
-        )}
-      </div>
-    </div>
-  )
-}
-export default React.memo(InputHasSetMultipleValue)
diff --git a/app/components/datasets/metadata/edit-metadata-batch/label.tsx b/app/components/datasets/metadata/edit-metadata-batch/label.tsx
deleted file mode 100644
index a6d134d..0000000
--- a/app/components/datasets/metadata/edit-metadata-batch/label.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import cn from '@/utils/classnames'
-
-type Props = {
-  isDeleted?: boolean,
-  className?: string,
-  text: string
-}
-
-const Label: FC<Props> = ({
-  isDeleted,
-  className,
-  text,
-}) => {
-  return (
-    <div className={cn(
-      'system-xs-medium w-[136px] shrink-0 truncate text-text-tertiary',
-      isDeleted && 'text-text-quaternary line-through',
-      className,
-    )}>
-      {text}
-    </div>
-  )
-}
-export default React.memo(Label)
diff --git a/app/components/datasets/metadata/edit-metadata-batch/modal.tsx b/app/components/datasets/metadata/edit-metadata-batch/modal.tsx
deleted file mode 100644
index c80bd61..0000000
--- a/app/components/datasets/metadata/edit-metadata-batch/modal.tsx
+++ /dev/null
@@ -1,189 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import Modal from '../../../base/modal'
-import type { BuiltInMetadataItem, MetadataItemInBatchEdit } from '../types'
-import { type MetadataItemWithEdit, UpdateType } from '../types'
-import EditMetadataBatchItem from './edit-row'
-import AddedMetadataItem from './add-row'
-import Button from '../../../base/button'
-import { useTranslation } from 'react-i18next'
-import Checkbox from '../../../base/checkbox'
-import Tooltip from '../../../base/tooltip'
-import SelectMetadataModal from '../metadata-dataset/select-metadata-modal'
-import { RiQuestionLine } from '@remixicon/react'
-import Divider from '@/app/components/base/divider'
-import AddMetadataButton from '../add-metadata-button'
-import produce from 'immer'
-import useCheckMetadataName from '../hooks/use-check-metadata-name'
-import Toast from '@/app/components/base/toast'
-import { useCreateMetaData } from '@/service/knowledge/use-metadata'
-
-const i18nPrefix = 'dataset.metadata.batchEditMetadata'
-
-type Props = {
-  datasetId: string,
-  documentNum: number
-  list: MetadataItemInBatchEdit[]
-  onSave: (editedList: MetadataItemInBatchEdit[], addedList: MetadataItemInBatchEdit[], isApplyToAllSelectDocument: boolean) => void
-  onHide: () => void
-  onShowManage: () => void
-}
-
-const EditMetadataBatchModal: FC<Props> = ({
-  datasetId,
-  documentNum,
-  list,
-  onSave,
-  onHide,
-  onShowManage,
-}) => {
-  const { t } = useTranslation()
-  const [templeList, setTempleList] = useState<MetadataItemWithEdit[]>(list)
-  const handleTemplesChange = useCallback((payload: MetadataItemWithEdit) => {
-    const newTempleList = produce(templeList, (draft) => {
-      const index = draft.findIndex(i => i.id === payload.id)
-      if (index !== -1) {
-        draft[index] = payload
-        draft[index].isUpdated = true
-        draft[index].updateType = UpdateType.changeValue
-      }
-    },
-    )
-    setTempleList(newTempleList)
-  }, [templeList])
-  const handleTempleItemRemove = useCallback((id: string) => {
-    const newTempleList = produce(templeList, (draft) => {
-      const index = draft.findIndex(i => i.id === id)
-      if (index !== -1) {
-        draft[index].isUpdated = true
-        draft[index].updateType = UpdateType.delete
-      }
-    })
-    setTempleList(newTempleList)
-  }, [templeList])
-
-  const handleItemReset = useCallback((id: string) => {
-    const newTempleList = produce(templeList, (draft) => {
-      const index = draft.findIndex(i => i.id === id)
-      if (index !== -1) {
-        draft[index] = { ...list[index] }
-        draft[index].isUpdated = false
-        delete draft[index].updateType
-      }
-    })
-    setTempleList(newTempleList)
-  }, [list, templeList])
-
-  const { checkName } = useCheckMetadataName()
-  const { mutate: doAddMetaData } = useCreateMetaData(datasetId)
-  const handleAddMetaData = useCallback(async (payload: BuiltInMetadataItem) => {
-    const errorMsg = checkName(payload.name).errorMsg
-    if (errorMsg) {
-      Toast.notify({
-        message: errorMsg,
-        type: 'error',
-      })
-      return Promise.reject(new Error(errorMsg))
-    }
-    await doAddMetaData(payload)
-    Toast.notify({
-      type: 'success',
-      message: t('common.api.actionSuccess'),
-    })
-  }, [checkName, doAddMetaData, t])
-
-  const [addedList, setAddedList] = useState<MetadataItemWithEdit[]>([])
-  const handleAddedListChange = useCallback((payload: MetadataItemWithEdit) => {
-    const newAddedList = addedList.map(i => i.id === payload.id ? payload : i)
-    setAddedList(newAddedList)
-  }, [addedList])
-  const handleAddedItemRemove = useCallback((removeIndex: number) => {
-    return () => {
-      const newAddedList = addedList.filter((i, index) => index !== removeIndex)
-      setAddedList(newAddedList)
-    }
-  }, [addedList])
-
-  const [isApplyToAllSelectDocument, setIsApplyToAllSelectDocument] = useState(false)
-
-  const handleSave = useCallback(() => {
-    onSave(templeList.filter(item => item.updateType !== UpdateType.delete), addedList, isApplyToAllSelectDocument)
-  }, [templeList, addedList, isApplyToAllSelectDocument, onSave])
-  return (
-    <Modal
-      title={t(`${i18nPrefix}.editMetadata`)}
-      isShow
-      closable
-      onClose={onHide}
-      className='!max-w-[640px]'
-    >
-      <div className='system-xs-medium mt-1 text-text-accent'>{t(`${i18nPrefix}.editDocumentsNum`, { num: documentNum })}</div>
-      <div className='ml-[-16px] max-h-[305px] overflow-y-auto'>
-        <div className='mt-4 space-y-2'>
-          {templeList.map(item => (
-            <EditMetadataBatchItem
-              key={item.id}
-              payload={item}
-              onChange={handleTemplesChange}
-              onRemove={handleTempleItemRemove}
-              onReset={handleItemReset}
-            />
-          ))}
-        </div>
-        <div className='mt-4 pl-[18px]'>
-          <div className='flex items-center'>
-            <div className='system-xs-medium-uppercase mr-2 shrink-0 text-text-tertiary'>{t('dataset.metadata.createMetadata.title')}</div>
-            <Divider bgStyle='gradient' />
-          </div>
-          <div className='mt-2 space-y-2'>
-            {addedList.map((item, i) => (
-              <AddedMetadataItem
-                key={i}
-                payload={item}
-                onChange={handleAddedListChange}
-                onRemove={handleAddedItemRemove(i)}
-              />
-            ))}
-          </div>
-          <div className='mt-3'>
-            <SelectMetadataModal
-              datasetId={datasetId}
-              popupPlacement='top-start'
-              popupOffset={{ mainAxis: 4, crossAxis: 0 }}
-              trigger={
-                <AddMetadataButton />
-              }
-              onSave={handleAddMetaData}
-              onSelect={data => setAddedList([...addedList, data as MetadataItemWithEdit])}
-              onManage={onShowManage}
-            />
-          </div>
-        </div>
-      </div>
-
-      <div className='mt-4 flex items-center justify-between'>
-        <div className='flex select-none items-center'>
-          <Checkbox checked={isApplyToAllSelectDocument} onCheck={() => setIsApplyToAllSelectDocument(!isApplyToAllSelectDocument)} />
-          <div className='system-xs-medium ml-2 mr-1 text-text-secondary'>{t(`${i18nPrefix}.applyToAllSelectDocument`)}</div>
-          <Tooltip popupContent={
-            <div className='max-w-[240px]'>{t(`${i18nPrefix}.applyToAllSelectDocumentTip`)}</div>
-          } >
-            <div className='cursor-pointer p-px'>
-              <RiQuestionLine className='size-3.5 text-text-tertiary' />
-            </div>
-          </Tooltip>
-        </div>
-        <div className='flex items-center space-x-2'>
-          <Button
-            onClick={onHide}>{t('common.operation.cancel')}</Button>
-          <Button
-            onClick={handleSave}
-            variant='primary'
-          >{t('common.operation.save')}</Button>
-        </div>
-      </div>
-    </Modal>
-  )
-}
-export default React.memo(EditMetadataBatchModal)
diff --git a/app/components/datasets/metadata/hooks/use-batch-edit-document-metadata.ts b/app/components/datasets/metadata/hooks/use-batch-edit-document-metadata.ts
deleted file mode 100644
index 3bb6e1d..0000000
--- a/app/components/datasets/metadata/hooks/use-batch-edit-document-metadata.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-import { useBoolean } from 'ahooks'
-import { type MetadataBatchEditToServer, type MetadataItemInBatchEdit, type MetadataItemWithEdit, type MetadataItemWithValue, UpdateType } from '../types'
-import type { SimpleDocumentDetail } from '@/models/datasets'
-import { useMemo } from 'react'
-import { useBatchUpdateDocMetadata } from '@/service/knowledge/use-metadata'
-import Toast from '@/app/components/base/toast'
-import { t } from 'i18next'
-
-type Props = {
-  datasetId: string
-  docList: SimpleDocumentDetail[]
-  onUpdate: () => void
-}
-
-const useBatchEditDocumentMetadata = ({
-  datasetId,
-  docList,
-  onUpdate,
-}: Props) => {
-  const [isShowEditModal, {
-    setTrue: showEditModal,
-    setFalse: hideEditModal,
-  }] = useBoolean(false)
-
-  const metaDataList: MetadataItemWithValue[][] = (() => {
-    const res: MetadataItemWithValue[][] = []
-    docList.forEach((item) => {
-      if (item.doc_metadata) {
-        res.push(item.doc_metadata.filter(item => item.id !== 'built-in'))
-        return
-      }
-      res.push([])
-    })
-    return res
-  })()
-
-  // To check is key has multiple value
-  const originalList: MetadataItemInBatchEdit[] = useMemo(() => {
-    const idNameValue: Record<string, { value: string | number | null, isMultipleValue: boolean }> = {}
-
-    const res: MetadataItemInBatchEdit[] = []
-    metaDataList.forEach((metaData) => {
-      metaData.forEach((item) => {
-        if (idNameValue[item.id]?.isMultipleValue)
-          return
-        const itemInRes = res.find(i => i.id === item.id)
-        if (!idNameValue[item.id]) {
-          idNameValue[item.id] = {
-            value: item.value,
-            isMultipleValue: false,
-          }
-        }
-
-        if (itemInRes && itemInRes.value !== item.value) {
-          idNameValue[item.id].isMultipleValue = true
-          itemInRes.isMultipleValue = true
-          itemInRes.value = null
-          return
-        }
-        if (!itemInRes) {
-          res.push({
-            ...item,
-            isMultipleValue: false,
-          })
-        }
-      })
-    })
-    return res
-  }, [metaDataList])
-
-  const formateToBackendList = (editedList: MetadataItemWithEdit[], addedList: MetadataItemInBatchEdit[], isApplyToAllSelectDocument: boolean) => {
-    const updatedList = editedList.filter((editedItem) => {
-      return editedItem.updateType === UpdateType.changeValue
-    })
-    const removedList = originalList.filter((originalItem) => {
-      const editedItem = editedList.find(i => i.id === originalItem.id)
-      if (!editedItem) // removed item
-        return true
-      return false
-    })
-
-    const res: MetadataBatchEditToServer = docList.map((item, i) => {
-      // the new metadata will override the old one
-      const oldMetadataList = metaDataList[i]
-      let newMetadataList: MetadataItemWithValue[] = [...oldMetadataList, ...addedList]
-        .filter((item) => {
-          return !removedList.find(removedItem => removedItem.id === item.id)
-        })
-        .map(item => ({
-          id: item.id,
-          name: item.name,
-          type: item.type,
-          value: item.value,
-        }))
-      if (isApplyToAllSelectDocument) {
-        // add missing metadata item
-        updatedList.forEach((editedItem) => {
-          if (!newMetadataList.find(i => i.id === editedItem.id) && !editedItem.isMultipleValue)
-            newMetadataList.push(editedItem)
-        })
-      }
-
-      newMetadataList = newMetadataList.map((item) => {
-        const editedItem = updatedList.find(i => i.id === item.id)
-        if (editedItem)
-          return editedItem
-        return item
-      })
-
-      return {
-        document_id: item.id,
-        metadata_list: newMetadataList,
-      }
-    })
-    return res
-  }
-
-  const { mutateAsync } = useBatchUpdateDocMetadata()
-
-  const handleSave = async (editedList: MetadataItemInBatchEdit[], addedList: MetadataItemInBatchEdit[], isApplyToAllSelectDocument: boolean) => {
-    const backendList = formateToBackendList(editedList, addedList, isApplyToAllSelectDocument)
-    await mutateAsync({
-      dataset_id: datasetId,
-      metadata_list: backendList,
-    })
-    onUpdate()
-    hideEditModal()
-    Toast.notify({
-      type: 'success',
-      message: t('common.actionMsg.modifiedSuccessfully'),
-    })
-  }
-
-  return {
-    isShowEditModal,
-    showEditModal,
-    hideEditModal,
-    originalList,
-    handleSave,
-  }
-}
-
-export default useBatchEditDocumentMetadata
diff --git a/app/components/datasets/metadata/hooks/use-check-metadata-name.ts b/app/components/datasets/metadata/hooks/use-check-metadata-name.ts
deleted file mode 100644
index 45fe767..0000000
--- a/app/components/datasets/metadata/hooks/use-check-metadata-name.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useTranslation } from 'react-i18next'
-
-const i18nPrefix = 'dataset.metadata.checkName'
-
-const useCheckMetadataName = () => {
-  const { t } = useTranslation()
-  return {
-    checkName: (name: string) => {
-      if (!name) {
-        return {
-          errorMsg: t(`${i18nPrefix}.empty`),
-        }
-      }
-
-      if (!/^[a-z][a-z0-9_]*$/.test(name)) {
-        return {
-          errorMsg: t(`${i18nPrefix}.invalid`),
-        }
-      }
-
-      return {
-        errorMsg: '',
-      }
-    },
-  }
-}
-
-export default useCheckMetadataName
diff --git a/app/components/datasets/metadata/hooks/use-edit-dataset-metadata.ts b/app/components/datasets/metadata/hooks/use-edit-dataset-metadata.ts
deleted file mode 100644
index dd1cd0f..0000000
--- a/app/components/datasets/metadata/hooks/use-edit-dataset-metadata.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import { useBoolean } from 'ahooks'
-import { useBuiltInMetaDataFields, useCreateMetaData, useDatasetMetaData, useDeleteMetaData, useRenameMeta, useUpdateBuiltInStatus } from '@/service/knowledge/use-metadata'
-import type { DataSet } from '@/models/datasets'
-import { useCallback, useEffect, useState } from 'react'
-import { type BuiltInMetadataItem, type MetadataItemWithValueLength, isShowManageMetadataLocalStorageKey } from '../types'
-import useCheckMetadataName from './use-check-metadata-name'
-import Toast from '@/app/components/base/toast'
-import { useTranslation } from 'react-i18next'
-
-const useEditDatasetMetadata = ({
-  datasetId,
-  // dataset,
-  onUpdateDocList,
-}: {
-  datasetId: string,
-  dataset?: DataSet,
-  onUpdateDocList: () => void
-}) => {
-  const { t } = useTranslation()
-  const [isShowEditModal, {
-    setTrue: showEditModal,
-    setFalse: hideEditModal,
-  }] = useBoolean(false)
-
-  useEffect(() => {
-    const isShowManageMetadata = localStorage.getItem(isShowManageMetadataLocalStorageKey)
-    if (isShowManageMetadata) {
-      showEditModal()
-      localStorage.removeItem(isShowManageMetadataLocalStorageKey)
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [])
-
-  const { data: datasetMetaData } = useDatasetMetaData(datasetId)
-  const { mutate: doAddMetaData } = useCreateMetaData(datasetId)
-  const { checkName } = useCheckMetadataName()
-  const handleAddMetaData = useCallback(async (payload: BuiltInMetadataItem) => {
-    const errorMsg = checkName(payload.name).errorMsg
-    if (errorMsg) {
-      Toast.notify({
-        message: errorMsg,
-        type: 'error',
-      })
-      return Promise.reject(new Error(errorMsg))
-    }
-    await doAddMetaData(payload)
-  }, [checkName, doAddMetaData])
-
-  const { mutate: doRenameMetaData } = useRenameMeta(datasetId)
-  const handleRename = useCallback(async (payload: MetadataItemWithValueLength) => {
-    const errorMsg = checkName(payload.name).errorMsg
-    if (errorMsg) {
-      Toast.notify({
-        message: errorMsg,
-        type: 'error',
-      })
-      return Promise.reject(new Error(errorMsg))
-    }
-    await doRenameMetaData(payload)
-    onUpdateDocList()
-  }, [checkName, doRenameMetaData, onUpdateDocList])
-
-  const { mutateAsync: doDeleteMetaData } = useDeleteMetaData(datasetId)
-  const handleDeleteMetaData = useCallback(async (metaDataId: string) => {
-    await doDeleteMetaData(metaDataId)
-    onUpdateDocList()
-  }, [doDeleteMetaData, onUpdateDocList])
-
-  const [builtInEnabled, setBuiltInEnabled] = useState(datasetMetaData?.built_in_field_enabled)
-  useEffect(() => { // wait for api response to set the right value
-    setBuiltInEnabled(datasetMetaData?.built_in_field_enabled)
-  }, [datasetMetaData])
-  const { mutateAsync: toggleBuiltInStatus } = useUpdateBuiltInStatus(datasetId)
-  const { data: builtInMetaData } = useBuiltInMetaDataFields()
-  return {
-    isShowEditModal,
-    showEditModal,
-    hideEditModal,
-    datasetMetaData: datasetMetaData?.doc_metadata,
-    handleAddMetaData,
-    handleRename,
-    handleDeleteMetaData,
-    builtInMetaData: builtInMetaData?.fields,
-    builtInEnabled,
-    setBuiltInEnabled: async (enable: boolean) => {
-      await toggleBuiltInStatus(enable)
-      setBuiltInEnabled(enable)
-      Toast.notify({
-        message: t('common.actionMsg.modifiedSuccessfully'),
-        type: 'success',
-      })
-    },
-  }
-}
-
-export default useEditDatasetMetadata
diff --git a/app/components/datasets/metadata/hooks/use-metadata-document.ts b/app/components/datasets/metadata/hooks/use-metadata-document.ts
deleted file mode 100644
index f52806e..0000000
--- a/app/components/datasets/metadata/hooks/use-metadata-document.ts
+++ /dev/null
@@ -1,159 +0,0 @@
-import { useBatchUpdateDocMetadata, useDatasetMetaData, useDocumentMetaData } from '@/service/knowledge/use-metadata'
-import { useDatasetDetailContext } from '@/context/dataset-detail'
-import type { BuiltInMetadataItem } from '../types'
-import { DataType, type MetadataItemWithValue } from '../types'
-import { useCallback, useState } from 'react'
-import Toast from '@/app/components/base/toast'
-import type { FullDocumentDetail } from '@/models/datasets'
-import { useTranslation } from 'react-i18next'
-import { useLanguages, useMetadataMap } from '@/hooks/use-metadata'
-import { get } from 'lodash-es'
-import { useCreateMetaData } from '@/service/knowledge/use-metadata'
-import useCheckMetadataName from './use-check-metadata-name'
-
-type Props = {
-  datasetId: string
-  documentId: string
-  docDetail: FullDocumentDetail
-}
-
-const useMetadataDocument = ({
-  datasetId,
-  documentId,
-  docDetail,
-}: Props) => {
-  const { t } = useTranslation()
-
-  const { dataset } = useDatasetDetailContext()
-  const embeddingAvailable = !!dataset?.embedding_available
-
-  const { mutateAsync } = useBatchUpdateDocMetadata()
-  const { checkName } = useCheckMetadataName()
-
-  const [isEdit, setIsEdit] = useState(false)
-  const { data: documentDetail } = useDocumentMetaData({
-    datasetId,
-    documentId,
-  })
-
-  const allList = documentDetail?.doc_metadata || []
-  const list = allList.filter(item => item.id !== 'built-in')
-  const builtList = allList.filter(item => item.id === 'built-in')
-  const [tempList, setTempList] = useState<MetadataItemWithValue[]>(list)
-  const { mutateAsync: doAddMetaData } = useCreateMetaData(datasetId)
-  const handleSelectMetaData = useCallback((metaData: MetadataItemWithValue) => {
-    setTempList((prev) => {
-      const index = prev.findIndex(item => item.id === metaData.id)
-      if (index === -1)
-        return [...prev, metaData]
-
-      return prev
-    })
-  }, [])
-  const handleAddMetaData = useCallback(async (payload: BuiltInMetadataItem) => {
-    const errorMsg = checkName(payload.name).errorMsg
-    if (errorMsg) {
-      Toast.notify({
-        message: errorMsg,
-        type: 'error',
-      })
-      return Promise.reject(new Error(errorMsg))
-    }
-    await doAddMetaData(payload)
-    Toast.notify({
-      type: 'success',
-      message: t('common.api.actionSuccess'),
-    })
-  }, [checkName, doAddMetaData, t])
-
-  const hasData = list.length > 0
-  const handleSave = async () => {
-    await mutateAsync({
-      dataset_id: datasetId,
-      metadata_list: [{
-        document_id: documentId,
-        metadata_list: tempList,
-      }],
-    })
-    setIsEdit(false)
-    Toast.notify({
-      type: 'success',
-      message: t('common.api.actionSuccess'),
-    })
-  }
-
-  const handleCancel = () => {
-    setTempList(list)
-    setIsEdit(false)
-  }
-
-  const startToEdit = () => {
-    setTempList(list)
-    setIsEdit(true)
-  }
-
-  // built in enabled is set in dataset
-  const { data: datasetMetaData } = useDatasetMetaData(datasetId)
-  const builtInEnabled = datasetMetaData?.built_in_field_enabled
-
-  // old metadata and technical params
-  const metadataMap = useMetadataMap()
-  const languageMap = useLanguages()
-
-  const getReadOnlyMetaData = (mainField: 'originInfo' | 'technicalParameters') => {
-    const fieldMap = metadataMap[mainField]?.subFieldsMap
-    const sourceData = docDetail
-    const getTargetMap = (field: string) => {
-      if (field === 'language')
-        return languageMap
-
-      return {} as any
-    }
-
-    const getTargetValue = (field: string) => {
-      const val = get(sourceData, field, '')
-      if (!val && val !== 0)
-        return '-'
-      if (fieldMap[field]?.inputType === 'select')
-        return getTargetMap(field)[val]
-      if (fieldMap[field]?.render)
-        return fieldMap[field]?.render?.(val, field === 'hit_count' ? get(sourceData, 'segment_count', 0) as number : undefined)
-      return val
-    }
-    const fieldList = Object.keys(fieldMap).map((key) => {
-      const field = fieldMap[key]
-      return {
-        id: field?.label,
-        type: DataType.string,
-        name: field?.label,
-        value: getTargetValue(key),
-      }
-    })
-
-    return fieldList
-  }
-
-  const originInfo = getReadOnlyMetaData('originInfo')
-  const technicalParameters = getReadOnlyMetaData('technicalParameters')
-
-  return {
-    embeddingAvailable,
-    isEdit,
-    setIsEdit,
-    list,
-    tempList,
-    setTempList,
-    handleSelectMetaData,
-    handleAddMetaData,
-    hasData,
-    builtList,
-    builtInEnabled,
-    startToEdit,
-    handleSave,
-    handleCancel,
-    originInfo,
-    technicalParameters,
-  }
-}
-
-export default useMetadataDocument
diff --git a/app/components/datasets/metadata/metadata-dataset/create-content.tsx b/app/components/datasets/metadata/metadata-dataset/create-content.tsx
deleted file mode 100644
index 3ac1a04..0000000
--- a/app/components/datasets/metadata/metadata-dataset/create-content.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import { DataType } from '../types'
-import ModalLikeWrap from '../../../base/modal-like-wrap'
-import Field from './field'
-import OptionCard from '../../../workflow/nodes/_base/components/option-card'
-import Input from '@/app/components/base/input'
-import { RiArrowLeftLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { noop } from 'lodash-es'
-
-const i18nPrefix = 'dataset.metadata.createMetadata'
-
-export type Props = {
-  onClose?: () => void
-  onSave: (data: any) => void
-  hasBack?: boolean
-  onBack?: () => void
-}
-
-const CreateContent: FC<Props> = ({
-  onClose = noop,
-  hasBack,
-  onBack,
-  onSave,
-}) => {
-  const { t } = useTranslation()
-  const [type, setType] = useState(DataType.string)
-
-  const handleTypeChange = useCallback((newType: DataType) => {
-    return () => setType(newType)
-  }, [setType])
-  const [name, setName] = useState('')
-  const handleNameChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
-    setName(e.target.value)
-  }, [setName])
-
-  const handleSave = useCallback(() => {
-    onSave({
-      type,
-      name,
-    })
-  }, [onSave, type, name])
-
-  return (
-    <ModalLikeWrap
-      title={t(`${i18nPrefix}.title`)}
-      onClose={onClose}
-      onConfirm={handleSave}
-      hideCloseBtn={hasBack}
-      beforeHeader={hasBack && (
-        <div className='relative left-[-4px] mb-1 flex cursor-pointer items-center space-x-1 py-1 text-text-accent' onClick={onBack}>
-          <RiArrowLeftLine className='size-4' />
-          <div className='system-xs-semibold-uppercase'>{t(`${i18nPrefix}.back`)}</div>
-        </div>
-      )}
-    >
-      <div className='space-y-3'>
-        <Field label={t(`${i18nPrefix}.type`)}>
-          <div className='grid grid-cols-3 gap-2'>
-            <OptionCard
-              title='String'
-              selected={type === DataType.string}
-              onSelect={handleTypeChange(DataType.string)}
-            />
-            <OptionCard
-              title='Number'
-              selected={type === DataType.number}
-              onSelect={handleTypeChange(DataType.number)}
-            />
-            <OptionCard
-              title='Time'
-              selected={type === DataType.time}
-              onSelect={handleTypeChange(DataType.time)}
-            />
-          </div>
-        </Field>
-        <Field label={t(`${i18nPrefix}.name`)}>
-          <Input
-            value={name}
-            onChange={handleNameChange}
-            placeholder={t(`${i18nPrefix}.namePlaceholder`)}
-          />
-        </Field>
-      </div>
-    </ModalLikeWrap>
-  )
-}
-export default React.memo(CreateContent)
diff --git a/app/components/datasets/metadata/metadata-dataset/create-metadata-modal.tsx b/app/components/datasets/metadata/metadata-dataset/create-metadata-modal.tsx
deleted file mode 100644
index 6e00aa4..0000000
--- a/app/components/datasets/metadata/metadata-dataset/create-metadata-modal.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { Props as CreateContentProps } from './create-content'
-import CreateContent from './create-content'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '../../../base/portal-to-follow-elem'
-
-type Props = {
-  open: boolean
-  setOpen: (open: boolean) => void
-  onSave: (data: any) => void
-  trigger: React.ReactNode
-  popupLeft?: number
-} & CreateContentProps
-
-const CreateMetadataModal: FC<Props> = ({
-  open,
-  setOpen,
-  trigger,
-  popupLeft = 20,
-  ...createContentProps
-}) => {
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='left-start'
-      offset={{
-        mainAxis: popupLeft,
-        crossAxis: -38,
-      }}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => setOpen(!open)}
-      >
-        {trigger}
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        <CreateContent {...createContentProps} onClose={() => setOpen(false)} onBack={() => setOpen(false)} />
-      </PortalToFollowElemContent>
-    </PortalToFollowElem >
-
-  )
-}
-export default React.memo(CreateMetadataModal)
diff --git a/app/components/datasets/metadata/metadata-dataset/dataset-metadata-drawer.tsx b/app/components/datasets/metadata/metadata-dataset/dataset-metadata-drawer.tsx
deleted file mode 100644
index b5e4d17..0000000
--- a/app/components/datasets/metadata/metadata-dataset/dataset-metadata-drawer.tsx
+++ /dev/null
@@ -1,248 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useRef, useState } from 'react'
-import type { BuiltInMetadataItem, MetadataItemWithValueLength } from '../types'
-import Drawer from '@/app/components/base/drawer'
-import Button from '@/app/components/base/button'
-import { RiAddLine, RiDeleteBinLine, RiEditLine } from '@remixicon/react'
-import { getIcon } from '../utils/get-icon'
-import cn from '@/utils/classnames'
-import Modal from '@/app/components/base/modal'
-import Field from './field'
-import Input from '@/app/components/base/input'
-import { useTranslation } from 'react-i18next'
-import Switch from '@/app/components/base/switch'
-import Tooltip from '@/app/components/base/tooltip'
-import CreateModal from '@/app/components/datasets/metadata/metadata-dataset/create-metadata-modal'
-import { useBoolean, useHover } from 'ahooks'
-import Confirm from '@/app/components/base/confirm'
-import Toast from '@/app/components/base/toast'
-
-const i18nPrefix = 'dataset.metadata.datasetMetadata'
-
-type Props = {
-  userMetadata: MetadataItemWithValueLength[]
-  builtInMetadata: BuiltInMetadataItem[]
-  isBuiltInEnabled: boolean
-  onIsBuiltInEnabledChange: (value: boolean) => void
-  onClose: () => void
-  onAdd: (payload: BuiltInMetadataItem) => void
-  onRename: (payload: MetadataItemWithValueLength) => void
-  onRemove: (metaDataId: string) => void
-}
-
-type ItemProps = {
-  readonly?: boolean
-  disabled?: boolean
-  payload: MetadataItemWithValueLength
-  onRename?: () => void
-  onDelete?: () => void
-}
-const Item: FC<ItemProps> = ({
-  readonly,
-  disabled,
-  payload,
-  onRename,
-  onDelete,
-}) => {
-  const { t } = useTranslation()
-  const Icon = getIcon(payload.type)
-
-  const handleRename = useCallback(() => {
-    onRename?.()
-  }, [onRename])
-
-  const deleteBtnRef = useRef<HTMLDivElement>(null)
-  const isDeleteHovering = useHover(deleteBtnRef)
-  const [isShowDeleteConfirm, {
-    setTrue: showDeleteConfirm,
-    setFalse: hideDeleteConfirm,
-  }] = useBoolean(false)
-  const handleDelete = useCallback(() => {
-    hideDeleteConfirm()
-    onDelete?.()
-  }, [hideDeleteConfirm, onDelete])
-
-  return (
-    <div
-      key={payload.name}
-      className={cn(
-        !readonly && !disabled && 'group/item cursor-pointer hover:shadow-xs',
-        'rounded-md border border-components-panel-border-subtle bg-components-panel-on-panel-item-bg',
-        isDeleteHovering && 'border border-state-destructive-border bg-state-destructive-hover',
-      )}
-    >
-      <div
-        className={cn(
-          'flex h-8 items-center justify-between  px-2',
-          disabled && 'opacity-30', // not include border and bg
-        )}
-      >
-        <div className='flex h-full items-center space-x-1 text-text-tertiary'>
-          <Icon className='size-4 shrink-0' />
-          <div className='system-sm-medium max-w-[250px] truncate text-text-primary'>{payload.name}</div>
-          <div className='system-xs-regular shrink-0'>{payload.type}</div>
-        </div>
-        {(!readonly || disabled) && (
-          <div className='system-xs-regular ml-2 shrink-0 text-text-tertiary group-hover/item:hidden'>
-            {disabled ? t(`${i18nPrefix}.disabled`) : t(`${i18nPrefix}.values`, { num: payload.count || 0 })}
-          </div>
-        )}
-        <div className='ml-2 hidden items-center space-x-1 text-text-tertiary group-hover/item:flex'>
-          <RiEditLine className='size-4 cursor-pointer' onClick={handleRename} />
-          <div ref={deleteBtnRef} className='hover:text-text-destructive'>
-            <RiDeleteBinLine className='size-4 cursor-pointer' onClick={showDeleteConfirm} />
-          </div>
-        </div>
-        {isShowDeleteConfirm && (
-          <Confirm
-            isShow
-            type='warning'
-            title={t('dataset.metadata.datasetMetadata.deleteTitle')}
-            content={t('dataset.metadata.datasetMetadata.deleteContent', { name: payload.name })}
-            onConfirm={handleDelete}
-            onCancel={hideDeleteConfirm}
-          />
-        )}
-      </div>
-    </div>
-  )
-}
-
-const DatasetMetadataDrawer: FC<Props> = ({
-  userMetadata,
-  builtInMetadata,
-  isBuiltInEnabled,
-  onIsBuiltInEnabledChange,
-  onClose,
-  onAdd,
-  onRename,
-  onRemove,
-}) => {
-  const { t } = useTranslation()
-  const [isShowRenameModal, setIsShowRenameModal] = useState(false)
-  const [currPayload, setCurrPayload] = useState<MetadataItemWithValueLength | null>(null)
-  const [templeName, setTempleName] = useState('')
-  const handleRename = useCallback((payload: MetadataItemWithValueLength) => {
-    return () => {
-      setCurrPayload(payload)
-      setTempleName(payload.name)
-      setIsShowRenameModal(true)
-    }
-  }, [setCurrPayload, setIsShowRenameModal])
-
-  const [open, setOpen] = useState(false)
-  const handleAdd = useCallback(async (data: MetadataItemWithValueLength) => {
-    await onAdd(data)
-    Toast.notify({
-      type: 'success',
-      message: t('common.api.actionSuccess'),
-    })
-    setOpen(false)
-  }, [onAdd, t])
-
-  const handleRenamed = useCallback(async () => {
-    const item = userMetadata.find(p => p.id === currPayload?.id)
-    if (item) {
-      await onRename({
-        ...item,
-        name: templeName,
-      })
-      Toast.notify({
-        type: 'success',
-        message: t('common.api.actionSuccess'),
-      })
-    }
-    setIsShowRenameModal(false)
-  }, [userMetadata, currPayload?.id, onRename, templeName, t])
-
-  const handleDelete = useCallback((payload: MetadataItemWithValueLength) => {
-    return async () => {
-      await onRemove(payload.id)
-      Toast.notify({
-        type: 'success',
-        message: t('common.api.actionSuccess'),
-      })
-    }
-  }, [onRemove, t])
-
-  return (
-    <Drawer
-      isOpen={true}
-      onClose={onClose}
-      showClose
-      title={t('dataset.metadata.metadata')}
-      footer={null}
-      panelClassName='px-4 block !max-w-[420px] my-2 rounded-l-2xl'
-    >
-      <div className='h-full overflow-y-auto'>
-        <div className='system-sm-regular text-text-tertiary'>{t(`${i18nPrefix}.description`)}</div>
-        <CreateModal
-          open={open}
-          setOpen={setOpen}
-          trigger={<Button variant='primary' className='mt-3'>
-            <RiAddLine className='mr-1' />
-            {t(`${i18nPrefix}.addMetaData`)}
-          </Button>} hasBack onSave={handleAdd}
-        />
-
-        <div className='mt-3 space-y-1'>
-          {userMetadata.map(payload => (
-            <Item
-              key={payload.id}
-              payload={payload}
-              onRename={handleRename(payload)}
-              onDelete={handleDelete(payload)}
-            />
-          ))}
-        </div>
-
-        <div className='mt-3 flex h-6 items-center'>
-          <Switch
-            defaultValue={isBuiltInEnabled}
-            onChange={onIsBuiltInEnabledChange}
-          />
-          <div className='system-sm-semibold ml-2 mr-0.5 text-text-secondary'>{t(`${i18nPrefix}.builtIn`)}</div>
-          <Tooltip popupContent={<div className='max-w-[100px]'>{t(`${i18nPrefix}.builtInDescription`)}</div>} />
-        </div>
-
-        <div className='mt-1 space-y-1'>
-          {builtInMetadata.map(payload => (
-            <Item
-              key={payload.name}
-              readonly
-              disabled={!isBuiltInEnabled}
-              payload={payload as MetadataItemWithValueLength}
-            />
-          ))}
-        </div>
-
-        {isShowRenameModal && (
-          <Modal isShow title={t(`${i18nPrefix}.rename`)} onClose={() => setIsShowRenameModal(false)}>
-            <Field label={t(`${i18nPrefix}.name`)} className='mt-4'>
-              <Input
-                value={templeName}
-                onChange={e => setTempleName(e.target.value)}
-                placeholder={t(`${i18nPrefix}.namePlaceholder`)}
-              />
-            </Field>
-            <div className='mt-4 flex justify-end'>
-              <Button
-                className='mr-2'
-                onClick={() => {
-                  setIsShowRenameModal(false)
-                  setTempleName(currPayload!.name)
-                }}>{t('common.operation.cancel')}</Button>
-              <Button
-                onClick={handleRenamed}
-                variant='primary'
-                disabled={!templeName}
-              >{t('common.operation.save')}</Button>
-            </div>
-          </Modal>
-        )}
-      </div>
-    </Drawer>
-  )
-}
-export default React.memo(DatasetMetadataDrawer)
diff --git a/app/components/datasets/metadata/metadata-dataset/field.tsx b/app/components/datasets/metadata/metadata-dataset/field.tsx
deleted file mode 100644
index d7f0e47..0000000
--- a/app/components/datasets/metadata/metadata-dataset/field.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-
-type Props = {
-  className?: string
-  label: string
-  children: React.ReactNode
-}
-
-const Field: FC<Props> = ({
-  className,
-  label,
-  children,
-}) => {
-  return (
-    <div className={className}>
-      <div className='system-sm-semibold py-1 text-text-secondary'>{label}</div>
-      <div className='mt-1'>{children}</div>
-    </div>
-  )
-}
-export default React.memo(Field)
diff --git a/app/components/datasets/metadata/metadata-dataset/select-metadata-modal.tsx b/app/components/datasets/metadata/metadata-dataset/select-metadata-modal.tsx
deleted file mode 100644
index 91c9715..0000000
--- a/app/components/datasets/metadata/metadata-dataset/select-metadata-modal.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import type { Props as CreateContentProps } from './create-content'
-import CreateContent from './create-content'
-import SelectMetadata from './select-metadata'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '../../../base/portal-to-follow-elem'
-import type { MetadataItem } from '../types'
-import type { Placement } from '@floating-ui/react'
-import { useDatasetMetaData } from '@/service/knowledge/use-metadata'
-
-type Props = {
-  datasetId: string
-  popupPlacement?: Placement
-  popupOffset?: { mainAxis: number, crossAxis: number }
-  onSelect: (data: MetadataItem) => void
-  onSave: (data: MetadataItem) => void
-  trigger: React.ReactNode
-  onManage: () => void
-} & CreateContentProps
-
-enum Step {
-  select = 'select',
-  create = 'create',
-}
-
-const SelectMetadataModal: FC<Props> = ({
-  datasetId,
-  popupPlacement = 'left-start',
-  popupOffset = { mainAxis: -38, crossAxis: 4 },
-  trigger,
-  onSelect,
-  onSave,
-  onManage,
-}) => {
-  const { data: datasetMetaData } = useDatasetMetaData(datasetId)
-
-  const [open, setOpen] = useState(false)
-  const [step, setStep] = useState(Step.select)
-
-  const handleSave = useCallback(async (data: MetadataItem) => {
-    await onSave(data)
-    setStep(Step.select)
-  }, [onSave])
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement={popupPlacement}
-      offset={popupOffset}
-    >
-      <PortalToFollowElemTrigger
-        onClick={() => setOpen(!open)}
-        className='block'
-      >
-        {trigger}
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        {step === Step.select ? (
-          <SelectMetadata
-            onSelect={(data) => {
-              onSelect(data)
-              setOpen(false)
-            }}
-            list={datasetMetaData?.doc_metadata || []}
-            onNew={() => setStep(Step.create)}
-            onManage={onManage}
-          />
-        ) : (
-          <CreateContent
-            onSave={handleSave}
-            hasBack
-            onBack={() => setStep(Step.select)}
-            onClose={() => setStep(Step.select)}
-          />
-        )}
-      </PortalToFollowElemContent>
-    </PortalToFollowElem >
-
-  )
-}
-export default React.memo(SelectMetadataModal)
diff --git a/app/components/datasets/metadata/metadata-dataset/select-metadata.tsx b/app/components/datasets/metadata/metadata-dataset/select-metadata.tsx
deleted file mode 100644
index d3580cf..0000000
--- a/app/components/datasets/metadata/metadata-dataset/select-metadata.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useMemo, useState } from 'react'
-import type { MetadataItem } from '../types'
-import SearchInput from '@/app/components/base/search-input'
-import { RiAddLine, RiArrowRightUpLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { getIcon } from '../utils/get-icon'
-
-const i18nPrefix = 'dataset.metadata.selectMetadata'
-
-type Props = {
-  list: MetadataItem[]
-  onSelect: (data: MetadataItem) => void
-  onNew: () => void
-  onManage: () => void
-}
-
-const SelectMetadata: FC<Props> = ({
-  list: notFilteredList,
-  onSelect,
-  onNew,
-  onManage,
-}) => {
-  const { t } = useTranslation()
-
-  const [query, setQuery] = useState('')
-  const list = useMemo(() => {
-    if (!query) return notFilteredList
-    return notFilteredList.filter((item) => {
-      return item.name.toLowerCase().includes(query.toLowerCase())
-    })
-  }, [query, notFilteredList])
-  return (
-    <div className='w-[320px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur pb-0 pt-2 shadow-lg backdrop-blur-[5px]'>
-      <SearchInput
-        className='mx-2'
-        value={query}
-        onChange={setQuery}
-        placeholder={t(`${i18nPrefix}.search`)}
-      />
-      <div className='mt-2'>
-        {list.map((item) => {
-          const Icon = getIcon(item.type)
-          return (
-            <div
-              key={item.id}
-              className='mx-1 flex h-6 cursor-pointer  items-center justify-between rounded-md px-3 hover:bg-state-base-hover'
-              onClick={() => onSelect({
-                id: item.id,
-                name: item.name,
-                type: item.type,
-              })}
-            >
-              <div className='flex h-full w-0 grow items-center text-text-secondary'>
-                <Icon className='mr-[5px] size-3.5 shrink-0' />
-                <div className='system-sm-medium w-0 grow truncate'>{item.name}</div>
-              </div>
-              <div className='system-xs-regular ml-1 shrink-0 text-text-tertiary'>
-                {item.type}
-              </div>
-            </div>
-          )
-        })}
-      </div>
-      <div className='mt-1 flex justify-between border-t border-divider-subtle p-1'>
-        <div className='flex h-6 cursor-pointer items-center space-x-1 rounded-md px-3 text-text-secondary hover:bg-state-base-hover' onClick={onNew}>
-          <RiAddLine className='size-3.5' />
-          <div className='system-sm-medium'>{t(`${i18nPrefix}.newAction`)}</div>
-        </div>
-        <div className='flex h-6 items-center text-text-secondary '>
-          <div className='mr-[3px] h-3 w-px bg-divider-regular'></div>
-          <div className='flex h-full cursor-pointer items-center rounded-md px-1.5 hover:bg-state-base-hover' onClick={onManage}>
-            <div className='system-sm-medium mr-1'>{t(`${i18nPrefix}.manageAction`)}</div>
-            <RiArrowRightUpLine className='size-3.5' />
-          </div>
-        </div>
-      </div>
-    </div>
-  )
-}
-export default React.memo(SelectMetadata)
diff --git a/app/components/datasets/metadata/metadata-document/field.tsx b/app/components/datasets/metadata/metadata-document/field.tsx
deleted file mode 100644
index 1ef1d7c..0000000
--- a/app/components/datasets/metadata/metadata-document/field.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-
-type Props = {
-  label: string
-  children: React.ReactNode
-}
-
-const Field: FC<Props> = ({
-  label,
-  children,
-}) => {
-  return (
-    <div className='flex items-start space-x-2'>
-      <div className='system-xs-medium w-[128px] shrink-0 items-center truncate py-1 text-text-tertiary'>
-        {label}
-      </div>
-      <div className='w-[244px] shrink-0'>
-        {children}
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(Field)
diff --git a/app/components/datasets/metadata/metadata-document/index.tsx b/app/components/datasets/metadata/metadata-document/index.tsx
deleted file mode 100644
index bf82e27..0000000
--- a/app/components/datasets/metadata/metadata-document/index.tsx
+++ /dev/null
@@ -1,120 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import InfoGroup from './info-group'
-import NoData from './no-data'
-import Button from '@/app/components/base/button'
-import { RiEditLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import Divider from '@/app/components/base/divider'
-import useMetadataDocument from '../hooks/use-metadata-document'
-import type { FullDocumentDetail } from '@/models/datasets'
-import cn from '@/utils/classnames'
-
-const i18nPrefix = 'dataset.metadata.documentMetadata'
-
-type Props = {
-  datasetId: string
-  documentId: string
-  className?: string
-  docDetail: FullDocumentDetail
-}
-const MetadataDocument: FC<Props> = ({
-  datasetId,
-  documentId,
-  className,
-  docDetail,
-}) => {
-  const { t } = useTranslation()
-
-  const {
-    embeddingAvailable,
-    isEdit,
-    setIsEdit,
-    list,
-    tempList,
-    setTempList,
-    handleSelectMetaData,
-    handleAddMetaData,
-    hasData,
-    builtList,
-    builtInEnabled,
-    startToEdit,
-    handleSave,
-    handleCancel,
-    originInfo,
-    technicalParameters,
-  } = useMetadataDocument({ datasetId, documentId, docDetail })
-
-  return (
-    <div className={cn('w-[388px] space-y-4', className)}>
-      {(hasData || isEdit) ? (
-        <div className='pl-2'>
-          <InfoGroup
-            title={t('dataset.metadata.metadata')}
-            uppercaseTitle={false}
-            titleTooltip={t(`${i18nPrefix}.metadataToolTip`)}
-            list={isEdit ? tempList : list}
-            dataSetId={datasetId}
-            headerRight={embeddingAvailable && (isEdit ? (
-              <div className='flex space-x-1'>
-                <Button variant='ghost' size='small' onClick={handleCancel}>
-                  <div>{t('common.operation.cancel')}</div>
-                </Button>
-                <Button variant='primary' size='small' onClick={handleSave}>
-                  <div>{t('common.operation.save')}</div>
-                </Button>
-              </div>
-            ) : (
-              <Button variant='ghost' size='small' onClick={startToEdit}>
-                <RiEditLine className='mr-1 size-3.5 cursor-pointer text-text-tertiary' />
-                <div>{t('common.operation.edit')}</div>
-              </Button>
-            ))}
-            isEdit={isEdit}
-            contentClassName='mt-5'
-            onChange={(item) => {
-              const newList = tempList.map(i => (i.name === item.name ? item : i))
-              setTempList(newList)
-            }}
-            onDelete={(item) => {
-              const newList = tempList.filter(i => i.name !== item.name)
-              setTempList(newList)
-            }}
-            onAdd={handleAddMetaData}
-            onSelect={handleSelectMetaData}
-          />
-        </div>
-      ) : (
-        embeddingAvailable && <NoData onStart={() => setIsEdit(true)} />
-      )}
-      {builtInEnabled && (
-        <div className='pl-2'>
-          <Divider className='my-3' bgStyle='gradient' />
-          <InfoGroup
-            noHeader
-            titleTooltip='Built-in metadata is system-generated metadata that is automatically added to the document. You can enable or disable built-in metadata here.'
-            list={builtList}
-            dataSetId={datasetId}
-          />
-        </div>
-      )}
-
-      {/* Old Metadata */}
-      <InfoGroup
-        className='pl-2'
-        title={t(`${i18nPrefix}.documentInformation`)}
-        list={originInfo}
-        dataSetId={datasetId}
-      />
-      <InfoGroup
-        className='pl-2'
-        title={t(`${i18nPrefix}.technicalParameters`)}
-        list={technicalParameters}
-        dataSetId={datasetId}
-      />
-    </div>
-  )
-}
-
-export default React.memo(MetadataDocument)
diff --git a/app/components/datasets/metadata/metadata-document/info-group.tsx b/app/components/datasets/metadata/metadata-document/info-group.tsx
deleted file mode 100644
index 9078c43..0000000
--- a/app/components/datasets/metadata/metadata-document/info-group.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useRouter } from 'next/navigation'
-import { DataType, type MetadataItemWithValue, isShowManageMetadataLocalStorageKey } from '../types'
-import Field from './field'
-import InputCombined from '../edit-metadata-batch/input-combined'
-import { RiDeleteBinLine, RiQuestionLine } from '@remixicon/react'
-import Tooltip from '@/app/components/base/tooltip'
-import cn from '@/utils/classnames'
-import Divider from '@/app/components/base/divider'
-import SelectMetadataModal from '../metadata-dataset/select-metadata-modal'
-import AddMetadataButton from '../add-metadata-button'
-import useTimestamp from '@/hooks/use-timestamp'
-import { useTranslation } from 'react-i18next'
-
-type Props = {
-  dataSetId: string
-  className?: string
-  noHeader?: boolean
-  title?: string
-  uppercaseTitle?: boolean
-  titleTooltip?: string
-  headerRight?: React.ReactNode
-  contentClassName?: string
-  list: MetadataItemWithValue[]
-  isEdit?: boolean
-  onChange?: (item: MetadataItemWithValue) => void
-  onDelete?: (item: MetadataItemWithValue) => void
-  onSelect?: (item: MetadataItemWithValue) => void
-  onAdd?: (item: MetadataItemWithValue) => void
-}
-
-const InfoGroup: FC<Props> = ({
-  dataSetId,
-  className,
-  noHeader,
-  title,
-  uppercaseTitle = true,
-  titleTooltip,
-  headerRight,
-  contentClassName,
-  list,
-  isEdit,
-  onChange,
-  onDelete,
-  onSelect,
-  onAdd,
-}) => {
-  const router = useRouter()
-  const { t } = useTranslation()
-  const { formatTime: formatTimestamp } = useTimestamp()
-
-  const handleMangeMetadata = () => {
-    localStorage.setItem(isShowManageMetadataLocalStorageKey, 'true')
-    router.push(`/datasets/${dataSetId}/documents`)
-  }
-
-  return (
-    <div className={cn(className)}>
-      {!noHeader && (
-        <div className='flex items-center justify-between'>
-          <div className='flex items-center space-x-1'>
-            <div className={cn('text-text-secondary', uppercaseTitle ? 'system-xs-semibold-uppercase' : 'system-md-semibold')}>{title}</div>
-            {titleTooltip && (
-              <Tooltip popupContent={<div className='max-w-[240px]'>{titleTooltip}</div>}>
-                <div><RiQuestionLine className='size-3.5 text-text-tertiary' /></div>
-              </Tooltip>
-            )}
-          </div>
-          {headerRight}
-        </div>
-      )}
-
-      <div className={cn('mt-3 space-y-1', contentClassName)}>
-        {isEdit && (
-          <div>
-            <SelectMetadataModal
-              datasetId={dataSetId}
-              trigger={
-                <AddMetadataButton />
-              }
-              onSelect={data => onSelect?.(data as MetadataItemWithValue)}
-              onSave={data => onAdd?.(data)}
-              onManage={handleMangeMetadata}
-            />
-            {list.length > 0 && <Divider className='my-3 ' bgStyle='gradient' />}
-          </div>
-        )}
-        {list.map((item, i) => (
-          <Field key={(item.id && item.id !== 'built-in') ? item.id : `${i}`} label={item.name}>
-            {isEdit ? (
-              <div className='flex items-center space-x-0.5'>
-                <InputCombined
-                  className='h-6'
-                  type={item.type}
-                  value={item.value}
-                  onChange={value => onChange?.({ ...item, value })}
-                />
-                <div className='shrink-0 cursor-pointer rounded-md p-1  text-text-tertiary hover:bg-state-destructive-hover hover:text-text-destructive'>
-                  <RiDeleteBinLine className='size-4' onClick={() => onDelete?.(item)} />
-                </div>
-              </div>
-            ) : (<div className='system-xs-regular py-1 text-text-secondary'>{(item.value && item.type === DataType.time) ? formatTimestamp((item.value as number), t('datasetDocuments.metadata.dateTimeFormat')) : item.value}</div>)}
-          </Field>
-        ))}
-      </div>
-    </div>
-  )
-}
-export default React.memo(InfoGroup)
diff --git a/app/components/datasets/metadata/metadata-document/no-data.tsx b/app/components/datasets/metadata/metadata-document/no-data.tsx
deleted file mode 100644
index 624abf3..0000000
--- a/app/components/datasets/metadata/metadata-document/no-data.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-'use client'
-import Button from '@/app/components/base/button'
-import { RiArrowRightLine } from '@remixicon/react'
-import type { FC } from 'react'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-
-type Props = {
-  onStart: () => void
-}
-
-const NoData: FC<Props> = ({
-  onStart,
-}) => {
-  const { t } = useTranslation()
-  return (
-    <div className='rounded-xl bg-gradient-to-r from-workflow-workflow-progress-bg-1 to-workflow-workflow-progress-bg-2 p-4 pt-3'>
-      <div className='text-xs font-semibold leading-5 text-text-secondary'>{t('dataset.metadata.metadata')}</div>
-      <div className='system-xs-regular mt-1 text-text-tertiary'>{t('dataset.metadata.documentMetadata.metadataToolTip')}</div>
-      <Button variant='primary' className='mt-2' onClick={onStart}>
-        <div>{t('dataset.metadata.documentMetadata.startLabeling')}</div>
-        <RiArrowRightLine className='ml-1 size-4' />
-      </Button>
-    </div>
-  )
-}
-export default React.memo(NoData)
diff --git a/app/components/datasets/metadata/types.ts b/app/components/datasets/metadata/types.ts
deleted file mode 100644
index 00688e2..0000000
--- a/app/components/datasets/metadata/types.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-export enum DataType {
-  string = 'string',
-  number = 'number',
-  time = 'time',
-}
-
-export type BuiltInMetadataItem = {
-  type: DataType
-  name: string
-}
-
-export type MetadataItem = BuiltInMetadataItem & {
-  id: string
-}
-
-export type MetadataItemWithValue = MetadataItem & {
-  value: string | number | null
-}
-
-export type MetadataItemWithValueLength = MetadataItem & {
-  count: number
-}
-
-export type MetadataItemInBatchEdit = MetadataItemWithValue & {
-  isMultipleValue?: boolean
-}
-
-export type MetadataBatchEditToServer = { document_id: string, metadata_list: MetadataItemWithValue[] }[]
-
-export enum UpdateType {
-  changeValue = 'changeValue',
-  delete = 'delete',
-}
-
-export type MetadataItemWithEdit = MetadataItemWithValue & {
-  isMultipleValue?: boolean
-  isUpdated?: boolean
-  updateType?: UpdateType
-}
-
-export const isShowManageMetadataLocalStorageKey = 'dify-isShowManageMetadata'
diff --git a/app/components/datasets/metadata/utils/get-icon.ts b/app/components/datasets/metadata/utils/get-icon.ts
deleted file mode 100644
index 69b9bb1..0000000
--- a/app/components/datasets/metadata/utils/get-icon.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { DataType } from '../types'
-import { RiHashtag, RiTextSnippet, RiTimeLine } from '@remixicon/react'
-
-export const getIcon = (type: DataType) => {
-  return ({
-    [DataType.string]: RiTextSnippet,
-    [DataType.number]: RiHashtag,
-    [DataType.time]: RiTimeLine,
-  }[type] || RiTextSnippet)
-}
diff --git a/app/components/develop/ApiServer.tsx b/app/components/develop/ApiServer.tsx
deleted file mode 100644
index 9f2c9cf..0000000
--- a/app/components/develop/ApiServer.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-'use client'
-
-import type { FC } from 'react'
-import { useTranslation } from 'react-i18next'
-import CopyFeedback from '@/app/components/base/copy-feedback'
-import SecretKeyButton from '@/app/components/develop/secret-key/secret-key-button'
-
-type ApiServerProps = {
-  apiBaseUrl: string
-  appId?: string
-}
-const ApiServer: FC<ApiServerProps> = ({
-  apiBaseUrl,
-  appId,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex flex-wrap items-center gap-y-2'>
-      <div className='mr-2 flex h-8 items-center rounded-lg border-[0.5px] border-components-input-border-active bg-components-input-bg-normal pl-1.5 pr-1 leading-5'>
-        <div className='mr-0.5 h-5 shrink-0 rounded-md border border-divider-subtle px-1.5 text-[11px] text-text-tertiary'>{t('appApi.apiServer')}</div>
-        <div className='w-fit truncate px-1 text-[13px] font-medium text-text-secondary sm:w-[248px]'>{apiBaseUrl}</div>
-        <div className='mx-1 h-[14px] w-[1px] bg-divider-regular'></div>
-        <CopyFeedback content={apiBaseUrl}/>
-      </div>
-      <div className='mr-2 flex h-8 items-center rounded-lg border-[0.5px] border-[#D1FADF] bg-[#ECFDF3] px-3 text-xs font-semibold text-[#039855]'>
-        {t('appApi.ok')}
-      </div>
-      <SecretKeyButton
-        className='!h-8 shrink-0' appId={appId}
-      />
-    </div>
-  )
-}
-
-export default ApiServer
diff --git a/app/components/header/account-dropdown/compliance.tsx b/app/components/header/account-dropdown/compliance.tsx
deleted file mode 100644
index b584968..0000000
--- a/app/components/header/account-dropdown/compliance.tsx
+++ /dev/null
@@ -1,185 +0,0 @@
-import { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react'
-import { RiArrowDownCircleLine, RiArrowRightSLine, RiVerifiedBadgeLine } from '@remixicon/react'
-import type { FC, MouseEvent } from 'react'
-import { Fragment, useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useMutation } from '@tanstack/react-query'
-import PremiumBadge from '../../base/premium-badge'
-import SparklesSoft from '../../base/icons/src/public/common/SparklesSoft'
-import Button from '../../base/button'
-import Soc2 from '../../base/icons/src/public/common/Soc2'
-import Iso from '../../base/icons/src/public/common/Iso'
-import Gdpr from '../../base/icons/src/public/common/Gdpr'
-import Toast from '../../base/toast'
-import Tooltip from '../../base/tooltip'
-import cn from '@/utils/classnames'
-import { useProviderContext } from '@/context/provider-context'
-import { Plan } from '@/app/components/billing/type'
-import { useModalContext } from '@/context/modal-context'
-import { getDocDownloadUrl } from '@/service/common'
-
-enum DocName {
-  SOC2_Type_I = 'SOC2_Type_I',
-  SOC2_Type_II = 'SOC2_Type_II',
-  ISO_27001 = 'ISO_27001',
-  GDPR = 'GDPR',
-}
-
-type UpgradeOrDownloadProps = {
-  doc_name: DocName
-}
-const UpgradeOrDownload: FC<UpgradeOrDownloadProps> = ({ doc_name }) => {
-  const { t } = useTranslation()
-  const { plan } = useProviderContext()
-  const { setShowPricingModal, setShowAccountSettingModal } = useModalContext()
-  const isFreePlan = plan.type === Plan.sandbox
-
-  const handlePlanClick = useCallback(() => {
-    if (isFreePlan)
-      setShowPricingModal()
-    else
-      setShowAccountSettingModal({ payload: 'billing' })
-  }, [isFreePlan, setShowAccountSettingModal, setShowPricingModal])
-
-  const { isPending, mutate: downloadCompliance } = useMutation({
-    mutationKey: ['downloadCompliance', doc_name],
-    mutationFn: async () => {
-      try {
-        const ret = await getDocDownloadUrl(doc_name)
-        const a = document.createElement('a')
-        a.href = ret.url
-        a.click()
-        Toast.notify({
-          type: 'success',
-          message: t('common.operation.downloadSuccess'),
-        })
-      }
-      catch (error) {
-        console.error(error)
-        Toast.notify({
-          type: 'error',
-          message: t('common.operation.downloadFailed'),
-        })
-      }
-    },
-  })
-  const whichPlanCanDownloadCompliance = {
-    [DocName.SOC2_Type_I]: [Plan.professional, Plan.team],
-    [DocName.SOC2_Type_II]: [Plan.team],
-    [DocName.ISO_27001]: [Plan.team],
-    [DocName.GDPR]: [Plan.team, Plan.professional, Plan.sandbox],
-  }
-
-  const isCurrentPlanCanDownload = whichPlanCanDownloadCompliance[doc_name].includes(plan.type)
-  const handleDownloadClick = useCallback((e: MouseEvent<HTMLButtonElement>) => {
-    e.preventDefault()
-    downloadCompliance()
-  }, [downloadCompliance])
-  if (isCurrentPlanCanDownload) {
-    return <Button loading={isPending} disabled={isPending} size='small' variant='secondary' className='flex items-center gap-[1px]' onClick={handleDownloadClick}>
-      <RiArrowDownCircleLine className='size-[14px] text-components-button-secondary-text-disabled' />
-      <span className='system-xs-medium px-[3px] text-components-button-secondary-text'>{t('common.operation.download')}</span>
-    </Button>
-  }
-  const upgradeTooltip: Record<Plan, string> = {
-    [Plan.sandbox]: t('common.compliance.sandboxUpgradeTooltip'),
-    [Plan.professional]: t('common.compliance.professionalUpgradeTooltip'),
-    [Plan.team]: '',
-    [Plan.enterprise]: '',
-  }
-  return <Tooltip asChild={false} popupContent={upgradeTooltip[plan.type]}>
-    <PremiumBadge color='blue' allowHover={true} onClick={handlePlanClick}>
-      <SparklesSoft className='flex h-3.5 w-3.5 items-center py-[1px] pl-[3px] text-components-premium-badge-indigo-text-stop-0' />
-      <div className='system-xs-medium'>
-        <span className='p-1'>
-          {t('billing.upgradeBtn.encourageShort')}
-        </span>
-      </div>
-    </PremiumBadge>
-  </Tooltip>
-}
-
-export default function Compliance() {
-  const itemClassName = `
-  flex items-center w-full h-10 pl-1 pr-2 py-1 text-text-secondary system-md-regular
-  rounded-lg hover:bg-state-base-hover gap-1
-`
-  const { t } = useTranslation()
-
-  return <Menu as="div" className="relative h-full w-full">
-    {
-      ({ open }) => (
-        <>
-          <MenuButton className={
-            cn('group flex h-9 w-full items-center gap-1 rounded-lg py-2 pl-3 pr-2 hover:bg-state-base-hover',
-              open && 'bg-state-base-hover',
-            )}>
-            <RiVerifiedBadgeLine className='size-4 shrink-0 text-text-tertiary' />
-            <div className='system-md-regular grow px-1 text-left text-text-secondary'>{t('common.userProfile.compliance')}</div>
-            <RiArrowRightSLine className='size-[14px] shrink-0 text-text-tertiary' />
-          </MenuButton>
-          <Transition
-            as={Fragment}
-            enter="transition ease-out duration-100"
-            enterFrom="transform opacity-0 scale-95"
-            enterTo="transform opacity-100 scale-100"
-            leave="transition ease-in duration-75"
-            leaveFrom="transform opacity-100 scale-100"
-            leaveTo="transform opacity-0 scale-95"
-          >
-            <MenuItems
-              className={cn(
-                `absolute top-[1px] z-10 max-h-[70vh] w-[337px] origin-top-right -translate-x-full divide-y divide-divider-subtle overflow-y-scroll
-                rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg backdrop-blur-[5px] focus:outline-none
-              `,
-              )}
-            >
-              <div className="px-1 py-1">
-                <MenuItem>
-                  <div
-                    className={cn(itemClassName, 'group justify-between',
-                      'data-[active]:bg-state-base-hover',
-                    )}>
-                    <Soc2 className='size-7 shrink-0' />
-                    <div className='system-md-regular grow truncate px-1 text-text-secondary'>{t('common.compliance.soc2Type1')}</div>
-                    <UpgradeOrDownload doc_name={DocName.SOC2_Type_I} />
-                  </div>
-                </MenuItem>
-                <MenuItem>
-                  <div
-                    className={cn(itemClassName, 'group justify-between',
-                      'data-[active]:bg-state-base-hover',
-                    )}>
-                    <Soc2 className='size-7 shrink-0' />
-                    <div className='system-md-regular grow truncate px-1 text-text-secondary'>{t('common.compliance.soc2Type2')}</div>
-                    <UpgradeOrDownload doc_name={DocName.SOC2_Type_II} />
-                  </div>
-                </MenuItem>
-                <MenuItem>
-                  <div
-                    className={cn(itemClassName, 'group justify-between',
-                      'data-[active]:bg-state-base-hover',
-                    )}>
-                    <Iso className='size-7 shrink-0' />
-                    <div className='system-md-regular grow truncate px-1 text-text-secondary'>{t('common.compliance.iso27001')}</div>
-                    <UpgradeOrDownload doc_name={DocName.ISO_27001} />
-                  </div>
-                </MenuItem>
-                <MenuItem>
-                  <div
-                    className={cn(itemClassName, 'group justify-between',
-                      'data-[active]:bg-state-base-hover',
-                    )}>
-                    <Gdpr className='size-7 shrink-0' />
-                    <div className='system-md-regular grow truncate px-1 text-text-secondary'>{t('common.compliance.gdpr')}</div>
-                    <UpgradeOrDownload doc_name={DocName.GDPR} />
-                  </div>
-                </MenuItem>
-              </div>
-            </MenuItems>
-          </Transition>
-        </>
-      )
-    }
-  </Menu>
-}
diff --git a/app/components/header/account-dropdown/support.tsx b/app/components/header/account-dropdown/support.tsx
deleted file mode 100644
index e4731d2..0000000
--- a/app/components/header/account-dropdown/support.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react'
-import { RiArrowRightSLine, RiArrowRightUpLine, RiDiscordLine, RiFeedbackLine, RiMailSendLine, RiQuestionLine } from '@remixicon/react'
-import { Fragment } from 'react'
-import Link from 'next/link'
-import { useTranslation } from 'react-i18next'
-import { mailToSupport } from '../utils/util'
-import cn from '@/utils/classnames'
-import { useProviderContext } from '@/context/provider-context'
-import { Plan } from '@/app/components/billing/type'
-import { useAppContext } from '@/context/app-context'
-
-export default function Support() {
-  const itemClassName = `
-  flex items-center w-full h-9 pl-3 pr-2 text-text-secondary system-md-regular
-  rounded-lg hover:bg-state-base-hover cursor-pointer gap-1
-`
-  const { t } = useTranslation()
-  const { plan } = useProviderContext()
-  const { userProfile, langeniusVersionInfo } = useAppContext()
-  const canEmailSupport = plan.type === Plan.professional || plan.type === Plan.team || plan.type === Plan.enterprise
-
-  return <Menu as="div" className="relative h-full w-full">
-    {
-      ({ open }) => (
-        <>
-          <MenuButton className={
-            cn('group flex h-9 w-full items-center gap-1 rounded-lg py-2 pl-3 pr-2 hover:bg-state-base-hover',
-              open && 'bg-state-base-hover',
-            )}>
-            <RiQuestionLine className='size-4 shrink-0 text-text-tertiary' />
-            <div className='system-md-regular grow px-1 text-left text-text-secondary'>{t('common.userProfile.support')}</div>
-            <RiArrowRightSLine className='size-[14px] shrink-0 text-text-tertiary' />
-          </MenuButton>
-          <Transition
-            as={Fragment}
-            enter="transition ease-out duration-100"
-            enterFrom="transform opacity-0 scale-95"
-            enterTo="transform opacity-100 scale-100"
-            leave="transition ease-in duration-75"
-            leaveFrom="transform opacity-100 scale-100"
-            leaveTo="transform opacity-0 scale-95"
-          >
-            <MenuItems
-              className={cn(
-                `absolute top-[1px] z-10 max-h-[70vh] w-[216px] origin-top-right -translate-x-full divide-y divide-divider-subtle overflow-y-scroll
-                rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg backdrop-blur-[5px] focus:outline-none
-              `,
-              )}
-            >
-              <div className="px-1 py-1">
-                {canEmailSupport && <MenuItem>
-                  <a
-                    className={cn(itemClassName, 'group justify-between',
-                      'data-[active]:bg-state-base-hover',
-                    )}
-                    href={mailToSupport(userProfile.email, plan.type, langeniusVersionInfo.current_version)}
-                    target='_blank' rel='noopener noreferrer'>
-                    <RiMailSendLine className='size-4 shrink-0 text-text-tertiary' />
-                    <div className='system-md-regular grow px-1 text-text-secondary'>{t('common.userProfile.emailSupport')}</div>
-                    <RiArrowRightUpLine className='size-[14px] shrink-0 text-text-tertiary' />
-                  </a>
-                </MenuItem>}
-                <MenuItem>
-                  <Link
-                    className={cn(itemClassName, 'group justify-between',
-                      'data-[active]:bg-state-base-hover',
-                    )}
-                    href='https://github.com/langgenius/dify/discussions/categories/feedbacks'
-                    target='_blank' rel='noopener noreferrer'>
-                    <RiFeedbackLine className='size-4 shrink-0 text-text-tertiary' />
-                    <div className='system-md-regular grow px-1 text-text-secondary'>{t('common.userProfile.communityFeedback')}</div>
-                    <RiArrowRightUpLine className='size-[14px] shrink-0 text-text-tertiary' />
-                  </Link>
-                </MenuItem>
-                <MenuItem>
-                  <Link
-                    className={cn(itemClassName, 'group justify-between',
-                      'data-[active]:bg-state-base-hover',
-                    )}
-                    href='https://discord.gg/5AEfbxcd9k'
-                    target='_blank' rel='noopener noreferrer'>
-                    <RiDiscordLine className='size-4 shrink-0 text-text-tertiary' />
-                    <div className='system-md-regular grow px-1 text-text-secondary'>{t('common.userProfile.community')}</div>
-                    <RiArrowRightUpLine className='size-[14px] shrink-0 text-text-tertiary' />
-                  </Link>
-                </MenuItem>
-              </div>
-            </MenuItems>
-          </Transition>
-        </>
-      )
-    }
-  </Menu>
-}
diff --git a/app/components/header/account-setting/data-source-page/data-source-website/config-watercrawl-modal.tsx b/app/components/header/account-setting/data-source-page/data-source-website/config-watercrawl-modal.tsx
deleted file mode 100644
index ff85353..0000000
--- a/app/components/header/account-setting/data-source-page/data-source-website/config-watercrawl-modal.tsx
+++ /dev/null
@@ -1,161 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-} from '@/app/components/base/portal-to-follow-elem'
-import { Lock01 } from '@/app/components/base/icons/src/vender/solid/security'
-import Button from '@/app/components/base/button'
-import type { WatercrawlConfig } from '@/models/common'
-import Field from '@/app/components/datasets/create/website/base/field'
-import Toast from '@/app/components/base/toast'
-import { createDataSourceApiKeyBinding } from '@/service/datasets'
-import { LinkExternal02 } from '@/app/components/base/icons/src/vender/line/general'
-type Props = {
-  onCancel: () => void
-  onSaved: () => void
-}
-
-const I18N_PREFIX = 'datasetCreation.watercrawl'
-
-const DEFAULT_BASE_URL = 'https://app.watercrawl.dev'
-
-const ConfigWatercrawlModal: FC<Props> = ({
-  onCancel,
-  onSaved,
-}) => {
-  const { t } = useTranslation()
-  const [isSaving, setIsSaving] = useState(false)
-  const [config, setConfig] = useState<WatercrawlConfig>({
-    api_key: '',
-    base_url: '',
-  })
-
-  const handleConfigChange = useCallback((key: string) => {
-    return (value: string | number) => {
-      setConfig(prev => ({ ...prev, [key]: value as string }))
-    }
-  }, [])
-
-  const handleSave = useCallback(async () => {
-    if (isSaving)
-      return
-    let errorMsg = ''
-    if (config.base_url && !((config.base_url.startsWith('http://') || config.base_url.startsWith('https://'))))
-      errorMsg = t('common.errorMsg.urlError')
-    if (!errorMsg) {
-      if (!config.api_key) {
-        errorMsg = t('common.errorMsg.fieldRequired', {
-          field: 'API Key',
-        })
-      }
-    }
-
-    if (errorMsg) {
-      Toast.notify({
-        type: 'error',
-        message: errorMsg,
-      })
-      return
-    }
-    const postData = {
-      category: 'website',
-      provider: 'watercrawl',
-      credentials: {
-        auth_type: 'x-api-key',
-        config: {
-          api_key: config.api_key,
-          base_url: config.base_url || DEFAULT_BASE_URL,
-        },
-      },
-    }
-    try {
-      setIsSaving(true)
-      await createDataSourceApiKeyBinding(postData)
-      Toast.notify({
-        type: 'success',
-        message: t('common.api.success'),
-      })
-    }
-    finally {
-      setIsSaving(false)
-    }
-
-    onSaved()
-  }, [config.api_key, config.base_url, onSaved, t, isSaving])
-
-  return (
-    <PortalToFollowElem open>
-      <PortalToFollowElemContent className='z-[60] h-full w-full'>
-        <div className='fixed inset-0 flex items-center justify-center bg-background-overlay'>
-          <div className='mx-2 max-h-[calc(100vh-120px)] w-[640px] overflow-y-auto rounded-2xl bg-components-panel-bg shadow-xl'>
-            <div className='px-8 pt-8'>
-              <div className='mb-4 flex items-center justify-between'>
-                <div className='system-xl-semibold text-text-primary'>{t(`${I18N_PREFIX}.configWatercrawl`)}</div>
-              </div>
-
-              <div className='space-y-4'>
-                <Field
-                  label='API Key'
-                  labelClassName='!text-sm'
-                  isRequired
-                  value={config.api_key}
-                  onChange={handleConfigChange('api_key')}
-                  placeholder={t(`${I18N_PREFIX}.apiKeyPlaceholder`)!}
-                />
-                <Field
-                  label='Base URL'
-                  labelClassName='!text-sm'
-                  value={config.base_url}
-                  onChange={handleConfigChange('base_url')}
-                  placeholder={DEFAULT_BASE_URL}
-                />
-              </div>
-              <div className='my-8 flex h-8 items-center justify-between'>
-                <a className='flex items-center space-x-1 text-xs font-normal leading-[18px] text-text-accent' target='_blank' href='https://app.watercrawl.dev/'>
-                  <span>{t(`${I18N_PREFIX}.getApiKeyLinkText`)}</span>
-                  <LinkExternal02 className='h-3 w-3' />
-                </a>
-                <div className='flex'>
-                  <Button
-                    size='large'
-                    className='mr-2'
-                    onClick={onCancel}
-                  >
-                    {t('common.operation.cancel')}
-                  </Button>
-                  <Button
-                    variant='primary'
-                    size='large'
-                    onClick={handleSave}
-                    loading={isSaving}
-                  >
-                    {t('common.operation.save')}
-                  </Button>
-                </div>
-
-              </div>
-            </div>
-            <div className='border-t-[0.5px] border-t-divider-regular'>
-              <div className='flex items-center justify-center bg-background-section-burn py-3 text-xs text-text-tertiary'>
-                <Lock01 className='mr-1 h-3 w-3 text-text-tertiary' />
-                {t('common.modelProvider.encrypted.front')}
-                <a
-                  className='mx-1 text-text-accent'
-                  target='_blank' rel='noopener noreferrer'
-                  href='https://pycryptodome.readthedocs.io/en/latest/src/cipher/oaep.html'
-                >
-                  PKCS1_OAEP
-                </a>
-                {t('common.modelProvider.encrypted.back')}
-              </div>
-            </div>
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-export default React.memo(ConfigWatercrawlModal)
diff --git a/app/components/header/account-setting/members-page/edit-workspace-modal/index.module.css b/app/components/header/account-setting/members-page/edit-workspace-modal/index.module.css
deleted file mode 100644
index e69de29..0000000
--- a/app/components/header/account-setting/members-page/edit-workspace-modal/index.module.css
+++ /dev/null
diff --git a/app/components/header/account-setting/members-page/edit-workspace-modal/index.tsx b/app/components/header/account-setting/members-page/edit-workspace-modal/index.tsx
deleted file mode 100644
index 2c11c36..0000000
--- a/app/components/header/account-setting/members-page/edit-workspace-modal/index.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-import cn from '@/utils/classnames'
-import Modal from '@/app/components/base/modal'
-import Input from '@/app/components/base/input'
-import { WEB_PREFIX } from '@/config'
-import { useTranslation } from 'react-i18next'
-import { useState } from 'react'
-import { useContext } from 'use-context-selector'
-import s from './index.module.css'
-import Button from '@/app/components/base/button'
-import { RiCloseLine } from '@remixicon/react'
-import { useAppContext } from '@/context/app-context'
-import { updateWorkspaceInfo } from '@/service/common'
-import { ToastContext } from '@/app/components/base/toast'
-import { noop } from 'lodash-es'
-
-type IEditWorkspaceModalProps = {
-  onCancel: () => void
-}
-const EditWorkspaceModal = ({
-  onCancel,
-}: IEditWorkspaceModalProps) => {
-  const { t } = useTranslation()
-  const { notify } = useContext(ToastContext)
-  const { currentWorkspace, isCurrentWorkspaceOwner } = useAppContext()
-  const [name, setName] = useState<string>(currentWorkspace.name)
-
-  const changeWorkspaceInfo = async (name: string) => {
-    try {
-      await updateWorkspaceInfo({
-        url: '/workspaces/info',
-        body: {
-          name,
-        },
-      })
-      notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') })
-      location.assign(WEB_PREFIX)
-    }
-    catch {
-      notify({ type: 'error', message: t('common.actionMsg.modifiedUnsuccessfully') })
-    }
-  }
-
-  return (
-    <div className={cn(s.wrap)}>
-      <Modal overflowVisible isShow onClose={noop} className={cn(s.modal)}>
-        <div className='mb-2 flex justify-between'>
-          <div className='text-xl font-semibold text-text-primary'>{t('common.account.editWorkspaceInfo')}</div>
-          <RiCloseLine className='h-4 w-4 cursor-pointer text-text-tertiary' onClick={onCancel} />
-        </div>
-        <div>
-          <div className='mb-2 text-sm font-medium text-text-primary'>{t('common.account.workspaceName')}</div>
-          <Input
-            className='mb-2'
-            value={name}
-            placeholder={t('common.account.workspaceNamePlaceholder')}
-            onChange={(e) => {
-              setName(e.target.value)
-            }}
-            onClear={() => {
-              setName(currentWorkspace.name)
-            }}
-          />
-
-          <div className='sticky bottom-0 -mx-2 mt-2 flex flex-wrap items-center justify-end gap-x-2 bg-components-panel-bg px-2 pt-4'>
-            <Button
-              size='large'
-              onClick={onCancel}
-            >
-              {t('common.operation.cancel')}
-            </Button>
-            <Button
-              size='large'
-              variant='primary'
-              onClick={() => {
-                changeWorkspaceInfo(name)
-                onCancel()
-              }}
-              disabled={!isCurrentWorkspaceOwner}
-            >
-              {t('common.operation.confirm')}
-            </Button>
-          </div>
-
-        </div>
-      </Modal>
-    </div>
-  )
-}
-export default EditWorkspaceModal
diff --git a/app/components/header/account-setting/menu-dialog.tsx b/app/components/header/account-setting/menu-dialog.tsx
deleted file mode 100644
index ad3a1e7..0000000
--- a/app/components/header/account-setting/menu-dialog.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { Fragment, useCallback, useEffect } from 'react'
-import type { ReactNode } from 'react'
-import { Dialog, DialogPanel, Transition, TransitionChild } from '@headlessui/react'
-import cn from '@/utils/classnames'
-import { noop } from 'lodash-es'
-
-type DialogProps = {
-  className?: string
-  children: ReactNode
-  show: boolean
-  onClose?: () => void
-}
-
-const MenuDialog = ({
-  className,
-  children,
-  show,
-  onClose,
-}: DialogProps) => {
-  const close = useCallback(() => onClose?.(), [onClose])
-
-  useEffect(() => {
-    const handleKeyDown = (event: KeyboardEvent) => {
-      if (event.key === 'Escape') {
-        event.preventDefault()
-        close()
-      }
-    }
-
-    document.addEventListener('keydown', handleKeyDown)
-    return () => {
-      document.removeEventListener('keydown', handleKeyDown)
-    }
-  }, [close])
-
-  return (
-    <Transition appear show={show} as={Fragment}>
-      <Dialog as="div" className="relative z-[60]" onClose={noop}>
-        <div className="fixed inset-0">
-          <div className="flex min-h-full flex-col items-center justify-center">
-            <TransitionChild>
-              <DialogPanel className={cn(
-                'relative h-full w-full grow overflow-hidden bg-background-sidenav-bg p-0 text-left align-middle backdrop-blur-md transition-all',
-                'duration-300 ease-in data-[closed]:scale-95 data-[closed]:opacity-0',
-                'data-[enter]:scale-100 data-[enter]:opacity-100',
-                'data-[enter]:scale-95 data-[leave]:opacity-0',
-                className,
-              )}>
-                <div className='absolute right-0 top-0 h-full w-1/2 bg-components-panel-bg' />
-                {children}
-              </DialogPanel>
-            </TransitionChild>
-          </div>
-        </div>
-      </Dialog>
-    </Transition >
-  )
-}
-
-export default MenuDialog
diff --git a/app/components/header/account-setting/model-provider-page/hooks.spec.ts b/app/components/header/account-setting/model-provider-page/hooks.spec.ts
deleted file mode 100644
index b7a56f7..0000000
--- a/app/components/header/account-setting/model-provider-page/hooks.spec.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import { renderHook } from '@testing-library/react'
-import { useLanguage } from './hooks'
-import { useContext } from 'use-context-selector'
-import { after } from 'node:test'
-
-jest.mock('swr', () => ({
-  __esModule: true,
-  default: jest.fn(), // mock useSWR
-  useSWRConfig: jest.fn(),
-}))
-
-// mock use-context-selector
-jest.mock('use-context-selector', () => ({
-  useContext: jest.fn(),
-}))
-
-// mock service/common functions
-jest.mock('@/service/common', () => ({
-  fetchDefaultModal: jest.fn(),
-  fetchModelList: jest.fn(),
-  fetchModelProviderCredentials: jest.fn(),
-  fetchModelProviders: jest.fn(),
-  getPayUrl: jest.fn(),
-}))
-
-// mock context hooks
-jest.mock('@/context/i18n', () => ({
-  __esModule: true,
-  default: jest.fn(),
-}))
-
-jest.mock('@/context/provider-context', () => ({
-  useProviderContext: jest.fn(),
-}))
-
-jest.mock('@/context/modal-context', () => ({
-  useModalContextSelector: jest.fn(),
-}))
-
-jest.mock('@/context/event-emitter', () => ({
-  useEventEmitterContextContext: jest.fn(),
-}))
-
-// mock plugins
-jest.mock('@/app/components/plugins/marketplace/hooks', () => ({
-  useMarketplacePlugins: jest.fn(),
-}))
-
-jest.mock('@/app/components/plugins/marketplace/utils', () => ({
-  getMarketplacePluginsByCollectionId: jest.fn(),
-}))
-
-jest.mock('./provider-added-card', () => jest.fn())
-
-after(() => {
-  jest.resetModules()
-  jest.clearAllMocks()
-})
-
-describe('useLanguage', () => {
-  it('should replace hyphen with underscore in locale', () => {
-    (useContext as jest.Mock).mockReturnValue({
-      locale: 'en-US',
-    })
-    const { result } = renderHook(() => useLanguage())
-    expect(result.current).toBe('en_US')
-  })
-
-  it('should return locale as is if no hyphen exists', () => {
-    (useContext as jest.Mock).mockReturnValue({
-      locale: 'enUS',
-    })
-
-    const { result } = renderHook(() => useLanguage())
-    expect(result.current).toBe('enUS')
-  })
-
-  it('should handle multiple hyphens', () => {
-    // Mock the I18n context return value
-    (useContext as jest.Mock).mockReturnValue({
-      locale: 'zh-Hans-CN',
-    })
-
-    const { result } = renderHook(() => useLanguage())
-    expect(result.current).toBe('zh_Hans-CN')
-  })
-})
diff --git a/app/components/header/account-setting/model-provider-page/install-from-marketplace.tsx b/app/components/header/account-setting/model-provider-page/install-from-marketplace.tsx
deleted file mode 100644
index 818007a..0000000
--- a/app/components/header/account-setting/model-provider-page/install-from-marketplace.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { useCallback, useState } from 'react'
-import { useTheme } from 'next-themes'
-import { useTranslation } from 'react-i18next'
-import Link from 'next/link'
-import {
-  RiArrowDownSLine,
-  RiArrowRightUpLine,
-} from '@remixicon/react'
-import type {
-  ModelProvider,
-} from './declarations'
-import {
-  useMarketplaceAllPlugins,
-} from './hooks'
-import Divider from '@/app/components/base/divider'
-import Loading from '@/app/components/base/loading'
-import ProviderCard from '@/app/components/plugins/provider-card'
-import List from '@/app/components/plugins/marketplace/list'
-import type { Plugin } from '@/app/components/plugins/types'
-import { MARKETPLACE_URL_PREFIX } from '@/config'
-import cn from '@/utils/classnames'
-import { getLocaleOnClient } from '@/i18n'
-
-type InstallFromMarketplaceProps = {
-  providers: ModelProvider[]
-  searchText: string
-}
-const InstallFromMarketplace = ({
-  providers,
-  searchText,
-}: InstallFromMarketplaceProps) => {
-  const { t } = useTranslation()
-  const { theme } = useTheme()
-  const [collapse, setCollapse] = useState(false)
-  const locale = getLocaleOnClient()
-  const {
-    plugins: allPlugins,
-    isLoading: isAllPluginsLoading,
-  } = useMarketplaceAllPlugins(providers, searchText)
-
-  const cardRender = useCallback((plugin: Plugin) => {
-    if (plugin.type === 'bundle')
-      return null
-
-    return <ProviderCard key={plugin.plugin_id} payload={plugin} />
-  }, [])
-
-  return (
-    <div className='mb-2'>
-      <Divider className='!mt-4 h-px' />
-      <div className='flex items-center justify-between'>
-        <div className='system-md-semibold flex cursor-pointer items-center gap-1 text-text-primary' onClick={() => setCollapse(!collapse)}>
-          <RiArrowDownSLine className={cn('h-4 w-4', collapse && '-rotate-90')} />
-          {t('common.modelProvider.installProvider')}
-        </div>
-        <div className='mb-2 flex items-center pt-2'>
-          <span className='system-sm-regular pr-1 text-text-tertiary'>{t('common.modelProvider.discoverMore')}</span>
-          <Link target="_blank" href={`${MARKETPLACE_URL_PREFIX}${theme ? `?theme=${theme}` : ''}`} className='system-sm-medium inline-flex items-center text-text-accent'>
-            {t('plugin.marketplace.difyMarketplace')}
-            <RiArrowRightUpLine className='h-4 w-4' />
-          </Link>
-        </div>
-      </div>
-      {!collapse && isAllPluginsLoading && <Loading type='area' />}
-      {
-        !isAllPluginsLoading && !collapse && (
-          <List
-            marketplaceCollections={[]}
-            marketplaceCollectionPluginsMap={{}}
-            plugins={allPlugins}
-            showInstallButton
-            locale={locale}
-            cardContainerClassName='grid grid-cols-2 gap-2'
-            cardRender={cardRender}
-            emptyClassName='h-auto'
-          />
-        )
-      }
-    </div>
-  )
-}
-
-export default InstallFromMarketplace
diff --git a/app/components/header/account-setting/model-provider-page/model-parameter-modal/agent-model-trigger.tsx b/app/components/header/account-setting/model-provider-page/model-parameter-modal/agent-model-trigger.tsx
deleted file mode 100644
index f9ab2e3..0000000
--- a/app/components/header/account-setting/model-provider-page/model-parameter-modal/agent-model-trigger.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-import type { FC } from 'react'
-import { useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import type {
-  ModelItem,
-  ModelProvider,
-} from '../declarations'
-import {
-  CustomConfigurationStatusEnum,
-  ModelTypeEnum,
-} from '../declarations'
-import { useInvalidateInstalledPluginList } from '@/service/use-plugins'
-import ConfigurationButton from './configuration-button'
-import Loading from '@/app/components/base/loading'
-import {
-  useModelModalHandler,
-  useUpdateModelList,
-  useUpdateModelProviders,
-} from '../hooks'
-import ModelIcon from '../model-icon'
-import ModelDisplay from './model-display'
-import { InstallPluginButton } from '@/app/components/workflow/nodes/_base/components/install-plugin-button'
-import StatusIndicators from './status-indicators'
-import cn from '@/utils/classnames'
-import { useProviderContext } from '@/context/provider-context'
-import { RiEqualizer2Line } from '@remixicon/react'
-import { useModelInList, usePluginInfo } from '@/service/use-plugins'
-
-export type AgentModelTriggerProps = {
-  open?: boolean
-  disabled?: boolean
-  currentProvider?: ModelProvider
-  currentModel?: ModelItem
-  providerName?: string
-  modelId?: string
-  hasDeprecated?: boolean
-  scope?: string
-}
-
-const AgentModelTrigger: FC<AgentModelTriggerProps> = ({
-  disabled,
-  currentProvider,
-  currentModel,
-  providerName,
-  modelId,
-  hasDeprecated,
-  scope,
-}) => {
-  const { t } = useTranslation()
-  const { modelProviders } = useProviderContext()
-  const updateModelProviders = useUpdateModelProviders()
-  const updateModelList = useUpdateModelList()
-  const { modelProvider, needsConfiguration } = useMemo(() => {
-    const modelProvider = modelProviders.find(item => item.provider === providerName)
-    const needsConfiguration = modelProvider?.custom_configuration.status === CustomConfigurationStatusEnum.noConfigure && !(
-      modelProvider.system_configuration.enabled === true
-      && modelProvider.system_configuration.quota_configurations.find(
-        item => item.quota_type === modelProvider.system_configuration.current_quota_type,
-      )
-    )
-    return {
-      modelProvider,
-      needsConfiguration,
-    }
-  }, [modelProviders, providerName])
-  const [installed, setInstalled] = useState(false)
-  const invalidateInstalledPluginList = useInvalidateInstalledPluginList()
-  const handleOpenModal = useModelModalHandler()
-
-  const { data: inModelList = false } = useModelInList(currentProvider, modelId)
-  const { data: pluginInfo, isLoading: isPluginLoading } = usePluginInfo(providerName)
-
-  if (modelId && isPluginLoading)
-    return <Loading />
-
-  return (
-    <div
-      className={cn(
-        'group relative flex grow cursor-pointer items-center gap-[2px] rounded-lg bg-components-input-bg-normal p-1 hover:bg-state-base-hover-alt',
-      )}
-    >
-      {modelId ? (
-        <>
-          <ModelIcon
-            className='p-0.5'
-            provider={currentProvider || modelProvider}
-            modelName={currentModel?.model || modelId}
-            isDeprecated={hasDeprecated}
-          />
-          <ModelDisplay
-            currentModel={currentModel}
-            modelId={modelId}
-          />
-          {needsConfiguration && (
-            <ConfigurationButton
-              modelProvider={modelProvider}
-              handleOpenModal={handleOpenModal}
-            />
-          )}
-          <StatusIndicators
-            needsConfiguration={needsConfiguration}
-            modelProvider={!!modelProvider}
-            inModelList={inModelList}
-            disabled={!!disabled}
-            pluginInfo={pluginInfo}
-            t={t}
-          />
-          {!installed && !modelProvider && pluginInfo && (
-            <InstallPluginButton
-              onClick={e => e.stopPropagation()}
-              size={'small'}
-              uniqueIdentifier={pluginInfo.latest_package_identifier}
-              onSuccess={() => {
-                [
-                  ModelTypeEnum.textGeneration,
-                  ModelTypeEnum.textEmbedding,
-                  ModelTypeEnum.rerank,
-                  ModelTypeEnum.moderation,
-                  ModelTypeEnum.speech2text,
-                  ModelTypeEnum.tts,
-                ].forEach((type: ModelTypeEnum) => {
-                  if (scope?.includes(type))
-                    updateModelList(type)
-                },
-                )
-                updateModelProviders()
-                invalidateInstalledPluginList()
-                setInstalled(true)
-              }}
-            />
-          )}
-          {modelProvider && !disabled && !needsConfiguration && (
-            <div className="flex items-center pr-1">
-              <RiEqualizer2Line className="h-4 w-4 text-text-tertiary group-hover:text-text-secondary" />
-            </div>
-          )}
-        </>
-      ) : (
-        <>
-          <div className="flex grow items-center gap-1 p-1 pl-2">
-            <span className="system-sm-regular overflow-hidden text-ellipsis whitespace-nowrap text-components-input-text-placeholder">
-              {t('workflow.nodes.agent.configureModel')}
-            </span>
-          </div>
-          <div className="flex items-center pr-1">
-            <RiEqualizer2Line className="h-4 w-4 text-text-tertiary group-hover:text-text-secondary" />
-          </div>
-        </>
-      )}
-    </div>
-  )
-}
-
-export default AgentModelTrigger
diff --git a/app/components/header/account-setting/model-provider-page/model-parameter-modal/configuration-button.tsx b/app/components/header/account-setting/model-provider-page/model-parameter-modal/configuration-button.tsx
deleted file mode 100644
index 4dcc045..0000000
--- a/app/components/header/account-setting/model-provider-page/model-parameter-modal/configuration-button.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import Button from '@/app/components/base/button'
-import { ConfigurationMethodEnum } from '../declarations'
-import { useTranslation } from 'react-i18next'
-
-type ConfigurationButtonProps = {
-  modelProvider: any
-  handleOpenModal: any
-}
-
-const ConfigurationButton = ({ modelProvider, handleOpenModal }: ConfigurationButtonProps) => {
-  const { t } = useTranslation()
-  return (
-    <Button
-      size="small"
-      className="z-[100]"
-      onClick={(e) => {
-        e.stopPropagation()
-        handleOpenModal(modelProvider, ConfigurationMethodEnum.predefinedModel, undefined)
-      }}
-    >
-      <div className="flex items-center justify-center gap-1 px-[3px]">
-        {t('workflow.nodes.agent.notAuthorized')}
-      </div>
-      <div className="flex h-[14px] w-[14px] items-center justify-center">
-        <div className="h-2 w-2 shrink-0 rounded-[3px] border border-components-badge-status-light-warning-border-inner
-          bg-components-badge-status-light-warning-bg shadow-components-badge-status-light-warning-halo" />
-      </div>
-    </Button>
-  )
-}
-
-export default ConfigurationButton
diff --git a/app/components/header/account-setting/model-provider-page/model-parameter-modal/model-display.tsx b/app/components/header/account-setting/model-provider-page/model-parameter-modal/model-display.tsx
deleted file mode 100644
index e9e8ec7..0000000
--- a/app/components/header/account-setting/model-provider-page/model-parameter-modal/model-display.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import ModelName from '../model-name'
-
-type ModelDisplayProps = {
-  currentModel: any
-  modelId: string
-}
-
-const ModelDisplay = ({ currentModel, modelId }: ModelDisplayProps) => {
-  return currentModel ? (
-    <ModelName
-      className="flex grow items-center gap-1 px-1 py-[3px]"
-      modelItem={currentModel}
-      showMode
-      showFeatures
-    />
-  ) : (
-    <div className="flex grow items-center gap-1 truncate px-1 py-[3px] opacity-50">
-      <div className="system-sm-regular overflow-hidden text-ellipsis text-components-input-text-filled">
-        {modelId}
-      </div>
-    </div>
-  )
-}
-
-export default ModelDisplay
diff --git a/app/components/header/account-setting/model-provider-page/model-parameter-modal/status-indicators.tsx b/app/components/header/account-setting/model-provider-page/model-parameter-modal/status-indicators.tsx
deleted file mode 100644
index 02b8cb2..0000000
--- a/app/components/header/account-setting/model-provider-page/model-parameter-modal/status-indicators.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import Tooltip from '@/app/components/base/tooltip'
-import Link from 'next/link'
-import { SwitchPluginVersion } from '@/app/components/workflow/nodes/_base/components/switch-plugin-version'
-import { useInstalledPluginList } from '@/service/use-plugins'
-import { RiErrorWarningFill } from '@remixicon/react'
-
-type StatusIndicatorsProps = {
-  needsConfiguration: boolean
-  modelProvider: boolean
-  inModelList: boolean
-  disabled: boolean
-  pluginInfo: any
-  t: any
-}
-
-const StatusIndicators = ({ needsConfiguration, modelProvider, inModelList, disabled, pluginInfo, t }: StatusIndicatorsProps) => {
-  const { data: pluginList } = useInstalledPluginList()
-  const renderTooltipContent = (title: string, description?: string, linkText?: string, linkHref?: string) => {
-    return (
-      <div className='flex w-[240px] max-w-[240px] flex-col gap-1 px-1 py-1.5' onClick={e => e.stopPropagation()}>
-        <div className='title-xs-semi-bold text-text-primary'>{title}</div>
-        {description && (
-          <div className='body-xs-regular min-w-[200px] text-text-secondary'>
-            {description}
-          </div>
-        )}
-        {linkText && linkHref && (
-          <div className='body-xs-regular z-[100] cursor-pointer text-text-accent'>
-            <Link
-              href={linkHref}
-              onClick={(e) => {
-                e.stopPropagation()
-              }}
-            >
-              {linkText}
-            </Link>
-          </div>
-        )}
-      </div>
-    )
-  }
-  // const installedPluginUniqueIdentifier = pluginList?.plugins.find(plugin => plugin.name === pluginInfo.name)?.plugin_unique_identifier
-  return (
-    <>
-      {/* plugin installed and model is in model list but disabled */}
-      {/* plugin installed from github/local and model is not in model list */}
-      {!needsConfiguration && modelProvider && disabled && (
-        <>
-          {inModelList ? (
-            <Tooltip
-              popupContent={t('workflow.nodes.agent.modelSelectorTooltips.deprecated')}
-              asChild={false}
-              needsDelay={false}
-            >
-              <RiErrorWarningFill className='h-4 w-4 text-text-destructive' />
-            </Tooltip>
-          ) : !pluginInfo ? (
-            <Tooltip
-              popupContent={renderTooltipContent(
-                t('workflow.nodes.agent.modelNotSupport.title'),
-                t('workflow.nodes.agent.modelNotSupport.desc'),
-                t('workflow.nodes.agent.linkToPlugin'),
-                '/plugins',
-              )}
-              asChild={false}
-              needsDelay={true}
-            >
-              <RiErrorWarningFill className='h-4 w-4 text-text-destructive' />
-            </Tooltip>
-          ) : (
-            <SwitchPluginVersion
-              tooltip={renderTooltipContent(
-                t('workflow.nodes.agent.modelNotSupport.title'),
-                t('workflow.nodes.agent.modelNotSupport.descForVersionSwitch'),
-              )}
-              uniqueIdentifier={pluginList?.plugins.find(plugin => plugin.name === pluginInfo.name)?.plugin_unique_identifier ?? ''}
-            />
-          )}
-        </>
-      )}
-      {!modelProvider && !pluginInfo && (
-        <Tooltip
-          popupContent={renderTooltipContent(
-            t('workflow.nodes.agent.modelNotInMarketplace.title'),
-            t('workflow.nodes.agent.modelNotInMarketplace.desc'),
-            t('workflow.nodes.agent.linkToPlugin'),
-            '/plugins',
-          )}
-          asChild={false}
-          needsDelay
-        >
-          <RiErrorWarningFill className='h-4 w-4 text-text-destructive' />
-        </Tooltip>
-      )}
-    </>
-  )
-}
-
-export default StatusIndicators
diff --git a/app/components/header/plan-badge/index.tsx b/app/components/header/plan-badge/index.tsx
deleted file mode 100644
index 292025c..0000000
--- a/app/components/header/plan-badge/index.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { useProviderContext } from '@/context/provider-context'
-import type { FC } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiGraduationCapFill,
-} from '@remixicon/react'
-import { SparklesSoft } from '../../base/icons/src/public/common'
-import PremiumBadge from '../../base/premium-badge'
-import { Plan } from '../../billing/type'
-
-type PlanBadgeProps = {
-  plan: Plan
-  allowHover?: boolean
-  sandboxAsUpgrade?: boolean
-  onClick?: () => void
-}
-
-const PlanBadge: FC<PlanBadgeProps> = ({ plan, allowHover, sandboxAsUpgrade = false, onClick }) => {
-  const { isFetchedPlan, isEducationWorkspace } = useProviderContext()
-  const { t } = useTranslation()
-
-  if (!isFetchedPlan) return null
-  if (plan === Plan.sandbox && sandboxAsUpgrade) {
-    return <PremiumBadge className='select-none' color='blue' allowHover={allowHover} onClick={onClick}>
-      <SparklesSoft className='flex h-3.5 w-3.5 items-center py-[1px] pl-[3px] text-components-premium-badge-indigo-text-stop-0' />
-      <div className='system-xs-medium'>
-        <span className='whitespace-nowrap p-1'>
-          {t('billing.upgradeBtn.encourageShort')}
-        </span>
-      </div>
-    </PremiumBadge>
-  }
-  if (plan === Plan.sandbox) {
-    return <PremiumBadge className='select-none' size='s' color='gray' allowHover={allowHover} onClick={onClick}>
-      <div className='system-2xs-medium-uppercase'>
-        <span className='p-1'>
-          {plan}
-        </span>
-      </div>
-    </PremiumBadge>
-  }
-  if (plan === Plan.professional) {
-    return <PremiumBadge className='select-none' size='s' color='blue' allowHover={allowHover} onClick={onClick}>
-      <div className='system-2xs-medium-uppercase'>
-        <span className='inline-flex items-center gap-1 p-1'>
-          {isEducationWorkspace && <RiGraduationCapFill className='h-3 w-3' />}
-          pro
-        </span>
-      </div>
-    </PremiumBadge>
-  }
-  if (plan === Plan.team) {
-    return <PremiumBadge className='select-none' size='s' color='indigo' allowHover={allowHover} onClick={onClick}>
-      <div className='system-2xs-medium-uppercase'>
-        <span className='p-1'>
-          {plan}
-        </span>
-      </div>
-    </PremiumBadge>
-  }
-  return null
-}
-
-export default PlanBadge
diff --git a/app/components/header/plugins-nav/downloading-icon.module.css b/app/components/header/plugins-nav/downloading-icon.module.css
deleted file mode 100644
index bbd6a35..0000000
--- a/app/components/header/plugins-nav/downloading-icon.module.css
+++ /dev/null
@@ -1,44 +0,0 @@
-@keyframes realistic-blink {
-  0% { fill: #37ff37; opacity: 0.4; }
-  15% { fill: #37ff37; opacity: 0.9; }
-  25% { fill: #37ff37; opacity: 0.3; }
-  38% { fill: #ff4444; opacity: 0.8; }
-  42% { fill: #ff4444; opacity: 0.3; }
-  58% { fill: #37ff37; opacity: 0.9; }
-  65% { fill: #37ff37; opacity: 0.4; }
-  79% { fill: #ff4444; opacity: 0.8; }
-  84% { fill: #ff4444; opacity: 0.3; }
-  92% { fill: #37ff37; opacity: 0.8; }
-  100% { fill: #37ff37; opacity: 0.4; }
-}
-
-@keyframes drop {
-  0% {
-    transform: translateY(-4px);
-    opacity: 0;
-  }
-  5% {
-    transform: translateY(-4px);
-    opacity: 1;
-  }
-  65% {
-    transform: translateY(2px);
-    opacity: 1;
-  }
-  80% {
-    transform: translateY(2px);
-    opacity: 0;
-  }
-  100% {
-    transform: translateY(2px);
-    opacity: 0;
-  }
-}
-
-#downloadingIconLight {
-  animation: realistic-blink 3s infinite ease-in-out;
-}
-
-#downloadingIconArrow {
-  animation: drop 1.2s cubic-bezier(0.4, 0, 1, 1) infinite;
-}
diff --git a/app/components/header/plugins-nav/downloading-icon.tsx b/app/components/header/plugins-nav/downloading-icon.tsx
deleted file mode 100644
index d3fc486..0000000
--- a/app/components/header/plugins-nav/downloading-icon.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import s from './downloading-icon.module.css'
-
-const DownloadingIcon = () => {
-  return (
-    <div className="inline-flex text-components-button-secondary-text">
-      <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" className="install-icon">
-        <g id="install-line">
-          <path d="M8 2V4H5L4.999 14H18.999L19 4H16V2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H8ZM18.999 16H4.999L5 20H19L18.999 16Z" fill="currentColor"/>
-          <path id={s.downloadingIconLight} d="M17 19V17H15V19H17Z"/>
-          <path id={s.downloadingIconArrow} d="M13 2V7H16L12 11L8 7H11V2H13Z" fill="currentColor"/>
-        </g>
-      </svg>
-    </div>
-  )
-}
-
-export default DownloadingIcon
diff --git a/app/components/header/plugins-nav/index.tsx b/app/components/header/plugins-nav/index.tsx
deleted file mode 100644
index b22e717..0000000
--- a/app/components/header/plugins-nav/index.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-'use client'
-
-import { useTranslation } from 'react-i18next'
-import Link from 'next/link'
-import classNames from '@/utils/classnames'
-import { Group } from '@/app/components/base/icons/src/vender/other'
-import { useSelectedLayoutSegment } from 'next/navigation'
-import DownloadingIcon from './downloading-icon'
-import { usePluginTaskStatus } from '@/app/components/plugins/plugin-page/plugin-tasks/hooks'
-import Indicator from '@/app/components/header/indicator'
-
-type PluginsNavProps = {
-  className?: string
-}
-
-const PluginsNav = ({
-  className,
-}: PluginsNavProps) => {
-  const { t } = useTranslation()
-  const selectedSegment = useSelectedLayoutSegment()
-  const activated = selectedSegment === 'plugins'
-  const {
-    isInstalling,
-    isInstallingWithError,
-    isFailed,
-  } = usePluginTaskStatus()
-
-  return (
-    <Link href="/plugins" className={classNames(
-      className, 'group', 'plugins-nav-button', // used for use-fold-anim-into.ts
-    )}>
-      <div
-        className={classNames(
-          'relative flex flex-row h-8 p-1.5 gap-0.5 border border-transparent items-center justify-center rounded-xl system-sm-medium-uppercase',
-          activated && 'border-components-main-nav-nav-button-border bg-components-main-nav-nav-button-bg-active shadow-md text-components-main-nav-nav-button-text',
-          !activated && 'text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary',
-          (isInstallingWithError || isFailed) && !activated && 'border-components-panel-border-subtle',
-        )}
-      >
-        {
-          (isFailed || isInstallingWithError) && !activated && (
-            <Indicator
-              color='red'
-              className='absolute left-[-1px] top-[-1px]'
-            />
-          )
-        }
-        <div className='mr-0.5 flex h-5 w-5 items-center justify-center'>
-          {
-            (!(isInstalling || isInstallingWithError) || activated) && (
-              <Group className='h-4 w-4' />
-            )
-          }
-          {
-            (isInstalling || isInstallingWithError) && !activated && (
-              <DownloadingIcon />
-            )
-          }
-        </div>
-        <span className='px-0.5'>{t('common.menus.plugins')}</span>
-      </div>
-    </Link>
-  )
-}
-
-export default PluginsNav
diff --git a/app/components/plugins/base/badges/icon-with-tooltip.tsx b/app/components/plugins/base/badges/icon-with-tooltip.tsx
deleted file mode 100644
index 60b164e..0000000
--- a/app/components/plugins/base/badges/icon-with-tooltip.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import React, { type FC } from 'react'
-import cn from '@/utils/classnames'
-import Tooltip from '@/app/components/base/tooltip'
-import { Theme } from '@/types/app'
-
-type IconWithTooltipProps = {
-  className?: string
-  popupContent?: string
-  theme: Theme
-  BadgeIconLight: React.ElementType
-  BadgeIconDark: React.ElementType
-}
-
-const IconWithTooltip: FC<IconWithTooltipProps> = ({
-  className,
-  theme,
-  popupContent,
-  BadgeIconLight,
-  BadgeIconDark,
-}) => {
-  const isDark = theme === Theme.dark
-  const iconClassName = cn('h-5 w-5', className)
-  const Icon = isDark ? BadgeIconDark : BadgeIconLight
-
-  return (
-    <Tooltip
-      popupClassName='p-1.5 border-[0.5px] border-[0.5px] border-components-panel-border bg-components-tooltip-bg text-text-secondary system-xs-medium'
-      popupContent={popupContent}
-    >
-      <div className='flex shrink-0 items-center justify-center'>
-        <Icon className={iconClassName} />
-      </div>
-    </Tooltip>
-  )
-}
-
-export default React.memo(IconWithTooltip)
diff --git a/app/components/plugins/base/badges/partner.tsx b/app/components/plugins/base/badges/partner.tsx
deleted file mode 100644
index 8e649c5..0000000
--- a/app/components/plugins/base/badges/partner.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import type { FC } from 'react'
-import IconWithTooltip from './icon-with-tooltip'
-import PartnerDark from '@/app/components/base/icons/src/public/plugins/PartnerDark'
-import PartnerLight from '@/app/components/base/icons/src/public/plugins/PartnerLight'
-import useTheme from '@/hooks/use-theme'
-
-type PartnerProps = {
-  className?: string
-  text: string
-}
-
-const Partner: FC<PartnerProps> = ({
-  className,
-  text,
-}) => {
-  const { theme } = useTheme()
-
-  return (
-    <IconWithTooltip
-      className={className}
-      theme={theme}
-      BadgeIconLight={PartnerLight}
-      BadgeIconDark={PartnerDark}
-      popupContent={text}
-    />
-  )
-}
-
-export default Partner
diff --git a/app/components/plugins/base/badges/verified.tsx b/app/components/plugins/base/badges/verified.tsx
deleted file mode 100644
index bea45c0..0000000
--- a/app/components/plugins/base/badges/verified.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import type { FC } from 'react'
-import IconWithTooltip from './icon-with-tooltip'
-import VerifiedDark from '@/app/components/base/icons/src/public/plugins/VerifiedDark'
-import VerifiedLight from '@/app/components/base/icons/src/public/plugins/VerifiedLight'
-import useTheme from '@/hooks/use-theme'
-
-type VerifiedProps = {
-  className?: string
-  text: string
-}
-
-const Verified: FC<VerifiedProps> = ({
-  className,
-  text,
-}) => {
-  const { theme } = useTheme()
-
-  return (
-    <IconWithTooltip
-      className={className}
-      theme={theme}
-      BadgeIconLight={VerifiedLight}
-      BadgeIconDark={VerifiedDark}
-      popupContent={text}
-    />
-  )
-}
-
-export default Verified
diff --git a/app/components/plugins/base/key-value-item.tsx b/app/components/plugins/base/key-value-item.tsx
deleted file mode 100644
index cfc81aa..0000000
--- a/app/components/plugins/base/key-value-item.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useEffect, useState } from 'react'
-import copy from 'copy-to-clipboard'
-import {
-  RiClipboardLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { ClipboardCheck } from '../../base/icons/src/vender/line/files'
-import Tooltip from '../../base/tooltip'
-import cn from '@/utils/classnames'
-import ActionButton from '@/app/components/base/action-button'
-
-type Props = {
-  label: string
-  labelWidthClassName?: string
-  value: string
-  maskedValue?: string
-  valueMaxWidthClassName?: string
-}
-
-const KeyValueItem: FC<Props> = ({
-  label,
-  labelWidthClassName = 'w-10',
-  value,
-  maskedValue,
-  valueMaxWidthClassName = 'max-w-[162px]',
-}) => {
-  const { t } = useTranslation()
-  const [isCopied, setIsCopied] = useState(false)
-  const handleCopy = useCallback(() => {
-    copy(value)
-    setIsCopied(true)
-  }, [value])
-
-  useEffect(() => {
-    if (isCopied) {
-      const timer = setTimeout(() => {
-        setIsCopied(false)
-      }, 2000)
-      return () => {
-        clearTimeout(timer)
-      }
-    }
-  }, [isCopied])
-
-  const CopyIcon = isCopied ? ClipboardCheck : RiClipboardLine
-
-  return (
-    <div className='flex items-center gap-1'>
-      <span className={cn('system-xs-medium flex flex-col items-start justify-center text-text-tertiary', labelWidthClassName)}>{label}</span>
-      <div className='flex items-center justify-center gap-0.5'>
-        <span className={cn(valueMaxWidthClassName, ' system-xs-medium truncate text-text-secondary')}>
-          {maskedValue || value}
-        </span>
-        <Tooltip popupContent={t(`common.operation.${isCopied ? 'copied' : 'copy'}`)} position='top'>
-          <ActionButton onClick={handleCopy}>
-            <CopyIcon className='h-3.5 w-3.5 shrink-0 text-text-tertiary' />
-          </ActionButton>
-        </Tooltip>
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(KeyValueItem)
diff --git a/app/components/plugins/card/base/card-icon.tsx b/app/components/plugins/card/base/card-icon.tsx
deleted file mode 100644
index 7f7468e..0000000
--- a/app/components/plugins/card/base/card-icon.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import { RiCheckLine, RiCloseLine } from '@remixicon/react'
-import AppIcon from '@/app/components/base/app-icon'
-import cn from '@/utils/classnames'
-
-const iconSizeMap = {
-  xs: 'w-4 h-4 text-base',
-  tiny: 'w-6 h-6 text-base',
-  small: 'w-8 h-8',
-  medium: 'w-9 h-9',
-  large: 'w-10 h-10',
-}
-const Icon = ({
-  className,
-  src,
-  installed = false,
-  installFailed = false,
-  size = 'large',
-}: {
-  className?: string
-  src: string | {
-    content: string
-    background: string
-  }
-  installed?: boolean
-  installFailed?: boolean
-  size?: 'xs' | 'tiny' | 'small' | 'medium' | 'large'
-}) => {
-  const iconClassName = 'flex justify-center items-center gap-2 absolute bottom-[-4px] right-[-4px] w-[18px] h-[18px] rounded-full border-2 border-components-panel-bg'
-  if (typeof src === 'object') {
-    return (
-      <div className={cn('relative', className)}>
-        <AppIcon
-          size={size}
-          iconType={'emoji'}
-          icon={src.content}
-          background={src.background}
-          className='rounded-md'
-        />
-      </div>
-    )
-  }
-
-  return (
-    <div
-      className={cn('relative shrink-0 rounded-md bg-contain bg-center bg-no-repeat', iconSizeMap[size], className)}
-      style={{
-        backgroundImage: `url(${src})`,
-      }}
-    >
-      {
-        installed
-        && <div className={cn(iconClassName, 'bg-state-success-solid')}>
-          <RiCheckLine className='h-3 w-3 text-text-primary-on-surface' />
-        </div>
-      }
-      {
-        installFailed
-        && <div className={cn(iconClassName, 'bg-state-destructive-solid')}>
-          <RiCloseLine className='h-3 w-3 text-text-primary-on-surface' />
-        </div>
-      }
-    </div>
-  )
-}
-
-export default Icon
diff --git a/app/components/plugins/card/base/corner-mark.tsx b/app/components/plugins/card/base/corner-mark.tsx
deleted file mode 100644
index 43c515d..0000000
--- a/app/components/plugins/card/base/corner-mark.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import { LeftCorner } from '../../../base/icons/src/vender/plugin'
-
-const CornerMark = ({ text }: { text: string }) => {
-  return (
-    <div className='absolute right-0 top-0 flex pl-[13px] '>
-      <LeftCorner className="text-background-section" />
-      <div className="system-2xs-medium-uppercase h-5 rounded-tr-xl bg-background-section pr-2 leading-5 text-text-tertiary">{text}</div>
-    </div>
-  )
-}
-
-export default CornerMark
diff --git a/app/components/plugins/card/base/description.tsx b/app/components/plugins/card/base/description.tsx
deleted file mode 100644
index bffcde3..0000000
--- a/app/components/plugins/card/base/description.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { FC } from 'react'
-import React, { useMemo } from 'react'
-import cn from '@/utils/classnames'
-
-type Props = {
-  className?: string
-  text: string
-  descriptionLineRows: number
-}
-
-const Description: FC<Props> = ({
-  className,
-  text,
-  descriptionLineRows,
-}) => {
-  const lineClassName = useMemo(() => {
-    if (descriptionLineRows === 1)
-      return 'h-4 truncate'
-    else if (descriptionLineRows === 2)
-      return 'h-8 line-clamp-2'
-    else
-      return 'h-12 line-clamp-3'
-  }, [descriptionLineRows])
-  return (
-    <div className={cn('system-xs-regular text-text-tertiary', lineClassName, className)}>
-      {text}
-    </div>
-  )
-}
-
-export default Description
diff --git a/app/components/plugins/card/base/download-count.tsx b/app/components/plugins/card/base/download-count.tsx
deleted file mode 100644
index 7b3ae4d..0000000
--- a/app/components/plugins/card/base/download-count.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { RiInstallLine } from '@remixicon/react'
-import { formatNumber } from '@/utils/format'
-
-type Props = {
-  downloadCount: number
-}
-
-const DownloadCount = ({
-  downloadCount,
-}: Props) => {
-  return (
-    <div className="flex items-center space-x-1 text-text-tertiary">
-      <RiInstallLine className="h-3 w-3 shrink-0" />
-      <div className="system-xs-regular">{formatNumber(downloadCount)}</div>
-    </div>
-  )
-}
-
-export default DownloadCount
diff --git a/app/components/plugins/card/base/org-info.tsx b/app/components/plugins/card/base/org-info.tsx
deleted file mode 100644
index 01561f1..0000000
--- a/app/components/plugins/card/base/org-info.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import cn from '@/utils/classnames'
-type Props = {
-  className?: string
-  orgName?: string
-  packageName: string
-  packageNameClassName?: string
-}
-
-const OrgInfo = ({
-  className,
-  orgName,
-  packageName,
-  packageNameClassName,
-}: Props) => {
-  return (
-    <div className={cn('flex h-4 items-center space-x-0.5', className)}>
-      {orgName && (
-        <>
-          <span className='system-xs-regular shrink-0 text-text-tertiary'>{orgName}</span>
-          <span className='system-xs-regular shrink-0 text-text-quaternary'>/</span>
-        </>
-      )}
-      <span className={cn('system-xs-regular w-0 shrink-0 grow truncate text-text-tertiary', packageNameClassName)}>
-        {packageName}
-      </span>
-    </div>
-  )
-}
-
-export default OrgInfo
diff --git a/app/components/plugins/card/base/placeholder.tsx b/app/components/plugins/card/base/placeholder.tsx
deleted file mode 100644
index 4505be3..0000000
--- a/app/components/plugins/card/base/placeholder.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import { Group } from '../../../base/icons/src/vender/other'
-import Title from './title'
-import { SkeletonContainer, SkeletonPoint, SkeletonRectangle, SkeletonRow } from '@/app/components/base/skeleton'
-import cn from '@/utils/classnames'
-
-type Props = {
-  wrapClassName: string
-  loadingFileName?: string
-}
-
-export const LoadingPlaceholder = ({ className }: { className?: string }) => (
-  <div className={cn('h-2 rounded-sm bg-text-quaternary opacity-20', className)} />
-)
-
-const Placeholder = ({
-  wrapClassName,
-  loadingFileName,
-}: Props) => {
-  return (
-    <div className={wrapClassName}>
-      <SkeletonRow>
-        <div
-          className='flex h-10 w-10 items-center justify-center gap-2 rounded-[10px] border-[0.5px]
-              border-components-panel-border bg-background-default p-1 backdrop-blur-sm'>
-          <div className='flex h-5 w-5 items-center justify-center'>
-            <Group className='text-text-tertiary' />
-          </div>
-        </div>
-        <div className="grow">
-          <SkeletonContainer>
-            <div className="flex h-5 items-center">
-              {loadingFileName ? (
-                <Title title={loadingFileName} />
-              ) : (
-                <SkeletonRectangle className="w-[260px]" />
-              )}
-            </div>
-            <SkeletonRow className="h-4">
-              <SkeletonRectangle className="w-[41px]" />
-              <SkeletonPoint />
-              <SkeletonRectangle className="w-[180px]" />
-            </SkeletonRow>
-          </SkeletonContainer>
-        </div>
-      </SkeletonRow>
-      <SkeletonRectangle className="mt-3 w-[420px]" />
-    </div>
-  )
-}
-
-export default Placeholder
diff --git a/app/components/plugins/card/base/title.tsx b/app/components/plugins/card/base/title.tsx
deleted file mode 100644
index 41e66e7..0000000
--- a/app/components/plugins/card/base/title.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-const Title = ({
-  title,
-}: {
-  title: string
-}) => {
-  return (
-    <div className='system-md-semibold truncate text-text-secondary'>
-      {title}
-    </div>
-  )
-}
-
-export default Title
diff --git a/app/components/plugins/card/card-more-info.tsx b/app/components/plugins/card/card-more-info.tsx
deleted file mode 100644
index 4853361..0000000
--- a/app/components/plugins/card/card-more-info.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import DownloadCount from './base/download-count'
-
-type Props = {
-  downloadCount?: number
-  tags: string[]
-}
-
-const CardMoreInfo = ({
-  downloadCount,
-  tags,
-}: Props) => {
-  return (
-    <div className="flex h-5 items-center">
-      {downloadCount !== undefined && <DownloadCount downloadCount={downloadCount} />}
-      {downloadCount !== undefined && tags && tags.length > 0 && <div className="system-xs-regular mx-2 text-text-quaternary">路</div>}
-      {tags && tags.length > 0 && (
-        <>
-          <div className="flex h-4 flex-wrap space-x-2 overflow-hidden">
-            {tags.map(tag => (
-              <div
-                key={tag}
-                className="system-xs-regular flex max-w-[120px] space-x-1 overflow-hidden"
-                title={`# ${tag}`}
-              >
-                <span className="text-text-quaternary">#</span>
-                <span className="truncate text-text-tertiary">{tag}</span>
-              </div>
-            ))}
-          </div>
-        </>
-      )}
-    </div>
-  )
-}
-
-export default CardMoreInfo
diff --git a/app/components/plugins/card/index.tsx b/app/components/plugins/card/index.tsx
deleted file mode 100644
index 1cc18ac..0000000
--- a/app/components/plugins/card/index.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-'use client'
-import React from 'react'
-import type { Plugin } from '../types'
-import Icon from '../card/base/card-icon'
-import CornerMark from './base/corner-mark'
-import Title from './base/title'
-import OrgInfo from './base/org-info'
-import Description from './base/description'
-import Placeholder from './base/placeholder'
-import cn from '@/utils/classnames'
-import { useGetLanguage } from '@/context/i18n'
-import { getLanguage } from '@/i18n/language'
-import { useSingleCategories } from '../hooks'
-import { renderI18nObject } from '@/i18n'
-import { useMixedTranslation } from '@/app/components/plugins/marketplace/hooks'
-import Partner from '../base/badges/partner'
-import Verified from '../base/badges/verified'
-
-export type Props = {
-  className?: string
-  payload: Plugin
-  titleLeft?: React.ReactNode
-  installed?: boolean
-  installFailed?: boolean
-  hideCornerMark?: boolean
-  descriptionLineRows?: number
-  footer?: React.ReactNode
-  isLoading?: boolean
-  loadingFileName?: string
-  locale?: string
-}
-
-const Card = ({
-  className,
-  payload,
-  titleLeft,
-  installed,
-  installFailed,
-  hideCornerMark,
-  descriptionLineRows = 2,
-  footer,
-  isLoading = false,
-  loadingFileName,
-  locale: localeFromProps,
-}: Props) => {
-  const defaultLocale = useGetLanguage()
-  const locale = localeFromProps ? getLanguage(localeFromProps) : defaultLocale
-  const { t } = useMixedTranslation(localeFromProps)
-  const { categoriesMap } = useSingleCategories(t)
-  const { category, type, name, org, label, brief, icon, verified, badges = [] } = payload
-  const isBundle = !['plugin', 'model', 'tool', 'extension', 'agent-strategy'].includes(type)
-  const cornerMark = isBundle ? categoriesMap.bundle?.label : categoriesMap[category]?.label
-  const getLocalizedText = (obj: Record<string, string> | undefined) =>
-    obj ? renderI18nObject(obj, locale) : ''
-  const isPartner = badges.includes('partner')
-
-  const wrapClassName = cn('hover-bg-components-panel-on-panel-item-bg relative rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-on-panel-item-bg p-4 pb-3 shadow-xs', className)
-  if (isLoading) {
-    return (
-      <Placeholder
-        wrapClassName={wrapClassName}
-        loadingFileName={loadingFileName!}
-      />
-    )
-  }
-
-  return (
-    <div className={wrapClassName}>
-      {!hideCornerMark && <CornerMark text={cornerMark} />}
-      {/* Header */}
-      <div className="flex">
-        <Icon src={icon} installed={installed} installFailed={installFailed} />
-        <div className="ml-3 w-0 grow">
-          <div className="flex h-5 items-center">
-            <Title title={getLocalizedText(label)} />
-            {isPartner && <Partner className='ml-0.5 h-4 w-4' text={t('plugin.marketplace.partnerTip')} />}
-            {verified && <Verified className='ml-0.5 h-4 w-4' text={t('plugin.marketplace.verifiedTip')} />}
-            {titleLeft} {/* This can be version badge */}
-          </div>
-          <OrgInfo
-            className="mt-0.5"
-            orgName={org}
-            packageName={name}
-          />
-        </div>
-      </div>
-      <Description
-        className="mt-3"
-        text={getLocalizedText(brief)}
-        descriptionLineRows={descriptionLineRows}
-      />
-      {footer && <div>{footer}</div>}
-    </div>
-  )
-}
-
-export default React.memo(Card)
diff --git a/app/components/plugins/constants.ts b/app/components/plugins/constants.ts
deleted file mode 100644
index 02439be..0000000
--- a/app/components/plugins/constants.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-export const tagKeys = [
-  'agent',
-  'search',
-  'image',
-  'videos',
-  'weather',
-  'finance',
-  'design',
-  'travel',
-  'social',
-  'news',
-  'medical',
-  'productivity',
-  'education',
-  'business',
-  'entertainment',
-  'utilities',
-  'other',
-]
-
-export const categoryKeys = [
-  'model',
-  'tool',
-  'agent-strategy',
-  'extension',
-  'bundle',
-]
diff --git a/app/components/plugins/hooks.ts b/app/components/plugins/hooks.ts
deleted file mode 100644
index 0349c46..0000000
--- a/app/components/plugins/hooks.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import type { TFunction } from 'i18next'
-import {
-  categoryKeys,
-  tagKeys,
-} from './constants'
-
-type Tag = {
-  name: string
-  label: string
-}
-
-export const useTags = (translateFromOut?: TFunction) => {
-  const { t: translation } = useTranslation()
-  const t = translateFromOut || translation
-
-  const tags = tagKeys.map((tag) => {
-    return {
-      name: tag,
-      label: t(`pluginTags.tags.${tag}`),
-    }
-  })
-
-  const tagsMap = tags.reduce((acc, tag) => {
-    acc[tag.name] = tag
-    return acc
-  }, {} as Record<string, Tag>)
-
-  return {
-    tags,
-    tagsMap,
-  }
-}
-
-type Category = {
-  name: string
-  label: string
-}
-
-export const useCategories = (translateFromOut?: TFunction) => {
-  const { t: translation } = useTranslation()
-  const t = translateFromOut || translation
-
-  const categories = categoryKeys.map((category) => {
-    if (category === 'agent-strategy') {
-      return {
-        name: 'agent-strategy',
-        label: t('plugin.category.agents'),
-      }
-    }
-    return {
-      name: category,
-      label: t(`plugin.category.${category}s`),
-    }
-  })
-
-  const categoriesMap = categories.reduce((acc, category) => {
-    acc[category.name] = category
-    return acc
-  }, {} as Record<string, Category>)
-
-  return {
-    categories,
-    categoriesMap,
-  }
-}
-
-export const useSingleCategories = (translateFromOut?: TFunction) => {
-  const { t: translation } = useTranslation()
-  const t = translateFromOut || translation
-
-  const categories = categoryKeys.map((category) => {
-    if (category === 'agent-strategy') {
-      return {
-        name: 'agent-strategy',
-        label: t('plugin.categorySingle.agent'),
-      }
-    }
-    return {
-      name: category,
-      label: t(`plugin.categorySingle.${category}`),
-    }
-  })
-
-  const categoriesMap = categories.reduce((acc, category) => {
-    acc[category.name] = category
-    return acc
-  }, {} as Record<string, Category>)
-
-  return {
-    categories,
-    categoriesMap,
-  }
-}
-
-export const PLUGIN_PAGE_TABS_MAP = {
-  plugins: 'plugins',
-  marketplace: 'discover',
-}
-
-export const usePluginPageTabs = () => {
-  const { t } = useTranslation()
-  const tabs = [
-    { value: PLUGIN_PAGE_TABS_MAP.plugins, text: t('common.menus.plugins') },
-    { value: PLUGIN_PAGE_TABS_MAP.marketplace, text: t('common.menus.exploreMarketplace') },
-  ]
-  return tabs
-}
diff --git a/app/components/plugins/install-plugin/base/check-task-status.ts b/app/components/plugins/install-plugin/base/check-task-status.ts
deleted file mode 100644
index 320f50d..0000000
--- a/app/components/plugins/install-plugin/base/check-task-status.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { checkTaskStatus as fetchCheckTaskStatus } from '@/service/plugins'
-import type { PluginStatus } from '../../types'
-import { TaskStatus } from '../../types'
-import { sleep } from '@/utils'
-
-const INTERVAL = 10 * 1000 // 10 seconds
-
-type Params = {
-  taskId: string
-  pluginUniqueIdentifier: string
-}
-
-function checkTaskStatus() {
-  let nextStatus = TaskStatus.running
-  let isStop = false
-
-  const doCheckStatus = async ({
-    taskId,
-    pluginUniqueIdentifier,
-  }: Params) => {
-    if (isStop) {
-      return {
-        status: TaskStatus.success,
-      }
-    }
-    const res = await fetchCheckTaskStatus(taskId)
-    const { plugins } = res.task
-    const plugin = plugins.find((p: PluginStatus) => p.plugin_unique_identifier === pluginUniqueIdentifier)
-    if (!plugin) {
-      nextStatus = TaskStatus.failed
-      return {
-        status: TaskStatus.failed,
-        error: 'Plugin package not found',
-      }
-    }
-    nextStatus = plugin.status
-    if (nextStatus === TaskStatus.running) {
-      await sleep(INTERVAL)
-      return await doCheckStatus({
-        taskId,
-        pluginUniqueIdentifier,
-      })
-    }
-    if (nextStatus === TaskStatus.failed) {
-      return {
-        status: TaskStatus.failed,
-        error: plugin.message,
-      }
-    }
-    return ({
-      status: TaskStatus.success,
-    })
-  }
-
-  return {
-    check: doCheckStatus,
-    stop: () => {
-      isStop = true
-    },
-  }
-}
-
-export default checkTaskStatus
diff --git a/app/components/plugins/install-plugin/base/installed.tsx b/app/components/plugins/install-plugin/base/installed.tsx
deleted file mode 100644
index 4da06ef..0000000
--- a/app/components/plugins/install-plugin/base/installed.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import Card from '../../card'
-import Button from '@/app/components/base/button'
-import type { Plugin, PluginDeclaration, PluginManifestInMarket } from '../../types'
-import { pluginManifestInMarketToPluginProps, pluginManifestToCardPluginProps } from '../utils'
-import Badge, { BadgeState } from '@/app/components/base/badge/index'
-
-type Props = {
-  payload?: Plugin | PluginDeclaration | PluginManifestInMarket | null
-  isMarketPayload?: boolean
-  isFailed: boolean
-  errMsg?: string | null
-  onCancel: () => void
-}
-
-const Installed: FC<Props> = ({
-  payload,
-  isMarketPayload,
-  isFailed,
-  errMsg,
-  onCancel,
-}) => {
-  const { t } = useTranslation()
-
-  const handleClose = () => {
-    onCancel()
-  }
-  return (
-    <>
-      <div className='flex flex-col items-start justify-center gap-4 self-stretch px-6 py-3'>
-        <p className='system-md-regular text-text-secondary'>{(isFailed && errMsg) ? errMsg : t(`plugin.installModal.${isFailed ? 'installFailedDesc' : 'installedSuccessfullyDesc'}`)}</p>
-        {payload && (
-          <div className='flex flex-wrap content-start items-start gap-1 self-stretch rounded-2xl bg-background-section-burn p-2'>
-            <Card
-              className='w-full'
-              payload={isMarketPayload ? pluginManifestInMarketToPluginProps(payload as PluginManifestInMarket) : pluginManifestToCardPluginProps(payload as PluginDeclaration)}
-              installed={!isFailed}
-              installFailed={isFailed}
-              titleLeft={<Badge className='mx-1' size="s" state={BadgeState.Default}>{(payload as PluginDeclaration).version || (payload as PluginManifestInMarket).latest_version}</Badge>}
-            />
-          </div>
-        )}
-      </div>
-      {/* Action Buttons */}
-      <div className='flex items-center justify-end gap-2 self-stretch p-6 pt-5'>
-        <Button
-          variant='primary'
-          className='min-w-[72px]'
-          onClick={handleClose}
-        >
-          {t('common.operation.close')}
-        </Button>
-      </div>
-    </>
-  )
-}
-export default React.memo(Installed)
diff --git a/app/components/plugins/install-plugin/base/loading-error.tsx b/app/components/plugins/install-plugin/base/loading-error.tsx
deleted file mode 100644
index a79a381..0000000
--- a/app/components/plugins/install-plugin/base/loading-error.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { Group } from '../../../base/icons/src/vender/other'
-import { LoadingPlaceholder } from '@/app/components/plugins/card/base/placeholder'
-import Checkbox from '@/app/components/base/checkbox'
-import { RiCloseLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-
-const LoadingError: FC = () => {
-  const { t } = useTranslation()
-  return (
-    <div className='flex items-center space-x-2'>
-      <Checkbox
-        className='shrink-0'
-        checked={false}
-        disabled
-      />
-      <div className='hover-bg-components-panel-on-panel-item-bg relative grow rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-on-panel-item-bg p-4 pb-3 shadow-xs'>
-        <div className="flex">
-          <div
-            className='relative flex h-10 w-10 items-center justify-center gap-2 rounded-[10px] border-[0.5px]
-              border-state-destructive-border bg-state-destructive-hover p-1 backdrop-blur-sm'>
-            <div className='flex h-5 w-5 items-center justify-center'>
-              <Group className='text-text-quaternary' />
-            </div>
-            <div className='absolute bottom-[-4px] right-[-4px] rounded-full border-[2px] border-components-panel-bg bg-state-destructive-solid'>
-              <RiCloseLine className='h-3 w-3 text-text-primary-on-surface' />
-            </div>
-          </div>
-          <div className="ml-3 grow">
-            <div className="system-md-semibold flex h-5 items-center text-text-destructive">
-              {t('plugin.installModal.pluginLoadError')}
-            </div>
-            <div className='system-xs-regular mt-0.5 text-text-tertiary'>
-              {t('plugin.installModal.pluginLoadErrorDesc')}
-            </div>
-          </div>
-        </div>
-        <LoadingPlaceholder className="mt-3 w-[420px]" />
-      </div>
-    </div>
-  )
-}
-export default React.memo(LoadingError)
diff --git a/app/components/plugins/install-plugin/base/loading.tsx b/app/components/plugins/install-plugin/base/loading.tsx
deleted file mode 100644
index 61a91cb..0000000
--- a/app/components/plugins/install-plugin/base/loading.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-'use client'
-import React from 'react'
-import Placeholder from '../../card/base/placeholder'
-import Checkbox from '@/app/components/base/checkbox'
-
-const Loading = () => {
-  return (
-    <div className='flex items-center space-x-2'>
-      <Checkbox
-        className='shrink-0'
-        checked={false}
-        disabled
-      />
-      <div className='hover-bg-components-panel-on-panel-item-bg relative grow rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-on-panel-item-bg p-4 pb-3 shadow-xs'>
-        <Placeholder
-          wrapClassName='w-full'
-        />
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(Loading)
diff --git a/app/components/plugins/install-plugin/base/use-get-icon.ts b/app/components/plugins/install-plugin/base/use-get-icon.ts
deleted file mode 100644
index bb46f27..0000000
--- a/app/components/plugins/install-plugin/base/use-get-icon.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { useCallback } from 'react'
-import { apiPrefix } from '@/config'
-import { useSelector } from '@/context/app-context'
-
-const useGetIcon = () => {
-  const currentWorkspace = useSelector(s => s.currentWorkspace)
-  const getIconUrl = useCallback((fileName: string) => {
-    return `${apiPrefix}/workspaces/current/plugin/icon?tenant_id=${currentWorkspace.id}&filename=${fileName}`
-  }, [currentWorkspace.id])
-
-  return {
-    getIconUrl,
-  }
-}
-
-export default useGetIcon
diff --git a/app/components/plugins/install-plugin/base/version.tsx b/app/components/plugins/install-plugin/base/version.tsx
deleted file mode 100644
index 67bbc8e..0000000
--- a/app/components/plugins/install-plugin/base/version.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import Badge, { BadgeState } from '@/app/components/base/badge/index'
-import type { VersionProps } from '../../types'
-
-const Version: FC<VersionProps> = ({
-  hasInstalled,
-  installedVersion,
-  toInstallVersion,
-}) => {
-  return (
-    <>
-      {
-        !hasInstalled
-          ? (
-            <Badge className='mx-1' size="s" state={BadgeState.Default}>{toInstallVersion}</Badge>
-          )
-          : (
-            <>
-              <Badge className='mx-1' size="s" state={BadgeState.Warning}>
-                {`${installedVersion} -> ${toInstallVersion}`}
-              </Badge>
-              {/* <div className='flex px-0.5 justify-center items-center gap-0.5'>
-              <div className='text-text-warning system-xs-medium'>Used in 3 apps</div>
-              <RiInformation2Line className='w-4 h-4 text-text-tertiary' />
-            </div> */}
-            </>
-          )
-      }
-    </>
-  )
-}
-export default React.memo(Version)
diff --git a/app/components/plugins/install-plugin/hooks.ts b/app/components/plugins/install-plugin/hooks.ts
deleted file mode 100644
index 5da4c75..0000000
--- a/app/components/plugins/install-plugin/hooks.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-import Toast, { type IToastProps } from '@/app/components/base/toast'
-import { uploadGitHub } from '@/service/plugins'
-import { compareVersion, getLatestVersion } from '@/utils/semver'
-import type { GitHubRepoReleaseResponse } from '../types'
-import { GITHUB_ACCESS_TOKEN } from '@/config'
-
-const formatReleases = (releases: any) => {
-  return releases.map((release: any) => ({
-    tag_name: release.tag_name,
-    assets: release.assets.map((asset: any) => ({
-      browser_download_url: asset.browser_download_url,
-      name: asset.name,
-    })),
-  }))
-}
-
-export const useGitHubReleases = () => {
-  const fetchReleases = async (owner: string, repo: string) => {
-    try {
-      if (!GITHUB_ACCESS_TOKEN) {
-        // Fetch releases without authentication from client
-        const res = await fetch(`https://api.github.com/repos/${owner}/${repo}/releases`)
-        if (!res.ok) throw new Error('Failed to fetch repository releases')
-        const data = await res.json()
-        return formatReleases(data)
-      }
-      else {
-        // Fetch releases with authentication from server
-        const res = await fetch(`/repos/${owner}/${repo}/releases`)
-        const bodyJson = await res.json()
-        if (bodyJson.status !== 200) throw new Error(bodyJson.data.message)
-        return formatReleases(bodyJson.data)
-      }
-    }
-    catch (error) {
-      if (error instanceof Error) {
-        Toast.notify({
-          type: 'error',
-          message: error.message,
-        })
-      }
-      else {
-        Toast.notify({
-          type: 'error',
-          message: 'Failed to fetch repository releases',
-        })
-      }
-      return []
-    }
-  }
-
-  const checkForUpdates = (fetchedReleases: GitHubRepoReleaseResponse[], currentVersion: string) => {
-    let needUpdate = false
-    const toastProps: IToastProps = {
-      type: 'info',
-      message: 'No new version available',
-    }
-    if (fetchedReleases.length === 0) {
-      toastProps.type = 'error'
-      toastProps.message = 'Input releases is empty'
-      return { needUpdate, toastProps }
-    }
-    const versions = fetchedReleases.map(release => release.tag_name)
-    const latestVersion = getLatestVersion(versions)
-    try {
-      needUpdate = compareVersion(latestVersion, currentVersion) === 1
-      if (needUpdate)
-        toastProps.message = `New version available: ${latestVersion}`
-    }
-    catch {
-      needUpdate = false
-      toastProps.type = 'error'
-      toastProps.message = 'Fail to compare versions, please check the version format'
-    }
-    return { needUpdate, toastProps }
-  }
-
-  return { fetchReleases, checkForUpdates }
-}
-
-export const useGitHubUpload = () => {
-  const handleUpload = async (
-    repoUrl: string,
-    selectedVersion: string,
-    selectedPackage: string,
-    onSuccess?: (GitHubPackage: { manifest: any; unique_identifier: string }) => void,
-  ) => {
-    try {
-      const response = await uploadGitHub(repoUrl, selectedVersion, selectedPackage)
-      const GitHubPackage = {
-        manifest: response.manifest,
-        unique_identifier: response.unique_identifier,
-      }
-      if (onSuccess) onSuccess(GitHubPackage)
-      return GitHubPackage
-    }
-    catch (error) {
-      Toast.notify({
-        type: 'error',
-        message: 'Error uploading package',
-      })
-      throw error
-    }
-  }
-
-  return { handleUpload }
-}
diff --git a/app/components/plugins/install-plugin/hooks/use-check-installed.tsx b/app/components/plugins/install-plugin/hooks/use-check-installed.tsx
deleted file mode 100644
index e9d83c8..0000000
--- a/app/components/plugins/install-plugin/hooks/use-check-installed.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useCheckInstalled as useDoCheckInstalled } from '@/service/use-plugins'
-
-import { useMemo } from 'react'
-import type { VersionInfo } from '../../types'
-type Props = {
-  pluginIds: string[],
-  enabled: boolean
-}
-const useCheckInstalled = (props: Props) => {
-  const { data, isLoading, error } = useDoCheckInstalled(props)
-
-  const installedInfo = useMemo(() => {
-    if (!data)
-      return undefined
-
-    const res: Record<string, VersionInfo> = {}
-    data?.plugins.forEach((plugin) => {
-      res[plugin.plugin_id] = {
-        installedId: plugin.id,
-        installedVersion: plugin.declaration.version,
-        uniqueIdentifier: plugin.plugin_unique_identifier,
-      }
-    })
-    return res
-  }, [data])
-  return {
-    installedInfo,
-    isLoading,
-    error,
-  }
-}
-
-export default useCheckInstalled
diff --git a/app/components/plugins/install-plugin/hooks/use-fold-anim-into.ts b/app/components/plugins/install-plugin/hooks/use-fold-anim-into.ts
deleted file mode 100644
index 4b8d5e8..0000000
--- a/app/components/plugins/install-plugin/hooks/use-fold-anim-into.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { sleep } from '@/utils'
-
-const animTime = 750
-const modalClassName = 'install-modal'
-const COUNT_DOWN_TIME = 15000 // 15s
-
-function getElemCenter(elem: HTMLElement) {
-  const rect = elem.getBoundingClientRect()
-  return {
-    x: rect.left + rect.width / 2 + window.scrollX,
-    y: rect.top + rect.height / 2 + window.scrollY,
-  }
-}
-
-const useFoldAnimInto = (onClose: () => void) => {
-  let countDownRunId: number
-  const clearCountDown = () => {
-    clearTimeout(countDownRunId)
-  }
-  // modalElem fold into plugin install task btn
-  const foldIntoAnim = async () => {
-    clearCountDown()
-    const modalElem = document.querySelector(`.${modalClassName}`) as HTMLElement
-    const pluginTaskTriggerElem = document.getElementById('plugin-task-trigger') || document.querySelector('.plugins-nav-button')
-
-    if (!modalElem || !pluginTaskTriggerElem) {
-      onClose()
-      return
-    }
-
-    const modelCenter = getElemCenter(modalElem)
-    const modalElemRect = modalElem.getBoundingClientRect()
-    const pluginTaskTriggerCenter = getElemCenter(pluginTaskTriggerElem)
-    const xDiff = pluginTaskTriggerCenter.x - modelCenter.x
-    const yDiff = pluginTaskTriggerCenter.y - modelCenter.y
-    const scale = 1 / Math.max(modalElemRect.width, modalElemRect.height)
-    modalElem.style.transition = `all cubic-bezier(0.4, 0, 0.2, 1) ${animTime}ms`
-    modalElem.style.transform = `translate(${xDiff}px, ${yDiff}px) scale(${scale})`
-    await sleep(animTime)
-    onClose()
-  }
-
-  const countDownFoldIntoAnim = async () => {
-    countDownRunId = window.setTimeout(() => {
-      foldIntoAnim()
-    }, COUNT_DOWN_TIME)
-  }
-
-  return {
-    modalClassName,
-    foldIntoAnim,
-    clearCountDown,
-    countDownFoldIntoAnim,
-  }
-}
-
-export default useFoldAnimInto
diff --git a/app/components/plugins/install-plugin/hooks/use-hide-logic.ts b/app/components/plugins/install-plugin/hooks/use-hide-logic.ts
deleted file mode 100644
index e5d2d18..0000000
--- a/app/components/plugins/install-plugin/hooks/use-hide-logic.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { useCallback, useState } from 'react'
-import useFoldAnimInto from './use-fold-anim-into'
-
-const useHideLogic = (onClose: () => void) => {
-  const {
-    modalClassName,
-    foldIntoAnim: doFoldAnimInto,
-    clearCountDown,
-    countDownFoldIntoAnim,
-  } = useFoldAnimInto(onClose)
-
-  const [isInstalling, doSetIsInstalling] = useState(false)
-  const setIsInstalling = useCallback((isInstalling: boolean) => {
-    if (!isInstalling)
-      clearCountDown()
-    doSetIsInstalling(isInstalling)
-  }, [clearCountDown])
-
-  const foldAnimInto = useCallback(() => {
-    if (isInstalling) {
-      doFoldAnimInto()
-      return
-    }
-    onClose()
-  }, [doFoldAnimInto, isInstalling, onClose])
-
-  const handleStartToInstall = useCallback(() => {
-    setIsInstalling(true)
-    countDownFoldIntoAnim()
-  }, [countDownFoldIntoAnim, setIsInstalling])
-
-  return {
-    modalClassName,
-    foldAnimInto,
-    setIsInstalling,
-    handleStartToInstall,
-  }
-}
-
-export default useHideLogic
diff --git a/app/components/plugins/install-plugin/hooks/use-refresh-plugin-list.tsx b/app/components/plugins/install-plugin/hooks/use-refresh-plugin-list.tsx
deleted file mode 100644
index ac26971..0000000
--- a/app/components/plugins/install-plugin/hooks/use-refresh-plugin-list.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { useModelList } from '@/app/components/header/account-setting/model-provider-page/hooks'
-import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import { useProviderContext } from '@/context/provider-context'
-import { useInvalidateInstalledPluginList } from '@/service/use-plugins'
-import { useInvalidateAllBuiltInTools, useInvalidateAllToolProviders } from '@/service/use-tools'
-import { useInvalidateStrategyProviders } from '@/service/use-strategy'
-import type { Plugin, PluginDeclaration, PluginManifestInMarket } from '../../types'
-import { PluginType } from '../../types'
-
-const useRefreshPluginList = () => {
-  const invalidateInstalledPluginList = useInvalidateInstalledPluginList()
-  const { mutate: refetchLLMModelList } = useModelList(ModelTypeEnum.textGeneration)
-  const { mutate: refetchEmbeddingModelList } = useModelList(ModelTypeEnum.textEmbedding)
-  const { mutate: refetchRerankModelList } = useModelList(ModelTypeEnum.rerank)
-  const { refreshModelProviders } = useProviderContext()
-
-  const invalidateAllToolProviders = useInvalidateAllToolProviders()
-  const invalidateAllBuiltInTools = useInvalidateAllBuiltInTools()
-
-  const invalidateStrategyProviders = useInvalidateStrategyProviders()
-  return {
-    refreshPluginList: (manifest?: PluginManifestInMarket | Plugin | PluginDeclaration | null, refreshAllType?: boolean) => {
-      // installed list
-      invalidateInstalledPluginList()
-
-      // tool page, tool select
-      if ((manifest && PluginType.tool.includes(manifest.category)) || refreshAllType) {
-        invalidateAllToolProviders()
-        invalidateAllBuiltInTools()
-        // TODO: update suggested tools. It's a function in hook useMarketplacePlugins,handleUpdatePlugins
-      }
-
-      // model select
-      if ((manifest && PluginType.model.includes(manifest.category)) || refreshAllType) {
-        refreshModelProviders()
-        refetchLLMModelList()
-        refetchEmbeddingModelList()
-        refetchRerankModelList()
-      }
-
-      // agent select
-      if ((manifest && PluginType.agent.includes(manifest.category)) || refreshAllType)
-        invalidateStrategyProviders()
-    },
-  }
-}
-
-export default useRefreshPluginList
diff --git a/app/components/plugins/install-plugin/install-bundle/index.tsx b/app/components/plugins/install-plugin/install-bundle/index.tsx
deleted file mode 100644
index c6b4cdf..0000000
--- a/app/components/plugins/install-plugin/install-bundle/index.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import Modal from '@/app/components/base/modal'
-import React, { useCallback, useState } from 'react'
-import { InstallStep } from '../../types'
-import type { Dependency } from '../../types'
-import ReadyToInstall from './ready-to-install'
-import { useTranslation } from 'react-i18next'
-import useHideLogic from '../hooks/use-hide-logic'
-import cn from '@/utils/classnames'
-
-const i18nPrefix = 'plugin.installModal'
-
-export enum InstallType {
-  fromLocal = 'fromLocal',
-  fromMarketplace = 'fromMarketplace',
-  fromDSL = 'fromDSL',
-}
-
-type Props = {
-  installType?: InstallType
-  fromDSLPayload: Dependency[]
-  // plugins?: PluginDeclaration[]
-  onClose: () => void
-}
-
-const InstallBundle: FC<Props> = ({
-  installType = InstallType.fromMarketplace,
-  fromDSLPayload,
-  onClose,
-}) => {
-  const { t } = useTranslation()
-  const [step, setStep] = useState<InstallStep>(installType === InstallType.fromMarketplace ? InstallStep.readyToInstall : InstallStep.uploading)
-
-  const {
-    modalClassName,
-    foldAnimInto,
-    setIsInstalling,
-    handleStartToInstall,
-  } = useHideLogic(onClose)
-
-  const getTitle = useCallback(() => {
-    if (step === InstallStep.uploadFailed)
-      return t(`${i18nPrefix}.uploadFailed`)
-    if (step === InstallStep.installed)
-      return t(`${i18nPrefix}.installComplete`)
-
-    return t(`${i18nPrefix}.installPlugin`)
-  }, [step, t])
-
-  return (
-    <Modal
-      isShow={true}
-      onClose={foldAnimInto}
-      className={cn(modalClassName, 'shadows-shadow-xl flex min-w-[560px] flex-col items-start rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg p-0')}
-      closable
-    >
-      <div className='flex items-start gap-2 self-stretch pb-3 pl-6 pr-14 pt-6'>
-        <div className='title-2xl-semi-bold self-stretch text-text-primary'>
-          {getTitle()}
-        </div>
-      </div>
-      <ReadyToInstall
-        step={step}
-        onStepChange={setStep}
-        onStartToInstall={handleStartToInstall}
-        setIsInstalling={setIsInstalling}
-        allPlugins={fromDSLPayload}
-        onClose={onClose}
-      />
-    </Modal>
-  )
-}
-
-export default React.memo(InstallBundle)
diff --git a/app/components/plugins/install-plugin/install-bundle/item/github-item.tsx b/app/components/plugins/install-plugin/install-bundle/item/github-item.tsx
deleted file mode 100644
index 96abaa2..0000000
--- a/app/components/plugins/install-plugin/install-bundle/item/github-item.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useEffect } from 'react'
-import type { GitHubItemAndMarketPlaceDependency, Plugin } from '../../../types'
-import { pluginManifestToCardPluginProps } from '../../utils'
-import { useUploadGitHub } from '@/service/use-plugins'
-import Loading from '../../base/loading'
-import LoadedItem from './loaded-item'
-import type { VersionProps } from '@/app/components/plugins/types'
-
-type Props = {
-  checked: boolean
-  onCheckedChange: (plugin: Plugin) => void
-  dependency: GitHubItemAndMarketPlaceDependency
-  versionInfo: VersionProps
-  onFetchedPayload: (payload: Plugin) => void
-  onFetchError: () => void
-}
-
-const Item: FC<Props> = ({
-  checked,
-  onCheckedChange,
-  dependency,
-  versionInfo,
-  onFetchedPayload,
-  onFetchError,
-}) => {
-  const info = dependency.value
-  const { data, error } = useUploadGitHub({
-    repo: info.repo!,
-    version: info.release! || info.version!,
-    package: info.packages! || info.package!,
-  })
-  const [payload, setPayload] = React.useState<Plugin | null>(null)
-  useEffect(() => {
-    if (data) {
-      const payload = {
-        ...pluginManifestToCardPluginProps(data.manifest),
-        plugin_id: data.unique_identifier,
-      }
-      onFetchedPayload(payload)
-      setPayload(payload)
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [data])
-  useEffect(() => {
-    if (error)
-      onFetchError()
-
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [error])
-  if (!payload) return <Loading />
-  return (
-    <LoadedItem
-      payload={payload}
-      versionInfo={versionInfo}
-      checked={checked}
-      onCheckedChange={onCheckedChange}
-    />
-  )
-}
-export default React.memo(Item)
diff --git a/app/components/plugins/install-plugin/install-bundle/item/loaded-item.tsx b/app/components/plugins/install-plugin/install-bundle/item/loaded-item.tsx
deleted file mode 100644
index 5eb4c94..0000000
--- a/app/components/plugins/install-plugin/install-bundle/item/loaded-item.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { Plugin } from '../../../types'
-import Card from '../../../card'
-import Checkbox from '@/app/components/base/checkbox'
-import useGetIcon from '../../base/use-get-icon'
-import { MARKETPLACE_API_PREFIX } from '@/config'
-import Version from '../../base/version'
-import type { VersionProps } from '../../../types'
-
-type Props = {
-  checked: boolean
-  onCheckedChange: (plugin: Plugin) => void
-  payload: Plugin
-  isFromMarketPlace?: boolean
-  versionInfo: VersionProps
-}
-
-const LoadedItem: FC<Props> = ({
-  checked,
-  onCheckedChange,
-  payload,
-  isFromMarketPlace,
-  versionInfo: particleVersionInfo,
-}) => {
-  const { getIconUrl } = useGetIcon()
-  const versionInfo = {
-    ...particleVersionInfo,
-    toInstallVersion: payload.version,
-  }
-  return (
-    <div className='flex items-center space-x-2'>
-      <Checkbox
-        className='shrink-0'
-        checked={checked}
-        onCheck={() => onCheckedChange(payload)}
-      />
-      <Card
-        className='grow'
-        payload={{
-          ...payload,
-          icon: isFromMarketPlace ? `${MARKETPLACE_API_PREFIX}/plugins/${payload.org}/${payload.name}/icon` : getIconUrl(payload.icon),
-        }}
-        titleLeft={payload.version ? <Version {...versionInfo} /> : null}
-      />
-    </div>
-  )
-}
-
-export default React.memo(LoadedItem)
diff --git a/app/components/plugins/install-plugin/install-bundle/item/marketplace-item.tsx b/app/components/plugins/install-plugin/install-bundle/item/marketplace-item.tsx
deleted file mode 100644
index 3389bdb..0000000
--- a/app/components/plugins/install-plugin/install-bundle/item/marketplace-item.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { Plugin } from '../../../types'
-import Loading from '../../base/loading'
-import LoadedItem from './loaded-item'
-import type { VersionProps } from '@/app/components/plugins/types'
-
-type Props = {
-  checked: boolean
-  onCheckedChange: (plugin: Plugin) => void
-  payload?: Plugin
-  version: string
-  versionInfo: VersionProps
-}
-
-const MarketPlaceItem: FC<Props> = ({
-  checked,
-  onCheckedChange,
-  payload,
-  version,
-  versionInfo,
-}) => {
-  if (!payload) return <Loading />
-  return (
-    <LoadedItem
-      checked={checked}
-      onCheckedChange={onCheckedChange}
-      payload={{ ...payload, version }}
-      isFromMarketPlace
-      versionInfo={versionInfo}
-    />
-  )
-}
-
-export default React.memo(MarketPlaceItem)
diff --git a/app/components/plugins/install-plugin/install-bundle/item/package-item.tsx b/app/components/plugins/install-plugin/install-bundle/item/package-item.tsx
deleted file mode 100644
index 101c8fa..0000000
--- a/app/components/plugins/install-plugin/install-bundle/item/package-item.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { Plugin } from '../../../types'
-import type { PackageDependency } from '../../../types'
-import { pluginManifestToCardPluginProps } from '../../utils'
-import LoadedItem from './loaded-item'
-import LoadingError from '../../base/loading-error'
-import type { VersionProps } from '@/app/components/plugins/types'
-
-type Props = {
-  checked: boolean
-  onCheckedChange: (plugin: Plugin) => void
-  payload: PackageDependency
-  isFromMarketPlace?: boolean
-  versionInfo: VersionProps
-}
-
-const PackageItem: FC<Props> = ({
-  payload,
-  checked,
-  onCheckedChange,
-  isFromMarketPlace,
-  versionInfo,
-}) => {
-  if (!payload.value?.manifest)
-    return <LoadingError />
-
-  const plugin = pluginManifestToCardPluginProps(payload.value.manifest)
-  return (
-    <LoadedItem
-      payload={plugin}
-      checked={checked}
-      onCheckedChange={onCheckedChange}
-      isFromMarketPlace={isFromMarketPlace}
-      versionInfo={versionInfo}
-    />
-  )
-}
-
-export default React.memo(PackageItem)
diff --git a/app/components/plugins/install-plugin/install-bundle/ready-to-install.tsx b/app/components/plugins/install-plugin/install-bundle/ready-to-install.tsx
deleted file mode 100644
index 63c0b5b..0000000
--- a/app/components/plugins/install-plugin/install-bundle/ready-to-install.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import { InstallStep } from '../../types'
-import Install from './steps/install'
-import Installed from './steps/installed'
-import type { Dependency, InstallStatusResponse, Plugin } from '../../types'
-
-type Props = {
-  step: InstallStep
-  onStepChange: (step: InstallStep) => void,
-  onStartToInstall: () => void
-  setIsInstalling: (isInstalling: boolean) => void
-  allPlugins: Dependency[]
-  onClose: () => void
-  isFromMarketPlace?: boolean
-}
-
-const ReadyToInstall: FC<Props> = ({
-  step,
-  onStepChange,
-  onStartToInstall,
-  setIsInstalling,
-  allPlugins,
-  onClose,
-  isFromMarketPlace,
-}) => {
-  const [installedPlugins, setInstalledPlugins] = useState<Plugin[]>([])
-  const [installStatus, setInstallStatus] = useState<InstallStatusResponse[]>([])
-  const handleInstalled = useCallback((plugins: Plugin[], installStatus: InstallStatusResponse[]) => {
-    setInstallStatus(installStatus)
-    setInstalledPlugins(plugins)
-    onStepChange(InstallStep.installed)
-    setIsInstalling(false)
-  }, [onStepChange, setIsInstalling])
-  return (
-    <>
-      {step === InstallStep.readyToInstall && (
-        <Install
-          allPlugins={allPlugins}
-          onCancel={onClose}
-          onStartToInstall={onStartToInstall}
-          onInstalled={handleInstalled}
-          isFromMarketPlace={isFromMarketPlace}
-        />
-      )}
-      {step === InstallStep.installed && (
-        <Installed
-          list={installedPlugins}
-          installStatus={installStatus}
-          onCancel={onClose}
-        />
-      )}
-    </>
-  )
-}
-export default React.memo(ReadyToInstall)
diff --git a/app/components/plugins/install-plugin/install-bundle/steps/install-multi.tsx b/app/components/plugins/install-plugin/install-bundle/steps/install-multi.tsx
deleted file mode 100644
index 40be3e6..0000000
--- a/app/components/plugins/install-plugin/install-bundle/steps/install-multi.tsx
+++ /dev/null
@@ -1,221 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useEffect, useMemo, useState } from 'react'
-import type { Dependency, GitHubItemAndMarketPlaceDependency, PackageDependency, Plugin, VersionInfo } from '../../../types'
-import MarketplaceItem from '../item/marketplace-item'
-import GithubItem from '../item/github-item'
-import { useFetchPluginsInMarketPlaceByIds, useFetchPluginsInMarketPlaceByInfo } from '@/service/use-plugins'
-import useCheckInstalled from '@/app/components/plugins/install-plugin/hooks/use-check-installed'
-import produce from 'immer'
-import PackageItem from '../item/package-item'
-import LoadingError from '../../base/loading-error'
-
-type Props = {
-  allPlugins: Dependency[]
-  selectedPlugins: Plugin[]
-  onSelect: (plugin: Plugin, selectedIndex: number) => void
-  onLoadedAllPlugin: (installedInfo: Record<string, VersionInfo>) => void
-  isFromMarketPlace?: boolean
-}
-
-const InstallByDSLList: FC<Props> = ({
-  allPlugins,
-  selectedPlugins,
-  onSelect,
-  onLoadedAllPlugin,
-  isFromMarketPlace,
-}) => {
-  // DSL has id, to get plugin info to show more info
-  const { isLoading: isFetchingMarketplaceDataById, data: infoGetById, error: infoByIdError } = useFetchPluginsInMarketPlaceByIds(allPlugins.filter(d => d.type === 'marketplace').map(d => (d as GitHubItemAndMarketPlaceDependency).value.marketplace_plugin_unique_identifier!))
-  // has meta(org,name,version), to get id
-  const { isLoading: isFetchingDataByMeta, data: infoByMeta, error: infoByMetaError } = useFetchPluginsInMarketPlaceByInfo(allPlugins.filter(d => d.type === 'marketplace').map(d => (d as GitHubItemAndMarketPlaceDependency).value!))
-
-  const [plugins, doSetPlugins] = useState<(Plugin | undefined)[]>((() => {
-    const hasLocalPackage = allPlugins.some(d => d.type === 'package')
-    if (!hasLocalPackage)
-      return []
-
-    const _plugins = allPlugins.map((d) => {
-      if (d.type === 'package') {
-        return {
-          ...(d as any).value.manifest,
-          plugin_id: (d as any).value.unique_identifier,
-        }
-      }
-
-      return undefined
-    })
-    return _plugins
-  })())
-
-  const pluginsRef = React.useRef<(Plugin | undefined)[]>(plugins)
-
-  const setPlugins = useCallback((p: (Plugin | undefined)[]) => {
-    doSetPlugins(p)
-    pluginsRef.current = p
-  }, [])
-
-  const [errorIndexes, setErrorIndexes] = useState<number[]>([])
-
-  const handleGitHubPluginFetched = useCallback((index: number) => {
-    return (p: Plugin) => {
-      const nextPlugins = produce(pluginsRef.current, (draft) => {
-        draft[index] = p
-      })
-      setPlugins(nextPlugins)
-    }
-  }, [setPlugins])
-
-  const handleGitHubPluginFetchError = useCallback((index: number) => {
-    return () => {
-      setErrorIndexes([...errorIndexes, index])
-    }
-  }, [errorIndexes])
-
-  const marketPlaceInDSLIndex = useMemo(() => {
-    const res: number[] = []
-    allPlugins.forEach((d, index) => {
-      if (d.type === 'marketplace')
-        res.push(index)
-    })
-    return res
-  }, [allPlugins])
-
-  useEffect(() => {
-    if (!isFetchingMarketplaceDataById && infoGetById?.data.plugins) {
-      const payloads = infoGetById?.data.plugins
-      const failedIndex: number[] = []
-      const nextPlugins = produce(pluginsRef.current, (draft) => {
-        marketPlaceInDSLIndex.forEach((index, i) => {
-          if (payloads[i]) {
-            draft[index] = {
-              ...payloads[i],
-              version: payloads[i].version || payloads[i].latest_version,
-            }
-          }
-          else { failedIndex.push(index) }
-        })
-      })
-      setPlugins(nextPlugins)
-
-      if (failedIndex.length > 0)
-        setErrorIndexes([...errorIndexes, ...failedIndex])
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [isFetchingMarketplaceDataById])
-
-  useEffect(() => {
-    if (!isFetchingDataByMeta && infoByMeta?.data.list) {
-      const payloads = infoByMeta?.data.list
-      const failedIndex: number[] = []
-      const nextPlugins = produce(pluginsRef.current, (draft) => {
-        marketPlaceInDSLIndex.forEach((index, i) => {
-          if (payloads[i]) {
-            const item = payloads[i]
-            draft[index] = {
-              ...item.plugin,
-              plugin_id: item.version.unique_identifier,
-            }
-          }
-          else {
-            failedIndex.push(index)
-          }
-        })
-      })
-      setPlugins(nextPlugins)
-      if (failedIndex.length > 0)
-        setErrorIndexes([...errorIndexes, ...failedIndex])
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [isFetchingDataByMeta])
-
-  useEffect(() => {
-    // get info all failed
-    if (infoByMetaError || infoByIdError)
-      setErrorIndexes([...errorIndexes, ...marketPlaceInDSLIndex])
-
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [infoByMetaError, infoByIdError])
-
-  const isLoadedAllData = (plugins.filter(p => !!p).length + errorIndexes.length) === allPlugins.length
-
-  const { installedInfo } = useCheckInstalled({
-    pluginIds: plugins?.filter(p => !!p).map((d) => {
-      return `${d?.org || d?.author}/${d?.name}`
-    }) || [],
-    enabled: isLoadedAllData,
-  })
-
-  const getVersionInfo = useCallback((pluginId: string) => {
-    const pluginDetail = installedInfo?.[pluginId]
-    const hasInstalled = !!pluginDetail
-    return {
-      hasInstalled,
-      installedVersion: pluginDetail?.installedVersion,
-      toInstallVersion: '',
-    }
-  }, [installedInfo])
-
-  useEffect(() => {
-    if (isLoadedAllData && installedInfo)
-      onLoadedAllPlugin(installedInfo!)
-
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [isLoadedAllData, installedInfo])
-
-  const handleSelect = useCallback((index: number) => {
-    return () => {
-      onSelect(plugins[index]!, index)
-    }
-  }, [onSelect, plugins])
-  return (
-    <>
-      {allPlugins.map((d, index) => {
-        if (errorIndexes.includes(index)) {
-          return (
-            <LoadingError key={index} />
-          )
-        }
-        const plugin = plugins[index]
-        if (d.type === 'github') {
-          return (<GithubItem
-            key={index}
-            checked={!!selectedPlugins.find(p => p.plugin_id === plugins[index]?.plugin_id)}
-            onCheckedChange={handleSelect(index)}
-            dependency={d as GitHubItemAndMarketPlaceDependency}
-            onFetchedPayload={handleGitHubPluginFetched(index)}
-            onFetchError={handleGitHubPluginFetchError(index)}
-            versionInfo={getVersionInfo(`${plugin?.org || plugin?.author}/${plugin?.name}`)}
-          />)
-        }
-
-        if (d.type === 'marketplace') {
-          return (
-            <MarketplaceItem
-              key={index}
-              checked={!!selectedPlugins.find(p => p.plugin_id === plugins[index]?.plugin_id)}
-              onCheckedChange={handleSelect(index)}
-              payload={plugin}
-              version={(d as GitHubItemAndMarketPlaceDependency).value.version! || plugin?.version || ''}
-              versionInfo={getVersionInfo(`${plugin?.org || plugin?.author}/${plugin?.name}`)}
-            />
-          )
-        }
-
-        // Local package
-        return (
-          <PackageItem
-            key={index}
-            checked={!!selectedPlugins.find(p => p.plugin_id === plugins[index]?.plugin_id)}
-            onCheckedChange={handleSelect(index)}
-            payload={d as PackageDependency}
-            isFromMarketPlace={isFromMarketPlace}
-            versionInfo={getVersionInfo(`${plugin?.org || plugin?.author}/${plugin?.name}`)}
-          />
-        )
-      })
-      }
-    </>
-  )
-}
-export default React.memo(InstallByDSLList)
diff --git a/app/components/plugins/install-plugin/install-bundle/steps/install.tsx b/app/components/plugins/install-plugin/install-bundle/steps/install.tsx
deleted file mode 100644
index ee2699b..0000000
--- a/app/components/plugins/install-plugin/install-bundle/steps/install.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import type { Dependency, InstallStatusResponse, Plugin, VersionInfo } from '../../../types'
-import Button from '@/app/components/base/button'
-import { RiLoader2Line } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import InstallMulti from './install-multi'
-import { useInstallOrUpdate } from '@/service/use-plugins'
-import useRefreshPluginList from '../../hooks/use-refresh-plugin-list'
-import { useCanInstallPluginFromMarketplace } from '@/app/components/plugins/plugin-page/use-permission'
-const i18nPrefix = 'plugin.installModal'
-
-type Props = {
-  allPlugins: Dependency[]
-  onStartToInstall?: () => void
-  onInstalled: (plugins: Plugin[], installStatus: InstallStatusResponse[]) => void
-  onCancel: () => void
-  isFromMarketPlace?: boolean
-  isHideButton?: boolean
-}
-
-const Install: FC<Props> = ({
-  allPlugins,
-  onStartToInstall,
-  onInstalled,
-  onCancel,
-  isFromMarketPlace,
-  isHideButton,
-}) => {
-  const { t } = useTranslation()
-  const [selectedPlugins, setSelectedPlugins] = React.useState<Plugin[]>([])
-  const [selectedIndexes, setSelectedIndexes] = React.useState<number[]>([])
-  const selectedPluginsNum = selectedPlugins.length
-  const { refreshPluginList } = useRefreshPluginList()
-  const handleSelect = (plugin: Plugin, selectedIndex: number) => {
-    const isSelected = !!selectedPlugins.find(p => p.plugin_id === plugin.plugin_id)
-    let nextSelectedPlugins
-    if (isSelected)
-      nextSelectedPlugins = selectedPlugins.filter(p => p.plugin_id !== plugin.plugin_id)
-    else
-      nextSelectedPlugins = [...selectedPlugins, plugin]
-    setSelectedPlugins(nextSelectedPlugins)
-    const nextSelectedIndexes = isSelected ? selectedIndexes.filter(i => i !== selectedIndex) : [...selectedIndexes, selectedIndex]
-    setSelectedIndexes(nextSelectedIndexes)
-  }
-
-  const [canInstall, setCanInstall] = React.useState(false)
-  const [installedInfo, setInstalledInfo] = useState<Record<string, VersionInfo> | undefined>(undefined)
-
-  const handleLoadedAllPlugin = useCallback((installedInfo: Record<string, VersionInfo> | undefined) => {
-    setInstalledInfo(installedInfo)
-    setCanInstall(true)
-  }, [])
-
-  // Install from marketplace and github
-  const { mutate: installOrUpdate, isPending: isInstalling } = useInstallOrUpdate({
-    onSuccess: (res: InstallStatusResponse[]) => {
-      onInstalled(selectedPlugins, res.map((r, i) => {
-        return ({
-          ...r,
-          isFromMarketPlace: allPlugins[selectedIndexes[i]].type === 'marketplace',
-        })
-      }))
-      const hasInstallSuccess = res.some(r => r.success)
-      if (hasInstallSuccess)
-        refreshPluginList(undefined, true)
-    },
-  })
-  const handleInstall = () => {
-    onStartToInstall?.()
-    installOrUpdate({
-      payload: allPlugins.filter((_d, index) => selectedIndexes.includes(index)),
-      plugin: selectedPlugins,
-      installedInfo: installedInfo!,
-    })
-  }
-  const { canInstallPluginFromMarketplace } = useCanInstallPluginFromMarketplace()
-  return (
-    <>
-      <div className='flex flex-col items-start justify-center gap-4 self-stretch px-6 py-3'>
-        <div className='system-md-regular text-text-secondary'>
-          <p>{t(`${i18nPrefix}.${selectedPluginsNum > 1 ? 'readyToInstallPackages' : 'readyToInstallPackage'}`, { num: selectedPluginsNum })}</p>
-        </div>
-        <div className='w-full space-y-1 rounded-2xl bg-background-section-burn p-2'>
-          <InstallMulti
-            allPlugins={allPlugins}
-            selectedPlugins={selectedPlugins}
-            onSelect={handleSelect}
-            onLoadedAllPlugin={handleLoadedAllPlugin}
-            isFromMarketPlace={isFromMarketPlace}
-          />
-        </div>
-      </div>
-      {/* Action Buttons */}
-      {!isHideButton && (
-        <div className='flex items-center justify-end gap-2 self-stretch p-6 pt-5'>
-          {!canInstall && (
-            <Button variant='secondary' className='min-w-[72px]' onClick={onCancel}>
-              {t('common.operation.cancel')}
-            </Button>
-          )}
-          <Button
-            variant='primary'
-            className='flex min-w-[72px] space-x-0.5'
-            disabled={!canInstall || isInstalling || selectedPlugins.length === 0 || !canInstallPluginFromMarketplace}
-            onClick={handleInstall}
-          >
-            {isInstalling && <RiLoader2Line className='h-4 w-4 animate-spin-slow' />}
-            <span>{t(`${i18nPrefix}.${isInstalling ? 'installing' : 'install'}`)}</span>
-          </Button>
-        </div>
-      )}
-
-    </>
-  )
-}
-export default React.memo(Install)
diff --git a/app/components/plugins/install-plugin/install-bundle/steps/installed.tsx b/app/components/plugins/install-plugin/install-bundle/steps/installed.tsx
deleted file mode 100644
index 4e16d20..0000000
--- a/app/components/plugins/install-plugin/install-bundle/steps/installed.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { InstallStatusResponse, Plugin } from '../../../types'
-import Card from '@/app/components/plugins/card'
-import Button from '@/app/components/base/button'
-import { useTranslation } from 'react-i18next'
-import Badge, { BadgeState } from '@/app/components/base/badge/index'
-import useGetIcon from '../../base/use-get-icon'
-import { MARKETPLACE_API_PREFIX } from '@/config'
-
-type Props = {
-  list: Plugin[]
-  installStatus: InstallStatusResponse[]
-  onCancel: () => void
-  isHideButton?: boolean
-}
-
-const Installed: FC<Props> = ({
-  list,
-  installStatus,
-  onCancel,
-  isHideButton,
-}) => {
-  const { t } = useTranslation()
-  const { getIconUrl } = useGetIcon()
-  return (
-    <>
-      <div className='flex flex-col items-start justify-center gap-4 self-stretch px-6 py-3'>
-        {/* <p className='text-text-secondary system-md-regular'>{(isFailed && errMsg) ? errMsg : t(`plugin.installModal.${isFailed ? 'installFailedDesc' : 'installedSuccessfullyDesc'}`)}</p> */}
-        <div className='flex flex-wrap content-start items-start gap-1 space-y-1 self-stretch rounded-2xl bg-background-section-burn p-2'>
-          {list.map((plugin, index) => {
-            return (
-              <Card
-                key={plugin.plugin_id}
-                className='w-full'
-                payload={{
-                  ...plugin,
-                  icon: installStatus[index].isFromMarketPlace ? `${MARKETPLACE_API_PREFIX}/plugins/${plugin.org}/${plugin.name}/icon` : getIconUrl(plugin.icon),
-                }}
-                installed={installStatus[index].success}
-                installFailed={!installStatus[index].success}
-                titleLeft={plugin.version ? <Badge className='mx-1' size="s" state={BadgeState.Default}>{plugin.version}</Badge> : null}
-              />
-            )
-          })}
-        </div>
-      </div>
-      {/* Action Buttons */}
-      {!isHideButton && (
-        <div className='flex items-center justify-end gap-2 self-stretch p-6 pt-5'>
-          <Button
-            variant='primary'
-            className='min-w-[72px]'
-            onClick={onCancel}
-          >
-            {t('common.operation.close')}
-          </Button>
-        </div>
-      )}
-    </>
-  )
-}
-
-export default React.memo(Installed)
diff --git a/app/components/plugins/install-plugin/install-from-github/index.tsx b/app/components/plugins/install-plugin/install-from-github/index.tsx
deleted file mode 100644
index ceb800d..0000000
--- a/app/components/plugins/install-plugin/install-from-github/index.tsx
+++ /dev/null
@@ -1,235 +0,0 @@
-'use client'
-
-import React, { useCallback, useState } from 'react'
-import Modal from '@/app/components/base/modal'
-import type { Item } from '@/app/components/base/select'
-import type { InstallState } from '@/app/components/plugins/types'
-import { useGitHubReleases } from '../hooks'
-import { convertRepoToUrl, parseGitHubUrl } from '../utils'
-import type { PluginDeclaration, UpdateFromGitHubPayload } from '../../types'
-import { InstallStepFromGitHub } from '../../types'
-import Toast from '@/app/components/base/toast'
-import SetURL from './steps/setURL'
-import SelectPackage from './steps/selectPackage'
-import Installed from '../base/installed'
-import Loaded from './steps/loaded'
-import useGetIcon from '@/app/components/plugins/install-plugin/base/use-get-icon'
-import { useTranslation } from 'react-i18next'
-import useRefreshPluginList from '../hooks/use-refresh-plugin-list'
-import cn from '@/utils/classnames'
-import useHideLogic from '../hooks/use-hide-logic'
-
-const i18nPrefix = 'plugin.installFromGitHub'
-
-type InstallFromGitHubProps = {
-  updatePayload?: UpdateFromGitHubPayload
-  onClose: () => void
-  onSuccess: () => void
-}
-
-const InstallFromGitHub: React.FC<InstallFromGitHubProps> = ({ updatePayload, onClose, onSuccess }) => {
-  const { t } = useTranslation()
-  const { getIconUrl } = useGetIcon()
-  const { fetchReleases } = useGitHubReleases()
-  const { refreshPluginList } = useRefreshPluginList()
-
-  const {
-    modalClassName,
-    foldAnimInto,
-    setIsInstalling,
-    handleStartToInstall,
-  } = useHideLogic(onClose)
-
-  const [state, setState] = useState<InstallState>({
-    step: updatePayload ? InstallStepFromGitHub.selectPackage : InstallStepFromGitHub.setUrl,
-    repoUrl: updatePayload?.originalPackageInfo?.repo
-      ? convertRepoToUrl(updatePayload.originalPackageInfo.repo)
-      : '',
-    selectedVersion: '',
-    selectedPackage: '',
-    releases: updatePayload ? updatePayload.originalPackageInfo.releases : [],
-  })
-  const [uniqueIdentifier, setUniqueIdentifier] = useState<string | null>(null)
-  const [manifest, setManifest] = useState<PluginDeclaration | null>(null)
-  const [errorMsg, setErrorMsg] = useState<string | null>(null)
-
-  const versions: Item[] = state.releases.map(release => ({
-    value: release.tag_name,
-    name: release.tag_name,
-  }))
-
-  const packages: Item[] = state.selectedVersion
-    ? (state.releases
-      .find(release => release.tag_name === state.selectedVersion)
-      ?.assets
-      .map(asset => ({
-        value: asset.name,
-        name: asset.name,
-      })) || [])
-    : []
-
-  const getTitle = useCallback(() => {
-    if (state.step === InstallStepFromGitHub.installed)
-      return t(`${i18nPrefix}.installedSuccessfully`)
-    if (state.step === InstallStepFromGitHub.installFailed)
-      return t(`${i18nPrefix}.installFailed`)
-
-    return updatePayload ? t(`${i18nPrefix}.updatePlugin`) : t(`${i18nPrefix}.installPlugin`)
-  }, [state.step, t, updatePayload])
-
-  const handleUrlSubmit = async () => {
-    const { isValid, owner, repo } = parseGitHubUrl(state.repoUrl)
-    if (!isValid || !owner || !repo) {
-      Toast.notify({
-        type: 'error',
-        message: t('plugin.error.inValidGitHubUrl'),
-      })
-      return
-    }
-    try {
-      const fetchedReleases = await fetchReleases(owner, repo)
-      if (fetchedReleases.length > 0) {
-        setState(prevState => ({
-          ...prevState,
-          releases: fetchedReleases,
-          step: InstallStepFromGitHub.selectPackage,
-        }))
-      }
-      else {
-        Toast.notify({
-          type: 'error',
-          message: t('plugin.error.noReleasesFound'),
-        })
-      }
-    }
-    catch {
-      Toast.notify({
-        type: 'error',
-        message: t('plugin.error.fetchReleasesError'),
-      })
-    }
-  }
-
-  const handleError = (e: any, isInstall: boolean) => {
-    const message = e?.response?.message || t('plugin.installModal.installFailedDesc')
-    setErrorMsg(message)
-    setState(prevState => ({ ...prevState, step: isInstall ? InstallStepFromGitHub.installFailed : InstallStepFromGitHub.uploadFailed }))
-  }
-
-  const handleUploaded = async (GitHubPackage: any) => {
-    try {
-      const icon = await getIconUrl(GitHubPackage.manifest.icon)
-      setManifest({
-        ...GitHubPackage.manifest,
-        icon,
-      })
-      setUniqueIdentifier(GitHubPackage.uniqueIdentifier)
-      setState(prevState => ({ ...prevState, step: InstallStepFromGitHub.readyToInstall }))
-    }
-    catch (e) {
-      handleError(e, false)
-    }
-  }
-
-  const handleUploadFail = useCallback((errorMsg: string) => {
-    setErrorMsg(errorMsg)
-    setState(prevState => ({ ...prevState, step: InstallStepFromGitHub.uploadFailed }))
-  }, [])
-
-  const handleInstalled = useCallback((notRefresh?: boolean) => {
-    setState(prevState => ({ ...prevState, step: InstallStepFromGitHub.installed }))
-    if (!notRefresh)
-      refreshPluginList(manifest)
-    setIsInstalling(false)
-    onSuccess()
-  }, [manifest, onSuccess, refreshPluginList, setIsInstalling])
-
-  const handleFailed = useCallback((errorMsg?: string) => {
-    setState(prevState => ({ ...prevState, step: InstallStepFromGitHub.installFailed }))
-    setIsInstalling(false)
-    if (errorMsg)
-      setErrorMsg(errorMsg)
-  }, [setIsInstalling])
-
-  const handleBack = () => {
-    setState((prevState) => {
-      switch (prevState.step) {
-        case InstallStepFromGitHub.selectPackage:
-          return { ...prevState, step: InstallStepFromGitHub.setUrl }
-        case InstallStepFromGitHub.readyToInstall:
-          return { ...prevState, step: InstallStepFromGitHub.selectPackage }
-        default:
-          return prevState
-      }
-    })
-  }
-
-  return (
-    <Modal
-      isShow={true}
-      onClose={foldAnimInto}
-      className={cn(modalClassName, `shadows-shadow-xl flex min-w-[560px] flex-col items-start rounded-2xl border-[0.5px]
-        border-components-panel-border bg-components-panel-bg p-0`)}
-      closable
-    >
-      <div className='flex items-start gap-2 self-stretch pb-3 pl-6 pr-14 pt-6'>
-        <div className='flex grow flex-col items-start gap-1'>
-          <div className='title-2xl-semi-bold self-stretch text-text-primary'>
-            {getTitle()}
-          </div>
-          <div className='system-xs-regular self-stretch text-text-tertiary'>
-            {!([InstallStepFromGitHub.uploadFailed, InstallStepFromGitHub.installed, InstallStepFromGitHub.installFailed].includes(state.step)) && t('plugin.installFromGitHub.installNote')}
-          </div>
-        </div>
-      </div>
-      {([InstallStepFromGitHub.uploadFailed, InstallStepFromGitHub.installed, InstallStepFromGitHub.installFailed].includes(state.step))
-        ? <Installed
-          payload={manifest}
-          isFailed={[InstallStepFromGitHub.uploadFailed, InstallStepFromGitHub.installFailed].includes(state.step)}
-          errMsg={errorMsg}
-          onCancel={onClose}
-        />
-        : <div className={`flex flex-col items-start justify-center self-stretch px-6 py-3 ${state.step === InstallStepFromGitHub.installed ? 'gap-2' : 'gap-4'}`}>
-          {state.step === InstallStepFromGitHub.setUrl && (
-            <SetURL
-              repoUrl={state.repoUrl}
-              onChange={value => setState(prevState => ({ ...prevState, repoUrl: value }))}
-              onNext={handleUrlSubmit}
-              onCancel={onClose}
-            />
-          )}
-          {state.step === InstallStepFromGitHub.selectPackage && (
-            <SelectPackage
-              updatePayload={updatePayload!}
-              repoUrl={state.repoUrl}
-              selectedVersion={state.selectedVersion}
-              versions={versions}
-              onSelectVersion={item => setState(prevState => ({ ...prevState, selectedVersion: item.value as string }))}
-              selectedPackage={state.selectedPackage}
-              packages={packages}
-              onSelectPackage={item => setState(prevState => ({ ...prevState, selectedPackage: item.value as string }))}
-              onUploaded={handleUploaded}
-              onFailed={handleUploadFail}
-              onBack={handleBack}
-            />
-          )}
-          {state.step === InstallStepFromGitHub.readyToInstall && (
-            <Loaded
-              updatePayload={updatePayload!}
-              uniqueIdentifier={uniqueIdentifier!}
-              payload={manifest as any}
-              repoUrl={state.repoUrl}
-              selectedVersion={state.selectedVersion}
-              selectedPackage={state.selectedPackage}
-              onBack={handleBack}
-              onStartToInstall={handleStartToInstall}
-              onInstalled={handleInstalled}
-              onFailed={handleFailed}
-            />
-          )}
-        </div>}
-    </Modal>
-  )
-}
-
-export default InstallFromGitHub
diff --git a/app/components/plugins/install-plugin/install-from-github/steps/loaded.tsx b/app/components/plugins/install-plugin/install-from-github/steps/loaded.tsx
deleted file mode 100644
index 0764f03..0000000
--- a/app/components/plugins/install-plugin/install-from-github/steps/loaded.tsx
+++ /dev/null
@@ -1,180 +0,0 @@
-'use client'
-
-import React, { useEffect } from 'react'
-import Button from '@/app/components/base/button'
-import { type Plugin, type PluginDeclaration, TaskStatus, type UpdateFromGitHubPayload } from '../../../types'
-import Card from '../../../card'
-import { pluginManifestToCardPluginProps } from '../../utils'
-import { useTranslation } from 'react-i18next'
-import { updateFromGitHub } from '@/service/plugins'
-import { useInstallPackageFromGitHub } from '@/service/use-plugins'
-import { RiLoader2Line } from '@remixicon/react'
-import { usePluginTaskList } from '@/service/use-plugins'
-import checkTaskStatus from '../../base/check-task-status'
-import useCheckInstalled from '@/app/components/plugins/install-plugin/hooks/use-check-installed'
-import { parseGitHubUrl } from '../../utils'
-import Version from '../../base/version'
-
-type LoadedProps = {
-  updatePayload: UpdateFromGitHubPayload
-  uniqueIdentifier: string
-  payload: PluginDeclaration | Plugin
-  repoUrl: string
-  selectedVersion: string
-  selectedPackage: string
-  onBack: () => void
-  onStartToInstall?: () => void
-  onInstalled: (notRefresh?: boolean) => void
-  onFailed: (message?: string) => void
-}
-
-const i18nPrefix = 'plugin.installModal'
-
-const Loaded: React.FC<LoadedProps> = ({
-  updatePayload,
-  uniqueIdentifier,
-  payload,
-  repoUrl,
-  selectedVersion,
-  selectedPackage,
-  onBack,
-  onStartToInstall,
-  onInstalled,
-  onFailed,
-}) => {
-  const { t } = useTranslation()
-  const toInstallVersion = payload.version
-  const pluginId = (payload as Plugin).plugin_id
-  const { installedInfo, isLoading } = useCheckInstalled({
-    pluginIds: [pluginId],
-    enabled: !!pluginId,
-  })
-  const installedInfoPayload = installedInfo?.[pluginId]
-  const installedVersion = installedInfoPayload?.installedVersion
-  const hasInstalled = !!installedVersion
-
-  const [isInstalling, setIsInstalling] = React.useState(false)
-  const { mutateAsync: installPackageFromGitHub } = useInstallPackageFromGitHub()
-  const { handleRefetch } = usePluginTaskList(payload.category)
-  const { check } = checkTaskStatus()
-
-  useEffect(() => {
-    if (hasInstalled && uniqueIdentifier === installedInfoPayload.uniqueIdentifier)
-      onInstalled()
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [hasInstalled])
-
-  const handleInstall = async () => {
-    if (isInstalling) return
-    setIsInstalling(true)
-    onStartToInstall?.()
-
-    try {
-      const { owner, repo } = parseGitHubUrl(repoUrl)
-      let taskId
-      let isInstalled
-      if (updatePayload) {
-        const { all_installed, task_id } = await updateFromGitHub(
-          `${owner}/${repo}`,
-          selectedVersion,
-          selectedPackage,
-          updatePayload.originalPackageInfo.id,
-          uniqueIdentifier,
-        )
-
-        taskId = task_id
-        isInstalled = all_installed
-      }
-      else {
-        if (hasInstalled) {
-          const {
-            all_installed,
-            task_id,
-          } = await updateFromGitHub(
-            `${owner}/${repo}`,
-            selectedVersion,
-            selectedPackage,
-            installedInfoPayload.uniqueIdentifier,
-            uniqueIdentifier,
-          )
-          taskId = task_id
-          isInstalled = all_installed
-        }
-        else {
-          const { all_installed, task_id } = await installPackageFromGitHub({
-            repoUrl: `${owner}/${repo}`,
-            selectedVersion,
-            selectedPackage,
-            uniqueIdentifier,
-          })
-
-          taskId = task_id
-          isInstalled = all_installed
-        }
-      }
-      if (isInstalled) {
-        onInstalled()
-        return
-      }
-
-      handleRefetch()
-
-      const { status, error } = await check({
-        taskId,
-        pluginUniqueIdentifier: uniqueIdentifier,
-      })
-      if (status === TaskStatus.failed) {
-        onFailed(error)
-        return
-      }
-      onInstalled(true)
-    }
-    catch (e) {
-      if (typeof e === 'string') {
-        onFailed(e)
-        return
-      }
-      onFailed()
-    }
-    finally {
-      setIsInstalling(false)
-    }
-  }
-
-  return (
-    <>
-      <div className='system-md-regular text-text-secondary'>
-        <p>{t(`${i18nPrefix}.readyToInstall`)}</p>
-      </div>
-      <div className='flex flex-wrap content-start items-start gap-1 self-stretch rounded-2xl bg-background-section-burn p-2'>
-        <Card
-          className='w-full'
-          payload={pluginManifestToCardPluginProps(payload as PluginDeclaration)}
-          titleLeft={!isLoading && <Version
-            hasInstalled={hasInstalled}
-            installedVersion={installedVersion}
-            toInstallVersion={toInstallVersion}
-          />}
-        />
-      </div>
-      <div className='mt-4 flex items-center justify-end gap-2 self-stretch'>
-        {!isInstalling && (
-          <Button variant='secondary' className='min-w-[72px]' onClick={onBack}>
-            {t('plugin.installModal.back')}
-          </Button>
-        )}
-        <Button
-          variant='primary'
-          className='flex min-w-[72px] space-x-0.5'
-          onClick={handleInstall}
-          disabled={isInstalling || isLoading}
-        >
-          {isInstalling && <RiLoader2Line className='h-4 w-4 animate-spin-slow' />}
-          <span>{t(`${i18nPrefix}.${isInstalling ? 'installing' : 'install'}`)}</span>
-        </Button>
-      </div>
-    </>
-  )
-}
-
-export default Loaded
diff --git a/app/components/plugins/install-plugin/install-from-github/steps/selectPackage.tsx b/app/components/plugins/install-plugin/install-from-github/steps/selectPackage.tsx
deleted file mode 100644
index 24e1e39..0000000
--- a/app/components/plugins/install-plugin/install-from-github/steps/selectPackage.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-'use client'
-
-import React from 'react'
-import type { Item } from '@/app/components/base/select'
-import { PortalSelect } from '@/app/components/base/select'
-import Button from '@/app/components/base/button'
-import type { PluginDeclaration, UpdateFromGitHubPayload } from '../../../types'
-import { useTranslation } from 'react-i18next'
-import { useGitHubUpload } from '../../hooks'
-
-const i18nPrefix = 'plugin.installFromGitHub'
-
-type SelectPackageProps = {
-  updatePayload: UpdateFromGitHubPayload
-  repoUrl: string
-  selectedVersion: string
-  versions: Item[]
-  onSelectVersion: (item: Item) => void
-  selectedPackage: string
-  packages: Item[]
-  onSelectPackage: (item: Item) => void
-  onUploaded: (result: {
-    uniqueIdentifier: string
-    manifest: PluginDeclaration
-  }) => void
-  onFailed: (errorMsg: string) => void
-  onBack: () => void
-}
-
-const SelectPackage: React.FC<SelectPackageProps> = ({
-  updatePayload,
-  repoUrl,
-  selectedVersion,
-  versions,
-  onSelectVersion,
-  selectedPackage,
-  packages,
-  onSelectPackage,
-  onUploaded,
-  onFailed,
-  onBack,
-}) => {
-  const { t } = useTranslation()
-  const isEdit = Boolean(updatePayload)
-  const [isUploading, setIsUploading] = React.useState(false)
-  const { handleUpload } = useGitHubUpload()
-
-  const handleUploadPackage = async () => {
-    if (isUploading) return
-    setIsUploading(true)
-    try {
-      const repo = repoUrl.replace('https://github.com/', '')
-      await handleUpload(repo, selectedVersion, selectedPackage, (GitHubPackage) => {
-        onUploaded({
-          uniqueIdentifier: GitHubPackage.unique_identifier,
-          manifest: GitHubPackage.manifest,
-        })
-      })
-    }
-    catch (e: any) {
-      if (e.response?.message)
-        onFailed(e.response?.message)
-      else
-        onFailed(t(`${i18nPrefix}.uploadFailed`))
-    }
-    finally {
-      setIsUploading(false)
-    }
-  }
-
-  return (
-    <>
-      <label
-        htmlFor='version'
-        className='flex flex-col items-start justify-center self-stretch text-text-secondary'
-      >
-        <span className='system-sm-semibold'>{t(`${i18nPrefix}.selectVersion`)}</span>
-      </label>
-      <PortalSelect
-        value={selectedVersion}
-        onSelect={onSelectVersion}
-        items={versions}
-        installedValue={updatePayload?.originalPackageInfo.version}
-        placeholder={t(`${i18nPrefix}.selectVersionPlaceholder`) || ''}
-        popupClassName='w-[512px] z-[1001]'
-      />
-      <label
-        htmlFor='package'
-        className='flex flex-col items-start justify-center self-stretch text-text-secondary'
-      >
-        <span className='system-sm-semibold'>{t(`${i18nPrefix}.selectPackage`)}</span>
-      </label>
-      <PortalSelect
-        value={selectedPackage}
-        onSelect={onSelectPackage}
-        items={packages}
-        readonly={!selectedVersion}
-        placeholder={t(`${i18nPrefix}.selectPackagePlaceholder`) || ''}
-        popupClassName='w-[512px] z-[1001]'
-      />
-      <div className='mt-4 flex items-center justify-end gap-2 self-stretch'>
-        {!isEdit
-          && <Button
-            variant='secondary'
-            className='min-w-[72px]'
-            onClick={onBack}
-            disabled={isUploading}
-          >
-            {t('plugin.installModal.back')}
-          </Button>
-        }
-        <Button
-          variant='primary'
-          className='min-w-[72px]'
-          onClick={handleUploadPackage}
-          disabled={!selectedVersion || !selectedPackage || isUploading}
-        >
-          {t('plugin.installModal.next')}
-        </Button>
-      </div>
-    </>
-  )
-}
-
-export default SelectPackage
diff --git a/app/components/plugins/install-plugin/install-from-github/steps/setURL.tsx b/app/components/plugins/install-plugin/install-from-github/steps/setURL.tsx
deleted file mode 100644
index be8ac67..0000000
--- a/app/components/plugins/install-plugin/install-from-github/steps/setURL.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-'use client'
-
-import React from 'react'
-import Button from '@/app/components/base/button'
-import { useTranslation } from 'react-i18next'
-
-type SetURLProps = {
-  repoUrl: string
-  onChange: (value: string) => void
-  onNext: () => void
-  onCancel: () => void
-}
-
-const SetURL: React.FC<SetURLProps> = ({ repoUrl, onChange, onNext, onCancel }) => {
-  const { t } = useTranslation()
-  return (
-    <>
-      <label
-        htmlFor='repoUrl'
-        className='flex flex-col items-start justify-center self-stretch text-text-secondary'
-      >
-        <span className='system-sm-semibold'>{t('plugin.installFromGitHub.gitHubRepo')}</span>
-      </label>
-      <input
-        type='url'
-        id='repoUrl'
-        name='repoUrl'
-        value={repoUrl}
-        onChange={e => onChange(e.target.value)}
-        className='shadows-shadow-xs system-sm-regular flex grow items-center gap-[2px]
-          self-stretch overflow-hidden text-ellipsis rounded-lg border border-components-input-border-active
-          bg-components-input-bg-active p-2 text-components-input-text-filled'
-        placeholder='Please enter GitHub repo URL'
-      />
-      <div className='mt-4 flex items-center justify-end gap-2 self-stretch'>
-        <Button
-          variant='secondary'
-          className='min-w-[72px]'
-          onClick={onCancel}
-        >
-          {t('plugin.installModal.cancel')}
-        </Button>
-        <Button
-          variant='primary'
-          className='min-w-[72px]'
-          onClick={onNext}
-          disabled={!repoUrl.trim()}
-        >
-          {t('plugin.installModal.next')}
-        </Button>
-      </div>
-    </>
-  )
-}
-
-export default SetURL
diff --git a/app/components/plugins/install-plugin/install-from-local-package/index.tsx b/app/components/plugins/install-plugin/install-from-local-package/index.tsx
deleted file mode 100644
index e8e6cf8..0000000
--- a/app/components/plugins/install-plugin/install-from-local-package/index.tsx
+++ /dev/null
@@ -1,133 +0,0 @@
-'use client'
-
-import React, { useCallback, useState } from 'react'
-import Modal from '@/app/components/base/modal'
-import type { Dependency, PluginDeclaration } from '../../types'
-import { InstallStep } from '../../types'
-import Uploading from './steps/uploading'
-import { useTranslation } from 'react-i18next'
-import useGetIcon from '@/app/components/plugins/install-plugin/base/use-get-icon'
-import ReadyToInstallPackage from './ready-to-install'
-import ReadyToInstallBundle from '../install-bundle/ready-to-install'
-import useHideLogic from '../hooks/use-hide-logic'
-import cn from '@/utils/classnames'
-
-const i18nPrefix = 'plugin.installModal'
-
-type InstallFromLocalPackageProps = {
-  file: File
-  onSuccess: () => void
-  onClose: () => void
-}
-
-const InstallFromLocalPackage: React.FC<InstallFromLocalPackageProps> = ({
-  file,
-  onClose,
-}) => {
-  const { t } = useTranslation()
-  // uploading -> !uploadFailed -> readyToInstall -> installed/failed
-  const [step, setStep] = useState<InstallStep>(InstallStep.uploading)
-  const [uniqueIdentifier, setUniqueIdentifier] = useState<string | null>(null)
-  const [manifest, setManifest] = useState<PluginDeclaration | null>(null)
-  const [errorMsg, setErrorMsg] = useState<string | null>(null)
-  const isBundle = file.name.endsWith('.difybndl')
-  const [dependencies, setDependencies] = useState<Dependency[]>([])
-
-  const {
-    modalClassName,
-    foldAnimInto,
-    setIsInstalling,
-    handleStartToInstall,
-  } = useHideLogic(onClose)
-
-  const getTitle = useCallback(() => {
-    if (step === InstallStep.uploadFailed)
-      return t(`${i18nPrefix}.uploadFailed`)
-    if (isBundle && step === InstallStep.installed)
-      return t(`${i18nPrefix}.installComplete`)
-    if (step === InstallStep.installed)
-      return t(`${i18nPrefix}.installedSuccessfully`)
-    if (step === InstallStep.installFailed)
-      return t(`${i18nPrefix}.installFailed`)
-
-    return t(`${i18nPrefix}.installPlugin`)
-  }, [isBundle, step, t])
-
-  const { getIconUrl } = useGetIcon()
-
-  const handlePackageUploaded = useCallback(async (result: {
-    uniqueIdentifier: string
-    manifest: PluginDeclaration
-  }) => {
-    const {
-      manifest,
-      uniqueIdentifier,
-    } = result
-    const icon = await getIconUrl(manifest!.icon)
-    setUniqueIdentifier(uniqueIdentifier)
-    setManifest({
-      ...manifest,
-      icon,
-    })
-    setStep(InstallStep.readyToInstall)
-  }, [getIconUrl])
-
-  const handleBundleUploaded = useCallback((result: Dependency[]) => {
-    setDependencies(result)
-    setStep(InstallStep.readyToInstall)
-  }, [])
-
-  const handleUploadFail = useCallback((errorMsg: string) => {
-    setErrorMsg(errorMsg)
-    setStep(InstallStep.uploadFailed)
-  }, [])
-
-  return (
-    <Modal
-      isShow={true}
-      onClose={foldAnimInto}
-      className={cn(modalClassName, 'shadows-shadow-xl flex min-w-[560px] flex-col items-start rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg p-0')}
-      closable
-    >
-      <div className='flex items-start gap-2 self-stretch pb-3 pl-6 pr-14 pt-6'>
-        <div className='title-2xl-semi-bold self-stretch text-text-primary'>
-          {getTitle()}
-        </div>
-      </div>
-      {step === InstallStep.uploading && (
-        <Uploading
-          isBundle={isBundle}
-          file={file}
-          onCancel={onClose}
-          onPackageUploaded={handlePackageUploaded}
-          onBundleUploaded={handleBundleUploaded}
-          onFailed={handleUploadFail}
-        />
-      )}
-      {isBundle ? (
-        <ReadyToInstallBundle
-          step={step}
-          onStepChange={setStep}
-          onStartToInstall={handleStartToInstall}
-          setIsInstalling={setIsInstalling}
-          onClose={onClose}
-          allPlugins={dependencies}
-        />
-      ) : (
-        <ReadyToInstallPackage
-          step={step}
-          onStepChange={setStep}
-          onStartToInstall={handleStartToInstall}
-          setIsInstalling={setIsInstalling}
-          onClose={onClose}
-          uniqueIdentifier={uniqueIdentifier}
-          manifest={manifest}
-          errorMsg={errorMsg}
-          onError={setErrorMsg}
-        />
-      )}
-    </Modal>
-  )
-}
-
-export default InstallFromLocalPackage
diff --git a/app/components/plugins/install-plugin/install-from-local-package/ready-to-install.tsx b/app/components/plugins/install-plugin/install-from-local-package/ready-to-install.tsx
deleted file mode 100644
index f85cde1..0000000
--- a/app/components/plugins/install-plugin/install-from-local-package/ready-to-install.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback } from 'react'
-import type { PluginDeclaration } from '../../types'
-import { InstallStep } from '../../types'
-import Install from './steps/install'
-import Installed from '../base/installed'
-import useRefreshPluginList from '../hooks/use-refresh-plugin-list'
-
-type Props = {
-  step: InstallStep
-  onStepChange: (step: InstallStep) => void,
-  onStartToInstall: () => void
-  setIsInstalling: (isInstalling: boolean) => void
-  onClose: () => void
-  uniqueIdentifier: string | null,
-  manifest: PluginDeclaration | null,
-  errorMsg: string | null,
-  onError: (errorMsg: string) => void,
-}
-
-const ReadyToInstall: FC<Props> = ({
-  step,
-  onStepChange,
-  onStartToInstall,
-  setIsInstalling,
-  onClose,
-  uniqueIdentifier,
-  manifest,
-  errorMsg,
-  onError,
-}) => {
-  const { refreshPluginList } = useRefreshPluginList()
-
-  const handleInstalled = useCallback((notRefresh?: boolean) => {
-    onStepChange(InstallStep.installed)
-    if (!notRefresh)
-      refreshPluginList(manifest)
-    setIsInstalling(false)
-  }, [manifest, onStepChange, refreshPluginList, setIsInstalling])
-
-  const handleFailed = useCallback((errorMsg?: string) => {
-    onStepChange(InstallStep.installFailed)
-    setIsInstalling(false)
-    if (errorMsg)
-      onError(errorMsg)
-  }, [onError, onStepChange, setIsInstalling])
-
-  return (
-    <>
-      {
-        step === InstallStep.readyToInstall && (
-          <Install
-            uniqueIdentifier={uniqueIdentifier!}
-            payload={manifest!}
-            onCancel={onClose}
-            onInstalled={handleInstalled}
-            onFailed={handleFailed}
-            onStartToInstall={onStartToInstall}
-          />
-        )
-      }
-      {
-        ([InstallStep.uploadFailed, InstallStep.installed, InstallStep.installFailed].includes(step)) && (
-          <Installed
-            payload={manifest}
-            isFailed={[InstallStep.uploadFailed, InstallStep.installFailed].includes(step)}
-            errMsg={errorMsg}
-            onCancel={onClose}
-          />
-        )
-      }
-    </>
-  )
-}
-export default React.memo(ReadyToInstall)
diff --git a/app/components/plugins/install-plugin/install-from-local-package/steps/install.tsx b/app/components/plugins/install-plugin/install-from-local-package/steps/install.tsx
deleted file mode 100644
index 4125172..0000000
--- a/app/components/plugins/install-plugin/install-from-local-package/steps/install.tsx
+++ /dev/null
@@ -1,164 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useEffect, useMemo } from 'react'
-import { type PluginDeclaration, TaskStatus } from '../../../types'
-import Card from '../../../card'
-import { pluginManifestToCardPluginProps } from '../../utils'
-import Button from '@/app/components/base/button'
-import { Trans, useTranslation } from 'react-i18next'
-import { RiLoader2Line } from '@remixicon/react'
-import checkTaskStatus from '../../base/check-task-status'
-import { useInstallPackageFromLocal, usePluginTaskList } from '@/service/use-plugins'
-import useCheckInstalled from '@/app/components/plugins/install-plugin/hooks/use-check-installed'
-import { uninstallPlugin } from '@/service/plugins'
-import Version from '../../base/version'
-import { useAppContext } from '@/context/app-context'
-import { gte } from 'semver'
-
-const i18nPrefix = 'plugin.installModal'
-
-type Props = {
-  uniqueIdentifier: string
-  payload: PluginDeclaration
-  onCancel: () => void
-  onStartToInstall?: () => void
-  onInstalled: (notRefresh?: boolean) => void
-  onFailed: (message?: string) => void
-}
-
-const Installed: FC<Props> = ({
-  uniqueIdentifier,
-  payload,
-  onCancel,
-  onStartToInstall,
-  onInstalled,
-  onFailed,
-}) => {
-  const { t } = useTranslation()
-  const toInstallVersion = payload.version
-  const pluginId = `${payload.author}/${payload.name}`
-  const { installedInfo, isLoading } = useCheckInstalled({
-    pluginIds: [pluginId],
-    enabled: !!pluginId,
-  })
-  const installedInfoPayload = installedInfo?.[pluginId]
-  const installedVersion = installedInfoPayload?.installedVersion
-  const hasInstalled = !!installedVersion
-
-  useEffect(() => {
-    if (hasInstalled && uniqueIdentifier === installedInfoPayload.uniqueIdentifier)
-      onInstalled()
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [hasInstalled])
-
-  const [isInstalling, setIsInstalling] = React.useState(false)
-  const { mutateAsync: installPackageFromLocal } = useInstallPackageFromLocal()
-
-  const {
-    check,
-    stop,
-  } = checkTaskStatus()
-
-  const handleCancel = () => {
-    stop()
-    onCancel()
-  }
-
-  const { handleRefetch } = usePluginTaskList(payload.category)
-  const handleInstall = async () => {
-    if (isInstalling) return
-    setIsInstalling(true)
-    onStartToInstall?.()
-
-    try {
-      if (hasInstalled)
-        await uninstallPlugin(installedInfoPayload.installedId)
-
-      const {
-        all_installed,
-        task_id,
-      } = await installPackageFromLocal(uniqueIdentifier)
-      const taskId = task_id
-      const isInstalled = all_installed
-
-      if (isInstalled) {
-        onInstalled()
-        return
-      }
-      handleRefetch()
-      const { status, error } = await check({
-        taskId,
-        pluginUniqueIdentifier: uniqueIdentifier,
-      })
-      if (status === TaskStatus.failed) {
-        onFailed(error)
-        return
-      }
-      onInstalled(true)
-    }
-    catch (e) {
-      if (typeof e === 'string') {
-        onFailed(e)
-        return
-      }
-      onFailed()
-    }
-  }
-
-  const { langeniusVersionInfo } = useAppContext()
-  const isDifyVersionCompatible = useMemo(() => {
-    if (!langeniusVersionInfo.current_version)
-      return true
-    return gte(langeniusVersionInfo.current_version, payload.meta.minimum_dify_version ?? '0.0.0')
-  }, [langeniusVersionInfo.current_version, payload.meta.minimum_dify_version])
-
-  return (
-    <>
-      <div className='flex flex-col items-start justify-center gap-4 self-stretch px-6 py-3'>
-        <div className='system-md-regular text-text-secondary'>
-          <p>{t(`${i18nPrefix}.readyToInstall`)}</p>
-          <p>
-            <Trans
-              i18nKey={`${i18nPrefix}.fromTrustSource`}
-              components={{ trustSource: <span className='system-md-semibold' /> }}
-            />
-          </p>
-          {!isDifyVersionCompatible && (
-            <p className='system-md-regular flex items-center gap-1 text-text-secondary text-text-warning'>
-              {t('plugin.difyVersionNotCompatible', { minimalDifyVersion: payload.meta.minimum_dify_version })}
-            </p>
-          )}
-        </div>
-        <div className='flex flex-wrap content-start items-start gap-1 self-stretch rounded-2xl bg-background-section-burn p-2'>
-          <Card
-            className='w-full'
-            payload={pluginManifestToCardPluginProps(payload)}
-            titleLeft={!isLoading && <Version
-              hasInstalled={hasInstalled}
-              installedVersion={installedVersion}
-              toInstallVersion={toInstallVersion}
-            />}
-          />
-        </div>
-      </div>
-      {/* Action Buttons */}
-      <div className='flex items-center justify-end gap-2 self-stretch p-6 pt-5'>
-        {!isInstalling && (
-          <Button variant='secondary' className='min-w-[72px]' onClick={handleCancel}>
-            {t('common.operation.cancel')}
-          </Button>
-        )}
-        <Button
-          variant='primary'
-          className='flex min-w-[72px] space-x-0.5'
-          disabled={isInstalling || isLoading}
-          onClick={handleInstall}
-        >
-          {isInstalling && <RiLoader2Line className='h-4 w-4 animate-spin-slow' />}
-          <span>{t(`${i18nPrefix}.${isInstalling ? 'installing' : 'install'}`)}</span>
-        </Button>
-      </div>
-    </>
-  )
-}
-export default React.memo(Installed)
diff --git a/app/components/plugins/install-plugin/install-from-local-package/steps/uploading.tsx b/app/components/plugins/install-plugin/install-from-local-package/steps/uploading.tsx
deleted file mode 100644
index 5b1c478..0000000
--- a/app/components/plugins/install-plugin/install-from-local-package/steps/uploading.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { RiLoader2Line } from '@remixicon/react'
-import Card from '../../../card'
-import type { Dependency, PluginDeclaration } from '../../../types'
-import Button from '@/app/components/base/button'
-import { useTranslation } from 'react-i18next'
-import { uploadFile } from '@/service/plugins'
-const i18nPrefix = 'plugin.installModal'
-
-type Props = {
-  isBundle: boolean
-  file: File
-  onCancel: () => void
-  onPackageUploaded: (result: {
-    uniqueIdentifier: string
-    manifest: PluginDeclaration
-  }) => void
-  onBundleUploaded: (result: Dependency[]) => void
-  onFailed: (errorMsg: string) => void
-}
-
-const Uploading: FC<Props> = ({
-  isBundle,
-  file,
-  onCancel,
-  onPackageUploaded,
-  onBundleUploaded,
-  onFailed,
-}) => {
-  const { t } = useTranslation()
-  const fileName = file.name
-  const handleUpload = async () => {
-    try {
-      await uploadFile(file, isBundle)
-    }
-    catch (e: any) {
-      if (e.response?.message) {
-        onFailed(e.response?.message)
-      }
-      else { // Why it would into this branch?
-        const res = e.response
-        if (isBundle) {
-          onBundleUploaded(res)
-          return
-        }
-        onPackageUploaded({
-          uniqueIdentifier: res.unique_identifier,
-          manifest: res.manifest,
-        })
-      }
-    }
-  }
-
-  React.useEffect(() => {
-    handleUpload()
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [])
-  return (
-    <>
-      <div className='flex flex-col items-start justify-center gap-4 self-stretch px-6 py-3'>
-        <div className='flex items-center gap-1 self-stretch'>
-          <RiLoader2Line className='h-4 w-4 animate-spin-slow text-text-accent' />
-          <div className='system-md-regular text-text-secondary'>
-            {t(`${i18nPrefix}.uploadingPackage`, {
-              packageName: fileName,
-            })}
-          </div>
-        </div>
-        <div className='flex flex-wrap content-start items-start gap-1 self-stretch rounded-2xl bg-background-section-burn p-2'>
-          <Card
-            className='w-full'
-            payload={{ name: fileName } as any}
-            isLoading
-            loadingFileName={fileName}
-            installed={false}
-          />
-        </div>
-      </div>
-
-      {/* Action Buttons */}
-      <div className='flex items-center justify-end gap-2 self-stretch p-6 pt-5'>
-        <Button variant='secondary' className='min-w-[72px]' onClick={onCancel}>
-          {t('common.operation.cancel')}
-        </Button>
-        <Button
-          variant='primary'
-          className='min-w-[72px]'
-          disabled
-        >
-          {t(`${i18nPrefix}.install`)}
-        </Button>
-      </div>
-    </>
-  )
-}
-
-export default React.memo(Uploading)
diff --git a/app/components/plugins/install-plugin/install-from-marketplace/index.tsx b/app/components/plugins/install-plugin/install-from-marketplace/index.tsx
deleted file mode 100644
index f41cd61..0000000
--- a/app/components/plugins/install-plugin/install-from-marketplace/index.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-'use client'
-
-import React, { useCallback, useState } from 'react'
-import Modal from '@/app/components/base/modal'
-import type { Dependency, Plugin, PluginManifestInMarket } from '../../types'
-import { InstallStep } from '../../types'
-import Install from './steps/install'
-import Installed from '../base/installed'
-import { useTranslation } from 'react-i18next'
-import useRefreshPluginList from '../hooks/use-refresh-plugin-list'
-import ReadyToInstallBundle from '../install-bundle/ready-to-install'
-import cn from '@/utils/classnames'
-import useHideLogic from '../hooks/use-hide-logic'
-
-const i18nPrefix = 'plugin.installModal'
-
-type InstallFromMarketplaceProps = {
-  uniqueIdentifier: string
-  manifest: PluginManifestInMarket | Plugin
-  isBundle?: boolean
-  dependencies?: Dependency[]
-  onSuccess: () => void
-  onClose: () => void
-}
-
-const InstallFromMarketplace: React.FC<InstallFromMarketplaceProps> = ({
-  uniqueIdentifier,
-  manifest,
-  isBundle,
-  dependencies,
-  onSuccess,
-  onClose,
-}) => {
-  const { t } = useTranslation()
-  // readyToInstall -> check installed -> installed/failed
-  const [step, setStep] = useState<InstallStep>(InstallStep.readyToInstall)
-  const [errorMsg, setErrorMsg] = useState<string | null>(null)
-  const { refreshPluginList } = useRefreshPluginList()
-
-  const {
-    modalClassName,
-    foldAnimInto,
-    setIsInstalling,
-    handleStartToInstall,
-  } = useHideLogic(onClose)
-
-  const getTitle = useCallback(() => {
-    if (isBundle && step === InstallStep.installed)
-      return t(`${i18nPrefix}.installComplete`)
-    if (step === InstallStep.installed)
-      return t(`${i18nPrefix}.installedSuccessfully`)
-    if (step === InstallStep.installFailed)
-      return t(`${i18nPrefix}.installFailed`)
-    return t(`${i18nPrefix}.installPlugin`)
-  }, [isBundle, step, t])
-
-  const handleInstalled = useCallback((notRefresh?: boolean) => {
-    setStep(InstallStep.installed)
-    if (!notRefresh)
-      refreshPluginList(manifest)
-    setIsInstalling(false)
-  }, [manifest, refreshPluginList, setIsInstalling])
-
-  const handleFailed = useCallback((errorMsg?: string) => {
-    setStep(InstallStep.installFailed)
-    setIsInstalling(false)
-    if (errorMsg)
-      setErrorMsg(errorMsg)
-  }, [setIsInstalling])
-
-  return (
-    <Modal
-      isShow={true}
-      onClose={foldAnimInto}
-      wrapperClassName='z-[9999]'
-      className={cn(modalClassName, 'shadows-shadow-xl flex min-w-[560px] flex-col items-start rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg p-0')}
-      closable
-    >
-      <div className='flex items-start gap-2 self-stretch pb-3 pl-6 pr-14 pt-6'>
-        <div className='title-2xl-semi-bold self-stretch text-text-primary'>
-          {getTitle()}
-        </div>
-      </div>
-      {
-        isBundle ? (
-          <ReadyToInstallBundle
-            step={step}
-            onStepChange={setStep}
-            onStartToInstall={handleStartToInstall}
-            setIsInstalling={setIsInstalling}
-            onClose={onClose}
-            allPlugins={dependencies!}
-            isFromMarketPlace
-          />
-        ) : (<>
-          {
-            step === InstallStep.readyToInstall && (
-              <Install
-                uniqueIdentifier={uniqueIdentifier}
-                payload={manifest!}
-                onCancel={onClose}
-                onInstalled={handleInstalled}
-                onFailed={handleFailed}
-                onStartToInstall={handleStartToInstall}
-              />
-            )}
-          {
-            [InstallStep.installed, InstallStep.installFailed].includes(step) && (
-              <Installed
-                payload={manifest!}
-                isMarketPayload
-                isFailed={step === InstallStep.installFailed}
-                errMsg={errorMsg}
-                onCancel={onSuccess}
-              />
-            )
-          }
-        </>
-        )
-      }
-    </Modal >
-  )
-}
-
-export default InstallFromMarketplace
diff --git a/app/components/plugins/install-plugin/install-from-marketplace/steps/install.tsx b/app/components/plugins/install-plugin/install-from-marketplace/steps/install.tsx
deleted file mode 100644
index 53f1f40..0000000
--- a/app/components/plugins/install-plugin/install-from-marketplace/steps/install.tsx
+++ /dev/null
@@ -1,172 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useEffect, useMemo } from 'react'
-// import { RiInformation2Line } from '@remixicon/react'
-import { type Plugin, type PluginManifestInMarket, TaskStatus } from '../../../types'
-import Card from '../../../card'
-import { pluginManifestInMarketToPluginProps } from '../../utils'
-import Button from '@/app/components/base/button'
-import { useTranslation } from 'react-i18next'
-import { RiLoader2Line } from '@remixicon/react'
-import { useInstallPackageFromMarketPlace, usePluginDeclarationFromMarketPlace, useUpdatePackageFromMarketPlace } from '@/service/use-plugins'
-import checkTaskStatus from '../../base/check-task-status'
-import useCheckInstalled from '@/app/components/plugins/install-plugin/hooks/use-check-installed'
-import Version from '../../base/version'
-import { usePluginTaskList } from '@/service/use-plugins'
-import { gte } from 'semver'
-import { useAppContext } from '@/context/app-context'
-
-const i18nPrefix = 'plugin.installModal'
-
-type Props = {
-  uniqueIdentifier: string
-  payload: PluginManifestInMarket | Plugin
-  onCancel: () => void
-  onStartToInstall?: () => void
-  onInstalled: (notRefresh?: boolean) => void
-  onFailed: (message?: string) => void
-}
-
-const Installed: FC<Props> = ({
-  uniqueIdentifier,
-  payload,
-  onCancel,
-  onStartToInstall,
-  onInstalled,
-  onFailed,
-}) => {
-  const { t } = useTranslation()
-  const toInstallVersion = payload.version || payload.latest_version
-  const pluginId = (payload as Plugin).plugin_id
-  const { installedInfo, isLoading } = useCheckInstalled({
-    pluginIds: [pluginId],
-    enabled: !!pluginId,
-  })
-  const installedInfoPayload = installedInfo?.[pluginId]
-  const installedVersion = installedInfoPayload?.installedVersion
-  const hasInstalled = !!installedVersion
-
-  const { mutateAsync: installPackageFromMarketPlace } = useInstallPackageFromMarketPlace()
-  const { mutateAsync: updatePackageFromMarketPlace } = useUpdatePackageFromMarketPlace()
-  const [isInstalling, setIsInstalling] = React.useState(false)
-  const {
-    check,
-    stop,
-  } = checkTaskStatus()
-  const { handleRefetch } = usePluginTaskList(payload.category)
-
-  useEffect(() => {
-    if (hasInstalled && uniqueIdentifier === installedInfoPayload.uniqueIdentifier)
-      onInstalled()
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [hasInstalled])
-
-  const handleCancel = () => {
-    stop()
-    onCancel()
-  }
-
-  const handleInstall = async () => {
-    if (isInstalling) return
-    onStartToInstall?.()
-    setIsInstalling(true)
-    try {
-      let taskId
-      let isInstalled
-      if (hasInstalled) {
-        const {
-          all_installed,
-          task_id,
-        } = await updatePackageFromMarketPlace({
-          original_plugin_unique_identifier: installedInfoPayload.uniqueIdentifier,
-          new_plugin_unique_identifier: uniqueIdentifier,
-        })
-        taskId = task_id
-        isInstalled = all_installed
-      }
-      else {
-        const {
-          all_installed,
-          task_id,
-        } = await installPackageFromMarketPlace(uniqueIdentifier)
-        taskId = task_id
-        isInstalled = all_installed
-      }
-
-      if (isInstalled) {
-        onInstalled()
-        return
-      }
-
-      handleRefetch()
-
-      const { status, error } = await check({
-        taskId,
-        pluginUniqueIdentifier: uniqueIdentifier,
-      })
-      if (status === TaskStatus.failed) {
-        onFailed(error)
-        return
-      }
-      onInstalled(true)
-    }
-    catch (e) {
-      if (typeof e === 'string') {
-        onFailed(e)
-        return
-      }
-      onFailed()
-    }
-  }
-
-  const { langeniusVersionInfo } = useAppContext()
-  const { data: pluginDeclaration } = usePluginDeclarationFromMarketPlace(uniqueIdentifier)
-  const isDifyVersionCompatible = useMemo(() => {
-    if (!pluginDeclaration || !langeniusVersionInfo.current_version) return true
-    return gte(langeniusVersionInfo.current_version, pluginDeclaration?.manifest.meta.minimum_dify_version ?? '0.0.0')
-  }, [langeniusVersionInfo.current_version, pluginDeclaration?.manifest.meta.minimum_dify_version])
-
-  return (
-    <>
-      <div className='flex flex-col items-start justify-center gap-4 self-stretch px-6 py-3'>
-        <div className='system-md-regular text-text-secondary'>
-          <p>{t(`${i18nPrefix}.readyToInstall`)}</p>
-          {!isDifyVersionCompatible && (
-            <p className='system-md-regular text-text-secondary text-text-warning'>
-              {t('plugin.difyVersionNotCompatible', { minimalDifyVersion: pluginDeclaration?.manifest.meta.minimum_dify_version })}
-            </p>
-          )}
-        </div>
-        <div className='flex flex-wrap content-start items-start gap-1 self-stretch rounded-2xl bg-background-section-burn p-2'>
-          <Card
-            className='w-full'
-            payload={pluginManifestInMarketToPluginProps(payload as PluginManifestInMarket)}
-            titleLeft={!isLoading && <Version
-              hasInstalled={hasInstalled}
-              installedVersion={installedVersion}
-              toInstallVersion={toInstallVersion}
-            />}
-          />
-        </div>
-      </div>
-      {/* Action Buttons */}
-      <div className='flex items-center justify-end gap-2 self-stretch p-6 pt-5'>
-        {!isInstalling && (
-          <Button variant='secondary' className='min-w-[72px]' onClick={handleCancel}>
-            {t('common.operation.cancel')}
-          </Button>
-        )}
-        <Button
-          variant='primary'
-          className='flex min-w-[72px] space-x-0.5'
-          disabled={isInstalling || isLoading}
-          onClick={handleInstall}
-        >
-          {isInstalling && <RiLoader2Line className='h-4 w-4 animate-spin-slow' />}
-          <span>{t(`${i18nPrefix}.${isInstalling ? 'installing' : 'install'}`)}</span>
-        </Button>
-      </div>
-    </>
-  )
-}
-export default React.memo(Installed)
diff --git a/app/components/plugins/install-plugin/utils.ts b/app/components/plugins/install-plugin/utils.ts
deleted file mode 100644
index eff5e3a..0000000
--- a/app/components/plugins/install-plugin/utils.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import type { Plugin, PluginDeclaration, PluginManifestInMarket } from '../types'
-import type { GitHubUrlInfo } from '@/app/components/plugins/types'
-
-export const pluginManifestToCardPluginProps = (pluginManifest: PluginDeclaration): Plugin => {
-  return {
-    plugin_id: pluginManifest.plugin_unique_identifier,
-    type: pluginManifest.category,
-    category: pluginManifest.category,
-    name: pluginManifest.name,
-    version: pluginManifest.version,
-    latest_version: '',
-    latest_package_identifier: '',
-    org: pluginManifest.author,
-    label: pluginManifest.label,
-    brief: pluginManifest.description,
-    icon: pluginManifest.icon,
-    verified: pluginManifest.verified,
-    introduction: '',
-    repository: '',
-    install_count: 0,
-    endpoint: {
-      settings: [],
-    },
-    tags: [],
-  }
-}
-
-export const pluginManifestInMarketToPluginProps = (pluginManifest: PluginManifestInMarket): Plugin => {
-  return {
-    plugin_id: pluginManifest.plugin_unique_identifier,
-    type: pluginManifest.category,
-    category: pluginManifest.category,
-    name: pluginManifest.name,
-    version: pluginManifest.latest_version,
-    latest_version: pluginManifest.latest_version,
-    latest_package_identifier: '',
-    org: pluginManifest.org,
-    label: pluginManifest.label,
-    brief: pluginManifest.brief,
-    icon: pluginManifest.icon,
-    verified: true,
-    introduction: pluginManifest.introduction,
-    repository: '',
-    install_count: 0,
-    endpoint: {
-      settings: [],
-    },
-    tags: [],
-    badges: pluginManifest.badges,
-  }
-}
-
-export const parseGitHubUrl = (url: string): GitHubUrlInfo => {
-  const match = url.match(/^https:\/\/github\.com\/([^\/]+)\/([^\/]+)\/?$/)
-  return match ? { isValid: true, owner: match[1], repo: match[2] } : { isValid: false }
-}
-
-export const convertRepoToUrl = (repo: string) => {
-  return repo ? `https://github.com/${repo}` : ''
-}
diff --git a/app/components/plugins/marketplace/constants.ts b/app/components/plugins/marketplace/constants.ts
deleted file mode 100644
index 6bd4e29..0000000
--- a/app/components/plugins/marketplace/constants.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export const DEFAULT_SORT = {
-  sortBy: 'install_count',
-  sortOrder: 'DESC',
-}
diff --git a/app/components/plugins/marketplace/context.tsx b/app/components/plugins/marketplace/context.tsx
deleted file mode 100644
index 91621af..0000000
--- a/app/components/plugins/marketplace/context.tsx
+++ /dev/null
@@ -1,348 +0,0 @@
-'use client'
-
-import type {
-  ReactNode,
-} from 'react'
-import {
-  useCallback,
-  useEffect,
-  useMemo,
-  useRef,
-  useState,
-} from 'react'
-import {
-  createContext,
-  useContextSelector,
-} from 'use-context-selector'
-import { PLUGIN_TYPE_SEARCH_MAP } from './plugin-type-switch'
-import type { Plugin } from '../types'
-import {
-  getValidCategoryKeys,
-  getValidTagKeys,
-} from '../utils'
-import type {
-  MarketplaceCollection,
-  PluginsSort,
-  SearchParams,
-  SearchParamsFromCollection,
-} from './types'
-import { DEFAULT_SORT } from './constants'
-import {
-  useMarketplaceCollectionsAndPlugins,
-  useMarketplaceContainerScroll,
-  useMarketplacePlugins,
-} from './hooks'
-import {
-  getMarketplaceListCondition,
-  getMarketplaceListFilterType,
-  updateSearchParams,
-} from './utils'
-import { useInstalledPluginList } from '@/service/use-plugins'
-import { debounce, noop } from 'lodash-es'
-
-export type MarketplaceContextValue = {
-  intersected: boolean
-  setIntersected: (intersected: boolean) => void
-  searchPluginText: string
-  handleSearchPluginTextChange: (text: string) => void
-  filterPluginTags: string[]
-  handleFilterPluginTagsChange: (tags: string[]) => void
-  activePluginType: string
-  handleActivePluginTypeChange: (type: string) => void
-  page: number
-  handlePageChange: (page: number) => void
-  plugins?: Plugin[]
-  pluginsTotal?: number
-  resetPlugins: () => void
-  sort: PluginsSort
-  handleSortChange: (sort: PluginsSort) => void
-  handleQueryPlugins: () => void
-  handleMoreClick: (searchParams: SearchParamsFromCollection) => void
-  marketplaceCollectionsFromClient?: MarketplaceCollection[]
-  setMarketplaceCollectionsFromClient: (collections: MarketplaceCollection[]) => void
-  marketplaceCollectionPluginsMapFromClient?: Record<string, Plugin[]>
-  setMarketplaceCollectionPluginsMapFromClient: (map: Record<string, Plugin[]>) => void
-  isLoading: boolean
-  isSuccessCollections: boolean
-}
-
-export const MarketplaceContext = createContext<MarketplaceContextValue>({
-  intersected: true,
-  setIntersected: noop,
-  searchPluginText: '',
-  handleSearchPluginTextChange: noop,
-  filterPluginTags: [],
-  handleFilterPluginTagsChange: noop,
-  activePluginType: 'all',
-  handleActivePluginTypeChange: noop,
-  page: 1,
-  handlePageChange: noop,
-  plugins: undefined,
-  pluginsTotal: 0,
-  resetPlugins: noop,
-  sort: DEFAULT_SORT,
-  handleSortChange: noop,
-  handleQueryPlugins: noop,
-  handleMoreClick: noop,
-  marketplaceCollectionsFromClient: [],
-  setMarketplaceCollectionsFromClient: noop,
-  marketplaceCollectionPluginsMapFromClient: {},
-  setMarketplaceCollectionPluginsMapFromClient: noop,
-  isLoading: false,
-  isSuccessCollections: false,
-})
-
-type MarketplaceContextProviderProps = {
-  children: ReactNode
-  searchParams?: SearchParams
-  shouldExclude?: boolean
-  scrollContainerId?: string
-  showSearchParams?: boolean
-}
-
-export function useMarketplaceContext(selector: (value: MarketplaceContextValue) => any) {
-  return useContextSelector(MarketplaceContext, selector)
-}
-
-export const MarketplaceContextProvider = ({
-  children,
-  searchParams,
-  shouldExclude,
-  scrollContainerId,
-  showSearchParams,
-}: MarketplaceContextProviderProps) => {
-  const { data, isSuccess } = useInstalledPluginList(!shouldExclude)
-  const exclude = useMemo(() => {
-    if (shouldExclude)
-      return data?.plugins.map(plugin => plugin.plugin_id)
-  }, [data?.plugins, shouldExclude])
-  const queryFromSearchParams = searchParams?.q || ''
-  const tagsFromSearchParams = searchParams?.tags ? getValidTagKeys(searchParams.tags.split(',')) : []
-  const hasValidTags = !!tagsFromSearchParams.length
-  const hasValidCategory = getValidCategoryKeys(searchParams?.category)
-  const categoryFromSearchParams = hasValidCategory || PLUGIN_TYPE_SEARCH_MAP.all
-  const [intersected, setIntersected] = useState(true)
-  const [searchPluginText, setSearchPluginText] = useState(queryFromSearchParams)
-  const searchPluginTextRef = useRef(searchPluginText)
-  const [filterPluginTags, setFilterPluginTags] = useState<string[]>(tagsFromSearchParams)
-  const filterPluginTagsRef = useRef(filterPluginTags)
-  const [activePluginType, setActivePluginType] = useState(categoryFromSearchParams)
-  const activePluginTypeRef = useRef(activePluginType)
-  const [page, setPage] = useState(1)
-  const pageRef = useRef(page)
-  const [sort, setSort] = useState(DEFAULT_SORT)
-  const sortRef = useRef(sort)
-  const {
-    marketplaceCollections: marketplaceCollectionsFromClient,
-    setMarketplaceCollections: setMarketplaceCollectionsFromClient,
-    marketplaceCollectionPluginsMap: marketplaceCollectionPluginsMapFromClient,
-    setMarketplaceCollectionPluginsMap: setMarketplaceCollectionPluginsMapFromClient,
-    queryMarketplaceCollectionsAndPlugins,
-    isLoading,
-    isSuccess: isSuccessCollections,
-  } = useMarketplaceCollectionsAndPlugins()
-  const {
-    plugins,
-    total: pluginsTotal,
-    resetPlugins,
-    queryPlugins,
-    queryPluginsWithDebounced,
-    cancelQueryPluginsWithDebounced,
-    isLoading: isPluginsLoading,
-  } = useMarketplacePlugins()
-
-  useEffect(() => {
-    if (queryFromSearchParams || hasValidTags || hasValidCategory) {
-      queryPlugins({
-        query: queryFromSearchParams,
-        category: hasValidCategory,
-        tags: hasValidTags ? tagsFromSearchParams : [],
-        sortBy: sortRef.current.sortBy,
-        sortOrder: sortRef.current.sortOrder,
-        type: getMarketplaceListFilterType(activePluginTypeRef.current),
-        page: pageRef.current,
-      })
-      const url = new URL(window.location.href)
-      if (searchParams?.language)
-        url.searchParams.set('language', searchParams?.language)
-      history.replaceState({}, '', url)
-    }
-    else {
-      if (shouldExclude && isSuccess) {
-        queryMarketplaceCollectionsAndPlugins({
-          exclude,
-          type: getMarketplaceListFilterType(activePluginTypeRef.current),
-        })
-      }
-    }
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [queryPlugins, queryMarketplaceCollectionsAndPlugins, isSuccess, exclude])
-
-  const handleQueryMarketplaceCollectionsAndPlugins = useCallback(() => {
-    queryMarketplaceCollectionsAndPlugins({
-      category: activePluginTypeRef.current === PLUGIN_TYPE_SEARCH_MAP.all ? undefined : activePluginTypeRef.current,
-      condition: getMarketplaceListCondition(activePluginTypeRef.current),
-      exclude,
-      type: getMarketplaceListFilterType(activePluginTypeRef.current),
-    })
-    resetPlugins()
-  }, [exclude, queryMarketplaceCollectionsAndPlugins, resetPlugins])
-
-  const debouncedUpdateSearchParams = useMemo(() => debounce(() => {
-    updateSearchParams({
-      query: searchPluginTextRef.current,
-      category: activePluginTypeRef.current,
-      tags: filterPluginTagsRef.current,
-    })
-  }, 500), [])
-
-  const handleUpdateSearchParams = useCallback((debounced?: boolean) => {
-    if (!showSearchParams)
-      return
-    if (debounced) {
-      debouncedUpdateSearchParams()
-    }
-    else {
-      updateSearchParams({
-        query: searchPluginTextRef.current,
-        category: activePluginTypeRef.current,
-        tags: filterPluginTagsRef.current,
-      })
-    }
-  }, [debouncedUpdateSearchParams, showSearchParams])
-
-  const handleQueryPlugins = useCallback((debounced?: boolean) => {
-    handleUpdateSearchParams(debounced)
-    if (debounced) {
-      queryPluginsWithDebounced({
-        query: searchPluginTextRef.current,
-        category: activePluginTypeRef.current === PLUGIN_TYPE_SEARCH_MAP.all ? undefined : activePluginTypeRef.current,
-        tags: filterPluginTagsRef.current,
-        sortBy: sortRef.current.sortBy,
-        sortOrder: sortRef.current.sortOrder,
-        exclude,
-        type: getMarketplaceListFilterType(activePluginTypeRef.current),
-        page: pageRef.current,
-      })
-    }
-    else {
-      queryPlugins({
-        query: searchPluginTextRef.current,
-        category: activePluginTypeRef.current === PLUGIN_TYPE_SEARCH_MAP.all ? undefined : activePluginTypeRef.current,
-        tags: filterPluginTagsRef.current,
-        sortBy: sortRef.current.sortBy,
-        sortOrder: sortRef.current.sortOrder,
-        exclude,
-        type: getMarketplaceListFilterType(activePluginTypeRef.current),
-        page: pageRef.current,
-      })
-    }
-  }, [exclude, queryPluginsWithDebounced, queryPlugins, handleUpdateSearchParams])
-
-  const handleQuery = useCallback((debounced?: boolean) => {
-    if (!searchPluginTextRef.current && !filterPluginTagsRef.current.length) {
-      handleUpdateSearchParams(debounced)
-      cancelQueryPluginsWithDebounced()
-      handleQueryMarketplaceCollectionsAndPlugins()
-      return
-    }
-
-    handleQueryPlugins(debounced)
-  }, [handleQueryMarketplaceCollectionsAndPlugins, handleQueryPlugins, cancelQueryPluginsWithDebounced, handleUpdateSearchParams])
-
-  const handleSearchPluginTextChange = useCallback((text: string) => {
-    setSearchPluginText(text)
-    searchPluginTextRef.current = text
-    setPage(1)
-    pageRef.current = 1
-
-    handleQuery(true)
-  }, [handleQuery])
-
-  const handleFilterPluginTagsChange = useCallback((tags: string[]) => {
-    setFilterPluginTags(tags)
-    filterPluginTagsRef.current = tags
-    setPage(1)
-    pageRef.current = 1
-
-    handleQuery()
-  }, [handleQuery])
-
-  const handleActivePluginTypeChange = useCallback((type: string) => {
-    setActivePluginType(type)
-    activePluginTypeRef.current = type
-    setPage(1)
-    pageRef.current = 1
-
-    handleQuery()
-  }, [handleQuery])
-
-  const handleSortChange = useCallback((sort: PluginsSort) => {
-    setSort(sort)
-    sortRef.current = sort
-    setPage(1)
-    pageRef.current = 1
-
-    handleQueryPlugins()
-  }, [handleQueryPlugins])
-
-  const handlePageChange = useCallback(() => {
-    if (pluginsTotal && plugins && pluginsTotal > plugins.length) {
-      setPage(pageRef.current + 1)
-      pageRef.current++
-
-      handleQueryPlugins()
-    }
-  }, [handleQueryPlugins, plugins, pluginsTotal])
-
-  const handleMoreClick = useCallback((searchParams: SearchParamsFromCollection) => {
-    setSearchPluginText(searchParams?.query || '')
-    searchPluginTextRef.current = searchParams?.query || ''
-    setSort({
-      sortBy: searchParams?.sort_by || DEFAULT_SORT.sortBy,
-      sortOrder: searchParams?.sort_order || DEFAULT_SORT.sortOrder,
-    })
-    sortRef.current = {
-      sortBy: searchParams?.sort_by || DEFAULT_SORT.sortBy,
-      sortOrder: searchParams?.sort_order || DEFAULT_SORT.sortOrder,
-    }
-    setPage(1)
-    pageRef.current = 1
-
-    handleQueryPlugins()
-  }, [handleQueryPlugins])
-
-  useMarketplaceContainerScroll(handlePageChange, scrollContainerId)
-
-  return (
-    <MarketplaceContext.Provider
-      value={{
-        intersected,
-        setIntersected,
-        searchPluginText,
-        handleSearchPluginTextChange,
-        filterPluginTags,
-        handleFilterPluginTagsChange,
-        activePluginType,
-        handleActivePluginTypeChange,
-        page,
-        handlePageChange,
-        plugins,
-        pluginsTotal,
-        resetPlugins,
-        sort,
-        handleSortChange,
-        handleQueryPlugins,
-        handleMoreClick,
-        marketplaceCollectionsFromClient,
-        setMarketplaceCollectionsFromClient,
-        marketplaceCollectionPluginsMapFromClient,
-        setMarketplaceCollectionPluginsMapFromClient,
-        isLoading: isLoading || isPluginsLoading,
-        isSuccessCollections,
-      }}
-    >
-      {children}
-    </MarketplaceContext.Provider>
-  )
-}
diff --git a/app/components/plugins/marketplace/description/index.tsx b/app/components/plugins/marketplace/description/index.tsx
deleted file mode 100644
index 68a465d..0000000
--- a/app/components/plugins/marketplace/description/index.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import {
-  getLocaleOnServer,
-  useTranslation as translate,
-} from '@/i18n/server'
-
-type DescriptionProps = {
-  locale?: string
-}
-const Description = async ({
-  locale: localeFromProps,
-}: DescriptionProps) => {
-  const localeDefault = await getLocaleOnServer()
-  const { t } = await translate(localeFromProps || localeDefault, 'plugin')
-  const { t: tCommon } = await translate(localeFromProps || localeDefault, 'common')
-  const isZhHans = localeFromProps === 'zh-Hans'
-
-  return (
-    <>
-      <h1 className='title-4xl-semi-bold mb-2 shrink-0 text-center text-text-primary'>
-        {t('marketplace.empower')}
-      </h1>
-      <h2 className='body-md-regular flex shrink-0 items-center justify-center text-center text-text-tertiary'>
-        {
-          isZhHans && (
-            <>
-              <span className='mr-1'>{tCommon('operation.in')}</span>
-              {t('marketplace.difyMarketplace')}
-              {t('marketplace.discover')}
-            </>
-          )
-        }
-        {
-          !isZhHans && (
-            <>
-              {t('marketplace.discover')}
-            </>
-          )
-        }
-        <span className="body-md-medium relative z-[1] ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-          <span className='relative z-[2] lowercase'>{t('category.models')}</span>
-        </span>
-        ,
-        <span className="body-md-medium relative z-[1] ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-          <span className='relative z-[2] lowercase'>{t('category.tools')}</span>
-        </span>
-        ,
-        <span className="body-md-medium relative z-[1] ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-          <span className='relative z-[2] lowercase'>{t('category.agents')}</span>
-        </span>
-        ,
-        <span className="body-md-medium relative z-[1] ml-1 mr-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-          <span className='relative z-[2] lowercase'>{t('category.extensions')}</span>
-        </span>
-        {t('marketplace.and')}
-        <span className="body-md-medium relative z-[1] ml-1 mr-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-          <span className='relative z-[2] lowercase'>{t('category.bundles')}</span>
-        </span>
-        {
-          !isZhHans && (
-            <>
-              <span className='mr-1'>{tCommon('operation.in')}</span>
-              {t('marketplace.difyMarketplace')}
-            </>
-          )
-        }
-      </h2>
-    </>
-  )
-}
-
-export default Description
diff --git a/app/components/plugins/marketplace/empty/index.tsx b/app/components/plugins/marketplace/empty/index.tsx
deleted file mode 100644
index 441b100..0000000
--- a/app/components/plugins/marketplace/empty/index.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-'use client'
-import { Group } from '@/app/components/base/icons/src/vender/other'
-import Line from './line'
-import cn from '@/utils/classnames'
-import { useMixedTranslation } from '@/app/components/plugins/marketplace/hooks'
-
-type Props = {
-  text?: string
-  lightCard?: boolean
-  className?: string
-  locale?: string
-}
-
-const Empty = ({
-  text,
-  lightCard,
-  className,
-  locale,
-}: Props) => {
-  const { t } = useMixedTranslation(locale)
-
-  return (
-    <div
-      className={cn('relative flex h-0 grow flex-wrap overflow-hidden p-2', className)}
-    >
-      {
-        Array.from({ length: 16 }).map((_, index) => (
-          <div
-            key={index}
-            className={cn(
-              'mb-3 mr-3  h-[144px] w-[calc((100%-36px)/4)] rounded-xl bg-background-section-burn',
-              index % 4 === 3 && 'mr-0',
-              index > 11 && 'mb-0',
-              lightCard && 'bg-background-default-lighter opacity-75',
-            )}
-          >
-          </div>
-        ))
-      }
-      {
-        !lightCard && (
-          <div
-            className='absolute inset-0 z-[1] bg-marketplace-plugin-empty'
-          ></div>
-        )
-      }
-      <div className='absolute left-1/2 top-1/2 z-[2] flex -translate-x-1/2 -translate-y-1/2 flex-col items-center'>
-        <div className='relative mb-3 flex h-14 w-14 items-center justify-center rounded-xl border border-dashed border-divider-deep bg-components-card-bg shadow-lg'>
-          <Group className='h-5 w-5' />
-          <Line className='absolute right-[-1px] top-1/2 -translate-y-1/2' />
-          <Line className='absolute left-[-1px] top-1/2 -translate-y-1/2' />
-          <Line className='absolute left-1/2 top-0 -translate-x-1/2 -translate-y-1/2 rotate-90' />
-          <Line className='absolute left-1/2 top-full -translate-x-1/2 -translate-y-1/2 rotate-90' />
-        </div>
-        <div className='system-md-regular text-center text-text-tertiary'>
-          {text || t('plugin.marketplace.noPluginFound')}
-        </div>
-      </div>
-    </div>
-  )
-}
-
-export default Empty
diff --git a/app/components/plugins/marketplace/empty/line.tsx b/app/components/plugins/marketplace/empty/line.tsx
deleted file mode 100644
index 19837aa..0000000
--- a/app/components/plugins/marketplace/empty/line.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-type LineProps = {
-  className?: string
-}
-const Line = ({
-  className,
-}: LineProps) => {
-  return (
-    <svg xmlns="http://www.w3.org/2000/svg" width="2" height="241" viewBox="0 0 2 241" fill="none" className={className}>
-      <path d="M1 0.5L1 240.5" stroke="url(#paint0_linear_1989_74474)"/>
-      <defs>
-        <linearGradient id="paint0_linear_1989_74474" x1="-7.99584" y1="240.5" x2="-7.88094" y2="0.50004" gradientUnits="userSpaceOnUse">
-          <stop stopColor="white" stopOpacity="0.01"/>
-          <stop offset="0.503965" stopColor="#101828" stopOpacity="0.08"/>
-          <stop offset="1" stopColor="white" stopOpacity="0.01"/>
-        </linearGradient>
-      </defs>
-    </svg>
-  )
-}
-
-export default Line
diff --git a/app/components/plugins/marketplace/hooks.ts b/app/components/plugins/marketplace/hooks.ts
deleted file mode 100644
index c581ee0..0000000
--- a/app/components/plugins/marketplace/hooks.ts
+++ /dev/null
@@ -1,177 +0,0 @@
-import {
-  useCallback,
-  useEffect,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { useDebounceFn } from 'ahooks'
-import type {
-  Plugin,
-} from '../types'
-import type {
-  CollectionsAndPluginsSearchParams,
-  MarketplaceCollection,
-  PluginsSearchParams,
-} from './types'
-import {
-  getFormattedPlugin,
-  getMarketplaceCollectionsAndPlugins,
-} from './utils'
-import i18n from '@/i18n/i18next-config'
-import {
-  useMutationPluginsFromMarketplace,
-} from '@/service/use-plugins'
-
-export const useMarketplaceCollectionsAndPlugins = () => {
-  const [isLoading, setIsLoading] = useState(false)
-  const [isSuccess, setIsSuccess] = useState(false)
-  const [marketplaceCollections, setMarketplaceCollections] = useState<MarketplaceCollection[]>()
-  const [marketplaceCollectionPluginsMap, setMarketplaceCollectionPluginsMap] = useState<Record<string, Plugin[]>>()
-
-  const queryMarketplaceCollectionsAndPlugins = useCallback(async (query?: CollectionsAndPluginsSearchParams) => {
-    try {
-      setIsLoading(true)
-      setIsSuccess(false)
-      const { marketplaceCollections, marketplaceCollectionPluginsMap } = await getMarketplaceCollectionsAndPlugins(query)
-      setIsLoading(false)
-      setIsSuccess(true)
-      setMarketplaceCollections(marketplaceCollections)
-      setMarketplaceCollectionPluginsMap(marketplaceCollectionPluginsMap)
-    }
-    // eslint-disable-next-line unused-imports/no-unused-vars
-    catch (e) {
-      setIsLoading(false)
-      setIsSuccess(false)
-    }
-  }, [])
-
-  return {
-    marketplaceCollections,
-    setMarketplaceCollections,
-    marketplaceCollectionPluginsMap,
-    setMarketplaceCollectionPluginsMap,
-    queryMarketplaceCollectionsAndPlugins,
-    isLoading,
-    isSuccess,
-  }
-}
-
-export const useMarketplacePlugins = () => {
-  const {
-    data,
-    mutateAsync,
-    reset,
-    isPending,
-  } = useMutationPluginsFromMarketplace()
-
-  const [prevPlugins, setPrevPlugins] = useState<Plugin[] | undefined>()
-  const resetPlugins = useCallback(() => {
-    reset()
-    setPrevPlugins(undefined)
-  }, [reset])
-  const handleUpdatePlugins = useCallback((pluginsSearchParams: PluginsSearchParams) => {
-    mutateAsync(pluginsSearchParams).then((res) => {
-      const currentPage = pluginsSearchParams.page || 1
-      const resPlugins = res.data.bundles || res.data.plugins
-      if (currentPage > 1) {
-        setPrevPlugins(prevPlugins => [...(prevPlugins || []), ...resPlugins.map((plugin) => {
-          return getFormattedPlugin(plugin)
-        })])
-      }
-      else {
-        setPrevPlugins(resPlugins.map((plugin) => {
-          return getFormattedPlugin(plugin)
-        }))
-      }
-    })
-  }, [mutateAsync])
-  const queryPlugins = useCallback((pluginsSearchParams: PluginsSearchParams) => {
-    handleUpdatePlugins(pluginsSearchParams)
-  }, [handleUpdatePlugins])
-
-  const { run: queryPluginsWithDebounced, cancel: cancelQueryPluginsWithDebounced } = useDebounceFn((pluginsSearchParams: PluginsSearchParams) => {
-    handleUpdatePlugins(pluginsSearchParams)
-  }, {
-    wait: 500,
-  })
-
-  return {
-    plugins: prevPlugins,
-    total: data?.data?.total,
-    resetPlugins,
-    queryPlugins,
-    queryPluginsWithDebounced,
-    cancelQueryPluginsWithDebounced,
-    isLoading: isPending,
-  }
-}
-
-export const useMixedTranslation = (localeFromOuter?: string) => {
-  let t = useTranslation().t
-
-  if (localeFromOuter)
-    t = i18n.getFixedT(localeFromOuter)
-
-  return {
-    t,
-  }
-}
-
-export const useMarketplaceContainerScroll = (
-  callback: () => void,
-  scrollContainerId = 'marketplace-container',
-) => {
-  const container = document.getElementById(scrollContainerId)
-
-  const handleScroll = useCallback((e: Event) => {
-    const target = e.target as HTMLDivElement
-    const {
-      scrollTop,
-      scrollHeight,
-      clientHeight,
-    } = target
-    if (scrollTop + clientHeight >= scrollHeight - 5 && scrollTop > 0)
-      callback()
-  }, [callback])
-
-  useEffect(() => {
-    if (container)
-      container.addEventListener('scroll', handleScroll)
-
-    return () => {
-      if (container)
-        container.removeEventListener('scroll', handleScroll)
-    }
-  }, [container, handleScroll])
-}
-
-export const useSearchBoxAutoAnimate = (searchBoxAutoAnimate?: boolean) => {
-  const [searchBoxCanAnimate, setSearchBoxCanAnimate] = useState(true)
-
-  const handleSearchBoxCanAnimateChange = useCallback(() => {
-    if (!searchBoxAutoAnimate) {
-      const clientWidth = document.documentElement.clientWidth
-
-      if (clientWidth < 1400)
-        setSearchBoxCanAnimate(false)
-      else
-        setSearchBoxCanAnimate(true)
-    }
-  }, [searchBoxAutoAnimate])
-
-  useEffect(() => {
-    handleSearchBoxCanAnimateChange()
-  }, [handleSearchBoxCanAnimateChange])
-
-  useEffect(() => {
-    window.addEventListener('resize', handleSearchBoxCanAnimateChange)
-
-    return () => {
-      window.removeEventListener('resize', handleSearchBoxCanAnimateChange)
-    }
-  }, [handleSearchBoxCanAnimateChange])
-
-  return {
-    searchBoxCanAnimate,
-  }
-}
diff --git a/app/components/plugins/marketplace/index.tsx b/app/components/plugins/marketplace/index.tsx
deleted file mode 100644
index 7a29556..0000000
--- a/app/components/plugins/marketplace/index.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import { MarketplaceContextProvider } from './context'
-import Description from './description'
-import IntersectionLine from './intersection-line'
-import SearchBoxWrapper from './search-box/search-box-wrapper'
-import PluginTypeSwitch from './plugin-type-switch'
-import ListWrapper from './list/list-wrapper'
-import type { SearchParams } from './types'
-import { getMarketplaceCollectionsAndPlugins } from './utils'
-import { TanstackQueryIniter } from '@/context/query-client'
-
-type MarketplaceProps = {
-  locale: string
-  searchBoxAutoAnimate?: boolean
-  showInstallButton?: boolean
-  shouldExclude?: boolean
-  searchParams?: SearchParams
-  pluginTypeSwitchClassName?: string
-  intersectionContainerId?: string
-  scrollContainerId?: string
-  showSearchParams?: boolean
-}
-const Marketplace = async ({
-  locale,
-  searchBoxAutoAnimate = true,
-  showInstallButton = true,
-  shouldExclude,
-  searchParams,
-  pluginTypeSwitchClassName,
-  intersectionContainerId,
-  scrollContainerId,
-  showSearchParams = true,
-}: MarketplaceProps) => {
-  let marketplaceCollections: any = []
-  let marketplaceCollectionPluginsMap = {}
-  if (!shouldExclude) {
-    const marketplaceCollectionsAndPluginsData = await getMarketplaceCollectionsAndPlugins()
-    marketplaceCollections = marketplaceCollectionsAndPluginsData.marketplaceCollections
-    marketplaceCollectionPluginsMap = marketplaceCollectionsAndPluginsData.marketplaceCollectionPluginsMap
-  }
-
-  return (
-    <TanstackQueryIniter>
-      <MarketplaceContextProvider
-        searchParams={searchParams}
-        shouldExclude={shouldExclude}
-        scrollContainerId={scrollContainerId}
-        showSearchParams={showSearchParams}
-      >
-        <Description locale={locale} />
-        <IntersectionLine intersectionContainerId={intersectionContainerId} />
-        <SearchBoxWrapper
-          locale={locale}
-          searchBoxAutoAnimate={searchBoxAutoAnimate}
-        />
-        <PluginTypeSwitch
-          locale={locale}
-          className={pluginTypeSwitchClassName}
-          searchBoxAutoAnimate={searchBoxAutoAnimate}
-          showSearchParams={showSearchParams}
-        />
-        <ListWrapper
-          locale={locale}
-          marketplaceCollections={marketplaceCollections}
-          marketplaceCollectionPluginsMap={marketplaceCollectionPluginsMap}
-          showInstallButton={showInstallButton}
-        />
-      </MarketplaceContextProvider>
-    </TanstackQueryIniter>
-  )
-}
-
-export default Marketplace
diff --git a/app/components/plugins/marketplace/intersection-line/hooks.ts b/app/components/plugins/marketplace/intersection-line/hooks.ts
deleted file mode 100644
index fe30b70..0000000
--- a/app/components/plugins/marketplace/intersection-line/hooks.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { useEffect } from 'react'
-import { useMarketplaceContext } from '@/app/components/plugins/marketplace/context'
-
-export const useScrollIntersection = (
-  anchorRef: React.RefObject<HTMLDivElement>,
-  intersectionContainerId = 'marketplace-container',
-) => {
-  const intersected = useMarketplaceContext(v => v.intersected)
-  const setIntersected = useMarketplaceContext(v => v.setIntersected)
-
-  useEffect(() => {
-    const container = document.getElementById(intersectionContainerId)
-    let observer: IntersectionObserver | undefined
-    if (container && anchorRef.current) {
-      observer = new IntersectionObserver((entries) => {
-        const isIntersecting = entries[0].isIntersecting
-
-        if (isIntersecting && !intersected)
-          setIntersected(true)
-
-        if (!isIntersecting && intersected)
-          setIntersected(false)
-      }, {
-        root: container,
-      })
-      observer.observe(anchorRef.current)
-    }
-    return () => observer?.disconnect()
-  }, [anchorRef, intersected, setIntersected, intersectionContainerId])
-}
diff --git a/app/components/plugins/marketplace/intersection-line/index.tsx b/app/components/plugins/marketplace/intersection-line/index.tsx
deleted file mode 100644
index 1a728e1..0000000
--- a/app/components/plugins/marketplace/intersection-line/index.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-'use client'
-
-import { useRef } from 'react'
-import { useScrollIntersection } from './hooks'
-
-type IntersectionLineProps = {
-  intersectionContainerId?: string
-}
-const IntersectionLine = ({
-  intersectionContainerId,
-}: IntersectionLineProps) => {
-  const ref = useRef<HTMLDivElement>(null)
-
-  useScrollIntersection(ref, intersectionContainerId)
-
-  return (
-    <div ref={ref} className='mb-4 h-[1px] shrink-0 bg-transparent'></div>
-  )
-}
-
-export default IntersectionLine
diff --git a/app/components/plugins/marketplace/list/card-wrapper.tsx b/app/components/plugins/marketplace/list/card-wrapper.tsx
deleted file mode 100644
index 2751155..0000000
--- a/app/components/plugins/marketplace/list/card-wrapper.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-'use client'
-import { useTheme } from 'next-themes'
-import { RiArrowRightUpLine } from '@remixicon/react'
-import { getPluginLinkInMarketplace } from '../utils'
-import Card from '@/app/components/plugins/card'
-import CardMoreInfo from '@/app/components/plugins/card/card-more-info'
-import type { Plugin } from '@/app/components/plugins/types'
-import Button from '@/app/components/base/button'
-import { useMixedTranslation } from '@/app/components/plugins/marketplace/hooks'
-import InstallFromMarketplace from '@/app/components/plugins/install-plugin/install-from-marketplace'
-import { useBoolean } from 'ahooks'
-import { useI18N } from '@/context/i18n'
-import { useTags } from '@/app/components/plugins/hooks'
-
-type CardWrapperProps = {
-  plugin: Plugin
-  showInstallButton?: boolean
-  locale?: string
-}
-const CardWrapper = ({
-  plugin,
-  showInstallButton,
-  locale,
-}: CardWrapperProps) => {
-  const { t } = useMixedTranslation(locale)
-  const { theme } = useTheme()
-  const [isShowInstallFromMarketplace, {
-    setTrue: showInstallFromMarketplace,
-    setFalse: hideInstallFromMarketplace,
-  }] = useBoolean(false)
-  const { locale: localeFromLocale } = useI18N()
-  const { tagsMap } = useTags(t)
-
-  if (showInstallButton) {
-    return (
-      <div
-        className='group relative cursor-pointer rounded-xl  hover:bg-components-panel-on-panel-item-bg-hover'
-      >
-        <Card
-          key={plugin.name}
-          payload={plugin}
-          locale={locale}
-          footer={
-            <CardMoreInfo
-              downloadCount={plugin.install_count}
-              tags={plugin.tags.map(tag => tagsMap[tag.name].label)}
-            />
-          }
-        />
-        {
-          <div className='absolute bottom-0 hidden w-full items-center space-x-2 rounded-b-xl bg-gradient-to-tr from-components-panel-on-panel-item-bg to-background-gradient-mask-transparent px-4 pb-4 pt-8 group-hover:flex'>
-            <Button
-              variant='primary'
-              className='w-[calc(50%-4px)]'
-              onClick={showInstallFromMarketplace}
-            >
-              {t('plugin.detailPanel.operation.install')}
-            </Button>
-            <a href={`${getPluginLinkInMarketplace(plugin)}?language=${localeFromLocale}${theme ? `&theme=${theme}` : ''}`} target='_blank' className='block w-[calc(50%-4px)] flex-1 shrink-0'>
-              <Button
-                className='w-full gap-0.5'
-              >
-                {t('plugin.detailPanel.operation.detail')}
-                <RiArrowRightUpLine className='ml-1 h-4 w-4' />
-              </Button>
-            </a>
-          </div>
-        }
-        {
-          isShowInstallFromMarketplace && (
-            <InstallFromMarketplace
-              manifest={plugin}
-              uniqueIdentifier={plugin.latest_package_identifier}
-              onClose={hideInstallFromMarketplace}
-              onSuccess={hideInstallFromMarketplace}
-            />
-          )
-        }
-      </div>
-    )
-  }
-
-  return (
-    <a
-      className='group relative inline-block cursor-pointer rounded-xl'
-      href={getPluginLinkInMarketplace(plugin)}
-    >
-      <Card
-        key={plugin.name}
-        payload={plugin}
-        locale={locale}
-        footer={
-          <CardMoreInfo
-            downloadCount={plugin.install_count}
-            tags={plugin.tags.map(tag => tagsMap[tag.name].label)}
-          />
-        }
-      />
-    </a>
-  )
-}
-
-export default CardWrapper
diff --git a/app/components/plugins/marketplace/list/index.tsx b/app/components/plugins/marketplace/list/index.tsx
deleted file mode 100644
index 5651512..0000000
--- a/app/components/plugins/marketplace/list/index.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-'use client'
-import type { Plugin } from '../../types'
-import type { MarketplaceCollection } from '../types'
-import ListWithCollection from './list-with-collection'
-import CardWrapper from './card-wrapper'
-import Empty from '../empty'
-import cn from '@/utils/classnames'
-
-type ListProps = {
-  marketplaceCollections: MarketplaceCollection[]
-  marketplaceCollectionPluginsMap: Record<string, Plugin[]>
-  plugins?: Plugin[]
-  showInstallButton?: boolean
-  locale: string
-  cardContainerClassName?: string
-  cardRender?: (plugin: Plugin) => React.JSX.Element | null
-  onMoreClick?: () => void
-  emptyClassName?: string
-}
-const List = ({
-  marketplaceCollections,
-  marketplaceCollectionPluginsMap,
-  plugins,
-  showInstallButton,
-  locale,
-  cardContainerClassName,
-  cardRender,
-  onMoreClick,
-  emptyClassName,
-}: ListProps) => {
-  return (
-    <>
-      {
-        !plugins && (
-          <ListWithCollection
-            marketplaceCollections={marketplaceCollections}
-            marketplaceCollectionPluginsMap={marketplaceCollectionPluginsMap}
-            showInstallButton={showInstallButton}
-            locale={locale}
-            cardContainerClassName={cardContainerClassName}
-            cardRender={cardRender}
-            onMoreClick={onMoreClick}
-          />
-        )
-      }
-      {
-        plugins && !!plugins.length && (
-          <div className={cn(
-            'grid grid-cols-4 gap-3',
-            cardContainerClassName,
-          )}>
-            {
-              plugins.map((plugin) => {
-                if (cardRender)
-                  return cardRender(plugin)
-
-                return (
-                  <CardWrapper
-                    key={plugin.name}
-                    plugin={plugin}
-                    showInstallButton={showInstallButton}
-                    locale={locale}
-                  />
-                )
-              })
-            }
-          </div>
-        )
-      }
-      {
-        plugins && !plugins.length && (
-          <Empty className={emptyClassName} locale={locale} />
-        )
-      }
-    </>
-  )
-}
-
-export default List
diff --git a/app/components/plugins/marketplace/list/list-with-collection.tsx b/app/components/plugins/marketplace/list/list-with-collection.tsx
deleted file mode 100644
index 4c396c5..0000000
--- a/app/components/plugins/marketplace/list/list-with-collection.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-'use client'
-
-import { RiArrowRightSLine } from '@remixicon/react'
-import type { MarketplaceCollection } from '../types'
-import CardWrapper from './card-wrapper'
-import type { Plugin } from '@/app/components/plugins/types'
-import { getLanguage } from '@/i18n/language'
-import cn from '@/utils/classnames'
-import type { SearchParamsFromCollection } from '@/app/components/plugins/marketplace/types'
-import { useMixedTranslation } from '@/app/components/plugins/marketplace/hooks'
-
-type ListWithCollectionProps = {
-  marketplaceCollections: MarketplaceCollection[]
-  marketplaceCollectionPluginsMap: Record<string, Plugin[]>
-  showInstallButton?: boolean
-  locale: string
-  cardContainerClassName?: string
-  cardRender?: (plugin: Plugin) => React.JSX.Element | null
-  onMoreClick?: (searchParams?: SearchParamsFromCollection) => void
-}
-const ListWithCollection = ({
-  marketplaceCollections,
-  marketplaceCollectionPluginsMap,
-  showInstallButton,
-  locale,
-  cardContainerClassName,
-  cardRender,
-  onMoreClick,
-}: ListWithCollectionProps) => {
-  const { t } = useMixedTranslation(locale)
-
-  return (
-    <>
-      {
-        marketplaceCollections.filter((collection) => {
-          return marketplaceCollectionPluginsMap[collection.name]?.length
-        }).map(collection => (
-          <div
-            key={collection.name}
-            className='py-3'
-          >
-            <div className='flex items-end justify-between'>
-              <div>
-                <div className='title-xl-semi-bold text-text-primary'>{collection.label[getLanguage(locale)]}</div>
-                <div className='system-xs-regular text-text-tertiary'>{collection.description[getLanguage(locale)]}</div>
-              </div>
-              {
-                collection.searchable && onMoreClick && (
-                  <div
-                    className='system-xs-medium flex cursor-pointer items-center text-text-accent '
-                    onClick={() => onMoreClick?.(collection.search_params)}
-                  >
-                    {t('plugin.marketplace.viewMore')}
-                    <RiArrowRightSLine className='h-4 w-4' />
-                  </div>
-                )
-              }
-            </div>
-            <div className={cn(
-              'mt-2 grid grid-cols-4 gap-3',
-              cardContainerClassName,
-            )}>
-              {
-                marketplaceCollectionPluginsMap[collection.name].map((plugin) => {
-                  if (cardRender)
-                    return cardRender(plugin)
-
-                  return (
-                    <CardWrapper
-                      key={plugin.plugin_id}
-                      plugin={plugin}
-                      showInstallButton={showInstallButton}
-                      locale={locale}
-                    />
-                  )
-                })
-              }
-            </div>
-          </div>
-        ))
-      }
-    </>
-  )
-}
-
-export default ListWithCollection
diff --git a/app/components/plugins/marketplace/list/list-wrapper.tsx b/app/components/plugins/marketplace/list/list-wrapper.tsx
deleted file mode 100644
index fa6521b..0000000
--- a/app/components/plugins/marketplace/list/list-wrapper.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-import { useEffect } from 'react'
-import type { Plugin } from '../../types'
-import type { MarketplaceCollection } from '../types'
-import { useMarketplaceContext } from '../context'
-import List from './index'
-import SortDropdown from '../sort-dropdown'
-import Loading from '@/app/components/base/loading'
-import { useMixedTranslation } from '@/app/components/plugins/marketplace/hooks'
-
-type ListWrapperProps = {
-  marketplaceCollections: MarketplaceCollection[]
-  marketplaceCollectionPluginsMap: Record<string, Plugin[]>
-  showInstallButton?: boolean
-  locale: string
-}
-const ListWrapper = ({
-  marketplaceCollections,
-  marketplaceCollectionPluginsMap,
-  showInstallButton,
-  locale,
-}: ListWrapperProps) => {
-  const { t } = useMixedTranslation(locale)
-  const plugins = useMarketplaceContext(v => v.plugins)
-  const pluginsTotal = useMarketplaceContext(v => v.pluginsTotal)
-  const marketplaceCollectionsFromClient = useMarketplaceContext(v => v.marketplaceCollectionsFromClient)
-  const marketplaceCollectionPluginsMapFromClient = useMarketplaceContext(v => v.marketplaceCollectionPluginsMapFromClient)
-  const isLoading = useMarketplaceContext(v => v.isLoading)
-  const isSuccessCollections = useMarketplaceContext(v => v.isSuccessCollections)
-  const handleQueryPlugins = useMarketplaceContext(v => v.handleQueryPlugins)
-  const page = useMarketplaceContext(v => v.page)
-  const handleMoreClick = useMarketplaceContext(v => v.handleMoreClick)
-
-  useEffect(() => {
-    if (!marketplaceCollectionsFromClient?.length && isSuccessCollections)
-      handleQueryPlugins()
-  }, [handleQueryPlugins, marketplaceCollections, marketplaceCollectionsFromClient, isSuccessCollections])
-
-  return (
-    <div
-      style={{ scrollbarGutter: 'stable' }}
-      className='relative flex grow flex-col bg-background-default-subtle px-12 py-2'>
-      {
-        plugins && (
-          <div className='mb-4 flex items-center pt-3'>
-            <div className='title-xl-semi-bold text-text-primary'>{t('plugin.marketplace.pluginsResult', { num: pluginsTotal })}</div>
-            <div className='mx-3 h-3.5 w-[1px] bg-divider-regular'></div>
-            <SortDropdown locale={locale} />
-          </div>
-        )
-      }
-      {
-        isLoading && page === 1 && (
-          <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2'>
-            <Loading />
-          </div>
-        )
-      }
-      {
-        (!isLoading || page > 1) && (
-          <List
-            marketplaceCollections={marketplaceCollectionsFromClient || marketplaceCollections}
-            marketplaceCollectionPluginsMap={marketplaceCollectionPluginsMapFromClient || marketplaceCollectionPluginsMap}
-            plugins={plugins}
-            showInstallButton={showInstallButton}
-            locale={locale}
-            onMoreClick={handleMoreClick}
-          />
-        )
-      }
-    </div>
-  )
-}
-
-export default ListWrapper
diff --git a/app/components/plugins/marketplace/plugin-type-switch.tsx b/app/components/plugins/marketplace/plugin-type-switch.tsx
deleted file mode 100644
index 9c071c5..0000000
--- a/app/components/plugins/marketplace/plugin-type-switch.tsx
+++ /dev/null
@@ -1,120 +0,0 @@
-'use client'
-import {
-  RiArchive2Line,
-  RiBrain2Line,
-  RiHammerLine,
-  RiPuzzle2Line,
-  RiSpeakAiLine,
-} from '@remixicon/react'
-import { PluginType } from '../types'
-import { useMarketplaceContext } from './context'
-import {
-  useMixedTranslation,
-  useSearchBoxAutoAnimate,
-} from './hooks'
-import cn from '@/utils/classnames'
-import { useCallback, useEffect } from 'react'
-
-export const PLUGIN_TYPE_SEARCH_MAP = {
-  all: 'all',
-  model: PluginType.model,
-  tool: PluginType.tool,
-  agent: PluginType.agent,
-  extension: PluginType.extension,
-  bundle: 'bundle',
-}
-type PluginTypeSwitchProps = {
-  locale?: string
-  className?: string
-  searchBoxAutoAnimate?: boolean
-  showSearchParams?: boolean
-}
-const PluginTypeSwitch = ({
-  locale,
-  className,
-  searchBoxAutoAnimate,
-  showSearchParams,
-}: PluginTypeSwitchProps) => {
-  const { t } = useMixedTranslation(locale)
-  const activePluginType = useMarketplaceContext(s => s.activePluginType)
-  const handleActivePluginTypeChange = useMarketplaceContext(s => s.handleActivePluginTypeChange)
-  const { searchBoxCanAnimate } = useSearchBoxAutoAnimate(searchBoxAutoAnimate)
-
-  const options = [
-    {
-      value: PLUGIN_TYPE_SEARCH_MAP.all,
-      text: t('plugin.category.all'),
-      icon: null,
-    },
-    {
-      value: PLUGIN_TYPE_SEARCH_MAP.model,
-      text: t('plugin.category.models'),
-      icon: <RiBrain2Line className='mr-1.5 h-4 w-4' />,
-    },
-    {
-      value: PLUGIN_TYPE_SEARCH_MAP.tool,
-      text: t('plugin.category.tools'),
-      icon: <RiHammerLine className='mr-1.5 h-4 w-4' />,
-    },
-    {
-      value: PLUGIN_TYPE_SEARCH_MAP.agent,
-      text: t('plugin.category.agents'),
-      icon: <RiSpeakAiLine className='mr-1.5 h-4 w-4' />,
-    },
-    {
-      value: PLUGIN_TYPE_SEARCH_MAP.extension,
-      text: t('plugin.category.extensions'),
-      icon: <RiPuzzle2Line className='mr-1.5 h-4 w-4' />,
-    },
-    {
-      value: PLUGIN_TYPE_SEARCH_MAP.bundle,
-      text: t('plugin.category.bundles'),
-      icon: <RiArchive2Line className='mr-1.5 h-4 w-4' />,
-    },
-  ]
-
-  const handlePopState = useCallback(() => {
-    if (!showSearchParams)
-      return
-    const url = new URL(window.location.href)
-    const category = url.searchParams.get('category') || PLUGIN_TYPE_SEARCH_MAP.all
-    handleActivePluginTypeChange(category)
-  }, [showSearchParams, handleActivePluginTypeChange])
-
-  useEffect(() => {
-    window.addEventListener('popstate', () => {
-      handlePopState()
-    })
-    return () => {
-      window.removeEventListener('popstate', handlePopState)
-    }
-  }, [handlePopState])
-
-  return (
-    <div className={cn(
-      'flex shrink-0 items-center justify-center space-x-2 bg-background-body py-3',
-      searchBoxCanAnimate && 'sticky top-[56px] z-10',
-      className,
-    )}>
-      {
-        options.map(option => (
-          <div
-            key={option.value}
-            className={cn(
-              'system-md-medium flex h-8 cursor-pointer items-center rounded-xl border border-transparent px-3 text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary',
-              activePluginType === option.value && 'border-components-main-nav-nav-button-border !bg-components-main-nav-nav-button-bg-active !text-components-main-nav-nav-button-text-active shadow-xs',
-            )}
-            onClick={() => {
-              handleActivePluginTypeChange(option.value)
-            }}
-          >
-            {option.icon}
-            {option.text}
-          </div>
-        ))
-      }
-    </div>
-  )
-}
-
-export default PluginTypeSwitch
diff --git a/app/components/plugins/marketplace/search-box/index.tsx b/app/components/plugins/marketplace/search-box/index.tsx
deleted file mode 100644
index 2170078..0000000
--- a/app/components/plugins/marketplace/search-box/index.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client'
-import { RiCloseLine } from '@remixicon/react'
-import TagsFilter from './tags-filter'
-import ActionButton from '@/app/components/base/action-button'
-import cn from '@/utils/classnames'
-
-type SearchBoxProps = {
-  search: string
-  onSearchChange: (search: string) => void
-  inputClassName?: string
-  tags: string[]
-  onTagsChange: (tags: string[]) => void
-  size?: 'small' | 'large'
-  placeholder?: string
-  locale?: string
-}
-const SearchBox = ({
-  search,
-  onSearchChange,
-  inputClassName,
-  tags,
-  onTagsChange,
-  size = 'small',
-  placeholder = '',
-  locale,
-}: SearchBoxProps) => {
-  return (
-    <div
-      className={cn(
-        'z-[11] flex items-center',
-        size === 'large' && 'rounded-xl border border-components-chat-input-border bg-components-panel-bg-blur p-1.5 shadow-md',
-        size === 'small' && 'rounded-lg bg-components-input-bg-normal p-0.5',
-        inputClassName,
-      )}
-    >
-      <TagsFilter
-        tags={tags}
-        onTagsChange={onTagsChange}
-        size={size}
-        locale={locale}
-      />
-      <div className='mx-1 h-3.5 w-[1px] bg-divider-regular'></div>
-      <div className='relative flex grow items-center p-1 pl-2'>
-        <div className='mr-2 flex w-full items-center'>
-          <input
-            className={cn(
-              'body-md-medium block grow appearance-none bg-transparent text-text-secondary outline-none',
-            )}
-            value={search}
-            onChange={(e) => {
-              onSearchChange(e.target.value)
-            }}
-            placeholder={placeholder}
-          />
-          {
-            search && (
-              <div className='absolute right-2 top-1/2 -translate-y-1/2'>
-                <ActionButton onClick={() => onSearchChange('')}>
-                  <RiCloseLine className='h-4 w-4' />
-                </ActionButton>
-              </div>
-            )
-          }
-        </div>
-      </div>
-    </div>
-  )
-}
-
-export default SearchBox
diff --git a/app/components/plugins/marketplace/search-box/search-box-wrapper.tsx b/app/components/plugins/marketplace/search-box/search-box-wrapper.tsx
deleted file mode 100644
index 772bd4c..0000000
--- a/app/components/plugins/marketplace/search-box/search-box-wrapper.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-'use client'
-
-import { useMarketplaceContext } from '../context'
-import {
-  useMixedTranslation,
-  useSearchBoxAutoAnimate,
-} from '../hooks'
-import SearchBox from './index'
-import cn from '@/utils/classnames'
-
-type SearchBoxWrapperProps = {
-  locale?: string
-  searchBoxAutoAnimate?: boolean
-}
-const SearchBoxWrapper = ({
-  locale,
-  searchBoxAutoAnimate,
-}: SearchBoxWrapperProps) => {
-  const { t } = useMixedTranslation(locale)
-  const intersected = useMarketplaceContext(v => v.intersected)
-  const searchPluginText = useMarketplaceContext(v => v.searchPluginText)
-  const handleSearchPluginTextChange = useMarketplaceContext(v => v.handleSearchPluginTextChange)
-  const filterPluginTags = useMarketplaceContext(v => v.filterPluginTags)
-  const handleFilterPluginTagsChange = useMarketplaceContext(v => v.handleFilterPluginTagsChange)
-  const { searchBoxCanAnimate } = useSearchBoxAutoAnimate(searchBoxAutoAnimate)
-
-  return (
-    <SearchBox
-      inputClassName={cn(
-        'z-[0] mx-auto w-[640px] shrink-0',
-        searchBoxCanAnimate && 'sticky top-3 z-[11]',
-        !intersected && searchBoxCanAnimate && 'w-[508px] transition-[width] duration-300',
-      )}
-      search={searchPluginText}
-      onSearchChange={handleSearchPluginTextChange}
-      tags={filterPluginTags}
-      onTagsChange={handleFilterPluginTagsChange}
-      size='large'
-      locale={locale}
-      placeholder={t('plugin.searchPlugins')}
-    />
-  )
-}
-
-export default SearchBoxWrapper
diff --git a/app/components/plugins/marketplace/search-box/tags-filter.tsx b/app/components/plugins/marketplace/search-box/tags-filter.tsx
deleted file mode 100644
index edf50dc..0000000
--- a/app/components/plugins/marketplace/search-box/tags-filter.tsx
+++ /dev/null
@@ -1,138 +0,0 @@
-'use client'
-
-import { useState } from 'react'
-import {
-  RiArrowDownSLine,
-  RiCloseCircleFill,
-  RiFilter3Line,
-} from '@remixicon/react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Checkbox from '@/app/components/base/checkbox'
-import cn from '@/utils/classnames'
-import Input from '@/app/components/base/input'
-import { useTags } from '@/app/components/plugins/hooks'
-import { useMixedTranslation } from '@/app/components/plugins/marketplace/hooks'
-
-type TagsFilterProps = {
-  tags: string[]
-  onTagsChange: (tags: string[]) => void
-  size: 'small' | 'large'
-  locale?: string
-}
-const TagsFilter = ({
-  tags,
-  onTagsChange,
-  size,
-  locale,
-}: TagsFilterProps) => {
-  const { t } = useMixedTranslation(locale)
-  const [open, setOpen] = useState(false)
-  const [searchText, setSearchText] = useState('')
-  const { tags: options, tagsMap } = useTags(t)
-  const filteredOptions = options.filter(option => option.label.toLowerCase().includes(searchText.toLowerCase()))
-  const handleCheck = (id: string) => {
-    if (tags.includes(id))
-      onTagsChange(tags.filter((tag: string) => tag !== id))
-    else
-      onTagsChange([...tags, id])
-  }
-  const selectedTagsLength = tags.length
-
-  return (
-    <PortalToFollowElem
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-        crossAxis: -6,
-      }}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger
-        className='shrink-0'
-        onClick={() => setOpen(v => !v)}
-      >
-        <div className={cn(
-          'flex cursor-pointer items-center rounded-lg text-text-tertiary hover:bg-state-base-hover',
-          size === 'large' && 'h-8 px-2 py-1',
-          size === 'small' && 'h-7 py-0.5 pl-1 pr-1.5 ',
-          selectedTagsLength && 'text-text-secondary',
-          open && 'bg-state-base-hover',
-        )}>
-          <div className='p-0.5'>
-            <RiFilter3Line className='h-4 w-4' />
-          </div>
-          <div className={cn(
-            'system-sm-medium flex items-center p-1',
-            size === 'large' && 'p-1',
-            size === 'small' && 'px-0.5 py-1',
-          )}>
-            {
-              !selectedTagsLength && t('pluginTags.allTags')
-            }
-            {
-              !!selectedTagsLength && tags.map(tag => tagsMap[tag].label).slice(0, 2).join(',')
-            }
-            {
-              selectedTagsLength > 2 && (
-                <div className='system-xs-medium ml-1 text-text-tertiary'>
-                  +{selectedTagsLength - 2}
-                </div>
-              )
-            }
-          </div>
-          {
-            !!selectedTagsLength && (
-              <RiCloseCircleFill
-                className='h-4 w-4 cursor-pointer text-text-quaternary'
-                onClick={() => onTagsChange([])}
-              />
-            )
-          }
-          {
-            !selectedTagsLength && (
-              <RiArrowDownSLine className='h-4 w-4' />
-            )
-          }
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className='w-[240px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg'>
-          <div className='p-2 pb-1'>
-            <Input
-              showLeftIcon
-              value={searchText}
-              onChange={e => setSearchText(e.target.value)}
-              placeholder={t('pluginTags.searchTags') || ''}
-            />
-          </div>
-          <div className='max-h-[448px] overflow-y-auto p-1'>
-            {
-              filteredOptions.map(option => (
-                <div
-                  key={option.name}
-                  className='flex h-7 cursor-pointer items-center rounded-lg px-2 py-1.5 hover:bg-state-base-hover'
-                  onClick={() => handleCheck(option.name)}
-                >
-                  <Checkbox
-                    className='mr-1'
-                    checked={tags.includes(option.name)}
-                  />
-                  <div className='system-sm-medium px-1 text-text-secondary'>
-                    {option.label}
-                  </div>
-                </div>
-              ))
-            }
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default TagsFilter
diff --git a/app/components/plugins/marketplace/sort-dropdown/index.tsx b/app/components/plugins/marketplace/sort-dropdown/index.tsx
deleted file mode 100644
index f78c506..0000000
--- a/app/components/plugins/marketplace/sort-dropdown/index.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-'use client'
-import { useState } from 'react'
-import {
-  RiArrowDownSLine,
-  RiCheckLine,
-} from '@remixicon/react'
-import { useMarketplaceContext } from '../context'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import { useMixedTranslation } from '@/app/components/plugins/marketplace/hooks'
-
-type SortDropdownProps = {
-  locale?: string
-}
-const SortDropdown = ({
-  locale,
-}: SortDropdownProps) => {
-  const { t } = useMixedTranslation(locale)
-  const options = [
-    {
-      value: 'install_count',
-      order: 'DESC',
-      text: t('plugin.marketplace.sortOption.mostPopular'),
-    },
-    {
-      value: 'version_updated_at',
-      order: 'DESC',
-      text: t('plugin.marketplace.sortOption.recentlyUpdated'),
-    },
-    {
-      value: 'created_at',
-      order: 'DESC',
-      text: t('plugin.marketplace.sortOption.newlyReleased'),
-    },
-    {
-      value: 'created_at',
-      order: 'ASC',
-      text: t('plugin.marketplace.sortOption.firstReleased'),
-    },
-  ]
-  const sort = useMarketplaceContext(v => v.sort)
-  const handleSortChange = useMarketplaceContext(v => v.handleSortChange)
-  const [open, setOpen] = useState(false)
-  const selectedOption = options.find(option => option.value === sort.sortBy && option.order === sort.sortOrder)!
-
-  return (
-    <PortalToFollowElem
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
-        <div className='flex h-8 cursor-pointer items-center rounded-lg bg-state-base-hover-alt px-2 pr-3'>
-          <span className='system-sm-regular mr-1 text-text-secondary'>
-            {t('plugin.marketplace.sortBy')}
-          </span>
-          <span className='system-sm-medium mr-1 text-text-primary'>
-            {selectedOption.text}
-          </span>
-          <RiArrowDownSLine className='h-4 w-4 text-text-tertiary' />
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent>
-        <div className='rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg backdrop-blur-sm'>
-          {
-            options.map(option => (
-              <div
-                key={`${option.value}-${option.order}`}
-                className='system-md-regular flex h-8 cursor-pointer items-center justify-between rounded-lg px-3 pr-2 text-text-primary hover:bg-components-panel-on-panel-item-bg-hover'
-                onClick={() => handleSortChange({ sortBy: option.value, sortOrder: option.order })}
-              >
-                {option.text}
-                {
-                  sort.sortBy === option.value && sort.sortOrder === option.order && (
-                    <RiCheckLine className='ml-2 h-4 w-4 text-text-accent' />
-                  )
-                }
-              </div>
-            ))
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default SortDropdown
diff --git a/app/components/plugins/marketplace/types.ts b/app/components/plugins/marketplace/types.ts
deleted file mode 100644
index 4145f69..0000000
--- a/app/components/plugins/marketplace/types.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import type { Plugin } from '../types'
-
-export type SearchParamsFromCollection = {
-  query?: string
-  sort_by?: string
-  sort_order?: string
-}
-
-export type MarketplaceCollection = {
-  name: string
-  label: Record<string, string>
-  description: Record<string, string>
-  rule: string
-  created_at: string
-  updated_at: string
-  searchable?: boolean
-  search_params?: SearchParamsFromCollection
-}
-
-export type MarketplaceCollectionsResponse = {
-  collections: MarketplaceCollection[]
-  total: number
-}
-
-export type MarketplaceCollectionPluginsResponse = {
-  plugins: Plugin[]
-  total: number
-}
-
-export type PluginsSearchParams = {
-  query: string
-  page?: number
-  pageSize?: number
-  sortBy?: string
-  sortOrder?: string
-  category?: string
-  tags?: string[]
-  exclude?: string[]
-  type?: 'plugin' | 'bundle'
-}
-
-export type PluginsSort = {
-  sortBy: string
-  sortOrder: string
-}
-
-export type CollectionsAndPluginsSearchParams = {
-  category?: string
-  condition?: string
-  exclude?: string[]
-  type?: 'plugin' | 'bundle'
-}
-
-export type SearchParams = {
-  language?: string
-  q?: string
-  tags?: string
-  category?: string
-}
diff --git a/app/components/plugins/marketplace/utils.ts b/app/components/plugins/marketplace/utils.ts
deleted file mode 100644
index ef4822f..0000000
--- a/app/components/plugins/marketplace/utils.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-import { PLUGIN_TYPE_SEARCH_MAP } from './plugin-type-switch'
-import type { Plugin } from '@/app/components/plugins/types'
-import { PluginType } from '@/app/components/plugins/types'
-import type {
-  CollectionsAndPluginsSearchParams,
-  MarketplaceCollection,
-  PluginsSearchParams,
-} from '@/app/components/plugins/marketplace/types'
-import {
-  MARKETPLACE_API_PREFIX,
-  MARKETPLACE_URL_PREFIX,
-} from '@/config'
-
-export const getPluginIconInMarketplace = (plugin: Plugin) => {
-  if (plugin.type === 'bundle')
-    return `${MARKETPLACE_API_PREFIX}/bundles/${plugin.org}/${plugin.name}/icon`
-  return `${MARKETPLACE_API_PREFIX}/plugins/${plugin.org}/${plugin.name}/icon`
-}
-
-export const getFormattedPlugin = (bundle: any) => {
-  if (bundle.type === 'bundle') {
-    return {
-      ...bundle,
-      icon: getPluginIconInMarketplace(bundle),
-      brief: bundle.description,
-      label: bundle.labels,
-    }
-  }
-  return {
-    ...bundle,
-    icon: getPluginIconInMarketplace(bundle),
-  }
-}
-
-export const getPluginLinkInMarketplace = (plugin: Plugin) => {
-  if (plugin.type === 'bundle')
-    return `${MARKETPLACE_URL_PREFIX}/bundles/${plugin.org}/${plugin.name}`
-  return `${MARKETPLACE_URL_PREFIX}/plugins/${plugin.org}/${plugin.name}`
-}
-
-export const getMarketplacePluginsByCollectionId = async (collectionId: string, query?: CollectionsAndPluginsSearchParams) => {
-  let plugins = [] as Plugin[]
-
-  try {
-    const url = `${MARKETPLACE_API_PREFIX}/collections/${collectionId}/plugins`
-    const marketplaceCollectionPluginsData = await globalThis.fetch(
-      url,
-      {
-        cache: 'no-store',
-        method: 'POST',
-        body: JSON.stringify({
-          category: query?.category,
-          exclude: query?.exclude,
-          type: query?.type,
-        }),
-      },
-    )
-    const marketplaceCollectionPluginsDataJson = await marketplaceCollectionPluginsData.json()
-    plugins = marketplaceCollectionPluginsDataJson.data.plugins.map((plugin: Plugin) => {
-      return getFormattedPlugin(plugin)
-    })
-  }
-  // eslint-disable-next-line unused-imports/no-unused-vars
-  catch (e) {
-    plugins = []
-  }
-
-  return plugins
-}
-
-export const getMarketplaceCollectionsAndPlugins = async (query?: CollectionsAndPluginsSearchParams) => {
-  let marketplaceCollections = [] as MarketplaceCollection[]
-  let marketplaceCollectionPluginsMap = {} as Record<string, Plugin[]>
-  try {
-    let marketplaceUrl = `${MARKETPLACE_API_PREFIX}/collections?page=1&page_size=100`
-    if (query?.condition)
-      marketplaceUrl += `&condition=${query.condition}`
-    if (query?.type)
-      marketplaceUrl += `&type=${query.type}`
-    const marketplaceCollectionsData = await globalThis.fetch(marketplaceUrl, { cache: 'no-store' })
-    const marketplaceCollectionsDataJson = await marketplaceCollectionsData.json()
-    marketplaceCollections = marketplaceCollectionsDataJson.data.collections
-    await Promise.all(marketplaceCollections.map(async (collection: MarketplaceCollection) => {
-      const plugins = await getMarketplacePluginsByCollectionId(collection.name, query)
-
-      marketplaceCollectionPluginsMap[collection.name] = plugins
-    }))
-  }
-  // eslint-disable-next-line unused-imports/no-unused-vars
-  catch (e) {
-    marketplaceCollections = []
-    marketplaceCollectionPluginsMap = {}
-  }
-
-  return {
-    marketplaceCollections,
-    marketplaceCollectionPluginsMap,
-  }
-}
-
-export const getMarketplaceListCondition = (pluginType: string) => {
-  if (pluginType === PluginType.tool)
-    return 'category=tool'
-
-  if (pluginType === PluginType.agent)
-    return 'category=agent-strategy'
-
-  if (pluginType === PluginType.model)
-    return 'category=model'
-
-  if (pluginType === PluginType.extension)
-    return 'category=endpoint'
-
-  if (pluginType === 'bundle')
-    return 'type=bundle'
-
-  return ''
-}
-
-export const getMarketplaceListFilterType = (category: string) => {
-  if (category === PLUGIN_TYPE_SEARCH_MAP.all)
-    return undefined
-
-  if (category === PLUGIN_TYPE_SEARCH_MAP.bundle)
-    return 'bundle'
-
-  return 'plugin'
-}
-
-export const updateSearchParams = (pluginsSearchParams: PluginsSearchParams) => {
-  const { query, category, tags } = pluginsSearchParams
-  const url = new URL(window.location.href)
-  const categoryChanged = url.searchParams.get('category') !== category
-  if (query)
-    url.searchParams.set('q', query)
-  else
-    url.searchParams.delete('q')
-  if (category)
-    url.searchParams.set('category', category)
-  else
-    url.searchParams.delete('category')
-  if (tags && tags.length)
-    url.searchParams.set('tags', tags.join(','))
-  else
-    url.searchParams.delete('tags')
-  history[`${categoryChanged ? 'pushState' : 'replaceState'}`]({}, '', url)
-}
diff --git a/app/components/plugins/permission-setting-modal/modal.tsx b/app/components/plugins/permission-setting-modal/modal.tsx
deleted file mode 100644
index f56c079..0000000
--- a/app/components/plugins/permission-setting-modal/modal.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import Modal from '@/app/components/base/modal'
-import OptionCard from '@/app/components/workflow/nodes/_base/components/option-card'
-import Button from '@/app/components/base/button'
-import type { Permissions } from '@/app/components/plugins/types'
-import { PermissionType } from '@/app/components/plugins/types'
-
-const i18nPrefix = 'plugin.privilege'
-type Props = {
-  payload: Permissions
-  onHide: () => void
-  onSave: (payload: Permissions) => void
-}
-
-const PluginSettingModal: FC<Props> = ({
-  payload,
-  onHide,
-  onSave,
-}) => {
-  const { t } = useTranslation()
-  const [tempPrivilege, setTempPrivilege] = useState<Permissions>(payload)
-  const handlePrivilegeChange = useCallback((key: string) => {
-    return (value: PermissionType) => {
-      setTempPrivilege({
-        ...tempPrivilege,
-        [key]: value,
-      })
-    }
-  }, [tempPrivilege])
-
-  const handleSave = useCallback(async () => {
-    await onSave(tempPrivilege)
-    onHide()
-  }, [onHide, onSave, tempPrivilege])
-
-  return (
-    <Modal
-      isShow
-      onClose={onHide}
-      closable
-      className='w-[420px] !p-0'
-    >
-      <div className='shadows-shadow-xl flex w-[420px] flex-col items-start rounded-2xl border border-components-panel-border bg-components-panel-bg'>
-        <div className='flex items-start gap-2 self-stretch pb-3 pl-6 pr-14 pt-6'>
-          <span className='title-2xl-semi-bold self-stretch text-text-primary'>{t(`${i18nPrefix}.title`)}</span>
-        </div>
-        <div className='flex flex-col items-start justify-center gap-4 self-stretch px-6 py-3'>
-          {[
-            { title: t(`${i18nPrefix}.whoCanInstall`), key: 'install_permission', value: tempPrivilege.install_permission },
-            { title: t(`${i18nPrefix}.whoCanDebug`), key: 'debug_permission', value: tempPrivilege.debug_permission },
-          ].map(({ title, key, value }) => (
-            <div key={key} className='flex flex-col items-start gap-1 self-stretch'>
-              <div className='flex h-6 items-center gap-0.5'>
-                <span className='system-sm-semibold text-text-secondary'>{title}</span>
-              </div>
-              <div className='flex w-full items-start justify-between gap-2'>
-                {[PermissionType.everyone, PermissionType.admin, PermissionType.noOne].map(option => (
-                  <OptionCard
-                    key={option}
-                    title={t(`${i18nPrefix}.${option}`)}
-                    onSelect={() => handlePrivilegeChange(key)(option)}
-                    selected={value === option}
-                    className="flex-1"
-                  />
-                ))}
-              </div>
-            </div>
-          ))}
-        </div>
-        <div className='flex h-[76px] items-center justify-end gap-2 self-stretch p-6 pt-5'>
-          <Button
-            className='min-w-[72px]'
-            onClick={onHide}
-          >
-            {t('common.operation.cancel')}
-          </Button>
-          <Button
-            className='min-w-[72px]'
-            variant={'primary'}
-            onClick={handleSave}
-          >
-            {t('common.operation.save')}
-          </Button>
-        </div>
-      </div>
-    </Modal>
-  )
-}
-
-export default React.memo(PluginSettingModal)
diff --git a/app/components/plugins/permission-setting-modal/style.module.css b/app/components/plugins/permission-setting-modal/style.module.css
deleted file mode 100644
index 15bedd8..0000000
--- a/app/components/plugins/permission-setting-modal/style.module.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.textGradient {
-  background: linear-gradient(92deg, #2250F2 -29.55%, #0EBCF3 75.22%);
-  -webkit-background-clip: text;
-  -webkit-text-fill-color: transparent;
-  background-clip: text;
-  text-fill-color: transparent;
-}
diff --git a/app/components/plugins/plugin-detail-panel/action-list.tsx b/app/components/plugins/plugin-detail-panel/action-list.tsx
deleted file mode 100644
index eb47ce3..0000000
--- a/app/components/plugins/plugin-detail-panel/action-list.tsx
+++ /dev/null
@@ -1,112 +0,0 @@
-import React, { useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useAppContext } from '@/context/app-context'
-import Button from '@/app/components/base/button'
-import Toast from '@/app/components/base/toast'
-import Indicator from '@/app/components/header/indicator'
-import ToolItem from '@/app/components/tools/provider/tool-item'
-import ConfigCredential from '@/app/components/tools/setting/build-in/config-credentials'
-import {
-  useAllToolProviders,
-  useBuiltinTools,
-  useInvalidateAllToolProviders,
-  useRemoveProviderCredentials,
-  useUpdateProviderCredentials,
-} from '@/service/use-tools'
-import type { PluginDetail } from '@/app/components/plugins/types'
-
-type Props = {
-  detail: PluginDetail
-}
-
-const ActionList = ({
-  detail,
-}: Props) => {
-  const { t } = useTranslation()
-  const { isCurrentWorkspaceManager } = useAppContext()
-  const providerBriefInfo = detail.declaration.tool.identity
-  const providerKey = `${detail.plugin_id}/${providerBriefInfo.name}`
-  const { data: collectionList = [] } = useAllToolProviders()
-  const invalidateAllToolProviders = useInvalidateAllToolProviders()
-  const provider = useMemo(() => {
-    return collectionList.find(collection => collection.name === providerKey)
-  }, [collectionList, providerKey])
-  const { data } = useBuiltinTools(providerKey)
-
-  const [showSettingAuth, setShowSettingAuth] = useState(false)
-
-  const handleCredentialSettingUpdate = () => {
-    invalidateAllToolProviders()
-    Toast.notify({
-      type: 'success',
-      message: t('common.api.actionSuccess'),
-    })
-    setShowSettingAuth(false)
-  }
-
-  const { mutate: updatePermission, isPending } = useUpdateProviderCredentials({
-    onSuccess: handleCredentialSettingUpdate,
-  })
-
-  const { mutate: removePermission } = useRemoveProviderCredentials({
-    onSuccess: handleCredentialSettingUpdate,
-  })
-
-  if (!data || !provider)
-    return null
-
-  return (
-    <div className='px-4 pb-4 pt-2'>
-      <div className='mb-1 py-1'>
-        <div className='system-sm-semibold-uppercase mb-1 flex h-6 items-center justify-between text-text-secondary'>
-          {t('plugin.detailPanel.actionNum', { num: data.length, action: data.length > 1 ? 'actions' : 'action' })}
-          {provider.is_team_authorization && provider.allow_delete && (
-            <Button
-              variant='secondary'
-              size='small'
-              onClick={() => setShowSettingAuth(true)}
-              disabled={!isCurrentWorkspaceManager}
-            >
-              <Indicator className='mr-2' color={'green'} />
-              {t('tools.auth.authorized')}
-            </Button>
-          )}
-        </div>
-        {!provider.is_team_authorization && provider.allow_delete && (
-          <Button
-            variant='primary'
-            className='w-full'
-            onClick={() => setShowSettingAuth(true)}
-            disabled={!isCurrentWorkspaceManager}
-          >{t('tools.auth.unauthorized')}</Button>
-        )}
-      </div>
-      <div className='flex flex-col gap-2'>
-        {data.map(tool => (
-          <ToolItem
-            key={`${detail.plugin_id}${tool.name}`}
-            disabled={false}
-            collection={provider}
-            tool={tool}
-            isBuiltIn={true}
-            isModel={false}
-          />
-        ))}
-      </div>
-      {showSettingAuth && (
-        <ConfigCredential
-          collection={provider}
-          onCancel={() => setShowSettingAuth(false)}
-          onSaved={async value => updatePermission({
-            providerName: provider.name,
-            credentials: value,
-          })}
-          onRemove={async () => removePermission(provider.name)}
-          isSaving={isPending}
-        />
-      )}
-    </div>
-  )
-}
-
-export default ActionList
diff --git a/app/components/plugins/plugin-detail-panel/agent-strategy-list.tsx b/app/components/plugins/plugin-detail-panel/agent-strategy-list.tsx
deleted file mode 100644
index 4c5153d..0000000
--- a/app/components/plugins/plugin-detail-panel/agent-strategy-list.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import React, { useMemo } from 'react'
-import { useTranslation } from 'react-i18next'
-import StrategyItem from '@/app/components/plugins/plugin-detail-panel/strategy-item'
-import {
-  useStrategyProviderDetail,
-} from '@/service/use-strategy'
-import type { PluginDetail } from '@/app/components/plugins/types'
-
-type Props = {
-  detail: PluginDetail
-}
-
-const AgentStrategyList = ({
-  detail,
-}: Props) => {
-  const { t } = useTranslation()
-  const providerBriefInfo = detail.declaration.agent_strategy.identity
-  const providerKey = `${detail.plugin_id}/${providerBriefInfo.name}`
-  const { data: strategyProviderDetail } = useStrategyProviderDetail(providerKey)
-
-  const providerDetail = useMemo(() => {
-    return {
-      ...strategyProviderDetail?.declaration.identity,
-      tenant_id: detail.tenant_id,
-    }
-  }, [detail.tenant_id, strategyProviderDetail?.declaration.identity])
-
-  const strategyList = useMemo(() => {
-    if (!strategyProviderDetail)
-      return []
-
-    return strategyProviderDetail.declaration.strategies
-  }, [strategyProviderDetail])
-
-  if (!strategyProviderDetail)
-    return null
-
-  return (
-    <div className='px-4 pb-4 pt-2'>
-      <div className='mb-1 py-1'>
-        <div className='system-sm-semibold-uppercase mb-1 flex h-6 items-center justify-between text-text-secondary'>
-          {t('plugin.detailPanel.strategyNum', { num: strategyList.length, strategy: strategyList.length > 1 ? 'strategies' : 'strategy' })}
-        </div>
-      </div>
-      <div className='flex flex-col gap-2'>
-        {strategyList.map(strategyDetail => (
-          <StrategyItem
-            key={`${strategyDetail.identity.provider}${strategyDetail.identity.name}`}
-            provider={providerDetail as any}
-            detail={strategyDetail}
-          />
-        ))}
-      </div>
-    </div>
-  )
-}
-
-export default AgentStrategyList
diff --git a/app/components/plugins/plugin-detail-panel/app-selector/app-inputs-form.tsx b/app/components/plugins/plugin-detail-panel/app-selector/app-inputs-form.tsx
deleted file mode 100644
index edab648..0000000
--- a/app/components/plugins/plugin-detail-panel/app-selector/app-inputs-form.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-import { useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import Input from '@/app/components/base/input'
-import Textarea from '@/app/components/base/textarea'
-import { PortalSelect } from '@/app/components/base/select'
-import { InputVarType } from '@/app/components/workflow/types'
-import { FileUploaderInAttachmentWrapper } from '@/app/components/base/file-uploader'
-
-type Props = {
-  inputsForms: any[]
-  inputs: Record<string, any>
-  inputsRef: any
-  onFormChange: (value: Record<string, any>) => void
-}
-const AppInputsForm = ({
-  inputsForms,
-  inputs,
-  inputsRef,
-  onFormChange,
-}: Props) => {
-  const { t } = useTranslation()
-
-  const handleFormChange = useCallback((variable: string, value: any) => {
-    onFormChange({
-      ...inputsRef.current,
-      [variable]: value,
-    })
-  }, [onFormChange, inputsRef])
-
-  const renderField = (form: any) => {
-    const {
-      label,
-      variable,
-      options,
-    } = form
-    if (form.type === InputVarType.textInput) {
-      return (
-        <Input
-          value={inputs[variable] || ''}
-          onChange={e => handleFormChange(variable, e.target.value)}
-          placeholder={label}
-        />
-      )
-    }
-    if (form.type === InputVarType.number) {
-      return (
-        <Input
-          type="number"
-          value={inputs[variable] || ''}
-          onChange={e => handleFormChange(variable, e.target.value)}
-          placeholder={label}
-        />
-      )
-    }
-    if (form.type === InputVarType.paragraph) {
-      return (
-        <Textarea
-          value={inputs[variable] || ''}
-          onChange={e => handleFormChange(variable, e.target.value)}
-          placeholder={label}
-        />
-      )
-    }
-    if (form.type === InputVarType.select) {
-      return (
-        <PortalSelect
-          popupClassName="w-[356px] z-[1050]"
-          value={inputs[variable] || ''}
-          items={options.map((option: string) => ({ value: option, name: option }))}
-          onSelect={item => handleFormChange(variable, item.value as string)}
-          placeholder={label}
-        />
-      )
-    }
-    if (form.type === InputVarType.singleFile) {
-      return (
-        <FileUploaderInAttachmentWrapper
-          value={inputs[variable] ? [inputs[variable]] : []}
-          onChange={files => handleFormChange(variable, files[0])}
-          fileConfig={{
-            allowed_file_types: form.allowed_file_types,
-            allowed_file_extensions: form.allowed_file_extensions,
-            allowed_file_upload_methods: form.allowed_file_upload_methods,
-            number_limits: 1,
-            fileUploadConfig: (form as any).fileUploadConfig,
-          }}
-        />
-      )
-    }
-    if (form.type === InputVarType.multiFiles) {
-      return (
-        <FileUploaderInAttachmentWrapper
-          value={inputs[variable]}
-          onChange={files => handleFormChange(variable, files)}
-          fileConfig={{
-            allowed_file_types: form.allowed_file_types,
-            allowed_file_extensions: form.allowed_file_extensions,
-            allowed_file_upload_methods: form.allowed_file_upload_methods,
-            number_limits: form.max_length,
-            fileUploadConfig: (form as any).fileUploadConfig,
-          }}
-        />
-      )
-    }
-  }
-
-  if (!inputsForms.length)
-    return null
-
-  return (
-    <div className='flex flex-col gap-4 px-4 py-2'>
-      {inputsForms.map(form => (
-        <div key={form.variable}>
-          <div className='system-sm-semibold mb-1 flex h-6 items-center gap-1 text-text-secondary'>
-            <div className='truncate'>{form.label}</div>
-            {!form.required && <span className='system-xs-regular text-text-tertiary'>{t('workflow.panel.optional')}</span>}
-          </div>
-          {renderField(form)}
-        </div>
-      ))}
-    </div>
-  )
-}
-
-export default AppInputsForm
diff --git a/app/components/plugins/plugin-detail-panel/app-selector/app-inputs-panel.tsx b/app/components/plugins/plugin-detail-panel/app-selector/app-inputs-panel.tsx
deleted file mode 100644
index b22f59f..0000000
--- a/app/components/plugins/plugin-detail-panel/app-selector/app-inputs-panel.tsx
+++ /dev/null
@@ -1,180 +0,0 @@
-'use client'
-import React, { useMemo, useRef } from 'react'
-import { useTranslation } from 'react-i18next'
-import Loading from '@/app/components/base/loading'
-import AppInputsForm from '@/app/components/plugins/plugin-detail-panel/app-selector/app-inputs-form'
-import { useAppDetail } from '@/service/use-apps'
-import { useAppWorkflow } from '@/service/use-workflow'
-import { useFileUploadConfig } from '@/service/use-common'
-import { Resolution } from '@/types/app'
-import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants'
-import type { App } from '@/types/app'
-import type { FileUpload } from '@/app/components/base/features/types'
-import { BlockEnum, InputVarType, SupportUploadFileTypes } from '@/app/components/workflow/types'
-
-import cn from '@/utils/classnames'
-
-type Props = {
-  value?: {
-    app_id: string
-    inputs: Record<string, any>
-  }
-  appDetail: App
-  onFormChange: (value: Record<string, any>) => void
-}
-
-const AppInputsPanel = ({
-  value,
-  appDetail,
-  onFormChange,
-}: Props) => {
-  const { t } = useTranslation()
-  const inputsRef = useRef<any>(value?.inputs || {})
-  const isBasicApp = appDetail.mode !== 'advanced-chat' && appDetail.mode !== 'workflow'
-  const { data: fileUploadConfig } = useFileUploadConfig()
-  const { data: currentApp, isFetching: isAppLoading } = useAppDetail(appDetail.id)
-  const { data: currentWorkflow, isFetching: isWorkflowLoading } = useAppWorkflow(isBasicApp ? '' : appDetail.id)
-  const isLoading = isAppLoading || isWorkflowLoading
-
-  const basicAppFileConfig = useMemo(() => {
-    let fileConfig: FileUpload
-    if (isBasicApp)
-      fileConfig = currentApp?.model_config?.file_upload as FileUpload
-    else
-      fileConfig = currentWorkflow?.features?.file_upload as FileUpload
-    return {
-      image: {
-        detail: fileConfig?.image?.detail || Resolution.high,
-        enabled: !!fileConfig?.image?.enabled,
-        number_limits: fileConfig?.image?.number_limits || 3,
-        transfer_methods: fileConfig?.image?.transfer_methods || ['local_file', 'remote_url'],
-      },
-      enabled: !!(fileConfig?.enabled || fileConfig?.image?.enabled),
-      allowed_file_types: fileConfig?.allowed_file_types || [SupportUploadFileTypes.image],
-      allowed_file_extensions: fileConfig?.allowed_file_extensions || [...FILE_EXTS[SupportUploadFileTypes.image]].map(ext => `.${ext}`),
-      allowed_file_upload_methods: fileConfig?.allowed_file_upload_methods || fileConfig?.image?.transfer_methods || ['local_file', 'remote_url'],
-      number_limits: fileConfig?.number_limits || fileConfig?.image?.number_limits || 3,
-    }
-  }, [currentApp?.model_config?.file_upload, currentWorkflow?.features?.file_upload, isBasicApp])
-
-  const inputFormSchema = useMemo(() => {
-    if (!currentApp)
-      return []
-    let inputFormSchema = []
-    if (isBasicApp) {
-      inputFormSchema = currentApp.model_config.user_input_form.filter((item: any) => !item.external_data_tool).map((item: any) => {
-        if (item.paragraph) {
-          return {
-            ...item.paragraph,
-            type: 'paragraph',
-            required: false,
-          }
-        }
-        if (item.number) {
-          return {
-            ...item.number,
-            type: 'number',
-            required: false,
-          }
-        }
-        if (item.select) {
-          return {
-            ...item.select,
-            type: 'select',
-            required: false,
-          }
-        }
-
-        if (item['file-list']) {
-          return {
-            ...item['file-list'],
-            type: 'file-list',
-            required: false,
-            fileUploadConfig,
-          }
-        }
-
-        if (item.file) {
-          return {
-            ...item.file,
-            type: 'file',
-            required: false,
-            fileUploadConfig,
-          }
-        }
-
-        return {
-          ...item['text-input'],
-          type: 'text-input',
-          required: false,
-        }
-      })
-    }
-    else {
-      const startNode = currentWorkflow?.graph.nodes.find(node => node.data.type === BlockEnum.Start) as any
-      inputFormSchema = startNode?.data.variables.map((variable: any) => {
-        if (variable.type === InputVarType.multiFiles) {
-          return {
-            ...variable,
-            required: false,
-            fileUploadConfig,
-          }
-        }
-
-        if (variable.type === InputVarType.singleFile) {
-          return {
-            ...variable,
-            required: false,
-            fileUploadConfig,
-          }
-        }
-        return {
-          ...variable,
-          required: false,
-        }
-      })
-    }
-    if ((currentApp.mode === 'completion' || currentApp.mode === 'workflow') && basicAppFileConfig.enabled) {
-      inputFormSchema.push({
-        label: 'Image Upload',
-        variable: '#image#',
-        type: InputVarType.singleFile,
-        required: false,
-        ...basicAppFileConfig,
-        fileUploadConfig,
-      })
-    }
-    return inputFormSchema
-  }, [basicAppFileConfig, currentApp, currentWorkflow, fileUploadConfig, isBasicApp])
-
-  const handleFormChange = (value: Record<string, any>) => {
-    inputsRef.current = value
-    onFormChange(value)
-  }
-
-  return (
-    <div className={cn('flex max-h-[240px] flex-col rounded-b-2xl border-t border-divider-subtle pb-4')}>
-      {isLoading && <div className='pt-3'><Loading type='app' /></div>}
-      {!isLoading && (
-        <div className='system-sm-semibold mb-2 mt-3 flex h-6 shrink-0 items-center px-4 text-text-secondary'>{t('app.appSelector.params')}</div>
-      )}
-      {!isLoading && !inputFormSchema.length && (
-        <div className='flex h-16 flex-col items-center justify-center'>
-          <div className='system-sm-regular text-text-tertiary'>{t('app.appSelector.noParams')}</div>
-        </div>
-      )}
-      {!isLoading && !!inputFormSchema.length && (
-        <div className='grow overflow-y-auto'>
-          <AppInputsForm
-            inputs={value?.inputs || {}}
-            inputsRef={inputsRef}
-            inputsForms={inputFormSchema}
-            onFormChange={handleFormChange}
-          />
-        </div>
-      )}
-    </div>
-  )
-}
-
-export default AppInputsPanel
diff --git a/app/components/plugins/plugin-detail-panel/app-selector/app-picker.tsx b/app/components/plugins/plugin-detail-panel/app-selector/app-picker.tsx
deleted file mode 100644
index 2f57276..0000000
--- a/app/components/plugins/plugin-detail-panel/app-selector/app-picker.tsx
+++ /dev/null
@@ -1,123 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useMemo } from 'react'
-import { useState } from 'react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import type {
-  OffsetOptions,
-  Placement,
-} from '@floating-ui/react'
-import Input from '@/app/components/base/input'
-import AppIcon from '@/app/components/base/app-icon'
-import type { App } from '@/types/app'
-
-type Props = {
-  appList: App[]
-  scope: string
-  disabled: boolean
-  trigger: React.ReactNode
-  placement?: Placement
-  offset?: OffsetOptions
-  isShow: boolean
-  onShowChange: (isShow: boolean) => void
-  onSelect: (app: App) => void
-}
-
-const AppPicker: FC<Props> = ({
-  scope,
-  appList,
-  disabled,
-  trigger,
-  placement = 'right-start',
-  offset = 0,
-  isShow,
-  onShowChange,
-  onSelect,
-}) => {
-  const [searchText, setSearchText] = useState('')
-  const filteredAppList = useMemo(() => {
-    return (appList || [])
-      .filter(app => app.name.toLowerCase().includes(searchText.toLowerCase()))
-      .filter(app => (app.mode !== 'advanced-chat' && app.mode !== 'workflow') || !!app.workflow)
-      .filter(app => scope === 'all'
-      || (scope === 'completion' && app.mode === 'completion')
-      || (scope === 'workflow' && app.mode === 'workflow')
-      || (scope === 'chat' && app.mode === 'advanced-chat')
-      || (scope === 'chat' && app.mode === 'agent-chat')
-      || (scope === 'chat' && app.mode === 'chat'))
-  }, [appList, scope, searchText])
-  const getAppType = (app: App) => {
-    switch (app.mode) {
-      case 'advanced-chat':
-        return 'chatflow'
-      case 'agent-chat':
-        return 'agent'
-      case 'chat':
-        return 'chat'
-      case 'completion':
-        return 'completion'
-      case 'workflow':
-        return 'workflow'
-    }
-  }
-
-  const handleTriggerClick = () => {
-    if (disabled) return
-    onShowChange(true)
-  }
-
-  return (
-    <PortalToFollowElem
-      placement={placement}
-      offset={offset}
-      open={isShow}
-      onOpenChange={onShowChange}
-    >
-      <PortalToFollowElemTrigger
-        onClick={handleTriggerClick}
-      >
-        {trigger}
-      </PortalToFollowElemTrigger>
-
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className="relative min-h-20 w-[356px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg backdrop-blur-sm">
-          <div className='p-2 pb-1'>
-            <Input
-              showLeftIcon
-              showClearIcon
-              value={searchText}
-              onChange={e => setSearchText(e.target.value)}
-              onClear={() => setSearchText('')}
-            />
-          </div>
-          <div className='p-1'>
-            {filteredAppList.map(app => (
-              <div
-                key={app.id}
-                className='flex cursor-pointer items-center gap-3 rounded-lg py-1 pl-2 pr-3 hover:bg-state-base-hover'
-                onClick={() => onSelect(app)}
-              >
-                <AppIcon
-                  className='shrink-0'
-                  size='xs'
-                  iconType={app.icon_type}
-                  icon={app.icon}
-                  background={app.icon_background}
-                  imageUrl={app.icon_url}
-                />
-                <div title={app.name} className='system-sm-medium grow text-components-input-text-filled'>{app.name}</div>
-                <div className='system-2xs-medium-uppercase shrink-0 text-text-tertiary'>{getAppType(app)}</div>
-              </div>
-            ))}
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default React.memo(AppPicker)
diff --git a/app/components/plugins/plugin-detail-panel/app-selector/app-trigger.tsx b/app/components/plugins/plugin-detail-panel/app-selector/app-trigger.tsx
deleted file mode 100644
index d2c11f0..0000000
--- a/app/components/plugins/plugin-detail-panel/app-selector/app-trigger.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-'use client'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowDownSLine,
-} from '@remixicon/react'
-import AppIcon from '@/app/components/base/app-icon'
-import type { App } from '@/types/app'
-import cn from '@/utils/classnames'
-
-type Props = {
-  open: boolean
-  appDetail?: App
-}
-
-const AppTrigger = ({
-  open,
-  appDetail,
-}: Props) => {
-  const { t } = useTranslation()
-  return (
-    <div className={cn(
-      'group flex cursor-pointer items-center rounded-lg bg-components-input-bg-normal p-2 pl-3 hover:bg-state-base-hover-alt',
-      open && 'bg-state-base-hover-alt',
-      appDetail && 'py-1.5 pl-1.5',
-    )}>
-      {appDetail && (
-        <AppIcon
-          className='mr-2'
-          size='xs'
-          iconType={appDetail.icon_type}
-          icon={appDetail.icon}
-          background={appDetail.icon_background}
-          imageUrl={appDetail.icon_url}
-        />
-      )}
-      {appDetail && (
-        <div title={appDetail.name} className='system-sm-medium grow text-components-input-text-filled'>{appDetail.name}</div>
-      )}
-      {!appDetail && (
-        <div className='system-sm-regular grow truncate text-components-input-text-placeholder'>{t('app.appSelector.placeholder')}</div>
-      )}
-      <RiArrowDownSLine className={cn('ml-0.5 h-4 w-4 shrink-0 text-text-quaternary group-hover:text-text-secondary', open && 'text-text-secondary')} />
-    </div>
-  )
-}
-
-export default AppTrigger
diff --git a/app/components/plugins/plugin-detail-panel/app-selector/index.tsx b/app/components/plugins/plugin-detail-panel/app-selector/index.tsx
deleted file mode 100644
index 39ca957..0000000
--- a/app/components/plugins/plugin-detail-panel/app-selector/index.tsx
+++ /dev/null
@@ -1,143 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import AppTrigger from '@/app/components/plugins/plugin-detail-panel/app-selector/app-trigger'
-import AppPicker from '@/app/components/plugins/plugin-detail-panel/app-selector/app-picker'
-import AppInputsPanel from '@/app/components/plugins/plugin-detail-panel/app-selector/app-inputs-panel'
-import { useAppFullList } from '@/service/use-apps'
-import type { App } from '@/types/app'
-import type {
-  OffsetOptions,
-  Placement,
-} from '@floating-ui/react'
-
-type Props = {
-  value?: {
-    app_id: string
-    inputs: Record<string, any>
-    files?: any[]
-  }
-  scope?: string
-  disabled?: boolean
-  placement?: Placement
-  offset?: OffsetOptions
-  onSelect: (app: {
-    app_id: string
-    inputs: Record<string, any>
-    files?: any[]
-  }) => void
-  supportAddCustomTool?: boolean
-}
-const AppSelector: FC<Props> = ({
-  value,
-  scope,
-  disabled,
-  placement = 'bottom',
-  offset = 4,
-  onSelect,
-}) => {
-  const { t } = useTranslation()
-  const [isShow, onShowChange] = useState(false)
-  const handleTriggerClick = () => {
-    if (disabled) return
-    onShowChange(true)
-  }
-
-  const { data: appList } = useAppFullList()
-  const currentAppInfo = useMemo(() => {
-    if (!appList?.data || !value)
-      return undefined
-    return appList.data.find(app => app.id === value.app_id)
-  }, [appList?.data, value])
-
-  const [isShowChooseApp, setIsShowChooseApp] = useState(false)
-  const handleSelectApp = (app: App) => {
-    const clearValue = app.id !== value?.app_id
-    const appValue = {
-      app_id: app.id,
-      inputs: clearValue ? {} : value?.inputs || {},
-      files: clearValue ? [] : value?.files || [],
-    }
-    onSelect(appValue)
-    setIsShowChooseApp(false)
-  }
-  const handleFormChange = (inputs: Record<string, any>) => {
-    const newFiles = inputs['#image#']
-    delete inputs['#image#']
-    const newValue = {
-      app_id: value?.app_id || '',
-      inputs,
-      files: newFiles ? [newFiles] : value?.files || [],
-    }
-    onSelect(newValue)
-  }
-
-  const formattedValue = useMemo(() => {
-    return {
-      app_id: value?.app_id || '',
-      inputs: {
-        ...value?.inputs,
-        ...(value?.files?.length ? { '#image#': value.files[0] } : {}),
-      },
-    }
-  }, [value])
-
-  return (
-    <>
-      <PortalToFollowElem
-        placement={placement}
-        offset={offset}
-        open={isShow}
-        onOpenChange={onShowChange}
-      >
-        <PortalToFollowElemTrigger
-          className='w-full'
-          onClick={handleTriggerClick}
-        >
-          <AppTrigger
-            open={isShow}
-            appDetail={currentAppInfo}
-          />
-        </PortalToFollowElemTrigger>
-        <PortalToFollowElemContent className='z-[1000]'>
-          <div className="relative min-h-20 w-[389px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg backdrop-blur-sm">
-            <div className='flex flex-col gap-1 px-4 py-3'>
-              <div className='system-sm-semibold flex h-6 items-center text-text-secondary'>{t('app.appSelector.label')}</div>
-              <AppPicker
-                placement='bottom'
-                offset={offset}
-                trigger={
-                  <AppTrigger
-                    open={isShowChooseApp}
-                    appDetail={currentAppInfo}
-                  />
-                }
-                isShow={isShowChooseApp}
-                onShowChange={setIsShowChooseApp}
-                disabled={false}
-                appList={appList?.data || []}
-                onSelect={handleSelectApp}
-                scope={scope || 'all'}
-              />
-            </div>
-            {/* app inputs config panel */}
-            {currentAppInfo && (
-              <AppInputsPanel
-                value={formattedValue}
-                appDetail={currentAppInfo}
-                onFormChange={handleFormChange}
-              />
-            )}
-          </div>
-        </PortalToFollowElemContent>
-      </PortalToFollowElem>
-    </>
-  )
-}
-export default React.memo(AppSelector)
diff --git a/app/components/plugins/plugin-detail-panel/detail-header.tsx b/app/components/plugins/plugin-detail-panel/detail-header.tsx
deleted file mode 100644
index 7548c90..0000000
--- a/app/components/plugins/plugin-detail-panel/detail-header.tsx
+++ /dev/null
@@ -1,312 +0,0 @@
-import React, { useCallback, useMemo, useState } from 'react'
-import { useTheme } from 'next-themes'
-import { useTranslation } from 'react-i18next'
-import { useBoolean } from 'ahooks'
-import {
-  RiArrowLeftRightLine,
-  RiBugLine,
-  RiCloseLine,
-  RiHardDrive3Line,
-  RiVerifiedBadgeLine,
-} from '@remixicon/react'
-import type { PluginDetail } from '../types'
-import { PluginSource, PluginType } from '../types'
-import Description from '../card/base/description'
-import Icon from '../card/base/card-icon'
-import Title from '../card/base/title'
-import OrgInfo from '../card/base/org-info'
-import { useGitHubReleases } from '../install-plugin/hooks'
-import PluginVersionPicker from '@/app/components/plugins/update-plugin/plugin-version-picker'
-import UpdateFromMarketplace from '@/app/components/plugins/update-plugin/from-market-place'
-import OperationDropdown from '@/app/components/plugins/plugin-detail-panel/operation-dropdown'
-import PluginInfo from '@/app/components/plugins/plugin-page/plugin-info'
-import ActionButton from '@/app/components/base/action-button'
-import Button from '@/app/components/base/button'
-import Badge from '@/app/components/base/badge'
-import Confirm from '@/app/components/base/confirm'
-import Tooltip from '@/app/components/base/tooltip'
-import Toast from '@/app/components/base/toast'
-import { BoxSparkleFill } from '@/app/components/base/icons/src/vender/plugin'
-import { Github } from '@/app/components/base/icons/src/public/common'
-import { uninstallPlugin } from '@/service/plugins'
-import { useGetLanguage } from '@/context/i18n'
-import { useModalContext } from '@/context/modal-context'
-import { useProviderContext } from '@/context/provider-context'
-import { useInvalidateAllToolProviders } from '@/service/use-tools'
-import { API_PREFIX, MARKETPLACE_URL_PREFIX } from '@/config'
-import cn from '@/utils/classnames'
-
-const i18nPrefix = 'plugin.action'
-
-type Props = {
-  detail: PluginDetail
-  onHide: () => void
-  onUpdate: (isDelete?: boolean) => void
-}
-
-const DetailHeader = ({
-  detail,
-  onHide,
-  onUpdate,
-}: Props) => {
-  const { t } = useTranslation()
-  const { theme } = useTheme()
-  const locale = useGetLanguage()
-  const { checkForUpdates, fetchReleases } = useGitHubReleases()
-  const { setShowUpdatePluginModal } = useModalContext()
-  const { refreshModelProviders } = useProviderContext()
-  const invalidateAllToolProviders = useInvalidateAllToolProviders()
-
-  const {
-    installation_id,
-    source,
-    tenant_id,
-    version,
-    latest_unique_identifier,
-    latest_version,
-    meta,
-    plugin_id,
-  } = detail
-  const { author, category, name, label, description, icon, verified } = detail.declaration
-  const isFromGitHub = source === PluginSource.github
-  const isFromMarketplace = source === PluginSource.marketplace
-
-  const [isShow, setIsShow] = useState(false)
-  const [targetVersion, setTargetVersion] = useState({
-    version: latest_version,
-    unique_identifier: latest_unique_identifier,
-  })
-  const hasNewVersion = useMemo(() => {
-    if (isFromMarketplace)
-      return !!latest_version && latest_version !== version
-
-    return false
-  }, [isFromMarketplace, latest_version, version])
-
-  const detailUrl = useMemo(() => {
-    if (isFromGitHub)
-      return `https://github.com/${meta!.repo}`
-    if (isFromMarketplace)
-      return `${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}${theme ? `?theme=${theme}` : ''}`
-    return ''
-  }, [author, isFromGitHub, isFromMarketplace, meta, name, theme])
-
-  const [isShowUpdateModal, {
-    setTrue: showUpdateModal,
-    setFalse: hideUpdateModal,
-  }] = useBoolean(false)
-
-  const handleUpdate = async () => {
-    if (isFromMarketplace) {
-      showUpdateModal()
-      return
-    }
-
-    const owner = meta!.repo.split('/')[0] || author
-    const repo = meta!.repo.split('/')[1] || name
-    const fetchedReleases = await fetchReleases(owner, repo)
-    if (fetchedReleases.length === 0) return
-    const { needUpdate, toastProps } = checkForUpdates(fetchedReleases, meta!.version)
-    Toast.notify(toastProps)
-    if (needUpdate) {
-      setShowUpdatePluginModal({
-        onSaveCallback: () => {
-          onUpdate()
-        },
-        payload: {
-          type: PluginSource.github,
-          category: detail.declaration.category,
-          github: {
-            originalPackageInfo: {
-              id: detail.plugin_unique_identifier,
-              repo: meta!.repo,
-              version: meta!.version,
-              package: meta!.package,
-              releases: fetchedReleases,
-            },
-          },
-        },
-      })
-    }
-  }
-
-  const handleUpdatedFromMarketplace = () => {
-    onUpdate()
-    hideUpdateModal()
-  }
-
-  const [isShowPluginInfo, {
-    setTrue: showPluginInfo,
-    setFalse: hidePluginInfo,
-  }] = useBoolean(false)
-
-  const [isShowDeleteConfirm, {
-    setTrue: showDeleteConfirm,
-    setFalse: hideDeleteConfirm,
-  }] = useBoolean(false)
-
-  const [deleting, {
-    setTrue: showDeleting,
-    setFalse: hideDeleting,
-  }] = useBoolean(false)
-
-  const handleDelete = useCallback(async () => {
-    showDeleting()
-    const res = await uninstallPlugin(installation_id)
-    hideDeleting()
-    if (res.success) {
-      hideDeleteConfirm()
-      onUpdate(true)
-      if (PluginType.model.includes(category))
-        refreshModelProviders()
-      if (PluginType.tool.includes(category))
-        invalidateAllToolProviders()
-    }
-  }, [showDeleting, installation_id, hideDeleting, hideDeleteConfirm, onUpdate, category, refreshModelProviders, invalidateAllToolProviders])
-
-  // #plugin TODO# used in apps
-  // const usedInApps = 3
-
-  return (
-    <div className={cn('shrink-0 border-b border-divider-subtle bg-components-panel-bg p-4 pb-3')}>
-      <div className="flex">
-        <div className='overflow-hidden rounded-xl border border-components-panel-border-subtle'>
-          <Icon src={`${API_PREFIX}/workspaces/current/plugin/icon?tenant_id=${tenant_id}&filename=${icon}`} />
-        </div>
-        <div className="ml-3 w-0 grow">
-          <div className="flex h-5 items-center">
-            <Title title={label[locale]} />
-            {verified && <RiVerifiedBadgeLine className="ml-0.5 h-4 w-4 shrink-0 text-text-accent" />}
-            <PluginVersionPicker
-              disabled={!isFromMarketplace}
-              isShow={isShow}
-              onShowChange={setIsShow}
-              pluginID={plugin_id}
-              currentVersion={version}
-              onSelect={(state) => {
-                setTargetVersion(state)
-                handleUpdate()
-              }}
-              trigger={
-                <Badge
-                  className={cn(
-                    'mx-1',
-                    isShow && 'bg-state-base-hover',
-                    (isShow || isFromMarketplace) && 'hover:bg-state-base-hover',
-                  )}
-                  uppercase={false}
-                  text={
-                    <>
-                      <div>{isFromGitHub ? meta!.version : version}</div>
-                      {isFromMarketplace && <RiArrowLeftRightLine className='ml-1 h-3 w-3 text-text-tertiary' />}
-                    </>
-                  }
-                  hasRedCornerMark={hasNewVersion}
-                />
-              }
-            />
-            {(hasNewVersion || isFromGitHub) && (
-              <Button variant='secondary-accent' size='small' className='!h-5' onClick={() => {
-                if (isFromMarketplace) {
-                  setTargetVersion({
-                    version: latest_version,
-                    unique_identifier: latest_unique_identifier,
-                  })
-                }
-                handleUpdate()
-              }}>{t('plugin.detailPanel.operation.update')}</Button>
-            )}
-          </div>
-          <div className='mb-1 flex h-4 items-center justify-between'>
-            <div className='mt-0.5 flex items-center'>
-              <OrgInfo
-                packageNameClassName='w-auto'
-                orgName={author}
-                packageName={name}
-              />
-              <div className='system-xs-regular ml-1 mr-0.5 text-text-quaternary'>路</div>
-              {detail.source === PluginSource.marketplace && (
-                <Tooltip popupContent={t('plugin.detailPanel.categoryTip.marketplace')} >
-                  <div><BoxSparkleFill className='h-3.5 w-3.5 text-text-tertiary hover:text-text-accent' /></div>
-                </Tooltip>
-              )}
-              {detail.source === PluginSource.github && (
-                <Tooltip popupContent={t('plugin.detailPanel.categoryTip.github')} >
-                  <div><Github className='h-3.5 w-3.5 text-text-secondary hover:text-text-primary' /></div>
-                </Tooltip>
-              )}
-              {detail.source === PluginSource.local && (
-                <Tooltip popupContent={t('plugin.detailPanel.categoryTip.local')} >
-                  <div><RiHardDrive3Line className='h-3.5 w-3.5 text-text-tertiary' /></div>
-                </Tooltip>
-              )}
-              {detail.source === PluginSource.debugging && (
-                <Tooltip popupContent={t('plugin.detailPanel.categoryTip.debugging')} >
-                  <div><RiBugLine className='h-3.5 w-3.5 text-text-tertiary hover:text-text-warning' /></div>
-                </Tooltip>
-              )}
-            </div>
-          </div>
-        </div>
-        <div className='flex gap-1'>
-          <OperationDropdown
-            source={detail.source}
-            onInfo={showPluginInfo}
-            onCheckVersion={handleUpdate}
-            onRemove={showDeleteConfirm}
-            detailUrl={detailUrl}
-          />
-          <ActionButton onClick={onHide}>
-            <RiCloseLine className='h-4 w-4' />
-          </ActionButton>
-        </div>
-      </div>
-      <Description className='mt-3' text={description[locale]} descriptionLineRows={2}></Description>
-      {isShowPluginInfo && (
-        <PluginInfo
-          repository={isFromGitHub ? meta?.repo : ''}
-          release={version}
-          packageName={meta?.package || ''}
-          onHide={hidePluginInfo}
-        />
-      )}
-      {isShowDeleteConfirm && (
-        <Confirm
-          isShow
-          title={t(`${i18nPrefix}.delete`)}
-          content={
-            <div>
-              {t(`${i18nPrefix}.deleteContentLeft`)}<span className='system-md-semibold'>{label[locale]}</span>{t(`${i18nPrefix}.deleteContentRight`)}<br />
-              {/* {usedInApps > 0 && t(`${i18nPrefix}.usedInApps`, { num: usedInApps })} */}
-            </div>
-          }
-          onCancel={hideDeleteConfirm}
-          onConfirm={handleDelete}
-          isLoading={deleting}
-          isDisabled={deleting}
-        />
-      )}
-      {
-        isShowUpdateModal && (
-          <UpdateFromMarketplace
-            payload={{
-              category: detail.declaration.category,
-              originalPackageInfo: {
-                id: detail.plugin_unique_identifier,
-                payload: detail.declaration,
-              },
-              targetPackageInfo: {
-                id: targetVersion.unique_identifier,
-                version: targetVersion.version,
-              },
-            }}
-            onCancel={hideUpdateModal}
-            onSave={handleUpdatedFromMarketplace}
-          />
-        )
-      }
-    </div>
-  )
-}
-
-export default DetailHeader
diff --git a/app/components/plugins/plugin-detail-panel/endpoint-card.tsx b/app/components/plugins/plugin-detail-panel/endpoint-card.tsx
deleted file mode 100644
index cc3688a..0000000
--- a/app/components/plugins/plugin-detail-panel/endpoint-card.tsx
+++ /dev/null
@@ -1,219 +0,0 @@
-import React, { useEffect, useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useBoolean } from 'ahooks'
-import copy from 'copy-to-clipboard'
-import { RiClipboardLine, RiDeleteBinLine, RiEditLine, RiLoginCircleLine } from '@remixicon/react'
-import type { EndpointListItem } from '../types'
-import EndpointModal from './endpoint-modal'
-import { NAME_FIELD } from './utils'
-import { addDefaultValue, toolCredentialToFormSchemas } from '@/app/components/tools/utils/to-form-schema'
-import { ClipboardCheck } from '@/app/components/base/icons/src/vender/line/files'
-import ActionButton from '@/app/components/base/action-button'
-import Confirm from '@/app/components/base/confirm'
-import Indicator from '@/app/components/header/indicator'
-import Switch from '@/app/components/base/switch'
-import Toast from '@/app/components/base/toast'
-import Tooltip from '@/app/components/base/tooltip'
-import {
-  useDeleteEndpoint,
-  useDisableEndpoint,
-  useEnableEndpoint,
-  useUpdateEndpoint,
-} from '@/service/use-endpoints'
-
-type Props = {
-  data: EndpointListItem
-  handleChange: () => void
-}
-
-const EndpointCard = ({
-  data,
-  handleChange,
-}: Props) => {
-  const { t } = useTranslation()
-  const [active, setActive] = useState(data.enabled)
-  const endpointID = data.id
-
-  // switch
-  const [isShowDisableConfirm, {
-    setTrue: showDisableConfirm,
-    setFalse: hideDisableConfirm,
-  }] = useBoolean(false)
-  const { mutate: enableEndpoint } = useEnableEndpoint({
-    onSuccess: async () => {
-      await handleChange()
-    },
-    onError: () => {
-      Toast.notify({ type: 'error', message: t('common.actionMsg.modifiedUnsuccessfully') })
-      setActive(false)
-    },
-  })
-  const { mutate: disableEndpoint } = useDisableEndpoint({
-    onSuccess: async () => {
-      await handleChange()
-      hideDisableConfirm()
-    },
-    onError: () => {
-      Toast.notify({ type: 'error', message: t('common.actionMsg.modifiedUnsuccessfully') })
-      setActive(false)
-    },
-  })
-  const handleSwitch = (state: boolean) => {
-    if (state) {
-      setActive(true)
-      enableEndpoint(endpointID)
-    }
-    else {
-      setActive(false)
-      showDisableConfirm()
-    }
-  }
-
-  // delete
-  const [isShowDeleteConfirm, {
-    setTrue: showDeleteConfirm,
-    setFalse: hideDeleteConfirm,
-  }] = useBoolean(false)
-  const { mutate: deleteEndpoint } = useDeleteEndpoint({
-    onSuccess: async () => {
-      await handleChange()
-      hideDeleteConfirm()
-    },
-    onError: () => {
-      Toast.notify({ type: 'error', message: t('common.actionMsg.modifiedUnsuccessfully') })
-    },
-  })
-
-  // update
-  const [isShowEndpointModal, {
-    setTrue: showEndpointModalConfirm,
-    setFalse: hideEndpointModalConfirm,
-  }] = useBoolean(false)
-  const formSchemas = useMemo(() => {
-    return toolCredentialToFormSchemas([NAME_FIELD, ...data.declaration.settings])
-  }, [data.declaration.settings])
-  const formValue = useMemo(() => {
-    const formValue = {
-      name: data.name,
-      ...data.settings,
-    }
-    return addDefaultValue(formValue, formSchemas)
-  }, [data.name, data.settings, formSchemas])
-  const { mutate: updateEndpoint } = useUpdateEndpoint({
-    onSuccess: async () => {
-      await handleChange()
-      hideEndpointModalConfirm()
-    },
-    onError: () => {
-      Toast.notify({ type: 'error', message: t('common.actionMsg.modifiedUnsuccessfully') })
-    },
-  })
-  const handleUpdate = (state: Record<string, any>) => updateEndpoint({
-    endpointID,
-    state,
-  })
-
-  const [isCopied, setIsCopied] = useState(false)
-  const handleCopy = (value: string) => {
-    copy(value)
-    setIsCopied(true)
-  }
-
-  useEffect(() => {
-    if (isCopied) {
-      const timer = setTimeout(() => {
-        setIsCopied(false)
-      }, 2000)
-      return () => {
-        clearTimeout(timer)
-      }
-    }
-  }, [isCopied])
-
-  const CopyIcon = isCopied ? ClipboardCheck : RiClipboardLine
-
-  return (
-    <div className='rounded-xl bg-background-section-burn p-0.5'>
-      <div className='group rounded-[10px] border-[0.5px] border-components-panel-border bg-components-panel-on-panel-item-bg p-2.5 pl-3'>
-        <div className='flex items-center'>
-          <div className='system-md-semibold mb-1 flex h-6 grow items-center gap-1 text-text-secondary'>
-            <RiLoginCircleLine className='h-4 w-4' />
-            <div>{data.name}</div>
-          </div>
-          <div className='hidden items-center group-hover:flex'>
-            <ActionButton onClick={showEndpointModalConfirm}>
-              <RiEditLine className='h-4 w-4' />
-            </ActionButton>
-            <ActionButton onClick={showDeleteConfirm} className='text-text-tertiary hover:bg-state-destructive-hover hover:text-text-destructive'>
-              <RiDeleteBinLine className='h-4 w-4' />
-            </ActionButton>
-          </div>
-        </div>
-        {data.declaration.endpoints.filter(endpoint => !endpoint.hidden).map((endpoint, index) => (
-          <div key={index} className='flex h-6 items-center'>
-            <div className='system-xs-regular w-12 shrink-0 text-text-tertiary'>{endpoint.method}</div>
-            <div className='group/item system-xs-regular flex grow items-center truncate text-text-secondary'>
-              <div title={`${data.url}${endpoint.path}`} className='truncate'>{`${data.url}${endpoint.path}`}</div>
-              <Tooltip popupContent={t(`common.operation.${isCopied ? 'copied' : 'copy'}`)} position='top'>
-                <ActionButton className='ml-2 hidden shrink-0 group-hover/item:flex' onClick={() => handleCopy(`${data.url}${endpoint.path}`)}>
-                  <CopyIcon className='h-3.5 w-3.5 text-text-tertiary' />
-                </ActionButton>
-              </Tooltip>
-            </div>
-          </div>
-        ))}
-      </div>
-      <div className='flex items-center justify-between p-2 pl-3'>
-        {active && (
-          <div className='system-xs-semibold-uppercase flex items-center gap-1 text-util-colors-green-green-600'>
-            <Indicator color='green' />
-            {t('plugin.detailPanel.serviceOk')}
-          </div>
-        )}
-        {!active && (
-          <div className='system-xs-semibold-uppercase flex items-center gap-1 text-text-tertiary'>
-            <Indicator color='gray' />
-            {t('plugin.detailPanel.disabled')}
-          </div>
-        )}
-        <Switch
-          className='ml-3'
-          defaultValue={active}
-          onChange={handleSwitch}
-          size='sm'
-        />
-      </div>
-      {isShowDisableConfirm && (
-        <Confirm
-          isShow
-          title={t('plugin.detailPanel.endpointDisableTip')}
-          content={<div>{t('plugin.detailPanel.endpointDisableContent', { name: data.name })}</div>}
-          onCancel={() => {
-            hideDisableConfirm()
-            setActive(true)
-          }}
-          onConfirm={() => disableEndpoint(endpointID)}
-        />
-      )}
-      {isShowDeleteConfirm && (
-        <Confirm
-          isShow
-          title={t('plugin.detailPanel.endpointDeleteTip')}
-          content={<div>{t('plugin.detailPanel.endpointDeleteContent', { name: data.name })}</div>}
-          onCancel={hideDeleteConfirm}
-          onConfirm={() => deleteEndpoint(endpointID)}
-        />
-      )}
-      {isShowEndpointModal && (
-        <EndpointModal
-          formSchemas={formSchemas}
-          defaultValues={formValue}
-          onCancel={hideEndpointModalConfirm}
-          onSaved={handleUpdate}
-        />
-      )}
-    </div>
-  )
-}
-
-export default EndpointCard
diff --git a/app/components/plugins/plugin-detail-panel/endpoint-list.tsx b/app/components/plugins/plugin-detail-panel/endpoint-list.tsx
deleted file mode 100644
index 59a457e..0000000
--- a/app/components/plugins/plugin-detail-panel/endpoint-list.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import React, { useMemo } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useContext } from 'use-context-selector'
-import { useBoolean } from 'ahooks'
-import {
-  RiAddLine,
-  RiApps2AddLine,
-  RiBookOpenLine,
-} from '@remixicon/react'
-import EndpointModal from './endpoint-modal'
-import EndpointCard from './endpoint-card'
-import { NAME_FIELD } from './utils'
-import { toolCredentialToFormSchemas } from '@/app/components/tools/utils/to-form-schema'
-import ActionButton from '@/app/components/base/action-button'
-import Tooltip from '@/app/components/base/tooltip'
-import Toast from '@/app/components/base/toast'
-import {
-  useCreateEndpoint,
-  useEndpointList,
-  useInvalidateEndpointList,
-} from '@/service/use-endpoints'
-import type { PluginDetail } from '@/app/components/plugins/types'
-import { LanguagesSupported } from '@/i18n/language'
-import I18n from '@/context/i18n'
-import cn from '@/utils/classnames'
-
-type Props = {
-  detail: PluginDetail
-}
-const EndpointList = ({ detail }: Props) => {
-  const { t } = useTranslation()
-  const { locale } = useContext(I18n)
-  const pluginUniqueID = detail.plugin_unique_identifier
-  const declaration = detail.declaration.endpoint
-  const showTopBorder = detail.declaration.tool
-  const { data } = useEndpointList(detail.plugin_id)
-  const invalidateEndpointList = useInvalidateEndpointList()
-
-  const [isShowEndpointModal, {
-    setTrue: showEndpointModal,
-    setFalse: hideEndpointModal,
-  }] = useBoolean(false)
-
-  const formSchemas = useMemo(() => {
-    return toolCredentialToFormSchemas([NAME_FIELD, ...declaration.settings])
-  }, [declaration.settings])
-
-  const { mutate: createEndpoint } = useCreateEndpoint({
-    onSuccess: async () => {
-      await invalidateEndpointList(detail.plugin_id)
-      hideEndpointModal()
-    },
-    onError: () => {
-      Toast.notify({ type: 'error', message: t('common.actionMsg.modifiedUnsuccessfully') })
-    },
-  })
-
-  const handleCreate = (state: Record<string, any>) => createEndpoint({
-    pluginUniqueID,
-    state,
-  })
-
-  if (!data)
-    return null
-
-  return (
-    <div className={cn('border-divider-subtle px-4 py-2', showTopBorder && 'border-t')}>
-      <div className='system-sm-semibold-uppercase mb-1 flex h-6 items-center justify-between text-text-secondary'>
-        <div className='flex items-center gap-0.5'>
-          {t('plugin.detailPanel.endpoints')}
-          <Tooltip
-            position='right'
-            needsDelay
-            popupClassName='w-[240px] p-4 rounded-xl bg-components-panel-bg-blur border-[0.5px] border-components-panel-border'
-            popupContent={
-              <div className='flex flex-col gap-2'>
-                <div className='flex h-8 w-8 items-center justify-center rounded-lg border-[0.5px] border-components-panel-border-subtle bg-background-default-subtle'>
-                  <RiApps2AddLine className='h-4 w-4 text-text-tertiary' />
-                </div>
-                <div className='system-xs-regular text-text-tertiary'>{t('plugin.detailPanel.endpointsTip')}</div>
-                <a
-                  href={`https://docs.dify.ai/${locale === LanguagesSupported[1] ? 'v/zh-hans/' : ''}plugins/schema-definition/endpoint`}
-                  target='_blank'
-                  rel='noopener noreferrer'
-                >
-                  <div className='system-xs-regular inline-flex cursor-pointer items-center gap-1 text-text-accent'>
-                    <RiBookOpenLine className='h-3 w-3' />
-                    {t('plugin.detailPanel.endpointsDocLink')}
-                  </div>
-                </a>
-              </div>
-            }
-          />
-        </div>
-        <ActionButton onClick={showEndpointModal}>
-          <RiAddLine className='h-4 w-4' />
-        </ActionButton>
-      </div>
-      {data.endpoints.length === 0 && (
-        <div className='system-xs-regular mb-1 flex justify-center rounded-[10px] bg-background-section p-3 text-text-tertiary'>{t('plugin.detailPanel.endpointsEmpty')}</div>
-      )}
-      <div className='flex flex-col gap-2'>
-        {data.endpoints.map((item, index) => (
-          <EndpointCard
-            key={index}
-            data={item}
-            handleChange={() => invalidateEndpointList(detail.plugin_id)}
-          />
-        ))}
-      </div>
-      {isShowEndpointModal && (
-        <EndpointModal
-          formSchemas={formSchemas}
-          onCancel={hideEndpointModal}
-          onSaved={handleCreate}
-        />
-      )}
-    </div>
-  )
-}
-
-export default EndpointList
diff --git a/app/components/plugins/plugin-detail-panel/endpoint-modal.tsx b/app/components/plugins/plugin-detail-panel/endpoint-modal.tsx
deleted file mode 100644
index fd86272..0000000
--- a/app/components/plugins/plugin-detail-panel/endpoint-modal.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiArrowRightUpLine, RiCloseLine } from '@remixicon/react'
-import ActionButton from '@/app/components/base/action-button'
-import Button from '@/app/components/base/button'
-import Drawer from '@/app/components/base/drawer'
-import Form from '@/app/components/header/account-setting/model-provider-page/model-modal/Form'
-import Toast from '@/app/components/base/toast'
-import { useRenderI18nObject } from '@/hooks/use-i18n'
-import cn from '@/utils/classnames'
-
-type Props = {
-  formSchemas: any
-  defaultValues?: any
-  onCancel: () => void
-  onSaved: (value: Record<string, any>) => void
-}
-
-const EndpointModal: FC<Props> = ({
-  formSchemas,
-  defaultValues = {},
-  onCancel,
-  onSaved,
-}) => {
-  const getValueFromI18nObject = useRenderI18nObject()
-  const { t } = useTranslation()
-  const [tempCredential, setTempCredential] = React.useState<any>(defaultValues)
-
-  const handleSave = () => {
-    for (const field of formSchemas) {
-      if (field.required && !tempCredential[field.name]) {
-        Toast.notify({ type: 'error', message: t('common.errorMsg.fieldRequired', { field: getValueFromI18nObject(field.label) }) })
-        return
-      }
-    }
-    onSaved(tempCredential)
-  }
-
-  return (
-    <Drawer
-      isOpen
-      clickOutsideNotOpen={false}
-      onClose={onCancel}
-      footer={null}
-      mask
-      positionCenter={false}
-      panelClassName={cn('mb-2 mr-2 mt-[64px] !w-[420px] !max-w-[420px] justify-start rounded-2xl border-[0.5px] border-components-panel-border !bg-components-panel-bg !p-0 shadow-xl')}
-    >
-      <>
-        <div className='p-4 pb-2'>
-          <div className='flex items-center justify-between'>
-            <div className='system-xl-semibold text-text-primary'>{t('plugin.detailPanel.endpointModalTitle')}</div>
-            <ActionButton onClick={onCancel}>
-              <RiCloseLine className='h-4 w-4' />
-            </ActionButton>
-          </div>
-          <div className='system-xs-regular mt-0.5 text-text-tertiary'>{t('plugin.detailPanel.endpointModalDesc')}</div>
-        </div>
-        <div className='grow overflow-y-auto'>
-          <div className='px-4 py-2'>
-            <Form
-              value={tempCredential}
-              onChange={(v) => {
-                setTempCredential(v)
-              }}
-              formSchemas={formSchemas}
-              isEditMode={true}
-              showOnVariableMap={{}}
-              validating={false}
-              inputClassName='bg-components-input-bg-normal hover:bg-components-input-bg-hover'
-              fieldMoreInfo={item => item.url
-                ? (<a
-                  href={item.url}
-                  target='_blank' rel='noopener noreferrer'
-                  className='body-xs-regular inline-flex items-center text-text-accent-secondary'
-                >
-                  {t('tools.howToGet')}
-                  <RiArrowRightUpLine className='ml-1 h-3 w-3' />
-                </a>)
-                : null}
-            />
-          </div>
-          <div className={cn('flex justify-end p-4 pt-0')} >
-            <div className='flex gap-2'>
-              <Button onClick={onCancel}>{t('common.operation.cancel')}</Button>
-              <Button variant='primary' onClick={handleSave}>{t('common.operation.save')}</Button>
-            </div>
-          </div>
-        </div>
-      </>
-    </Drawer>
-  )
-}
-export default React.memo(EndpointModal)
diff --git a/app/components/plugins/plugin-detail-panel/index.tsx b/app/components/plugins/plugin-detail-panel/index.tsx
deleted file mode 100644
index 3ec867f..0000000
--- a/app/components/plugins/plugin-detail-panel/index.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-'use client'
-import React from 'react'
-import type { FC } from 'react'
-import DetailHeader from './detail-header'
-import EndpointList from './endpoint-list'
-import ActionList from './action-list'
-import ModelList from './model-list'
-import AgentStrategyList from './agent-strategy-list'
-import Drawer from '@/app/components/base/drawer'
-import type { PluginDetail } from '@/app/components/plugins/types'
-import cn from '@/utils/classnames'
-
-type Props = {
-  detail?: PluginDetail
-  onUpdate: () => void
-  onHide: () => void
-}
-
-const PluginDetailPanel: FC<Props> = ({
-  detail,
-  onUpdate,
-  onHide,
-}) => {
-  const handleUpdate = (isDelete = false) => {
-    if (isDelete)
-      onHide()
-    onUpdate()
-  }
-
-  if (!detail)
-    return null
-
-  return (
-    <Drawer
-      isOpen={!!detail}
-      clickOutsideNotOpen={false}
-      onClose={onHide}
-      footer={null}
-      mask={false}
-      positionCenter={false}
-      panelClassName={cn('mb-2 mr-2 mt-[64px] !w-[420px] !max-w-[420px] justify-start rounded-2xl border-[0.5px] border-components-panel-border !bg-components-panel-bg !p-0 shadow-xl')}
-    >
-      {detail && (
-        <>
-          <DetailHeader
-            detail={detail}
-            onHide={onHide}
-            onUpdate={handleUpdate}
-          />
-          <div className='grow overflow-y-auto'>
-            {!!detail.declaration.tool && <ActionList detail={detail} />}
-            {!!detail.declaration.agent_strategy && <AgentStrategyList detail={detail} />}
-            {!!detail.declaration.endpoint && <EndpointList detail={detail} />}
-            {!!detail.declaration.model && <ModelList detail={detail} />}
-          </div>
-        </>
-      )}
-    </Drawer>
-  )
-}
-
-export default PluginDetailPanel
diff --git a/app/components/plugins/plugin-detail-panel/model-list.tsx b/app/components/plugins/plugin-detail-panel/model-list.tsx
deleted file mode 100644
index 251859e..0000000
--- a/app/components/plugins/plugin-detail-panel/model-list.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import ModelIcon from '@/app/components/header/account-setting/model-provider-page/model-icon'
-import ModelName from '@/app/components/header/account-setting/model-provider-page/model-name'
-import { useModelProviderModelList } from '@/service/use-models'
-import type { PluginDetail } from '@/app/components/plugins/types'
-
-type Props = {
-  detail: PluginDetail
-}
-
-const ModelList = ({
-  detail,
-}: Props) => {
-  const { t } = useTranslation()
-  const { data: res } = useModelProviderModelList(`${detail.plugin_id}/${detail.declaration.model.provider}`)
-
-  if (!res)
-    return null
-
-  return (
-    <div className='px-4 py-2'>
-      <div className='system-sm-semibold-uppercase mb-1 flex h-6 items-center text-text-secondary'>{t('plugin.detailPanel.modelNum', { num: res.data.length })}</div>
-      <div className='flex flex-col'>
-        {res.data.map(model => (
-          <div key={model.model} className='flex h-6 items-center py-1'>
-            <ModelIcon
-              className='mr-2 shrink-0'
-              provider={(model as any).provider}
-              modelName={model.model}
-            />
-            <ModelName
-              className='system-md-regular grow text-text-secondary'
-              modelItem={model}
-              showModelType
-              showMode
-              showContextSize
-            />
-          </div>
-        ))}
-      </div>
-    </div>
-  )
-}
-
-export default ModelList
diff --git a/app/components/plugins/plugin-detail-panel/model-selector/index.tsx b/app/components/plugins/plugin-detail-panel/model-selector/index.tsx
deleted file mode 100644
index 60c63db..0000000
--- a/app/components/plugins/plugin-detail-panel/model-selector/index.tsx
+++ /dev/null
@@ -1,251 +0,0 @@
-import type {
-  FC,
-  ReactNode,
-} from 'react'
-import { useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import type {
-  DefaultModel,
-  FormValue,
-} from '@/app/components/header/account-setting/model-provider-page/declarations'
-import { ModelStatusEnum, ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector'
-import {
-  useModelList,
-} from '@/app/components/header/account-setting/model-provider-page/hooks'
-import AgentModelTrigger from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal/agent-model-trigger'
-import Trigger from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal/trigger'
-import type { TriggerProps } from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal/trigger'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import LLMParamsPanel from './llm-params-panel'
-import TTSParamsPanel from './tts-params-panel'
-import { useProviderContext } from '@/context/provider-context'
-import cn from '@/utils/classnames'
-
-export type ModelParameterModalProps = {
-  popupClassName?: string
-  portalToFollowElemContentClassName?: string
-  isAdvancedMode: boolean
-  value: any
-  setModel: (model: any) => void
-  renderTrigger?: (v: TriggerProps) => ReactNode
-  readonly?: boolean
-  isInWorkflow?: boolean
-  isAgentStrategy?: boolean
-  scope?: string
-}
-
-const ModelParameterModal: FC<ModelParameterModalProps> = ({
-  popupClassName,
-  portalToFollowElemContentClassName,
-  isAdvancedMode,
-  value,
-  setModel,
-  renderTrigger,
-  readonly,
-  isInWorkflow,
-  isAgentStrategy,
-  scope = ModelTypeEnum.textGeneration,
-}) => {
-  const { t } = useTranslation()
-  const { isAPIKeySet } = useProviderContext()
-  const [open, setOpen] = useState(false)
-  const scopeArray = scope.split('&')
-  const scopeFeatures = useMemo(() => {
-    if (scopeArray.includes('all'))
-      return []
-    return scopeArray.filter(item => ![
-      ModelTypeEnum.textGeneration,
-      ModelTypeEnum.textEmbedding,
-      ModelTypeEnum.rerank,
-      ModelTypeEnum.moderation,
-      ModelTypeEnum.speech2text,
-      ModelTypeEnum.tts,
-    ].includes(item as ModelTypeEnum))
-  }, [scopeArray])
-
-  const { data: textGenerationList } = useModelList(ModelTypeEnum.textGeneration)
-  const { data: textEmbeddingList } = useModelList(ModelTypeEnum.textEmbedding)
-  const { data: rerankList } = useModelList(ModelTypeEnum.rerank)
-  const { data: moderationList } = useModelList(ModelTypeEnum.moderation)
-  const { data: sttList } = useModelList(ModelTypeEnum.speech2text)
-  const { data: ttsList } = useModelList(ModelTypeEnum.tts)
-
-  const scopedModelList = useMemo(() => {
-    const resultList: any[] = []
-    if (scopeArray.includes('all')) {
-      return [
-        ...textGenerationList,
-        ...textEmbeddingList,
-        ...rerankList,
-        ...sttList,
-        ...ttsList,
-        ...moderationList,
-      ]
-    }
-    if (scopeArray.includes(ModelTypeEnum.textGeneration))
-      return textGenerationList
-    if (scopeArray.includes(ModelTypeEnum.textEmbedding))
-      return textEmbeddingList
-    if (scopeArray.includes(ModelTypeEnum.rerank))
-      return rerankList
-    if (scopeArray.includes(ModelTypeEnum.moderation))
-      return moderationList
-    if (scopeArray.includes(ModelTypeEnum.speech2text))
-      return sttList
-    if (scopeArray.includes(ModelTypeEnum.tts))
-      return ttsList
-    return resultList
-  }, [scopeArray, textGenerationList, textEmbeddingList, rerankList, sttList, ttsList, moderationList])
-
-  const { currentProvider, currentModel } = useMemo(() => {
-    const currentProvider = scopedModelList.find(item => item.provider === value?.provider)
-    const currentModel = currentProvider?.models.find((model: { model: string }) => model.model === value?.model)
-    return {
-      currentProvider,
-      currentModel,
-    }
-  }, [scopedModelList, value?.provider, value?.model])
-
-  const hasDeprecated = useMemo(() => {
-    return !currentProvider || !currentModel
-  }, [currentModel, currentProvider])
-  const modelDisabled = useMemo(() => {
-    return currentModel?.status !== ModelStatusEnum.active
-  }, [currentModel?.status])
-  const disabled = useMemo(() => {
-    return !isAPIKeySet || hasDeprecated || modelDisabled
-  }, [hasDeprecated, isAPIKeySet, modelDisabled])
-
-  const handleChangeModel = ({ provider, model }: DefaultModel) => {
-    const targetProvider = scopedModelList.find(modelItem => modelItem.provider === provider)
-    const targetModelItem = targetProvider?.models.find((modelItem: { model: string }) => modelItem.model === model)
-    const model_type = targetModelItem?.model_type as string
-    setModel({
-      provider,
-      model,
-      model_type,
-      ...(model_type === ModelTypeEnum.textGeneration ? {
-        mode: targetModelItem?.model_properties.mode as string,
-        completion_params: {},
-      } : {}),
-    })
-  }
-
-  const handleLLMParamsChange = (newParams: FormValue) => {
-    const newValue = {
-      ...(value?.completionParams || {}),
-      completion_params: newParams,
-    }
-    setModel({
-      ...value,
-      ...newValue,
-    })
-  }
-
-  const handleTTSParamsChange = (language: string, voice: string) => {
-    setModel({
-      ...value,
-      language,
-      voice,
-    })
-  }
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement={isInWorkflow ? 'left' : 'bottom-end'}
-      offset={4}
-    >
-      <div className='relative'>
-        <PortalToFollowElemTrigger
-          onClick={() => {
-            if (readonly)
-              return
-            setOpen(v => !v)
-          }}
-          className='block'
-        >
-          {
-            renderTrigger
-              ? renderTrigger({
-                open,
-                disabled,
-                modelDisabled,
-                hasDeprecated,
-                currentProvider,
-                currentModel,
-                providerName: value?.provider,
-                modelId: value?.model,
-              })
-              : (isAgentStrategy
-                ? <AgentModelTrigger
-                  disabled={disabled}
-                  hasDeprecated={hasDeprecated}
-                  currentProvider={currentProvider}
-                  currentModel={currentModel}
-                  providerName={value?.provider}
-                  modelId={value?.model}
-                  scope={scope}
-                />
-                : <Trigger
-                  disabled={disabled}
-                  isInWorkflow={isInWorkflow}
-                  modelDisabled={modelDisabled}
-                  hasDeprecated={hasDeprecated}
-                  currentProvider={currentProvider}
-                  currentModel={currentModel}
-                  providerName={value?.provider}
-                  modelId={value?.model}
-                />
-              )
-          }
-        </PortalToFollowElemTrigger>
-        <PortalToFollowElemContent className={cn('z-50', portalToFollowElemContentClassName)}>
-          <div className={cn(popupClassName, 'w-[389px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-lg')}>
-            <div className={cn('max-h-[420px] overflow-y-auto p-4 pt-3')}>
-              <div className='relative'>
-                <div className={cn('system-sm-semibold mb-1 flex h-6 items-center text-text-secondary')}>
-                  {t('common.modelProvider.model').toLocaleUpperCase()}
-                </div>
-                <ModelSelector
-                  defaultModel={(value?.provider || value?.model) ? { provider: value?.provider, model: value?.model } : undefined}
-                  modelList={scopedModelList}
-                  scopeFeatures={scopeFeatures}
-                  onSelect={handleChangeModel}
-                />
-              </div>
-              {(currentModel?.model_type === ModelTypeEnum.textGeneration || currentModel?.model_type === ModelTypeEnum.tts) && (
-                <div className='my-3 h-[1px] bg-divider-subtle' />
-              )}
-              {currentModel?.model_type === ModelTypeEnum.textGeneration && (
-                <LLMParamsPanel
-                  provider={value?.provider}
-                  modelId={value?.model}
-                  completionParams={value?.completion_params || {}}
-                  onCompletionParamsChange={handleLLMParamsChange}
-                  isAdvancedMode={isAdvancedMode}
-                />
-              )}
-              {currentModel?.model_type === ModelTypeEnum.tts && (
-                <TTSParamsPanel
-                  currentModel={currentModel}
-                  language={value?.language}
-                  voice={value?.voice}
-                  onChange={handleTTSParamsChange}
-                />
-              )}
-            </div>
-          </div>
-        </PortalToFollowElemContent>
-      </div>
-    </PortalToFollowElem>
-  )
-}
-
-export default ModelParameterModal
diff --git a/app/components/plugins/plugin-detail-panel/model-selector/llm-params-panel.tsx b/app/components/plugins/plugin-detail-panel/model-selector/llm-params-panel.tsx
deleted file mode 100644
index e44697b..0000000
--- a/app/components/plugins/plugin-detail-panel/model-selector/llm-params-panel.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-import React, { useMemo } from 'react'
-import useSWR from 'swr'
-import { useTranslation } from 'react-i18next'
-import PresetsParameter from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal/presets-parameter'
-import ParameterItem from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal/parameter-item'
-import Loading from '@/app/components/base/loading'
-import type {
-  FormValue,
-  ModelParameterRule,
-} from '@/app/components/header/account-setting/model-provider-page/declarations'
-import type { ParameterValue } from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal/parameter-item'
-import { fetchModelParameterRules } from '@/service/common'
-import { TONE_LIST } from '@/config'
-import cn from '@/utils/classnames'
-
-const PROVIDER_WITH_PRESET_TONE = ['langgenius/openai/openai', 'langgenius/azure_openai/azure_openai']
-const stopParameterRule: ModelParameterRule = {
-  default: [],
-  help: {
-    en_US: 'Up to four sequences where the API聽will stop generating further tokens. The聽returned text will not contain the stop聽sequence.',
-    zh_Hans: '鏈�澶氬洓涓簭鍒楋紝API 灏嗗仠姝㈢敓鎴愭洿澶氱殑 token銆傝繑鍥炵殑鏂囨湰灏嗕笉鍖呭惈鍋滄搴忓垪銆�',
-  },
-  label: {
-    en_US: 'Stop sequences',
-    zh_Hans: '鍋滄搴忓垪',
-  },
-  name: 'stop',
-  required: false,
-  type: 'tag',
-  tagPlaceholder: {
-    en_US: 'Enter sequence and press Tab',
-    zh_Hans: '杈撳叆搴忓垪骞舵寜 Tab 閿�',
-  },
-}
-
-type Props = {
-  isAdvancedMode: boolean
-  provider: string
-  modelId: string
-  completionParams: FormValue
-  onCompletionParamsChange: (newParams: FormValue) => void
-}
-
-const LLMParamsPanel = ({
-  isAdvancedMode,
-  provider,
-  modelId,
-  completionParams,
-  onCompletionParamsChange,
-}: Props) => {
-  const { t } = useTranslation()
-  const { data: parameterRulesData, isLoading } = useSWR(
-    (provider && modelId)
-      ? `/workspaces/current/model-providers/${provider}/models/parameter-rules?model=${modelId}`
-      : null, fetchModelParameterRules,
-  )
-
-  const parameterRules: ModelParameterRule[] = useMemo(() => {
-    return parameterRulesData?.data || []
-  }, [parameterRulesData])
-
-  const handleSelectPresetParameter = (toneId: number) => {
-    const tone = TONE_LIST.find(tone => tone.id === toneId)
-    if (tone) {
-      onCompletionParamsChange({
-        ...completionParams,
-        ...tone.config,
-      })
-    }
-  }
-  const handleParamChange = (key: string, value: ParameterValue) => {
-    onCompletionParamsChange({
-      ...completionParams,
-      [key]: value,
-    })
-  }
-  const handleSwitch = (key: string, value: boolean, assignValue: ParameterValue) => {
-    if (!value) {
-      const newCompletionParams = { ...completionParams }
-      delete newCompletionParams[key]
-
-      onCompletionParamsChange(newCompletionParams)
-    }
-    if (value) {
-      onCompletionParamsChange({
-        ...completionParams,
-        [key]: assignValue,
-      })
-    }
-  }
-
-  if (isLoading) {
-    return (
-      <div className='mt-5'><Loading /></div>
-    )
-  }
-
-  return (
-    <>
-      <div className='mb-2 flex items-center justify-between'>
-        <div className={cn('system-sm-semibold flex h-6 items-center text-text-secondary')}>{t('common.modelProvider.parameters')}</div>
-        {
-          PROVIDER_WITH_PRESET_TONE.includes(provider) && (
-            <PresetsParameter onSelect={handleSelectPresetParameter} />
-          )
-        }
-      </div>
-      {!!parameterRules.length && (
-        [
-          ...parameterRules,
-          ...(isAdvancedMode ? [stopParameterRule] : []),
-        ].map(parameter => (
-          <ParameterItem
-            key={`${modelId}-${parameter.name}`}
-            parameterRule={parameter}
-            value={completionParams?.[parameter.name]}
-            onChange={v => handleParamChange(parameter.name, v)}
-            onSwitch={(checked, assignValue) => handleSwitch(parameter.name, checked, assignValue)}
-            isInWorkflow
-          />
-        )))}
-    </>
-  )
-}
-
-export default LLMParamsPanel
diff --git a/app/components/plugins/plugin-detail-panel/model-selector/tts-params-panel.tsx b/app/components/plugins/plugin-detail-panel/model-selector/tts-params-panel.tsx
deleted file mode 100644
index 5bd099b..0000000
--- a/app/components/plugins/plugin-detail-panel/model-selector/tts-params-panel.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React, { useMemo } from 'react'
-import { useTranslation } from 'react-i18next'
-import { languages } from '@/i18n/language'
-import { PortalSelect } from '@/app/components/base/select'
-import cn from '@/utils/classnames'
-
-type Props = {
-  currentModel: any
-  language: string
-  voice: string
-  onChange: (language: string, voice: string) => void
-}
-
-const TTSParamsPanel = ({
-  currentModel,
-  language,
-  voice,
-  onChange,
-}: Props) => {
-  const { t } = useTranslation()
-  const voiceList = useMemo(() => {
-    if (!currentModel)
-      return []
-    return currentModel.model_properties.voices.map((item: { mode: any }) => ({
-      ...item,
-      value: item.mode,
-    }))
-  }, [currentModel])
-  const setLanguage = (language: string) => {
-    onChange(language, voice)
-  }
-  const setVoice = (voice: string) => {
-    onChange(language, voice)
-  }
-  return (
-    <>
-      <div className='mb-3'>
-        <div className='system-sm-semibold mb-1 flex items-center py-1 text-text-secondary'>
-          {t('appDebug.voice.voiceSettings.language')}
-        </div>
-        <PortalSelect
-          triggerClassName='h-8'
-          popupClassName={cn('z-[1000]')}
-          popupInnerClassName={cn('w-[354px]')}
-          value={language}
-          items={languages.filter(item => item.supported)}
-          onSelect={item => setLanguage(item.value as string)}
-        />
-      </div>
-      <div className='mb-3'>
-        <div className='system-sm-semibold mb-1 flex items-center py-1 text-text-secondary'>
-          {t('appDebug.voice.voiceSettings.voice')}
-        </div>
-        <PortalSelect
-          triggerClassName='h-8'
-          popupClassName={cn('z-[1000]')}
-          popupInnerClassName={cn('w-[354px]')}
-          value={voice}
-          items={voiceList}
-          onSelect={item => setVoice(item.value as string)}
-        />
-      </div>
-    </>
-  )
-}
-
-export default TTSParamsPanel
diff --git a/app/components/plugins/plugin-detail-panel/multiple-tool-selector/index.tsx b/app/components/plugins/plugin-detail-panel/multiple-tool-selector/index.tsx
deleted file mode 100644
index f243d30..0000000
--- a/app/components/plugins/plugin-detail-panel/multiple-tool-selector/index.tsx
+++ /dev/null
@@ -1,170 +0,0 @@
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiAddLine,
-  RiQuestionLine,
-} from '@remixicon/react'
-import ToolSelector from '@/app/components/plugins/plugin-detail-panel/tool-selector'
-import ActionButton from '@/app/components/base/action-button'
-import Tooltip from '@/app/components/base/tooltip'
-import Divider from '@/app/components/base/divider'
-import type { ToolValue } from '@/app/components/workflow/block-selector/types'
-import type { Node } from 'reactflow'
-import type { NodeOutPutVar } from '@/app/components/workflow/types'
-import cn from '@/utils/classnames'
-import { ArrowDownRoundFill } from '@/app/components/base/icons/src/vender/solid/general'
-
-type Props = {
-  disabled?: boolean
-  value: ToolValue[]
-  label: string
-  required?: boolean
-  tooltip?: any
-  supportCollapse?: boolean
-  scope?: string
-  onChange: (value: ToolValue[]) => void
-  nodeOutputVars: NodeOutPutVar[],
-  availableNodes: Node[],
-  nodeId?: string
-}
-
-const MultipleToolSelector = ({
-  disabled,
-  value = [],
-  label,
-  required,
-  tooltip,
-  supportCollapse,
-  scope,
-  onChange,
-  nodeOutputVars,
-  availableNodes,
-  nodeId,
-}: Props) => {
-  const { t } = useTranslation()
-  const enabledCount = value.filter(item => item.enabled).length
-  // collapse control
-  const [collapse, setCollapse] = React.useState(false)
-  const handleCollapse = () => {
-    if (supportCollapse)
-      setCollapse(!collapse)
-  }
-
-  // add tool
-  const [open, setOpen] = React.useState(false)
-  const [panelShowState, setPanelShowState] = React.useState(true)
-  const handleAdd = (val: ToolValue) => {
-    const newValue = [...value, val]
-    // deduplication
-    const deduplication = newValue.reduce((acc, cur) => {
-      if (!acc.find(item => item.provider_name === cur.provider_name && item.tool_name === cur.tool_name))
-        acc.push(cur)
-      return acc
-    }, [] as ToolValue[])
-    // update value
-    onChange(deduplication)
-    setOpen(false)
-  }
-
-  // delete tool
-  const handleDelete = (index: number) => {
-    const newValue = [...value]
-    newValue.splice(index, 1)
-    onChange(newValue)
-  }
-
-  // configure tool
-  const handleConfigure = (val: ToolValue, index: number) => {
-    const newValue = [...value]
-    newValue[index] = val
-    onChange(newValue)
-  }
-
-  return (
-    <>
-      <div className='mb-1 flex items-center'>
-        <div
-          className={cn('relative flex grow items-center gap-0.5', supportCollapse && 'cursor-pointer')}
-          onClick={handleCollapse}
-        >
-          <div className='system-sm-semibold-uppercase flex h-6 items-center text-text-secondary'>{label}</div>
-          {required && <div className='text-red-500'>*</div>}
-          {tooltip && (
-            <Tooltip
-              popupContent={tooltip}
-              needsDelay
-            >
-              <div><RiQuestionLine className='h-3.5 w-3.5 text-text-quaternary hover:text-text-tertiary' /></div>
-            </Tooltip>
-          )}
-          {supportCollapse && (
-            <ArrowDownRoundFill
-              className={cn(
-                'h-4 w-4 cursor-pointer text-text-quaternary group-hover/collapse:text-text-secondary',
-                collapse && 'rotate-[270deg]',
-              )}
-            />
-          )}
-        </div>
-        {value.length > 0 && (
-          <>
-            <div className='system-xs-medium flex items-center gap-1 text-text-tertiary'>
-              <span>{`${enabledCount}/${value.length}`}</span>
-              <span>{t('appDebug.agent.tools.enabled')}</span>
-            </div>
-            <Divider type='vertical' className='ml-3 mr-1 h-3' />
-          </>
-        )}
-        {!disabled && (
-          <ActionButton className='mx-1' onClick={() => {
-            setOpen(!open)
-            setPanelShowState(true)
-          }}>
-            <RiAddLine className='h-4 w-4' />
-          </ActionButton>
-        )}
-      </div>
-      {!collapse && (
-        <>
-          <ToolSelector
-            nodeId={nodeId}
-            nodeOutputVars={nodeOutputVars}
-            availableNodes={availableNodes}
-            scope={scope}
-            value={undefined}
-            selectedTools={value}
-            onSelect={handleAdd}
-            controlledState={open}
-            onControlledStateChange={setOpen}
-            trigger={
-              <div className=''></div>
-            }
-            panelShowState={panelShowState}
-            onPanelShowStateChange={setPanelShowState}
-
-          />
-          {value.length === 0 && (
-            <div className='system-xs-regular flex justify-center rounded-[10px] bg-background-section p-3 text-text-tertiary'>{t('plugin.detailPanel.toolSelector.empty')}</div>
-          )}
-          {value.length > 0 && value.map((item, index) => (
-            <div className='mb-1' key={index}>
-              <ToolSelector
-                nodeId={nodeId}
-                nodeOutputVars={nodeOutputVars}
-                availableNodes={availableNodes}
-                scope={scope}
-                value={item}
-                selectedTools={value}
-                onSelect={item => handleConfigure(item, index)}
-                onDelete={() => handleDelete(index)}
-                supportEnableSwitch
-              />
-            </div>
-          ))}
-        </>
-      )}
-    </>
-  )
-}
-
-export default MultipleToolSelector
diff --git a/app/components/plugins/plugin-detail-panel/operation-dropdown.tsx b/app/components/plugins/plugin-detail-panel/operation-dropdown.tsx
deleted file mode 100644
index f8b4f63..0000000
--- a/app/components/plugins/plugin-detail-panel/operation-dropdown.tsx
+++ /dev/null
@@ -1,101 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useRef, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import { PluginSource } from '../types'
-import { RiArrowRightUpLine, RiMoreFill } from '@remixicon/react'
-import ActionButton from '@/app/components/base/action-button'
-// import Button from '@/app/components/base/button'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import cn from '@/utils/classnames'
-
-type Props = {
-  source: PluginSource
-  onInfo: () => void
-  onCheckVersion: () => void
-  onRemove: () => void
-  detailUrl: string
-}
-
-const OperationDropdown: FC<Props> = ({
-  source,
-  detailUrl,
-  onInfo,
-  onCheckVersion,
-  onRemove,
-}) => {
-  const { t } = useTranslation()
-  const [open, doSetOpen] = useState(false)
-  const openRef = useRef(open)
-  const setOpen = useCallback((v: boolean) => {
-    doSetOpen(v)
-    openRef.current = v
-  }, [doSetOpen])
-
-  const handleTrigger = useCallback(() => {
-    setOpen(!openRef.current)
-  }, [setOpen])
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: -12,
-        crossAxis: 36,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={handleTrigger}>
-        <div>
-          <ActionButton className={cn(open && 'bg-state-base-hover')}>
-            <RiMoreFill className='h-4 w-4' />
-          </ActionButton>
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-50'>
-        <div className='w-[160px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          {source === PluginSource.github && (
-            <div
-              onClick={() => {
-                onInfo()
-                handleTrigger()
-              }}
-              className='system-md-regular cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'
-            >{t('plugin.detailPanel.operation.info')}</div>
-          )}
-          {source === PluginSource.github && (
-            <div
-              onClick={() => {
-                onCheckVersion()
-                handleTrigger()
-              }}
-              className='system-md-regular cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'
-            >{t('plugin.detailPanel.operation.checkUpdate')}</div>
-          )}
-          {(source === PluginSource.marketplace || source === PluginSource.github) && (
-            <a href={detailUrl} target='_blank' className='system-md-regular flex cursor-pointer items-center rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'>
-              <span className='grow'>{t('plugin.detailPanel.operation.viewDetail')}</span>
-              <RiArrowRightUpLine className='h-3.5 w-3.5 shrink-0 text-text-tertiary' />
-            </a>
-          )}
-          {(source === PluginSource.marketplace || source === PluginSource.github) && (
-            <div className='my-1 h-px bg-divider-subtle'></div>
-          )}
-          <div
-            onClick={() => {
-              onRemove()
-              handleTrigger()
-            }}
-            className='system-md-regular cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-destructive-hover hover:text-text-destructive'
-          >{t('plugin.detailPanel.operation.remove')}</div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-export default React.memo(OperationDropdown)
diff --git a/app/components/plugins/plugin-detail-panel/strategy-detail.tsx b/app/components/plugins/plugin-detail-panel/strategy-detail.tsx
deleted file mode 100644
index 00794d8..0000000
--- a/app/components/plugins/plugin-detail-panel/strategy-detail.tsx
+++ /dev/null
@@ -1,164 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useMemo } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowLeftLine,
-  RiCloseLine,
-} from '@remixicon/react'
-import Drawer from '@/app/components/base/drawer'
-import ActionButton from '@/app/components/base/action-button'
-import Icon from '@/app/components/plugins/card/base/card-icon'
-import Description from '@/app/components/plugins/card/base/description'
-import Divider from '@/app/components/base/divider'
-import type {
-  StrategyDetail as StrategyDetailType,
-} from '@/app/components/plugins/types'
-import type { Locale } from '@/i18n'
-import { useRenderI18nObject } from '@/hooks/use-i18n'
-import { API_PREFIX } from '@/config'
-import cn from '@/utils/classnames'
-
-type Props = {
-  provider: {
-    author: string
-    name: string
-    description: Record<Locale, string>
-    tenant_id: string
-    icon: string
-    label: Record<Locale, string>
-    tags: string[]
-  }
-  detail: StrategyDetailType
-  onHide: () => void
-}
-
-const StrategyDetail: FC<Props> = ({
-  provider,
-  detail,
-  onHide,
-}) => {
-  const getValueFromI18nObject = useRenderI18nObject()
-  const { t } = useTranslation()
-
-  const outputSchema = useMemo(() => {
-    const res: any[] = []
-    if (!detail.output_schema)
-      return []
-    Object.keys(detail.output_schema.properties).forEach((outputKey) => {
-      const output = detail.output_schema.properties[outputKey]
-      res.push({
-        name: outputKey,
-        type: output.type === 'array'
-          ? `Array[${output.items?.type.slice(0, 1).toLocaleUpperCase()}${output.items?.type.slice(1)}]`
-          : `${output.type.slice(0, 1).toLocaleUpperCase()}${output.type.slice(1)}`,
-        description: output.description,
-      })
-    })
-    return res
-  }, [detail.output_schema])
-
-  const getType = (type: string) => {
-    if (type === 'number-input')
-      return t('tools.setBuiltInTools.number')
-    if (type === 'text-input')
-      return t('tools.setBuiltInTools.string')
-    if (type === 'file')
-      return t('tools.setBuiltInTools.file')
-    if (type === 'array[tools]')
-      return 'multiple-tool-select'
-    return type
-  }
-
-  return (
-    <Drawer
-      isOpen
-      clickOutsideNotOpen={false}
-      onClose={onHide}
-      footer={null}
-      mask={false}
-      positionCenter={false}
-      panelClassName={cn('mb-2 mr-2 mt-[64px] !w-[420px] !max-w-[420px] justify-start rounded-2xl border-[0.5px] border-components-panel-border !bg-components-panel-bg !p-0 shadow-xl')}
-    >
-      <>
-        {/* header */}
-        <div className='relative border-b border-divider-subtle p-4 pb-3'>
-          <div className='absolute right-3 top-3'>
-            <ActionButton onClick={onHide}>
-              <RiCloseLine className='h-4 w-4' />
-            </ActionButton>
-          </div>
-          <div
-            className='system-xs-semibold-uppercase mb-2 flex cursor-pointer items-center gap-1 text-text-accent-secondary'
-            onClick={onHide}
-          >
-            <RiArrowLeftLine className='h-4 w-4' />
-            BACK
-          </div>
-          <div className='flex items-center gap-1'>
-            <Icon size='tiny' className='h-6 w-6' src={`${API_PREFIX}/workspaces/current/plugin/icon?tenant_id=${provider.tenant_id}&filename=${provider.icon}`} />
-            <div className=''>{getValueFromI18nObject(provider.label)}</div>
-          </div>
-          <div className='system-md-semibold mt-1 text-text-primary'>{getValueFromI18nObject(detail.identity.label)}</div>
-          <Description className='mt-3' text={getValueFromI18nObject(detail.description)} descriptionLineRows={2}></Description>
-        </div>
-        {/* form */}
-        <div className='h-full'>
-          <div className='flex h-full flex-col overflow-y-auto'>
-            <div className='system-sm-semibold-uppercase p-4 pb-1 text-text-primary'>{t('tools.setBuiltInTools.parameters')}</div>
-            <div className='px-4'>
-              {detail.parameters.length > 0 && (
-                <div className='space-y-1 py-2'>
-                  {detail.parameters.map((item: any, index) => (
-                    <div key={index} className='py-1'>
-                      <div className='flex items-center gap-2'>
-                        <div className='code-sm-semibold text-text-secondary'>{getValueFromI18nObject(item.label)}</div>
-                        <div className='system-xs-regular text-text-tertiary'>
-                          {getType(item.type)}
-                        </div>
-                        {item.required && (
-                          <div className='system-xs-medium text-text-warning-secondary'>{t('tools.setBuiltInTools.required')}</div>
-                        )}
-                      </div>
-                      {item.human_description && (
-                        <div className='system-xs-regular mt-0.5 text-text-tertiary'>
-                          {getValueFromI18nObject(item.human_description)}
-                        </div>
-                      )}
-                    </div>
-                  ))}
-                </div>
-              )}
-            </div>
-            {detail.output_schema && (
-              <>
-                <div className='px-4'>
-                  <Divider className="!mt-2" />
-                </div>
-                <div className='system-sm-semibold-uppercase p-4 pb-1 text-text-primary'>OUTPUT</div>
-                {outputSchema.length > 0 && (
-                  <div className='space-y-1 px-4 py-2'>
-                    {outputSchema.map((outputItem, index) => (
-                      <div key={index} className='py-1'>
-                        <div className='flex items-center gap-2'>
-                          <div className='code-sm-semibold text-text-secondary'>{outputItem.name}</div>
-                          <div className='system-xs-regular text-text-tertiary'>{outputItem.type}</div>
-                        </div>
-                        {outputItem.description && (
-                          <div className='system-xs-regular mt-0.5 text-text-tertiary'>
-                            {outputItem.description}
-                          </div>
-                        )}
-                      </div>
-                    ))}
-                  </div>
-                )}
-              </>
-            )}
-          </div>
-        </div>
-      </>
-    </Drawer>
-  )
-}
-export default StrategyDetail
diff --git a/app/components/plugins/plugin-detail-panel/strategy-item.tsx b/app/components/plugins/plugin-detail-panel/strategy-item.tsx
deleted file mode 100644
index 3b6a1d8..0000000
--- a/app/components/plugins/plugin-detail-panel/strategy-item.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-'use client'
-import React, { useState } from 'react'
-import StrategyDetailPanel from './strategy-detail'
-import type {
-  StrategyDetail,
-} from '@/app/components/plugins/types'
-import type { Locale } from '@/i18n'
-import { useRenderI18nObject } from '@/hooks/use-i18n'
-import cn from '@/utils/classnames'
-
-type Props = {
-  provider: {
-    author: string
-    name: string
-    description: Record<Locale, string>
-    tenant_id: string
-    icon: string
-    label: Record<Locale, string>
-    tags: string[]
-  }
-  detail: StrategyDetail
-}
-
-const StrategyItem = ({
-  provider,
-  detail,
-}: Props) => {
-  const getValueFromI18nObject = useRenderI18nObject()
-  const [showDetail, setShowDetail] = useState(false)
-
-  return (
-    <>
-      <div
-        className={cn('bg-components-panel-item-bg mb-2 cursor-pointer rounded-xl border-[0.5px] border-components-panel-border-subtle px-4 py-3 shadow-xs hover:bg-components-panel-on-panel-item-bg-hover')}
-        onClick={() => setShowDetail(true)}
-      >
-        <div className='system-md-semibold pb-0.5 text-text-secondary'>{getValueFromI18nObject(detail.identity.label)}</div>
-        <div className='system-xs-regular line-clamp-2 text-text-tertiary' title={getValueFromI18nObject(detail.description)}>{getValueFromI18nObject(detail.description)}</div>
-      </div>
-      {showDetail && (
-        <StrategyDetailPanel
-          provider={provider}
-          detail={detail}
-          onHide={() => setShowDetail(false)}
-        />
-      )}
-    </>
-  )
-}
-export default StrategyItem
diff --git a/app/components/plugins/plugin-detail-panel/tool-selector/hooks.ts b/app/components/plugins/plugin-detail-panel/tool-selector/hooks.ts
deleted file mode 100644
index 57c1fbd..0000000
--- a/app/components/plugins/plugin-detail-panel/tool-selector/hooks.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import {
-  usePluginManifestInfo,
-} from '@/service/use-plugins'
-
-export const usePluginInstalledCheck = (providerName = '') => {
-  const pluginID = providerName?.split('/').splice(0, 2).join('/')
-
-  const { data: manifest } = usePluginManifestInfo(pluginID)
-
-  return {
-    inMarketPlace: !!manifest,
-    manifest: manifest?.data.plugin,
-  }
-}
diff --git a/app/components/plugins/plugin-detail-panel/tool-selector/index.tsx b/app/components/plugins/plugin-detail-panel/tool-selector/index.tsx
deleted file mode 100644
index 577de19..0000000
--- a/app/components/plugins/plugin-detail-panel/tool-selector/index.tsx
+++ /dev/null
@@ -1,458 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import Link from 'next/link'
-import {
-  RiArrowLeftLine,
-  RiArrowRightUpLine,
-} from '@remixicon/react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import ToolTrigger from '@/app/components/plugins/plugin-detail-panel/tool-selector/tool-trigger'
-import ToolItem from '@/app/components/plugins/plugin-detail-panel/tool-selector/tool-item'
-import ToolPicker from '@/app/components/workflow/block-selector/tool-picker'
-import Button from '@/app/components/base/button'
-import Indicator from '@/app/components/header/indicator'
-import ToolCredentialForm from '@/app/components/plugins/plugin-detail-panel/tool-selector/tool-credentials-form'
-import Toast from '@/app/components/base/toast'
-import Textarea from '@/app/components/base/textarea'
-import Divider from '@/app/components/base/divider'
-import TabSlider from '@/app/components/base/tab-slider-plain'
-import ReasoningConfigForm from '@/app/components/plugins/plugin-detail-panel/tool-selector/reasoning-config-form'
-import Form from '@/app/components/header/account-setting/model-provider-page/model-modal/Form'
-import { generateFormValue, getPlainValue, getStructureValue, toolParametersToFormSchemas } from '@/app/components/tools/utils/to-form-schema'
-
-import { useAppContext } from '@/context/app-context'
-import {
-  useAllBuiltInTools,
-  useAllCustomTools,
-  useAllWorkflowTools,
-  useInvalidateAllBuiltInTools,
-  useUpdateProviderCredentials,
-} from '@/service/use-tools'
-import { useInvalidateInstalledPluginList } from '@/service/use-plugins'
-import { usePluginInstalledCheck } from '@/app/components/plugins/plugin-detail-panel/tool-selector/hooks'
-import { CollectionType } from '@/app/components/tools/types'
-import type { ToolDefaultValue, ToolValue } from '@/app/components/workflow/block-selector/types'
-import type {
-  OffsetOptions,
-  Placement,
-} from '@floating-ui/react'
-import { MARKETPLACE_API_PREFIX } from '@/config'
-import type { Node } from 'reactflow'
-import type { NodeOutPutVar } from '@/app/components/workflow/types'
-import cn from '@/utils/classnames'
-
-type Props = {
-  disabled?: boolean
-  placement?: Placement
-  offset?: OffsetOptions
-  scope?: string
-  value?: ToolValue
-  selectedTools?: ToolValue[]
-  onSelect: (tool: {
-    provider_name: string
-    tool_name: string
-    tool_label: string
-    settings?: Record<string, any>
-    parameters?: Record<string, any>
-    extra?: Record<string, any>
-  }) => void
-  onDelete?: () => void
-  supportEnableSwitch?: boolean
-  supportAddCustomTool?: boolean
-  trigger?: React.ReactNode
-  controlledState?: boolean
-  onControlledStateChange?: (state: boolean) => void
-  panelShowState?: boolean
-  onPanelShowStateChange?: (state: boolean) => void
-  nodeOutputVars: NodeOutPutVar[],
-  availableNodes: Node[],
-  nodeId?: string,
-}
-const ToolSelector: FC<Props> = ({
-  value,
-  selectedTools,
-  disabled,
-  placement = 'left',
-  offset = 4,
-  onSelect,
-  onDelete,
-  scope,
-  supportEnableSwitch,
-  trigger,
-  controlledState,
-  onControlledStateChange,
-  panelShowState,
-  onPanelShowStateChange,
-  nodeOutputVars,
-  availableNodes,
-  nodeId = '',
-}) => {
-  const { t } = useTranslation()
-  const [isShow, onShowChange] = useState(false)
-  const handleTriggerClick = () => {
-    if (disabled) return
-    onShowChange(true)
-  }
-
-  const { data: buildInTools } = useAllBuiltInTools()
-  const { data: customTools } = useAllCustomTools()
-  const { data: workflowTools } = useAllWorkflowTools()
-  const invalidateAllBuiltinTools = useInvalidateAllBuiltInTools()
-  const invalidateInstalledPluginList = useInvalidateInstalledPluginList()
-
-  // plugin info check
-  const { inMarketPlace, manifest } = usePluginInstalledCheck(value?.provider_name)
-
-  const currentProvider = useMemo(() => {
-    const mergedTools = [...(buildInTools || []), ...(customTools || []), ...(workflowTools || [])]
-    return mergedTools.find((toolWithProvider) => {
-      return toolWithProvider.id === value?.provider_name
-    })
-  }, [value, buildInTools, customTools, workflowTools])
-
-  const [isShowChooseTool, setIsShowChooseTool] = useState(false)
-  const handleSelectTool = (tool: ToolDefaultValue) => {
-    const settingValues = generateFormValue(tool.params, toolParametersToFormSchemas(tool.paramSchemas.filter(param => param.form !== 'llm') as any))
-    const paramValues = generateFormValue(tool.params, toolParametersToFormSchemas(tool.paramSchemas.filter(param => param.form === 'llm') as any), true)
-    const toolValue = {
-      provider_name: tool.provider_id,
-      type: tool.provider_type,
-      tool_name: tool.tool_name,
-      tool_label: tool.tool_label,
-      tool_description: tool.tool_description,
-      settings: settingValues,
-      parameters: paramValues,
-      enabled: tool.is_team_authorization,
-      extra: {
-        description: tool.tool_description,
-      },
-      schemas: tool.paramSchemas,
-    }
-    onSelect(toolValue)
-    // setIsShowChooseTool(false)
-  }
-
-  const handleDescriptionChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
-    onSelect({
-      ...value,
-      extra: {
-        ...value?.extra,
-        description: e.target.value || '',
-      },
-    } as any)
-  }
-
-  // tool settings & params
-  const currentToolSettings = useMemo(() => {
-    if (!currentProvider) return []
-    return currentProvider.tools.find(tool => tool.name === value?.tool_name)?.parameters.filter(param => param.form !== 'llm') || []
-  }, [currentProvider, value])
-  const currentToolParams = useMemo(() => {
-    if (!currentProvider) return []
-    return currentProvider.tools.find(tool => tool.name === value?.tool_name)?.parameters.filter(param => param.form === 'llm') || []
-  }, [currentProvider, value])
-  const [currType, setCurrType] = useState('settings')
-  const showTabSlider = currentToolSettings.length > 0 && currentToolParams.length > 0
-  const userSettingsOnly = currentToolSettings.length > 0 && !currentToolParams.length
-  const reasoningConfigOnly = currentToolParams.length > 0 && !currentToolSettings.length
-
-  const settingsFormSchemas = useMemo(() => toolParametersToFormSchemas(currentToolSettings), [currentToolSettings])
-  const paramsFormSchemas = useMemo(() => toolParametersToFormSchemas(currentToolParams), [currentToolParams])
-
-  const handleSettingsFormChange = (v: Record<string, any>) => {
-    const newValue = getStructureValue(v)
-
-    const toolValue = {
-      ...value,
-      settings: newValue,
-    }
-    onSelect(toolValue as any)
-  }
-  const handleParamsFormChange = (v: Record<string, any>) => {
-    const toolValue = {
-      ...value,
-      parameters: v,
-    }
-    onSelect(toolValue as any)
-  }
-
-  const handleEnabledChange = (state: boolean) => {
-    onSelect({
-      ...value,
-      enabled: state,
-    } as any)
-  }
-
-  // authorization
-  const { isCurrentWorkspaceManager } = useAppContext()
-  const [isShowSettingAuth, setShowSettingAuth] = useState(false)
-  const handleCredentialSettingUpdate = () => {
-    invalidateAllBuiltinTools()
-    Toast.notify({
-      type: 'success',
-      message: t('common.api.actionSuccess'),
-    })
-    setShowSettingAuth(false)
-    onShowChange(false)
-  }
-
-  const { mutate: updatePermission } = useUpdateProviderCredentials({
-    onSuccess: handleCredentialSettingUpdate,
-  })
-
-  // install from marketplace
-  const currentTool = useMemo(() => {
-    return currentProvider?.tools.find(tool => tool.name === value?.tool_name)
-  }, [currentProvider?.tools, value?.tool_name])
-  const manifestIcon = useMemo(() => {
-    if (!manifest)
-      return ''
-    return `${MARKETPLACE_API_PREFIX}/plugins/${(manifest as any).plugin_id}/icon`
-  }, [manifest])
-  const handleInstall = async () => {
-    invalidateAllBuiltinTools()
-    invalidateInstalledPluginList()
-  }
-
-  return (
-    <>
-      <PortalToFollowElem
-        placement={placement}
-        offset={offset}
-        open={trigger ? controlledState : isShow}
-        onOpenChange={trigger ? onControlledStateChange : onShowChange}
-      >
-        <PortalToFollowElemTrigger
-          className='w-full'
-          onClick={() => {
-            if (!currentProvider || !currentTool) return
-            handleTriggerClick()
-          }}
-        >
-          {trigger}
-          {!trigger && !value?.provider_name && (
-            <ToolTrigger
-              isConfigure
-              open={isShow}
-              value={value}
-              provider={currentProvider}
-            />
-          )}
-          {!trigger && value?.provider_name && (
-            <ToolItem
-              open={isShow}
-              icon={currentProvider?.icon || manifestIcon}
-              providerName={value.provider_name}
-              toolLabel={value.tool_label || value.tool_name}
-              showSwitch={supportEnableSwitch}
-              switchValue={value.enabled}
-              onSwitchChange={handleEnabledChange}
-              onDelete={onDelete}
-              noAuth={currentProvider && currentTool && !currentProvider.is_team_authorization}
-              onAuth={() => setShowSettingAuth(true)}
-              uninstalled={!currentProvider && inMarketPlace}
-              versionMismatch={currentProvider && inMarketPlace && !currentTool}
-              installInfo={manifest?.latest_package_identifier}
-              onInstall={() => handleInstall()}
-              isError={(!currentProvider || !currentTool) && !inMarketPlace}
-              errorTip={
-                <div className='max-w-[240px] space-y-1 text-xs'>
-                  <h3 className='font-semibold text-text-primary'>{currentTool ? t('plugin.detailPanel.toolSelector.uninstalledTitle') : t('plugin.detailPanel.toolSelector.unsupportedTitle')}</h3>
-                  <p className='tracking-tight text-text-secondary'>{currentTool ? t('plugin.detailPanel.toolSelector.uninstalledContent') : t('plugin.detailPanel.toolSelector.unsupportedContent')}</p>
-                  <p>
-                    <Link href={'/plugins'} className='tracking-tight text-text-accent'>{t('plugin.detailPanel.toolSelector.uninstalledLink')}</Link>
-                  </p>
-                </div>
-              }
-            />
-          )}
-        </PortalToFollowElemTrigger>
-        <PortalToFollowElemContent className='z-[1000]'>
-          <div className={cn('relative max-h-[642px] min-h-20 w-[361px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur pb-4 shadow-lg backdrop-blur-sm', !isShowSettingAuth && 'overflow-y-auto pb-2')}>
-            {!isShowSettingAuth && (
-              <>
-                <div className='system-xl-semibold px-4 pb-1 pt-3.5 text-text-primary'>{t('plugin.detailPanel.toolSelector.title')}</div>
-                {/* base form */}
-                <div className='flex flex-col gap-3 px-4 py-2'>
-                  <div className='flex flex-col gap-1'>
-                    <div className='system-sm-semibold flex h-6 items-center text-text-secondary'>{t('plugin.detailPanel.toolSelector.toolLabel')}</div>
-                    <ToolPicker
-                      panelClassName='w-[328px]'
-                      placement='bottom'
-                      offset={offset}
-                      trigger={
-                        <ToolTrigger
-                          open={panelShowState || isShowChooseTool}
-                          value={value}
-                          provider={currentProvider}
-                        />
-                      }
-                      isShow={panelShowState || isShowChooseTool}
-                      onShowChange={trigger ? onPanelShowStateChange as any : setIsShowChooseTool}
-                      disabled={false}
-                      supportAddCustomTool
-                      onSelect={handleSelectTool}
-                      scope={scope}
-                      selectedTools={selectedTools}
-                    />
-                  </div>
-                  <div className='flex flex-col gap-1'>
-                    <div className='system-sm-semibold flex h-6 items-center text-text-secondary'>{t('plugin.detailPanel.toolSelector.descriptionLabel')}</div>
-                    <Textarea
-                      className='resize-none'
-                      placeholder={t('plugin.detailPanel.toolSelector.descriptionPlaceholder')}
-                      value={value?.extra?.description || ''}
-                      onChange={handleDescriptionChange}
-                      disabled={!value?.provider_name}
-                    />
-                  </div>
-                </div>
-                {/* authorization */}
-                {currentProvider && currentProvider.type === CollectionType.builtIn && currentProvider.allow_delete && (
-                  <>
-                    <Divider className='my-1 w-full' />
-                    <div className='px-4 py-2'>
-                      {!currentProvider.is_team_authorization && (
-                        <Button
-                          variant='primary'
-                          className={cn('w-full shrink-0')}
-                          onClick={() => setShowSettingAuth(true)}
-                          disabled={!isCurrentWorkspaceManager}
-                        >
-                          {t('tools.auth.unauthorized')}
-                        </Button>
-                      )}
-                      {currentProvider.is_team_authorization && (
-                        <Button
-                          variant='secondary'
-                          className={cn('w-full shrink-0')}
-                          onClick={() => setShowSettingAuth(true)}
-                          disabled={!isCurrentWorkspaceManager}
-                        >
-                          <Indicator className='mr-2' color={'green'} />
-                          {t('tools.auth.authorized')}
-                        </Button>
-                      )}
-                    </div>
-                  </>
-                )}
-                {/* tool settings */}
-                {(currentToolSettings.length > 0 || currentToolParams.length > 0) && currentProvider?.is_team_authorization && (
-                  <>
-                    <Divider className='my-1 w-full' />
-                    {/* tabs */}
-                    {nodeId && showTabSlider && (
-                      <TabSlider
-                        className='mt-1 shrink-0 px-4'
-                        itemClassName='py-3'
-                        noBorderBottom
-                        smallItem
-                        value={currType}
-                        onChange={(value) => {
-                          setCurrType(value)
-                        }}
-                        options={[
-                          { value: 'settings', text: t('plugin.detailPanel.toolSelector.settings')! },
-                          { value: 'params', text: t('plugin.detailPanel.toolSelector.params')! },
-                        ]}
-                      />
-                    )}
-                    {nodeId && showTabSlider && currType === 'params' && (
-                      <div className='px-4 py-2'>
-                        <div className='system-xs-regular text-text-tertiary'>{t('plugin.detailPanel.toolSelector.paramsTip1')}</div>
-                        <div className='system-xs-regular text-text-tertiary'>{t('plugin.detailPanel.toolSelector.paramsTip2')}</div>
-                      </div>
-                    )}
-                    {/* user settings only */}
-                    {userSettingsOnly && (
-                      <div className='p-4 pb-1'>
-                        <div className='system-sm-semibold-uppercase text-text-primary'>{t('plugin.detailPanel.toolSelector.settings')}</div>
-                      </div>
-                    )}
-                    {/* reasoning config only */}
-                    {nodeId && reasoningConfigOnly && (
-                      <div className='mb-1 p-4 pb-1'>
-                        <div className='system-sm-semibold-uppercase text-text-primary'>{t('plugin.detailPanel.toolSelector.params')}</div>
-                        <div className='pb-1'>
-                          <div className='system-xs-regular text-text-tertiary'>{t('plugin.detailPanel.toolSelector.paramsTip1')}</div>
-                          <div className='system-xs-regular text-text-tertiary'>{t('plugin.detailPanel.toolSelector.paramsTip2')}</div>
-                        </div>
-                      </div>
-                    )}
-                    {/* user settings form */}
-                    {(currType === 'settings' || userSettingsOnly) && (
-                      <div className='px-4 py-2'>
-                        <Form
-                          value={getPlainValue(value?.settings || {})}
-                          onChange={handleSettingsFormChange}
-                          formSchemas={settingsFormSchemas as any}
-                          isEditMode={true}
-                          showOnVariableMap={{}}
-                          validating={false}
-                          inputClassName='bg-components-input-bg-normal hover:bg-components-input-bg-hover'
-                          fieldMoreInfo={item => item.url
-                            ? (<a
-                              href={item.url}
-                              target='_blank' rel='noopener noreferrer'
-                              className='inline-flex items-center text-xs text-text-accent'
-                            >
-                              {t('tools.howToGet')}
-                              <RiArrowRightUpLine className='ml-1 h-3 w-3' />
-                            </a>)
-                            : null}
-                        />
-                      </div>
-                    )}
-                    {/* reasoning config form */}
-                    {nodeId && (currType === 'params' || reasoningConfigOnly) && (
-                      <ReasoningConfigForm
-                        value={value?.parameters || {}}
-                        onChange={handleParamsFormChange}
-                        schemas={paramsFormSchemas as any}
-                        nodeOutputVars={nodeOutputVars}
-                        availableNodes={availableNodes}
-                        nodeId={nodeId}
-                      />
-                    )}
-                  </>
-                )}
-              </>
-            )}
-            {/* authorization panel */}
-            {isShowSettingAuth && currentProvider && (
-              <>
-                <div className='relative flex flex-col gap-1 pt-3.5'>
-                  <div className='absolute -top-2 left-2 w-[345px] rounded-t-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur pt-2 backdrop-blur-sm'></div>
-                  <div
-                    className='system-xs-semibold-uppercase flex h-6 cursor-pointer items-center gap-1 px-3 text-text-accent-secondary'
-                    onClick={() => setShowSettingAuth(false)}
-                  >
-                    <RiArrowLeftLine className='h-4 w-4' />
-                    BACK
-                  </div>
-                  <div className='system-xl-semibold px-4 text-text-primary'>{t('tools.auth.setupModalTitle')}</div>
-                  <div className='system-xs-regular px-4 text-text-tertiary'>{t('tools.auth.setupModalTitleDescription')}</div>
-                </div>
-                <ToolCredentialForm
-                  collection={currentProvider}
-                  onCancel={() => setShowSettingAuth(false)}
-                  onSaved={async value => updatePermission({
-                    providerName: currentProvider.name,
-                    credentials: value,
-                  })}
-                />
-              </>
-            )}
-          </div>
-        </PortalToFollowElemContent>
-      </PortalToFollowElem>
-    </>
-  )
-}
-export default React.memo(ToolSelector)
diff --git a/app/components/plugins/plugin-detail-panel/tool-selector/reasoning-config-form.tsx b/app/components/plugins/plugin-detail-panel/tool-selector/reasoning-config-form.tsx
deleted file mode 100644
index 750a8cf..0000000
--- a/app/components/plugins/plugin-detail-panel/tool-selector/reasoning-config-form.tsx
+++ /dev/null
@@ -1,275 +0,0 @@
-import { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import produce from 'immer'
-import {
-  RiArrowRightUpLine,
-} from '@remixicon/react'
-import Tooltip from '@/app/components/base/tooltip'
-import Switch from '@/app/components/base/switch'
-import Input from '@/app/components/workflow/nodes/_base/components/input-support-select-var'
-import VarReferencePicker from '@/app/components/workflow/nodes/_base/components/variable/var-reference-picker'
-import AppSelector from '@/app/components/plugins/plugin-detail-panel/app-selector'
-import ModelParameterModal from '@/app/components/plugins/plugin-detail-panel/model-selector'
-import { useLanguage } from '@/app/components/header/account-setting/model-provider-page/hooks'
-import { FormTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import type { Node } from 'reactflow'
-import type {
-  NodeOutPutVar,
-  ValueSelector,
-  Var,
-} from '@/app/components/workflow/types'
-import type { ToolVarInputs } from '@/app/components/workflow/nodes/tool/types'
-import { VarType as VarKindType } from '@/app/components/workflow/nodes/tool/types'
-import { VarType } from '@/app/components/workflow/types'
-import cn from '@/utils/classnames'
-
-type Props = {
-  value: Record<string, any>
-  onChange: (val: Record<string, any>) => void
-  schemas: any[]
-  nodeOutputVars: NodeOutPutVar[],
-  availableNodes: Node[],
-  nodeId: string
-}
-
-const ReasoningConfigForm: React.FC<Props> = ({
-  value,
-  onChange,
-  schemas,
-  nodeOutputVars,
-  availableNodes,
-  nodeId,
-}) => {
-  const { t } = useTranslation()
-  const language = useLanguage()
-  const handleAutomatic = (key: string, val: any) => {
-    onChange({
-      ...value,
-      [key]: {
-        value: val ? null : value[key]?.value,
-        auto: val ? 1 : 0,
-      },
-    })
-  }
-
-  const [inputsIsFocus, setInputsIsFocus] = useState<Record<string, boolean>>({})
-  const handleInputFocus = useCallback((variable: string) => {
-    return (value: boolean) => {
-      setInputsIsFocus((prev) => {
-        return {
-          ...prev,
-          [variable]: value,
-        }
-      })
-    }
-  }, [])
-  const handleNotMixedTypeChange = useCallback((variable: string) => {
-    return (varValue: ValueSelector | string, varKindType: VarKindType) => {
-      const newValue = produce(value, (draft: ToolVarInputs) => {
-        const target = draft[variable].value
-        if (target) {
-          target.type = varKindType
-          target.value = varValue
-        }
-        else {
-          draft[variable].value = {
-            type: varKindType,
-            value: varValue,
-          }
-        }
-      })
-      onChange(newValue)
-    }
-  }, [value, onChange])
-  const handleMixedTypeChange = useCallback((variable: string) => {
-    return (itemValue: string) => {
-      const newValue = produce(value, (draft: ToolVarInputs) => {
-        const target = draft[variable].value
-        if (target) {
-          target.value = itemValue
-        }
-        else {
-          draft[variable].value = {
-            type: VarKindType.mixed,
-            value: itemValue,
-          }
-        }
-      })
-      onChange(newValue)
-    }
-  }, [value, onChange])
-  const handleFileChange = useCallback((variable: string) => {
-    return (varValue: ValueSelector | string) => {
-      const newValue = produce(value, (draft: ToolVarInputs) => {
-        draft[variable].value = {
-          type: VarKindType.variable,
-          value: varValue,
-        }
-      })
-      onChange(newValue)
-    }
-  }, [value, onChange])
-  const handleAppChange = useCallback((variable: string) => {
-    return (app: {
-      app_id: string
-      inputs: Record<string, any>
-      files?: any[]
-    }) => {
-      const newValue = produce(value, (draft: ToolVarInputs) => {
-        draft[variable].value = app as any
-      })
-      onChange(newValue)
-    }
-  }, [onChange, value])
-  const handleModelChange = useCallback((variable: string) => {
-    return (model: any) => {
-      const newValue = produce(value, (draft: ToolVarInputs) => {
-        draft[variable].value = {
-          ...draft[variable].value,
-          ...model,
-        } as any
-      })
-      onChange(newValue)
-    }
-  }, [onChange, value])
-
-  const renderField = (schema: any) => {
-    const {
-      variable,
-      label,
-      required,
-      tooltip,
-      type,
-      scope,
-      url,
-    } = schema
-    const auto = value[variable]?.auto
-    const tooltipContent = (tooltip && (
-      <Tooltip
-        popupContent={<div className='w-[200px]'>
-          {tooltip[language] || tooltip.en_US}
-        </div>}
-        triggerClassName='ml-1 w-4 h-4'
-        asChild={false} />
-    ))
-    const varInput = value[variable].value
-    const isNumber = type === FormTypeEnum.textNumber
-    const isSelect = type === FormTypeEnum.select
-    const isFile = type === FormTypeEnum.file || type === FormTypeEnum.files
-    const isAppSelector = type === FormTypeEnum.appSelector
-    const isModelSelector = type === FormTypeEnum.modelSelector
-    // const isToolSelector = type === FormTypeEnum.toolSelector
-    const isString = !isNumber && !isSelect && !isFile && !isAppSelector && !isModelSelector
-    return (
-      <div key={variable} className='space-y-1'>
-        <div className='system-sm-semibold flex items-center justify-between py-2 text-text-secondary'>
-          <div className='flex items-center space-x-2'>
-            <span className={cn('code-sm-semibold text-text-secondary')}>{label[language] || label.en_US}</span>
-            {required && (
-              <span className='ml-1 text-red-500'>*</span>
-            )}
-            {tooltipContent}
-          </div>
-          <div className='flex cursor-pointer items-center gap-1 rounded-[6px] border border-divider-subtle bg-background-default-lighter px-2 py-1 hover:bg-state-base-hover' onClick={() => handleAutomatic(variable, !auto)}>
-            <span className='system-xs-medium text-text-secondary'>{t('plugin.detailPanel.toolSelector.auto')}</span>
-            <Switch
-              size='xs'
-              defaultValue={!!auto}
-              onChange={val => handleAutomatic(variable, val)}
-            />
-          </div>
-        </div>
-        {auto === 0 && (
-          <>
-            {isString && (
-              <Input
-                className={cn(inputsIsFocus[variable] ? 'border-components-input-border-active bg-components-input-bg-active shadow-xs' : 'border-components-input-border-hover bg-components-input-bg-normal', 'rounded-lg border px-3 py-[6px]')}
-                value={varInput?.value as string || ''}
-                onChange={handleMixedTypeChange(variable)}
-                nodesOutputVars={nodeOutputVars}
-                availableNodes={availableNodes}
-                onFocusChange={handleInputFocus(variable)}
-                placeholder={t('workflow.nodes.http.insertVarPlaceholder')!}
-                placeholderClassName='!leading-[21px]'
-              />
-            )}
-            {/* {isString && (
-              <VarReferencePicker
-                zIndex={1001}
-                readonly={false}
-                isShowNodeName
-                nodeId={nodeId}
-                value={varInput?.value || ''}
-                onChange={handleNotMixedTypeChange(variable)}
-                defaultVarKindType={VarKindType.variable}
-                filterVar={(varPayload: Var) => varPayload.type === VarType.number || varPayload.type === VarType.secret || varPayload.type === VarType.string}
-              />
-            )} */}
-            {(isNumber || isSelect) && (
-              <VarReferencePicker
-                zIndex={1001}
-                readonly={false}
-                isShowNodeName
-                nodeId={nodeId}
-                value={varInput?.type === VarKindType.constant ? (varInput?.value ?? '') : (varInput?.value ?? [])}
-                onChange={handleNotMixedTypeChange(variable)}
-                defaultVarKindType={varInput?.type || (isNumber ? VarKindType.constant : VarKindType.variable)}
-                isSupportConstantValue
-                filterVar={isNumber ? (varPayload: Var) => varPayload.type === schema._type : undefined}
-                availableVars={isSelect ? nodeOutputVars : undefined}
-                schema={schema}
-              />
-            )}
-            {isFile && (
-              <VarReferencePicker
-                zIndex={1001}
-                readonly={false}
-                isShowNodeName
-                nodeId={nodeId}
-                value={varInput?.value || []}
-                onChange={handleFileChange(variable)}
-                defaultVarKindType={VarKindType.variable}
-                filterVar={(varPayload: Var) => varPayload.type === VarType.file || varPayload.type === VarType.arrayFile}
-              />
-            )}
-            {isAppSelector && (
-              <AppSelector
-                disabled={false}
-                scope={scope || 'all'}
-                value={varInput as any}
-                onSelect={handleAppChange(variable)}
-              />
-            )}
-            {isModelSelector && (
-              <ModelParameterModal
-                popupClassName='!w-[387px]'
-                isAdvancedMode
-                isInWorkflow
-                value={varInput}
-                setModel={handleModelChange(variable)}
-                scope={scope}
-              />
-            )}
-          </>
-        )}
-        {url && (
-          <a
-            href={url}
-            target='_blank' rel='noopener noreferrer'
-            className='inline-flex items-center text-xs text-text-accent'
-          >
-            {t('tools.howToGet')}
-            <RiArrowRightUpLine className='ml-1 h-3 w-3' />
-          </a>
-        )}
-      </div>
-    )
-  }
-  return (
-    <div className='space-y-3 px-4 py-2'>
-      {schemas.map(schema => renderField(schema))}
-    </div>
-  )
-}
-
-export default ReasoningConfigForm
diff --git a/app/components/plugins/plugin-detail-panel/tool-selector/tool-credentials-form.tsx b/app/components/plugins/plugin-detail-panel/tool-selector/tool-credentials-form.tsx
deleted file mode 100644
index fd7ec61..0000000
--- a/app/components/plugins/plugin-detail-panel/tool-selector/tool-credentials-form.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useEffect, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowRightUpLine,
-} from '@remixicon/react'
-import { addDefaultValue, toolCredentialToFormSchemas } from '@/app/components/tools/utils/to-form-schema'
-import type { Collection } from '@/app/components/tools/types'
-import Button from '@/app/components/base/button'
-import Toast from '@/app/components/base/toast'
-import { fetchBuiltInToolCredential, fetchBuiltInToolCredentialSchema } from '@/service/tools'
-import Loading from '@/app/components/base/loading'
-import Form from '@/app/components/header/account-setting/model-provider-page/model-modal/Form'
-import { useRenderI18nObject } from '@/hooks/use-i18n'
-import cn from '@/utils/classnames'
-
-type Props = {
-  collection: Collection
-  onCancel: () => void
-  onSaved: (value: Record<string, any>) => void
-}
-
-const ToolCredentialForm: FC<Props> = ({
-  collection,
-  onCancel,
-  onSaved,
-}) => {
-  const getValueFromI18nObject = useRenderI18nObject()
-  const { t } = useTranslation()
-  const [credentialSchema, setCredentialSchema] = useState<any>(null)
-  const { name: collectionName } = collection
-  const [tempCredential, setTempCredential] = React.useState<any>({})
-  useEffect(() => {
-    fetchBuiltInToolCredentialSchema(collectionName).then(async (res) => {
-      const toolCredentialSchemas = toolCredentialToFormSchemas(res)
-      const credentialValue = await fetchBuiltInToolCredential(collectionName)
-      setTempCredential(credentialValue)
-      const defaultCredentials = addDefaultValue(credentialValue, toolCredentialSchemas)
-      setCredentialSchema(toolCredentialSchemas)
-      setTempCredential(defaultCredentials)
-    })
-  }, [])
-
-  const handleSave = () => {
-    for (const field of credentialSchema) {
-      if (field.required && !tempCredential[field.name]) {
-        Toast.notify({ type: 'error', message: t('common.errorMsg.fieldRequired', { field: getValueFromI18nObject(field.label) }) })
-        return
-      }
-    }
-    onSaved(tempCredential)
-  }
-
-  return (
-    <>
-      {!credentialSchema
-        ? <div className='pt-3'><Loading type='app' /></div>
-        : (
-          <>
-            <div className='max-h-[464px] overflow-y-auto px-4'>
-              <Form
-                value={tempCredential}
-                onChange={(v) => {
-                  setTempCredential(v)
-                }}
-                formSchemas={credentialSchema}
-                isEditMode={true}
-                showOnVariableMap={{}}
-                validating={false}
-                inputClassName='bg-components-input-bg-normal hover:bg-components-input-bg-hover'
-                fieldMoreInfo={item => item.url
-                  ? (<a
-                    href={item.url}
-                    target='_blank' rel='noopener noreferrer'
-                    className='inline-flex items-center text-xs text-text-accent'
-                  >
-                    {t('tools.howToGet')}
-                    <RiArrowRightUpLine className='ml-1 h-3 w-3' />
-                  </a>)
-                  : null}
-              />
-            </div>
-            <div className={cn('mt-1 flex justify-end px-4')} >
-              <div className='flex space-x-2'>
-                <Button onClick={onCancel}>{t('common.operation.cancel')}</Button>
-                <Button variant='primary' onClick={handleSave}>{t('common.operation.save')}</Button>
-              </div>
-            </div>
-          </>
-        )
-      }
-
-    </>
-  )
-}
-export default React.memo(ToolCredentialForm)
diff --git a/app/components/plugins/plugin-detail-panel/tool-selector/tool-item.tsx b/app/components/plugins/plugin-detail-panel/tool-selector/tool-item.tsx
deleted file mode 100644
index d74fccf..0000000
--- a/app/components/plugins/plugin-detail-panel/tool-selector/tool-item.tsx
+++ /dev/null
@@ -1,163 +0,0 @@
-'use client'
-import React, { useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiDeleteBinLine,
-  RiEqualizer2Line,
-  RiErrorWarningFill,
-} from '@remixicon/react'
-import { Group } from '@/app/components/base/icons/src/vender/other'
-import AppIcon from '@/app/components/base/app-icon'
-import Switch from '@/app/components/base/switch'
-import Button from '@/app/components/base/button'
-import Indicator from '@/app/components/header/indicator'
-import ActionButton from '@/app/components/base/action-button'
-import Tooltip from '@/app/components/base/tooltip'
-import { ToolTipContent } from '@/app/components/base/tooltip/content'
-import { InstallPluginButton } from '@/app/components/workflow/nodes/_base/components/install-plugin-button'
-import { SwitchPluginVersion } from '@/app/components/workflow/nodes/_base/components/switch-plugin-version'
-import cn from '@/utils/classnames'
-
-type Props = {
-  icon?: any
-  providerName?: string
-  toolLabel?: string
-  showSwitch?: boolean
-  switchValue?: boolean
-  onSwitchChange?: (value: boolean) => void
-  onDelete?: () => void
-  noAuth?: boolean
-  onAuth?: () => void
-  isError?: boolean
-  errorTip?: any
-  uninstalled?: boolean
-  installInfo?: string
-  onInstall?: () => void
-  versionMismatch?: boolean
-  open: boolean
-}
-
-const ToolItem = ({
-  open,
-  icon,
-  providerName,
-  toolLabel,
-  showSwitch,
-  switchValue,
-  onSwitchChange,
-  onDelete,
-  noAuth,
-  onAuth,
-  uninstalled,
-  installInfo,
-  onInstall,
-  isError,
-  errorTip,
-  versionMismatch,
-}: Props) => {
-  const { t } = useTranslation()
-  const providerNameText = providerName?.split('/').pop()
-  const isTransparent = uninstalled || versionMismatch || isError
-  const [isDeleting, setIsDeleting] = useState(false)
-
-  return (
-    <div className={cn(
-      'group flex cursor-default items-center gap-1 rounded-lg border-[0.5px] border-components-panel-border-subtle bg-components-panel-on-panel-item-bg p-1.5 pr-2 shadow-xs hover:bg-components-panel-on-panel-item-bg-hover hover:shadow-sm',
-      open && 'bg-components-panel-on-panel-item-bg-hover shadow-sm',
-      isDeleting && 'border-state-destructive-border shadow-xs hover:bg-state-destructive-hover',
-    )}>
-      {icon && (
-        <div className={cn('shrink-0', isTransparent && 'opacity-50')}>
-          {typeof icon === 'string' && <div className='h-7 w-7 rounded-lg border-[0.5px] border-components-panel-border-subtle bg-background-default-dodge bg-cover bg-center' style={{ backgroundImage: `url(${icon})` }} />}
-          {typeof icon !== 'string' && <AppIcon className='h-7 w-7 rounded-lg border-[0.5px] border-components-panel-border-subtle bg-background-default-dodge' size='xs' icon={icon?.content} background={icon?.background} />}
-        </div>
-      )}
-      {!icon && (
-        <div className={cn(
-          'flex h-7 w-7 items-center justify-center rounded-md border-[0.5px] border-components-panel-border-subtle bg-background-default-subtle',
-        )}>
-          <div className='flex h-5 w-5 items-center justify-center opacity-35'>
-            <Group className='text-text-tertiary' />
-          </div>
-        </div>
-      )}
-      <div className={cn('grow truncate pl-0.5', isTransparent && 'opacity-50')}>
-        <div className='system-2xs-medium-uppercase text-text-tertiary'>{providerNameText}</div>
-        <div className='system-xs-medium text-text-secondary'>{toolLabel}</div>
-      </div>
-      <div className='hidden items-center gap-1 group-hover:flex'>
-        {!noAuth && !isError && !uninstalled && !versionMismatch && (
-          <ActionButton>
-            <RiEqualizer2Line className='h-4 w-4' />
-          </ActionButton>
-        )}
-        <div
-          className='cursor-pointer rounded-md p-1 text-text-tertiary hover:text-text-destructive'
-          onClick={(e) => {
-            e.stopPropagation()
-            onDelete?.()
-          }}
-          onMouseOver={() => setIsDeleting(true)}
-          onMouseLeave={() => setIsDeleting(false)}
-        >
-          <RiDeleteBinLine className='h-4 w-4' />
-        </div>
-      </div>
-      {!isError && !uninstalled && !noAuth && !versionMismatch && showSwitch && (
-        <div className='mr-1' onClick={e => e.stopPropagation()}>
-          <Switch
-            size='md'
-            defaultValue={switchValue}
-            onChange={onSwitchChange}
-          />
-        </div>
-      )}
-      {!isError && !uninstalled && !versionMismatch && noAuth && (
-        <Button variant='secondary' size='small' onClick={onAuth}>
-          {t('tools.notAuthorized')}
-          <Indicator className='ml-2' color='orange' />
-        </Button>
-      )}
-      {!isError && !uninstalled && versionMismatch && installInfo && (
-        <div onClick={e => e.stopPropagation()}>
-          <SwitchPluginVersion
-            className='-mt-1'
-            uniqueIdentifier={installInfo}
-            tooltip={
-              <ToolTipContent
-                title={t('plugin.detailPanel.toolSelector.unsupportedTitle')}
-              >
-                {`${t('plugin.detailPanel.toolSelector.unsupportedContent')} ${t('plugin.detailPanel.toolSelector.unsupportedContent2')}`}
-              </ToolTipContent>
-            }
-            onChange={() => {
-              onInstall?.()
-            }}
-          />
-        </div>
-      )}
-      {!isError && uninstalled && installInfo && (
-        <InstallPluginButton
-          onClick={e => e.stopPropagation()}
-          size={'small'}
-          uniqueIdentifier={installInfo}
-          onSuccess={() => {
-            onInstall?.()
-          }}
-        />
-      )}
-      {isError && (
-        <Tooltip
-          popupContent={errorTip}
-          needsDelay
-        >
-          <div>
-            <RiErrorWarningFill className='h-4 w-4 text-text-destructive' />
-          </div>
-        </Tooltip>
-      )}
-    </div>
-  )
-}
-
-export default ToolItem
diff --git a/app/components/plugins/plugin-detail-panel/tool-selector/tool-trigger.tsx b/app/components/plugins/plugin-detail-panel/tool-selector/tool-trigger.tsx
deleted file mode 100644
index 94c5148..0000000
--- a/app/components/plugins/plugin-detail-panel/tool-selector/tool-trigger.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-'use client'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowDownSLine,
-  RiEqualizer2Line,
-} from '@remixicon/react'
-import BlockIcon from '@/app/components/workflow/block-icon'
-import { BlockEnum } from '@/app/components/workflow/types'
-import type { ToolWithProvider } from '@/app/components/workflow/types'
-import cn from '@/utils/classnames'
-
-type Props = {
-  open: boolean
-  provider?: ToolWithProvider
-  value?: {
-    provider_name: string
-    tool_name: string
-  }
-  isConfigure?: boolean
-}
-
-const ToolTrigger = ({
-  open,
-  provider,
-  value,
-  isConfigure,
-}: Props) => {
-  const { t } = useTranslation()
-  return (
-    <div className={cn(
-      'group flex cursor-pointer items-center rounded-lg bg-components-input-bg-normal p-2 pl-3 hover:bg-state-base-hover-alt',
-      open && 'bg-state-base-hover-alt',
-      value?.provider_name && 'py-1.5 pl-1.5',
-    )}>
-      {value?.provider_name && provider && (
-        <div className='mr-1 shrink-0 rounded-lg border border-components-panel-border bg-components-panel-bg p-px'>
-          <BlockIcon
-            className='!h-4 !w-4'
-            type={BlockEnum.Tool}
-            toolIcon={provider.icon}
-          />
-        </div>
-      )}
-      {value?.tool_name && (
-        <div className='system-sm-medium grow text-components-input-text-filled'>{value.tool_name}</div>
-      )}
-      {!value?.provider_name && (
-        <div className='system-sm-regular grow text-components-input-text-placeholder'>
-          {!isConfigure ? t('plugin.detailPanel.toolSelector.placeholder') : t('plugin.detailPanel.configureTool')}
-        </div>
-      )}
-      {isConfigure && (
-        <RiEqualizer2Line className={cn('ml-0.5 h-4 w-4 shrink-0 text-text-quaternary group-hover:text-text-secondary', open && 'text-text-secondary')} />
-      )}
-      {!isConfigure && (
-        <RiArrowDownSLine className={cn('ml-0.5 h-4 w-4 shrink-0 text-text-quaternary group-hover:text-text-secondary', open && 'text-text-secondary')} />
-      )}
-    </div>
-  )
-}
-
-export default ToolTrigger
diff --git a/app/components/plugins/plugin-detail-panel/utils.ts b/app/components/plugins/plugin-detail-panel/utils.ts
deleted file mode 100644
index fd51142..0000000
--- a/app/components/plugins/plugin-detail-panel/utils.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { FormTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-
-export const NAME_FIELD = {
-  type: FormTypeEnum.textInput,
-  name: 'name',
-  label: {
-    en_US: 'Endpoint Name',
-    zh_Hans: '绔偣鍚嶇О',
-    ja_JP: '銈ㄣ兂銉夈儩銈ゃ兂銉堝悕',
-    pt_BR: 'Nome do ponto final',
-  },
-  placeholder: {
-    en_US: 'Endpoint Name',
-    zh_Hans: '绔偣鍚嶇О',
-    ja_JP: '銈ㄣ兂銉夈儩銈ゃ兂銉堝悕',
-    pt_BR: 'Nome do ponto final',
-  },
-  required: true,
-  default: '',
-  help: null,
-}
diff --git a/app/components/plugins/plugin-item/action.tsx b/app/components/plugins/plugin-item/action.tsx
deleted file mode 100644
index 21c1764..0000000
--- a/app/components/plugins/plugin-item/action.tsx
+++ /dev/null
@@ -1,165 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback } from 'react'
-import { type MetaData, PluginSource } from '../types'
-import { RiDeleteBinLine, RiInformation2Line, RiLoopLeftLine } from '@remixicon/react'
-import { useBoolean } from 'ahooks'
-import { useTranslation } from 'react-i18next'
-import PluginInfo from '../plugin-page/plugin-info'
-import ActionButton from '../../base/action-button'
-import Tooltip from '../../base/tooltip'
-import Confirm from '../../base/confirm'
-import { uninstallPlugin } from '@/service/plugins'
-import { useGitHubReleases } from '../install-plugin/hooks'
-import Toast from '@/app/components/base/toast'
-import { useModalContext } from '@/context/modal-context'
-import { useInvalidateInstalledPluginList } from '@/service/use-plugins'
-import type { PluginType } from '@/app/components/plugins/types'
-
-const i18nPrefix = 'plugin.action'
-
-type Props = {
-  author: string
-  installationId: string
-  pluginUniqueIdentifier: string
-  pluginName: string
-  category: PluginType
-  usedInApps: number
-  isShowFetchNewVersion: boolean
-  isShowInfo: boolean
-  isShowDelete: boolean
-  onDelete: () => void
-  meta?: MetaData
-}
-const Action: FC<Props> = ({
-  author,
-  installationId,
-  pluginUniqueIdentifier,
-  pluginName,
-  category,
-  isShowFetchNewVersion,
-  isShowInfo,
-  isShowDelete,
-  onDelete,
-  meta,
-}) => {
-  const { t } = useTranslation()
-  const [isShowPluginInfo, {
-    setTrue: showPluginInfo,
-    setFalse: hidePluginInfo,
-  }] = useBoolean(false)
-  const [deleting, {
-    setTrue: showDeleting,
-    setFalse: hideDeleting,
-  }] = useBoolean(false)
-  const { checkForUpdates, fetchReleases } = useGitHubReleases()
-  const { setShowUpdatePluginModal } = useModalContext()
-  const invalidateInstalledPluginList = useInvalidateInstalledPluginList()
-
-  const handleFetchNewVersion = async () => {
-    const owner = meta!.repo.split('/')[0] || author
-    const repo = meta!.repo.split('/')[1] || pluginName
-    const fetchedReleases = await fetchReleases(owner, repo)
-    if (fetchedReleases.length === 0) return
-    const { needUpdate, toastProps } = checkForUpdates(fetchedReleases, meta!.version)
-    Toast.notify(toastProps)
-    if (needUpdate) {
-      setShowUpdatePluginModal({
-        onSaveCallback: () => {
-          invalidateInstalledPluginList()
-        },
-        payload: {
-          type: PluginSource.github,
-          category,
-          github: {
-            originalPackageInfo: {
-              id: pluginUniqueIdentifier,
-              repo: meta!.repo,
-              version: meta!.version,
-              package: meta!.package,
-              releases: fetchedReleases,
-            },
-          },
-        },
-      })
-    }
-  }
-
-  const [isShowDeleteConfirm, {
-    setTrue: showDeleteConfirm,
-    setFalse: hideDeleteConfirm,
-  }] = useBoolean(false)
-
-  const handleDelete = useCallback(async () => {
-    showDeleting()
-    const res = await uninstallPlugin(installationId)
-    hideDeleting()
-    if (res.success) {
-      hideDeleteConfirm()
-      onDelete()
-    }
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [installationId, onDelete])
-  return (
-    <div className='flex space-x-1'>
-      {/* Only plugin installed from GitHub need to check if it's the new version  */}
-      {isShowFetchNewVersion
-        && (
-          <Tooltip popupContent={t(`${i18nPrefix}.checkForUpdates`)}>
-            <ActionButton onClick={handleFetchNewVersion}>
-              <RiLoopLeftLine className='h-4 w-4 text-text-tertiary' />
-            </ActionButton>
-          </Tooltip>
-        )
-      }
-      {
-        isShowInfo
-        && (
-          <Tooltip popupContent={t(`${i18nPrefix}.pluginInfo`)}>
-            <ActionButton onClick={showPluginInfo}>
-              <RiInformation2Line className='h-4 w-4 text-text-tertiary' />
-            </ActionButton>
-          </Tooltip>
-        )
-      }
-      {
-        isShowDelete
-        && (
-          <Tooltip popupContent={t(`${i18nPrefix}.delete`)}>
-            <ActionButton
-              className='text-text-tertiary hover:bg-state-destructive-hover hover:text-text-destructive'
-              onClick={showDeleteConfirm}
-            >
-              <RiDeleteBinLine className='h-4 w-4' />
-            </ActionButton>
-          </Tooltip>
-        )
-      }
-
-      {isShowPluginInfo && (
-        <PluginInfo
-          repository={meta!.repo}
-          release={meta!.version}
-          packageName={meta!.package}
-          onHide={hidePluginInfo}
-        />
-      )}
-      <Confirm
-        isShow={isShowDeleteConfirm}
-        title={t(`${i18nPrefix}.delete`)}
-        content={
-          <div>
-            {t(`${i18nPrefix}.deleteContentLeft`)}<span className='system-md-semibold'>{pluginName}</span>{t(`${i18nPrefix}.deleteContentRight`)}<br />
-            {/* // todo: add usedInApps */}
-            {/* {usedInApps > 0 && t(`${i18nPrefix}.usedInApps`, { num: usedInApps })} */}
-          </div>
-        }
-        onCancel={hideDeleteConfirm}
-        onConfirm={handleDelete}
-        isLoading={deleting}
-        isDisabled={deleting}
-      />
-    </div>
-  )
-}
-export default React.memo(Action)
diff --git a/app/components/plugins/plugin-item/index.tsx b/app/components/plugins/plugin-item/index.tsx
deleted file mode 100644
index efc635e..0000000
--- a/app/components/plugins/plugin-item/index.tsx
+++ /dev/null
@@ -1,197 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useMemo } from 'react'
-import { useTheme } from 'next-themes'
-import {
-  RiArrowRightUpLine,
-  RiBugLine,
-  RiErrorWarningLine,
-  RiHardDrive3Line,
-  RiLoginCircleLine,
-  RiVerifiedBadgeLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { usePluginPageContext } from '../plugin-page/context'
-import { Github } from '../../base/icons/src/public/common'
-import Badge from '../../base/badge'
-import { type PluginDetail, PluginSource, PluginType } from '../types'
-import CornerMark from '../card/base/corner-mark'
-import Description from '../card/base/description'
-import OrgInfo from '../card/base/org-info'
-import Title from '../card/base/title'
-import Action from './action'
-import cn from '@/utils/classnames'
-import { API_PREFIX, MARKETPLACE_URL_PREFIX } from '@/config'
-import { useSingleCategories } from '../hooks'
-import { useRenderI18nObject } from '@/hooks/use-i18n'
-import useRefreshPluginList from '@/app/components/plugins/install-plugin/hooks/use-refresh-plugin-list'
-import { useAppContext } from '@/context/app-context'
-import { gte } from 'semver'
-import Tooltip from '@/app/components/base/tooltip'
-
-type Props = {
-  className?: string
-  plugin: PluginDetail
-}
-
-const PluginItem: FC<Props> = ({
-  className,
-  plugin,
-}) => {
-  const { t } = useTranslation()
-  const { theme } = useTheme()
-  const { categoriesMap } = useSingleCategories()
-  const currentPluginID = usePluginPageContext(v => v.currentPluginID)
-  const setCurrentPluginID = usePluginPageContext(v => v.setCurrentPluginID)
-  const { refreshPluginList } = useRefreshPluginList()
-
-  const {
-    source,
-    tenant_id,
-    installation_id,
-    plugin_unique_identifier,
-    endpoints_active,
-    meta,
-    plugin_id,
-  } = plugin
-  const { category, author, name, label, description, icon, verified, meta: declarationMeta } = plugin.declaration
-
-  const orgName = useMemo(() => {
-    return [PluginSource.github, PluginSource.marketplace].includes(source) ? author : ''
-  }, [source, author])
-
-  const { langeniusVersionInfo } = useAppContext()
-
-  const isDifyVersionCompatible = useMemo(() => {
-    if (!langeniusVersionInfo.current_version)
-      return true
-    return gte(langeniusVersionInfo.current_version, declarationMeta.minimum_dify_version ?? '0.0.0')
-  }, [declarationMeta.minimum_dify_version, langeniusVersionInfo.current_version])
-
-  const handleDelete = () => {
-    refreshPluginList({ category } as any)
-  }
-  const getValueFromI18nObject = useRenderI18nObject()
-  const title = getValueFromI18nObject(label)
-  const descriptionText = getValueFromI18nObject(description)
-
-  return (
-    <div
-      className={cn(
-        'rounded-xl border-[1.5px] border-background-section-burn p-1',
-        currentPluginID === plugin_id && 'border-components-option-card-option-selected-border',
-        source === PluginSource.debugging
-          ? 'bg-[repeating-linear-gradient(-45deg,rgba(16,24,40,0.04),rgba(16,24,40,0.04)_5px,rgba(0,0,0,0.02)_5px,rgba(0,0,0,0.02)_10px)]'
-          : 'bg-background-section-burn',
-      )}
-      onClick={() => {
-        setCurrentPluginID(plugin.plugin_id)
-      }}
-    >
-      <div className={cn('hover-bg-components-panel-on-panel-item-bg relative rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-on-panel-item-bg p-4 pb-3 shadow-xs', className)}>
-        <CornerMark text={categoriesMap[category].label} />
-        {/* Header */}
-        <div className="flex">
-          <div className='flex h-10 w-10 items-center justify-center overflow-hidden rounded-xl border-[1px] border-components-panel-border-subtle'>
-            <img
-              className='h-full w-full'
-              src={`${API_PREFIX}/workspaces/current/plugin/icon?tenant_id=${tenant_id}&filename=${icon}`}
-              alt={`plugin-${plugin_unique_identifier}-logo`}
-            />
-          </div>
-          <div className="ml-3 w-0 grow">
-            <div className="flex h-5 items-center">
-              <Title title={title} />
-              {verified && <RiVerifiedBadgeLine className="ml-0.5 h-4 w-4 shrink-0 text-text-accent" />}
-              {!isDifyVersionCompatible && <Tooltip popupContent={
-                t('plugin.difyVersionNotCompatible', { minimalDifyVersion: declarationMeta.minimum_dify_version })
-              }><RiErrorWarningLine color='red' className="ml-0.5 h-4 w-4 shrink-0 text-text-accent" /></Tooltip>}
-              <Badge className='ml-1 shrink-0'
-                text={source === PluginSource.github ? plugin.meta!.version : plugin.version}
-                hasRedCornerMark={(source === PluginSource.marketplace) && !!plugin.latest_unique_identifier && plugin.latest_unique_identifier !== plugin_unique_identifier}
-              />
-            </div>
-            <div className='flex items-center justify-between'>
-              <Description text={descriptionText} descriptionLineRows={1}></Description>
-              <div onClick={e => e.stopPropagation()}>
-                <Action
-                  pluginUniqueIdentifier={plugin_unique_identifier}
-                  installationId={installation_id}
-                  author={author}
-                  pluginName={name}
-                  usedInApps={5}
-                  isShowFetchNewVersion={source === PluginSource.github}
-                  isShowInfo={source === PluginSource.github}
-                  isShowDelete
-                  meta={meta}
-                  onDelete={handleDelete}
-                  category={category}
-                />
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div className='mb-1 mt-1.5 flex h-4 items-center justify-between px-4'>
-        <div className='flex items-center'>
-          <OrgInfo
-            className="mt-0.5"
-            orgName={orgName}
-            packageName={name}
-            packageNameClassName='w-auto max-w-[150px]'
-          />
-          {category === PluginType.extension && (
-            <>
-              <div className='system-xs-regular mx-2 text-text-quaternary'>路</div>
-              <div className='system-xs-regular flex space-x-1 text-text-tertiary'>
-                <RiLoginCircleLine className='h-4 w-4' />
-                <span>{t('plugin.endpointsEnabled', { num: endpoints_active })}</span>
-              </div>
-            </>
-          )}
-        </div>
-
-        <div className='flex items-center'>
-          {source === PluginSource.github
-            && <>
-              <a href={`https://github.com/${meta!.repo}`} target='_blank' className='flex items-center gap-1'>
-                <div className='system-2xs-medium-uppercase text-text-tertiary'>{t('plugin.from')}</div>
-                <div className='flex items-center space-x-0.5 text-text-secondary'>
-                  <Github className='h-3 w-3' />
-                  <div className='system-2xs-semibold-uppercase'>GitHub</div>
-                  <RiArrowRightUpLine className='h-3 w-3' />
-                </div>
-              </a>
-            </>
-          }
-          {source === PluginSource.marketplace
-            && <>
-              <a href={`${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}${theme ? `?theme=${theme}` : ''}`} target='_blank' className='flex items-center gap-0.5'>
-                <div className='system-2xs-medium-uppercase text-text-tertiary'>{t('plugin.from')} <span className='text-text-secondary'>marketplace</span></div>
-                <RiArrowRightUpLine className='h-3 w-3 text-text-tertiary' />
-              </a>
-            </>
-          }
-          {source === PluginSource.local
-            && <>
-              <div className='flex items-center gap-1'>
-                <RiHardDrive3Line className='h-3 w-3 text-text-tertiary' />
-                <div className='system-2xs-medium-uppercase text-text-tertiary'>Local Plugin</div>
-              </div>
-            </>
-          }
-          {source === PluginSource.debugging
-            && <>
-              <div className='flex items-center gap-1'>
-                <RiBugLine className='h-3 w-3 text-text-warning' />
-                <div className='system-2xs-medium-uppercase text-text-warning'>Debugging Plugin</div>
-              </div>
-            </>
-          }
-        </div>
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(PluginItem)
diff --git a/app/components/plugins/plugin-mutation-model/index.tsx b/app/components/plugins/plugin-mutation-model/index.tsx
deleted file mode 100644
index 8b6d8a2..0000000
--- a/app/components/plugins/plugin-mutation-model/index.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import type { FC, ReactNode } from 'react'
-import React, { memo } from 'react'
-import Card from '@/app/components/plugins/card'
-import Modal from '@/app/components/base/modal'
-import Button from '@/app/components/base/button'
-import type { Plugin } from '../types'
-import type { UseMutationResult } from '@tanstack/react-query'
-
-type Props = {
-  plugin: Plugin
-  onCancel: () => void
-  mutation: Pick<UseMutationResult, 'isSuccess' | 'isPending'>
-  mutate: () => void
-  confirmButtonText: ReactNode
-  cancelButtonText: ReactNode
-  modelTitle: ReactNode
-  description: ReactNode
-  cardTitleLeft: ReactNode
-  modalBottomLeft?: ReactNode
-}
-
-const PluginMutationModal: FC<Props> = ({
-  plugin,
-  onCancel,
-  mutation,
-  confirmButtonText,
-  cancelButtonText,
-  modelTitle,
-  description,
-  cardTitleLeft,
-  mutate,
-  modalBottomLeft,
-}: Props) => {
-  return (
-    <Modal
-      isShow={true}
-      onClose={onCancel}
-      className='min-w-[560px]'
-      closable
-      title={modelTitle}
-    >
-      <div className='system-md-regular mb-2 mt-3 text-text-secondary'>
-        {description}
-      </div>
-      <div className='flex flex-wrap content-start items-start gap-1 self-stretch rounded-2xl bg-background-section-burn p-2'>
-        <Card
-          installed={mutation.isSuccess}
-          payload={plugin}
-          className='w-full'
-          titleLeft={cardTitleLeft}
-        />
-      </div>
-      <div className='flex items-center gap-2 self-stretch pt-5'>
-        <div>
-          {modalBottomLeft}
-        </div>
-        <div className='ml-auto flex gap-2'>
-          {!mutation.isPending && (
-            <Button onClick={onCancel}>
-              {cancelButtonText}
-            </Button>
-          )}
-          <Button
-            variant='primary'
-            loading={mutation.isPending}
-            onClick={mutate}
-            disabled={mutation.isPending}
-          >
-            {confirmButtonText}
-          </Button>
-        </div>
-      </div>
-    </Modal>
-  )
-}
-
-PluginMutationModal.displayName = 'PluginMutationModal'
-
-export default memo(PluginMutationModal)
diff --git a/app/components/plugins/plugin-page/context.tsx b/app/components/plugins/plugin-page/context.tsx
deleted file mode 100644
index ae1ad7d..0000000
--- a/app/components/plugins/plugin-page/context.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-'use client'
-
-import type { ReactNode } from 'react'
-import {
-  useMemo,
-  useRef,
-  useState,
-} from 'react'
-import {
-  createContext,
-  useContextSelector,
-} from 'use-context-selector'
-import { useSelector as useAppContextSelector } from '@/context/app-context'
-import type { FilterState } from './filter-management'
-import { useTabSearchParams } from '@/hooks/use-tab-searchparams'
-import { noop } from 'lodash-es'
-import { PLUGIN_PAGE_TABS_MAP, usePluginPageTabs } from '../hooks'
-
-export type PluginPageContextValue = {
-  containerRef: React.RefObject<HTMLDivElement>
-  currentPluginID: string | undefined
-  setCurrentPluginID: (pluginID?: string) => void
-  filters: FilterState
-  setFilters: (filter: FilterState) => void
-  activeTab: string
-  setActiveTab: (tab: string) => void
-  options: Array<{ value: string, text: string }>
-}
-
-export const PluginPageContext = createContext<PluginPageContextValue>({
-  containerRef: { current: null },
-  currentPluginID: undefined,
-  setCurrentPluginID: noop,
-  filters: {
-    categories: [],
-    tags: [],
-    searchQuery: '',
-  },
-  setFilters: noop,
-  activeTab: '',
-  setActiveTab: noop,
-  options: [],
-})
-
-type PluginPageContextProviderProps = {
-  children: ReactNode
-}
-
-export function usePluginPageContext(selector: (value: PluginPageContextValue) => any) {
-  return useContextSelector(PluginPageContext, selector)
-}
-
-export const PluginPageContextProvider = ({
-  children,
-}: PluginPageContextProviderProps) => {
-  const containerRef = useRef<HTMLDivElement>(null)
-  const [filters, setFilters] = useState<FilterState>({
-    categories: [],
-    tags: [],
-    searchQuery: '',
-  })
-  const [currentPluginID, setCurrentPluginID] = useState<string | undefined>()
-
-  const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures)
-  const tabs = usePluginPageTabs()
-  const options = useMemo(() => {
-    return enable_marketplace ? tabs : tabs.filter(tab => tab.value !== PLUGIN_PAGE_TABS_MAP.marketplace)
-  }, [tabs, enable_marketplace])
-  const [activeTab, setActiveTab] = useTabSearchParams({
-    defaultTab: options[0].value,
-  })
-
-  return (
-    <PluginPageContext.Provider
-      value={{
-        containerRef,
-        currentPluginID,
-        setCurrentPluginID,
-        filters,
-        setFilters,
-        activeTab,
-        setActiveTab,
-        options,
-      }}
-    >
-      {children}
-    </PluginPageContext.Provider>
-  )
-}
diff --git a/app/components/plugins/plugin-page/debug-info.tsx b/app/components/plugins/plugin-page/debug-info.tsx
deleted file mode 100644
index 28b8a7f..0000000
--- a/app/components/plugins/plugin-page/debug-info.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useContext } from 'use-context-selector'
-import I18n from '@/context/i18n'
-import {
-  RiArrowRightUpLine,
-  RiBugLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import KeyValueItem from '../base/key-value-item'
-import Tooltip from '@/app/components/base/tooltip'
-import Button from '@/app/components/base/button'
-import { getDocsUrl } from '@/app/components/plugins/utils'
-import { useDebugKey } from '@/service/use-plugins'
-
-const i18nPrefix = 'plugin.debugInfo'
-
-const DebugInfo: FC = () => {
-  const { t } = useTranslation()
-  const { locale } = useContext(I18n)
-  const { data: info, isLoading } = useDebugKey()
-
-  // info.key likes 4580bdb7-b878-471c-a8a4-bfd760263a53 mask the middle part using *.
-  const maskedKey = info?.key?.replace(/(.{8})(.*)(.{8})/, '$1********$3')
-
-  if (isLoading) return null
-
-  return (
-    <Tooltip
-      triggerMethod='click'
-      disabled={!info}
-      popupContent={
-        <>
-          <div className='flex items-center gap-1 self-stretch'>
-            <span className='system-sm-semibold flex shrink-0 grow basis-0 flex-col items-start justify-center text-text-secondary'>{t(`${i18nPrefix}.title`)}</span>
-            <a href={getDocsUrl(locale, '/plugins/quick-start/debug-plugin')} target='_blank' className='flex cursor-pointer items-center gap-0.5 text-text-accent-light-mode-only'>
-              <span className='system-xs-medium'>{t(`${i18nPrefix}.viewDocs`)}</span>
-              <RiArrowRightUpLine className='h-3 w-3' />
-            </a>
-          </div>
-          <div className='space-y-0.5'>
-            <KeyValueItem
-              label={'URL'}
-              value={`${info?.host}:${info?.port}`}
-            />
-            <KeyValueItem
-              label={'Key'}
-              value={info?.key || ''}
-              maskedValue={maskedKey}
-            />
-          </div>
-        </>
-      }
-      popupClassName='flex flex-col items-start w-[256px] px-4 py-3.5 gap-1 border border-components-panel-border
-        rounded-xl bg-components-tooltip-bg shadows-shadow-lg z-50'
-      asChild={false}
-      position='bottom'
-    >
-      <Button className='h-full w-full p-2 text-components-button-secondary-text'>
-        <RiBugLine className='h-4 w-4' />
-      </Button>
-    </Tooltip>
-  )
-}
-
-export default React.memo(DebugInfo)
diff --git a/app/components/plugins/plugin-page/empty/index.tsx b/app/components/plugins/plugin-page/empty/index.tsx
deleted file mode 100644
index 53a00dc..0000000
--- a/app/components/plugins/plugin-page/empty/index.tsx
+++ /dev/null
@@ -1,121 +0,0 @@
-import React, { useMemo, useRef, useState } from 'react'
-import { MagicBox } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices'
-import { FileZip } from '@/app/components/base/icons/src/vender/solid/files'
-import { Github } from '@/app/components/base/icons/src/vender/solid/general'
-import InstallFromGitHub from '@/app/components/plugins/install-plugin/install-from-github'
-import InstallFromLocalPackage from '@/app/components/plugins/install-plugin/install-from-local-package'
-import { usePluginPageContext } from '../context'
-import { Group } from '@/app/components/base/icons/src/vender/other'
-import { useSelector as useAppContextSelector } from '@/context/app-context'
-import Line from '../../marketplace/empty/line'
-import { useInstalledPluginList } from '@/service/use-plugins'
-import { useTranslation } from 'react-i18next'
-import { SUPPORT_INSTALL_LOCAL_FILE_EXTENSIONS } from '@/config'
-import { noop } from 'lodash-es'
-
-const Empty = () => {
-  const { t } = useTranslation()
-  const fileInputRef = useRef<HTMLInputElement>(null)
-  const [selectedAction, setSelectedAction] = useState<string | null>(null)
-  const [selectedFile, setSelectedFile] = useState<File | null>(null)
-  const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures)
-  const setActiveTab = usePluginPageContext(v => v.setActiveTab)
-
-  const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {
-    const file = event.target.files?.[0]
-    if (file) {
-      setSelectedFile(file)
-      setSelectedAction('local')
-    }
-  }
-  const filters = usePluginPageContext(v => v.filters)
-  const { data: pluginList } = useInstalledPluginList()
-
-  const text = useMemo(() => {
-    if (pluginList?.plugins.length === 0)
-      return t('plugin.list.noInstalled')
-    if (filters.categories.length > 0 || filters.tags.length > 0 || filters.searchQuery)
-      return t('plugin.list.notFound')
-  }, [pluginList?.plugins.length, t, filters.categories.length, filters.tags.length, filters.searchQuery])
-
-  return (
-    <div className='relative z-0 w-full grow'>
-      {/* skeleton */}
-      <div className='absolute top-0 z-10 grid h-full w-full grid-cols-2 gap-2 overflow-hidden px-12'>
-        {Array.from({ length: 20 }).fill(0).map((_, i) => (
-          <div key={i} className='h-[100px] rounded-xl bg-components-card-bg' />
-        ))}
-      </div>
-      {/* mask */}
-      <div className='absolute z-20 h-full w-full bg-gradient-to-b from-components-panel-bg-transparent to-components-panel-bg' />
-      <div className='relative z-30 flex h-full items-center justify-center'>
-        <div className='flex flex-col items-center gap-y-3'>
-          <div className='relative -z-10 flex h-[52px] w-[52px] items-center justify-center rounded-xl
-          border-[1px] border-dashed border-divider-deep bg-components-card-bg shadow-xl shadow-shadow-shadow-5'>
-            <Group className='h-5 w-5 text-text-tertiary' />
-            <Line className='absolute right-[-1px] top-1/2 -translate-y-1/2' />
-            <Line className='absolute left-[-1px] top-1/2 -translate-y-1/2' />
-            <Line className='absolute left-1/2 top-0 -translate-x-1/2 -translate-y-1/2 rotate-90' />
-            <Line className='absolute left-1/2 top-full -translate-x-1/2 -translate-y-1/2 rotate-90' />
-          </div>
-          <div className='text-sm font-normal text-text-tertiary'>
-            {text}
-          </div>
-          <div className='flex w-[240px] flex-col'>
-            <input
-              type='file'
-              ref={fileInputRef}
-              style={{ display: 'none' }}
-              onChange={handleFileChange}
-              accept={SUPPORT_INSTALL_LOCAL_FILE_EXTENSIONS}
-            />
-            <div className='flex w-full flex-col gap-y-1'>
-              {[
-                ...(
-                  (enable_marketplace)
-                    ? [{ icon: MagicBox, text: t('plugin.list.source.marketplace'), action: 'marketplace' }]
-                    : []
-                ),
-                { icon: Github, text: t('plugin.list.source.github'), action: 'github' },
-                { icon: FileZip, text: t('plugin.list.source.local'), action: 'local' },
-              ].map(({ icon: Icon, text, action }) => (
-                <div
-                  key={action}
-                  className='flex cursor-pointer items-center gap-x-1 rounded-lg border-[0.5px] bg-components-button-secondary-bg
-                  px-3 py-2 shadow-xs shadow-shadow-shadow-3 hover:bg-state-base-hover'
-                  onClick={() => {
-                    if (action === 'local')
-                      fileInputRef.current?.click()
-                    else if (action === 'marketplace')
-                      setActiveTab('discover')
-                    else
-                      setSelectedAction(action)
-                  }}
-                >
-                  <Icon className="h-4 w-4 text-text-tertiary" />
-                  <span className='system-md-regular text-text-secondary'>{text}</span>
-                </div>
-              ))}
-            </div>
-          </div>
-        </div>
-        {selectedAction === 'github' && <InstallFromGitHub
-          onSuccess={noop}
-          onClose={() => setSelectedAction(null)}
-        />}
-        {selectedAction === 'local' && selectedFile
-          && (<InstallFromLocalPackage
-            file={selectedFile}
-            onClose={() => setSelectedAction(null)}
-            onSuccess={noop}
-          />
-          )
-        }
-      </div>
-    </div>
-  )
-}
-
-Empty.displayName = 'Empty'
-
-export default React.memo(Empty)
diff --git a/app/components/plugins/plugin-page/filter-management/category-filter.tsx b/app/components/plugins/plugin-page/filter-management/category-filter.tsx
deleted file mode 100644
index edebe68..0000000
--- a/app/components/plugins/plugin-page/filter-management/category-filter.tsx
+++ /dev/null
@@ -1,127 +0,0 @@
-'use client'
-
-import { useState } from 'react'
-import {
-  RiArrowDownSLine,
-  RiCloseCircleFill,
-} from '@remixicon/react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Checkbox from '@/app/components/base/checkbox'
-import cn from '@/utils/classnames'
-import Input from '@/app/components/base/input'
-import { useCategories } from '../../hooks'
-import { useTranslation } from 'react-i18next'
-
-type CategoriesFilterProps = {
-  value: string[]
-  onChange: (categories: string[]) => void
-}
-const CategoriesFilter = ({
-  value,
-  onChange,
-}: CategoriesFilterProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const [searchText, setSearchText] = useState('')
-  const { categories: options, categoriesMap } = useCategories()
-  const filteredOptions = options.filter(option => option.name.toLowerCase().includes(searchText.toLowerCase()))
-  const handleCheck = (id: string) => {
-    if (value.includes(id))
-      onChange(value.filter(tag => tag !== id))
-    else
-      onChange([...value, id])
-  }
-  const selectedTagsLength = value.length
-
-  return (
-    <PortalToFollowElem
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-      }}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
-        <div className={cn(
-          'flex h-8 cursor-pointer items-center rounded-lg bg-components-input-bg-normal px-2 py-1 text-text-tertiary hover:bg-state-base-hover-alt',
-          selectedTagsLength && 'text-text-secondary',
-          open && 'bg-state-base-hover',
-        )}>
-          <div className={cn(
-            'system-sm-medium flex items-center p-1',
-          )}>
-            {
-              !selectedTagsLength && t('plugin.allCategories')
-            }
-            {
-              !!selectedTagsLength && value.map(val => categoriesMap[val].label).slice(0, 2).join(',')
-            }
-            {
-              selectedTagsLength > 2 && (
-                <div className='system-xs-medium ml-1 text-text-tertiary'>
-                  +{selectedTagsLength - 2}
-                </div>
-              )
-            }
-          </div>
-          {
-            !!selectedTagsLength && (
-              <RiCloseCircleFill
-                className='h-4 w-4 cursor-pointer text-text-quaternary'
-                onClick={
-                  (e) => {
-                    e.stopPropagation()
-                    onChange([])
-                  }
-                }
-              />
-            )
-          }
-          {
-            !selectedTagsLength && (
-              <RiArrowDownSLine className='h-4 w-4' />
-            )
-          }
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <div className='w-[240px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg'>
-          <div className='p-2 pb-1'>
-            <Input
-              showLeftIcon
-              value={searchText}
-              onChange={e => setSearchText(e.target.value)}
-              placeholder={t('plugin.searchCategories')}
-            />
-          </div>
-          <div className='max-h-[448px] overflow-y-auto p-1'>
-            {
-              filteredOptions.map(option => (
-                <div
-                  key={option.name}
-                  className='flex h-7 cursor-pointer items-center rounded-lg px-2 py-1.5 hover:bg-state-base-hover'
-                  onClick={() => handleCheck(option.name)}
-                >
-                  <Checkbox
-                    className='mr-1'
-                    checked={value.includes(option.name)}
-                  />
-                  <div className='system-sm-medium px-1 text-text-secondary'>
-                    {option.label}
-                  </div>
-                </div>
-              ))
-            }
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default CategoriesFilter
diff --git a/app/components/plugins/plugin-page/filter-management/constant.ts b/app/components/plugins/plugin-page/filter-management/constant.ts
deleted file mode 100644
index 80f7862..0000000
--- a/app/components/plugins/plugin-page/filter-management/constant.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export type Tag = {
-  id: string
-  name: string
-  type: string
-  binding_count: number
-}
-
-export type Category = {
-  name: 'model' | 'tool' | 'extension' | 'bundle'
-  binding_count: number
-}
diff --git a/app/components/plugins/plugin-page/filter-management/index.tsx b/app/components/plugins/plugin-page/filter-management/index.tsx
deleted file mode 100644
index c7a0bc7..0000000
--- a/app/components/plugins/plugin-page/filter-management/index.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import React, { useState } from 'react'
-import CategoriesFilter from './category-filter'
-import TagFilter from './tag-filter'
-import SearchBox from './search-box'
-import { usePluginPageContext } from '../context'
-
-export type FilterState = {
-  categories: string[]
-  tags: string[]
-  searchQuery: string
-}
-
-type FilterManagementProps = {
-  onFilterChange: (filters: FilterState) => void
-}
-
-const FilterManagement: React.FC<FilterManagementProps> = ({ onFilterChange }) => {
-  const initFilters = usePluginPageContext(v => v.filters) as FilterState
-  const [filters, setFilters] = useState<FilterState>(initFilters)
-
-  const updateFilters = (newFilters: Partial<FilterState>) => {
-    const updatedFilters = { ...filters, ...newFilters }
-    setFilters(updatedFilters)
-    onFilterChange(updatedFilters)
-  }
-
-  return (
-    <div className='flex items-center gap-2 self-stretch'>
-      <CategoriesFilter
-        value={filters.categories}
-        onChange={categories => updateFilters({ categories })}
-      />
-      <TagFilter
-        value={filters.tags}
-        onChange={tags => updateFilters({ tags })}
-      />
-      <SearchBox
-        searchQuery={filters.searchQuery}
-        onChange={searchQuery => updateFilters({ searchQuery })}
-      />
-    </div>
-  )
-}
-
-export default FilterManagement
diff --git a/app/components/plugins/plugin-page/filter-management/search-box.tsx b/app/components/plugins/plugin-page/filter-management/search-box.tsx
deleted file mode 100644
index ad3547e..0000000
--- a/app/components/plugins/plugin-page/filter-management/search-box.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-'use client'
-
-import Input from '@/app/components/base/input'
-import { useTranslation } from 'react-i18next'
-type SearchBoxProps = {
-  searchQuery: string
-  onChange: (query: string) => void
-}
-
-const SearchBox: React.FC<SearchBoxProps> = ({
-  searchQuery,
-  onChange,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <Input
-      wrapperClassName='flex w-[200px] items-center rounded-lg'
-      className='bg-components-input-bg-normal'
-      showLeftIcon
-      value={searchQuery}
-      placeholder={t('plugin.search')}
-      onChange={(e) => {
-        onChange(e.target.value)
-      }}
-    />
-  )
-}
-
-export default SearchBox
diff --git a/app/components/plugins/plugin-page/filter-management/store.ts b/app/components/plugins/plugin-page/filter-management/store.ts
deleted file mode 100644
index 4b55bf2..0000000
--- a/app/components/plugins/plugin-page/filter-management/store.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { create } from 'zustand'
-import type { Category, Tag } from './constant'
-
-type State = {
-  tagList: Tag[]
-  categoryList: Category[]
-  showTagManagementModal: boolean
-  showCategoryManagementModal: boolean
-}
-
-type Action = {
-  setTagList: (tagList?: Tag[]) => void
-  setCategoryList: (categoryList?: Category[]) => void
-  setShowTagManagementModal: (showTagManagementModal: boolean) => void
-  setShowCategoryManagementModal: (showCategoryManagementModal: boolean) => void
-}
-
-export const useStore = create<State & Action>(set => ({
-  tagList: [],
-  categoryList: [],
-  setTagList: tagList => set(() => ({ tagList })),
-  setCategoryList: categoryList => set(() => ({ categoryList })),
-  showTagManagementModal: false,
-  showCategoryManagementModal: false,
-  setShowTagManagementModal: showTagManagementModal => set(() => ({ showTagManagementModal })),
-  setShowCategoryManagementModal: showCategoryManagementModal => set(() => ({ showCategoryManagementModal })),
-}))
diff --git a/app/components/plugins/plugin-page/filter-management/tag-filter.tsx b/app/components/plugins/plugin-page/filter-management/tag-filter.tsx
deleted file mode 100644
index f81f5e1..0000000
--- a/app/components/plugins/plugin-page/filter-management/tag-filter.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-'use client'
-
-import { useState } from 'react'
-import {
-  RiArrowDownSLine,
-  RiCloseCircleFill,
-} from '@remixicon/react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Checkbox from '@/app/components/base/checkbox'
-import cn from '@/utils/classnames'
-import Input from '@/app/components/base/input'
-import { useTags } from '../../hooks'
-import { useTranslation } from 'react-i18next'
-
-type TagsFilterProps = {
-  value: string[]
-  onChange: (tags: string[]) => void
-}
-const TagsFilter = ({
-  value,
-  onChange,
-}: TagsFilterProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const [searchText, setSearchText] = useState('')
-  const { tags: options, tagsMap } = useTags()
-  const filteredOptions = options.filter(option => option.name.toLowerCase().includes(searchText.toLowerCase()))
-  const handleCheck = (id: string) => {
-    if (value.includes(id))
-      onChange(value.filter(tag => tag !== id))
-    else
-      onChange([...value, id])
-  }
-  const selectedTagsLength = value.length
-
-  return (
-    <PortalToFollowElem
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-      }}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
-        <div className={cn(
-          'flex h-8 cursor-pointer items-center rounded-lg bg-components-input-bg-normal px-2 py-1 text-text-tertiary hover:bg-state-base-hover-alt',
-          selectedTagsLength && 'text-text-secondary',
-          open && 'bg-state-base-hover',
-        )}>
-          <div className={cn(
-            'system-sm-medium flex items-center p-1',
-          )}>
-            {
-              !selectedTagsLength && t('pluginTags.allTags')
-            }
-            {
-              !!selectedTagsLength && value.map(val => tagsMap[val].label).slice(0, 2).join(',')
-            }
-            {
-              selectedTagsLength > 2 && (
-                <div className='system-xs-medium ml-1 text-text-tertiary'>
-                  +{selectedTagsLength - 2}
-                </div>
-              )
-            }
-          </div>
-          {
-            !!selectedTagsLength && (
-              <RiCloseCircleFill
-                className='h-4 w-4 cursor-pointer text-text-quaternary'
-                onClick={() => onChange([])}
-              />
-            )
-          }
-          {
-            !selectedTagsLength && (
-              <RiArrowDownSLine className='h-4 w-4' />
-            )
-          }
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <div className='w-[240px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg'>
-          <div className='p-2 pb-1'>
-            <Input
-              showLeftIcon
-              value={searchText}
-              onChange={e => setSearchText(e.target.value)}
-              placeholder={t('pluginTags.searchTags')}
-            />
-          </div>
-          <div className='max-h-[448px] overflow-y-auto p-1'>
-            {
-              filteredOptions.map(option => (
-                <div
-                  key={option.name}
-                  className='flex h-7 cursor-pointer items-center rounded-lg px-2 py-1.5 hover:bg-state-base-hover'
-                  onClick={() => handleCheck(option.name)}
-                >
-                  <Checkbox
-                    className='mr-1'
-                    checked={value.includes(option.name)}
-                  />
-                  <div className='system-sm-medium px-1 text-text-secondary'>
-                    {option.label}
-                  </div>
-                </div>
-              ))
-            }
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default TagsFilter
diff --git a/app/components/plugins/plugin-page/index.tsx b/app/components/plugins/plugin-page/index.tsx
deleted file mode 100644
index cb57b7f..0000000
--- a/app/components/plugins/plugin-page/index.tsx
+++ /dev/null
@@ -1,299 +0,0 @@
-'use client'
-
-import { useEffect, useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useContext } from 'use-context-selector'
-import Link from 'next/link'
-import {
-  RiBookOpenLine,
-  RiDragDropLine,
-  RiEqualizer2Line,
-} from '@remixicon/react'
-import { useBoolean } from 'ahooks'
-import InstallFromLocalPackage from '../install-plugin/install-from-local-package'
-import {
-  PluginPageContextProvider,
-  usePluginPageContext,
-} from './context'
-import InstallPluginDropdown from './install-plugin-dropdown'
-import { useUploader } from './use-uploader'
-import usePermission from './use-permission'
-import DebugInfo from './debug-info'
-import PluginTasks from './plugin-tasks'
-import Button from '@/app/components/base/button'
-import TabSlider from '@/app/components/base/tab-slider'
-import Tooltip from '@/app/components/base/tooltip'
-import cn from '@/utils/classnames'
-import PermissionSetModal from '@/app/components/plugins/permission-setting-modal/modal'
-import { useSelector as useAppContextSelector } from '@/context/app-context'
-import InstallFromMarketplace from '../install-plugin/install-from-marketplace'
-import {
-  useRouter,
-  useSearchParams,
-} from 'next/navigation'
-import type { Dependency } from '../types'
-import type { PluginDeclaration, PluginManifestInMarket } from '../types'
-import { sleep } from '@/utils'
-import { getDocsUrl } from '@/app/components/plugins/utils'
-import { fetchBundleInfoFromMarketPlace, fetchManifestFromMarketPlace } from '@/service/plugins'
-import { marketplaceApiPrefix } from '@/config'
-import { SUPPORT_INSTALL_LOCAL_FILE_EXTENSIONS } from '@/config'
-import I18n from '@/context/i18n'
-import { noop } from 'lodash-es'
-import { PLUGIN_TYPE_SEARCH_MAP } from '../marketplace/plugin-type-switch'
-import { PLUGIN_PAGE_TABS_MAP } from '../hooks'
-
-const PACKAGE_IDS_KEY = 'package-ids'
-const BUNDLE_INFO_KEY = 'bundle-info'
-
-export type PluginPageProps = {
-  plugins: React.ReactNode
-  marketplace: React.ReactNode
-}
-const PluginPage = ({
-  plugins,
-  marketplace,
-}: PluginPageProps) => {
-  const { t } = useTranslation()
-  const { locale } = useContext(I18n)
-  const searchParams = useSearchParams()
-  const { replace } = useRouter()
-
-  document.title = `${t('plugin.metadata.title')} - Dify`
-
-  // just support install one package now
-  const packageId = useMemo(() => {
-    const idStrings = searchParams.get(PACKAGE_IDS_KEY)
-    try {
-      return idStrings ? JSON.parse(idStrings)[0] : ''
-    }
-    catch {
-      return ''
-    }
-  }, [searchParams])
-
-  const [dependencies, setDependencies] = useState<Dependency[]>([])
-  const bundleInfo = useMemo(() => {
-    const info = searchParams.get(BUNDLE_INFO_KEY)
-    try {
-      return info ? JSON.parse(info) : undefined
-    }
-    catch {
-      return undefined
-    }
-  }, [searchParams])
-
-  const [isShowInstallFromMarketplace, {
-    setTrue: showInstallFromMarketplace,
-    setFalse: doHideInstallFromMarketplace,
-  }] = useBoolean(false)
-
-  const hideInstallFromMarketplace = () => {
-    doHideInstallFromMarketplace()
-    const url = new URL(window.location.href)
-    url.searchParams.delete(PACKAGE_IDS_KEY)
-    url.searchParams.delete(BUNDLE_INFO_KEY)
-    replace(url.toString())
-  }
-  const [manifest, setManifest] = useState<PluginDeclaration | PluginManifestInMarket | null>(null)
-
-  useEffect(() => {
-    (async () => {
-      await sleep(100)
-      if (packageId) {
-        const { data } = await fetchManifestFromMarketPlace(encodeURIComponent(packageId))
-        const { plugin, version } = data
-        setManifest({
-          ...plugin,
-          version: version.version,
-          icon: `${marketplaceApiPrefix}/plugins/${plugin.org}/${plugin.name}/icon`,
-        })
-        showInstallFromMarketplace()
-        return
-      }
-      if (bundleInfo) {
-        const { data } = await fetchBundleInfoFromMarketPlace(bundleInfo)
-        setDependencies(data.version.dependencies)
-        showInstallFromMarketplace()
-      }
-    })()
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [packageId, bundleInfo])
-
-  const {
-    canManagement,
-    canDebugger,
-    canSetPermissions,
-    permissions,
-    setPermissions,
-  } = usePermission()
-  const [showPluginSettingModal, {
-    setTrue: setShowPluginSettingModal,
-    setFalse: setHidePluginSettingModal,
-  }] = useBoolean()
-  const [currentFile, setCurrentFile] = useState<File | null>(null)
-  const containerRef = usePluginPageContext(v => v.containerRef)
-  const options = usePluginPageContext(v => v.options)
-  const activeTab = usePluginPageContext(v => v.activeTab)
-  const setActiveTab = usePluginPageContext(v => v.setActiveTab)
-  const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures)
-
-  const isPluginsTab = useMemo(() => activeTab === PLUGIN_PAGE_TABS_MAP.plugins, [activeTab])
-  const isExploringMarketplace = useMemo(() => {
-    const values = Object.values(PLUGIN_TYPE_SEARCH_MAP)
-    return activeTab === PLUGIN_PAGE_TABS_MAP.marketplace || values.includes(activeTab)
-  }, [activeTab])
-
-  const handleFileChange = (file: File | null) => {
-    if (!file || !file.name.endsWith('.difypkg')) {
-      setCurrentFile(null)
-      return
-    }
-
-    setCurrentFile(file)
-  }
-  const uploaderProps = useUploader({
-    onFileChange: handleFileChange,
-    containerRef,
-    enabled: isPluginsTab && canManagement,
-  })
-
-  const { dragging, fileUploader, fileChangeHandle, removeFile } = uploaderProps
-  return (
-    <div
-      id='marketplace-container'
-      ref={containerRef}
-      style={{ scrollbarGutter: 'stable' }}
-      className={cn('relative flex grow flex-col overflow-y-auto border-t border-divider-subtle', isPluginsTab
-        ? 'rounded-t-xl bg-components-panel-bg'
-        : 'bg-background-body',
-      )}
-    >
-      <div
-        className={cn(
-          'sticky top-0 z-10 flex min-h-[60px] items-center gap-1 self-stretch bg-components-panel-bg px-12 pb-2 pt-4', isExploringMarketplace && 'bg-background-body',
-        )}
-      >
-        <div className='flex w-full items-center justify-between'>
-          <div className='flex-1'>
-            <TabSlider
-              value={isPluginsTab ? PLUGIN_PAGE_TABS_MAP.plugins : PLUGIN_PAGE_TABS_MAP.marketplace}
-              onChange={setActiveTab}
-              options={options}
-            />
-          </div>
-          <div className='flex shrink-0 items-center gap-1'>
-            {
-              isExploringMarketplace && (
-                <>
-                  <Link
-                    href={getDocsUrl(locale, '/plugins/publish-plugins/publish-to-dify-marketplace/README')}
-                    target='_blank'
-                  >
-                    <Button
-                      className='px-3'
-                      variant='secondary-accent'
-                    >
-                      <RiBookOpenLine className='mr-1 h-4 w-4' />
-                      {t('plugin.submitPlugin')}
-                    </Button>
-                  </Link>
-                  <div className='mx-2 h-3.5 w-[1px] bg-divider-regular'></div>
-                </>
-              )
-            }
-            <PluginTasks />
-            {canManagement && (
-              <InstallPluginDropdown
-                onSwitchToMarketplaceTab={() => setActiveTab('discover')}
-              />
-            )}
-            {
-              canDebugger && (
-                <DebugInfo />
-              )
-            }
-            {
-              canSetPermissions && (
-                <Tooltip
-                  popupContent={t('plugin.privilege.title')}
-                >
-                  <Button
-                    className='group h-full w-full p-2 text-components-button-secondary-text'
-                    onClick={setShowPluginSettingModal}
-                  >
-                    <RiEqualizer2Line className='h-4 w-4' />
-                  </Button>
-                </Tooltip>
-              )
-            }
-          </div>
-        </div>
-      </div>
-      {isPluginsTab && (
-        <>
-          {plugins}
-          {dragging && (
-            <div
-              className="absolute inset-0 m-0.5 rounded-2xl border-2 border-dashed border-components-dropzone-border-accent
-                  bg-[rgba(21,90,239,0.14)] p-2">
-            </div>
-          )}
-          <div className={`flex items-center justify-center gap-2 py-4 ${dragging ? 'text-text-accent' : 'text-text-quaternary'}`}>
-            <RiDragDropLine className="h-4 w-4" />
-            <span className="system-xs-regular">{t('plugin.installModal.dropPluginToInstall')}</span>
-          </div>
-          {currentFile && (
-            <InstallFromLocalPackage
-              file={currentFile}
-              onClose={removeFile ?? noop}
-              onSuccess={noop}
-            />
-          )}
-          <input
-            ref={fileUploader}
-            className="hidden"
-            type="file"
-            id="fileUploader"
-            accept={SUPPORT_INSTALL_LOCAL_FILE_EXTENSIONS}
-            onChange={fileChangeHandle ?? noop}
-          />
-        </>
-      )}
-      {
-        isExploringMarketplace && enable_marketplace && marketplace
-      }
-
-      {showPluginSettingModal && (
-        <PermissionSetModal
-          payload={permissions!}
-          onHide={setHidePluginSettingModal}
-          onSave={setPermissions}
-        />
-      )}
-
-      {
-        isShowInstallFromMarketplace && (
-          <InstallFromMarketplace
-            manifest={manifest! as PluginManifestInMarket}
-            uniqueIdentifier={packageId}
-            isBundle={!!bundleInfo}
-            dependencies={dependencies}
-            onClose={hideInstallFromMarketplace}
-            onSuccess={hideInstallFromMarketplace}
-          />
-        )
-      }
-    </div>
-  )
-}
-
-const PluginPageWithContext = (props: PluginPageProps) => {
-  return (
-    <PluginPageContextProvider>
-      <PluginPage {...props} />
-    </PluginPageContextProvider>
-  )
-}
-
-export default PluginPageWithContext
diff --git a/app/components/plugins/plugin-page/install-plugin-dropdown.tsx b/app/components/plugins/plugin-page/install-plugin-dropdown.tsx
deleted file mode 100644
index 875cbd0..0000000
--- a/app/components/plugins/plugin-page/install-plugin-dropdown.tsx
+++ /dev/null
@@ -1,140 +0,0 @@
-'use client'
-
-import { useRef, useState } from 'react'
-import { RiAddLine, RiArrowDownSLine } from '@remixicon/react'
-import Button from '@/app/components/base/button'
-import { MagicBox } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices'
-import { FileZip } from '@/app/components/base/icons/src/vender/solid/files'
-import { Github } from '@/app/components/base/icons/src/vender/solid/general'
-import InstallFromGitHub from '@/app/components/plugins/install-plugin/install-from-github'
-import InstallFromLocalPackage from '@/app/components/plugins/install-plugin/install-from-local-package'
-import cn from '@/utils/classnames'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import { useSelector as useAppContextSelector } from '@/context/app-context'
-import { useTranslation } from 'react-i18next'
-import { SUPPORT_INSTALL_LOCAL_FILE_EXTENSIONS } from '@/config'
-import { noop } from 'lodash-es'
-
-type Props = {
-  onSwitchToMarketplaceTab: () => void
-}
-const InstallPluginDropdown = ({
-  onSwitchToMarketplaceTab,
-}: Props) => {
-  const { t } = useTranslation()
-  const fileInputRef = useRef<HTMLInputElement>(null)
-  const [isMenuOpen, setIsMenuOpen] = useState(false)
-  const [selectedAction, setSelectedAction] = useState<string | null>(null)
-  const [selectedFile, setSelectedFile] = useState<File | null>(null)
-  const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures)
-
-  const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {
-    const file = event.target.files?.[0]
-    if (file) {
-      setSelectedFile(file)
-      setSelectedAction('local')
-      setIsMenuOpen(false)
-    }
-  }
-
-  // TODO TEST INSTALL : uninstall
-  // const [pluginLists, setPluginLists] = useState<any>([])
-  // useEffect(() => {
-  //   (async () => {
-  //     const list: any = await get('workspaces/current/plugin/list')
-  //   })()
-  // })
-
-  // const handleUninstall = async (id: string) => {
-  //   const res = await post('workspaces/current/plugin/uninstall', { body: { plugin_installation_id: id } })
-  //   console.log(res)
-  // }
-
-  return (
-    <PortalToFollowElem
-      open={isMenuOpen}
-      onOpenChange={setIsMenuOpen}
-      placement='bottom-start'
-      offset={4}
-    >
-      <div className="relative">
-        <PortalToFollowElemTrigger onClick={() => setIsMenuOpen(v => !v)}>
-          <Button
-            className={cn('h-full w-full p-2 text-components-button-secondary-text', isMenuOpen && 'bg-state-base-hover')}
-          >
-            <RiAddLine className='h-4 w-4' />
-            <span className='pl-1'>{t('plugin.installPlugin')}</span>
-            <RiArrowDownSLine className='ml-1 h-4 w-4' />
-          </Button>
-        </PortalToFollowElemTrigger>
-        <PortalToFollowElemContent className='z-[1002]'>
-          <div className='shadows-shadow-lg flex w-[200px] flex-col items-start rounded-xl border border-components-panel-border bg-components-panel-bg-blur p-1 pb-2'>
-            <span className='system-xs-medium-uppercase flex items-start self-stretch pb-0.5 pl-2 pr-3 pt-1 text-text-tertiary'>
-              {t('plugin.installFrom')}
-            </span>
-            <input
-              type='file'
-              ref={fileInputRef}
-              style={{ display: 'none' }}
-              onChange={handleFileChange}
-              accept={SUPPORT_INSTALL_LOCAL_FILE_EXTENSIONS}
-            />
-            <div className='w-full'>
-              {[
-                ...(
-                  (enable_marketplace)
-                    ? [{ icon: MagicBox, text: t('plugin.source.marketplace'), action: 'marketplace' }]
-                    : []
-                ),
-                { icon: Github, text: t('plugin.source.github'), action: 'github' },
-                { icon: FileZip, text: t('plugin.source.local'), action: 'local' },
-              ].map(({ icon: Icon, text, action }) => (
-                <div
-                  key={action}
-                  className='flex w-full !cursor-pointer items-center gap-1 rounded-lg px-2 py-1.5 hover:bg-state-base-hover'
-                  onClick={() => {
-                    if (action === 'local') {
-                      fileInputRef.current?.click()
-                    }
-                    else if (action === 'marketplace') {
-                      onSwitchToMarketplaceTab()
-                      setIsMenuOpen(false)
-                    }
-                    else {
-                      setSelectedAction(action)
-                      setIsMenuOpen(false)
-                    }
-                  }}
-                >
-                  <Icon className="h-4 w-4 text-text-tertiary" />
-                  <span className='system-md-regular px-1 text-text-secondary'>{text}</span>
-                </div>
-              ))}
-            </div>
-          </div>
-        </PortalToFollowElemContent>
-      </div>
-      {selectedAction === 'github' && <InstallFromGitHub
-        onSuccess={noop}
-        onClose={() => setSelectedAction(null)}
-      />}
-      {selectedAction === 'local' && selectedFile
-        && (<InstallFromLocalPackage
-          file={selectedFile}
-          onClose={() => setSelectedAction(null)}
-          onSuccess={noop}
-        />
-        )
-      }
-      {/* {pluginLists.map((item: any) => (
-        <div key={item.id} onClick={() => handleUninstall(item.id)}>{item.name} 鍗歌浇</div>
-      ))} */}
-    </PortalToFollowElem>
-  )
-}
-
-export default InstallPluginDropdown
diff --git a/app/components/plugins/plugin-page/list/index.tsx b/app/components/plugins/plugin-page/list/index.tsx
deleted file mode 100644
index 9e9cf00..0000000
--- a/app/components/plugins/plugin-page/list/index.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import type { FC } from 'react'
-import PluginItem from '../../plugin-item'
-import type { PluginDetail } from '../../types'
-
-type IPluginListProps = {
-  pluginList: PluginDetail[]
-}
-
-const PluginList: FC<IPluginListProps> = ({ pluginList }) => {
-  return (
-    <div className='pb-3'>
-      <div className='grid grid-cols-2 gap-3'>
-        {pluginList.map(plugin => (
-          <PluginItem
-            key={plugin.plugin_id}
-            plugin={plugin}
-          />
-        ))}
-      </div>
-    </div>
-  )
-}
-export default PluginList
diff --git a/app/components/plugins/plugin-page/plugin-info.tsx b/app/components/plugins/plugin-page/plugin-info.tsx
deleted file mode 100644
index abd2979..0000000
--- a/app/components/plugins/plugin-page/plugin-info.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useTranslation } from 'react-i18next'
-import KeyValueItem from '../base/key-value-item'
-import Modal from '../../base/modal'
-import { convertRepoToUrl } from '../install-plugin/utils'
-
-const i18nPrefix = 'plugin.pluginInfoModal'
-type Props = {
-  repository?: string
-  release?: string
-  packageName?: string
-  onHide: () => void
-}
-
-const PlugInfo: FC<Props> = ({
-  repository,
-  release,
-  packageName,
-  onHide,
-}) => {
-  const { t } = useTranslation()
-  const labelWidthClassName = 'w-[96px]'
-  return (
-    <Modal
-      title={t(`${i18nPrefix}.title`)}
-      className='w-[480px]'
-      isShow
-      onClose={onHide}
-      closable
-    >
-      <div className='mt-5 space-y-3'>
-        {repository && <KeyValueItem label={t(`${i18nPrefix}.repository`)} labelWidthClassName={labelWidthClassName} value={`${convertRepoToUrl(repository)}`} valueMaxWidthClassName='max-w-[190px]' />}
-        {release && <KeyValueItem label={t(`${i18nPrefix}.release`)} labelWidthClassName={labelWidthClassName} value={release} />}
-        {packageName && <KeyValueItem label={t(`${i18nPrefix}.packageName`)} labelWidthClassName={labelWidthClassName} value={packageName} />}
-      </div>
-    </Modal>
-  )
-}
-export default React.memo(PlugInfo)
diff --git a/app/components/plugins/plugin-page/plugin-tasks/hooks.ts b/app/components/plugins/plugin-page/plugin-tasks/hooks.ts
deleted file mode 100644
index fba7dad..0000000
--- a/app/components/plugins/plugin-page/plugin-tasks/hooks.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-import {
-  useCallback,
-  useEffect,
-  useRef,
-  useState,
-} from 'react'
-import { TaskStatus } from '@/app/components/plugins/types'
-import type { PluginStatus } from '@/app/components/plugins/types'
-import {
-  useMutationClearAllTaskPlugin,
-  useMutationClearTaskPlugin,
-  usePluginTaskList,
-} from '@/service/use-plugins'
-
-export const usePluginTaskStatus = () => {
-  const {
-    pluginTasks,
-    handleRefetch,
-  } = usePluginTaskList()
-  const { mutateAsync } = useMutationClearTaskPlugin()
-  const { mutateAsync: mutateAsyncClearAll } = useMutationClearAllTaskPlugin()
-  const allPlugins = pluginTasks.map(task => task.plugins.map((plugin) => {
-    return {
-      ...plugin,
-      taskId: task.id,
-    }
-  })).flat()
-  const errorPlugins: PluginStatus[] = []
-  const successPlugins: PluginStatus[] = []
-  const runningPlugins: PluginStatus[] = []
-
-  allPlugins.forEach((plugin) => {
-    if (plugin.status === TaskStatus.running)
-      runningPlugins.push(plugin)
-    if (plugin.status === TaskStatus.failed)
-      errorPlugins.push(plugin)
-    if (plugin.status === TaskStatus.success)
-      successPlugins.push(plugin)
-  })
-
-  const handleClearErrorPlugin = useCallback(async (taskId: string, pluginId: string) => {
-    await mutateAsync({
-      taskId,
-      pluginId,
-    })
-    handleRefetch()
-  }, [mutateAsync, handleRefetch])
-  const handleClearAllErrorPlugin = useCallback(async () => {
-    await mutateAsyncClearAll()
-    handleRefetch()
-  }, [mutateAsyncClearAll, handleRefetch])
-  const totalPluginsLength = allPlugins.length
-  const runningPluginsLength = runningPlugins.length
-  const errorPluginsLength = errorPlugins.length
-  const successPluginsLength = successPlugins.length
-
-  const isInstalling = runningPluginsLength > 0 && errorPluginsLength === 0 && successPluginsLength === 0
-  const isInstallingWithSuccess = runningPluginsLength > 0 && successPluginsLength > 0 && errorPluginsLength === 0
-  const isInstallingWithError = runningPluginsLength > 0 && errorPluginsLength > 0
-  const isSuccess = successPluginsLength === totalPluginsLength && totalPluginsLength > 0
-  const isFailed = runningPluginsLength === 0 && (errorPluginsLength + successPluginsLength) === totalPluginsLength && totalPluginsLength > 0 && errorPluginsLength > 0
-
-  const [opacity, setOpacity] = useState(1)
-  const timerRef = useRef<NodeJS.Timeout | null>(null)
-
-  useEffect(() => {
-    if (isSuccess) {
-      if (timerRef.current) {
-        clearTimeout(timerRef.current)
-        timerRef.current = null
-      }
-      if (opacity > 0) {
-        timerRef.current = setTimeout(() => {
-          setOpacity(v => v - 0.1)
-        }, 200)
-      }
-    }
-
-    if (!isSuccess)
-      setOpacity(1)
-  }, [isSuccess, opacity])
-
-  return {
-    errorPlugins,
-    successPlugins,
-    runningPlugins,
-    runningPluginsLength,
-    errorPluginsLength,
-    successPluginsLength,
-    totalPluginsLength,
-    isInstalling,
-    isInstallingWithSuccess,
-    isInstallingWithError,
-    isSuccess,
-    isFailed,
-    handleClearErrorPlugin,
-    handleClearAllErrorPlugin,
-    opacity,
-  }
-}
diff --git a/app/components/plugins/plugin-page/plugin-tasks/index.tsx b/app/components/plugins/plugin-page/plugin-tasks/index.tsx
deleted file mode 100644
index 3ddc2be..0000000
--- a/app/components/plugins/plugin-page/plugin-tasks/index.tsx
+++ /dev/null
@@ -1,194 +0,0 @@
-import {
-  useMemo,
-  useState,
-} from 'react'
-import {
-  RiCheckboxCircleFill,
-  RiErrorWarningFill,
-  RiInstallLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { usePluginTaskStatus } from './hooks'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Tooltip from '@/app/components/base/tooltip'
-import Button from '@/app/components/base/button'
-import ProgressCircle from '@/app/components/base/progress-bar/progress-circle'
-import CardIcon from '@/app/components/plugins/card/base/card-icon'
-import cn from '@/utils/classnames'
-import { useGetLanguage } from '@/context/i18n'
-import useGetIcon from '@/app/components/plugins/install-plugin/base/use-get-icon'
-import DownloadingIcon from '@/app/components/header/plugins-nav/downloading-icon'
-
-const PluginTasks = () => {
-  const { t } = useTranslation()
-  const language = useGetLanguage()
-  const [open, setOpen] = useState(false)
-  const {
-    errorPlugins,
-    runningPluginsLength,
-    successPluginsLength,
-    errorPluginsLength,
-    totalPluginsLength,
-    isInstalling,
-    isInstallingWithSuccess,
-    isInstallingWithError,
-    isSuccess,
-    isFailed,
-    handleClearErrorPlugin,
-    handleClearAllErrorPlugin,
-    opacity,
-  } = usePluginTaskStatus()
-  const { getIconUrl } = useGetIcon()
-
-  const tip = useMemo(() => {
-    if (isInstalling)
-      return t('plugin.task.installing', { installingLength: runningPluginsLength })
-
-    if (isInstallingWithSuccess)
-      return t('plugin.task.installingWithSuccess', { installingLength: runningPluginsLength, successLength: successPluginsLength })
-
-    if (isInstallingWithError)
-      return t('plugin.task.installingWithError', { installingLength: runningPluginsLength, successLength: successPluginsLength, errorLength: errorPluginsLength })
-
-    if (isFailed)
-      return t('plugin.task.installError', { errorLength: errorPluginsLength })
-  }, [isInstalling, isInstallingWithSuccess, isInstallingWithError, isFailed, errorPluginsLength, runningPluginsLength, successPluginsLength, t])
-
-  if (!totalPluginsLength)
-    return null
-
-  return (
-    <div
-      className='flex items-center'
-      style={{ opacity }}
-    >
-      <PortalToFollowElem
-        open={open}
-        onOpenChange={setOpen}
-        placement='bottom-start'
-        offset={{
-          mainAxis: 4,
-          crossAxis: 79,
-        }}
-      >
-        <PortalToFollowElemTrigger
-          onClick={() => {
-            if (isFailed)
-              setOpen(v => !v)
-          }}
-        >
-          <Tooltip popupContent={tip}>
-            <div
-              className={cn(
-                'relative flex h-8 w-8 items-center justify-center rounded-lg border-[0.5px] border-components-button-secondary-border bg-components-button-secondary-bg shadow-xs hover:bg-components-button-secondary-bg-hover',
-                (isInstallingWithError || isFailed) && 'cursor-pointer border-components-button-destructive-secondary-border-hover bg-state-destructive-hover hover:bg-state-destructive-hover-alt',
-              )}
-              id="plugin-task-trigger"
-            >
-              {
-                (isInstalling || isInstallingWithError) && (
-                  <DownloadingIcon />
-                )
-              }
-              {
-                !(isInstalling || isInstallingWithError) && (
-                  <RiInstallLine
-                    className={cn(
-                      'h-4 w-4 text-components-button-secondary-text',
-                      (isInstallingWithError || isFailed) && 'text-components-button-destructive-secondary-text',
-                    )}
-                  />
-                )
-              }
-              <div className='absolute -right-1 -top-1'>
-                {
-                  (isInstalling || isInstallingWithSuccess) && (
-                    <ProgressCircle
-                      percentage={successPluginsLength / totalPluginsLength * 100}
-                      circleFillColor='fill-components-progress-brand-bg'
-                    />
-                  )
-                }
-                {
-                  isInstallingWithError && (
-                    <ProgressCircle
-                      percentage={runningPluginsLength / totalPluginsLength * 100}
-                      circleFillColor='fill-components-progress-brand-bg'
-                      sectorFillColor='fill-components-progress-error-border'
-                      circleStrokeColor='stroke-components-progress-error-border'
-                    />
-                  )
-                }
-                {
-                  isSuccess && (
-                    <RiCheckboxCircleFill className='h-3.5 w-3.5 text-text-success' />
-                  )
-                }
-                {
-                  isFailed && (
-                    <RiErrorWarningFill className='h-3.5 w-3.5 text-text-destructive' />
-                  )
-                }
-              </div>
-            </div>
-          </Tooltip>
-        </PortalToFollowElemTrigger>
-        <PortalToFollowElemContent className='z-[11]'>
-          <div className='w-[320px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 pb-2 shadow-lg'>
-            <div className='system-sm-semibold-uppercase sticky top-0 flex h-7 items-center justify-between px-2 pt-1'>
-              {t('plugin.task.installedError', { errorLength: errorPluginsLength })}
-              <Button
-                className='shrink-0'
-                size='small'
-                variant='ghost'
-                onClick={() => handleClearAllErrorPlugin()}
-              >
-                {t('plugin.task.clearAll')}
-              </Button>
-            </div>
-            <div className='max-h-[400px] overflow-y-auto'>
-              {
-                errorPlugins.map(errorPlugin => (
-                  <div
-                    key={errorPlugin.plugin_unique_identifier}
-                    className='flex rounded-lg p-2 hover:bg-state-base-hover'
-                  >
-                    <div className='relative mr-2 flex h-6 w-6 items-center justify-center rounded-md border-[0.5px] border-components-panel-border-subtle bg-background-default-dodge'>
-                      <RiErrorWarningFill className='absolute -bottom-0.5 -right-0.5 z-10 h-3 w-3 text-text-destructive' />
-                      <CardIcon
-                        size='tiny'
-                        src={getIconUrl(errorPlugin.icon)}
-                      />
-                    </div>
-                    <div className='grow'>
-                      <div className='system-md-regular truncate text-text-secondary'>
-                        {errorPlugin.labels[language]}
-                      </div>
-                      <div className='system-xs-regular break-all text-text-destructive'>
-                        {errorPlugin.message}
-                      </div>
-                    </div>
-                    <Button
-                      className='shrink-0'
-                      size='small'
-                      variant='ghost'
-                      onClick={() => handleClearErrorPlugin(errorPlugin.taskId, errorPlugin.plugin_unique_identifier)}
-                    >
-                      {t('common.operation.clear')}
-                    </Button>
-                  </div>
-                ))
-              }
-            </div>
-          </div>
-        </PortalToFollowElemContent>
-      </PortalToFollowElem>
-    </div>
-  )
-}
-
-export default PluginTasks
diff --git a/app/components/plugins/plugin-page/plugins-panel.tsx b/app/components/plugins/plugin-page/plugins-panel.tsx
deleted file mode 100644
index 125e6f0..0000000
--- a/app/components/plugins/plugin-page/plugins-panel.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-'use client'
-import { useMemo } from 'react'
-import type { FilterState } from './filter-management'
-import FilterManagement from './filter-management'
-import List from './list'
-import { useInstalledLatestVersion, useInstalledPluginList, useInvalidateInstalledPluginList } from '@/service/use-plugins'
-import PluginDetailPanel from '@/app/components/plugins/plugin-detail-panel'
-import { usePluginPageContext } from './context'
-import { useDebounceFn } from 'ahooks'
-import Empty from './empty'
-import Loading from '../../base/loading'
-import { PluginSource } from '../types'
-
-const PluginsPanel = () => {
-  const filters = usePluginPageContext(v => v.filters) as FilterState
-  const setFilters = usePluginPageContext(v => v.setFilters)
-  const { data: pluginList, isLoading: isPluginListLoading } = useInstalledPluginList()
-  const { data: installedLatestVersion } = useInstalledLatestVersion(
-    pluginList?.plugins
-      .filter(plugin => plugin.source === PluginSource.marketplace)
-      .map(plugin => plugin.plugin_id) ?? [],
-  )
-  const invalidateInstalledPluginList = useInvalidateInstalledPluginList()
-  const currentPluginID = usePluginPageContext(v => v.currentPluginID)
-  const setCurrentPluginID = usePluginPageContext(v => v.setCurrentPluginID)
-
-  const { run: handleFilterChange } = useDebounceFn((filters: FilterState) => {
-    setFilters(filters)
-  }, { wait: 500 })
-
-  const pluginListWithLatestVersion = useMemo(() => {
-    return pluginList?.plugins.map(plugin => ({
-      ...plugin,
-      latest_version: installedLatestVersion?.versions[plugin.plugin_id]?.version ?? '',
-      latest_unique_identifier: installedLatestVersion?.versions[plugin.plugin_id]?.unique_identifier ?? '',
-    })) || []
-  }, [pluginList, installedLatestVersion])
-
-  const filteredList = useMemo(() => {
-    const { categories, searchQuery, tags } = filters
-    const filteredList = pluginListWithLatestVersion.filter((plugin) => {
-      return (
-        (categories.length === 0 || categories.includes(plugin.declaration.category))
-        && (tags.length === 0 || tags.some(tag => plugin.declaration.tags.includes(tag)))
-        && (searchQuery === '' || plugin.plugin_id.toLowerCase().includes(searchQuery.toLowerCase()))
-      )
-    })
-    return filteredList
-  }, [pluginListWithLatestVersion, filters])
-
-  const currentPluginDetail = useMemo(() => {
-    const detail = pluginListWithLatestVersion.find(plugin => plugin.plugin_id === currentPluginID)
-    return detail
-  }, [currentPluginID, pluginListWithLatestVersion])
-
-  const handleHide = () => setCurrentPluginID(undefined)
-
-  return (
-    <>
-      <div className='flex flex-col items-start justify-center gap-3 self-stretch px-12 pb-3 pt-1'>
-        <div className='h-px self-stretch bg-divider-subtle'></div>
-        <FilterManagement
-          onFilterChange={handleFilterChange}
-        />
-      </div>
-      {isPluginListLoading ? <Loading type='app' /> : (filteredList?.length ?? 0) > 0 ? (
-        <div className='flex grow flex-wrap content-start items-start gap-2 self-stretch px-12'>
-          <div className='w-full'>
-            <List pluginList={filteredList || []} />
-          </div>
-        </div>
-      ) : (
-        <Empty />
-      )}
-      <PluginDetailPanel
-        detail={currentPluginDetail}
-        onUpdate={() => invalidateInstalledPluginList()}
-        onHide={handleHide}
-      />
-    </>
-  )
-}
-
-export default PluginsPanel
diff --git a/app/components/plugins/plugin-page/use-permission.ts b/app/components/plugins/plugin-page/use-permission.ts
deleted file mode 100644
index 93c96a8..0000000
--- a/app/components/plugins/plugin-page/use-permission.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { PermissionType } from '../types'
-import { useAppContext } from '@/context/app-context'
-import Toast from '../../base/toast'
-import { useTranslation } from 'react-i18next'
-import { useInvalidatePermissions, useMutationPermissions, usePermissions } from '@/service/use-plugins'
-import { useSelector as useAppContextSelector } from '@/context/app-context'
-import { useMemo } from 'react'
-
-const hasPermission = (permission: PermissionType | undefined, isAdmin: boolean) => {
-  if (!permission)
-    return false
-
-  if (permission === PermissionType.noOne)
-    return false
-
-  if (permission === PermissionType.everyone)
-    return true
-
-  return isAdmin
-}
-
-const usePermission = () => {
-  const { t } = useTranslation()
-  const { isCurrentWorkspaceManager, isCurrentWorkspaceOwner } = useAppContext()
-  const { data: permissions } = usePermissions()
-  const invalidatePermissions = useInvalidatePermissions()
-  const { mutate: updatePermission, isPending: isUpdatePending } = useMutationPermissions({
-    onSuccess: () => {
-      invalidatePermissions()
-      Toast.notify({
-        type: 'success',
-        message: t('common.api.actionSuccess'),
-      })
-    },
-  })
-  const isAdmin = isCurrentWorkspaceManager || isCurrentWorkspaceOwner
-
-  return {
-    canManagement: hasPermission(permissions?.install_permission, isAdmin),
-    canDebugger: hasPermission(permissions?.debug_permission, isAdmin),
-    canSetPermissions: isAdmin,
-    permissions,
-    setPermissions: updatePermission,
-    isUpdatePending,
-  }
-}
-
-export const useCanInstallPluginFromMarketplace = () => {
-  const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures)
-  const { canManagement } = usePermission()
-
-  const canInstallPluginFromMarketplace = useMemo(() => {
-    return enable_marketplace && canManagement
-  }, [enable_marketplace, canManagement])
-
-  return {
-    canInstallPluginFromMarketplace,
-  }
-}
-
-export default usePermission
diff --git a/app/components/plugins/plugin-page/use-uploader.ts b/app/components/plugins/plugin-page/use-uploader.ts
deleted file mode 100644
index fb3974c..0000000
--- a/app/components/plugins/plugin-page/use-uploader.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import { useEffect, useRef, useState } from 'react'
-
-type UploaderHookProps = {
-  onFileChange: (file: File | null) => void
-  containerRef: React.RefObject<HTMLDivElement>
-  enabled?: boolean
-}
-
-export const useUploader = ({ onFileChange, containerRef, enabled = true }: UploaderHookProps) => {
-  const [dragging, setDragging] = useState(false)
-  const fileUploader = useRef<HTMLInputElement>(null)
-
-  const handleDragEnter = (e: DragEvent) => {
-    e.preventDefault()
-    e.stopPropagation()
-    if (e.dataTransfer?.types.includes('Files'))
-      setDragging(true)
-  }
-
-  const handleDragOver = (e: DragEvent) => {
-    e.preventDefault()
-    e.stopPropagation()
-  }
-
-  const handleDragLeave = (e: DragEvent) => {
-    e.preventDefault()
-    e.stopPropagation()
-    if (e.relatedTarget === null || !containerRef.current?.contains(e.relatedTarget as Node))
-      setDragging(false)
-  }
-
-  const handleDrop = (e: DragEvent) => {
-    e.preventDefault()
-    e.stopPropagation()
-    setDragging(false)
-    if (!e.dataTransfer)
-      return
-    const files = [...e.dataTransfer.files]
-    if (files.length > 0)
-      onFileChange(files[0])
-  }
-
-  const fileChangeHandle = enabled
-    ? (e: React.ChangeEvent<HTMLInputElement>) => {
-      const file = e.target.files?.[0] || null
-      onFileChange(file)
-    }
-    : null
-
-  const removeFile = enabled
-    ? () => {
-      if (fileUploader.current)
-        fileUploader.current.value = ''
-
-      onFileChange(null)
-    }
-    : null
-
-  useEffect(() => {
-    if (!enabled)
-      return
-
-    const current = containerRef.current
-    if (current) {
-      current.addEventListener('dragenter', handleDragEnter)
-      current.addEventListener('dragover', handleDragOver)
-      current.addEventListener('dragleave', handleDragLeave)
-      current.addEventListener('drop', handleDrop)
-    }
-    return () => {
-      if (current) {
-        current.removeEventListener('dragenter', handleDragEnter)
-        current.removeEventListener('dragover', handleDragOver)
-        current.removeEventListener('dragleave', handleDragLeave)
-        current.removeEventListener('drop', handleDrop)
-      }
-    }
-  }, [containerRef, enabled])
-
-  return {
-    dragging: enabled ? dragging : false,
-    fileUploader,
-    fileChangeHandle,
-    removeFile,
-  }
-}
diff --git a/app/components/plugins/provider-card.tsx b/app/components/plugins/provider-card.tsx
deleted file mode 100644
index c8555ff..0000000
--- a/app/components/plugins/provider-card.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-'use client'
-import React from 'react'
-import type { FC } from 'react'
-import { useTheme } from 'next-themes'
-import { useTranslation } from 'react-i18next'
-import { RiArrowRightUpLine } from '@remixicon/react'
-import Badge from '../base/badge'
-import type { Plugin } from './types'
-import Description from './card/base/description'
-import Icon from './card/base/card-icon'
-import Title from './card/base/title'
-import DownloadCount from './card/base/download-count'
-import Button from '@/app/components/base/button'
-import InstallFromMarketplace from '@/app/components/plugins/install-plugin/install-from-marketplace'
-import cn from '@/utils/classnames'
-import { useBoolean } from 'ahooks'
-import { getPluginLinkInMarketplace } from '@/app/components/plugins/marketplace/utils'
-import { useI18N } from '@/context/i18n'
-import { useRenderI18nObject } from '@/hooks/use-i18n'
-
-type Props = {
-  className?: string
-  payload: Plugin
-}
-
-const ProviderCard: FC<Props> = ({
-  className,
-  payload,
-}) => {
-  const getValueFromI18nObject = useRenderI18nObject()
-  const { t } = useTranslation()
-  const { theme } = useTheme()
-  const [isShowInstallFromMarketplace, {
-    setTrue: showInstallFromMarketplace,
-    setFalse: hideInstallFromMarketplace,
-  }] = useBoolean(false)
-  const { org, label } = payload
-  const { locale } = useI18N()
-
-  return (
-    <div className={cn('group relative rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-on-panel-item-bg p-4 pb-3 shadow-xs hover:bg-components-panel-on-panel-item-bg', className)}>
-      {/* Header */}
-      <div className="flex">
-        <Icon src={payload.icon} />
-        <div className="ml-3 w-0 grow">
-          <div className="flex h-5 items-center">
-            <Title title={getValueFromI18nObject(label)} />
-            {/* <RiVerifiedBadgeLine className="shrink-0 ml-0.5 w-4 h-4 text-text-accent" /> */}
-          </div>
-          <div className='mb-1 flex h-4 items-center justify-between'>
-            <div className='flex items-center'>
-              <div className='system-xs-regular text-text-tertiary'>{org}</div>
-              <div className='system-xs-regular mx-2 text-text-quaternary'>路</div>
-              <DownloadCount downloadCount={payload.install_count || 0} />
-            </div>
-          </div>
-        </div>
-      </div>
-      <Description className='mt-3' text={getValueFromI18nObject(payload.brief)} descriptionLineRows={2}></Description>
-      <div className='mt-3 flex space-x-0.5'>
-        {payload.tags.map(tag => (
-          <Badge key={tag.name} text={tag.name} />
-        ))}
-      </div>
-      <div
-        className='absolute bottom-0 left-0 right-0 hidden items-center gap-2 rounded-xl bg-gradient-to-tr from-components-panel-on-panel-item-bg to-background-gradient-mask-transparent p-4 pt-8 group-hover:flex'
-      >
-        <Button
-          className='grow'
-          variant='primary'
-          onClick={showInstallFromMarketplace}
-        >
-          {t('plugin.detailPanel.operation.install')}
-        </Button>
-        <Button
-          className='grow'
-          variant='secondary'
-        >
-          <a href={`${getPluginLinkInMarketplace(payload)}?language=${locale}${theme ? `&theme=${theme}` : ''}`} target='_blank' className='flex items-center gap-0.5'>
-            {t('plugin.detailPanel.operation.detail')}
-            <RiArrowRightUpLine className='h-4 w-4' />
-          </a>
-        </Button>
-      </div>
-      {
-        isShowInstallFromMarketplace && (
-          <InstallFromMarketplace
-            manifest={payload}
-            uniqueIdentifier={payload.latest_package_identifier}
-            onClose={hideInstallFromMarketplace}
-            onSuccess={() => hideInstallFromMarketplace()}
-          />
-        )
-      }
-    </div>
-  )
-}
-
-export default ProviderCard
diff --git a/app/components/plugins/types.ts b/app/components/plugins/types.ts
deleted file mode 100644
index f552d7c..0000000
--- a/app/components/plugins/types.ts
+++ /dev/null
@@ -1,457 +0,0 @@
-import type { CredentialFormSchemaBase } from '../header/account-setting/model-provider-page/declarations'
-import type { ToolCredential } from '@/app/components/tools/types'
-import type { Locale } from '@/i18n'
-import type { AgentFeature } from '@/app/components/workflow/nodes/agent/types'
-export enum PluginType {
-  tool = 'tool',
-  model = 'model',
-  extension = 'extension',
-  agent = 'agent-strategy',
-}
-
-export enum PluginSource {
-  marketplace = 'marketplace',
-  github = 'github',
-  local = 'package',
-  debugging = 'remote',
-}
-
-export type PluginToolDeclaration = {
-  identity: {
-    author: string
-    name: string
-    description: Record<Locale, string>
-    icon: string
-    label: Record<Locale, string>
-    tags: string[]
-  }
-  credentials_schema: ToolCredential[] // TODO
-}
-
-export type PluginEndpointDeclaration = {
-  settings: ToolCredential[]
-  endpoints: EndpointItem[]
-}
-
-export type EndpointItem = {
-  path: string
-  method: string
-  hidden?: boolean
-}
-
-export type EndpointListItem = {
-  id: string
-  created_at: string
-  updated_at: string
-  settings: Record<string, any>
-  tenant_id: string
-  plugin_id: string
-  expired_at: string
-  declaration: PluginEndpointDeclaration
-  name: string
-  enabled: boolean
-  url: string
-  hook_id: string
-}
-
-export type PluginDeclarationMeta = {
-  version: string
-  minimum_dify_version?: string
-}
-
-// Plugin manifest
-export type PluginDeclaration = {
-  plugin_unique_identifier: string
-  version: string
-  author: string
-  icon: string
-  name: string
-  category: PluginType
-  label: Record<Locale, string>
-  description: Record<Locale, string>
-  created_at: string
-  resource: any // useless in frontend
-  plugins: any // useless in frontend
-  verified: boolean
-  endpoint: PluginEndpointDeclaration
-  tool: PluginToolDeclaration
-  model: any
-  tags: string[]
-  agent_strategy: any
-  meta: PluginDeclarationMeta
-}
-
-export type PluginManifestInMarket = {
-  plugin_unique_identifier: string
-  name: string
-  org: string
-  icon: string
-  label: Record<Locale, string>
-  category: PluginType
-  version: string // combine the other place to it
-  latest_version: string
-  brief: Record<Locale, string>
-  introduction: string
-  verified: boolean
-  install_count: number
-  badges: string[]
-}
-
-export type PluginDetail = {
-  id: string
-  created_at: string
-  updated_at: string
-  name: string
-  plugin_id: string
-  plugin_unique_identifier: string
-  declaration: PluginDeclaration
-  installation_id: string
-  tenant_id: string
-  endpoints_setups: number
-  endpoints_active: number
-  version: string
-  latest_version: string
-  latest_unique_identifier: string
-  source: PluginSource
-  meta?: MetaData
-}
-
-export type PluginInfoFromMarketPlace = {
-  category: PluginType
-  latest_package_identifier: string
-  latest_version: string
-}
-
-export type Plugin = {
-  type: 'plugin' | 'bundle' | 'model' | 'extension' | 'tool' | 'agent_strategy'
-  org: string
-  author?: string
-  name: string
-  plugin_id: string
-  version: string
-  latest_version: string
-  latest_package_identifier: string
-  icon: string
-  verified: boolean
-  label: Record<Locale, string>
-  brief: Record<Locale, string>
-  description: Record<Locale, string>
-  // Repo readme.md content
-  introduction: string
-  repository: string
-  category: PluginType
-  install_count: number
-  endpoint: {
-    settings: CredentialFormSchemaBase[]
-  }
-  tags: { name: string }[]
-  badges: string[]
-}
-
-export enum PermissionType {
-  everyone = 'everyone',
-  admin = 'admins',
-  noOne = 'noone',
-}
-
-export type Permissions = {
-  install_permission: PermissionType
-  debug_permission: PermissionType
-}
-
-export type UpdateFromMarketPlacePayload = {
-  category: PluginType
-  originalPackageInfo: {
-    id: string
-    payload: PluginDeclaration
-  },
-  targetPackageInfo: {
-    id: string
-    version: string
-  }
-}
-
-export type UpdateFromGitHubPayload = {
-  originalPackageInfo: {
-    id: string
-    repo: string
-    version: string
-    package: string
-    releases: GitHubRepoReleaseResponse[]
-  }
-}
-
-export type UpdatePluginPayload = {
-  type: PluginSource
-  category: PluginType
-  marketPlace?: UpdateFromMarketPlacePayload
-  github?: UpdateFromGitHubPayload
-}
-
-export type UpdatePluginModalType = UpdatePluginPayload & {
-  onCancel: () => void
-  onSave: () => void
-}
-
-export enum InstallStepFromGitHub {
-  setUrl = 'url',
-  selectPackage = 'selecting',
-  readyToInstall = 'readyToInstall',
-  uploadFailed = 'uploadFailed',
-  installed = 'installed',
-  installFailed = 'failed',
-}
-
-export type InstallState = {
-  step: InstallStepFromGitHub
-  repoUrl: string
-  selectedVersion: string
-  selectedPackage: string
-  releases: GitHubRepoReleaseResponse[]
-}
-
-export type GitHubUrlInfo = {
-  isValid: boolean
-  owner?: string
-  repo?: string
-}
-
-// endpoint
-export type EndpointOperationResponse = {
-  result: 'success' | 'error'
-}
-
-export type EndpointsResponse = {
-  endpoints: EndpointListItem[]
-  has_more: boolean
-  limit: number
-  total: number
-  page: number
-}
-export type UpdateEndpointRequest = {
-  endpoint_id: string
-  settings: Record<string, any>
-  name: string
-}
-
-export enum InstallStep {
-  uploading = 'uploading',
-  uploadFailed = 'uploadFailed',
-  readyToInstall = 'readyToInstall',
-  installing = 'installing',
-  installed = 'installed',
-  installFailed = 'failed',
-}
-
-export type GitHubAsset = {
-  id: number
-  name: string
-  browser_download_url: string
-}
-
-export type GitHubRepoReleaseResponse = {
-  tag_name: string
-  assets: GitHubAsset[]
-}
-
-export type InstallPackageResponse = {
-  plugin_unique_identifier: string
-  all_installed: boolean
-  task_id: string
-}
-
-export type InstallStatusResponse = {
-  success: boolean,
-  isFromMarketPlace?: boolean
-}
-
-export type updatePackageResponse = {
-  all_installed: boolean
-  task_id: string
-}
-
-export type uploadGitHubResponse = {
-  unique_identifier: string
-  manifest: PluginDeclaration
-}
-
-export type DebugInfo = {
-  key: string
-  host: string
-  port: number
-}
-
-export enum TaskStatus {
-  running = 'running',
-  success = 'success',
-  failed = 'failed',
-}
-
-export type PluginStatus = {
-  plugin_unique_identifier: string
-  plugin_id: string
-  status: TaskStatus
-  message: string
-  icon: string
-  labels: Record<Locale, string>
-  taskId: string
-}
-
-export type PluginTask = {
-  id: string
-  created_at: string
-  updated_at: string
-  status: string
-  total_plugins: number
-  completed_plugins: number
-  plugins: PluginStatus[]
-}
-
-export type TaskStatusResponse = {
-  task: PluginTask
-}
-
-export type PluginTasksResponse = {
-  tasks: PluginTask[]
-}
-
-export type MetaData = {
-  repo: string
-  version: string
-  package: string
-}
-
-export type InstalledPluginListResponse = {
-  plugins: PluginDetail[]
-}
-
-export type InstalledLatestVersionResponse = {
-  versions: {
-    [plugin_id: string]: {
-      unique_identifier: string
-      version: string
-    } | null
-  }
-}
-
-export type UninstallPluginResponse = {
-  success: boolean
-}
-
-export type PluginsFromMarketplaceResponse = {
-  plugins: Plugin[]
-  bundles?: Plugin[]
-  total: number
-}
-export type PluginsFromMarketplaceByInfoResponse = {
-  list: {
-    plugin: Plugin
-    version: {
-      plugin_name: string
-      plugin_org: string
-      unique_identifier: string
-    }
-  }[]
-}
-
-export type GitHubItemAndMarketPlaceDependency = {
-  type: 'github' | 'marketplace' | 'package'
-  value: {
-    repo?: string
-    version?: string // from app DSL
-    package?: string // from app DSL
-    release?: string // from local package. same to the version
-    packages?: string // from local package. same to the package
-    github_plugin_unique_identifier?: string
-    marketplace_plugin_unique_identifier?: string
-    plugin_unique_identifier?: string
-  }
-}
-
-export type PackageDependency = {
-  type: 'github' | 'marketplace' | 'package'
-  value: {
-    unique_identifier: string
-    manifest: PluginDeclaration
-  }
-}
-
-export type Dependency = GitHubItemAndMarketPlaceDependency | PackageDependency
-
-export type Version = {
-  plugin_org: string
-  plugin_name: string
-  version: string
-  file_name: string
-  checksum: string
-  created_at: string
-  unique_identifier: string
-}
-
-export type VersionListResponse = {
-  versions: Version[]
-}
-
-export type VersionInfo = {
-  installedId: string, // use to uninstall
-  installedVersion: string,
-  uniqueIdentifier: string
-}
-
-export type VersionProps = {
-  hasInstalled: boolean
-  installedVersion?: string
-  toInstallVersion: string
-}
-
-export type StrategyParamItem = {
-  name: string
-  label: Record<Locale, string>
-  help: Record<Locale, string>
-  placeholder: Record<Locale, string>
-  type: string
-  scope: string
-  required: boolean
-  default: any
-  options: any[]
-  template: {
-    enabled: boolean
-  },
-  auto_generate: {
-    type: string
-  }
-}
-
-export type StrategyDetail = {
-  identity: {
-    author: string
-    name: string
-    icon: string
-    label: Record<Locale, string>
-    provider: string
-  },
-  parameters: StrategyParamItem[]
-  description: Record<Locale, string>
-  output_schema: Record<string, any>
-  features: AgentFeature[]
-}
-
-export type StrategyDeclaration = {
-  identity: {
-    author: string
-    name: string
-    description: Record<Locale, string>
-    icon: string
-    label: Record<Locale, string>
-    tags: string[]
-  },
-  plugin_id: string
-  strategies: StrategyDetail[]
-}
-
-export type StrategyPluginDetail = {
-  provider: string
-  plugin_unique_identifier: string
-  plugin_id: string
-  declaration: StrategyDeclaration
-}
diff --git a/app/components/plugins/update-plugin/from-github.tsx b/app/components/plugins/update-plugin/from-github.tsx
deleted file mode 100644
index 9bc2f2a..0000000
--- a/app/components/plugins/update-plugin/from-github.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { UpdateFromGitHubPayload } from '../types'
-import InstallFromGitHub from '../install-plugin/install-from-github'
-
-type Props = {
-  payload: UpdateFromGitHubPayload
-  onSave: () => void
-  onCancel: () => void
-}
-
-const FromGitHub: FC<Props> = ({
-  payload,
-  onSave,
-  onCancel,
-}) => {
-  return (
-    <InstallFromGitHub
-      updatePayload={payload}
-      onClose={onCancel}
-      onSuccess={onSave}
-    />
-  )
-}
-export default React.memo(FromGitHub)
diff --git a/app/components/plugins/update-plugin/from-market-place.tsx b/app/components/plugins/update-plugin/from-market-place.tsx
deleted file mode 100644
index 98994d9..0000000
--- a/app/components/plugins/update-plugin/from-market-place.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useEffect, useMemo, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import Card from '@/app/components/plugins/card'
-import Modal from '@/app/components/base/modal'
-import Button from '@/app/components/base/button'
-import Badge, { BadgeState } from '@/app/components/base/badge/index'
-import { TaskStatus, type UpdateFromMarketPlacePayload } from '../types'
-import { pluginManifestToCardPluginProps } from '@/app/components/plugins/install-plugin/utils'
-import useGetIcon from '../install-plugin/base/use-get-icon'
-import { updateFromMarketPlace } from '@/service/plugins'
-import checkTaskStatus from '@/app/components/plugins/install-plugin/base/check-task-status'
-import { usePluginTaskList } from '@/service/use-plugins'
-import Toast from '../../base/toast'
-
-const i18nPrefix = 'plugin.upgrade'
-
-type Props = {
-  payload: UpdateFromMarketPlacePayload
-  onSave: () => void
-  onCancel: () => void
-}
-
-enum UploadStep {
-  notStarted = 'notStarted',
-  upgrading = 'upgrading',
-  installed = 'installed',
-}
-
-const UpdatePluginModal: FC<Props> = ({
-  payload,
-  onSave,
-  onCancel,
-}) => {
-  const {
-    originalPackageInfo,
-    targetPackageInfo,
-  } = payload
-  const { t } = useTranslation()
-  const { getIconUrl } = useGetIcon()
-  const [icon, setIcon] = useState<string>(originalPackageInfo.payload.icon)
-  useEffect(() => {
-    (async () => {
-      const icon = await getIconUrl(originalPackageInfo.payload.icon)
-      setIcon(icon)
-    })()
-  }, [originalPackageInfo, getIconUrl])
-  const {
-    check,
-    stop,
-  } = checkTaskStatus()
-  const handleCancel = () => {
-    stop()
-    onCancel()
-  }
-
-  const [uploadStep, setUploadStep] = useState<UploadStep>(UploadStep.notStarted)
-  const { handleRefetch } = usePluginTaskList(payload.category)
-
-  const configBtnText = useMemo(() => {
-    return ({
-      [UploadStep.notStarted]: t(`${i18nPrefix}.upgrade`),
-      [UploadStep.upgrading]: t(`${i18nPrefix}.upgrading`),
-      [UploadStep.installed]: t(`${i18nPrefix}.close`),
-    })[uploadStep]
-  }, [t, uploadStep])
-
-  const handleConfirm = useCallback(async () => {
-    if (uploadStep === UploadStep.notStarted) {
-      setUploadStep(UploadStep.upgrading)
-      try {
-        const {
-          all_installed: isInstalled,
-          task_id: taskId,
-        } = await updateFromMarketPlace({
-          original_plugin_unique_identifier: originalPackageInfo.id,
-          new_plugin_unique_identifier: targetPackageInfo.id,
-        })
-
-        if (isInstalled) {
-          onSave()
-          return
-        }
-        handleRefetch()
-        const { status, error } = await check({
-          taskId,
-          pluginUniqueIdentifier: targetPackageInfo.id,
-        })
-        if (status === TaskStatus.failed) {
-          Toast.notify({ type: 'error', message: error! })
-          return
-        }
-        onSave()
-      }
-      // eslint-disable-next-line unused-imports/no-unused-vars
-      catch (e) {
-        setUploadStep(UploadStep.notStarted)
-      }
-      return
-    }
-    if (uploadStep === UploadStep.installed)
-      onSave()
-  }, [onSave, uploadStep, check, originalPackageInfo.id, handleRefetch, targetPackageInfo.id])
-
-  return (
-    <Modal
-      isShow={true}
-      onClose={onCancel}
-      className='min-w-[560px]'
-      closable
-      title={t(`${i18nPrefix}.${uploadStep === UploadStep.installed ? 'successfulTitle' : 'title'}`)}
-    >
-      <div className='system-md-regular mb-2 mt-3 text-text-secondary'>
-        {t(`${i18nPrefix}.description`)}
-      </div>
-      <div className='flex flex-wrap content-start items-start gap-1 self-stretch rounded-2xl bg-background-section-burn p-2'>
-        <Card
-          installed={uploadStep === UploadStep.installed}
-          payload={pluginManifestToCardPluginProps({
-            ...originalPackageInfo.payload,
-            icon: icon!,
-          })}
-          className='w-full'
-          titleLeft={
-            <>
-              <Badge className='mx-1' size="s" state={BadgeState.Warning}>
-                {`${originalPackageInfo.payload.version} -> ${targetPackageInfo.version}`}
-              </Badge>
-            </>
-          }
-        />
-      </div>
-      <div className='flex items-center justify-end gap-2 self-stretch pt-5'>
-        {uploadStep === UploadStep.notStarted && (
-          <Button
-            onClick={handleCancel}
-          >
-            {t('common.operation.cancel')}
-          </Button>
-        )}
-        <Button
-          variant='primary'
-          loading={uploadStep === UploadStep.upgrading}
-          onClick={handleConfirm}
-          disabled={uploadStep === UploadStep.upgrading}
-        >
-          {configBtnText}
-        </Button>
-      </div>
-    </Modal>
-  )
-}
-export default React.memo(UpdatePluginModal)
diff --git a/app/components/plugins/update-plugin/index.tsx b/app/components/plugins/update-plugin/index.tsx
deleted file mode 100644
index f9b49a6..0000000
--- a/app/components/plugins/update-plugin/index.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { UpdatePluginModalType } from '../types'
-import { PluginSource } from '../types'
-import UpdateFromGitHub from './from-github'
-import UpdateFromMarketplace from './from-market-place'
-
-const UpdatePlugin: FC<UpdatePluginModalType> = ({
-  type,
-  marketPlace,
-  github,
-  onCancel,
-  onSave,
-}) => {
-  if (type === PluginSource.github) {
-    return (
-      <UpdateFromGitHub
-        payload={github!}
-        onSave={onSave}
-        onCancel={onCancel}
-      />
-    )
-  }
-  return (
-    <UpdateFromMarketplace
-      payload={marketPlace!}
-      onSave={onSave}
-      onCancel={onCancel}
-    />
-  )
-}
-export default React.memo(UpdatePlugin)
diff --git a/app/components/plugins/update-plugin/plugin-version-picker.tsx b/app/components/plugins/update-plugin/plugin-version-picker.tsx
deleted file mode 100644
index 424f76d..0000000
--- a/app/components/plugins/update-plugin/plugin-version-picker.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Badge from '@/app/components/base/badge'
-import type {
-  OffsetOptions,
-  Placement,
-} from '@floating-ui/react'
-import { useVersionListOfPlugin } from '@/service/use-plugins'
-import useTimestamp from '@/hooks/use-timestamp'
-import cn from '@/utils/classnames'
-
-type Props = {
-  disabled?: boolean
-  isShow: boolean
-  onShowChange: (isShow: boolean) => void
-  pluginID: string
-  currentVersion: string
-  trigger: React.ReactNode
-  placement?: Placement
-  offset?: OffsetOptions
-  onSelect: ({
-    version,
-    unique_identifier,
-  }: {
-    version: string
-    unique_identifier: string
-  }) => void
-}
-
-const PluginVersionPicker: FC<Props> = ({
-  disabled = false,
-  isShow,
-  onShowChange,
-  pluginID,
-  currentVersion,
-  trigger,
-  placement = 'bottom-start',
-  offset = {
-    mainAxis: 4,
-    crossAxis: -16,
-  },
-  onSelect,
-}) => {
-  const { t } = useTranslation()
-  const format = t('appLog.dateTimeFormat').split(' ')[0]
-  const { formatDate } = useTimestamp()
-
-  const handleTriggerClick = () => {
-    if (disabled) return
-    onShowChange(true)
-  }
-
-  const { data: res } = useVersionListOfPlugin(pluginID)
-
-  const handleSelect = useCallback(({ version, unique_identifier }: {
-    version: string
-    unique_identifier: string
-  }) => {
-    if (currentVersion === version)
-      return
-    onSelect({ version, unique_identifier })
-    onShowChange(false)
-  }, [currentVersion, onSelect, onShowChange])
-
-  return (
-    <PortalToFollowElem
-      placement={placement}
-      offset={offset}
-      open={isShow}
-      onOpenChange={onShowChange}
-    >
-      <PortalToFollowElemTrigger
-        className={cn('inline-flex cursor-pointer items-center', disabled && 'cursor-default')}
-        onClick={handleTriggerClick}
-      >
-        {trigger}
-      </PortalToFollowElemTrigger>
-
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className="relative w-[209px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg">
-          <div className='system-xs-medium-uppercase px-3 pb-0.5 pt-1 text-text-tertiary'>
-            {t('plugin.detailPanel.switchVersion')}
-          </div>
-          <div className='relative'>
-            {res?.data.versions.map(version => (
-              <div
-                key={version.unique_identifier}
-                className={cn(
-                  'flex h-7 cursor-pointer items-center gap-1 rounded-lg px-3 py-1 hover:bg-state-base-hover',
-                  currentVersion === version.version && 'cursor-default opacity-30 hover:bg-transparent',
-                )}
-                onClick={() => handleSelect({
-                  version: version.version,
-                  unique_identifier: version.unique_identifier,
-                })}
-              >
-                <div className='flex grow items-center'>
-                  <div className='system-sm-medium text-text-secondary'>{version.version}</div>
-                  {currentVersion === version.version && <Badge className='ml-1' text='CURRENT'/>}
-                </div>
-                <div className='system-xs-regular shrink-0 text-text-tertiary'>{formatDate(version.created_at, format)}</div>
-              </div>
-            ))}
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default React.memo(PluginVersionPicker)
diff --git a/app/components/plugins/utils.ts b/app/components/plugins/utils.ts
deleted file mode 100644
index 1b84e3e..0000000
--- a/app/components/plugins/utils.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { LanguagesSupported } from '@/i18n/language'
-
-import {
-  categoryKeys,
-  tagKeys,
-} from './constants'
-
-export const getValidTagKeys = (tags: string[]) => {
-  return tags.filter(tag => tagKeys.includes(tag))
-}
-
-export const getValidCategoryKeys = (category?: string) => {
-  return categoryKeys.find(key => key === category)
-}
-
-export const getDocsUrl = (locale: string, path: string) => {
-  let localePath = 'en'
-
-  if (locale === LanguagesSupported[1])
-    localePath = 'zh-hans'
-
-  else if (locale === LanguagesSupported[7])
-    localePath = 'ja-jp'
-
-  return `https://docs.dify.ai/${localePath}${path}`
-}
diff --git a/app/components/share/text-generation/info-modal.tsx b/app/components/share/text-generation/info-modal.tsx
deleted file mode 100644
index 9ed584b..0000000
--- a/app/components/share/text-generation/info-modal.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import React from 'react'
-import Modal from '@/app/components/base/modal'
-import AppIcon from '@/app/components/base/app-icon'
-import type { SiteInfo } from '@/models/share'
-import { appDefaultIconBackground } from '@/config'
-import cn from 'classnames'
-
-type Props = {
-  data?: SiteInfo
-  isShow: boolean
-  onClose: () => void
-}
-
-const InfoModal = ({
-  isShow,
-  onClose,
-  data,
-}: Props) => {
-  return (
-    <Modal
-      isShow={isShow}
-      onClose={onClose}
-      className='min-w-[400px] max-w-[400px] !p-0'
-      closable
-    >
-      <div className={cn('flex flex-col items-center gap-4 px-4 pb-8 pt-10')}>
-        <AppIcon
-          size='xxl'
-          iconType={data?.icon_type}
-          icon={data?.icon}
-          background={data?.icon_background || appDefaultIconBackground}
-          imageUrl={data?.icon_url}
-        />
-        <div className='system-xl-semibold text-text-secondary'>{data?.title}</div>
-        <div className='system-xs-regular text-text-tertiary'>
-          {/* copyright */}
-          {data?.copyright && (
-            <div>漏 {(new Date()).getFullYear()} {data?.copyright}</div>
-          )}
-          {data?.custom_disclaimer && (
-            <div className='mt-2'>{data.custom_disclaimer}</div>
-          )}
-        </div>
-      </div>
-    </Modal>
-  )
-}
-
-export default InfoModal
diff --git a/app/components/share/text-generation/menu-dropdown.tsx b/app/components/share/text-generation/menu-dropdown.tsx
deleted file mode 100644
index d038b94..0000000
--- a/app/components/share/text-generation/menu-dropdown.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useRef, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import type { Placement } from '@floating-ui/react'
-import {
-  RiEqualizer2Line,
-} from '@remixicon/react'
-import ActionButton from '@/app/components/base/action-button'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Divider from '@/app/components/base/divider'
-import ThemeSwitcher from '@/app/components/base/theme-switcher'
-import InfoModal from './info-modal'
-import type { SiteInfo } from '@/models/share'
-import cn from '@/utils/classnames'
-
-type Props = {
-  data?: SiteInfo
-  placement?: Placement
-}
-
-const MenuDropdown: FC<Props> = ({
-  data,
-  placement,
-}) => {
-  const { t } = useTranslation()
-  const [open, doSetOpen] = useState(false)
-  const openRef = useRef(open)
-  const setOpen = useCallback((v: boolean) => {
-    doSetOpen(v)
-    openRef.current = v
-  }, [doSetOpen])
-
-  const handleTrigger = useCallback(() => {
-    setOpen(!openRef.current)
-  }, [setOpen])
-
-  const [show, setShow] = useState(false)
-
-  return (
-    <>
-      <PortalToFollowElem
-        open={open}
-        onOpenChange={setOpen}
-        placement={placement || 'bottom-end'}
-        offset={{
-          mainAxis: 4,
-          crossAxis: -4,
-        }}
-      >
-        <PortalToFollowElemTrigger onClick={handleTrigger}>
-          <div>
-            <ActionButton size='l' className={cn(open && 'bg-state-base-hover')}>
-              <RiEqualizer2Line className='h-[18px] w-[18px]' />
-            </ActionButton>
-          </div>
-        </PortalToFollowElemTrigger>
-        <PortalToFollowElemContent className='z-50'>
-          <div className='w-[224px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg backdrop-blur-sm'>
-            <div className='p-1'>
-              <div className={cn('system-md-regular flex cursor-pointer items-center rounded-lg py-1.5 pl-3 pr-2 text-text-secondary')}>
-                <div className='grow'>{t('common.theme.theme')}</div>
-                <ThemeSwitcher/>
-              </div>
-            </div>
-            <Divider type='horizontal' className='my-0' />
-            <div className='p-1'>
-              {data?.privacy_policy && (
-                <a href={data.privacy_policy} target='_blank' className='system-md-regular flex cursor-pointer items-center rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'>
-                  <span className='grow'>{t('share.chat.privacyPolicyMiddle')}</span>
-                </a>
-              )}
-              <div
-                onClick={() => {
-                  handleTrigger()
-                  setShow(true)
-                }}
-                className='system-md-regular cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'
-              >{t('common.userProfile.about')}</div>
-            </div>
-          </div>
-        </PortalToFollowElemContent>
-      </PortalToFollowElem>
-      {show && (
-        <InfoModal
-          isShow={show}
-          onClose={() => {
-            setShow(false)
-          }}
-          data={data}
-        />
-      )}
-    </>
-  )
-}
-export default React.memo(MenuDropdown)
diff --git a/app/components/tools/edit-custom-collection-modal/modal.tsx b/app/components/tools/edit-custom-collection-modal/modal.tsx
deleted file mode 100644
index 190c727..0000000
--- a/app/components/tools/edit-custom-collection-modal/modal.tsx
+++ /dev/null
@@ -1,360 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useEffect, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useDebounce, useGetState } from 'ahooks'
-import produce from 'immer'
-import { LinkExternal02, Settings01 } from '../../base/icons/src/vender/line/general'
-import type { Credential, CustomCollectionBackend, CustomParamSchema, Emoji } from '../types'
-import { AuthHeaderPrefix, AuthType } from '../types'
-import GetSchema from './get-schema'
-import ConfigCredentials from './config-credentials'
-import TestApi from './test-api'
-import cn from '@/utils/classnames'
-import Input from '@/app/components/base/input'
-import Textarea from '@/app/components/base/textarea'
-import EmojiPicker from '@/app/components/base/emoji-picker'
-import AppIcon from '@/app/components/base/app-icon'
-import { parseParamsSchema } from '@/service/tools'
-import LabelSelector from '@/app/components/tools/labels/selector'
-import Toast from '@/app/components/base/toast'
-import Modal from '../../base/modal'
-import Button from '@/app/components/base/button'
-
-type Props = {
-  positionLeft?: boolean
-  payload: any
-  onHide: () => void
-  onAdd?: (payload: CustomCollectionBackend) => void
-  onRemove?: () => void
-  onEdit?: (payload: CustomCollectionBackend) => void
-}
-// Add and Edit
-const EditCustomCollectionModal: FC<Props> = ({
-  payload,
-  onHide,
-  onAdd,
-  onEdit,
-  onRemove,
-}) => {
-  const { t } = useTranslation()
-  const isAdd = !payload
-  const isEdit = !!payload
-
-  const [editFirst, setEditFirst] = useState(!isAdd)
-  const [paramsSchemas, setParamsSchemas] = useState<CustomParamSchema[]>(payload?.tools || [])
-  const [customCollection, setCustomCollection, getCustomCollection] = useGetState<CustomCollectionBackend>(isAdd
-    ? {
-      provider: '',
-      credentials: {
-        auth_type: AuthType.none,
-        api_key_header: 'Authorization',
-        api_key_header_prefix: AuthHeaderPrefix.basic,
-      },
-      icon: {
-        content: '馃暤锔�',
-        background: '#FEF7C3',
-      },
-      schema_type: '',
-      schema: '',
-    }
-    : payload)
-
-  const originalProvider = isEdit ? payload.provider : ''
-
-  const [showEmojiPicker, setShowEmojiPicker] = useState(false)
-  const emoji = customCollection.icon
-  const setEmoji = (emoji: Emoji) => {
-    const newCollection = produce(customCollection, (draft) => {
-      draft.icon = emoji
-    })
-    setCustomCollection(newCollection)
-  }
-  const schema = customCollection.schema
-  const debouncedSchema = useDebounce(schema, { wait: 500 })
-  const setSchema = (schema: any) => {
-    const newCollection = produce(customCollection, (draft) => {
-      draft.schema = schema
-    })
-    setCustomCollection(newCollection)
-  }
-
-  useEffect(() => {
-    if (!debouncedSchema)
-      return
-    if (isEdit && editFirst) {
-      setEditFirst(false)
-      return
-    }
-    (async () => {
-      try {
-        const { parameters_schema, schema_type } = await parseParamsSchema(debouncedSchema)
-        const customCollection = getCustomCollection()
-        const newCollection = produce(customCollection, (draft) => {
-          draft.schema_type = schema_type
-        })
-        setCustomCollection(newCollection)
-        setParamsSchemas(parameters_schema)
-      }
-      catch {
-        const customCollection = getCustomCollection()
-        const newCollection = produce(customCollection, (draft) => {
-          draft.schema_type = ''
-        })
-        setCustomCollection(newCollection)
-        setParamsSchemas([])
-      }
-    })()
-  }, [debouncedSchema])
-
-  const [credentialsModalShow, setCredentialsModalShow] = useState(false)
-  const credential = customCollection.credentials
-  const setCredential = (credential: Credential) => {
-    const newCollection = produce(customCollection, (draft) => {
-      draft.credentials = credential
-    })
-    setCustomCollection(newCollection)
-  }
-
-  const [currTool, setCurrTool] = useState<CustomParamSchema | null>(null)
-  const [isShowTestApi, setIsShowTestApi] = useState(false)
-
-  const [labels, setLabels] = useState<string[]>(payload?.labels || [])
-  const handleLabelSelect = (value: string[]) => {
-    setLabels(value)
-  }
-
-  const handleSave = () => {
-    // const postData = clone(customCollection)
-    const postData = produce(customCollection, (draft) => {
-      delete draft.tools
-
-      if (draft.credentials.auth_type === AuthType.none) {
-        delete draft.credentials.api_key_header
-        delete draft.credentials.api_key_header_prefix
-        delete draft.credentials.api_key_value
-      }
-
-      draft.labels = labels
-    })
-
-    let errorMessage = ''
-    if (!postData.provider)
-      errorMessage = t('common.errorMsg.fieldRequired', { field: t('tools.createTool.name') })
-
-    if (!postData.schema)
-      errorMessage = t('common.errorMsg.fieldRequired', { field: t('tools.createTool.schema') })
-
-    if (errorMessage) {
-      Toast.notify({
-        type: 'error',
-        message: errorMessage,
-      })
-      return
-    }
-
-    if (isAdd) {
-      onAdd?.(postData)
-      return
-    }
-
-    onEdit?.({
-      ...postData,
-      original_provider: originalProvider,
-    })
-  }
-
-  const getPath = (url: string) => {
-    if (!url)
-      return ''
-
-    try {
-      const path = decodeURI(new URL(url).pathname)
-      return path || ''
-    }
-    catch {
-      return url
-    }
-  }
-
-  return (
-    <>
-      <Modal
-        isShow
-        onClose={onHide}
-        closable
-        className='!h-[calc(100vh-16px)] !max-w-[630px] !p-0'
-      >
-        <div className='flex h-full flex-col'>
-          <div className='ml-6 mt-6 text-base font-semibold text-text-primary'>
-            {t('tools.createTool.title')}
-          </div>
-          <div className='h-0 grow space-y-4 overflow-y-auto px-6 py-3'>
-            <div>
-              <div className='system-sm-medium py-2 text-text-primary'>{t('tools.createTool.name')} <span className='ml-1 text-red-500'>*</span></div>
-              <div className='flex items-center justify-between gap-3'>
-                <AppIcon size='large' onClick={() => { setShowEmojiPicker(true) }} className='cursor-pointer' icon={emoji.content} background={emoji.background} />
-                <Input
-                  className='h-10 grow' placeholder={t('tools.createTool.toolNamePlaceHolder')!}
-                  value={customCollection.provider}
-                  onChange={(e) => {
-                    const newCollection = produce(customCollection, (draft) => {
-                      draft.provider = e.target.value
-                    })
-                    setCustomCollection(newCollection)
-                  }}
-                />
-              </div>
-            </div>
-
-            {/* Schema */}
-            <div className='select-none'>
-              <div className='flex items-center justify-between'>
-                <div className='flex items-center'>
-                  <div className='system-sm-medium py-2 text-text-primary'>{t('tools.createTool.schema')}<span className='ml-1 text-red-500'>*</span></div>
-                  <div className='mx-2 h-3 w-px bg-divider-regular'></div>
-                  <a
-                    href="https://swagger.io/specification/"
-                    target='_blank' rel='noopener noreferrer'
-                    className='flex h-[18px] items-center space-x-1  text-text-accent'
-                  >
-                    <div className='text-xs font-normal'>{t('tools.createTool.viewSchemaSpec')}</div>
-                    <LinkExternal02 className='h-3 w-3' />
-                  </a>
-                </div>
-                <GetSchema onChange={setSchema} />
-
-              </div>
-              <Textarea
-                className='h-[240px] resize-none'
-                value={schema}
-                onChange={e => setSchema(e.target.value)}
-                placeholder={t('tools.createTool.schemaPlaceHolder')!}
-              />
-            </div>
-
-            {/* Available Tools  */}
-            <div>
-              <div className='system-sm-medium py-2 text-text-primary'>{t('tools.createTool.availableTools.title')}</div>
-              <div className='w-full overflow-x-auto rounded-lg border border-divider-regular'>
-                <table className='system-xs-regular w-full text-text-secondary'>
-                  <thead className='uppercase text-text-tertiary'>
-                    <tr className={cn(paramsSchemas.length > 0 && 'border-b', 'border-divider-regular')}>
-                      <th className="p-2 pl-3 font-medium">{t('tools.createTool.availableTools.name')}</th>
-                      <th className="w-[236px] p-2 pl-3 font-medium">{t('tools.createTool.availableTools.description')}</th>
-                      <th className="p-2 pl-3 font-medium">{t('tools.createTool.availableTools.method')}</th>
-                      <th className="p-2 pl-3 font-medium">{t('tools.createTool.availableTools.path')}</th>
-                      <th className="w-[54px] p-2 pl-3 font-medium">{t('tools.createTool.availableTools.action')}</th>
-                    </tr>
-                  </thead>
-                  <tbody>
-                    {paramsSchemas.map((item, index) => (
-                      <tr key={index} className='border-b border-divider-regular last:border-0'>
-                        <td className="p-2 pl-3">{item.operation_id}</td>
-                        <td className="w-[236px] p-2 pl-3">{item.summary}</td>
-                        <td className="p-2 pl-3">{item.method}</td>
-                        <td className="p-2 pl-3">{getPath(item.server_url)}</td>
-                        <td className="w-[62px] p-2 pl-3">
-                          <Button
-                            size='small'
-                            onClick={() => {
-                              setCurrTool(item)
-                              setIsShowTestApi(true)
-                            }}
-                          >
-                            {t('tools.createTool.availableTools.test')}
-                          </Button>
-                        </td>
-                      </tr>
-                    ))}
-                  </tbody>
-                </table>
-              </div>
-            </div>
-
-            {/* Authorization method */}
-            <div>
-              <div className='system-sm-medium py-2 text-text-primary'>{t('tools.createTool.authMethod.title')}</div>
-              <div className='flex h-9 cursor-pointer items-center justify-between rounded-lg bg-components-input-bg-normal px-2.5' onClick={() => setCredentialsModalShow(true)}>
-                <div className='system-xs-regular text-text-primary'>{t(`tools.createTool.authMethod.types.${credential.auth_type}`)}</div>
-                <Settings01 className='h-4 w-4 text-text-secondary' />
-              </div>
-            </div>
-
-            {/* Labels */}
-            <div>
-              <div className='system-sm-medium py-2 text-text-primary'>{t('tools.createTool.toolInput.label')}</div>
-              <LabelSelector value={labels} onChange={handleLabelSelect} />
-            </div>
-
-            {/* Privacy Policy */}
-            <div>
-              <div className='system-sm-medium py-2 text-text-primary'>{t('tools.createTool.privacyPolicy')}</div>
-              <Input
-                value={customCollection.privacy_policy}
-                onChange={(e) => {
-                  const newCollection = produce(customCollection, (draft) => {
-                    draft.privacy_policy = e.target.value
-                  })
-                  setCustomCollection(newCollection)
-                }}
-                className='h-10 grow' placeholder={t('tools.createTool.privacyPolicyPlaceholder') || ''} />
-            </div>
-
-            <div>
-              <div className='system-sm-medium py-2 text-text-primary'>{t('tools.createTool.customDisclaimer')}</div>
-              <Input
-                value={customCollection.custom_disclaimer}
-                onChange={(e) => {
-                  const newCollection = produce(customCollection, (draft) => {
-                    draft.custom_disclaimer = e.target.value
-                  })
-                  setCustomCollection(newCollection)
-                }}
-                className='h-10 grow' placeholder={t('tools.createTool.customDisclaimerPlaceholder') || ''} />
-            </div>
-
-          </div>
-          <div className={cn(isEdit ? 'justify-between' : 'justify-end', 'mt-2 flex shrink-0 rounded-b-[10px] border-t border-divider-regular bg-background-section-burn px-6 py-4')} >
-            {
-              isEdit && (
-                <Button variant='warning' onClick={onRemove}>{t('common.operation.delete')}</Button>
-              )
-            }
-            <div className='flex space-x-2 '>
-              <Button onClick={onHide}>{t('common.operation.cancel')}</Button>
-              <Button variant='primary' onClick={handleSave}>{t('common.operation.save')}</Button>
-            </div>
-          </div>
-          {showEmojiPicker && <EmojiPicker
-            onSelect={(icon, icon_background) => {
-              setEmoji({ content: icon, background: icon_background })
-              setShowEmojiPicker(false)
-            }}
-            onClose={() => {
-              setShowEmojiPicker(false)
-            }}
-          />}
-          {credentialsModalShow && (
-            <ConfigCredentials
-              positionCenter={isAdd}
-              credential={credential}
-              onChange={setCredential}
-              onHide={() => setCredentialsModalShow(false)}
-            />)
-          }
-          {isShowTestApi && (
-            <TestApi
-              positionCenter={isAdd}
-              tool={currTool as CustomParamSchema}
-              customCollection={customCollection}
-              onHide={() => setIsShowTestApi(false)}
-            />
-          )}
-        </div>
-      </Modal>
-    </>
-
-  )
-}
-export default React.memo(EditCustomCollectionModal)
diff --git a/app/components/tools/marketplace/hooks.ts b/app/components/tools/marketplace/hooks.ts
deleted file mode 100644
index 0790d52..0000000
--- a/app/components/tools/marketplace/hooks.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
-  useCallback,
-  useEffect,
-  useMemo,
-  useRef,
-  useState,
-} from 'react'
-import {
-  useMarketplaceCollectionsAndPlugins,
-  useMarketplacePlugins,
-} from '@/app/components/plugins/marketplace/hooks'
-import { PluginType } from '@/app/components/plugins/types'
-import { getMarketplaceListCondition } from '@/app/components/plugins/marketplace/utils'
-import { useAllToolProviders } from '@/service/use-tools'
-
-export const useMarketplace = (searchPluginText: string, filterPluginTags: string[]) => {
-  const { data: toolProvidersData, isSuccess } = useAllToolProviders()
-  const exclude = useMemo(() => {
-    if (isSuccess)
-      return toolProvidersData?.filter(toolProvider => !!toolProvider.plugin_id).map(toolProvider => toolProvider.plugin_id!)
-  }, [isSuccess, toolProvidersData])
-  const {
-    isLoading,
-    marketplaceCollections,
-    marketplaceCollectionPluginsMap,
-    queryMarketplaceCollectionsAndPlugins,
-  } = useMarketplaceCollectionsAndPlugins()
-  const {
-    plugins,
-    resetPlugins,
-    queryPlugins,
-    queryPluginsWithDebounced,
-    isLoading: isPluginsLoading,
-    total: pluginsTotal,
-  } = useMarketplacePlugins()
-  const [page, setPage] = useState(1)
-  const pageRef = useRef(page)
-  const searchPluginTextRef = useRef(searchPluginText)
-  const filterPluginTagsRef = useRef(filterPluginTags)
-
-  useEffect(() => {
-    searchPluginTextRef.current = searchPluginText
-    filterPluginTagsRef.current = filterPluginTags
-  }, [searchPluginText, filterPluginTags])
-  useEffect(() => {
-    if ((searchPluginText || filterPluginTags.length) && isSuccess) {
-      setPage(1)
-      pageRef.current = 1
-
-      if (searchPluginText) {
-        queryPluginsWithDebounced({
-          category: PluginType.tool,
-          query: searchPluginText,
-          tags: filterPluginTags,
-          exclude,
-          type: 'plugin',
-          page: pageRef.current,
-        })
-        return
-      }
-      queryPlugins({
-        category: PluginType.tool,
-        query: searchPluginText,
-        tags: filterPluginTags,
-        exclude,
-        type: 'plugin',
-        page: pageRef.current,
-      })
-    }
-    else {
-      if (isSuccess) {
-        queryMarketplaceCollectionsAndPlugins({
-          category: PluginType.tool,
-          condition: getMarketplaceListCondition(PluginType.tool),
-          exclude,
-          type: 'plugin',
-        })
-        resetPlugins()
-      }
-    }
-  }, [searchPluginText, filterPluginTags, queryPlugins, queryMarketplaceCollectionsAndPlugins, queryPluginsWithDebounced, resetPlugins, exclude, isSuccess])
-
-  const handleScroll = useCallback((e: Event) => {
-    const target = e.target as HTMLDivElement
-    const {
-      scrollTop,
-      scrollHeight,
-      clientHeight,
-    } = target
-    if (scrollTop + clientHeight >= scrollHeight - 5 && scrollTop > 0) {
-      const searchPluginText = searchPluginTextRef.current
-      const filterPluginTags = filterPluginTagsRef.current
-      if (pluginsTotal && plugins && pluginsTotal > plugins.length && (!!searchPluginText || !!filterPluginTags.length)) {
-        setPage(pageRef.current + 1)
-        pageRef.current++
-
-        queryPlugins({
-          category: PluginType.tool,
-          query: searchPluginText,
-          tags: filterPluginTags,
-          exclude,
-          type: 'plugin',
-          page: pageRef.current,
-        })
-      }
-    }
-  }, [exclude, plugins, pluginsTotal, queryPlugins])
-
-  return {
-    isLoading: isLoading || isPluginsLoading,
-    marketplaceCollections,
-    marketplaceCollectionPluginsMap,
-    plugins,
-    handleScroll,
-    page,
-  }
-}
diff --git a/app/components/tools/marketplace/index.tsx b/app/components/tools/marketplace/index.tsx
deleted file mode 100644
index 8c805e1..0000000
--- a/app/components/tools/marketplace/index.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-import {
-  useEffect,
-  useRef,
-} from 'react'
-import { useTheme } from 'next-themes'
-import {
-  RiArrowRightUpLine,
-  RiArrowUpDoubleLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { useMarketplace } from './hooks'
-import List from '@/app/components/plugins/marketplace/list'
-import Loading from '@/app/components/base/loading'
-import { getLocaleOnClient } from '@/i18n'
-import { MARKETPLACE_URL_PREFIX } from '@/config'
-
-type MarketplaceProps = {
-  searchPluginText: string
-  filterPluginTags: string[]
-  onMarketplaceScroll: () => void
-}
-const Marketplace = ({
-  searchPluginText,
-  filterPluginTags,
-  onMarketplaceScroll,
-}: MarketplaceProps) => {
-  const locale = getLocaleOnClient()
-  const { t } = useTranslation()
-  const { theme } = useTheme()
-  const {
-    isLoading,
-    marketplaceCollections,
-    marketplaceCollectionPluginsMap,
-    plugins,
-    handleScroll,
-    page,
-  } = useMarketplace(searchPluginText, filterPluginTags)
-  const containerRef = useRef<HTMLDivElement>(null)
-
-  useEffect(() => {
-    const container = containerRef.current
-    if (container)
-      container.addEventListener('scroll', handleScroll)
-
-    return () => {
-      if (container)
-        container.removeEventListener('scroll', handleScroll)
-    }
-  }, [handleScroll])
-
-  return (
-    <div
-      ref={containerRef}
-      className='sticky bottom-[-442px] flex h-[530px] shrink-0 grow flex-col overflow-y-auto bg-background-default-subtle px-12 py-2 pt-0'
-    >
-      <RiArrowUpDoubleLine
-        className='absolute left-1/2 top-2 h-4 w-4 -translate-x-1/2 cursor-pointer text-text-quaternary'
-        onClick={() => onMarketplaceScroll()}
-      />
-      <div className='sticky top-0 z-10 bg-background-default-subtle pb-3 pt-5'>
-        <div className='title-2xl-semi-bold bg-gradient-to-r from-[rgba(11,165,236,0.95)] to-[rgba(21,90,239,0.95)] bg-clip-text text-transparent'>
-          {t('plugin.marketplace.moreFrom')}
-        </div>
-        <div className='body-md-regular flex items-center text-center text-text-tertiary'>
-          {t('plugin.marketplace.discover')}
-          <span className="body-md-medium relative ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-            {t('plugin.category.models')}
-          </span>
-          ,
-          <span className="body-md-medium relative ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-            {t('plugin.category.tools')}
-          </span>
-          ,
-          <span className="body-md-medium relative ml-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-            {t('plugin.category.agents')}
-          </span>
-          ,
-          <span className="body-md-medium relative ml-1 mr-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-            {t('plugin.category.extensions')}
-          </span>
-          {t('plugin.marketplace.and')}
-          <span className="body-md-medium relative ml-1 mr-1 text-text-secondary after:absolute after:bottom-[1.5px] after:left-0 after:h-2 after:w-full after:bg-text-text-selected after:content-['']">
-            {t('plugin.category.bundles')}
-          </span>
-          {t('common.operation.in')}
-          <a
-            href={`${MARKETPLACE_URL_PREFIX}?language=${locale}&q=${searchPluginText}&tags=${filterPluginTags.join(',')}${theme ? `&theme=${theme}` : ''}`}
-            className='system-sm-medium ml-1 flex items-center text-text-accent'
-            target='_blank'
-          >
-            {t('plugin.marketplace.difyMarketplace')}
-            <RiArrowRightUpLine className='h-4 w-4' />
-          </a>
-        </div>
-      </div>
-      {
-        isLoading && page === 1 && (
-          <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2'>
-            <Loading />
-          </div>
-        )
-      }
-      {
-        (!isLoading || page > 1) && (
-          <List
-            marketplaceCollections={marketplaceCollections || []}
-            marketplaceCollectionPluginsMap={marketplaceCollectionPluginsMap || {}}
-            plugins={plugins}
-            showInstallButton
-            locale={locale}
-          />
-        )
-      }
-    </div>
-  )
-}
-
-export default Marketplace
diff --git a/app/components/workflow-app/components/workflow-children.tsx b/app/components/workflow-app/components/workflow-children.tsx
deleted file mode 100644
index 6a6bbcd..0000000
--- a/app/components/workflow-app/components/workflow-children.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import {
-  memo,
-  useState,
-} from 'react'
-import type { EnvironmentVariable } from '@/app/components/workflow/types'
-import { DSL_EXPORT_CHECK } from '@/app/components/workflow/constants'
-import { useStore } from '@/app/components/workflow/store'
-import Features from '@/app/components/workflow/features'
-import PluginDependency from '@/app/components/workflow/plugin-dependency'
-import UpdateDSLModal from '@/app/components/workflow/update-dsl-modal'
-import DSLExportConfirmModal from '@/app/components/workflow/dsl-export-confirm-modal'
-import {
-  useDSL,
-  usePanelInteractions,
-} from '@/app/components/workflow/hooks'
-import { useEventEmitterContextContext } from '@/context/event-emitter'
-import WorkflowHeader from './workflow-header'
-import WorkflowPanel from './workflow-panel'
-
-const WorkflowChildren = () => {
-  const { eventEmitter } = useEventEmitterContextContext()
-  const [secretEnvList, setSecretEnvList] = useState<EnvironmentVariable[]>([])
-  const showFeaturesPanel = useStore(s => s.showFeaturesPanel)
-  const showImportDSLModal = useStore(s => s.showImportDSLModal)
-  const setShowImportDSLModal = useStore(s => s.setShowImportDSLModal)
-  const {
-    handlePaneContextmenuCancel,
-  } = usePanelInteractions()
-  const {
-    exportCheck,
-    handleExportDSL,
-  } = useDSL()
-
-  eventEmitter?.useSubscription((v: any) => {
-    if (v.type === DSL_EXPORT_CHECK)
-      setSecretEnvList(v.payload.data as EnvironmentVariable[])
-  })
-
-  return (
-    <>
-      <PluginDependency />
-      {
-        showFeaturesPanel && <Features />
-      }
-      {
-        showImportDSLModal && (
-          <UpdateDSLModal
-            onCancel={() => setShowImportDSLModal(false)}
-            onBackup={exportCheck}
-            onImport={handlePaneContextmenuCancel}
-          />
-        )
-      }
-      {
-        secretEnvList.length > 0 && (
-          <DSLExportConfirmModal
-            envList={secretEnvList}
-            onConfirm={handleExportDSL}
-            onClose={() => setSecretEnvList([])}
-          />
-        )
-      }
-      <WorkflowHeader />
-      <WorkflowPanel />
-    </>
-  )
-}
-
-export default memo(WorkflowChildren)
diff --git a/app/components/workflow-app/components/workflow-header/chat-variable-trigger.tsx b/app/components/workflow-app/components/workflow-header/chat-variable-trigger.tsx
deleted file mode 100644
index 0299d53..0000000
--- a/app/components/workflow-app/components/workflow-header/chat-variable-trigger.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { memo } from 'react'
-import ChatVariableButton from '@/app/components/workflow/header/chat-variable-button'
-import {
-  useNodesReadOnly,
-} from '@/app/components/workflow/hooks'
-import { useIsChatMode } from '../../hooks'
-
-const ChatVariableTrigger = () => {
-  const { nodesReadOnly } = useNodesReadOnly()
-  const isChatMode = useIsChatMode()
-
-  if (!isChatMode)
-    return null
-
-  return <ChatVariableButton disabled={nodesReadOnly} />
-}
-export default memo(ChatVariableTrigger)
diff --git a/app/components/workflow-app/components/workflow-header/features-trigger.tsx b/app/components/workflow-app/components/workflow-header/features-trigger.tsx
deleted file mode 100644
index da64409..0000000
--- a/app/components/workflow-app/components/workflow-header/features-trigger.tsx
+++ /dev/null
@@ -1,152 +0,0 @@
-import {
-  memo,
-  useCallback,
-  useMemo,
-} from 'react'
-import { useNodes } from 'reactflow'
-import { RiApps2AddLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import {
-  useStore,
-  useWorkflowStore,
-} from '@/app/components/workflow/store'
-import {
-  useChecklistBeforePublish,
-  useNodesReadOnly,
-  useNodesSyncDraft,
-} from '@/app/components/workflow/hooks'
-import Button from '@/app/components/base/button'
-import AppPublisher from '@/app/components/app/app-publisher'
-import { useFeatures } from '@/app/components/base/features/hooks'
-import {
-  BlockEnum,
-  InputVarType,
-} from '@/app/components/workflow/types'
-import type { StartNodeType } from '@/app/components/workflow/nodes/start/types'
-import { useToastContext } from '@/app/components/base/toast'
-import { usePublishWorkflow, useResetWorkflowVersionHistory } from '@/service/use-workflow'
-import type { PublishWorkflowParams } from '@/types/workflow'
-import { fetchAppDetail, fetchAppSSO } from '@/service/apps'
-import { useStore as useAppStore } from '@/app/components/app/store'
-import { useSelector as useAppSelector } from '@/context/app-context'
-
-const FeaturesTrigger = () => {
-  const { t } = useTranslation()
-  const workflowStore = useWorkflowStore()
-  const appDetail = useAppStore(s => s.appDetail)
-  const appID = appDetail?.id
-  const setAppDetail = useAppStore(s => s.setAppDetail)
-  const systemFeatures = useAppSelector(state => state.systemFeatures)
-  const {
-    nodesReadOnly,
-    getNodesReadOnly,
-  } = useNodesReadOnly()
-  const publishedAt = useStore(s => s.publishedAt)
-  const draftUpdatedAt = useStore(s => s.draftUpdatedAt)
-  const toolPublished = useStore(s => s.toolPublished)
-  const nodes = useNodes<StartNodeType>()
-  const startNode = nodes.find(node => node.data.type === BlockEnum.Start)
-  const startVariables = startNode?.data.variables
-  const fileSettings = useFeatures(s => s.features.file)
-  const variables = useMemo(() => {
-    const data = startVariables || []
-    if (fileSettings?.image?.enabled) {
-      return [
-        ...data,
-        {
-          type: InputVarType.files,
-          variable: '__image',
-          required: false,
-          label: 'files',
-        },
-      ]
-    }
-
-    return data
-  }, [fileSettings?.image?.enabled, startVariables])
-
-  const { handleCheckBeforePublish } = useChecklistBeforePublish()
-  const { handleSyncWorkflowDraft } = useNodesSyncDraft()
-  const { notify } = useToastContext()
-
-  const handleShowFeatures = useCallback(() => {
-    const {
-      showFeaturesPanel,
-      isRestoring,
-      setShowFeaturesPanel,
-    } = workflowStore.getState()
-    if (getNodesReadOnly() && !isRestoring)
-      return
-    setShowFeaturesPanel(!showFeaturesPanel)
-  }, [workflowStore, getNodesReadOnly])
-
-  const resetWorkflowVersionHistory = useResetWorkflowVersionHistory(appDetail!.id)
-
-  const updateAppDetail = useCallback(async () => {
-    try {
-      const res = await fetchAppDetail({ url: '/apps', id: appID! })
-      if (systemFeatures.enable_web_sso_switch_component) {
-        const ssoRes = await fetchAppSSO({ appId: appID! })
-        setAppDetail({ ...res, enable_sso: ssoRes.enabled })
-      }
-      else {
-        setAppDetail({ ...res })
-      }
-    }
-    catch (error) {
-      console.error(error)
-    }
-  }, [appID, setAppDetail, systemFeatures.enable_web_sso_switch_component])
-  const { mutateAsync: publishWorkflow } = usePublishWorkflow(appID!)
-  const onPublish = useCallback(async (params?: PublishWorkflowParams) => {
-    if (await handleCheckBeforePublish()) {
-      const res = await publishWorkflow({
-        title: params?.title || '',
-        releaseNotes: params?.releaseNotes || '',
-      })
-
-      if (res) {
-        notify({ type: 'success', message: t('common.api.actionSuccess') })
-        updateAppDetail()
-        workflowStore.getState().setPublishedAt(res.created_at)
-        resetWorkflowVersionHistory()
-      }
-    }
-    else {
-      throw new Error('Checklist failed')
-    }
-  }, [handleCheckBeforePublish, notify, t, workflowStore, publishWorkflow, resetWorkflowVersionHistory, updateAppDetail])
-
-  const onPublisherToggle = useCallback((state: boolean) => {
-    if (state)
-      handleSyncWorkflowDraft(true)
-  }, [handleSyncWorkflowDraft])
-
-  const handleToolConfigureUpdate = useCallback(() => {
-    workflowStore.setState({ toolPublished: true })
-  }, [workflowStore])
-
-  return (
-    <>
-      <Button className='text-components-button-secondary-text' onClick={handleShowFeatures}>
-        <RiApps2AddLine className='mr-1 h-4 w-4 text-components-button-secondary-text' />
-        {t('workflow.common.features')}
-      </Button>
-      <AppPublisher
-        {...{
-          publishedAt,
-          draftUpdatedAt,
-          disabled: nodesReadOnly,
-          toolPublished,
-          inputs: variables,
-          onRefreshData: handleToolConfigureUpdate,
-          onPublish,
-          onToggle: onPublisherToggle,
-          crossAxisOffset: 4,
-        }}
-      />
-    </>
-  )
-}
-
-export default memo(FeaturesTrigger)
diff --git a/app/components/workflow-app/components/workflow-header/index.tsx b/app/components/workflow-app/components/workflow-header/index.tsx
deleted file mode 100644
index 4eb8df7..0000000
--- a/app/components/workflow-app/components/workflow-header/index.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { useMemo } from 'react'
-import type { HeaderProps } from '@/app/components/workflow/header'
-import Header from '@/app/components/workflow/header'
-import { useStore as useAppStore } from '@/app/components/app/store'
-import ChatVariableTrigger from './chat-variable-trigger'
-import FeaturesTrigger from './features-trigger'
-import { useResetWorkflowVersionHistory } from '@/service/use-workflow'
-
-const WorkflowHeader = () => {
-  const appDetail = useAppStore(s => s.appDetail)
-  const resetWorkflowVersionHistory = useResetWorkflowVersionHistory(appDetail!.id)
-
-  const headerProps: HeaderProps = useMemo(() => {
-    return {
-      normal: {
-        components: {
-          left: <ChatVariableTrigger />,
-          middle: <FeaturesTrigger />,
-        },
-      },
-      restoring: {
-        onRestoreSettled: resetWorkflowVersionHistory,
-      },
-    }
-  }, [resetWorkflowVersionHistory])
-  return (
-    <Header {...headerProps} />
-  )
-}
-
-export default WorkflowHeader
diff --git a/app/components/workflow-app/components/workflow-main.tsx b/app/components/workflow-app/components/workflow-main.tsx
deleted file mode 100644
index 2f2295c..0000000
--- a/app/components/workflow-app/components/workflow-main.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import {
-  useCallback,
-  useMemo,
-} from 'react'
-import { useFeaturesStore } from '@/app/components/base/features/hooks'
-import { WorkflowWithInnerContext } from '@/app/components/workflow'
-import type { WorkflowProps } from '@/app/components/workflow'
-import WorkflowChildren from './workflow-children'
-import {
-  useNodesSyncDraft,
-  useWorkflowRefreshDraft,
-  useWorkflowRun,
-  useWorkflowStartRun,
-} from '../hooks'
-
-type WorkflowMainProps = Pick<WorkflowProps, 'nodes' | 'edges' | 'viewport'>
-const WorkflowMain = ({
-  nodes,
-  edges,
-  viewport,
-}: WorkflowMainProps) => {
-  const featuresStore = useFeaturesStore()
-
-  const handleWorkflowDataUpdate = useCallback((payload: any) => {
-    if (payload.features && featuresStore) {
-      const { setFeatures } = featuresStore.getState()
-
-      setFeatures(payload.features)
-    }
-  }, [featuresStore])
-
-  const {
-    doSyncWorkflowDraft,
-    syncWorkflowDraftWhenPageClose,
-  } = useNodesSyncDraft()
-  const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft()
-  const {
-    handleBackupDraft,
-    handleLoadBackupDraft,
-    handleRestoreFromPublishedWorkflow,
-    handleRun,
-    handleStopRun,
-  } = useWorkflowRun()
-  const {
-    handleStartWorkflowRun,
-    handleWorkflowStartRunInChatflow,
-    handleWorkflowStartRunInWorkflow,
-  } = useWorkflowStartRun()
-
-  const hooksStore = useMemo(() => {
-    return {
-      syncWorkflowDraftWhenPageClose,
-      doSyncWorkflowDraft,
-      handleRefreshWorkflowDraft,
-      handleBackupDraft,
-      handleLoadBackupDraft,
-      handleRestoreFromPublishedWorkflow,
-      handleRun,
-      handleStopRun,
-      handleStartWorkflowRun,
-      handleWorkflowStartRunInChatflow,
-      handleWorkflowStartRunInWorkflow,
-    }
-  }, [
-    syncWorkflowDraftWhenPageClose,
-    doSyncWorkflowDraft,
-    handleRefreshWorkflowDraft,
-    handleBackupDraft,
-    handleLoadBackupDraft,
-    handleRestoreFromPublishedWorkflow,
-    handleRun,
-    handleStopRun,
-    handleStartWorkflowRun,
-    handleWorkflowStartRunInChatflow,
-    handleWorkflowStartRunInWorkflow,
-  ])
-
-  return (
-    <WorkflowWithInnerContext
-      nodes={nodes}
-      edges={edges}
-      viewport={viewport}
-      onWorkflowDataUpdate={handleWorkflowDataUpdate}
-      hooksStore={hooksStore}
-    >
-      <WorkflowChildren />
-    </WorkflowWithInnerContext>
-  )
-}
-
-export default WorkflowMain
diff --git a/app/components/workflow-app/components/workflow-panel.tsx b/app/components/workflow-app/components/workflow-panel.tsx
deleted file mode 100644
index dd36866..0000000
--- a/app/components/workflow-app/components/workflow-panel.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-import { useMemo } from 'react'
-import { useShallow } from 'zustand/react/shallow'
-import { useStore } from '@/app/components/workflow/store'
-import {
-  useIsChatMode,
-} from '../hooks'
-import DebugAndPreview from '@/app/components/workflow/panel/debug-and-preview'
-import Record from '@/app/components/workflow/panel/record'
-import WorkflowPreview from '@/app/components/workflow/panel/workflow-preview'
-import ChatRecord from '@/app/components/workflow/panel/chat-record'
-import ChatVariablePanel from '@/app/components/workflow/panel/chat-variable-panel'
-import GlobalVariablePanel from '@/app/components/workflow/panel/global-variable-panel'
-import VersionHistoryPanel from '@/app/components/workflow/panel/version-history-panel'
-import { useStore as useAppStore } from '@/app/components/app/store'
-import MessageLogModal from '@/app/components/base/message-log-modal'
-import type { PanelProps } from '@/app/components/workflow/panel'
-import Panel from '@/app/components/workflow/panel'
-
-const WorkflowPanelOnLeft = () => {
-  const { currentLogItem, setCurrentLogItem, showMessageLogModal, setShowMessageLogModal, currentLogModalActiveTab } = useAppStore(useShallow(state => ({
-    currentLogItem: state.currentLogItem,
-    setCurrentLogItem: state.setCurrentLogItem,
-    showMessageLogModal: state.showMessageLogModal,
-    setShowMessageLogModal: state.setShowMessageLogModal,
-    currentLogModalActiveTab: state.currentLogModalActiveTab,
-  })))
-  return (
-    <>
-      {
-        showMessageLogModal && (
-          <MessageLogModal
-            fixedWidth
-            width={400}
-            currentLogItem={currentLogItem}
-            onCancel={() => {
-              setCurrentLogItem()
-              setShowMessageLogModal(false)
-            }}
-            defaultTab={currentLogModalActiveTab}
-          />
-        )
-      }
-    </>
-  )
-}
-const WorkflowPanelOnRight = () => {
-  const isChatMode = useIsChatMode()
-  const historyWorkflowData = useStore(s => s.historyWorkflowData)
-  const showDebugAndPreviewPanel = useStore(s => s.showDebugAndPreviewPanel)
-  const showChatVariablePanel = useStore(s => s.showChatVariablePanel)
-  const showGlobalVariablePanel = useStore(s => s.showGlobalVariablePanel)
-  const showWorkflowVersionHistoryPanel = useStore(s => s.showWorkflowVersionHistoryPanel)
-
-  return (
-    <>
-      {
-        historyWorkflowData && !isChatMode && (
-          <Record />
-        )
-      }
-      {
-        historyWorkflowData && isChatMode && (
-          <ChatRecord />
-        )
-      }
-      {
-        showDebugAndPreviewPanel && isChatMode && (
-          <DebugAndPreview />
-        )
-      }
-      {
-        showDebugAndPreviewPanel && !isChatMode && (
-          <WorkflowPreview />
-        )
-      }
-      {
-        showChatVariablePanel && isChatMode && (
-          <ChatVariablePanel />
-        )
-      }
-      {
-        showGlobalVariablePanel && (
-          <GlobalVariablePanel />
-        )
-      }
-      {
-        showWorkflowVersionHistoryPanel && (
-          <VersionHistoryPanel/>
-        )
-      }
-    </>
-  )
-}
-const WorkflowPanel = () => {
-  const panelProps: PanelProps = useMemo(() => {
-    return {
-      components: {
-        left: <WorkflowPanelOnLeft />,
-        right: <WorkflowPanelOnRight />,
-      },
-    }
-  }, [])
-
-  return (
-    <Panel {...panelProps} />
-  )
-}
-
-export default WorkflowPanel
diff --git a/app/components/workflow-app/hooks/index.ts b/app/components/workflow-app/hooks/index.ts
deleted file mode 100644
index 6373a85..0000000
--- a/app/components/workflow-app/hooks/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export * from './use-workflow-init'
-export * from './use-workflow-template'
-export * from './use-nodes-sync-draft'
-export * from './use-workflow-run'
-export * from './use-workflow-start-run'
-export * from './use-is-chat-mode'
-export * from './use-workflow-refresh-draft'
diff --git a/app/components/workflow-app/hooks/use-is-chat-mode.ts b/app/components/workflow-app/hooks/use-is-chat-mode.ts
deleted file mode 100644
index 3cdfc77..0000000
--- a/app/components/workflow-app/hooks/use-is-chat-mode.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { useStore as useAppStore } from '@/app/components/app/store'
-
-export const useIsChatMode = () => {
-  const appDetail = useAppStore(s => s.appDetail)
-
-  return appDetail?.mode === 'advanced-chat'
-}
diff --git a/app/components/workflow-app/hooks/use-nodes-sync-draft.ts b/app/components/workflow-app/hooks/use-nodes-sync-draft.ts
deleted file mode 100644
index db21cfb..0000000
--- a/app/components/workflow-app/hooks/use-nodes-sync-draft.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import { useStoreApi } from 'reactflow'
-import { useParams } from 'next/navigation'
-import {
-  useWorkflowStore,
-} from '@/app/components/workflow/store'
-import { BlockEnum } from '@/app/components/workflow/types'
-import {
-  useNodesReadOnly,
-} from '@/app/components/workflow/hooks/use-workflow'
-import { syncWorkflowDraft } from '@/service/workflow'
-import { useFeaturesStore } from '@/app/components/base/features/hooks'
-import { API_PREFIX } from '@/config'
-import { useWorkflowRefreshDraft } from '.'
-
-export const useNodesSyncDraft = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-  const featuresStore = useFeaturesStore()
-  const { getNodesReadOnly } = useNodesReadOnly()
-  const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft()
-  const params = useParams()
-
-  const getPostParams = useCallback(() => {
-    const {
-      getNodes,
-      edges,
-      transform,
-    } = store.getState()
-    const [x, y, zoom] = transform
-    const {
-      appId,
-      conversationVariables,
-      environmentVariables,
-      syncWorkflowDraftHash,
-    } = workflowStore.getState()
-
-    if (appId) {
-      const nodes = getNodes()
-      const hasStartNode = nodes.find(node => node.data.type === BlockEnum.Start)
-
-      if (!hasStartNode)
-        return
-
-      const features = featuresStore!.getState().features
-      const producedNodes = produce(nodes, (draft) => {
-        draft.forEach((node) => {
-          Object.keys(node.data).forEach((key) => {
-            if (key.startsWith('_'))
-              delete node.data[key]
-          })
-        })
-      })
-      const producedEdges = produce(edges, (draft) => {
-        draft.forEach((edge) => {
-          Object.keys(edge.data).forEach((key) => {
-            if (key.startsWith('_'))
-              delete edge.data[key]
-          })
-        })
-      })
-      return {
-        url: `/apps/${appId}/workflows/draft`,
-        params: {
-          graph: {
-            nodes: producedNodes,
-            edges: producedEdges,
-            viewport: {
-              x,
-              y,
-              zoom,
-            },
-          },
-          features: {
-            opening_statement: features.opening?.enabled ? (features.opening?.opening_statement || '') : '',
-            suggested_questions: features.opening?.enabled ? (features.opening?.suggested_questions || []) : [],
-            suggested_questions_after_answer: features.suggested,
-            text_to_speech: features.text2speech,
-            speech_to_text: features.speech2text,
-            retriever_resource: features.citation,
-            sensitive_word_avoidance: features.moderation,
-            file_upload: features.file,
-          },
-          environment_variables: environmentVariables,
-          conversation_variables: conversationVariables,
-          hash: syncWorkflowDraftHash,
-        },
-      }
-    }
-  }, [store, featuresStore, workflowStore])
-
-  const syncWorkflowDraftWhenPageClose = useCallback(() => {
-    if (getNodesReadOnly())
-      return
-    const postParams = getPostParams()
-
-    if (postParams) {
-      navigator.sendBeacon(
-        `${API_PREFIX}/apps/${params.appId}/workflows/draft?_token=${localStorage.getItem('console_token')}`,
-        JSON.stringify(postParams.params),
-      )
-    }
-  }, [getPostParams, params.appId, getNodesReadOnly])
-
-  const doSyncWorkflowDraft = useCallback(async (
-    notRefreshWhenSyncError?: boolean,
-    callback?: {
-      onSuccess?: () => void
-      onError?: () => void
-      onSettled?: () => void
-    },
-  ) => {
-    if (getNodesReadOnly())
-      return
-    const postParams = getPostParams()
-
-    if (postParams) {
-      const {
-        setSyncWorkflowDraftHash,
-        setDraftUpdatedAt,
-      } = workflowStore.getState()
-      try {
-        const res = await syncWorkflowDraft(postParams)
-        setSyncWorkflowDraftHash(res.hash)
-        setDraftUpdatedAt(res.updated_at)
-        callback?.onSuccess && callback.onSuccess()
-      }
-      catch (error: any) {
-        if (error && error.json && !error.bodyUsed) {
-          error.json().then((err: any) => {
-            if (err.code === 'draft_workflow_not_sync' && !notRefreshWhenSyncError)
-              handleRefreshWorkflowDraft()
-          })
-        }
-        callback?.onError && callback.onError()
-      }
-      finally {
-        callback?.onSettled && callback.onSettled()
-      }
-    }
-  }, [workflowStore, getPostParams, getNodesReadOnly, handleRefreshWorkflowDraft])
-
-  return {
-    doSyncWorkflowDraft,
-    syncWorkflowDraftWhenPageClose,
-  }
-}
diff --git a/app/components/workflow-app/hooks/use-workflow-init.ts b/app/components/workflow-app/hooks/use-workflow-init.ts
deleted file mode 100644
index e1c4c25..0000000
--- a/app/components/workflow-app/hooks/use-workflow-init.ts
+++ /dev/null
@@ -1,123 +0,0 @@
-import {
-  useCallback,
-  useEffect,
-  useState,
-} from 'react'
-import {
-  useStore,
-  useWorkflowStore,
-} from '@/app/components/workflow/store'
-import { useWorkflowTemplate } from './use-workflow-template'
-import { useStore as useAppStore } from '@/app/components/app/store'
-import {
-  fetchNodesDefaultConfigs,
-  fetchPublishedWorkflow,
-  fetchWorkflowDraft,
-  syncWorkflowDraft,
-} from '@/service/workflow'
-import type { FetchWorkflowDraftResponse } from '@/types/workflow'
-import { useWorkflowConfig } from '@/service/use-workflow'
-
-export const useWorkflowInit = () => {
-  const workflowStore = useWorkflowStore()
-  const {
-    nodes: nodesTemplate,
-    edges: edgesTemplate,
-  } = useWorkflowTemplate()
-  const appDetail = useAppStore(state => state.appDetail)!
-  const setSyncWorkflowDraftHash = useStore(s => s.setSyncWorkflowDraftHash)
-  const [data, setData] = useState<FetchWorkflowDraftResponse>()
-  const [isLoading, setIsLoading] = useState(true)
-  useEffect(() => {
-    workflowStore.setState({ appId: appDetail.id })
-  }, [appDetail.id, workflowStore])
-
-  const handleUpdateWorkflowConfig = useCallback((config: Record<string, any>) => {
-    const { setWorkflowConfig } = workflowStore.getState()
-
-    setWorkflowConfig(config)
-  }, [workflowStore])
-  useWorkflowConfig(appDetail.id, handleUpdateWorkflowConfig)
-
-  const handleGetInitialWorkflowData = useCallback(async () => {
-    try {
-      const res = await fetchWorkflowDraft(`/apps/${appDetail.id}/workflows/draft`)
-      setData(res)
-      workflowStore.setState({
-        envSecrets: (res.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => {
-          acc[env.id] = env.value
-          return acc
-        }, {} as Record<string, string>),
-        environmentVariables: res.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [],
-        conversationVariables: res.conversation_variables || [],
-      })
-      setSyncWorkflowDraftHash(res.hash)
-      setIsLoading(false)
-    }
-    catch (error: any) {
-      if (error && error.json && !error.bodyUsed && appDetail) {
-        error.json().then((err: any) => {
-          if (err.code === 'draft_workflow_not_exist') {
-            workflowStore.setState({ notInitialWorkflow: true })
-            syncWorkflowDraft({
-              url: `/apps/${appDetail.id}/workflows/draft`,
-              params: {
-                graph: {
-                  nodes: nodesTemplate,
-                  edges: edgesTemplate,
-                },
-                features: {
-                  retriever_resource: { enabled: true },
-                },
-                environment_variables: [],
-                conversation_variables: [],
-              },
-            }).then((res) => {
-              workflowStore.getState().setDraftUpdatedAt(res.updated_at)
-              handleGetInitialWorkflowData()
-            })
-          }
-        })
-      }
-    }
-  }, [appDetail, nodesTemplate, edgesTemplate, workflowStore, setSyncWorkflowDraftHash])
-
-  useEffect(() => {
-    handleGetInitialWorkflowData()
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [])
-
-  const handleFetchPreloadData = useCallback(async () => {
-    try {
-      const nodesDefaultConfigsData = await fetchNodesDefaultConfigs(`/apps/${appDetail?.id}/workflows/default-workflow-block-configs`)
-      const publishedWorkflow = await fetchPublishedWorkflow(`/apps/${appDetail?.id}/workflows/publish`)
-      workflowStore.setState({
-        nodesDefaultConfigs: nodesDefaultConfigsData.reduce((acc, block) => {
-          if (!acc[block.type])
-            acc[block.type] = { ...block.config }
-          return acc
-        }, {} as Record<string, any>),
-      })
-      workflowStore.getState().setPublishedAt(publishedWorkflow?.created_at)
-    }
-    catch (e) {
-      console.error(e)
-    }
-  }, [workflowStore, appDetail])
-
-  useEffect(() => {
-    handleFetchPreloadData()
-  }, [handleFetchPreloadData])
-
-  useEffect(() => {
-    if (data) {
-      workflowStore.getState().setDraftUpdatedAt(data.updated_at)
-      workflowStore.getState().setToolPublished(data.tool_published)
-    }
-  }, [data, workflowStore])
-
-  return {
-    data,
-    isLoading,
-  }
-}
diff --git a/app/components/workflow-app/hooks/use-workflow-refresh-draft.ts b/app/components/workflow-app/hooks/use-workflow-refresh-draft.ts
deleted file mode 100644
index c944e10..0000000
--- a/app/components/workflow-app/hooks/use-workflow-refresh-draft.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { useCallback } from 'react'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-import { fetchWorkflowDraft } from '@/service/workflow'
-import type { WorkflowDataUpdater } from '@/app/components/workflow/types'
-import { useWorkflowUpdate } from '@/app/components/workflow/hooks'
-
-export const useWorkflowRefreshDraft = () => {
-  const workflowStore = useWorkflowStore()
-  const { handleUpdateWorkflowCanvas } = useWorkflowUpdate()
-
-  const handleRefreshWorkflowDraft = useCallback(() => {
-    const {
-      appId,
-      setSyncWorkflowDraftHash,
-      setIsSyncingWorkflowDraft,
-      setEnvironmentVariables,
-      setEnvSecrets,
-      setConversationVariables,
-    } = workflowStore.getState()
-    setIsSyncingWorkflowDraft(true)
-    fetchWorkflowDraft(`/apps/${appId}/workflows/draft`).then((response) => {
-      handleUpdateWorkflowCanvas(response.graph as WorkflowDataUpdater)
-      setSyncWorkflowDraftHash(response.hash)
-      setEnvSecrets((response.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => {
-        acc[env.id] = env.value
-        return acc
-      }, {} as Record<string, string>))
-      setEnvironmentVariables(response.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [])
-      setConversationVariables(response.conversation_variables || [])
-    }).finally(() => setIsSyncingWorkflowDraft(false))
-  }, [handleUpdateWorkflowCanvas, workflowStore])
-
-  return {
-    handleRefreshWorkflowDraft,
-  }
-}
diff --git a/app/components/workflow-app/hooks/use-workflow-run.ts b/app/components/workflow-app/hooks/use-workflow-run.ts
deleted file mode 100644
index 1e484d0..0000000
--- a/app/components/workflow-app/hooks/use-workflow-run.ts
+++ /dev/null
@@ -1,357 +0,0 @@
-import { useCallback } from 'react'
-import {
-  useReactFlow,
-  useStoreApi,
-} from 'reactflow'
-import produce from 'immer'
-import { v4 as uuidV4 } from 'uuid'
-import { usePathname } from 'next/navigation'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-import { WorkflowRunningStatus } from '@/app/components/workflow/types'
-import { useWorkflowUpdate } from '@/app/components/workflow/hooks/use-workflow-interactions'
-import { useWorkflowRunEvent } from '@/app/components/workflow/hooks/use-workflow-run-event/use-workflow-run-event'
-import { useStore as useAppStore } from '@/app/components/app/store'
-import type { IOtherOptions } from '@/service/base'
-import { ssePost } from '@/service/base'
-import { stopWorkflowRun } from '@/service/workflow'
-import { useFeaturesStore } from '@/app/components/base/features/hooks'
-import { AudioPlayerManager } from '@/app/components/base/audio-btn/audio.player.manager'
-import type { VersionHistory } from '@/types/workflow'
-import { noop } from 'lodash-es'
-import { useNodesSyncDraft } from './use-nodes-sync-draft'
-
-export const useWorkflowRun = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-  const reactflow = useReactFlow()
-  const featuresStore = useFeaturesStore()
-  const { doSyncWorkflowDraft } = useNodesSyncDraft()
-  const { handleUpdateWorkflowCanvas } = useWorkflowUpdate()
-  const pathname = usePathname()
-
-  const {
-    handleWorkflowStarted,
-    handleWorkflowFinished,
-    handleWorkflowFailed,
-    handleWorkflowNodeStarted,
-    handleWorkflowNodeFinished,
-    handleWorkflowNodeIterationStarted,
-    handleWorkflowNodeIterationNext,
-    handleWorkflowNodeIterationFinished,
-    handleWorkflowNodeLoopStarted,
-    handleWorkflowNodeLoopNext,
-    handleWorkflowNodeLoopFinished,
-    handleWorkflowNodeRetry,
-    handleWorkflowAgentLog,
-    handleWorkflowTextChunk,
-    handleWorkflowTextReplace,
-  } = useWorkflowRunEvent()
-
-  const handleBackupDraft = useCallback(() => {
-    const {
-      getNodes,
-      edges,
-    } = store.getState()
-    const { getViewport } = reactflow
-    const {
-      backupDraft,
-      setBackupDraft,
-      environmentVariables,
-    } = workflowStore.getState()
-    const { features } = featuresStore!.getState()
-
-    if (!backupDraft) {
-      setBackupDraft({
-        nodes: getNodes(),
-        edges,
-        viewport: getViewport(),
-        features,
-        environmentVariables,
-      })
-      doSyncWorkflowDraft()
-    }
-  }, [reactflow, workflowStore, store, featuresStore, doSyncWorkflowDraft])
-
-  const handleLoadBackupDraft = useCallback(() => {
-    const {
-      backupDraft,
-      setBackupDraft,
-      setEnvironmentVariables,
-    } = workflowStore.getState()
-
-    if (backupDraft) {
-      const {
-        nodes,
-        edges,
-        viewport,
-        features,
-        environmentVariables,
-      } = backupDraft
-      handleUpdateWorkflowCanvas({
-        nodes,
-        edges,
-        viewport,
-      })
-      setEnvironmentVariables(environmentVariables)
-      featuresStore!.setState({ features })
-      setBackupDraft(undefined)
-    }
-  }, [handleUpdateWorkflowCanvas, workflowStore, featuresStore])
-
-  const handleRun = useCallback(async (
-    params: any,
-    callback?: IOtherOptions,
-  ) => {
-    const {
-      getNodes,
-      setNodes,
-    } = store.getState()
-    const newNodes = produce(getNodes(), (draft) => {
-      draft.forEach((node) => {
-        node.data.selected = false
-        node.data._runningStatus = undefined
-      })
-    })
-    setNodes(newNodes)
-    await doSyncWorkflowDraft()
-
-    const {
-      onWorkflowStarted,
-      onWorkflowFinished,
-      onNodeStarted,
-      onNodeFinished,
-      onIterationStart,
-      onIterationNext,
-      onIterationFinish,
-      onLoopStart,
-      onLoopNext,
-      onLoopFinish,
-      onNodeRetry,
-      onAgentLog,
-      onError,
-      ...restCallback
-    } = callback || {}
-    workflowStore.setState({ historyWorkflowData: undefined })
-    const appDetail = useAppStore.getState().appDetail
-    const workflowContainer = document.getElementById('workflow-container')
-
-    const {
-      clientWidth,
-      clientHeight,
-    } = workflowContainer!
-
-    let url = ''
-    if (appDetail?.mode === 'advanced-chat')
-      url = `/apps/${appDetail.id}/advanced-chat/workflows/draft/run`
-
-    if (appDetail?.mode === 'workflow')
-      url = `/apps/${appDetail.id}/workflows/draft/run`
-
-    const {
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-    setWorkflowRunningData({
-      result: {
-        status: WorkflowRunningStatus.Running,
-      },
-      tracing: [],
-      resultText: '',
-    })
-
-    let ttsUrl = ''
-    let ttsIsPublic = false
-    if (params.token) {
-      ttsUrl = '/text-to-audio'
-      ttsIsPublic = true
-    }
-    else if (params.appId) {
-      if (pathname.search('explore/installed') > -1)
-        ttsUrl = `/installed-apps/${params.appId}/text-to-audio`
-      else
-        ttsUrl = `/apps/${params.appId}/text-to-audio`
-    }
-    const player = AudioPlayerManager.getInstance().getAudioPlayer(ttsUrl, ttsIsPublic, uuidV4(), 'none', 'none', noop)
-
-    ssePost(
-      url,
-      {
-        body: params,
-      },
-      {
-        onWorkflowStarted: (params) => {
-          handleWorkflowStarted(params)
-
-          if (onWorkflowStarted)
-            onWorkflowStarted(params)
-        },
-        onWorkflowFinished: (params) => {
-          handleWorkflowFinished(params)
-
-          if (onWorkflowFinished)
-            onWorkflowFinished(params)
-        },
-        onError: (params) => {
-          handleWorkflowFailed()
-
-          if (onError)
-            onError(params)
-        },
-        onNodeStarted: (params) => {
-          handleWorkflowNodeStarted(
-            params,
-            {
-              clientWidth,
-              clientHeight,
-            },
-          )
-
-          if (onNodeStarted)
-            onNodeStarted(params)
-        },
-        onNodeFinished: (params) => {
-          handleWorkflowNodeFinished(params)
-
-          if (onNodeFinished)
-            onNodeFinished(params)
-        },
-        onIterationStart: (params) => {
-          handleWorkflowNodeIterationStarted(
-            params,
-            {
-              clientWidth,
-              clientHeight,
-            },
-          )
-
-          if (onIterationStart)
-            onIterationStart(params)
-        },
-        onIterationNext: (params) => {
-          handleWorkflowNodeIterationNext(params)
-
-          if (onIterationNext)
-            onIterationNext(params)
-        },
-        onIterationFinish: (params) => {
-          handleWorkflowNodeIterationFinished(params)
-
-          if (onIterationFinish)
-            onIterationFinish(params)
-        },
-        onLoopStart: (params) => {
-          handleWorkflowNodeLoopStarted(
-            params,
-            {
-              clientWidth,
-              clientHeight,
-            },
-          )
-
-          if (onLoopStart)
-            onLoopStart(params)
-        },
-        onLoopNext: (params) => {
-          handleWorkflowNodeLoopNext(params)
-
-          if (onLoopNext)
-            onLoopNext(params)
-        },
-        onLoopFinish: (params) => {
-          handleWorkflowNodeLoopFinished(params)
-
-          if (onLoopFinish)
-            onLoopFinish(params)
-        },
-        onNodeRetry: (params) => {
-          handleWorkflowNodeRetry(params)
-
-          if (onNodeRetry)
-            onNodeRetry(params)
-        },
-        onAgentLog: (params) => {
-          handleWorkflowAgentLog(params)
-
-          if (onAgentLog)
-            onAgentLog(params)
-        },
-        onTextChunk: (params) => {
-          handleWorkflowTextChunk(params)
-        },
-        onTextReplace: (params) => {
-          handleWorkflowTextReplace(params)
-        },
-        onTTSChunk: (messageId: string, audio: string) => {
-          if (!audio || audio === '')
-            return
-          player.playAudioWithAudio(audio, true)
-          AudioPlayerManager.getInstance().resetMsgId(messageId)
-        },
-        onTTSEnd: (messageId: string, audio: string) => {
-          player.playAudioWithAudio(audio, false)
-        },
-        ...restCallback,
-      },
-    )
-  }, [
-    store,
-    workflowStore,
-    doSyncWorkflowDraft,
-    handleWorkflowStarted,
-    handleWorkflowFinished,
-    handleWorkflowFailed,
-    handleWorkflowNodeStarted,
-    handleWorkflowNodeFinished,
-    handleWorkflowNodeIterationStarted,
-    handleWorkflowNodeIterationNext,
-    handleWorkflowNodeIterationFinished,
-    handleWorkflowNodeLoopStarted,
-    handleWorkflowNodeLoopNext,
-    handleWorkflowNodeLoopFinished,
-    handleWorkflowNodeRetry,
-    handleWorkflowTextChunk,
-    handleWorkflowTextReplace,
-    handleWorkflowAgentLog,
-    pathname],
-  )
-
-  const handleStopRun = useCallback((taskId: string) => {
-    const appId = useAppStore.getState().appDetail?.id
-
-    stopWorkflowRun(`/apps/${appId}/workflow-runs/tasks/${taskId}/stop`)
-  }, [])
-
-  const handleRestoreFromPublishedWorkflow = useCallback((publishedWorkflow: VersionHistory) => {
-    const nodes = publishedWorkflow.graph.nodes.map(node => ({ ...node, selected: false, data: { ...node.data, selected: false } }))
-    const edges = publishedWorkflow.graph.edges
-    const viewport = publishedWorkflow.graph.viewport!
-    handleUpdateWorkflowCanvas({
-      nodes,
-      edges,
-      viewport,
-    })
-    const mappedFeatures = {
-      opening: {
-        enabled: !!publishedWorkflow.features.opening_statement || !!publishedWorkflow.features.suggested_questions.length,
-        opening_statement: publishedWorkflow.features.opening_statement,
-        suggested_questions: publishedWorkflow.features.suggested_questions,
-      },
-      suggested: publishedWorkflow.features.suggested_questions_after_answer,
-      text2speech: publishedWorkflow.features.text_to_speech,
-      speech2text: publishedWorkflow.features.speech_to_text,
-      citation: publishedWorkflow.features.retriever_resource,
-      moderation: publishedWorkflow.features.sensitive_word_avoidance,
-      file: publishedWorkflow.features.file_upload,
-    }
-
-    featuresStore?.setState({ features: mappedFeatures })
-    workflowStore.getState().setEnvironmentVariables(publishedWorkflow.environment_variables || [])
-  }, [featuresStore, handleUpdateWorkflowCanvas, workflowStore])
-
-  return {
-    handleBackupDraft,
-    handleLoadBackupDraft,
-    handleRun,
-    handleStopRun,
-    handleRestoreFromPublishedWorkflow,
-  }
-}
diff --git a/app/components/workflow-app/hooks/use-workflow-start-run.tsx b/app/components/workflow-app/hooks/use-workflow-start-run.tsx
deleted file mode 100644
index 3f5ea1c..0000000
--- a/app/components/workflow-app/hooks/use-workflow-start-run.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import { useCallback } from 'react'
-import { useStoreApi } from 'reactflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-import {
-  BlockEnum,
-  WorkflowRunningStatus,
-} from '@/app/components/workflow/types'
-import { useWorkflowInteractions } from '@/app/components/workflow/hooks'
-import { useFeaturesStore } from '@/app/components/base/features/hooks'
-import {
-  useIsChatMode,
-  useNodesSyncDraft,
-  useWorkflowRun,
-} from '.'
-
-export const useWorkflowStartRun = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-  const featuresStore = useFeaturesStore()
-  const isChatMode = useIsChatMode()
-  const { handleCancelDebugAndPreviewPanel } = useWorkflowInteractions()
-  const { handleRun } = useWorkflowRun()
-  const { doSyncWorkflowDraft } = useNodesSyncDraft()
-
-  const handleWorkflowStartRunInWorkflow = useCallback(async () => {
-    const {
-      workflowRunningData,
-    } = workflowStore.getState()
-
-    if (workflowRunningData?.result.status === WorkflowRunningStatus.Running)
-      return
-
-    const { getNodes } = store.getState()
-    const nodes = getNodes()
-    const startNode = nodes.find(node => node.data.type === BlockEnum.Start)
-    const startVariables = startNode?.data.variables || []
-    const fileSettings = featuresStore!.getState().features.file
-    const {
-      showDebugAndPreviewPanel,
-      setShowDebugAndPreviewPanel,
-      setShowInputsPanel,
-      setShowEnvPanel,
-    } = workflowStore.getState()
-
-    setShowEnvPanel(false)
-
-    if (showDebugAndPreviewPanel) {
-      handleCancelDebugAndPreviewPanel()
-      return
-    }
-
-    if (!startVariables.length && !fileSettings?.image?.enabled) {
-      await doSyncWorkflowDraft()
-      handleRun({ inputs: {}, files: [] })
-      setShowDebugAndPreviewPanel(true)
-      setShowInputsPanel(false)
-    }
-    else {
-      setShowDebugAndPreviewPanel(true)
-      setShowInputsPanel(true)
-    }
-  }, [store, workflowStore, featuresStore, handleCancelDebugAndPreviewPanel, handleRun, doSyncWorkflowDraft])
-
-  const handleWorkflowStartRunInChatflow = useCallback(async () => {
-    const {
-      showDebugAndPreviewPanel,
-      setShowDebugAndPreviewPanel,
-      setHistoryWorkflowData,
-      setShowEnvPanel,
-      setShowChatVariablePanel,
-    } = workflowStore.getState()
-
-    setShowEnvPanel(false)
-    setShowChatVariablePanel(false)
-
-    if (showDebugAndPreviewPanel)
-      handleCancelDebugAndPreviewPanel()
-    else
-      setShowDebugAndPreviewPanel(true)
-
-    setHistoryWorkflowData(undefined)
-  }, [workflowStore, handleCancelDebugAndPreviewPanel])
-
-  const handleStartWorkflowRun = useCallback(() => {
-    if (!isChatMode)
-      handleWorkflowStartRunInWorkflow()
-    else
-      handleWorkflowStartRunInChatflow()
-  }, [isChatMode, handleWorkflowStartRunInWorkflow, handleWorkflowStartRunInChatflow])
-
-  return {
-    handleStartWorkflowRun,
-    handleWorkflowStartRunInWorkflow,
-    handleWorkflowStartRunInChatflow,
-  }
-}
diff --git a/app/components/workflow-app/hooks/use-workflow-template.ts b/app/components/workflow-app/hooks/use-workflow-template.ts
deleted file mode 100644
index 9f47b98..0000000
--- a/app/components/workflow-app/hooks/use-workflow-template.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import { generateNewNode } from '@/app/components/workflow/utils'
-import {
-  NODE_WIDTH_X_OFFSET,
-  START_INITIAL_POSITION,
-} from '@/app/components/workflow/constants'
-import { useNodesInitialData } from '@/app/components/workflow/hooks'
-import { useIsChatMode } from './use-is-chat-mode'
-
-export const useWorkflowTemplate = () => {
-  const isChatMode = useIsChatMode()
-  const nodesInitialData = useNodesInitialData()
-
-  const { newNode: startNode } = generateNewNode({
-    data: nodesInitialData.start,
-    position: START_INITIAL_POSITION,
-  })
-
-  if (isChatMode) {
-    const { newNode: llmNode } = generateNewNode({
-      id: 'llm',
-      data: {
-        ...nodesInitialData.llm,
-        memory: {
-          window: { enabled: false, size: 10 },
-          query_prompt_template: '{{#sys.query#}}',
-        },
-        selected: true,
-      },
-      position: {
-        x: START_INITIAL_POSITION.x + NODE_WIDTH_X_OFFSET,
-        y: START_INITIAL_POSITION.y,
-      },
-    } as any)
-
-    const { newNode: answerNode } = generateNewNode({
-      id: 'answer',
-      data: {
-        ...nodesInitialData.answer,
-        answer: `{{#${llmNode.id}.text#}}`,
-      },
-      position: {
-        x: START_INITIAL_POSITION.x + NODE_WIDTH_X_OFFSET * 2,
-        y: START_INITIAL_POSITION.y,
-      },
-    } as any)
-
-    const startToLlmEdge = {
-      id: `${startNode.id}-${llmNode.id}`,
-      source: startNode.id,
-      sourceHandle: 'source',
-      target: llmNode.id,
-      targetHandle: 'target',
-    }
-
-    const llmToAnswerEdge = {
-      id: `${llmNode.id}-${answerNode.id}`,
-      source: llmNode.id,
-      sourceHandle: 'source',
-      target: answerNode.id,
-      targetHandle: 'target',
-    }
-
-    return {
-      nodes: [startNode, llmNode, answerNode],
-      edges: [startToLlmEdge, llmToAnswerEdge],
-    }
-  }
-  else {
-    return {
-      nodes: [startNode],
-      edges: [],
-    }
-  }
-}
diff --git a/app/components/workflow-app/index.tsx b/app/components/workflow-app/index.tsx
deleted file mode 100644
index 761a7f2..0000000
--- a/app/components/workflow-app/index.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import {
-  useMemo,
-} from 'react'
-import useSWR from 'swr'
-import {
-  SupportUploadFileTypes,
-} from '@/app/components/workflow/types'
-import {
-  useWorkflowInit,
-} from './hooks'
-import {
-  initialEdges,
-  initialNodes,
-} from '@/app/components/workflow/utils'
-import Loading from '@/app/components/base/loading'
-import { FeaturesProvider } from '@/app/components/base/features'
-import type { Features as FeaturesData } from '@/app/components/base/features/types'
-import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants'
-import { fetchFileUploadConfig } from '@/service/common'
-import WorkflowWithDefaultContext from '@/app/components/workflow'
-import {
-  WorkflowContextProvider,
-} from '@/app/components/workflow/context'
-import { createWorkflowSlice } from './store/workflow/workflow-slice'
-import WorkflowAppMain from './components/workflow-main'
-
-const WorkflowAppWithAdditionalContext = () => {
-  const {
-    data,
-    isLoading,
-  } = useWorkflowInit()
-  const { data: fileUploadConfigResponse } = useSWR({ url: '/files/upload' }, fetchFileUploadConfig)
-
-  const nodesData = useMemo(() => {
-    if (data)
-      return initialNodes(data.graph.nodes, data.graph.edges)
-
-    return []
-  }, [data])
-  const edgesData = useMemo(() => {
-    if (data)
-      return initialEdges(data.graph.edges, data.graph.nodes)
-
-    return []
-  }, [data])
-
-  if (!data || isLoading) {
-    return (
-      <div className='relative flex h-full w-full items-center justify-center'>
-        <Loading />
-      </div>
-    )
-  }
-
-  const features = data.features || {}
-  const initialFeatures: FeaturesData = {
-    file: {
-      image: {
-        enabled: !!features.file_upload?.image?.enabled,
-        number_limits: features.file_upload?.image?.number_limits || 3,
-        transfer_methods: features.file_upload?.image?.transfer_methods || ['local_file', 'remote_url'],
-      },
-      enabled: !!(features.file_upload?.enabled || features.file_upload?.image?.enabled),
-      allowed_file_types: features.file_upload?.allowed_file_types || [SupportUploadFileTypes.image],
-      allowed_file_extensions: features.file_upload?.allowed_file_extensions || FILE_EXTS[SupportUploadFileTypes.image].map(ext => `.${ext}`),
-      allowed_file_upload_methods: features.file_upload?.allowed_file_upload_methods || features.file_upload?.image?.transfer_methods || ['local_file', 'remote_url'],
-      number_limits: features.file_upload?.number_limits || features.file_upload?.image?.number_limits || 3,
-      fileUploadConfig: fileUploadConfigResponse,
-    },
-    opening: {
-      enabled: !!features.opening_statement,
-      opening_statement: features.opening_statement,
-      suggested_questions: features.suggested_questions,
-    },
-    suggested: features.suggested_questions_after_answer || { enabled: false },
-    speech2text: features.speech_to_text || { enabled: false },
-    text2speech: features.text_to_speech || { enabled: false },
-    citation: features.retriever_resource || { enabled: false },
-    moderation: features.sensitive_word_avoidance || { enabled: false },
-  }
-
-  return (
-    <WorkflowWithDefaultContext
-      edges={edgesData}
-      nodes={nodesData}
-    >
-      <FeaturesProvider features={initialFeatures}>
-        <WorkflowAppMain
-          nodes={nodesData}
-          edges={edgesData}
-          viewport={data.graph.viewport}
-        />
-      </FeaturesProvider>
-    </WorkflowWithDefaultContext>
-  )
-}
-
-const WorkflowAppWrapper = () => {
-  return (
-    <WorkflowContextProvider
-      injectWorkflowStoreSliceFn={createWorkflowSlice}
-    >
-      <WorkflowAppWithAdditionalContext />
-    </WorkflowContextProvider>
-  )
-}
-
-export default WorkflowAppWrapper
diff --git a/app/components/workflow-app/store/workflow/workflow-slice.ts b/app/components/workflow-app/store/workflow/workflow-slice.ts
deleted file mode 100644
index 77626e5..0000000
--- a/app/components/workflow-app/store/workflow/workflow-slice.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { StateCreator } from 'zustand'
-
-export type WorkflowSliceShape = {
-  appId: string
-  notInitialWorkflow: boolean
-  setNotInitialWorkflow: (notInitialWorkflow: boolean) => void
-  nodesDefaultConfigs: Record<string, any>
-  setNodesDefaultConfigs: (nodesDefaultConfigs: Record<string, any>) => void
-}
-
-export type CreateWorkflowSlice = StateCreator<WorkflowSliceShape>
-export const createWorkflowSlice: StateCreator<WorkflowSliceShape> = set => ({
-  appId: '',
-  notInitialWorkflow: false,
-  setNotInitialWorkflow: notInitialWorkflow => set(() => ({ notInitialWorkflow })),
-  nodesDefaultConfigs: {},
-  setNodesDefaultConfigs: nodesDefaultConfigs => set(() => ({ nodesDefaultConfigs })),
-})
diff --git a/app/components/workflow/block-selector/market-place-plugin/action.tsx b/app/components/workflow/block-selector/market-place-plugin/action.tsx
deleted file mode 100644
index 9c3c69d..0000000
--- a/app/components/workflow/block-selector/market-place-plugin/action.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useEffect, useRef, useState } from 'react'
-import { useTheme } from 'next-themes'
-import { useTranslation } from 'react-i18next'
-import { RiMoreFill } from '@remixicon/react'
-import ActionButton from '@/app/components/base/action-button'
-// import Button from '@/app/components/base/button'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import cn from '@/utils/classnames'
-import { MARKETPLACE_URL_PREFIX } from '@/config'
-import { useDownloadPlugin } from '@/service/use-plugins'
-import { downloadFile } from '@/utils/format'
-
-type Props = {
-  open: boolean
-  onOpenChange: (v: boolean) => void
-  author: string
-  name: string
-  version: string
-}
-
-const OperationDropdown: FC<Props> = ({
-  open,
-  onOpenChange,
-  author,
-  name,
-  version,
-}) => {
-  const { t } = useTranslation()
-  const { theme } = useTheme()
-  const openRef = useRef(open)
-  const setOpen = useCallback((v: boolean) => {
-    onOpenChange(v)
-    openRef.current = v
-  }, [onOpenChange])
-
-  const handleTrigger = useCallback(() => {
-    setOpen(!openRef.current)
-  }, [setOpen])
-
-  const [needDownload, setNeedDownload] = useState(false)
-  const { data: blob, isLoading } = useDownloadPlugin({
-    organization: author,
-    pluginName: name,
-    version,
-  }, needDownload)
-  const handleDownload = useCallback(() => {
-    if (isLoading) return
-    setNeedDownload(true)
-  }, [isLoading])
-
-  useEffect(() => {
-    if (blob) {
-      const fileName = `${author}-${name}_${version}.zip`
-      downloadFile({ data: blob, fileName })
-      setNeedDownload(false)
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [blob])
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: 0,
-        crossAxis: 0,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={handleTrigger}>
-        <ActionButton className={cn(open && 'bg-state-base-hover')}>
-          <RiMoreFill className='h-4 w-4 text-components-button-secondary-accent-text' />
-        </ActionButton>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[9999]'>
-        <div className='w-[112px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          <div onClick={handleDownload} className='system-md-regular cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'>{t('common.operation.download')}</div>
-          <a href={`${MARKETPLACE_URL_PREFIX}/plugins/${author}/${name}${theme ? `?theme=${theme}` : ''}`} target='_blank' className='system-md-regular block cursor-pointer rounded-lg px-3 py-1.5 text-text-secondary hover:bg-state-base-hover'>{t('common.operation.viewDetails')}</a>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-export default React.memo(OperationDropdown)
diff --git a/app/components/workflow/block-selector/market-place-plugin/item.tsx b/app/components/workflow/block-selector/market-place-plugin/item.tsx
deleted file mode 100644
index 4826108..0000000
--- a/app/components/workflow/block-selector/market-place-plugin/item.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useContext } from 'use-context-selector'
-import { useTranslation } from 'react-i18next'
-import Action from './action'
-import type { Plugin } from '@/app/components/plugins/types.ts'
-import InstallFromMarketplace from '@/app/components/plugins/install-plugin/install-from-marketplace'
-import I18n from '@/context/i18n'
-import cn from '@/utils/classnames'
-
-import { formatNumber } from '@/utils/format'
-import { useBoolean } from 'ahooks'
-
-enum ActionType {
-  install = 'install',
-  download = 'download',
-  // viewDetail = 'viewDetail', // wait for marketplace api
-}
-type Props = {
-  payload: Plugin
-  onAction: (type: ActionType) => void
-}
-
-const Item: FC<Props> = ({
-  payload,
-}) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = React.useState(false)
-  const { locale } = useContext(I18n)
-  const getLocalizedText = (obj: Record<string, string> | undefined) =>
-    obj?.[locale] || obj?.['en-US'] || obj?.en_US || ''
-  const [isShowInstallModal, {
-    setTrue: showInstallModal,
-    setFalse: hideInstallModal,
-  }] = useBoolean(false)
-
-  return (
-    <div className='group/plugin flex rounded-lg py-1 pl-3 pr-1 hover:bg-state-base-hover'>
-      <div
-        className='relative h-6 w-6 shrink-0 rounded-md border-[0.5px] border-components-panel-border-subtle bg-contain bg-center bg-no-repeat'
-        style={{ backgroundImage: `url(${payload.icon})` }}
-      />
-      <div className='ml-2 flex w-0 grow'>
-        <div className='w-0 grow'>
-          <div className='system-sm-medium h-4 truncate leading-4 text-text-primary '>{getLocalizedText(payload.label)}</div>
-          <div className='system-xs-regular h-5 truncate leading-5 text-text-tertiary'>{getLocalizedText(payload.brief)}</div>
-          <div className='system-xs-regular flex space-x-1 text-text-tertiary'>
-            <div>{payload.org}</div>
-            <div>路</div>
-            <div>{t('plugin.install', { num: formatNumber(payload.install_count || 0) })}</div>
-          </div>
-        </div>
-        {/* Action */}
-        <div className={cn(!open ? 'hidden' : 'flex', 'system-xs-medium  h-4 items-center space-x-1 text-components-button-secondary-accent-text group-hover/plugin:flex')}>
-          <div className='cursor-pointer px-1.5' onClick={showInstallModal}>{t('plugin.installAction')}</div>
-          <Action
-            open={open}
-            onOpenChange={setOpen}
-            author={payload.org}
-            name={payload.name}
-            version={payload.latest_version}
-          />
-        </div>
-        {isShowInstallModal && (
-          <InstallFromMarketplace
-            uniqueIdentifier={payload.latest_package_identifier}
-            manifest={payload}
-            onSuccess={hideInstallModal}
-            onClose={hideInstallModal}
-          />
-        )}
-      </div>
-    </div>
-  )
-}
-export default React.memo(Item)
diff --git a/app/components/workflow/block-selector/market-place-plugin/list.tsx b/app/components/workflow/block-selector/market-place-plugin/list.tsx
deleted file mode 100644
index 27cd2ae..0000000
--- a/app/components/workflow/block-selector/market-place-plugin/list.tsx
+++ /dev/null
@@ -1,131 +0,0 @@
-'use client'
-import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from 'react'
-import { useTranslation } from 'react-i18next'
-import useStickyScroll, { ScrollPosition } from '../use-sticky-scroll'
-import Item from './item'
-import type { Plugin } from '@/app/components/plugins/types.ts'
-import cn from '@/utils/classnames'
-import Link from 'next/link'
-import { marketplaceUrlPrefix } from '@/config'
-import { RiArrowRightUpLine, RiSearchLine } from '@remixicon/react'
-import { noop } from 'lodash-es'
-
-export type ListProps = {
-  wrapElemRef: React.RefObject<HTMLElement>
-  list: Plugin[]
-  searchText: string
-  tags: string[]
-  toolContentClassName?: string
-  disableMaxWidth?: boolean
-}
-
-export type ListRef = { handleScroll: () => void }
-
-const List = forwardRef<ListRef, ListProps>(({
-  wrapElemRef,
-  searchText,
-  tags,
-  list,
-  toolContentClassName,
-  disableMaxWidth = false,
-}, ref) => {
-  const { t } = useTranslation()
-  const hasFilter = !searchText
-  const hasRes = list.length > 0
-  const urlWithSearchText = `${marketplaceUrlPrefix}/?q=${searchText}&tags=${tags.join(',')}`
-  const nextToStickyELemRef = useRef<HTMLDivElement>(null)
-
-  const { handleScroll, scrollPosition } = useStickyScroll({
-    wrapElemRef,
-    nextToStickyELemRef,
-  })
-  const stickyClassName = useMemo(() => {
-    switch (scrollPosition) {
-      case ScrollPosition.aboveTheWrap:
-        return 'top-0 h-9 pt-3 pb-2 shadow-xs bg-components-panel-bg-blur cursor-pointer'
-      case ScrollPosition.showing:
-        return 'bottom-0 pt-3 pb-1'
-      case ScrollPosition.belowTheWrap:
-        return 'bottom-0 items-center rounded-b-xl border-t border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg rounded-b-lg cursor-pointer'
-    }
-  }, [scrollPosition])
-
-  useImperativeHandle(ref, () => ({
-    handleScroll,
-  }))
-
-  useEffect(() => {
-    handleScroll()
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [list])
-
-  const handleHeadClick = () => {
-    if (scrollPosition === ScrollPosition.belowTheWrap) {
-      nextToStickyELemRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' })
-      return
-    }
-    window.open(urlWithSearchText, '_blank')
-  }
-
-  if (hasFilter) {
-    return (
-      <Link
-        className='system-sm-medium sticky bottom-0 z-10 flex h-8 cursor-pointer items-center rounded-b-lg border-[0.5px] border-t border-components-panel-border bg-components-panel-bg-blur px-4 py-1 text-text-accent-light-mode-only shadow-lg'
-        href={`${marketplaceUrlPrefix}/`}
-        target='_blank'
-      >
-        <span>{t('plugin.findMoreInMarketplace')}</span>
-        <RiArrowRightUpLine className='ml-0.5 h-3 w-3' />
-      </Link>
-    )
-  }
-
-  const maxWidthClassName = toolContentClassName || 'max-w-[300px]'
-
-  return (
-    <>
-      {hasRes && (
-        <div
-          className={cn('system-sm-medium sticky z-10 flex h-8 cursor-pointer justify-between px-4 py-1 text-text-primary', stickyClassName, !disableMaxWidth && maxWidthClassName)}
-          onClick={handleHeadClick}
-        >
-          <span>{t('plugin.fromMarketplace')}</span>
-          <Link
-            href={urlWithSearchText}
-            target='_blank'
-            className='flex items-center text-text-accent-light-mode-only'
-            onClick={e => e.stopPropagation()}
-          >
-            <span>{t('plugin.searchInMarketplace')}</span>
-            <RiArrowRightUpLine className='ml-0.5 h-3 w-3' />
-          </Link>
-        </div>
-      )}
-      <div className={cn('p-1', !disableMaxWidth && maxWidthClassName)} ref={nextToStickyELemRef}>
-        {list.map((item, index) => (
-          <Item
-            key={index}
-            payload={item}
-            onAction={noop}
-          />
-        ))}
-        <div className='mb-3 mt-2 flex items-center justify-center space-x-2'>
-          <div className="h-[2px] w-[90px] bg-gradient-to-l from-[rgba(16,24,40,0.08)] to-[rgba(255,255,255,0.01)]"></div>
-          <Link
-            href={urlWithSearchText}
-            target='_blank'
-            className='system-sm-medium flex h-4 shrink-0 items-center text-text-accent-light-mode-only'
-          >
-            <RiSearchLine className='mr-0.5 h-3 w-3' />
-            <span>{t('plugin.searchInMarketplace')}</span>
-          </Link>
-          <div className="h-[2px] w-[90px] bg-gradient-to-l from-[rgba(255,255,255,0.01)] to-[rgba(16,24,40,0.08)]"></div>
-        </div>
-      </div>
-    </>
-  )
-})
-
-List.displayName = 'List'
-
-export default List
diff --git a/app/components/workflow/block-selector/tool-picker.tsx b/app/components/workflow/block-selector/tool-picker.tsx
deleted file mode 100644
index dbb49fd..0000000
--- a/app/components/workflow/block-selector/tool-picker.tsx
+++ /dev/null
@@ -1,176 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { useMemo, useState } from 'react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import type {
-  OffsetOptions,
-  Placement,
-} from '@floating-ui/react'
-import AllTools from '@/app/components/workflow/block-selector/all-tools'
-import type { ToolDefaultValue, ToolValue } from './types'
-import type { BlockEnum } from '@/app/components/workflow/types'
-import SearchBox from '@/app/components/plugins/marketplace/search-box'
-import { useTranslation } from 'react-i18next'
-import { useBoolean } from 'ahooks'
-import EditCustomToolModal from '@/app/components/tools/edit-custom-collection-modal/modal'
-import {
-  createCustomCollection,
-} from '@/service/tools'
-import type { CustomCollectionBackend } from '@/app/components/tools/types'
-import Toast from '@/app/components/base/toast'
-import { useAllBuiltInTools, useAllCustomTools, useAllWorkflowTools, useInvalidateAllCustomTools } from '@/service/use-tools'
-import cn from '@/utils/classnames'
-
-type Props = {
-  panelClassName?: string
-  disabled: boolean
-  trigger: React.ReactNode
-  placement?: Placement
-  offset?: OffsetOptions
-  isShow: boolean
-  onShowChange: (isShow: boolean) => void
-  onSelect: (tool: ToolDefaultValue) => void
-  supportAddCustomTool?: boolean
-  scope?: string
-  selectedTools?: ToolValue[]
-}
-
-const ToolPicker: FC<Props> = ({
-  disabled,
-  trigger,
-  placement = 'right-start',
-  offset = 0,
-  isShow,
-  onShowChange,
-  onSelect,
-  supportAddCustomTool,
-  scope = 'all',
-  selectedTools,
-  panelClassName,
-}) => {
-  const { t } = useTranslation()
-  const [searchText, setSearchText] = useState('')
-  const [tags, setTags] = useState<string[]>([])
-
-  const { data: buildInTools } = useAllBuiltInTools()
-  const { data: customTools } = useAllCustomTools()
-  const invalidateCustomTools = useInvalidateAllCustomTools()
-  const { data: workflowTools } = useAllWorkflowTools()
-
-  const { builtinToolList, customToolList, workflowToolList } = useMemo(() => {
-    if (scope === 'plugins') {
-      return {
-        builtinToolList: buildInTools,
-        customToolList: [],
-        workflowToolList: [],
-      }
-    }
-    if (scope === 'custom') {
-      return {
-        builtinToolList: [],
-        customToolList: customTools,
-        workflowToolList: [],
-      }
-    }
-    if (scope === 'workflow') {
-      return {
-        builtinToolList: [],
-        customToolList: [],
-        workflowToolList: workflowTools,
-      }
-    }
-    return {
-      builtinToolList: buildInTools,
-      customToolList: customTools,
-      workflowToolList: workflowTools,
-    }
-  }, [scope, buildInTools, customTools, workflowTools])
-
-  const handleAddedCustomTool = invalidateCustomTools
-
-  const handleTriggerClick = () => {
-    if (disabled) return
-    onShowChange(true)
-  }
-
-  const handleSelect = (_type: BlockEnum, tool?: ToolDefaultValue) => {
-    onSelect(tool!)
-  }
-
-  const [isShowEditCollectionToolModal, {
-    setFalse: hideEditCustomCollectionModal,
-    setTrue: showEditCustomCollectionModal,
-  }] = useBoolean(false)
-
-  const doCreateCustomToolCollection = async (data: CustomCollectionBackend) => {
-    await createCustomCollection(data)
-    Toast.notify({
-      type: 'success',
-      message: t('common.api.actionSuccess'),
-    })
-    hideEditCustomCollectionModal()
-    handleAddedCustomTool()
-  }
-
-  if (isShowEditCollectionToolModal) {
-    return (
-      <EditCustomToolModal
-        positionLeft
-        payload={null}
-        onHide={hideEditCustomCollectionModal}
-        onAdd={doCreateCustomToolCollection}
-      />
-    )
-  }
-
-  return (
-    <PortalToFollowElem
-      placement={placement}
-      offset={offset}
-      open={isShow}
-      onOpenChange={onShowChange}
-    >
-      <PortalToFollowElemTrigger
-        onClick={handleTriggerClick}
-      >
-        {trigger}
-      </PortalToFollowElemTrigger>
-
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className={cn('relative min-h-20 w-[356px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg backdrop-blur-sm', panelClassName)}>
-          <div className='p-2 pb-1'>
-            <SearchBox
-              search={searchText}
-              onSearchChange={setSearchText}
-              tags={tags}
-              onTagsChange={setTags}
-              size='small'
-              placeholder={t('plugin.searchTools')!}
-            />
-          </div>
-          <AllTools
-            className='mt-1'
-            toolContentClassName='max-w-[360px]'
-            tags={tags}
-            searchText={searchText}
-            onSelect={handleSelect}
-            buildInTools={builtinToolList || []}
-            customTools={customToolList || []}
-            workflowTools={workflowToolList || []}
-            supportAddCustomTool={supportAddCustomTool}
-            onAddedCustomTool={handleAddedCustomTool}
-            onShowAddCustomCollectionModal={showEditCustomCollectionModal}
-            selectedTools={selectedTools}
-          />
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default React.memo(ToolPicker)
diff --git a/app/components/workflow/block-selector/tool/action-item.tsx b/app/components/workflow/block-selector/tool/action-item.tsx
deleted file mode 100644
index dc9b9b9..0000000
--- a/app/components/workflow/block-selector/tool/action-item.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { ToolWithProvider } from '../../types'
-import { BlockEnum } from '../../types'
-import type { ToolDefaultValue } from '../types'
-import Tooltip from '@/app/components/base/tooltip'
-import type { Tool } from '@/app/components/tools/types'
-import { useGetLanguage } from '@/context/i18n'
-import BlockIcon from '../../block-icon'
-import cn from '@/utils/classnames'
-import { useTranslation } from 'react-i18next'
-import { RiCheckLine } from '@remixicon/react'
-import Badge from '@/app/components/base/badge'
-
-type Props = {
-  provider: ToolWithProvider
-  payload: Tool
-  disabled?: boolean
-  onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
-}
-
-const ToolItem: FC<Props> = ({
-  provider,
-  payload,
-  onSelect,
-  disabled,
-}) => {
-  const { t } = useTranslation()
-
-  const language = useGetLanguage()
-
-  return (
-    <Tooltip
-      key={payload.name}
-      position='right'
-      popupClassName='!p-0 !px-3 !py-2.5 !w-[200px] !leading-[18px] !text-xs !text-gray-700 !border-[0.5px] !border-black/5 !rounded-xl !shadow-lg'
-      popupContent={(
-        <div>
-          <BlockIcon
-            size='md'
-            className='mb-2'
-            type={BlockEnum.Tool}
-            toolIcon={provider.icon}
-          />
-          <div className='mb-1 text-sm leading-5 text-text-primary'>{payload.label[language]}</div>
-          <div className='text-xs leading-[18px] text-text-secondary'>{payload.description[language]}</div>
-        </div>
-      )}
-    >
-      <div
-        key={payload.name}
-        className='flex cursor-pointer items-center justify-between rounded-lg pl-[21px] pr-1 hover:bg-state-base-hover'
-        onClick={() => {
-          if (disabled) return
-          const params: Record<string, string> = {}
-          if (payload.parameters) {
-            payload.parameters.forEach((item) => {
-              params[item.name] = ''
-            })
-          }
-          onSelect(BlockEnum.Tool, {
-            provider_id: provider.id,
-            provider_type: provider.type,
-            provider_name: provider.name,
-            tool_name: payload.name,
-            tool_label: payload.label[language],
-            tool_description: payload.description[language],
-            title: payload.label[language],
-            is_team_authorization: provider.is_team_authorization,
-            output_schema: payload.output_schema,
-            paramSchemas: payload.parameters,
-            params,
-          })
-        }}
-      >
-        <div className={cn('system-sm-medium h-8 truncate border-l-2 border-divider-subtle pl-4 leading-8 text-text-secondary', disabled && 'opacity-30')}>{payload.label[language]}</div>
-        {disabled && <Badge
-          className='flex h-5 items-center space-x-0.5 text-text-tertiary'
-          uppercase
-        >
-          <RiCheckLine className='h-3 w-3 ' />
-          <div>{t('tools.addToolModal.added')}</div>
-        </Badge>
-        }
-      </div>
-    </Tooltip >
-  )
-}
-export default React.memo(ToolItem)
diff --git a/app/components/workflow/block-selector/tool/tool-list-flat-view/list.tsx b/app/components/workflow/block-selector/tool/tool-list-flat-view/list.tsx
deleted file mode 100644
index ef671ca..0000000
--- a/app/components/workflow/block-selector/tool/tool-list-flat-view/list.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { ToolWithProvider } from '../../../types'
-import type { BlockEnum } from '../../../types'
-import type { ToolDefaultValue, ToolValue } from '../../types'
-import Tool from '../tool'
-import { ViewType } from '../../view-type-select'
-import { useMemo } from 'react'
-
-type Props = {
-  payload: ToolWithProvider[]
-  isShowLetterIndex: boolean
-  hasSearchText: boolean
-  onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
-  letters: string[]
-  toolRefs: any
-  selectedTools?: ToolValue[]
-}
-
-const ToolViewFlatView: FC<Props> = ({
-  letters,
-  payload,
-  isShowLetterIndex,
-  hasSearchText,
-  onSelect,
-  toolRefs,
-  selectedTools,
-}) => {
-  const firstLetterToolIds = useMemo(() => {
-    const res: Record<string, string> = {}
-    letters.forEach((letter) => {
-      const firstToolId = payload.find(tool => tool.letter === letter)?.id
-      if (firstToolId)
-        res[firstToolId] = letter
-    })
-    return res
-  }, [payload, letters])
-  return (
-    <div>
-      {payload.map(tool => (
-        <div
-          key={tool.id}
-          ref={(el) => {
-            const letter = firstLetterToolIds[tool.id]
-            if (letter)
-              toolRefs.current[letter] = el
-          }}
-        >
-          <Tool
-            payload={tool}
-            viewType={ViewType.flat}
-            isShowLetterIndex={isShowLetterIndex}
-            hasSearchText={hasSearchText}
-            onSelect={onSelect}
-            selectedTools={selectedTools}
-          />
-        </div>
-      ))}
-    </div>
-  )
-}
-
-export default React.memo(ToolViewFlatView)
diff --git a/app/components/workflow/block-selector/tool/tool-list-tree-view/item.tsx b/app/components/workflow/block-selector/tool/tool-list-tree-view/item.tsx
deleted file mode 100644
index d6c567f..0000000
--- a/app/components/workflow/block-selector/tool/tool-list-tree-view/item.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { ToolWithProvider } from '../../../types'
-import Tool from '../tool'
-import type { BlockEnum } from '../../../types'
-import { ViewType } from '../../view-type-select'
-import type { ToolDefaultValue, ToolValue } from '../../types'
-
-type Props = {
-  groupName: string
-  toolList: ToolWithProvider[]
-  hasSearchText: boolean
-  onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
-  selectedTools?: ToolValue[]
-}
-
-const Item: FC<Props> = ({
-  groupName,
-  toolList,
-  hasSearchText,
-  onSelect,
-  selectedTools,
-}) => {
-  return (
-    <div>
-      <div className='flex h-[22px] items-center px-3 text-xs font-medium text-text-tertiary'>
-        {groupName}
-      </div>
-      <div>
-        {toolList.map((tool: ToolWithProvider) => (
-          <Tool
-            key={tool.id}
-            payload={tool}
-            viewType={ViewType.tree}
-            isShowLetterIndex={false}
-            hasSearchText={hasSearchText}
-            onSelect={onSelect}
-            selectedTools={selectedTools}
-          />
-        ))}
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(Item)
diff --git a/app/components/workflow/block-selector/tool/tool-list-tree-view/list.tsx b/app/components/workflow/block-selector/tool/tool-list-tree-view/list.tsx
deleted file mode 100644
index f3f9827..0000000
--- a/app/components/workflow/block-selector/tool/tool-list-tree-view/list.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback } from 'react'
-import type { ToolWithProvider } from '../../../types'
-import type { BlockEnum } from '../../../types'
-import type { ToolDefaultValue, ToolValue } from '../../types'
-import Item from './item'
-import { useTranslation } from 'react-i18next'
-import { AGENT_GROUP_NAME, CUSTOM_GROUP_NAME, WORKFLOW_GROUP_NAME } from '../../index-bar'
-
-type Props = {
-  payload: Record<string, ToolWithProvider[]>
-  hasSearchText: boolean
-  onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
-  selectedTools?: ToolValue[]
-}
-
-const ToolListTreeView: FC<Props> = ({
-  payload,
-  hasSearchText,
-  onSelect,
-  selectedTools,
-}) => {
-  const { t } = useTranslation()
-  const getI18nGroupName = useCallback((name: string) => {
-    if (name === CUSTOM_GROUP_NAME)
-      return t('workflow.tabs.customTool')
-
-    if (name === WORKFLOW_GROUP_NAME)
-      return t('workflow.tabs.workflowTool')
-
-    if (name === AGENT_GROUP_NAME)
-      return t('workflow.tabs.agent')
-
-    return name
-  }, [t])
-
-  if (!payload) return null
-
-  return (
-    <div>
-      {Object.keys(payload).map(groupName => (
-        <Item
-          key={groupName}
-          groupName={getI18nGroupName(groupName)}
-          toolList={payload[groupName]}
-          hasSearchText={hasSearchText}
-          onSelect={onSelect}
-          selectedTools={selectedTools}
-        />
-      ))}
-    </div>
-  )
-}
-
-export default React.memo(ToolListTreeView)
diff --git a/app/components/workflow/block-selector/tool/tool.tsx b/app/components/workflow/block-selector/tool/tool.tsx
deleted file mode 100644
index f135b5b..0000000
--- a/app/components/workflow/block-selector/tool/tool.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useEffect, useMemo } from 'react'
-import cn from '@/utils/classnames'
-import { RiArrowDownSLine, RiArrowRightSLine } from '@remixicon/react'
-import { useGetLanguage } from '@/context/i18n'
-import type { Tool as ToolType } from '../../../tools/types'
-import { CollectionType } from '../../../tools/types'
-import type { ToolWithProvider } from '../../types'
-import { BlockEnum } from '../../types'
-import type { ToolDefaultValue, ToolValue } from '../types'
-import { ViewType } from '../view-type-select'
-import ActonItem from './action-item'
-import BlockIcon from '../../block-icon'
-import { useTranslation } from 'react-i18next'
-
-type Props = {
-  className?: string
-  payload: ToolWithProvider
-  viewType: ViewType
-  isShowLetterIndex: boolean
-  hasSearchText: boolean
-  onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void
-  selectedTools?: ToolValue[]
-}
-
-const Tool: FC<Props> = ({
-  className,
-  payload,
-  viewType,
-  isShowLetterIndex,
-  hasSearchText,
-  onSelect,
-  selectedTools,
-}) => {
-  const { t } = useTranslation()
-  const language = useGetLanguage()
-  const isFlatView = viewType === ViewType.flat
-  const actions = payload.tools
-  const hasAction = true // Now always support actions
-  const [isFold, setFold] = React.useState<boolean>(true)
-  const getIsDisabled = (tool: ToolType) => {
-    if (!selectedTools || !selectedTools.length) return false
-    return selectedTools.some(selectedTool => selectedTool.provider_name === payload.name && selectedTool.tool_name === tool.name)
-  }
-  useEffect(() => {
-    if (hasSearchText && isFold) {
-      setFold(false)
-      return
-    }
-    if (!hasSearchText && !isFold)
-      setFold(true)
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [hasSearchText])
-
-  const FoldIcon = isFold ? RiArrowRightSLine : RiArrowDownSLine
-
-  const groupName = useMemo(() => {
-    if (payload.type === CollectionType.builtIn)
-      return payload.author
-
-    if (payload.type === CollectionType.custom)
-      return t('workflow.tabs.customTool')
-
-    if (payload.type === CollectionType.workflow)
-      return t('workflow.tabs.workflowTool')
-
-    return ''
-  }, [payload.author, payload.type, t])
-
-  return (
-    <div
-      key={payload.id}
-      className={cn('mb-1 last-of-type:mb-0', isShowLetterIndex && 'mr-6')}
-    >
-      <div className={cn(className)}>
-        <div
-          className='flex w-full cursor-pointer select-none items-center justify-between rounded-lg pl-3 pr-1 hover:bg-state-base-hover'
-          onClick={() => {
-            if (hasAction)
-              setFold(!isFold)
-
-            // Now always support actions
-            // if (payload.parameters) {
-            //   payload.parameters.forEach((item) => {
-            //     params[item.name] = ''
-            //   })
-            // }
-            // onSelect(BlockEnum.Tool, {
-            //   provider_id: payload.id,
-            //   provider_type: payload.type,
-            //   provider_name: payload.name,
-            //   tool_name: payload.name,
-            //   tool_label: payload.label[language],
-            //   title: payload.label[language],
-            //   params: {},
-            // })
-          }}
-        >
-          <div className='flex h-8 grow items-center'>
-            <BlockIcon
-              className='shrink-0'
-              type={BlockEnum.Tool}
-              toolIcon={payload.icon}
-            />
-            <div className='ml-2 w-0 flex-1 grow truncate text-sm text-text-primary'>{payload.label[language]}</div>
-          </div>
-
-          <div className='flex items-center'>
-            {isFlatView && (
-              <div className='system-xs-regular text-text-tertiary'>{groupName}</div>
-            )}
-            {hasAction && (
-              <FoldIcon className={cn('h-4 w-4 shrink-0 text-text-quaternary', isFold && 'text-text-tertiary')} />
-            )}
-          </div>
-        </div>
-
-        {hasAction && !isFold && (
-          actions.map(action => (
-            <ActonItem
-              key={action.name}
-              provider={payload}
-              payload={action}
-              onSelect={onSelect}
-              disabled={getIsDisabled(action)}
-            />
-          ))
-        )}
-      </div>
-    </div>
-  )
-}
-export default React.memo(Tool)
diff --git a/app/components/workflow/block-selector/use-sticky-scroll.ts b/app/components/workflow/block-selector/use-sticky-scroll.ts
deleted file mode 100644
index 405ecdb..0000000
--- a/app/components/workflow/block-selector/use-sticky-scroll.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import React from 'react'
-import { useThrottleFn } from 'ahooks'
-
-export enum ScrollPosition {
-  belowTheWrap = 'belowTheWrap',
-  showing = 'showing',
-  aboveTheWrap = 'aboveTheWrap',
-}
-
-type Params = {
-  wrapElemRef: React.RefObject<HTMLElement>
-  nextToStickyELemRef: React.RefObject<HTMLElement>
-}
-const useStickyScroll = ({
-  wrapElemRef,
-  nextToStickyELemRef,
-}: Params) => {
-  const [scrollPosition, setScrollPosition] = React.useState<ScrollPosition>(ScrollPosition.belowTheWrap)
-  const { run: handleScroll } = useThrottleFn(() => {
-    const wrapDom = wrapElemRef.current
-    const stickyDOM = nextToStickyELemRef.current
-    if (!wrapDom || !stickyDOM)
-      return
-    const { height: wrapHeight, top: wrapTop } = wrapDom.getBoundingClientRect()
-    const { top: nextToStickyTop } = stickyDOM.getBoundingClientRect()
-    let scrollPositionNew = ScrollPosition.belowTheWrap
-
-    if (nextToStickyTop - wrapTop >= wrapHeight)
-      scrollPositionNew = ScrollPosition.belowTheWrap
-    else if (nextToStickyTop <= wrapTop)
-      scrollPositionNew = ScrollPosition.aboveTheWrap
-    else
-      scrollPositionNew = ScrollPosition.showing
-
-    if (scrollPosition !== scrollPositionNew)
-      setScrollPosition(scrollPositionNew)
-  }, { wait: 100 })
-
-  return {
-    handleScroll,
-    scrollPosition,
-  }
-}
-
-export default useStickyScroll
diff --git a/app/components/workflow/block-selector/view-type-select.tsx b/app/components/workflow/block-selector/view-type-select.tsx
deleted file mode 100644
index f241257..0000000
--- a/app/components/workflow/block-selector/view-type-select.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback } from 'react'
-import { RiNodeTree, RiSortAlphabetAsc } from '@remixicon/react'
-import cn from '@/utils/classnames'
-
-export enum ViewType {
-  flat = 'flat',
-  tree = 'tree',
-}
-
-type Props = {
-  viewType: ViewType
-  onChange: (viewType: ViewType) => void
-}
-
-const ViewTypeSelect: FC<Props> = ({
-  viewType,
-  onChange,
-}) => {
-  const handleChange = useCallback((nextViewType: ViewType) => {
-    return () => {
-      if (nextViewType === viewType)
-        return
-      onChange(nextViewType)
-    }
-  }, [viewType, onChange])
-
-  return (
-    <div className='flex items-center rounded-lg bg-components-segmented-control-bg-normal p-px'>
-      <div
-        className={
-          cn('rounded-lg p-[3px]',
-            viewType === ViewType.flat
-              ? 'bg-components-segmented-control-item-active-bg text-text-accent-light-mode-only shadow-xs'
-              : 'cursor-pointer text-text-tertiary',
-          )
-        }
-        onClick={handleChange(ViewType.flat)}
-      >
-        <RiSortAlphabetAsc className='h-4 w-4' />
-      </div>
-      <div
-        className={
-          cn('rounded-lg p-[3px]',
-            viewType === ViewType.tree
-              ? 'bg-components-segmented-control-item-active-bg text-text-accent-light-mode-only shadow-xs'
-              : 'cursor-pointer text-text-tertiary',
-          )
-        }
-        onClick={handleChange(ViewType.tree)}
-      >
-        <RiNodeTree className='h-4 w-4 ' />
-      </div>
-    </div>
-  )
-}
-export default React.memo(ViewTypeSelect)
diff --git a/app/components/workflow/datasets-detail-store/provider.tsx b/app/components/workflow/datasets-detail-store/provider.tsx
deleted file mode 100644
index 7d6ede8..0000000
--- a/app/components/workflow/datasets-detail-store/provider.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import type { FC } from 'react'
-import { createContext, useCallback, useEffect, useRef } from 'react'
-import { createDatasetsDetailStore } from './store'
-import type { CommonNodeType, Node } from '../types'
-import { BlockEnum } from '../types'
-import type { KnowledgeRetrievalNodeType } from '../nodes/knowledge-retrieval/types'
-import { fetchDatasets } from '@/service/datasets'
-
-type DatasetsDetailStoreApi = ReturnType<typeof createDatasetsDetailStore>
-
-type DatasetsDetailContextType = DatasetsDetailStoreApi | undefined
-
-export const DatasetsDetailContext = createContext<DatasetsDetailContextType>(undefined)
-
-type DatasetsDetailProviderProps = {
-  nodes: Node[]
-  children: React.ReactNode
-}
-
-const DatasetsDetailProvider: FC<DatasetsDetailProviderProps> = ({
-  nodes,
-  children,
-}) => {
-  const storeRef = useRef<DatasetsDetailStoreApi>()
-
-  if (!storeRef.current)
-    storeRef.current = createDatasetsDetailStore()
-
-  const updateDatasetsDetail = useCallback(async (datasetIds: string[]) => {
-    const { data: datasetsDetail } = await fetchDatasets({ url: '/datasets', params: { page: 1, ids: datasetIds } })
-    if (datasetsDetail && datasetsDetail.length > 0)
-      storeRef.current!.getState().updateDatasetsDetail(datasetsDetail)
-  }, [])
-
-  useEffect(() => {
-    if (!storeRef.current) return
-    const knowledgeRetrievalNodes = nodes.filter(node => node.data.type === BlockEnum.KnowledgeRetrieval)
-    const allDatasetIds = knowledgeRetrievalNodes.reduce<string[]>((acc, node) => {
-      return Array.from(new Set([...acc, ...(node.data as CommonNodeType<KnowledgeRetrievalNodeType>).dataset_ids]))
-    }, [])
-    if (allDatasetIds.length === 0) return
-    updateDatasetsDetail(allDatasetIds)
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [])
-
-  return (
-    <DatasetsDetailContext.Provider value={storeRef.current!}>
-      {children}
-    </DatasetsDetailContext.Provider>
-  )
-}
-
-export default DatasetsDetailProvider
diff --git a/app/components/workflow/datasets-detail-store/store.ts b/app/components/workflow/datasets-detail-store/store.ts
deleted file mode 100644
index 4bc8c33..0000000
--- a/app/components/workflow/datasets-detail-store/store.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { useContext } from 'react'
-import { createStore, useStore } from 'zustand'
-import type { DataSet } from '@/models/datasets'
-import { DatasetsDetailContext } from './provider'
-import produce from 'immer'
-
-type DatasetsDetailStore = {
-  datasetsDetail: Record<string, DataSet>
-  updateDatasetsDetail: (datasetsDetail: DataSet[]) => void
-}
-
-export const createDatasetsDetailStore = () => {
-  return createStore<DatasetsDetailStore>((set, get) => ({
-    datasetsDetail: {},
-    updateDatasetsDetail: (datasets: DataSet[]) => {
-      const oldDatasetsDetail = get().datasetsDetail
-      const datasetsDetail = datasets.reduce<Record<string, DataSet>>((acc, dataset) => {
-        acc[dataset.id] = dataset
-        return acc
-      }, {})
-      // Merge new datasets detail into old one
-      const newDatasetsDetail = produce(oldDatasetsDetail, (draft) => {
-        Object.entries(datasetsDetail).forEach(([key, value]) => {
-          draft[key] = value
-        })
-      })
-      set({ datasetsDetail: newDatasetsDetail })
-    },
-  }))
-}
-
-export const useDatasetsDetailStore = <T>(selector: (state: DatasetsDetailStore) => T): T => {
-  const store = useContext(DatasetsDetailContext)
-  if (!store)
-    throw new Error('Missing DatasetsDetailContext.Provider in the tree')
-
-  return useStore(store, selector)
-}
diff --git a/app/components/workflow/header/header-in-normal.tsx b/app/components/workflow/header/header-in-normal.tsx
deleted file mode 100644
index ec016b1..0000000
--- a/app/components/workflow/header/header-in-normal.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import {
-  useCallback,
-} from 'react'
-import { useNodes } from 'reactflow'
-import {
-  useStore,
-  useWorkflowStore,
-} from '../store'
-import type { StartNodeType } from '../nodes/start/types'
-import {
-  useNodesInteractions,
-  useNodesReadOnly,
-  useWorkflowRun,
-} from '../hooks'
-import Divider from '../../base/divider'
-import RunAndHistory from './run-and-history'
-import EditingTitle from './editing-title'
-import EnvButton from './env-button'
-import VersionHistoryButton from './version-history-button'
-
-export type HeaderInNormalProps = {
-  components?: {
-    left?: React.ReactNode
-    middle?: React.ReactNode
-  }
-}
-const HeaderInNormal = ({
-  components,
-}: HeaderInNormalProps) => {
-  const workflowStore = useWorkflowStore()
-  const { nodesReadOnly } = useNodesReadOnly()
-  const { handleNodeSelect } = useNodesInteractions()
-  const setShowWorkflowVersionHistoryPanel = useStore(s => s.setShowWorkflowVersionHistoryPanel)
-  const setShowEnvPanel = useStore(s => s.setShowEnvPanel)
-  const setShowDebugAndPreviewPanel = useStore(s => s.setShowDebugAndPreviewPanel)
-  const nodes = useNodes<StartNodeType>()
-  const selectedNode = nodes.find(node => node.data.selected)
-  const { handleBackupDraft } = useWorkflowRun()
-
-  const onStartRestoring = useCallback(() => {
-    workflowStore.setState({ isRestoring: true })
-    handleBackupDraft()
-    // clear right panel
-    if (selectedNode)
-      handleNodeSelect(selectedNode.id, true)
-    setShowWorkflowVersionHistoryPanel(true)
-    setShowEnvPanel(false)
-    setShowDebugAndPreviewPanel(false)
-  }, [handleBackupDraft, workflowStore, handleNodeSelect, selectedNode,
-    setShowWorkflowVersionHistoryPanel, setShowEnvPanel, setShowDebugAndPreviewPanel])
-
-  return (
-    <>
-      <div>
-        <EditingTitle />
-      </div>
-      <div className='flex items-center gap-2'>
-        {components?.left}
-        <EnvButton disabled={nodesReadOnly} />
-        <Divider type='vertical' className='mx-auto h-3.5' />
-        <RunAndHistory />
-        {components?.middle}
-        <VersionHistoryButton onClick={onStartRestoring} />
-      </div>
-    </>
-  )
-}
-
-export default HeaderInNormal
diff --git a/app/components/workflow/header/header-in-restoring.tsx b/app/components/workflow/header/header-in-restoring.tsx
deleted file mode 100644
index 4d19545..0000000
--- a/app/components/workflow/header/header-in-restoring.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-import {
-  useCallback,
-} from 'react'
-import { RiHistoryLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import {
-  useStore,
-  useWorkflowStore,
-} from '../store'
-import {
-  WorkflowVersion,
-} from '../types'
-import {
-  useNodesSyncDraft,
-  useWorkflowRun,
-} from '../hooks'
-import Toast from '../../base/toast'
-import RestoringTitle from './restoring-title'
-import Button from '@/app/components/base/button'
-
-export type HeaderInRestoringProps = {
-  onRestoreSettled?: () => void
-}
-const HeaderInRestoring = ({
-  onRestoreSettled,
-}: HeaderInRestoringProps) => {
-  const { t } = useTranslation()
-  const workflowStore = useWorkflowStore()
-  const currentVersion = useStore(s => s.currentVersion)
-  const setShowWorkflowVersionHistoryPanel = useStore(s => s.setShowWorkflowVersionHistoryPanel)
-
-  const {
-    handleLoadBackupDraft,
-  } = useWorkflowRun()
-  const { handleSyncWorkflowDraft } = useNodesSyncDraft()
-
-  const handleCancelRestore = useCallback(() => {
-    handleLoadBackupDraft()
-    workflowStore.setState({ isRestoring: false })
-    setShowWorkflowVersionHistoryPanel(false)
-  }, [workflowStore, handleLoadBackupDraft, setShowWorkflowVersionHistoryPanel])
-
-  const handleRestore = useCallback(() => {
-    setShowWorkflowVersionHistoryPanel(false)
-    workflowStore.setState({ isRestoring: false })
-    workflowStore.setState({ backupDraft: undefined })
-    handleSyncWorkflowDraft(true, false, {
-      onSuccess: () => {
-        Toast.notify({
-          type: 'success',
-          message: t('workflow.versionHistory.action.restoreSuccess'),
-        })
-      },
-      onError: () => {
-        Toast.notify({
-          type: 'error',
-          message: t('workflow.versionHistory.action.restoreFailure'),
-        })
-      },
-      onSettled: () => {
-        onRestoreSettled?.()
-      },
-    })
-  }, [handleSyncWorkflowDraft, workflowStore, setShowWorkflowVersionHistoryPanel, onRestoreSettled, t])
-
-  return (
-    <>
-      <div>
-        <RestoringTitle />
-      </div>
-      <div className='flex items-center justify-end gap-x-2'>
-        <Button
-          onClick={handleRestore}
-          disabled={!currentVersion || currentVersion.version === WorkflowVersion.Draft}
-          variant='primary'
-        >
-          {t('workflow.common.restore')}
-        </Button>
-        <Button
-          className='text-components-button-secondary-accent-text'
-          onClick={handleCancelRestore}
-        >
-          <div className='flex items-center gap-x-0.5'>
-            <RiHistoryLine className='h-4 w-4' />
-            <span className='px-0.5'>{t('workflow.common.exitVersions')}</span>
-          </div>
-        </Button>
-      </div>
-    </>
-  )
-}
-
-export default HeaderInRestoring
diff --git a/app/components/workflow/header/header-in-view-history.tsx b/app/components/workflow/header/header-in-view-history.tsx
deleted file mode 100644
index 81858cc..0000000
--- a/app/components/workflow/header/header-in-view-history.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import {
-  useCallback,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  useWorkflowStore,
-} from '../store'
-import {
-  useWorkflowRun,
-} from '../hooks'
-import Divider from '../../base/divider'
-import RunningTitle from './running-title'
-import ViewHistory from './view-history'
-import Button from '@/app/components/base/button'
-import { ArrowNarrowLeft } from '@/app/components/base/icons/src/vender/line/arrows'
-
-const HeaderInHistory = () => {
-  const { t } = useTranslation()
-  const workflowStore = useWorkflowStore()
-
-  const {
-    handleLoadBackupDraft,
-  } = useWorkflowRun()
-
-  const handleGoBackToEdit = useCallback(() => {
-    handleLoadBackupDraft()
-    workflowStore.setState({ historyWorkflowData: undefined })
-  }, [workflowStore, handleLoadBackupDraft])
-
-  return (
-    <>
-      <div>
-        <RunningTitle />
-      </div>
-      <div className='flex items-center space-x-2'>
-        <ViewHistory withText />
-        <Divider type='vertical' className='mx-auto h-3.5' />
-        <Button
-          variant='primary'
-          onClick={handleGoBackToEdit}
-        >
-          <ArrowNarrowLeft className='mr-1 h-4 w-4' />
-          {t('workflow.common.goBackToEdit')}
-        </Button>
-      </div>
-    </>
-  )
-}
-
-export default HeaderInHistory
diff --git a/app/components/workflow/header/version-history-button.tsx b/app/components/workflow/header/version-history-button.tsx
deleted file mode 100644
index 5a84205..0000000
--- a/app/components/workflow/header/version-history-button.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import React, { type FC, useCallback } from 'react'
-import { RiHistoryLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { useKeyPress } from 'ahooks'
-import Button from '../../base/button'
-import Tooltip from '../../base/tooltip'
-import { getKeyboardKeyCodeBySystem } from '../utils'
-
-type VersionHistoryButtonProps = {
-  onClick: () => Promise<unknown> | unknown
-}
-
-const VERSION_HISTORY_SHORTCUT = ['鈱�', '鈬�', 'H']
-
-const PopupContent = React.memo(() => {
-  const { t } = useTranslation()
-  return (
-    <div className='flex items-center gap-x-1'>
-      <div className='system-xs-medium px-0.5 text-text-secondary'>
-        {t('workflow.common.versionHistory')}
-      </div>
-      <div className='flex items-center gap-x-0.5'>
-        {VERSION_HISTORY_SHORTCUT.map(key => (
-          <span
-            key={key}
-            className='system-kbd rounded-[4px] bg-components-kbd-bg-white px-[1px] text-text-tertiary'
-          >
-            {key}
-          </span>
-        ))}
-      </div>
-    </div>
-  )
-})
-
-PopupContent.displayName = 'PopupContent'
-
-const VersionHistoryButton: FC<VersionHistoryButtonProps> = ({
-  onClick,
-}) => {
-  const handleViewVersionHistory = useCallback(async () => {
-    await onClick?.()
-  }, [onClick])
-
-  useKeyPress(`${getKeyboardKeyCodeBySystem('ctrl')}.shift.h`, (e) => {
-    e.preventDefault()
-    handleViewVersionHistory()
-  },
-  { exactMatch: true, useCapture: true })
-
-  return <Tooltip
-    popupContent={<PopupContent />}
-    noDecoration
-    popupClassName='rounded-lg border-[0.5px] border-components-panel-border bg-components-tooltip-bg
-    shadow-lg shadow-shadow-shadow-5 backdrop-blur-[5px] p-1.5'
-  >
-    <Button
-      className={'p-2'}
-      onClick={handleViewVersionHistory}
-    >
-      <RiHistoryLine className='h-4 w-4 text-components-button-secondary-text' />
-    </Button>
-  </Tooltip>
-}
-
-export default VersionHistoryButton
diff --git a/app/components/workflow/hooks-store/index.ts b/app/components/workflow/hooks-store/index.ts
deleted file mode 100644
index 40b4132..0000000
--- a/app/components/workflow/hooks-store/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './provider'
-export * from './store'
diff --git a/app/components/workflow/hooks-store/provider.tsx b/app/components/workflow/hooks-store/provider.tsx
deleted file mode 100644
index c1090ae..0000000
--- a/app/components/workflow/hooks-store/provider.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import {
-  createContext,
-  useEffect,
-  useRef,
-} from 'react'
-import { useStore } from 'reactflow'
-import {
-  createHooksStore,
-} from './store'
-import type { Shape } from './store'
-
-type HooksStore = ReturnType<typeof createHooksStore>
-export const HooksStoreContext = createContext<HooksStore | null | undefined>(null)
-type HooksStoreContextProviderProps = Partial<Shape> & {
-  children: React.ReactNode
-}
-export const HooksStoreContextProvider = ({ children, ...restProps }: HooksStoreContextProviderProps) => {
-  const storeRef = useRef<HooksStore | undefined>(undefined)
-  const d3Selection = useStore(s => s.d3Selection)
-  const d3Zoom = useStore(s => s.d3Zoom)
-
-  useEffect(() => {
-    if (storeRef.current && d3Selection && d3Zoom)
-      storeRef.current.getState().refreshAll(restProps)
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [d3Selection, d3Zoom])
-
-  if (!storeRef.current)
-    storeRef.current = createHooksStore(restProps)
-
-  return (
-    <HooksStoreContext.Provider value={storeRef.current}>
-      {children}
-    </HooksStoreContext.Provider>
-  )
-}
diff --git a/app/components/workflow/hooks-store/store.ts b/app/components/workflow/hooks-store/store.ts
deleted file mode 100644
index 9f5e1a6..0000000
--- a/app/components/workflow/hooks-store/store.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { useContext } from 'react'
-import {
-  noop,
-} from 'lodash-es'
-import {
-  useStore as useZustandStore,
-} from 'zustand'
-import { createStore } from 'zustand/vanilla'
-import { HooksStoreContext } from './provider'
-
-type CommonHooksFnMap = {
-  doSyncWorkflowDraft: (
-    notRefreshWhenSyncError?: boolean,
-    callback?: {
-      onSuccess?: () => void
-      onError?: () => void
-      onSettled?: () => void
-    }
-  ) => Promise<void>
-  syncWorkflowDraftWhenPageClose: () => void
-  handleRefreshWorkflowDraft: () => void
-  handleBackupDraft: () => void
-  handleLoadBackupDraft: () => void
-  handleRestoreFromPublishedWorkflow: (...args: any[]) => void
-  handleRun: (...args: any[]) => void
-  handleStopRun: (...args: any[]) => void
-  handleStartWorkflowRun: () => void
-  handleWorkflowStartRunInWorkflow: () => void
-  handleWorkflowStartRunInChatflow: () => void
-}
-
-export type Shape = {
-  refreshAll: (props: Partial<CommonHooksFnMap>) => void
-} & CommonHooksFnMap
-
-export const createHooksStore = ({
-  doSyncWorkflowDraft = async () => noop(),
-  syncWorkflowDraftWhenPageClose = noop,
-  handleRefreshWorkflowDraft = noop,
-  handleBackupDraft = noop,
-  handleLoadBackupDraft = noop,
-  handleRestoreFromPublishedWorkflow = noop,
-  handleRun = noop,
-  handleStopRun = noop,
-  handleStartWorkflowRun = noop,
-  handleWorkflowStartRunInWorkflow = noop,
-  handleWorkflowStartRunInChatflow = noop,
-}: Partial<Shape>) => {
-  return createStore<Shape>(set => ({
-    refreshAll: props => set(state => ({ ...state, ...props })),
-    doSyncWorkflowDraft,
-    syncWorkflowDraftWhenPageClose,
-    handleRefreshWorkflowDraft,
-    handleBackupDraft,
-    handleLoadBackupDraft,
-    handleRestoreFromPublishedWorkflow,
-    handleRun,
-    handleStopRun,
-    handleStartWorkflowRun,
-    handleWorkflowStartRunInWorkflow,
-    handleWorkflowStartRunInChatflow,
-  }))
-}
-
-export function useHooksStore<T>(selector: (state: Shape) => T): T {
-  const store = useContext(HooksStoreContext)
-  if (!store)
-    throw new Error('Missing HooksStoreContext.Provider in the tree')
-
-  return useZustandStore(store, selector)
-}
-
-export const useHooksStoreApi = () => {
-  return useContext(HooksStoreContext)!
-}
diff --git a/app/components/workflow/hooks/use-edges-interactions-without-sync.ts b/app/components/workflow/hooks/use-edges-interactions-without-sync.ts
deleted file mode 100644
index c4c709c..0000000
--- a/app/components/workflow/hooks/use-edges-interactions-without-sync.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import { useStoreApi } from 'reactflow'
-
-export const useEdgesInteractionsWithoutSync = () => {
-  const store = useStoreApi()
-
-  const handleEdgeCancelRunningStatus = useCallback(() => {
-    const {
-      edges,
-      setEdges,
-    } = store.getState()
-
-    const newEdges = produce(edges, (draft) => {
-      draft.forEach((edge) => {
-        edge.data._sourceRunningStatus = undefined
-        edge.data._targetRunningStatus = undefined
-        edge.data._waitingRun = false
-      })
-    })
-    setEdges(newEdges)
-  }, [store])
-
-  return {
-    handleEdgeCancelRunningStatus,
-  }
-}
diff --git a/app/components/workflow/hooks/use-format-time-from-now.ts b/app/components/workflow/hooks/use-format-time-from-now.ts
deleted file mode 100644
index b2b5215..0000000
--- a/app/components/workflow/hooks/use-format-time-from-now.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import dayjs from 'dayjs'
-import { useCallback } from 'react'
-import { useI18N } from '@/context/i18n'
-
-export const useFormatTimeFromNow = () => {
-  const { locale } = useI18N()
-  const formatTimeFromNow = useCallback((time: number) => {
-    return dayjs(time).locale(locale === 'zh-Hans' ? 'zh-cn' : locale).fromNow()
-  }, [locale])
-
-  return { formatTimeFromNow }
-}
diff --git a/app/components/workflow/hooks/use-nodes-interactions-without-sync.ts b/app/components/workflow/hooks/use-nodes-interactions-without-sync.ts
deleted file mode 100644
index 7fbf0ce..0000000
--- a/app/components/workflow/hooks/use-nodes-interactions-without-sync.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import { useStoreApi } from 'reactflow'
-
-export const useNodesInteractionsWithoutSync = () => {
-  const store = useStoreApi()
-
-  const handleNodeCancelRunningStatus = useCallback(() => {
-    const {
-      getNodes,
-      setNodes,
-    } = store.getState()
-
-    const nodes = getNodes()
-    const newNodes = produce(nodes, (draft) => {
-      draft.forEach((node) => {
-        node.data._runningStatus = undefined
-        node.data._waitingRun = false
-      })
-    })
-    setNodes(newNodes)
-  }, [store])
-
-  return {
-    handleNodeCancelRunningStatus,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-refresh-draft.ts b/app/components/workflow/hooks/use-workflow-refresh-draft.ts
deleted file mode 100644
index 1948bd4..0000000
--- a/app/components/workflow/hooks/use-workflow-refresh-draft.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useHooksStore } from '@/app/components/workflow/hooks-store'
-
-export const useWorkflowRefreshDraft = () => {
-  const handleRefreshWorkflowDraft = useHooksStore(s => s.handleRefreshWorkflowDraft)
-
-  return {
-    handleRefreshWorkflowDraft,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/index.ts b/app/components/workflow/hooks/use-workflow-run-event/index.ts
deleted file mode 100644
index 67bc6c1..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/index.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export * from './use-workflow-started'
-export * from './use-workflow-finished'
-export * from './use-workflow-failed'
-export * from './use-workflow-node-started'
-export * from './use-workflow-node-finished'
-export * from './use-workflow-node-iteration-started'
-export * from './use-workflow-node-iteration-next'
-export * from './use-workflow-node-iteration-finished'
-export * from './use-workflow-node-loop-started'
-export * from './use-workflow-node-loop-next'
-export * from './use-workflow-node-loop-finished'
-export * from './use-workflow-node-retry'
-export * from './use-workflow-text-chunk'
-export * from './use-workflow-text-replace'
-export * from './use-workflow-agent-log'
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-agent-log.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-agent-log.ts
deleted file mode 100644
index 9a9fa62..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-agent-log.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import type { AgentLogResponse } from '@/types/workflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowAgentLog = () => {
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowAgentLog = useCallback((params: AgentLogResponse) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      const currentIndex = draft.tracing!.findIndex(item => item.node_id === data.node_id)
-      if (currentIndex > -1) {
-        const current = draft.tracing![currentIndex]
-
-        if (current.execution_metadata) {
-          if (current.execution_metadata.agent_log) {
-            const currentLogIndex = current.execution_metadata.agent_log.findIndex(log => log.id === data.id)
-            if (currentLogIndex > -1) {
-              current.execution_metadata.agent_log[currentLogIndex] = {
-                ...current.execution_metadata.agent_log[currentLogIndex],
-                ...data,
-              }
-            }
-            else {
-              current.execution_metadata.agent_log.push(data)
-            }
-          }
-          else {
-            current.execution_metadata.agent_log = [data]
-          }
-        }
-        else {
-          current.execution_metadata = {
-            agent_log: [data],
-          } as any
-        }
-      }
-    }))
-  }, [workflowStore])
-
-  return {
-    handleWorkflowAgentLog,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-failed.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-failed.ts
deleted file mode 100644
index 733f015..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-failed.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-import { WorkflowRunningStatus } from '@/app/components/workflow/types'
-
-export const useWorkflowFailed = () => {
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowFailed = useCallback(() => {
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.result = {
-        ...draft.result,
-        status: WorkflowRunningStatus.Failed,
-      }
-    }))
-  }, [workflowStore])
-
-  return {
-    handleWorkflowFailed,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-finished.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-finished.ts
deleted file mode 100644
index f447031..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-finished.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import type { WorkflowFinishedResponse } from '@/types/workflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-import { getFilesInLogs } from '@/app/components/base/file-uploader/utils'
-
-export const useWorkflowFinished = () => {
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowFinished = useCallback((params: WorkflowFinishedResponse) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-
-    const isStringOutput = data.outputs && Object.keys(data.outputs).length === 1 && typeof data.outputs[Object.keys(data.outputs)[0]] === 'string'
-
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.result = {
-        ...draft.result,
-        ...data,
-        files: getFilesInLogs(data.outputs),
-      } as any
-      if (isStringOutput) {
-        draft.resultTabActive = true
-        draft.resultText = data.outputs[Object.keys(data.outputs)[0]]
-      }
-    }))
-  }, [workflowStore])
-
-  return {
-    handleWorkflowFinished,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-finished.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-finished.ts
deleted file mode 100644
index 85382e5..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-finished.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-import { useCallback } from 'react'
-import { useStoreApi } from 'reactflow'
-import produce from 'immer'
-import type { NodeFinishedResponse } from '@/types/workflow'
-import {
-  BlockEnum,
-  NodeRunningStatus,
-} from '@/app/components/workflow/types'
-import { ErrorHandleTypeEnum } from '@/app/components/workflow/nodes/_base/components/error-handle/types'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowNodeFinished = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowNodeFinished = useCallback((params: NodeFinishedResponse) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-    const {
-      getNodes,
-      setNodes,
-      edges,
-      setEdges,
-    } = store.getState()
-    const nodes = getNodes()
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      const currentIndex = draft.tracing!.findIndex(item => item.id === data.id)
-      if (currentIndex > -1) {
-        draft.tracing![currentIndex] = {
-          ...draft.tracing![currentIndex],
-          ...data,
-        }
-      }
-    }))
-
-    const newNodes = produce(nodes, (draft) => {
-      const currentNode = draft.find(node => node.id === data.node_id)!
-      currentNode.data._runningStatus = data.status
-      if (data.status === NodeRunningStatus.Exception) {
-        if (data.execution_metadata?.error_strategy === ErrorHandleTypeEnum.failBranch)
-          currentNode.data._runningBranchId = ErrorHandleTypeEnum.failBranch
-      }
-      else {
-        if (data.node_type === BlockEnum.IfElse)
-          currentNode.data._runningBranchId = data?.outputs?.selected_case_id
-
-        if (data.node_type === BlockEnum.QuestionClassifier)
-          currentNode.data._runningBranchId = data?.outputs?.class_id
-      }
-    })
-    setNodes(newNodes)
-    const newEdges = produce(edges, (draft) => {
-      const incomeEdges = draft.filter((edge) => {
-        return edge.target === data.node_id
-      })
-      incomeEdges.forEach((edge) => {
-        edge.data = {
-          ...edge.data,
-          _targetRunningStatus: data.status,
-        }
-      })
-    })
-    setEdges(newEdges)
-  }, [store, workflowStore])
-
-  return {
-    handleWorkflowNodeFinished,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-finished.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-finished.ts
deleted file mode 100644
index 7da8665..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-finished.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { useCallback } from 'react'
-import { useStoreApi } from 'reactflow'
-import produce from 'immer'
-import type { IterationFinishedResponse } from '@/types/workflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-import { DEFAULT_ITER_TIMES } from '@/app/components/workflow/constants'
-
-export const useWorkflowNodeIterationFinished = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowNodeIterationFinished = useCallback((params: IterationFinishedResponse) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-      setIterTimes,
-    } = workflowStore.getState()
-    const {
-      getNodes,
-      setNodes,
-      edges,
-      setEdges,
-    } = store.getState()
-    const nodes = getNodes()
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      const currentIndex = draft.tracing!.findIndex(item => item.id === data.id)
-
-      if (currentIndex > -1) {
-        draft.tracing![currentIndex] = {
-          ...draft.tracing![currentIndex],
-          ...data,
-        }
-      }
-    }))
-    setIterTimes(DEFAULT_ITER_TIMES)
-    const newNodes = produce(nodes, (draft) => {
-      const currentNode = draft.find(node => node.id === data.node_id)!
-
-      currentNode.data._runningStatus = data.status
-    })
-    setNodes(newNodes)
-    const newEdges = produce(edges, (draft) => {
-      const incomeEdges = draft.filter((edge) => {
-        return edge.target === data.node_id
-      })
-      incomeEdges.forEach((edge) => {
-        edge.data = {
-          ...edge.data,
-          _targetRunningStatus: data.status,
-        }
-      })
-    })
-    setEdges(newEdges)
-  }, [workflowStore, store])
-
-  return {
-    handleWorkflowNodeIterationFinished,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-next.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-next.ts
deleted file mode 100644
index 454f822..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-next.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useCallback } from 'react'
-import { useStoreApi } from 'reactflow'
-import produce from 'immer'
-import type { IterationNextResponse } from '@/types/workflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowNodeIterationNext = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowNodeIterationNext = useCallback((params: IterationNextResponse) => {
-    const {
-      iterTimes,
-      setIterTimes,
-    } = workflowStore.getState()
-
-    const { data } = params
-    const {
-      getNodes,
-      setNodes,
-    } = store.getState()
-
-    const nodes = getNodes()
-    const newNodes = produce(nodes, (draft) => {
-      const currentNode = draft.find(node => node.id === data.node_id)!
-      currentNode.data._iterationIndex = iterTimes
-      setIterTimes(iterTimes + 1)
-    })
-    setNodes(newNodes)
-  }, [workflowStore, store])
-
-  return {
-    handleWorkflowNodeIterationNext,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-started.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-started.ts
deleted file mode 100644
index 0308f62..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-iteration-started.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import { useCallback } from 'react'
-import {
-  useReactFlow,
-  useStoreApi,
-} from 'reactflow'
-import produce from 'immer'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-import type { IterationStartedResponse } from '@/types/workflow'
-import { NodeRunningStatus } from '@/app/components/workflow/types'
-import { DEFAULT_ITER_TIMES } from '@/app/components/workflow/constants'
-
-export const useWorkflowNodeIterationStarted = () => {
-  const store = useStoreApi()
-  const reactflow = useReactFlow()
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowNodeIterationStarted = useCallback((
-    params: IterationStartedResponse,
-    containerParams: {
-      clientWidth: number,
-      clientHeight: number,
-    },
-  ) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-      setIterTimes,
-    } = workflowStore.getState()
-    const {
-      getNodes,
-      setNodes,
-      edges,
-      setEdges,
-      transform,
-    } = store.getState()
-    const nodes = getNodes()
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.tracing!.push({
-        ...data,
-        status: NodeRunningStatus.Running,
-      })
-    }))
-    setIterTimes(DEFAULT_ITER_TIMES)
-
-    const {
-      setViewport,
-    } = reactflow
-    const currentNodeIndex = nodes.findIndex(node => node.id === data.node_id)
-    const currentNode = nodes[currentNodeIndex]
-    const position = currentNode.position
-    const zoom = transform[2]
-
-    if (!currentNode.parentId) {
-      setViewport({
-        x: (containerParams.clientWidth - 400 - currentNode.width! * zoom) / 2 - position.x * zoom,
-        y: (containerParams.clientHeight - currentNode.height! * zoom) / 2 - position.y * zoom,
-        zoom: transform[2],
-      })
-    }
-    const newNodes = produce(nodes, (draft) => {
-      draft[currentNodeIndex].data._runningStatus = NodeRunningStatus.Running
-      draft[currentNodeIndex].data._iterationLength = data.metadata.iterator_length
-      draft[currentNodeIndex].data._waitingRun = false
-    })
-    setNodes(newNodes)
-    const newEdges = produce(edges, (draft) => {
-      const incomeEdges = draft.filter(edge => edge.target === data.node_id)
-
-      incomeEdges.forEach((edge) => {
-        edge.data = {
-          ...edge.data,
-          _sourceRunningStatus: nodes.find(node => node.id === edge.source)!.data._runningStatus,
-          _targetRunningStatus: NodeRunningStatus.Running,
-          _waitingRun: false,
-        }
-      })
-    })
-    setEdges(newEdges)
-  }, [workflowStore, store, reactflow])
-
-  return {
-    handleWorkflowNodeIterationStarted,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-finished.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-finished.ts
deleted file mode 100644
index 5b6c7f0..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-finished.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { useCallback } from 'react'
-import { useStoreApi } from 'reactflow'
-import produce from 'immer'
-import type { LoopFinishedResponse } from '@/types/workflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowNodeLoopFinished = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowNodeLoopFinished = useCallback((params: LoopFinishedResponse) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-    const {
-      getNodes,
-      setNodes,
-      edges,
-      setEdges,
-    } = store.getState()
-    const nodes = getNodes()
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      const currentIndex = draft.tracing!.findIndex(item => item.id === data.id)
-
-      if (currentIndex > -1) {
-        draft.tracing![currentIndex] = {
-          ...draft.tracing![currentIndex],
-          ...data,
-        }
-      }
-    }))
-    const newNodes = produce(nodes, (draft) => {
-      const currentNode = draft.find(node => node.id === data.node_id)!
-
-      currentNode.data._runningStatus = data.status
-    })
-    setNodes(newNodes)
-    const newEdges = produce(edges, (draft) => {
-      const incomeEdges = draft.filter((edge) => {
-        return edge.target === data.node_id
-      })
-      incomeEdges.forEach((edge) => {
-        edge.data = {
-          ...edge.data,
-          _targetRunningStatus: data.status,
-        }
-      })
-    })
-    setEdges(newEdges)
-  }, [workflowStore, store])
-
-  return {
-    handleWorkflowNodeLoopFinished,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-next.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-next.ts
deleted file mode 100644
index 8525e28..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-next.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useCallback } from 'react'
-import { useStoreApi } from 'reactflow'
-import produce from 'immer'
-import type { LoopNextResponse } from '@/types/workflow'
-import { NodeRunningStatus } from '@/app/components/workflow/types'
-
-export const useWorkflowNodeLoopNext = () => {
-  const store = useStoreApi()
-
-  const handleWorkflowNodeLoopNext = useCallback((params: LoopNextResponse) => {
-    const { data } = params
-    const {
-      getNodes,
-      setNodes,
-    } = store.getState()
-
-    const nodes = getNodes()
-    const newNodes = produce(nodes, (draft) => {
-      const currentNode = draft.find(node => node.id === data.node_id)!
-      currentNode.data._loopIndex = data.index
-
-      draft.forEach((node) => {
-        if (node.parentId === data.node_id) {
-          node.data._waitingRun = true
-          node.data._runningStatus = NodeRunningStatus.Waiting
-        }
-      })
-    })
-    setNodes(newNodes)
-  }, [store])
-
-  return {
-    handleWorkflowNodeLoopNext,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-started.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-started.ts
deleted file mode 100644
index 1745f43..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-loop-started.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import { useCallback } from 'react'
-import {
-  useReactFlow,
-  useStoreApi,
-} from 'reactflow'
-import produce from 'immer'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-import type { LoopStartedResponse } from '@/types/workflow'
-import { NodeRunningStatus } from '@/app/components/workflow/types'
-
-export const useWorkflowNodeLoopStarted = () => {
-  const store = useStoreApi()
-  const reactflow = useReactFlow()
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowNodeLoopStarted = useCallback((
-    params: LoopStartedResponse,
-    containerParams: {
-      clientWidth: number,
-      clientHeight: number,
-    },
-  ) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-    const {
-      getNodes,
-      setNodes,
-      edges,
-      setEdges,
-      transform,
-    } = store.getState()
-    const nodes = getNodes()
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.tracing!.push({
-        ...data,
-        status: NodeRunningStatus.Running,
-      })
-    }))
-
-    const {
-      setViewport,
-    } = reactflow
-    const currentNodeIndex = nodes.findIndex(node => node.id === data.node_id)
-    const currentNode = nodes[currentNodeIndex]
-    const position = currentNode.position
-    const zoom = transform[2]
-
-    if (!currentNode.parentId) {
-      setViewport({
-        x: (containerParams.clientWidth - 400 - currentNode.width! * zoom) / 2 - position.x * zoom,
-        y: (containerParams.clientHeight - currentNode.height! * zoom) / 2 - position.y * zoom,
-        zoom: transform[2],
-      })
-    }
-    const newNodes = produce(nodes, (draft) => {
-      draft[currentNodeIndex].data._runningStatus = NodeRunningStatus.Running
-      draft[currentNodeIndex].data._loopLength = data.metadata.loop_length
-      draft[currentNodeIndex].data._waitingRun = false
-    })
-    setNodes(newNodes)
-    const newEdges = produce(edges, (draft) => {
-      const incomeEdges = draft.filter(edge => edge.target === data.node_id)
-
-      incomeEdges.forEach((edge) => {
-        edge.data = {
-          ...edge.data,
-          _sourceRunningStatus: nodes.find(node => node.id === edge.source)!.data._runningStatus,
-          _targetRunningStatus: NodeRunningStatus.Running,
-          _waitingRun: false,
-        }
-      })
-    })
-    setEdges(newEdges)
-  }, [workflowStore, store, reactflow])
-
-  return {
-    handleWorkflowNodeLoopStarted,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-retry.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-retry.ts
deleted file mode 100644
index a57bfbc..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-retry.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { useCallback } from 'react'
-import { useStoreApi } from 'reactflow'
-import produce from 'immer'
-import type {
-  NodeFinishedResponse,
-} from '@/types/workflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowNodeRetry = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowNodeRetry = useCallback((params: NodeFinishedResponse) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-    const {
-      getNodes,
-      setNodes,
-    } = store.getState()
-
-    const nodes = getNodes()
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.tracing!.push(data)
-    }))
-    const newNodes = produce(nodes, (draft) => {
-      const currentNode = draft.find(node => node.id === data.node_id)!
-
-      currentNode.data._retryIndex = data.retry_index
-    })
-    setNodes(newNodes)
-  }, [workflowStore, store])
-
-  return {
-    handleWorkflowNodeRetry,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-started.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-started.ts
deleted file mode 100644
index f1f184d..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-node-started.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { useCallback } from 'react'
-import {
-  useReactFlow,
-  useStoreApi,
-} from 'reactflow'
-import produce from 'immer'
-import type { NodeStartedResponse } from '@/types/workflow'
-import { NodeRunningStatus } from '@/app/components/workflow/types'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowNodeStarted = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-  const reactflow = useReactFlow()
-
-  const handleWorkflowNodeStarted = useCallback((
-    params: NodeStartedResponse,
-    containerParams: {
-      clientWidth: number,
-      clientHeight: number,
-    },
-  ) => {
-    const { data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-    const {
-      getNodes,
-      setNodes,
-      edges,
-      setEdges,
-      transform,
-    } = store.getState()
-    const nodes = getNodes()
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.tracing!.push({
-        ...data,
-        status: NodeRunningStatus.Running,
-      })
-    }))
-
-    const {
-      setViewport,
-    } = reactflow
-    const currentNodeIndex = nodes.findIndex(node => node.id === data.node_id)
-    const currentNode = nodes[currentNodeIndex]
-    const position = currentNode.position
-    const zoom = transform[2]
-
-    if (!currentNode.parentId) {
-      setViewport({
-        x: (containerParams.clientWidth - 400 - currentNode.width! * zoom) / 2 - position.x * zoom,
-        y: (containerParams.clientHeight - currentNode.height! * zoom) / 2 - position.y * zoom,
-        zoom: transform[2],
-      })
-    }
-    const newNodes = produce(nodes, (draft) => {
-      draft[currentNodeIndex].data._runningStatus = NodeRunningStatus.Running
-      draft[currentNodeIndex].data._waitingRun = false
-    })
-    setNodes(newNodes)
-    const newEdges = produce(edges, (draft) => {
-      const incomeEdges = draft.filter((edge) => {
-        return edge.target === data.node_id
-      })
-
-      incomeEdges.forEach((edge) => {
-        const incomeNode = nodes.find(node => node.id === edge.source)!
-        if (!incomeNode || !('data' in incomeNode))
-           return
-
-        if (
-          (!incomeNode.data._runningBranchId && edge.sourceHandle === 'source')
-          || (incomeNode.data._runningBranchId && edge.sourceHandle === incomeNode.data._runningBranchId)
-        ) {
-          edge.data = {
-            ...edge.data,
-            _sourceRunningStatus: incomeNode.data._runningStatus,
-            _targetRunningStatus: NodeRunningStatus.Running,
-            _waitingRun: false,
-          }
-        }
-      })
-    })
-    setEdges(newEdges)
-  }, [workflowStore, store, reactflow])
-
-  return {
-    handleWorkflowNodeStarted,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-run-event.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-run-event.ts
deleted file mode 100644
index 6488307..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-run-event.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import {
-  useWorkflowAgentLog,
-  useWorkflowFailed,
-  useWorkflowFinished,
-  useWorkflowNodeFinished,
-  useWorkflowNodeIterationFinished,
-  useWorkflowNodeIterationNext,
-  useWorkflowNodeIterationStarted,
-  useWorkflowNodeLoopFinished,
-  useWorkflowNodeLoopNext,
-  useWorkflowNodeLoopStarted,
-  useWorkflowNodeRetry,
-  useWorkflowNodeStarted,
-  useWorkflowStarted,
-  useWorkflowTextChunk,
-  useWorkflowTextReplace,
-} from '.'
-
-export const useWorkflowRunEvent = () => {
-  const { handleWorkflowStarted } = useWorkflowStarted()
-  const { handleWorkflowFinished } = useWorkflowFinished()
-  const { handleWorkflowFailed } = useWorkflowFailed()
-  const { handleWorkflowNodeStarted } = useWorkflowNodeStarted()
-  const { handleWorkflowNodeFinished } = useWorkflowNodeFinished()
-  const { handleWorkflowNodeIterationStarted } = useWorkflowNodeIterationStarted()
-  const { handleWorkflowNodeIterationNext } = useWorkflowNodeIterationNext()
-  const { handleWorkflowNodeIterationFinished } = useWorkflowNodeIterationFinished()
-  const { handleWorkflowNodeLoopStarted } = useWorkflowNodeLoopStarted()
-  const { handleWorkflowNodeLoopNext } = useWorkflowNodeLoopNext()
-  const { handleWorkflowNodeLoopFinished } = useWorkflowNodeLoopFinished()
-  const { handleWorkflowNodeRetry } = useWorkflowNodeRetry()
-  const { handleWorkflowTextChunk } = useWorkflowTextChunk()
-  const { handleWorkflowTextReplace } = useWorkflowTextReplace()
-  const { handleWorkflowAgentLog } = useWorkflowAgentLog()
-
-  return {
-    handleWorkflowStarted,
-    handleWorkflowFinished,
-    handleWorkflowFailed,
-    handleWorkflowNodeStarted,
-    handleWorkflowNodeFinished,
-    handleWorkflowNodeIterationStarted,
-    handleWorkflowNodeIterationNext,
-    handleWorkflowNodeIterationFinished,
-    handleWorkflowNodeLoopStarted,
-    handleWorkflowNodeLoopNext,
-    handleWorkflowNodeLoopFinished,
-    handleWorkflowNodeRetry,
-    handleWorkflowTextChunk,
-    handleWorkflowTextReplace,
-    handleWorkflowAgentLog,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-started.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-started.ts
deleted file mode 100644
index f991131..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-started.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { useCallback } from 'react'
-import { useStoreApi } from 'reactflow'
-import produce from 'immer'
-import type { WorkflowStartedResponse } from '@/types/workflow'
-import { WorkflowRunningStatus } from '@/app/components/workflow/types'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowStarted = () => {
-  const store = useStoreApi()
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowStarted = useCallback((params: WorkflowStartedResponse) => {
-    const { task_id, data } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-      setIterParallelLogMap,
-    } = workflowStore.getState()
-    const {
-      getNodes,
-      setNodes,
-      edges,
-      setEdges,
-    } = store.getState()
-    setIterParallelLogMap(new Map())
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.task_id = task_id
-      draft.result = {
-        ...draft?.result,
-        ...data,
-        status: WorkflowRunningStatus.Running,
-      }
-    }))
-    const nodes = getNodes()
-    const newNodes = produce(nodes, (draft) => {
-      draft.forEach((node) => {
-        node.data._waitingRun = true
-        node.data._runningBranchId = undefined
-      })
-    })
-    setNodes(newNodes)
-    const newEdges = produce(edges, (draft) => {
-      draft.forEach((edge) => {
-        edge.data = {
-          ...edge.data,
-          _sourceRunningStatus: undefined,
-          _targetRunningStatus: undefined,
-          _waitingRun: true,
-        }
-      })
-    })
-    setEdges(newEdges)
-  }, [workflowStore, store])
-
-  return {
-    handleWorkflowStarted,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-text-chunk.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-text-chunk.ts
deleted file mode 100644
index c086e57..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-text-chunk.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import type { TextChunkResponse } from '@/types/workflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowTextChunk = () => {
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowTextChunk = useCallback((params: TextChunkResponse) => {
-    const { data: { text } } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.resultTabActive = true
-      draft.resultText += text
-    }))
-  }, [workflowStore])
-
-  return {
-    handleWorkflowTextChunk,
-  }
-}
diff --git a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-text-replace.ts b/app/components/workflow/hooks/use-workflow-run-event/use-workflow-text-replace.ts
deleted file mode 100644
index a005309..0000000
--- a/app/components/workflow/hooks/use-workflow-run-event/use-workflow-text-replace.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import type { TextReplaceResponse } from '@/types/workflow'
-import { useWorkflowStore } from '@/app/components/workflow/store'
-
-export const useWorkflowTextReplace = () => {
-  const workflowStore = useWorkflowStore()
-
-  const handleWorkflowTextReplace = useCallback((params: TextReplaceResponse) => {
-    const { data: { text } } = params
-    const {
-      workflowRunningData,
-      setWorkflowRunningData,
-    } = workflowStore.getState()
-    setWorkflowRunningData(produce(workflowRunningData!, (draft) => {
-      draft.resultText = text
-    }))
-  }, [workflowStore])
-
-  return {
-    handleWorkflowTextReplace,
-  }
-}
diff --git a/app/components/workflow/nodes/_base/components/agent-strategy-selector.tsx b/app/components/workflow/nodes/_base/components/agent-strategy-selector.tsx
deleted file mode 100644
index dd6a1c6..0000000
--- a/app/components/workflow/nodes/_base/components/agent-strategy-selector.tsx
+++ /dev/null
@@ -1,232 +0,0 @@
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import type { ReactNode } from 'react'
-import { memo, useEffect, useMemo, useRef, useState } from 'react'
-import type { Strategy } from './agent-strategy'
-import classNames from '@/utils/classnames'
-import { RiArrowDownSLine, RiErrorWarningFill } from '@remixicon/react'
-import Tooltip from '@/app/components/base/tooltip'
-import Link from 'next/link'
-import { InstallPluginButton } from './install-plugin-button'
-import ViewTypeSelect, { ViewType } from '../../../block-selector/view-type-select'
-import SearchInput from '@/app/components/base/search-input'
-import Tools from '../../../block-selector/tools'
-import { useTranslation } from 'react-i18next'
-import { useStrategyProviders } from '@/service/use-strategy'
-import { PluginType, type StrategyPluginDetail } from '@/app/components/plugins/types'
-import type { ToolWithProvider } from '../../../types'
-import { CollectionType } from '@/app/components/tools/types'
-import useGetIcon from '@/app/components/plugins/install-plugin/base/use-get-icon'
-import { useStrategyInfo } from '../../agent/use-config'
-import { SwitchPluginVersion } from './switch-plugin-version'
-import type { ListRef } from '@/app/components/workflow/block-selector/market-place-plugin/list'
-import PluginList, { type ListProps } from '@/app/components/workflow/block-selector/market-place-plugin/list'
-import { useMarketplacePlugins } from '@/app/components/plugins/marketplace/hooks'
-import { ToolTipContent } from '@/app/components/base/tooltip/content'
-
-const DEFAULT_TAGS: ListProps['tags'] = []
-
-const NotFoundWarn = (props: {
-  title: ReactNode,
-  description: ReactNode
-}) => {
-  const { title, description } = props
-
-  const { t } = useTranslation()
-  return <Tooltip
-    popupContent={
-      <div className='space-y-1 text-xs'>
-        <h3 className='font-semibold text-text-primary'>
-          {title}
-        </h3>
-        <p className='tracking-tight text-text-secondary'>
-          {description}
-        </p>
-        <p>
-          <Link href={'/plugins'} className='tracking-tight text-text-accent'>
-            {t('workflow.nodes.agent.linkToPlugin')}
-          </Link>
-        </p>
-      </div>
-    }
-    needsDelay
-  >
-    <div>
-      <RiErrorWarningFill className='size-4 text-text-destructive' />
-    </div>
-  </Tooltip>
-}
-
-function formatStrategy(input: StrategyPluginDetail[], getIcon: (i: string) => string): ToolWithProvider[] {
-  return input.map((item) => {
-    const res: ToolWithProvider = {
-      id: item.plugin_unique_identifier,
-      author: item.declaration.identity.author,
-      name: item.declaration.identity.name,
-      description: item.declaration.identity.description as any,
-      plugin_id: item.plugin_id,
-      icon: getIcon(item.declaration.identity.icon),
-      label: item.declaration.identity.label as any,
-      type: CollectionType.all,
-      tools: item.declaration.strategies.map(strategy => ({
-        name: strategy.identity.name,
-        author: strategy.identity.author,
-        label: strategy.identity.label as any,
-        description: strategy.description,
-        parameters: strategy.parameters as any,
-        output_schema: strategy.output_schema,
-        labels: [],
-      })),
-      team_credentials: {},
-      is_team_authorization: true,
-      allow_delete: false,
-      labels: [],
-    }
-    return res
-  })
-}
-
-export type AgentStrategySelectorProps = {
-  value?: Strategy,
-  onChange: (value?: Strategy) => void,
-}
-
-export const AgentStrategySelector = memo((props: AgentStrategySelectorProps) => {
-  const { value, onChange } = props
-  const [open, setOpen] = useState(false)
-  const [viewType, setViewType] = useState<ViewType>(ViewType.flat)
-  const [query, setQuery] = useState('')
-  const stra = useStrategyProviders()
-  const { getIconUrl } = useGetIcon()
-  const list = stra.data ? formatStrategy(stra.data, getIconUrl) : undefined
-  const filteredTools = useMemo(() => {
-    if (!list) return []
-    return list.filter(tool => tool.name.toLowerCase().includes(query.toLowerCase()))
-  }, [query, list])
-  const { strategyStatus, refetch: refetchStrategyInfo } = useStrategyInfo(
-    value?.agent_strategy_provider_name,
-    value?.agent_strategy_name,
-  )
-
-  const showPluginNotInstalledWarn = strategyStatus?.plugin?.source === 'external'
-    && !strategyStatus.plugin.installed && !!value
-
-  const showUnsupportedStrategy = strategyStatus?.plugin.source === 'external'
-    && !strategyStatus?.isExistInPlugin && !!value
-
-  const showSwitchVersion = !strategyStatus?.isExistInPlugin
-    && strategyStatus?.plugin.source === 'marketplace' && strategyStatus.plugin.installed && !!value
-
-  const showInstallButton = !strategyStatus?.isExistInPlugin
-    && strategyStatus?.plugin.source === 'marketplace' && !strategyStatus.plugin.installed && !!value
-
-  const icon = list?.find(
-    coll => coll.tools?.find(tool => tool.name === value?.agent_strategy_name),
-  )?.icon as string | undefined
-  const { t } = useTranslation()
-
-  const wrapElemRef = useRef<HTMLDivElement>(null)
-
-  const {
-    queryPluginsWithDebounced: fetchPlugins,
-    plugins: notInstalledPlugins = [],
-  } = useMarketplacePlugins()
-
-  useEffect(() => {
-    if (query) {
-      fetchPlugins({
-        query,
-        category: PluginType.agent,
-      })
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [query])
-
-  const pluginRef = useRef<ListRef>(null)
-
-  return <PortalToFollowElem open={open} onOpenChange={setOpen} placement='bottom'>
-    <PortalToFollowElemTrigger className='w-full'>
-      <div
-        className='flex h-8 w-full select-none items-center gap-0.5 rounded-lg bg-components-input-bg-normal p-1 hover:bg-state-base-hover-alt'
-        onClick={() => setOpen(o => !o)}
-      >
-        { }
-        {icon && <div className='flex h-6 w-6 items-center justify-center'><img
-          src={icon}
-          width={20}
-          height={20}
-          className='rounded-md border-[0.5px] border-components-panel-border-subtle bg-background-default-dodge'
-          alt='icon'
-        /></div>}
-        <p
-          className={classNames(value ? 'text-components-input-text-filled' : 'text-components-input-text-placeholder', 'text-xs px-1')}
-        >
-          {value?.agent_strategy_label || t('workflow.nodes.agent.strategy.selectTip')}
-        </p>
-        <div className='ml-auto flex items-center gap-1'>
-          {showInstallButton && value && <InstallPluginButton
-            onClick={e => e.stopPropagation()}
-            size={'small'}
-            uniqueIdentifier={value.plugin_unique_identifier}
-          />}
-          {showPluginNotInstalledWarn
-            ? <NotFoundWarn
-              title={t('workflow.nodes.agent.pluginNotInstalled')}
-              description={t('workflow.nodes.agent.pluginNotInstalledDesc')}
-            />
-            : showUnsupportedStrategy
-              ? <NotFoundWarn
-                title={t('workflow.nodes.agent.unsupportedStrategy')}
-                description={t('workflow.nodes.agent.strategyNotFoundDesc')}
-              />
-              : <RiArrowDownSLine className='size-4 text-text-tertiary' />
-          }
-          {showSwitchVersion && <SwitchPluginVersion
-            uniqueIdentifier={value.plugin_unique_identifier}
-            tooltip={<ToolTipContent
-              title={t('workflow.nodes.agent.unsupportedStrategy')}>
-              {t('workflow.nodes.agent.strategyNotFoundDescAndSwitchVersion')}
-            </ToolTipContent>}
-            onChange={() => {
-              refetchStrategyInfo()
-            }}
-          />}
-        </div>
-      </div>
-    </PortalToFollowElemTrigger>
-    <PortalToFollowElemContent className='z-10'>
-      <div className='w-[388px] overflow-hidden rounded-md border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow'>
-        <header className='flex gap-1 p-2'>
-          <SearchInput placeholder={t('workflow.nodes.agent.strategy.searchPlaceholder')} value={query} onChange={setQuery} className={'w-full'} />
-          <ViewTypeSelect viewType={viewType} onChange={setViewType} />
-        </header>
-        <main className="relative flex w-full flex-col overflow-hidden md:max-h-[300px] xl:max-h-[400px] 2xl:max-h-[564px]" ref={wrapElemRef}>
-          <Tools
-            tools={filteredTools}
-            viewType={viewType}
-            onSelect={(_, tool) => {
-              onChange({
-                agent_strategy_name: tool!.tool_name,
-                agent_strategy_provider_name: tool!.provider_name,
-                agent_strategy_label: tool!.tool_label,
-                agent_output_schema: tool!.output_schema,
-                plugin_unique_identifier: tool!.provider_id,
-              })
-              setOpen(false)
-            }}
-            className='h-full max-h-full max-w-none overflow-y-auto'
-            indexBarClassName='top-0 xl:top-36' showWorkflowEmpty={false} hasSearchText={false} />
-          <PluginList
-            ref={pluginRef}
-            wrapElemRef={wrapElemRef}
-            list={notInstalledPlugins}
-            searchText={query}
-            tags={DEFAULT_TAGS}
-            disableMaxWidth
-          />
-        </main>
-      </div>
-    </PortalToFollowElemContent>
-  </PortalToFollowElem>
-})
-
-AgentStrategySelector.displayName = 'AgentStrategySelector'
diff --git a/app/components/workflow/nodes/_base/components/agent-strategy.tsx b/app/components/workflow/nodes/_base/components/agent-strategy.tsx
deleted file mode 100644
index de23602..0000000
--- a/app/components/workflow/nodes/_base/components/agent-strategy.tsx
+++ /dev/null
@@ -1,239 +0,0 @@
-import type { CredentialFormSchemaNumberInput, CredentialFormSchemaTextInput } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import { type CredentialFormSchema, FormTypeEnum, ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import type { ToolVarInputs } from '../../tool/types'
-import ListEmpty from '@/app/components/base/list-empty'
-import { AgentStrategySelector } from './agent-strategy-selector'
-import Link from 'next/link'
-import { useTranslation } from 'react-i18next'
-import Form from '@/app/components/header/account-setting/model-provider-page/model-modal/Form'
-import { Agent } from '@/app/components/base/icons/src/vender/workflow'
-import { InputNumber } from '@/app/components/base/input-number'
-import Slider from '@/app/components/base/slider'
-import ToolSelector from '@/app/components/plugins/plugin-detail-panel/tool-selector'
-import MultipleToolSelector from '@/app/components/plugins/plugin-detail-panel/multiple-tool-selector'
-import Field from './field'
-import { type ComponentProps, memo } from 'react'
-import { useDefaultModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
-import Editor from './prompt/editor'
-import { useWorkflowStore } from '../../../store'
-import { useRenderI18nObject } from '@/hooks/use-i18n'
-import type { NodeOutPutVar } from '../../../types'
-import type { Node } from 'reactflow'
-import { useContext } from 'use-context-selector'
-import I18n from '@/context/i18n'
-import { LanguagesSupported } from '@/i18n/language'
-
-export type Strategy = {
-  agent_strategy_provider_name: string
-  agent_strategy_name: string
-  agent_strategy_label: string
-  agent_output_schema: Record<string, any>
-  plugin_unique_identifier: string
-}
-
-export type AgentStrategyProps = {
-  strategy?: Strategy
-  onStrategyChange: (strategy?: Strategy) => void
-  formSchema: CredentialFormSchema[]
-  formValue: ToolVarInputs
-  onFormValueChange: (value: ToolVarInputs) => void
-  nodeOutputVars?: NodeOutPutVar[],
-  availableNodes?: Node[],
-  nodeId?: string
-}
-
-type CustomSchema<Type, Field = {}> = Omit<CredentialFormSchema, 'type'> & { type: Type } & Field
-
-type ToolSelectorSchema = CustomSchema<'tool-selector'>
-type MultipleToolSelectorSchema = CustomSchema<'array[tools]'>
-
-type CustomField = ToolSelectorSchema | MultipleToolSelectorSchema
-
-export const AgentStrategy = memo((props: AgentStrategyProps) => {
-  const { strategy, onStrategyChange, formSchema, formValue, onFormValueChange, nodeOutputVars, availableNodes, nodeId } = props
-  const { t } = useTranslation()
-  const { locale } = useContext(I18n)
-  const defaultModel = useDefaultModel(ModelTypeEnum.textGeneration)
-  const renderI18nObject = useRenderI18nObject()
-  const workflowStore = useWorkflowStore()
-  const {
-    setControlPromptEditorRerenderKey,
-  } = workflowStore.getState()
-  const override: ComponentProps<typeof Form<CustomField>>['override'] = [
-    [FormTypeEnum.textNumber, FormTypeEnum.textInput],
-    (schema, props) => {
-      switch (schema.type) {
-        case FormTypeEnum.textInput: {
-          const def = schema as CredentialFormSchemaTextInput
-          const value = props.value[schema.variable] || schema.default
-          const instanceId = schema.variable
-          const onChange = (value: string) => {
-            props.onChange({ ...props.value, [schema.variable]: value })
-          }
-          const handleGenerated = (value: string) => {
-            onChange(value)
-            setControlPromptEditorRerenderKey(Math.random())
-          }
-          return <Editor
-            value={value}
-            onChange={onChange}
-            onGenerated={handleGenerated}
-            instanceId={instanceId}
-            key={instanceId}
-            title={renderI18nObject(schema.label)}
-            headerClassName='bg-transparent px-0 text-text-secondary system-sm-semibold-uppercase'
-            containerBackgroundClassName='bg-transparent'
-            gradientBorder={false}
-            isSupportPromptGenerator={!!def.auto_generate?.type}
-            titleTooltip={schema.tooltip && renderI18nObject(schema.tooltip)}
-            editorContainerClassName='px-0'
-            availableNodes={availableNodes}
-            nodesOutputVars={nodeOutputVars}
-            isSupportJinja={def.template?.enabled}
-            required={def.required}
-            varList={[]}
-            modelConfig={
-              defaultModel.data
-                ? {
-                  mode: 'chat',
-                  name: defaultModel.data.model,
-                  provider: defaultModel.data.provider.provider,
-                  completion_params: {},
-                } : undefined
-            }
-            placeholderClassName='px-2 py-1'
-            titleClassName='system-sm-semibold-uppercase text-text-secondary text-[13px]'
-            inputClassName='px-2 py-1 bg-components-input-bg-normal focus:bg-components-input-bg-active focus:border-components-input-border-active focus:border rounded-lg'
-          />
-        }
-        case FormTypeEnum.textNumber: {
-          const def = schema as CredentialFormSchemaNumberInput
-          if (!def.max || !def.min)
-            return false
-
-          const defaultValue = schema.default ? Number.parseInt(schema.default) : 1
-          const value = props.value[schema.variable] || defaultValue
-          const onChange = (value: number) => {
-            props.onChange({ ...props.value, [schema.variable]: value })
-          }
-          return <Field
-            title={<>
-              {renderI18nObject(def.label)} {def.required && <span className='text-red-500'>*</span>}
-            </>}
-            tooltip={def.tooltip && renderI18nObject(def.tooltip)}
-            inline
-          >
-            <div className='flex w-[200px] items-center gap-3'>
-              <Slider
-                value={value}
-                onChange={onChange}
-                className='w-full'
-                min={def.min}
-                max={def.max}
-              />
-              <InputNumber
-                value={value}
-                // TODO: maybe empty, handle this
-                onChange={onChange as any}
-                defaultValue={defaultValue}
-                size='regular'
-                min={def.min}
-                max={def.max}
-                className='w-12'
-              />
-            </div>
-          </Field>
-        }
-      }
-    },
-  ]
-  const renderField: ComponentProps<typeof Form<CustomField>>['customRenderField'] = (schema, props) => {
-    switch (schema.type) {
-      case FormTypeEnum.toolSelector: {
-        const value = props.value[schema.variable]
-        const onChange = (value: any) => {
-          props.onChange({ ...props.value, [schema.variable]: value })
-        }
-        return (
-          <Field
-            title={<>
-              {renderI18nObject(schema.label)} {schema.required && <span className='text-red-500'>*</span>}
-            </>}
-            tooltip={schema.tooltip && renderI18nObject(schema.tooltip)}
-          >
-            <ToolSelector
-              nodeId={props.nodeId || ''}
-              nodeOutputVars={props.nodeOutputVars || []}
-              availableNodes={props.availableNodes || []}
-              scope={schema.scope}
-              value={value}
-              onSelect={item => onChange(item)}
-              onDelete={() => onChange(null)}
-            />
-          </Field>
-        )
-      }
-      case FormTypeEnum.multiToolSelector: {
-        const value = props.value[schema.variable]
-        const onChange = (value: any) => {
-          props.onChange({ ...props.value, [schema.variable]: value })
-        }
-        return (
-          <MultipleToolSelector
-            nodeId={props.nodeId || ''}
-            nodeOutputVars={props.nodeOutputVars || []}
-            availableNodes={props.availableNodes || []}
-            scope={schema.scope}
-            value={value || []}
-            label={renderI18nObject(schema.label)}
-            tooltip={schema.tooltip && renderI18nObject(schema.tooltip)}
-            onChange={onChange}
-            supportCollapse
-            required={schema.required}
-          />
-        )
-      }
-    }
-  }
-  return <div className='space-y-2'>
-    <AgentStrategySelector value={strategy} onChange={onStrategyChange} />
-    {
-      strategy
-        ? <div>
-          <Form<CustomField>
-            formSchemas={[
-              ...formSchema,
-            ]}
-            value={formValue}
-            onChange={onFormValueChange}
-            validating={false}
-            showOnVariableMap={{}}
-            isEditMode={true}
-            isAgentStrategy={true}
-            fieldLabelClassName='uppercase'
-            customRenderField={renderField}
-            override={override}
-            nodeId={nodeId}
-            nodeOutputVars={nodeOutputVars || []}
-            availableNodes={availableNodes || []}
-          />
-        </div>
-        : <ListEmpty
-          icon={<Agent className='h-5 w-5 shrink-0 text-text-accent' />}
-          title={t('workflow.nodes.agent.strategy.configureTip')}
-          description={<div className='text-xs text-text-tertiary'>
-            {t('workflow.nodes.agent.strategy.configureTipDesc')} <br />
-            <Link href={
-              locale === LanguagesSupported[1]
-                ? 'https://docs.dify.ai/zh-hans/guides/workflow/node/agent#xuan-ze-agent-ce-le'
-                : 'https://docs.dify.ai/en/guides/workflow/node/agent#select-an-agent-strategy'
-            } className='text-text-accent-secondary' target='_blank'>
-              {t('workflow.nodes.agent.learnMore')}
-            </Link>
-          </div>}
-        />
-    }
-  </div>
-})
-
-AgentStrategy.displayName = 'AgentStrategy'
diff --git a/app/components/workflow/nodes/_base/components/group.tsx b/app/components/workflow/nodes/_base/components/group.tsx
deleted file mode 100644
index 79f67c6..0000000
--- a/app/components/workflow/nodes/_base/components/group.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import classNames from '@/utils/classnames'
-import type { ComponentProps, FC, PropsWithChildren, ReactNode } from 'react'
-
-export type GroupLabelProps = ComponentProps<'div'>
-
-export const GroupLabel: FC<GroupLabelProps> = (props) => {
-  const { children, className, ...rest } = props
-  return <div {...rest} className={classNames('mb-1 system-2xs-medium-uppercase text-text-tertiary', className)}>
-    {children}
-  </div>
-}
-
-export type GroupProps = PropsWithChildren<{
-  label: ReactNode
-}>
-
-export const Group: FC<GroupProps> = (props) => {
-  const { children, label } = props
-  return <div className={classNames('py-1')}>
-    {label}
-    <div className='space-y-0.5'>
-      {children}
-    </div>
-  </div>
-}
diff --git a/app/components/workflow/nodes/_base/components/install-plugin-button.tsx b/app/components/workflow/nodes/_base/components/install-plugin-button.tsx
deleted file mode 100644
index 23119f0..0000000
--- a/app/components/workflow/nodes/_base/components/install-plugin-button.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import Button from '@/app/components/base/button'
-import { RiInstallLine, RiLoader2Line } from '@remixicon/react'
-import type { ComponentProps, MouseEventHandler } from 'react'
-import classNames from '@/utils/classnames'
-import { useTranslation } from 'react-i18next'
-import { useCheckInstalled, useInstallPackageFromMarketPlace } from '@/service/use-plugins'
-
-type InstallPluginButtonProps = Omit<ComponentProps<typeof Button>, 'children' | 'loading'> & {
-  uniqueIdentifier: string
-  onSuccess?: () => void
-}
-
-export const InstallPluginButton = (props: InstallPluginButtonProps) => {
-  const { className, uniqueIdentifier, onSuccess, ...rest } = props
-  const { t } = useTranslation()
-  const manifest = useCheckInstalled({
-    pluginIds: [uniqueIdentifier],
-    enabled: !!uniqueIdentifier,
-  })
-  const install = useInstallPackageFromMarketPlace()
-  const isLoading = manifest.isLoading || install.isPending
-  // await for refetch to get the new installed plugin, when manifest refetch, this component will unmount
-  || install.isSuccess
-  const handleInstall: MouseEventHandler = (e) => {
-    e.stopPropagation()
-    install.mutate(uniqueIdentifier, {
-      onSuccess: async () => {
-        await manifest.refetch()
-        onSuccess?.()
-      },
-    })
-  }
-  if (!manifest.data) return null
-  if (manifest.data.plugins.some(plugin => plugin.id === uniqueIdentifier)) return null
-  return <Button
-    variant={'secondary'}
-    disabled={isLoading}
-    {...rest}
-    onClick={handleInstall}
-    className={classNames('flex items-center', className)}
-  >
-    {!isLoading ? t('workflow.nodes.agent.pluginInstaller.install') : t('workflow.nodes.agent.pluginInstaller.installing')}
-    {!isLoading ? <RiInstallLine className='ml-1 size-3.5' /> : <RiLoader2Line className='ml-1 size-3.5 animate-spin' />}
-  </Button>
-}
diff --git a/app/components/workflow/nodes/_base/components/node-status-icon.tsx b/app/components/workflow/nodes/_base/components/node-status-icon.tsx
deleted file mode 100644
index 3ab65b8..0000000
--- a/app/components/workflow/nodes/_base/components/node-status-icon.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import {
-  RiAlertFill,
-  RiCheckboxCircleFill,
-  RiErrorWarningLine,
-  RiLoader2Line,
-} from '@remixicon/react'
-import cn from '@/utils/classnames'
-
-type NodeStatusIconProps = {
-  status: string
-  className?: string
-}
-const NodeStatusIcon = ({
-  status,
-  className,
-}: NodeStatusIconProps) => {
-  return (
-    <>
-      {
-        status === 'succeeded' && (
-          <RiCheckboxCircleFill className={cn('h-4 w-4 shrink-0 text-text-success', className)} />
-        )
-      }
-      {
-        status === 'failed' && (
-          <RiErrorWarningLine className={cn('h-4 w-4 shrink-0 text-text-warning', className)} />
-        )
-      }
-      {
-        (status === 'stopped' || status === 'exception') && (
-          <RiAlertFill className={cn('h-4 w-4 shrink-0 text-text-warning-secondary', className)} />
-        )
-      }
-      {
-        status === 'running' && (
-          <RiLoader2Line className={cn('h-4 w-4 shrink-0 animate-spin text-text-accent', className)} />
-        )
-      }
-    </>
-  )
-}
-
-export default NodeStatusIcon
diff --git a/app/components/workflow/nodes/_base/components/setting-item.tsx b/app/components/workflow/nodes/_base/components/setting-item.tsx
deleted file mode 100644
index 134bf4a..0000000
--- a/app/components/workflow/nodes/_base/components/setting-item.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import Tooltip from '@/app/components/base/tooltip'
-import Indicator from '@/app/components/header/indicator'
-import classNames from '@/utils/classnames'
-import { type ComponentProps, type PropsWithChildren, type ReactNode, memo } from 'react'
-
-export type SettingItemProps = PropsWithChildren<{
-  label: string
-  status?: 'error' | 'warning'
-  tooltip?: ReactNode
-}>
-
-export const SettingItem = memo(({ label, children, status, tooltip }: SettingItemProps) => {
-  const indicator: ComponentProps<typeof Indicator>['color'] = status === 'error' ? 'red' : status === 'warning' ? 'yellow' : undefined
-  const needTooltip = ['error', 'warning'].includes(status as any)
-  return <div className='relative flex items-center justify-between space-x-1 rounded-md bg-workflow-block-parma-bg px-1.5 py-1 text-xs font-normal'>
-    <div className={classNames('shrink-0 truncate text-text-tertiary system-xs-medium-uppercase', !!children && 'max-w-[100px]')}>
-      {label}
-    </div>
-    <Tooltip popupContent={tooltip} disabled={!needTooltip}>
-      <div className='system-xs-medium truncate text-right text-text-secondary'>
-        {children}
-      </div>
-    </Tooltip>
-    {indicator && <Indicator color={indicator} className='absolute -right-0.5 -top-0.5' />}
-  </div>
-})
-
-SettingItem.displayName = 'SettingItem'
diff --git a/app/components/workflow/nodes/_base/components/switch-plugin-version.tsx b/app/components/workflow/nodes/_base/components/switch-plugin-version.tsx
deleted file mode 100644
index ceb38fb..0000000
--- a/app/components/workflow/nodes/_base/components/switch-plugin-version.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-'use client'
-
-import Badge from '@/app/components/base/badge'
-import Tooltip from '@/app/components/base/tooltip'
-import PluginVersionPicker from '@/app/components/plugins/update-plugin/plugin-version-picker'
-import { RiArrowLeftRightLine, RiExternalLinkLine } from '@remixicon/react'
-import type { ReactNode } from 'react'
-import { type FC, useCallback, useState } from 'react'
-import { useBoolean } from 'ahooks'
-import { useCheckInstalled, useUpdatePackageFromMarketPlace } from '@/service/use-plugins'
-import cn from '@/utils/classnames'
-import PluginMutationModel from '@/app/components/plugins/plugin-mutation-model'
-import useGetIcon from '@/app/components/plugins/install-plugin/base/use-get-icon'
-import { pluginManifestToCardPluginProps } from '@/app/components/plugins/install-plugin/utils'
-import { Badge as Badge2, BadgeState } from '@/app/components/base/badge/index'
-import Link from 'next/link'
-import { useTranslation } from 'react-i18next'
-import { marketplaceUrlPrefix } from '@/config'
-
-export type SwitchPluginVersionProps = {
-  uniqueIdentifier: string
-  tooltip?: ReactNode
-  onChange?: (version: string) => void
-  className?: string
-}
-
-export const SwitchPluginVersion: FC<SwitchPluginVersionProps> = (props) => {
-  const { uniqueIdentifier, tooltip, onChange, className } = props
-  const [pluginId] = uniqueIdentifier.split(':')
-  const [isShow, setIsShow] = useState(false)
-  const [isShowUpdateModal, { setTrue: showUpdateModal, setFalse: hideUpdateModal }] = useBoolean(false)
-  const [target, setTarget] = useState<{
-    version: string,
-    pluginUniqueIden: string;
-  }>()
-  const pluginDetails = useCheckInstalled({
-    pluginIds: [pluginId],
-    enabled: true,
-  })
-  const pluginDetail = pluginDetails.data?.plugins.at(0)
-
-  const handleUpdatedFromMarketplace = useCallback(() => {
-    hideUpdateModal()
-    pluginDetails.refetch()
-    onChange?.(target!.version)
-  }, [hideUpdateModal, onChange, pluginDetails, target])
-  const { getIconUrl } = useGetIcon()
-  const icon = pluginDetail?.declaration.icon ? getIconUrl(pluginDetail.declaration.icon) : undefined
-  const mutation = useUpdatePackageFromMarketPlace()
-  const install = () => {
-    mutation.mutate(
-      {
-        new_plugin_unique_identifier: target!.pluginUniqueIden,
-        original_plugin_unique_identifier: uniqueIdentifier,
-      },
-      {
-        onSuccess() {
-          handleUpdatedFromMarketplace()
-        },
-      })
-  }
-  const { t } = useTranslation()
-  return <Tooltip popupContent={!isShow && !isShowUpdateModal && tooltip} triggerMethod='hover'>
-    <div className={cn('flex w-fit items-center justify-center', className)} onClick={e => e.stopPropagation()}>
-      {isShowUpdateModal && pluginDetail && <PluginMutationModel
-        onCancel={hideUpdateModal}
-        plugin={pluginManifestToCardPluginProps({
-          ...pluginDetail.declaration,
-          icon: icon!,
-        })}
-        mutation={mutation}
-        mutate={install}
-        confirmButtonText={t('workflow.nodes.agent.installPlugin.install')}
-        cancelButtonText={t('workflow.nodes.agent.installPlugin.cancel')}
-        modelTitle={t('workflow.nodes.agent.installPlugin.title')}
-        description={t('workflow.nodes.agent.installPlugin.desc')}
-        cardTitleLeft={<>
-          <Badge2 className='mx-1' size="s" state={BadgeState.Warning}>
-            {`${pluginDetail.version} -> ${target!.version}`}
-          </Badge2>
-        </>}
-        modalBottomLeft={
-          <Link
-            className='flex items-center justify-center gap-1'
-            href={`${marketplaceUrlPrefix}/plugins/${pluginDetail.declaration.author}/${pluginDetail.declaration.name}`}
-            target='_blank'
-          >
-            <span className='system-xs-regular text-xs text-text-accent'>
-              {t('workflow.nodes.agent.installPlugin.changelog')}
-            </span>
-            <RiExternalLinkLine className='size-3 text-text-accent' />
-          </Link>
-        }
-      />}
-      {pluginDetail && <PluginVersionPicker
-        isShow={isShow}
-        onShowChange={setIsShow}
-        pluginID={pluginId}
-        currentVersion={pluginDetail.version}
-        onSelect={(state) => {
-          setTarget({
-            pluginUniqueIden: state.unique_identifier,
-            version: state.version,
-          })
-          showUpdateModal()
-        }}
-        trigger={
-          <Badge
-            className={cn(
-              'mx-1 flex hover:bg-state-base-hover',
-              isShow && 'bg-state-base-hover',
-            )}
-            uppercase={true}
-            text={
-              <>
-                <div>{pluginDetail.version}</div>
-                <RiArrowLeftRightLine className='ml-1 h-3 w-3 text-text-tertiary' />
-              </>
-            }
-            hasRedCornerMark={true}
-          />
-        }
-      />}
-    </div>
-  </Tooltip>
-}
diff --git a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/field.tsx b/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/field.tsx
deleted file mode 100644
index f90f30e..0000000
--- a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/field.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { Type } from '../../../../../llm/types'
-import { getFieldType } from '../../../../../llm/utils'
-import type { Field as FieldType } from '../../../../../llm/types'
-import cn from '@/utils/classnames'
-import TreeIndentLine from '../tree-indent-line'
-import { RiMoreFill } from '@remixicon/react'
-import Tooltip from '@/app/components/base/tooltip'
-import type { ValueSelector } from '@/app/components/workflow/types'
-import { useTranslation } from 'react-i18next'
-
-const MAX_DEPTH = 10
-
-type Props = {
-  valueSelector: ValueSelector
-  name: string,
-  payload: FieldType,
-  depth?: number
-  readonly?: boolean
-  onSelect?: (valueSelector: ValueSelector) => void
-}
-
-const Field: FC<Props> = ({
-  valueSelector,
-  name,
-  payload,
-  depth = 1,
-  readonly,
-  onSelect,
-}) => {
-  const { t } = useTranslation()
-  const isLastFieldHighlight = readonly
-  const hasChildren = payload.type === Type.object && payload.properties
-  const isHighlight = isLastFieldHighlight && !hasChildren
-  if (depth > MAX_DEPTH + 1)
-    return null
-  return (
-    <div>
-      <Tooltip popupContent={t('app.structOutput.moreFillTip')} disabled={depth !== MAX_DEPTH + 1}>
-        <div
-          className={cn('flex items-center justify-between rounded-md pr-2', !readonly && 'hover:bg-state-base-hover', depth !== MAX_DEPTH + 1 && 'cursor-pointer')}
-          onClick={() => !readonly && onSelect?.([...valueSelector, name])}
-        >
-          <div className='flex grow items-stretch'>
-            <TreeIndentLine depth={depth} />
-            {depth === MAX_DEPTH + 1 ? (
-              <RiMoreFill className='h-3 w-3 text-text-tertiary' />
-            ) : (<div className={cn('system-sm-medium h-6 w-0 grow truncate leading-6 text-text-secondary', isHighlight && 'text-text-accent')}>{name}</div>)}
-
-          </div>
-          {depth < MAX_DEPTH + 1 && (
-            <div className='system-xs-regular ml-2 shrink-0 text-text-tertiary'>{getFieldType(payload)}</div>
-          )}
-        </div>
-      </Tooltip>
-
-      {depth <= MAX_DEPTH && payload.type === Type.object && payload.properties && (
-        <div>
-          {Object.keys(payload.properties).map(propName => (
-            <Field
-              key={propName}
-              name={propName}
-              payload={payload.properties?.[propName] as FieldType}
-              depth={depth + 1}
-              readonly={readonly}
-              valueSelector={[...valueSelector, name]}
-              onSelect={onSelect}
-            />
-          ))}
-        </div>
-      )}
-    </div>
-  )
-}
-export default React.memo(Field)
diff --git a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/index.tsx b/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/index.tsx
deleted file mode 100644
index 302ed3c..0000000
--- a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker/index.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useRef } from 'react'
-import type { StructuredOutput } from '../../../../../llm/types'
-import Field from './field'
-import cn from '@/utils/classnames'
-import { useHover } from 'ahooks'
-import type { ValueSelector } from '@/app/components/workflow/types'
-
-type Props = {
-  className?: string
-  root: { nodeId?: string, nodeName?: string, attrName: string }
-  payload: StructuredOutput
-  readonly?: boolean
-  onSelect?: (valueSelector: ValueSelector) => void
-  onHovering?: (value: boolean) => void
-}
-
-export const PickerPanelMain: FC<Props> = ({
-  className,
-  root,
-  payload,
-  readonly,
-  onHovering,
-  onSelect,
-}) => {
-  const ref = useRef<HTMLDivElement>(null)
-  useHover(ref, {
-    onChange: (hovering) => {
-      if (hovering) {
-        onHovering?.(true)
-      }
-      else {
-        setTimeout(() => {
-          onHovering?.(false)
-        }, 100)
-      }
-    },
-  })
-  const schema = payload.schema
-  const fieldNames = Object.keys(schema.properties)
-  return (
-    <div className={cn(className)} ref={ref}>
-      {/* Root info */}
-      <div className='flex items-center justify-between px-2 py-1'>
-        <div className='flex'>
-          {root.nodeName && (
-            <>
-              <div className='system-sm-medium max-w-[100px] truncate text-text-tertiary'>{root.nodeName}</div>
-              <div className='system-sm-medium text-text-tertiary'>.</div>
-            </>
-          )}
-          <div className='system-sm-medium text-text-secondary'>{root.attrName}</div>
-        </div>
-        {/* It must be object */}
-        <div className='system-xs-regular ml-2 shrink-0 text-text-tertiary'>object</div>
-      </div>
-      {fieldNames.map(name => (
-        <Field
-          key={name}
-          name={name}
-          payload={schema.properties[name]}
-          readonly={readonly}
-          valueSelector={[root.nodeId!, root.attrName]}
-          onSelect={onSelect}
-        />
-      ))}
-    </div>
-  )
-}
-
-const PickerPanel: FC<Props> = ({
-  className,
-  ...props
-}) => {
-  return (
-    <div className={cn('w-[296px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 pb-0 shadow-lg backdrop-blur-[5px]', className)}>
-      <PickerPanelMain {...props} />
-    </div>
-  )
-}
-export default React.memo(PickerPanel)
diff --git a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show/field.tsx b/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show/field.tsx
deleted file mode 100644
index 63b4880..0000000
--- a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show/field.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import { Type } from '../../../../../llm/types'
-import { getFieldType } from '../../../../../llm/utils'
-import type { Field as FieldType } from '../../../../../llm/types'
-import cn from '@/utils/classnames'
-import TreeIndentLine from '../tree-indent-line'
-import { useTranslation } from 'react-i18next'
-import { useBoolean } from 'ahooks'
-import { RiArrowDropDownLine } from '@remixicon/react'
-
-type Props = {
-  name: string,
-  payload: FieldType,
-  required: boolean,
-  depth?: number,
-  rootClassName?: string
-}
-
-const Field: FC<Props> = ({
-  name,
-  payload,
-  depth = 1,
-  required,
-  rootClassName,
-}) => {
-  const { t } = useTranslation()
-  const isRoot = depth === 1
-  const hasChildren = payload.type === Type.object && payload.properties
-  const [fold, {
-    toggle: toggleFold,
-  }] = useBoolean(false)
-  return (
-    <div>
-      <div className={cn('flex pr-2')}>
-        <TreeIndentLine depth={depth} />
-        <div className='w-0 grow'>
-          <div className='relative flex select-none'>
-            {hasChildren && (
-              <RiArrowDropDownLine
-                className={cn('absolute left-[-18px] top-[50%] h-4 w-4 translate-y-[-50%] cursor-pointer bg-components-panel-bg text-text-tertiary', fold && 'rotate-[270deg] text-text-accent')}
-                onClick={toggleFold}
-              />
-            )}
-            <div className={cn('system-sm-medium ml-[7px] h-6 truncate leading-6 text-text-secondary', isRoot && rootClassName)}>{name}</div>
-            <div className='system-xs-regular ml-3 shrink-0 leading-6 text-text-tertiary'>{getFieldType(payload)}</div>
-            {required && <div className='system-2xs-medium-uppercase ml-3 leading-6 text-text-warning'>{t('app.structOutput.required')}</div>}
-          </div>
-          {payload.description && (
-            <div className='ml-[7px] flex'>
-              <div className='system-xs-regular w-0 grow truncate text-text-tertiary'>{payload.description}</div>
-            </div>
-          )}
-        </div>
-      </div>
-
-      {hasChildren && !fold && (
-        <div>
-          {Object.keys(payload.properties!).map(name => (
-            <Field
-              key={name}
-              name={name}
-              payload={payload.properties?.[name] as FieldType}
-              depth={depth + 1}
-              required={!!payload.required?.includes(name)}
-            />
-          ))}
-        </div>
-      )}
-    </div>
-  )
-}
-export default React.memo(Field)
diff --git a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show/index.tsx b/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show/index.tsx
deleted file mode 100644
index 86f707a..0000000
--- a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show/index.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { StructuredOutput } from '../../../../../llm/types'
-import Field from './field'
-import { useTranslation } from 'react-i18next'
-
-type Props = {
-  payload: StructuredOutput
-  rootClassName?: string
-}
-
-const ShowPanel: FC<Props> = ({
-  payload,
-  rootClassName,
-}) => {
-  const { t } = useTranslation()
-  const schema = {
-    ...payload,
-    schema: {
-      ...payload.schema,
-      description: t('app.structOutput.LLMResponse'),
-    },
-  }
-  return (
-    <div className='relative left-[-7px]'>
-      {Object.keys(schema.schema.properties!).map(name => (
-        <Field
-          key={name}
-          name={name}
-          payload={schema.schema.properties![name]}
-          required={!!schema.schema.required?.includes(name)}
-          rootClassName={rootClassName}
-        />
-      ))}
-    </div>
-  )
-}
-export default React.memo(ShowPanel)
diff --git a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/tree-indent-line.tsx b/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/tree-indent-line.tsx
deleted file mode 100644
index 475c119..0000000
--- a/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/tree-indent-line.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import cn from '@/utils/classnames'
-
-type Props = {
-  depth?: number,
-  className?: string,
-}
-
-const TreeIndentLine: FC<Props> = ({
-  depth = 1,
-  className,
-}) => {
-  const depthArray = Array.from({ length: depth }, (_, index) => index)
-  return (
-    <div className={cn('flex', className)}>
-      {depthArray.map(d => (
-        <div key={d} className={cn('ml-2.5 mr-2.5 w-px bg-divider-regular')}></div>
-      ))}
-    </div>
-  )
-}
-export default React.memo(TreeIndentLine)
diff --git a/app/components/workflow/nodes/_base/components/variable/var-full-path-panel.tsx b/app/components/workflow/nodes/_base/components/variable/var-full-path-panel.tsx
deleted file mode 100644
index 54e27b5..0000000
--- a/app/components/workflow/nodes/_base/components/variable/var-full-path-panel.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React from 'react'
-import type { Field, StructuredOutput, TypeWithArray } from '../../../llm/types'
-import { Type } from '../../../llm/types'
-import { PickerPanelMain as Panel } from '@/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker'
-import BlockIcon from '@/app/components/workflow/block-icon'
-import { BlockEnum } from '@/app/components/workflow/types'
-
-type Props = {
-  nodeName: string
-  path: string[]
-  varType: TypeWithArray
-  nodeType?: BlockEnum
-}
-
-const VarFullPathPanel: FC<Props> = ({
-  nodeName,
-  path,
-  varType,
-  nodeType = BlockEnum.LLM,
-}) => {
-  const schema: StructuredOutput = (() => {
-    const schema: StructuredOutput['schema'] = {
-      type: Type.object,
-      properties: {} as { [key: string]: Field },
-      required: [],
-      additionalProperties: false,
-    }
-    let current = schema
-    for (let i = 1; i < path.length; i++) {
-      const isLast = i === path.length - 1
-      const name = path[i]
-      current.properties[name] = {
-        type: isLast ? varType : Type.object,
-        properties: {},
-      } as Field
-      current = current.properties[name] as { type: Type.object; properties: { [key: string]: Field; }; required: never[]; additionalProperties: false; }
-    }
-    return {
-      schema,
-    }
-  })()
-  return (
-    <div className='w-[280px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur pb-0 shadow-lg backdrop-blur-[5px]'>
-      <div className='flex space-x-1 border-b-[0.5px] border-divider-subtle p-3 pb-2 '>
-        <BlockIcon size='xs' type={nodeType} />
-        <div className='system-xs-medium w-0 grow truncate text-text-secondary'>{nodeName}</div>
-      </div>
-      <Panel
-        className='px-1 pb-3 pt-2'
-        root={{ attrName: path[0] }}
-        payload={schema}
-        readonly
-      />
-    </div>
-  )
-}
-export default React.memo(VarFullPathPanel)
diff --git a/app/components/workflow/nodes/agent/components/model-bar.tsx b/app/components/workflow/nodes/agent/components/model-bar.tsx
deleted file mode 100644
index 1b20070..0000000
--- a/app/components/workflow/nodes/agent/components/model-bar.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import Tooltip from '@/app/components/base/tooltip'
-import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import { useModelList } from '@/app/components/header/account-setting/model-provider-page/hooks'
-import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector'
-import Indicator from '@/app/components/header/indicator'
-import { type FC, useMemo } from 'react'
-import { useTranslation } from 'react-i18next'
-
-export type ModelBarProps = {
-  provider: string
-  model: string
-} | {}
-
-const useAllModel = () => {
-  const { data: textGeneration } = useModelList(ModelTypeEnum.textGeneration)
-  const { data: moderation } = useModelList(ModelTypeEnum.moderation)
-  const { data: rerank } = useModelList(ModelTypeEnum.rerank)
-  const { data: speech2text } = useModelList(ModelTypeEnum.speech2text)
-  const { data: textEmbedding } = useModelList(ModelTypeEnum.textEmbedding)
-  const { data: tts } = useModelList(ModelTypeEnum.tts)
-  const models = useMemo(() => {
-    return textGeneration
-      .concat(moderation)
-      .concat(rerank)
-      .concat(speech2text)
-      .concat(textEmbedding)
-      .concat(tts)
-  }, [textGeneration, moderation, rerank, speech2text, textEmbedding, tts])
-  if (!textGeneration || !moderation || !rerank || !speech2text || !textEmbedding || !tts)
-    return undefined
-  return models
-}
-
-export const ModelBar: FC<ModelBarProps> = (props) => {
-  const { t } = useTranslation()
-  const modelList = useAllModel()
-  if (!('provider' in props)) {
-    return <Tooltip
-      popupContent={t('workflow.nodes.agent.modelNotSelected')}
-      triggerMethod='hover'
-    >
-      <div className='relative'>
-        <ModelSelector
-          modelList={[]}
-          triggerClassName='bg-workflow-block-parma-bg !h-6 !rounded-md'
-          defaultModel={undefined}
-          showDeprecatedWarnIcon={false}
-          readonly
-          deprecatedClassName='opacity-50'
-        />
-        <Indicator color={'red'} className='absolute -right-0.5 -top-0.5' />
-      </div>
-    </Tooltip>
-  }
-  const modelInstalled = modelList?.some(
-    provider => provider.provider === props.provider && provider.models.some(model => model.model === props.model))
-  const showWarn = modelList && !modelInstalled
-  return modelList && <Tooltip
-    popupContent={t('workflow.nodes.agent.modelNotInstallTooltip')}
-    triggerMethod='hover'
-    disabled={!modelList || modelInstalled}
-  >
-    <div className='relative'>
-      <ModelSelector
-        modelList={modelList}
-        triggerClassName='bg-workflow-block-parma-bg !h-6 !rounded-md'
-        defaultModel={props}
-        showDeprecatedWarnIcon={false}
-        readonly
-        deprecatedClassName='opacity-50'
-      />
-      {showWarn && <Indicator color={'red'} className='absolute -right-0.5 -top-0.5' />}
-    </div>
-  </Tooltip>
-}
diff --git a/app/components/workflow/nodes/agent/components/tool-icon.tsx b/app/components/workflow/nodes/agent/components/tool-icon.tsx
deleted file mode 100644
index b942588..0000000
--- a/app/components/workflow/nodes/agent/components/tool-icon.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import Tooltip from '@/app/components/base/tooltip'
-import Indicator from '@/app/components/header/indicator'
-import classNames from '@/utils/classnames'
-import { memo, useMemo, useRef, useState } from 'react'
-import { useAllBuiltInTools, useAllCustomTools, useAllWorkflowTools } from '@/service/use-tools'
-import { getIconFromMarketPlace } from '@/utils/get-icon'
-import { useTranslation } from 'react-i18next'
-import { Group } from '@/app/components/base/icons/src/vender/other'
-
-type Status = 'not-installed' | 'not-authorized' | undefined
-
-export type ToolIconProps = {
-  id: string
-  providerName: string
-}
-
-export const ToolIcon = memo(({ providerName }: ToolIconProps) => {
-  const containerRef = useRef<HTMLDivElement>(null)
-  const { data: buildInTools } = useAllBuiltInTools()
-  const { data: customTools } = useAllCustomTools()
-  const { data: workflowTools } = useAllWorkflowTools()
-  const isDataReady = !!buildInTools && !!customTools && !!workflowTools
-  const currentProvider = useMemo(() => {
-    const mergedTools = [...(buildInTools || []), ...(customTools || []), ...(workflowTools || [])]
-    return mergedTools.find((toolWithProvider) => {
-      return toolWithProvider.name === providerName
-    })
-  }, [buildInTools, customTools, providerName, workflowTools])
-  const providerNameParts = providerName.split('/')
-  const author = providerNameParts[0]
-  const name = providerNameParts[1]
-  const icon = useMemo(() => {
-    if (!isDataReady) return ''
-    if (currentProvider) return currentProvider.icon as string
-    const iconFromMarketPlace = getIconFromMarketPlace(`${author}/${name}`)
-    return iconFromMarketPlace
-  }, [author, currentProvider, name, isDataReady])
-  const status: Status = useMemo(() => {
-    if (!isDataReady) return undefined
-    if (!currentProvider) return 'not-installed'
-    if (currentProvider.is_team_authorization === false) return 'not-authorized'
-    return undefined
-  }, [currentProvider, isDataReady])
-  const indicator = status === 'not-installed' ? 'red' : status === 'not-authorized' ? 'yellow' : undefined
-  const notSuccess = (['not-installed', 'not-authorized'] as Array<Status>).includes(status)
-  const { t } = useTranslation()
-  const tooltip = useMemo(() => {
-    if (!notSuccess) return undefined
-    if (status === 'not-installed') return t('workflow.nodes.agent.toolNotInstallTooltip', { tool: name })
-    if (status === 'not-authorized') return t('workflow.nodes.agent.toolNotAuthorizedTooltip', { tool: name })
-    throw new Error('Unknown status')
-  }, [name, notSuccess, status, t])
-  const [iconFetchError, setIconFetchError] = useState(false)
-  return <Tooltip
-    triggerMethod='hover'
-    popupContent={tooltip}
-    disabled={!notSuccess}
-  >
-    <div
-      className={classNames(
-        'size-5 border-[0.5px] border-components-panel-border-subtle bg-background-default-dodge relative flex items-center justify-center rounded-[6px]',
-      )}
-      ref={containerRef}
-    >
-      {(!iconFetchError && isDataReady)
-
-        ? <img
-          src={icon}
-          alt='tool icon'
-          className={classNames(
-            'w-full h-full size-3.5 object-cover',
-            notSuccess && 'opacity-50',
-          )}
-          onError={() => setIconFetchError(true)}
-        />
-        : <Group className="h-3 w-3 opacity-35" />
-      }
-      {indicator && <Indicator color={indicator} className="absolute right-[-1px] top-[-1px]" />}
-    </div>
-  </Tooltip>
-})
-
-ToolIcon.displayName = 'ToolIcon'
diff --git a/app/components/workflow/nodes/agent/default.ts b/app/components/workflow/nodes/agent/default.ts
deleted file mode 100644
index 4e7b447..0000000
--- a/app/components/workflow/nodes/agent/default.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-import type { StrategyDetail, StrategyPluginDetail } from '@/app/components/plugins/types'
-import { ALL_CHAT_AVAILABLE_BLOCKS, ALL_COMPLETION_AVAILABLE_BLOCKS } from '@/app/components/workflow/blocks'
-import type { NodeDefault } from '../../types'
-import type { AgentNodeType } from './types'
-import { FormTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import { renderI18nObject } from '@/i18n'
-
-const nodeDefault: NodeDefault<AgentNodeType> = {
-  defaultValue: {
-  },
-  getAvailablePrevNodes(isChatMode) {
-    return isChatMode
-      ? ALL_CHAT_AVAILABLE_BLOCKS
-      : ALL_COMPLETION_AVAILABLE_BLOCKS
-  },
-  getAvailableNextNodes(isChatMode) {
-    return isChatMode
-      ? ALL_CHAT_AVAILABLE_BLOCKS
-      : ALL_COMPLETION_AVAILABLE_BLOCKS
-  },
-  checkValid(payload, t, moreDataForCheckValid: {
-    strategyProvider?: StrategyPluginDetail,
-    strategy?: StrategyDetail
-    language: string
-    isReadyForCheckValid: boolean
-  }) {
-    const { strategy, language, isReadyForCheckValid } = moreDataForCheckValid
-    if (!isReadyForCheckValid) {
-      return {
-        isValid: true,
-        errorMessage: '',
-      }
-    }
-    if (!strategy) {
-      return {
-        isValid: false,
-        errorMessage: t('workflow.nodes.agent.checkList.strategyNotSelected'),
-      }
-    }
-    for (const param of strategy.parameters) {
-      // single tool
-      if (param.required && param.type === FormTypeEnum.toolSelector) {
-        // no value
-        const toolValue = payload.agent_parameters?.[param.name]?.value
-        if (!toolValue) {
-          return {
-            isValid: false,
-            errorMessage: t('workflow.errorMsg.fieldRequired', { field: renderI18nObject(param.label, language) }),
-          }
-        }
-        // not enabled
-        else if (!toolValue.enabled) {
-          return {
-            isValid: false,
-            errorMessage: t('workflow.errorMsg.noValidTool', { field: renderI18nObject(param.label, language) }),
-          }
-        }
-        // check form of tool
-        else {
-          const schemas = toolValue.schemas || []
-          const userSettings = toolValue.settings
-          const reasoningConfig = toolValue.parameters
-          schemas.forEach((schema: any) => {
-            if (schema?.required) {
-              if (schema.form === 'form' && !userSettings[schema.name]?.value) {
-                return {
-                  isValid: false,
-                  errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
-                }
-              }
-              if (schema.form === 'llm' && reasoningConfig[schema.name].auto === 0 && !userSettings[schema.name]?.value) {
-                return {
-                  isValid: false,
-                  errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
-                }
-              }
-            }
-          })
-        }
-      }
-      // multiple tools
-      if (param.required && param.type === FormTypeEnum.multiToolSelector) {
-        const tools = payload.agent_parameters?.[param.name]?.value || []
-        // no value
-        if (!tools.length) {
-          return {
-            isValid: false,
-            errorMessage: t('workflow.errorMsg.fieldRequired', { field: renderI18nObject(param.label, language) }),
-          }
-        }
-        // not enabled
-        else if (tools.every((tool: any) => !tool.enabled)) {
-          return {
-            isValid: false,
-            errorMessage: t('workflow.errorMsg.noValidTool', { field: renderI18nObject(param.label, language) }),
-          }
-        }
-        // check form of tools
-        else {
-          const validState = {
-            isValid: true,
-            errorMessage: '',
-          }
-          for (const tool of tools) {
-            const schemas = tool.schemas || []
-            const userSettings = tool.settings
-            const reasoningConfig = tool.parameters
-            schemas.forEach((schema: any) => {
-              if (schema?.required) {
-                if (schema.form === 'form' && !userSettings[schema.name]?.value) {
-                  return {
-                    isValid: false,
-                    errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
-                  }
-                }
-                if (schema.form === 'llm' && reasoningConfig[schema.name]?.auto === 0 && !reasoningConfig[schema.name]?.value) {
-                  return {
-                    isValid: false,
-                    errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
-                  }
-                }
-              }
-            })
-          }
-          return validState
-        }
-      }
-      // common params
-      if (param.required && !payload.agent_parameters?.[param.name]?.value) {
-        return {
-          isValid: false,
-          errorMessage: t('workflow.errorMsg.fieldRequired', { field: renderI18nObject(param.label, language) }),
-        }
-      }
-    }
-    return {
-      isValid: true,
-      errorMessage: '',
-    }
-  },
-}
-
-export default nodeDefault
diff --git a/app/components/workflow/nodes/agent/node.tsx b/app/components/workflow/nodes/agent/node.tsx
deleted file mode 100644
index 57ad2a0..0000000
--- a/app/components/workflow/nodes/agent/node.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import { type FC, memo, useMemo } from 'react'
-import type { NodeProps } from '../../types'
-import type { AgentNodeType } from './types'
-import { SettingItem } from '../_base/components/setting-item'
-import { Group, GroupLabel } from '../_base/components/group'
-import type { ToolIconProps } from './components/tool-icon'
-import { ToolIcon } from './components/tool-icon'
-import useConfig from './use-config'
-import { useTranslation } from 'react-i18next'
-import { FormTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import { useRenderI18nObject } from '@/hooks/use-i18n'
-import { ModelBar } from './components/model-bar'
-
-const AgentNode: FC<NodeProps<AgentNodeType>> = (props) => {
-  const { inputs, currentStrategy, currentStrategyStatus, pluginDetail } = useConfig(props.id, props.data)
-  const renderI18nObject = useRenderI18nObject()
-  const { t } = useTranslation()
-  const models = useMemo(() => {
-    if (!inputs) return []
-    // if selected, show in node
-    // if required and not selected, show empty selector
-    // if not required and not selected, show nothing
-    const models = currentStrategy?.parameters
-      .filter(param => param.type === FormTypeEnum.modelSelector)
-      .reduce((acc, param) => {
-        const item = inputs.agent_parameters?.[param.name]?.value
-        if (!item) {
-          if (param.required) {
-            acc.push({ param: param.name })
-            return acc
-          }
-          else { return acc }
-        }
-        acc.push({ provider: item.provider, model: item.model, param: param.name })
-        return acc
-      }, [] as Array<{ param: string } | { provider: string, model: string, param: string }>) || []
-    return models
-  }, [currentStrategy, inputs])
-
-  const tools = useMemo(() => {
-    const tools: Array<ToolIconProps> = []
-    currentStrategy?.parameters.forEach((param, i) => {
-      if (param.type === FormTypeEnum.toolSelector) {
-        const field = param.name
-        const value = inputs.agent_parameters?.[field]?.value
-        if (value) {
-          tools.push({
-            id: `${param.name}-${i}`,
-            providerName: value.provider_name as any,
-          })
-        }
-      }
-      if (param.type === FormTypeEnum.multiToolSelector) {
-        const field = param.name
-        const value = inputs.agent_parameters?.[field]?.value
-        if (value) {
-          (value as unknown as any[]).forEach((item) => {
-            tools.push({
-              id: `${param.name}-${i}`,
-              providerName: item.provider_name,
-            })
-          })
-        }
-      }
-    })
-    return tools
-  }, [currentStrategy?.parameters, inputs.agent_parameters])
-  return <div className='mb-1 space-y-1 px-3 py-1'>
-    {inputs.agent_strategy_name
-      ? <SettingItem
-        label={t('workflow.nodes.agent.strategy.shortLabel')}
-        status={
-          currentStrategyStatus && !currentStrategyStatus.isExistInPlugin
-            ? 'error'
-            : undefined
-        }
-        tooltip={
-          (currentStrategyStatus && !currentStrategyStatus.isExistInPlugin)
-            ? t('workflow.nodes.agent.strategyNotInstallTooltip', {
-              plugin: pluginDetail?.declaration.label
-                ? renderI18nObject(pluginDetail?.declaration.label)
-                : undefined,
-              strategy: inputs.agent_strategy_label,
-            })
-            : undefined
-        }
-      >
-        {inputs.agent_strategy_label}
-      </SettingItem>
-      : <SettingItem label={t('workflow.nodes.agent.strategyNotSet')} />}
-    {models.length > 0 && <Group
-      label={<GroupLabel className='mt-1'>
-        {t('workflow.nodes.agent.model')}
-      </GroupLabel>}
-    >
-      {models.map((model) => {
-        return <ModelBar
-          {...model}
-          key={model.param}
-        />
-      })}
-    </Group>}
-    {tools.length > 0 && <Group label={<GroupLabel className='mt-1'>
-      {t('workflow.nodes.agent.toolbox')}
-    </GroupLabel>}>
-      <div className='grid grid-cols-10 gap-0.5'>
-        {tools.map(tool => <ToolIcon {...tool} key={tool.id} />)}
-      </div>
-    </Group>}
-  </div>
-}
-
-AgentNode.displayName = 'AgentNode'
-
-export default memo(AgentNode)
diff --git a/app/components/workflow/nodes/agent/panel.tsx b/app/components/workflow/nodes/agent/panel.tsx
deleted file mode 100644
index f92e92d..0000000
--- a/app/components/workflow/nodes/agent/panel.tsx
+++ /dev/null
@@ -1,177 +0,0 @@
-import type { FC } from 'react'
-import { memo, useMemo } from 'react'
-import type { NodePanelProps } from '../../types'
-import { AgentFeature, type AgentNodeType } from './types'
-import Field from '../_base/components/field'
-import { AgentStrategy } from '../_base/components/agent-strategy'
-import useConfig from './use-config'
-import { useTranslation } from 'react-i18next'
-import OutputVars, { VarItem } from '../_base/components/output-vars'
-import type { StrategyParamItem } from '@/app/components/plugins/types'
-import type { CredentialFormSchema } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import BeforeRunForm from '@/app/components/workflow/nodes/_base/components/before-run-form'
-import ResultPanel from '@/app/components/workflow/run/result-panel'
-import formatTracing from '@/app/components/workflow/run/utils/format-log'
-import { useLogs } from '@/app/components/workflow/run/hooks'
-import type { Props as FormProps } from '@/app/components/workflow/nodes/_base/components/before-run-form/form'
-import { toType } from '@/app/components/tools/utils/to-form-schema'
-import { useStore } from '../../store'
-import Split from '../_base/components/split'
-import MemoryConfig from '../_base/components/memory-config'
-
-const i18nPrefix = 'workflow.nodes.agent'
-
-export function strategyParamToCredientialForm(param: StrategyParamItem): CredentialFormSchema {
-  return {
-    ...param as any,
-    variable: param.name,
-    show_on: [],
-    type: toType(param.type),
-    tooltip: param.help,
-  }
-}
-
-const AgentPanel: FC<NodePanelProps<AgentNodeType>> = (props) => {
-  const {
-    inputs,
-    setInputs,
-    currentStrategy,
-    formData,
-    onFormChange,
-    isChatMode,
-    availableNodesWithParent,
-    availableVars,
-    readOnly,
-    isShowSingleRun,
-    hideSingleRun,
-    runningStatus,
-    handleRun,
-    handleStop,
-    runResult,
-    runInputData,
-    setRunInputData,
-    varInputs,
-    outputSchema,
-    handleMemoryChange,
-  } = useConfig(props.id, props.data)
-  const { t } = useTranslation()
-  const nodeInfo = useMemo(() => {
-    if (!runResult)
-      return
-    return formatTracing([runResult], t)[0]
-  }, [runResult, t])
-  const logsParams = useLogs()
-  const singleRunForms = (() => {
-    const forms: FormProps[] = []
-
-    if (varInputs.length > 0) {
-      forms.push(
-        {
-          label: t(`${i18nPrefix}.singleRun.variable`)!,
-          inputs: varInputs,
-          values: runInputData,
-          onChange: setRunInputData,
-        },
-      )
-    }
-
-    return forms
-  })()
-
-  const resetEditor = useStore(s => s.setControlPromptEditorRerenderKey)
-
-  return <div className='my-2'>
-    <Field
-    required
-    title={t('workflow.nodes.agent.strategy.label')}
-    className='px-4 py-2'
-    tooltip={t('workflow.nodes.agent.strategy.tooltip')} >
-      <AgentStrategy
-        strategy={inputs.agent_strategy_name ? {
-          agent_strategy_provider_name: inputs.agent_strategy_provider_name!,
-          agent_strategy_name: inputs.agent_strategy_name!,
-          agent_strategy_label: inputs.agent_strategy_label!,
-          agent_output_schema: inputs.output_schema,
-          plugin_unique_identifier: inputs.plugin_unique_identifier!,
-        } : undefined}
-        onStrategyChange={(strategy) => {
-          setInputs({
-            ...inputs,
-            agent_strategy_provider_name: strategy?.agent_strategy_provider_name,
-            agent_strategy_name: strategy?.agent_strategy_name,
-            agent_strategy_label: strategy?.agent_strategy_label,
-            output_schema: strategy!.agent_output_schema,
-            plugin_unique_identifier: strategy!.plugin_unique_identifier,
-          })
-          resetEditor(Date.now())
-        }}
-        formSchema={currentStrategy?.parameters?.map(strategyParamToCredientialForm) || []}
-        formValue={formData}
-        onFormValueChange={onFormChange}
-        nodeOutputVars={availableVars}
-        availableNodes={availableNodesWithParent}
-        nodeId={props.id}
-      />
-    </Field>
-    <div className='px-4 py-2'>
-      {isChatMode && currentStrategy?.features?.includes(AgentFeature.HISTORY_MESSAGES) && (
-        <>
-          <Split />
-          <MemoryConfig
-            className='mt-4'
-            readonly={readOnly}
-            config={{ data: inputs.memory }}
-            onChange={handleMemoryChange}
-            canSetRoleName={false}
-          />
-        </>
-      )}
-    </div>
-    <div>
-      <OutputVars>
-        <VarItem
-          name='text'
-          type='String'
-          description={t(`${i18nPrefix}.outputVars.text`)}
-        />
-        <VarItem
-          name='files'
-          type='Array[File]'
-          description={t(`${i18nPrefix}.outputVars.files.title`)}
-        />
-        <VarItem
-          name='json'
-          type='Array[Object]'
-          description={t(`${i18nPrefix}.outputVars.json`)}
-        />
-        {outputSchema.map(({ name, type, description }) => (
-          <VarItem
-            key={name}
-            name={name}
-            type={type}
-            description={description}
-          />
-        ))}
-      </OutputVars>
-    </div>
-    {
-      isShowSingleRun && (
-        <BeforeRunForm
-          nodeName={inputs.title}
-          nodeType={inputs.type}
-          onHide={hideSingleRun}
-          forms={singleRunForms}
-          runningStatus={runningStatus}
-          onRun={handleRun}
-          onStop={handleStop}
-          {...logsParams}
-          result={<ResultPanel {...runResult} nodeInfo={nodeInfo} showSteps={false} {...logsParams} />}
-        />
-      )
-    }
-  </div>
-}
-
-AgentPanel.displayName = 'AgentPanel'
-
-export default memo(AgentPanel)
diff --git a/app/components/workflow/nodes/agent/types.ts b/app/components/workflow/nodes/agent/types.ts
deleted file mode 100644
index ca8bb5e..0000000
--- a/app/components/workflow/nodes/agent/types.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type { CommonNodeType, Memory } from '@/app/components/workflow/types'
-import type { ToolVarInputs } from '../tool/types'
-
-export type AgentNodeType = CommonNodeType & {
-  agent_strategy_provider_name?: string
-  agent_strategy_name?: string
-  agent_strategy_label?: string
-  agent_parameters?: ToolVarInputs
-  output_schema: Record<string, any>
-  plugin_unique_identifier?: string
-  memory?: Memory
-}
-
-export enum AgentFeature {
-  HISTORY_MESSAGES = 'history-messages',
-}
diff --git a/app/components/workflow/nodes/agent/use-config.ts b/app/components/workflow/nodes/agent/use-config.ts
deleted file mode 100644
index 8196caa..0000000
--- a/app/components/workflow/nodes/agent/use-config.ts
+++ /dev/null
@@ -1,220 +0,0 @@
-import { useStrategyProviderDetail } from '@/service/use-strategy'
-import useNodeCrud from '../_base/hooks/use-node-crud'
-import useVarList from '../_base/hooks/use-var-list'
-import useOneStepRun from '../_base/hooks/use-one-step-run'
-import type { AgentNodeType } from './types'
-import {
-  useIsChatMode,
-  useNodesReadOnly,
-} from '@/app/components/workflow/hooks'
-import { useCallback, useMemo } from 'react'
-import { type ToolVarInputs, VarType } from '../tool/types'
-import { useCheckInstalled, useFetchPluginsInMarketPlaceByIds } from '@/service/use-plugins'
-import type { Memory, Var } from '../../types'
-import { VarType as VarKindType } from '../../types'
-import useAvailableVarList from '../_base/hooks/use-available-var-list'
-import produce from 'immer'
-
-export type StrategyStatus = {
-  plugin: {
-    source: 'external' | 'marketplace'
-    installed: boolean
-  }
-  isExistInPlugin: boolean
-}
-
-export const useStrategyInfo = (
-  strategyProviderName?: string,
-  strategyName?: string,
-) => {
-  const strategyProvider = useStrategyProviderDetail(
-    strategyProviderName || '',
-    { retry: false },
-  )
-  const strategy = strategyProvider.data?.declaration.strategies.find(
-    str => str.identity.name === strategyName,
-  )
-  const marketplace = useFetchPluginsInMarketPlaceByIds([strategyProviderName!], {
-    retry: false,
-  })
-  const strategyStatus: StrategyStatus | undefined = useMemo(() => {
-    if (strategyProvider.isLoading || marketplace.isLoading)
-      return undefined
-    const strategyExist = !!strategy
-    const isPluginInstalled = !strategyProvider.isError
-    const isInMarketplace = !!marketplace.data?.data.plugins.at(0)
-    return {
-      plugin: {
-        source: isInMarketplace ? 'marketplace' : 'external',
-        installed: isPluginInstalled,
-      },
-      isExistInPlugin: strategyExist,
-    }
-  }, [strategy, marketplace, strategyProvider.isError, strategyProvider.isLoading])
-  const refetch = useCallback(() => {
-    strategyProvider.refetch()
-    marketplace.refetch()
-  }, [marketplace, strategyProvider])
-  return {
-    strategyProvider,
-    strategy,
-    strategyStatus,
-    refetch,
-  }
-}
-
-const useConfig = (id: string, payload: AgentNodeType) => {
-  const { nodesReadOnly: readOnly } = useNodesReadOnly()
-  const { inputs, setInputs } = useNodeCrud<AgentNodeType>(id, payload)
-  // variables
-  const { handleVarListChange, handleAddVariable } = useVarList<AgentNodeType>({
-    inputs,
-    setInputs,
-  })
-  const {
-    strategyStatus: currentStrategyStatus,
-    strategy: currentStrategy,
-    strategyProvider,
-  } = useStrategyInfo(
-    inputs.agent_strategy_provider_name,
-    inputs.agent_strategy_name,
-  )
-  const pluginId = inputs.agent_strategy_provider_name?.split('/').splice(0, 2).join('/')
-  const pluginDetail = useCheckInstalled({
-    pluginIds: [pluginId!],
-    enabled: Boolean(pluginId),
-  })
-  const formData = useMemo(() => {
-    const paramNameList = (currentStrategy?.parameters || []).map(item => item.name)
-    return Object.fromEntries(
-      Object.entries(inputs.agent_parameters || {}).filter(([name]) => paramNameList.includes(name)).map(([key, value]) => {
-        return [key, value.value]
-      }),
-    )
-  }, [inputs.agent_parameters, currentStrategy?.parameters])
-  const onFormChange = (value: Record<string, any>) => {
-    const res: ToolVarInputs = {}
-    Object.entries(value).forEach(([key, val]) => {
-      res[key] = {
-        type: VarType.constant,
-        value: val,
-      }
-    })
-    setInputs({
-      ...inputs,
-      agent_parameters: res,
-    })
-  }
-
-  // vars
-
-  const filterMemoryPromptVar = useCallback((varPayload: Var) => {
-    return [
-      VarKindType.arrayObject,
-      VarKindType.array,
-      VarKindType.number,
-      VarKindType.string,
-      VarKindType.secret,
-      VarKindType.arrayString,
-      VarKindType.arrayNumber,
-      VarKindType.file,
-      VarKindType.arrayFile,
-    ].includes(varPayload.type)
-  }, [])
-
-  const {
-    availableVars,
-    availableNodesWithParent,
-  } = useAvailableVarList(id, {
-    onlyLeafNodeVar: false,
-    filterVar: filterMemoryPromptVar,
-  })
-
-  // single run
-  const {
-    isShowSingleRun,
-    showSingleRun,
-    hideSingleRun,
-    toVarInputs,
-    runningStatus,
-    handleRun,
-    handleStop,
-    runInputData,
-    setRunInputData,
-    runResult,
-    getInputVars,
-  } = useOneStepRun<AgentNodeType>({
-    id,
-    data: inputs,
-    defaultRunInputData: {},
-  })
-  const allVarStrArr = (() => {
-    const arr = currentStrategy?.parameters.filter(item => item.type === 'string').map((item) => {
-      return formData[item.name]
-    }) || []
-
-    return arr
-  })()
-  const varInputs = (() => {
-    const vars = getInputVars(allVarStrArr)
-
-    return vars
-  })()
-
-  const outputSchema = useMemo(() => {
-    const res: any[] = []
-    if (!inputs.output_schema)
-      return []
-    Object.keys(inputs.output_schema.properties).forEach((outputKey) => {
-      const output = inputs.output_schema.properties[outputKey]
-      res.push({
-        name: outputKey,
-        type: output.type === 'array'
-          ? `Array[${output.items?.type.slice(0, 1).toLocaleUpperCase()}${output.items?.type.slice(1)}]`
-          : `${output.type.slice(0, 1).toLocaleUpperCase()}${output.type.slice(1)}`,
-        description: output.description,
-      })
-    })
-    return res
-  }, [inputs.output_schema])
-
-  const handleMemoryChange = useCallback((newMemory?: Memory) => {
-    const newInputs = produce(inputs, (draft) => {
-      draft.memory = newMemory
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-  const isChatMode = useIsChatMode()
-  return {
-    readOnly,
-    inputs,
-    setInputs,
-    handleVarListChange,
-    handleAddVariable,
-    currentStrategy,
-    formData,
-    onFormChange,
-    currentStrategyStatus,
-    strategyProvider: strategyProvider.data,
-    pluginDetail: pluginDetail.data?.plugins.at(0),
-    availableVars,
-    availableNodesWithParent,
-
-    isShowSingleRun,
-    showSingleRun,
-    hideSingleRun,
-    toVarInputs,
-    runningStatus,
-    handleRun,
-    handleStop,
-    runInputData,
-    setRunInputData,
-    runResult,
-    varInputs,
-    outputSchema,
-    handleMemoryChange,
-    isChatMode,
-  }
-}
-
-export default useConfig
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/add-condition.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/add-condition.tsx
deleted file mode 100644
index ed6b4c6..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/add-condition.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import {
-  useCallback,
-  useMemo,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiAddLine,
-} from '@remixicon/react'
-import MetadataIcon from './metadata-icon'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Button from '@/app/components/base/button'
-import Input from '@/app/components/base/input'
-import type { MetadataShape } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-import type { MetadataInDoc } from '@/models/datasets'
-
-const AddCondition = ({
-  metadataList,
-  handleAddCondition,
-}: Pick<MetadataShape, 'handleAddCondition' | 'metadataList'>) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const [searchText, setSearchText] = useState('')
-
-  const filteredMetadataList = useMemo(() => {
-    return metadataList?.filter(metadata => metadata.name.includes(searchText))
-  }, [metadataList, searchText])
-
-  const handleAddConditionWrapped = useCallback((item: MetadataInDoc) => {
-    handleAddCondition?.(item)
-    setOpen(false)
-  }, [handleAddCondition])
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-start'
-      offset={{
-        mainAxis: 3,
-        crossAxis: 0,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(!open)}>
-        <Button
-          size='small'
-          variant='secondary'
-        >
-          <RiAddLine className='h-3.5 w-3.5' />
-          {t('workflow.nodes.knowledgeRetrieval.metadata.panel.add')}
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <div className='w-[320px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg'>
-          <div className='p-2 pb-1'>
-            <Input
-              showLeftIcon
-              placeholder={t('workflow.nodes.knowledgeRetrieval.metadata.panel.search')}
-              value={searchText}
-              onChange={e => setSearchText(e.target.value)}
-            />
-          </div>
-          <div className='p-1'>
-            {
-              filteredMetadataList?.map(metadata => (
-                <div
-                  key={metadata.name}
-                  className='system-sm-medium flex h-6 cursor-pointer items-center rounded-md px-3 text-text-secondary hover:bg-state-base-hover'
-                >
-                  <div className='mr-1 p-[1px]'>
-                    <MetadataIcon type={metadata.type} />
-                  </div>
-                  <div
-                    className='grow truncate'
-                    title={metadata.name}
-                    onClick={() => handleAddConditionWrapped(metadata)}
-                  >
-                    {metadata.name}
-                  </div>
-                  <div className='system-xs-regular shrink-0 text-text-tertiary'>{metadata.type}</div>
-                </div>
-              ))
-            }
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default AddCondition
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-common-variable-selector.tsx.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-common-variable-selector.tsx.tsx
deleted file mode 100644
index 00ba306..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-common-variable-selector.tsx.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import type { VarType } from '@/app/components/workflow/types'
-import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development'
-
-type ConditionCommonVariableSelectorProps = {
-  variables?: { name: string; type: string }[]
-  value?: string | number
-  varType?: VarType
-  onChange: (v: string) => void
-}
-
-const ConditionCommonVariableSelector = ({
-  variables = [],
-  value,
-  onChange,
-  varType,
-}: ConditionCommonVariableSelectorProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  const selected = variables.find(v => v.name === value)
-  const handleChange = useCallback((v: string) => {
-    onChange(v)
-    setOpen(false)
-  }, [onChange])
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-    >
-      <PortalToFollowElemTrigger asChild onClick={() => {
-        if (!variables.length) return
-        setOpen(!open)
-      }}>
-        <div className="flex h-6 grow cursor-pointer items-center">
-          {
-            selected && (
-              <div className='system-xs-medium inline-flex h-6 items-center rounded-md border-[0.5px] border-components-panel-border-subtle bg-components-badge-white-to-dark pl-[5px] pr-1.5 text-text-secondary shadow-xs'>
-                <Variable02 className='mr-1 h-3.5 w-3.5 text-text-accent' />
-                {selected.name}
-              </div>
-            )
-          }
-          {
-            !selected && (
-              <>
-                <div className='system-sm-regular flex grow items-center text-components-input-text-placeholder'>
-                  <Variable02 className='mr-1 h-4 w-4' />
-                  {t('workflow.nodes.knowledgeRetrieval.metadata.panel.select')}
-                </div>
-                <div className='system-2xs-medium flex h-5 shrink-0 items-center rounded-[5px] border border-divider-deep px-[5px] text-text-tertiary'>
-                  {varType}
-                </div>
-              </>
-            )
-          }
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className='w-[200px] rounded-lg border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          {
-            variables.map(v => (
-              <div
-                key={v.name}
-                className='system-xs-medium flex h-6 cursor-pointer items-center rounded-md px-2 text-text-secondary hover:bg-state-base-hover'
-                onClick={() => handleChange(v.name)}
-              >
-                <Variable02 className='mr-1 h-4 w-4 text-text-accent' />
-                {v.name}
-              </div>
-            ))
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default ConditionCommonVariableSelector
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-date.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-date.tsx
deleted file mode 100644
index eda0401..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-date.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-import { useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import dayjs from 'dayjs'
-import {
-  RiCalendarLine,
-  RiCloseCircleFill,
-} from '@remixicon/react'
-import DatePicker from '@/app/components/base/date-and-time-picker/date-picker'
-import type { TriggerProps } from '@/app/components/base/date-and-time-picker/types'
-import cn from '@/utils/classnames'
-import { useAppContext } from '@/context/app-context'
-
-type ConditionDateProps = {
-  value?: number
-  onChange: (date?: number) => void
-}
-const ConditionDate = ({
-  value,
-  onChange,
-}: ConditionDateProps) => {
-  const { t } = useTranslation()
-  const { userProfile: { timezone } } = useAppContext()
-
-  const handleDateChange = useCallback((date?: dayjs.Dayjs) => {
-    if (date)
-      onChange(date.unix())
-    else
-      onChange()
-  }, [onChange])
-
-  const renderTrigger = useCallback(({
-    handleClickTrigger,
-  }: TriggerProps) => {
-    return (
-      <div className='group flex items-center' onClick={handleClickTrigger}>
-        <div
-          className={cn(
-            'system-sm-regular mr-0.5 flex h-6 grow cursor-pointer items-center px-1',
-            value ? 'text-text-secondary' : 'text-text-tertiary',
-          )}
-        >
-          {
-            value
-              ? dayjs(value * 1000).tz(timezone).format('MMMM DD YYYY HH:mm A')
-              : t('workflow.nodes.knowledgeRetrieval.metadata.panel.datePlaceholder')
-          }
-        </div>
-        {
-          value && (
-            <RiCloseCircleFill
-              className={cn(
-                'hidden h-4 w-4 shrink-0 cursor-pointer hover:text-components-input-text-filled group-hover:block',
-                value && 'text-text-quaternary',
-              )}
-              onClick={(e) => {
-                e.stopPropagation()
-                handleDateChange()
-              }}
-            />
-          )
-        }
-        <RiCalendarLine
-          className={cn(
-            'block h-4 w-4 shrink-0',
-            value ? 'text-text-quaternary' : 'text-text-tertiary',
-            value && 'group-hover:hidden',
-          )}
-        />
-      </div>
-    )
-  }, [value, handleDateChange, timezone, t])
-
-  return (
-    <div className='h-8 px-2 py-1'>
-      <DatePicker
-        timezone={timezone}
-        value={value ? dayjs(value * 1000) : undefined}
-        onChange={handleDateChange}
-        onClear={handleDateChange}
-        renderTrigger={renderTrigger}
-      />
-    </div>
-  )
-}
-
-export default ConditionDate
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-item.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-item.tsx
deleted file mode 100644
index 398a229..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-item.tsx
+++ /dev/null
@@ -1,196 +0,0 @@
-import {
-  useCallback,
-  useMemo,
-  useState,
-} from 'react'
-import {
-  RiDeleteBinLine,
-} from '@remixicon/react'
-import MetadataIcon from '../metadata-icon'
-import {
-  COMMON_VARIABLE_REGEX,
-  VARIABLE_REGEX,
-  comparisonOperatorNotRequireValue,
-} from './utils'
-import ConditionOperator from './condition-operator'
-import ConditionString from './condition-string'
-import ConditionNumber from './condition-number'
-import ConditionDate from './condition-date'
-import type {
-  ComparisonOperator,
-  HandleRemoveCondition,
-  HandleUpdateCondition,
-  MetadataFilteringCondition,
-  MetadataShape,
-} from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-import { MetadataFilteringVariableType } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-import cn from '@/utils/classnames'
-
-type ConditionItemProps = {
-  className?: string
-  disabled?: boolean
-  condition: MetadataFilteringCondition // condition may the condition of case or condition of sub variable
-  onRemoveCondition?: HandleRemoveCondition
-  onUpdateCondition?: HandleUpdateCondition
-} & Pick<MetadataShape, 'metadataList' | 'availableStringVars' | 'availableStringNodesWithParent' | 'availableNumberVars' | 'availableNumberNodesWithParent' | 'isCommonVariable' | 'availableCommonStringVars' | 'availableCommonNumberVars'>
-const ConditionItem = ({
-  className,
-  disabled,
-  condition,
-  onRemoveCondition,
-  onUpdateCondition,
-  metadataList = [],
-  availableStringVars = [],
-  availableStringNodesWithParent = [],
-  availableNumberVars = [],
-  availableNumberNodesWithParent = [],
-  isCommonVariable,
-  availableCommonStringVars = [],
-  availableCommonNumberVars = [],
-}: ConditionItemProps) => {
-  const [isHovered, setIsHovered] = useState(false)
-
-  const canChooseOperator = useMemo(() => {
-    if (disabled)
-      return false
-
-    return true
-  }, [disabled])
-
-  const doRemoveCondition = useCallback(() => {
-    onRemoveCondition?.(condition.id)
-  }, [onRemoveCondition, condition.id])
-
-  const currentMetadata = useMemo(() => {
-    return metadataList.find(metadata => metadata.name === condition.name)
-  }, [metadataList, condition.name])
-
-  const handleConditionOperatorChange = useCallback((operator: ComparisonOperator) => {
-    onUpdateCondition?.(
-      condition.id,
-      {
-        ...condition,
-        value: comparisonOperatorNotRequireValue(condition.comparison_operator) ? undefined : condition.value,
-        comparison_operator: operator,
-      })
-  }, [onUpdateCondition, condition])
-
-  const valueAndValueMethod = useMemo(() => {
-    if (
-      (currentMetadata?.type === MetadataFilteringVariableType.string
-       || currentMetadata?.type === MetadataFilteringVariableType.number
-       || currentMetadata?.type === MetadataFilteringVariableType.select)
-      && typeof condition.value === 'string'
-    ) {
-      const regex = isCommonVariable ? COMMON_VARIABLE_REGEX : VARIABLE_REGEX
-      const matchedStartNumber = isCommonVariable ? 2 : 3
-      const matched = condition.value.match(regex)
-
-      if (matched?.length) {
-        return {
-          value: matched[0].slice(matchedStartNumber, -matchedStartNumber),
-          valueMethod: 'variable',
-        }
-      }
-      else {
-        return {
-          value: condition.value,
-          valueMethod: 'constant',
-        }
-      }
-    }
-
-    return {
-      value: condition.value,
-      valueMethod: 'constant',
-    }
-  }, [currentMetadata, condition.value, isCommonVariable])
-  const [localValueMethod, setLocalValueMethod] = useState(valueAndValueMethod.valueMethod)
-
-  const handleValueMethodChange = useCallback((v: string) => {
-    setLocalValueMethod(v)
-    onUpdateCondition?.(condition.id, { ...condition, value: undefined })
-  }, [condition, onUpdateCondition])
-
-  const handleValueChange = useCallback((v: any) => {
-    onUpdateCondition?.(condition.id, { ...condition, value: v })
-  }, [condition, onUpdateCondition])
-
-  return (
-    <div className={cn('mb-1 flex last-of-type:mb-0', className)}>
-      <div className={cn(
-        'grow rounded-lg bg-components-input-bg-normal',
-        isHovered && 'bg-state-destructive-hover',
-      )}>
-        <div className='flex items-center p-1'>
-          <div className='w-0 grow'>
-            <div className='inline-flex h-6 items-center rounded-md border-[0.5px] border-components-panel-border-subtle bg-components-badge-white-to-dark pl-1 pr-1.5 shadow-xs'>
-              <div className='mr-0.5 p-[1px]'>
-                <MetadataIcon type={currentMetadata?.type} className='h-3 w-3' />
-              </div>
-              <div className='system-xs-medium mr-0.5 text-text-secondary'>{currentMetadata?.name}</div>
-              <div className='system-xs-regular text-text-tertiary'>{currentMetadata?.type}</div>
-            </div>
-          </div>
-          <div className='mx-1 h-3 w-[1px] bg-divider-regular'></div>
-          <ConditionOperator
-            disabled={!canChooseOperator}
-            variableType={currentMetadata?.type || MetadataFilteringVariableType.string}
-            value={condition.comparison_operator}
-            onSelect={handleConditionOperatorChange}
-          />
-        </div>
-        <div className='border-t border-t-divider-subtle'>
-          {
-            !comparisonOperatorNotRequireValue(condition.comparison_operator)
-            && (currentMetadata?.type === MetadataFilteringVariableType.string
-             || currentMetadata?.type === MetadataFilteringVariableType.select) && (
-              <ConditionString
-                valueMethod={localValueMethod}
-                onValueMethodChange={handleValueMethodChange}
-                nodesOutputVars={availableStringVars}
-                availableNodes={availableStringNodesWithParent}
-                value={valueAndValueMethod.value as string}
-                onChange={handleValueChange}
-                isCommonVariable={isCommonVariable}
-                commonVariables={availableCommonStringVars}
-              />
-            )
-          }
-          {
-            !comparisonOperatorNotRequireValue(condition.comparison_operator) && currentMetadata?.type === MetadataFilteringVariableType.number && (
-              <ConditionNumber
-                valueMethod={localValueMethod}
-                onValueMethodChange={handleValueMethodChange}
-                nodesOutputVars={availableNumberVars}
-                availableNodes={availableNumberNodesWithParent}
-                value={valueAndValueMethod.value}
-                onChange={handleValueChange}
-                isCommonVariable={isCommonVariable}
-                commonVariables={availableCommonNumberVars}
-              />
-            )
-          }
-          {
-            !comparisonOperatorNotRequireValue(condition.comparison_operator) && currentMetadata?.type === MetadataFilteringVariableType.time && (
-              <ConditionDate
-                value={condition.value as number}
-                onChange={handleValueChange}
-              />
-            )
-          }
-        </div>
-      </div>
-      <div
-        className='ml-1 mt-1 flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-lg text-text-tertiary hover:bg-state-destructive-hover hover:text-text-destructive'
-        onMouseEnter={() => setIsHovered(true)}
-        onMouseLeave={() => setIsHovered(false)}
-        onClick={doRemoveCondition}
-      >
-        <RiDeleteBinLine className='h-4 w-4' />
-      </div>
-    </div>
-  )
-}
-
-export default ConditionItem
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-number.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-number.tsx
deleted file mode 100644
index 32fd64d..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-number.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import ConditionValueMethod from './condition-value-method'
-import type { ConditionValueMethodProps } from './condition-value-method'
-import ConditionVariableSelector from './condition-variable-selector'
-import ConditionCommonVariableSelector from './condition-common-variable-selector.tsx'
-import type {
-  Node,
-  NodeOutPutVar,
-  ValueSelector,
-} from '@/app/components/workflow/types'
-import { VarType } from '@/app/components/workflow/types'
-import Input from '@/app/components/base/input'
-
-type ConditionNumberProps = {
-  value?: string | number
-  onChange: (value?: string | number) => void
-  nodesOutputVars: NodeOutPutVar[]
-  availableNodes: Node[]
-  isCommonVariable?: boolean
-  commonVariables: { name: string, type: string }[]
-} & ConditionValueMethodProps
-const ConditionNumber = ({
-  value,
-  onChange,
-  valueMethod,
-  onValueMethodChange,
-  nodesOutputVars,
-  availableNodes,
-  isCommonVariable,
-  commonVariables,
-}: ConditionNumberProps) => {
-  const { t } = useTranslation()
-  const handleVariableValueChange = useCallback((v: ValueSelector) => {
-    onChange(`{{#${v.join('.')}#}}`)
-  }, [onChange])
-
-  const handleCommonVariableValueChange = useCallback((v: string) => {
-    onChange(`{{${v}}}`)
-  }, [onChange])
-
-  return (
-    <div className='flex h-8 items-center pl-1 pr-2'>
-      <ConditionValueMethod
-        valueMethod={valueMethod}
-        onValueMethodChange={onValueMethodChange}
-      />
-      <div className='ml-1 mr-1.5 h-4 w-[1px] bg-divider-regular'></div>
-      {
-        valueMethod === 'variable' && !isCommonVariable && (
-          <ConditionVariableSelector
-            valueSelector={value ? (value as string).split('.') : []}
-            onChange={handleVariableValueChange}
-            nodesOutputVars={nodesOutputVars}
-            availableNodes={availableNodes}
-            varType={VarType.number}
-          />
-        )
-      }
-      {
-        valueMethod === 'variable' && isCommonVariable && (
-          <ConditionCommonVariableSelector
-            variables={commonVariables}
-            value={value}
-            onChange={handleCommonVariableValueChange}
-            varType={VarType.number}
-          />
-        )
-      }
-      {
-        valueMethod === 'constant' && (
-          <Input
-            className='border-none bg-transparent outline-none hover:bg-transparent focus:bg-transparent focus:shadow-none'
-            value={value}
-            onChange={(e) => {
-              const v = e.target.value
-              onChange(v ? Number(e.target.value) : undefined)
-            }}
-            placeholder={t('workflow.nodes.knowledgeRetrieval.metadata.panel.placeholder')}
-            type='number'
-          />
-        )
-      }
-    </div>
-  )
-}
-
-export default ConditionNumber
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-operator.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-operator.tsx
deleted file mode 100644
index 0e0367c..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-operator.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import {
-  useMemo,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiArrowDownSLine } from '@remixicon/react'
-import {
-  getOperators,
-  isComparisonOperatorNeedTranslate,
-} from './utils'
-import Button from '@/app/components/base/button'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import cn from '@/utils/classnames'
-import type {
-  ComparisonOperator,
-  MetadataFilteringVariableType,
-} from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-
-const i18nPrefix = 'workflow.nodes.ifElse'
-
-type ConditionOperatorProps = {
-  className?: string
-  disabled?: boolean
-  variableType: MetadataFilteringVariableType
-  value?: string
-  onSelect: (value: ComparisonOperator) => void
-}
-const ConditionOperator = ({
-  className,
-  disabled,
-  variableType,
-  value,
-  onSelect,
-}: ConditionOperatorProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  const options = useMemo(() => {
-    return getOperators(variableType).map((o) => {
-      return {
-        label: isComparisonOperatorNeedTranslate(o) ? t(`${i18nPrefix}.comparisonOperator.${o}`) : o,
-        value: o,
-      }
-    })
-  }, [t, variableType])
-  const selectedOption = options.find(o => Array.isArray(value) ? o.value === value[0] : o.value === value)
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
-        <Button
-          className={cn('shrink-0', !selectedOption && 'opacity-50', className)}
-          size='small'
-          variant='ghost'
-          disabled={disabled}
-        >
-          {
-            selectedOption
-              ? selectedOption.label
-              : t(`${i18nPrefix}.select`)
-          }
-          <RiArrowDownSLine className='ml-1 h-3.5 w-3.5' />
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <div className='rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          {
-            options.map(option => (
-              <div
-                key={option.value}
-                className='flex h-7 cursor-pointer items-center rounded-lg px-3 py-1.5 text-[13px] font-medium text-text-secondary hover:bg-state-base-hover'
-                onClick={() => {
-                  onSelect(option.value)
-                  setOpen(false)
-                }}
-              >
-                {option.label}
-              </div>
-            ))
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default ConditionOperator
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-string.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-string.tsx
deleted file mode 100644
index f376ee5..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-string.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import { useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import ConditionValueMethod from './condition-value-method'
-import type { ConditionValueMethodProps } from './condition-value-method'
-import ConditionVariableSelector from './condition-variable-selector'
-import ConditionCommonVariableSelector from './condition-common-variable-selector.tsx'
-import type {
-  Node,
-  NodeOutPutVar,
-  ValueSelector,
-} from '@/app/components/workflow/types'
-import Input from '@/app/components/base/input'
-import { VarType } from '@/app/components/workflow/types'
-
-type ConditionStringProps = {
-  value?: string
-  onChange: (value: string) => void
-  nodesOutputVars: NodeOutPutVar[]
-  availableNodes: Node[]
-  isCommonVariable?: boolean
-  commonVariables: { name: string, type: string }[]
-} & ConditionValueMethodProps
-const ConditionString = ({
-  value,
-  onChange,
-  valueMethod = 'constant',
-  onValueMethodChange,
-  nodesOutputVars,
-  availableNodes,
-  isCommonVariable,
-  commonVariables,
-}: ConditionStringProps) => {
-  const { t } = useTranslation()
-  const handleVariableValueChange = useCallback((v: ValueSelector) => {
-    onChange(`{{#${v.join('.')}#}}`)
-  }, [onChange])
-
-  const handleCommonVariableValueChange = useCallback((v: string) => {
-    onChange(`{{${v}}}`)
-  }, [onChange])
-
-  return (
-    <div className='flex h-8 items-center pl-1 pr-2'>
-      <ConditionValueMethod
-        valueMethod={valueMethod}
-        onValueMethodChange={onValueMethodChange}
-      />
-      <div className='ml-1 mr-1.5 h-4 w-[1px] bg-divider-regular'></div>
-      {
-        valueMethod === 'variable' && !isCommonVariable && (
-          <ConditionVariableSelector
-            valueSelector={value ? value!.split('.') : []}
-            onChange={handleVariableValueChange}
-            nodesOutputVars={nodesOutputVars}
-            availableNodes={availableNodes}
-            varType={VarType.string}
-          />
-        )
-      }
-      {
-        valueMethod === 'variable' && isCommonVariable && (
-          <ConditionCommonVariableSelector
-            variables={commonVariables}
-            value={value}
-            onChange={handleCommonVariableValueChange}
-            varType={VarType.string}
-          />
-        )
-      }
-      {
-        valueMethod === 'constant' && (
-          <Input
-            className='border-none bg-transparent outline-none hover:bg-transparent focus:bg-transparent focus:shadow-none'
-            value={value}
-            onChange={e => onChange(e.target.value)}
-            placeholder={t('workflow.nodes.knowledgeRetrieval.metadata.panel.placeholder')}
-          />
-        )
-      }
-    </div>
-  )
-}
-
-export default ConditionString
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-value-method.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-value-method.tsx
deleted file mode 100644
index 917cb0e..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-value-method.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import { useState } from 'react'
-import { capitalize } from 'lodash-es'
-import { RiArrowDownSLine } from '@remixicon/react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Button from '@/app/components/base/button'
-import cn from '@/utils/classnames'
-
-export type ConditionValueMethodProps = {
-  valueMethod?: string
-  onValueMethodChange: (v: string) => void
-}
-const options = [
-  'variable',
-  'constant',
-]
-const ConditionValueMethod = ({
-  valueMethod = 'variable',
-  onValueMethodChange,
-}: ConditionValueMethodProps) => {
-  const [open, setOpen] = useState(false)
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-start'
-      offset={{ mainAxis: 4, crossAxis: 0 }}
-    >
-      <PortalToFollowElemTrigger asChild onClick={() => setOpen(v => !v)}>
-        <Button
-          className='shrink-0'
-          variant='ghost'
-          size='small'
-        >
-          {capitalize(valueMethod)}
-          <RiArrowDownSLine className='ml-[1px] h-3.5 w-3.5' />
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className='w-[112px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          {
-            options.map(option => (
-              <div
-                key={option}
-                className={cn(
-                  'flex h-7 cursor-pointer items-center rounded-md px-3 hover:bg-state-base-hover',
-                  'text-[13px] font-medium text-text-secondary',
-                  valueMethod === option && 'bg-state-base-hover',
-                )}
-                onClick={() => {
-                  if (valueMethod === option)
-                    return
-                  onValueMethodChange(option)
-                  setOpen(false)
-                }}
-              >
-                {capitalize(option)}
-              </div>
-            ))
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default ConditionValueMethod
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-variable-selector.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-variable-selector.tsx
deleted file mode 100644
index 7908f6a..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/condition-variable-selector.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import VariableTag from '@/app/components/workflow/nodes/_base/components/variable-tag'
-import VarReferenceVars from '@/app/components/workflow/nodes/_base/components/variable/var-reference-vars'
-import type {
-  Node,
-  NodeOutPutVar,
-  ValueSelector,
-  Var,
-} from '@/app/components/workflow/types'
-import { VarType } from '@/app/components/workflow/types'
-import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development'
-
-type ConditionVariableSelectorProps = {
-  valueSelector?: ValueSelector
-  varType?: VarType
-  availableNodes?: Node[]
-  nodesOutputVars?: NodeOutPutVar[]
-  onChange: (valueSelector: ValueSelector, varItem: Var) => void
-}
-
-const ConditionVariableSelector = ({
-  valueSelector = [],
-  varType = VarType.string,
-  availableNodes = [],
-  nodesOutputVars = [],
-  onChange,
-}: ConditionVariableSelectorProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  const handleChange = useCallback((valueSelector: ValueSelector, varItem: Var) => {
-    onChange(valueSelector, varItem)
-    setOpen(false)
-  }, [onChange])
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-    >
-      <PortalToFollowElemTrigger asChild onClick={() => setOpen(!open)}>
-        <div className="flex h-6 grow cursor-pointer items-center">
-          {
-            !!valueSelector.length && (
-              <VariableTag
-                valueSelector={valueSelector}
-                varType={varType}
-                availableNodes={availableNodes}
-                isShort
-              />
-            )
-          }
-          {
-            !valueSelector.length && (
-              <>
-                <div className='system-sm-regular flex grow items-center text-components-input-text-placeholder'>
-                  <Variable02 className='mr-1 h-4 w-4' />
-                  {t('workflow.nodes.knowledgeRetrieval.metadata.panel.select')}
-                </div>
-                <div className='system-2xs-medium flex h-5 shrink-0 items-center rounded-[5px] border border-divider-deep px-[5px] text-text-tertiary'>
-                  {varType}
-                </div>
-              </>
-            )
-          }
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className='w-[296px] rounded-lg border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg'>
-          <VarReferenceVars
-            vars={nodesOutputVars}
-            isSupportFileVar
-            onChange={handleChange}
-          />
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default ConditionVariableSelector
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/index.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/index.tsx
deleted file mode 100644
index 4b129f4..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/index.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import { RiLoopLeftLine } from '@remixicon/react'
-import ConditionItem from './condition-item'
-import cn from '@/utils/classnames'
-import type { MetadataShape } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-import { LogicalOperator } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-
-type ConditionListProps = {
-  disabled?: boolean
-} & Omit<MetadataShape, 'handleAddCondition'>
-
-const ConditionList = ({
-  disabled,
-  metadataList = [],
-  metadataFilteringConditions = {
-    conditions: [],
-    logical_operator: LogicalOperator.and,
-  },
-  handleRemoveCondition,
-  handleToggleConditionLogicalOperator,
-  handleUpdateCondition,
-  availableStringVars,
-  availableStringNodesWithParent,
-  availableNumberVars,
-  availableNumberNodesWithParent,
-  isCommonVariable,
-  availableCommonNumberVars,
-  availableCommonStringVars,
-}: ConditionListProps) => {
-  const { conditions, logical_operator } = metadataFilteringConditions
-
-  return (
-    <div className={cn('relative')}>
-      {
-        conditions.length > 1 && (
-          <div className={cn(
-            'absolute bottom-0 left-0 top-0 w-[44px]',
-          )}>
-            <div className='absolute bottom-4 right-1 top-4 w-2.5 rounded-l-[8px] border border-r-0 border-divider-deep'></div>
-            <div className='absolute right-0 top-1/2 h-[29px] w-4 -translate-y-1/2 bg-components-panel-bg'></div>
-            <div
-              className='absolute right-1 top-1/2 flex h-[21px] -translate-y-1/2 cursor-pointer select-none items-center rounded-md border-[0.5px] border-components-button-secondary-border bg-components-button-secondary-bg px-1 text-[10px] font-semibold text-text-accent-secondary shadow-xs'
-              onClick={() => handleToggleConditionLogicalOperator()}
-            >
-              {logical_operator.toUpperCase()}
-              <RiLoopLeftLine className='ml-0.5 h-3 w-3' />
-            </div>
-          </div>
-        )
-      }
-      <div className={cn(conditions.length > 1 && 'pl-[44px]')}>
-        {
-          conditions.map(condition => (
-            <ConditionItem
-              key={`${condition.id}`}
-              disabled={disabled}
-              condition={condition}
-              onUpdateCondition={handleUpdateCondition}
-              onRemoveCondition={handleRemoveCondition}
-              metadataList={metadataList}
-              availableStringVars={availableStringVars}
-              availableStringNodesWithParent={availableStringNodesWithParent}
-              availableNumberVars={availableNumberVars}
-              availableNumberNodesWithParent={availableNumberNodesWithParent}
-              isCommonVariable={isCommonVariable}
-              availableCommonStringVars={availableCommonStringVars}
-              availableCommonNumberVars={availableCommonNumberVars}
-            />
-          ))
-        }
-      </div>
-    </div>
-  )
-}
-
-export default ConditionList
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/utils.ts b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/utils.ts
deleted file mode 100644
index 6397023..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/condition-list/utils.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import {
-  ComparisonOperator,
-  MetadataFilteringVariableType,
-} from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-
-export const isEmptyRelatedOperator = (operator: ComparisonOperator) => {
-  return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator)
-}
-
-const notTranslateKey = [
-  ComparisonOperator.equal, ComparisonOperator.notEqual,
-  ComparisonOperator.largerThan, ComparisonOperator.largerThanOrEqual,
-  ComparisonOperator.lessThan, ComparisonOperator.lessThanOrEqual,
-]
-
-export const isComparisonOperatorNeedTranslate = (operator?: ComparisonOperator) => {
-  if (!operator)
-    return false
-  return !notTranslateKey.includes(operator)
-}
-
-export const getOperators = (type?: MetadataFilteringVariableType) => {
-  switch (type) {
-    case MetadataFilteringVariableType.string:
-    case MetadataFilteringVariableType.select:
-      return [
-        ComparisonOperator.is,
-        ComparisonOperator.isNot,
-        ComparisonOperator.contains,
-        ComparisonOperator.notContains,
-        ComparisonOperator.startWith,
-        ComparisonOperator.endWith,
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-    case MetadataFilteringVariableType.number:
-      return [
-        ComparisonOperator.equal,
-        ComparisonOperator.notEqual,
-        ComparisonOperator.largerThan,
-        ComparisonOperator.lessThan,
-        ComparisonOperator.largerThanOrEqual,
-        ComparisonOperator.lessThanOrEqual,
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-    default:
-      return [
-        ComparisonOperator.is,
-        ComparisonOperator.before,
-        ComparisonOperator.after,
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-  }
-}
-
-export const comparisonOperatorNotRequireValue = (operator?: ComparisonOperator) => {
-  if (!operator)
-    return false
-
-  return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator)
-}
-
-export const VARIABLE_REGEX = /\{\{(#[a-zA-Z0-9_-]{1,50}(\.[a-zA-Z_]\w{0,29}){1,10}#)\}\}/gi
-export const COMMON_VARIABLE_REGEX = /\{\{([a-zA-Z0-9_-]{1,50})\}\}/gi
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-filter/index.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-filter/index.tsx
deleted file mode 100644
index 8ea313d..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-filter/index.tsx
+++ /dev/null
@@ -1,105 +0,0 @@
-import {
-  useCallback,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import MetadataTrigger from '../metadata-trigger'
-import MetadataFilterSelector from './metadata-filter-selector'
-import Collapse from '@/app/components/workflow/nodes/_base/components/collapse'
-import Tooltip from '@/app/components/base/tooltip'
-import type { MetadataShape } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-import { MetadataFilteringModeEnum } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-import ModelParameterModal from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal'
-import { noop } from 'lodash-es'
-
-type MetadataFilterProps = {
-  metadataFilterMode?: MetadataFilteringModeEnum
-  handleMetadataFilterModeChange: (mode: MetadataFilteringModeEnum) => void
-} & MetadataShape
-const MetadataFilter = ({
-  metadataFilterMode = MetadataFilteringModeEnum.disabled,
-  handleMetadataFilterModeChange,
-  metadataModelConfig,
-  handleMetadataModelChange,
-  handleMetadataCompletionParamsChange,
-  ...restProps
-}: MetadataFilterProps) => {
-  const { t } = useTranslation()
-  const [collapsed, setCollapsed] = useState(true)
-
-  const handleMetadataFilterModeChangeWrapped = useCallback((mode: MetadataFilteringModeEnum) => {
-    if (mode === MetadataFilteringModeEnum.automatic)
-      setCollapsed(false)
-
-    handleMetadataFilterModeChange(mode)
-  }, [handleMetadataFilterModeChange])
-
-  return (
-    <Collapse
-      disabled={metadataFilterMode === MetadataFilteringModeEnum.disabled || metadataFilterMode === MetadataFilteringModeEnum.manual}
-      collapsed={collapsed}
-      onCollapse={setCollapsed}
-      hideCollapseIcon
-      trigger={collapseIcon => (
-        <div className='flex grow items-center justify-between pr-4'>
-          <div className='flex items-center'>
-            <div className='system-sm-semibold-uppercase mr-0.5 text-text-secondary'>
-              {t('workflow.nodes.knowledgeRetrieval.metadata.title')}
-            </div>
-            <Tooltip
-              popupContent={(
-                <div className='w-[200px]'>
-                  {t('workflow.nodes.knowledgeRetrieval.metadata.tip')}
-                </div>
-              )}
-            />
-            {collapseIcon}
-          </div>
-          <div className='flex items-center'>
-            <MetadataFilterSelector
-              value={metadataFilterMode}
-              onSelect={handleMetadataFilterModeChangeWrapped}
-            />
-            {
-              metadataFilterMode === MetadataFilteringModeEnum.manual && (
-                <div className='ml-1'>
-                  <MetadataTrigger {...restProps} />
-                </div>
-              )
-            }
-          </div>
-        </div>
-      )}
-    >
-      <>
-        {
-          metadataFilterMode === MetadataFilteringModeEnum.automatic && (
-            <>
-              <div className='body-xs-regular px-4 text-text-tertiary'>
-                {t('workflow.nodes.knowledgeRetrieval.metadata.options.automatic.desc')}
-              </div>
-              <div className='mt-1 px-4'>
-                <ModelParameterModal
-                  portalToFollowElemContentClassName='z-[50]'
-                  popupClassName='!w-[387px]'
-                  isInWorkflow
-                  isAdvancedMode={true}
-                  mode={metadataModelConfig?.mode || 'chat'}
-                  provider={metadataModelConfig?.provider || ''}
-                  completionParams={metadataModelConfig?.completion_params || { temperature: 0.7 }}
-                  modelId={metadataModelConfig?.name || ''}
-                  setModel={handleMetadataModelChange || noop}
-                  onCompletionParamsChange={handleMetadataCompletionParamsChange || noop}
-                  hideDebugWithMultipleModel
-                  debugWithMultipleModel={false}
-                />
-              </div>
-            </>
-          )
-        }
-      </>
-    </Collapse>
-  )
-}
-
-export default MetadataFilter
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-filter/metadata-filter-selector.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-filter/metadata-filter-selector.tsx
deleted file mode 100644
index 7183e68..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-filter/metadata-filter-selector.tsx
+++ /dev/null
@@ -1,106 +0,0 @@
-import { useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowDownSLine,
-  RiCheckLine,
-} from '@remixicon/react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Button from '@/app/components/base/button'
-import { MetadataFilteringModeEnum } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-
-type MetadataFilterSelectorProps = {
-  value?: MetadataFilteringModeEnum
-  onSelect: (value: MetadataFilteringModeEnum) => void
-}
-const MetadataFilterSelector = ({
-  value = MetadataFilteringModeEnum.disabled,
-  onSelect,
-}: MetadataFilterSelectorProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const options = [
-    {
-      key: MetadataFilteringModeEnum.disabled,
-      value: t('workflow.nodes.knowledgeRetrieval.metadata.options.disabled.title'),
-      desc: t('workflow.nodes.knowledgeRetrieval.metadata.options.disabled.subTitle'),
-    },
-    {
-      key: MetadataFilteringModeEnum.automatic,
-      value: t('workflow.nodes.knowledgeRetrieval.metadata.options.automatic.title'),
-      desc: t('workflow.nodes.knowledgeRetrieval.metadata.options.automatic.subTitle'),
-    },
-    {
-      key: MetadataFilteringModeEnum.manual,
-      value: t('workflow.nodes.knowledgeRetrieval.metadata.options.manual.title'),
-      desc: t('workflow.nodes.knowledgeRetrieval.metadata.options.manual.subTitle'),
-    },
-  ]
-
-  const selectedOption = options.find(option => option.key === value)!
-
-  return (
-    <PortalToFollowElem
-      placement='bottom-end'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger
-        onClick={(e) => {
-          e.stopPropagation()
-          setOpen(!open)
-        }}
-        asChild
-      >
-        <Button
-          variant='secondary'
-          size='small'
-        >
-          {selectedOption.value}
-          <RiArrowDownSLine className='h-3.5 w-3.5' />
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <div className='w-[280px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          {
-            options.map(option => (
-              <div
-                key={option.key}
-                className='flex cursor-pointer rounded-lg p-2 pr-3 hover:bg-state-base-hover'
-                onClick={() => {
-                  onSelect(option.key)
-                  setOpen(false)
-                }}
-              >
-                <div className='w-4 shrink-0'>
-                  {
-                    option.key === value && (
-                      <RiCheckLine className='h-4 w-4 text-text-accent' />
-                    )
-                  }
-                </div>
-                <div className='grow'>
-                  <div className='system-sm-semibold text-text-secondary'>
-                    {option.value}
-                  </div>
-                  <div className='system-xs-regular text-text-tertiary'>
-                    {option.desc}
-                  </div>
-                </div>
-              </div>
-            ))
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default MetadataFilterSelector
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-icon.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-icon.tsx
deleted file mode 100644
index 4a3f539..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-icon.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { memo } from 'react'
-import {
-  RiHashtag,
-  RiTextSnippet,
-  RiTimeLine,
-} from '@remixicon/react'
-import { MetadataFilteringVariableType } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-import cn from '@/utils/classnames'
-
-type MetadataIconProps = {
-  type?: MetadataFilteringVariableType
-  className?: string
-}
-const MetadataIcon = ({
-  type,
-  className,
-}: MetadataIconProps) => {
-  return (
-    <>
-      {
-        (type === MetadataFilteringVariableType.string || type === MetadataFilteringVariableType.select) && (
-          <RiTextSnippet className={cn('h-3.5 w-3.5', className)} />
-        )
-      }
-      {
-        type === MetadataFilteringVariableType.number && (
-          <RiHashtag className={cn('h-3.5 w-3.5', className)} />
-        )
-      }
-      {
-        type === MetadataFilteringVariableType.time && (
-          <RiTimeLine className={cn('h-3.5 w-3.5', className)} />
-        )
-      }
-    </>
-  )
-}
-
-export default memo(MetadataIcon)
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-panel.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-panel.tsx
deleted file mode 100644
index fd390ab..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-panel.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import { RiCloseLine } from '@remixicon/react'
-import AddCondition from './add-condition'
-import ConditionList from './condition-list'
-import type { MetadataShape } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-
-type MetadataPanelProps = {
-  onCancel: () => void
-} & MetadataShape
-const MetadataPanel = ({
-  metadataFilteringConditions,
-  metadataList,
-  onCancel,
-  handleAddCondition,
-  ...restProps
-}: MetadataPanelProps) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='w-[420px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-2xl'>
-      <div className='relative px-3 pt-3.5'>
-        <div className='system-xl-semibold text-text-primary'>
-          {t('workflow.nodes.knowledgeRetrieval.metadata.panel.title')}
-        </div>
-        <div
-          className='absolute bottom-0 right-2.5 flex h-8 w-8 cursor-pointer items-center justify-center'
-          onClick={onCancel}
-        >
-          <RiCloseLine className='h-4 w-4 text-text-tertiary' />
-        </div>
-      </div>
-      <div className='px-1 py-2'>
-        <div className='px-3 py-1'>
-          <div className='pb-2'>
-            <ConditionList
-              metadataList={metadataList}
-              metadataFilteringConditions={metadataFilteringConditions}
-              {...restProps}
-            />
-          </div>
-          <AddCondition
-            metadataList={metadataList}
-            handleAddCondition={handleAddCondition}
-          />
-        </div>
-      </div>
-    </div>
-  )
-}
-
-export default MetadataPanel
diff --git a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-trigger.tsx b/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-trigger.tsx
deleted file mode 100644
index 3381a1f..0000000
--- a/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-trigger.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import {
-  useEffect,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiFilter3Line } from '@remixicon/react'
-import MetadataPanel from './metadata-panel'
-import Button from '@/app/components/base/button'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import type { MetadataShape } from '@/app/components/workflow/nodes/knowledge-retrieval/types'
-
-const MetadataTrigger = ({
-  metadataFilteringConditions,
-  metadataList = [],
-  handleRemoveCondition,
-  selectedDatasetsLoaded,
-  ...restProps
-}: MetadataShape) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const conditions = metadataFilteringConditions?.conditions || []
-
-  useEffect(() => {
-    if (selectedDatasetsLoaded) {
-      conditions.forEach((condition) => {
-        if (!metadataList.find(metadata => metadata.name === condition.name))
-          handleRemoveCondition(condition.id)
-      })
-    }
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [metadataList, handleRemoveCondition, selectedDatasetsLoaded])
-
-  return (
-    <PortalToFollowElem
-      placement='left'
-      offset={4}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(!open)}>
-        <Button
-          variant='secondary-accent'
-          size='small'
-        >
-          <RiFilter3Line className='mr-1 h-3.5 w-3.5' />
-          {t('workflow.nodes.knowledgeRetrieval.metadata.panel.conditions')}
-          <div className='system-2xs-medium-uppercase ml-1 flex items-center rounded-[5px] border border-divider-deep px-1 text-text-tertiary'>
-            {metadataFilteringConditions?.conditions.length || 0}
-          </div>
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <MetadataPanel
-          metadataFilteringConditions={metadataFilteringConditions}
-          onCancel={() => setOpen(false)}
-          metadataList={metadataList}
-          handleRemoveCondition={handleRemoveCondition}
-          {...restProps}
-        />
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default MetadataTrigger
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/code-editor.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/code-editor.tsx
deleted file mode 100644
index a3c2552..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/code-editor.tsx
+++ /dev/null
@@ -1,140 +0,0 @@
-import React, { type FC, useCallback, useEffect, useRef } from 'react'
-import useTheme from '@/hooks/use-theme'
-import { Theme } from '@/types/app'
-import classNames from '@/utils/classnames'
-import { Editor } from '@monaco-editor/react'
-import { RiClipboardLine, RiIndentIncrease } from '@remixicon/react'
-import copy from 'copy-to-clipboard'
-import Tooltip from '@/app/components/base/tooltip'
-import { useTranslation } from 'react-i18next'
-
-type CodeEditorProps = {
-  value: string
-  onUpdate?: (value: string) => void
-  showFormatButton?: boolean
-  editorWrapperClassName?: string
-  readOnly?: boolean
-} & React.HTMLAttributes<HTMLDivElement>
-
-const CodeEditor: FC<CodeEditorProps> = ({
-  value,
-  onUpdate,
-  showFormatButton = true,
-  editorWrapperClassName,
-  readOnly = false,
-  className,
-}) => {
-  const { t } = useTranslation()
-  const { theme } = useTheme()
-  const monacoRef = useRef<any>(null)
-  const editorRef = useRef<any>(null)
-
-  useEffect(() => {
-    if (monacoRef.current) {
-      if (theme === Theme.light)
-        monacoRef.current.editor.setTheme('light-theme')
-      else
-        monacoRef.current.editor.setTheme('dark-theme')
-    }
-  }, [theme])
-
-  const handleEditorDidMount = useCallback((editor: any, monaco: any) => {
-    editorRef.current = editor
-    monacoRef.current = monaco
-    monaco.editor.defineTheme('light-theme', {
-      base: 'vs',
-      inherit: true,
-      rules: [],
-      colors: {
-        'editor.background': '#00000000',
-        'editor.lineHighlightBackground': '#00000000',
-        'focusBorder': '#00000000',
-      },
-    })
-    monaco.editor.defineTheme('dark-theme', {
-      base: 'vs-dark',
-      inherit: true,
-      rules: [],
-      colors: {
-        'editor.background': '#00000000',
-        'editor.lineHighlightBackground': '#00000000',
-        'focusBorder': '#00000000',
-      },
-    })
-    monaco.editor.setTheme('light-theme')
-  }, [])
-
-  const formatJsonContent = useCallback(() => {
-    if (editorRef.current)
-      editorRef.current.getAction('editor.action.formatDocument')?.run()
-  }, [])
-
-  const handleEditorChange = useCallback((value: string | undefined) => {
-    if (value !== undefined)
-      onUpdate?.(value)
-  }, [onUpdate])
-
-  return (
-    <div className={classNames('flex flex-col h-full bg-components-input-bg-normal overflow-hidden', className)}>
-      <div className='flex items-center justify-between pl-2 pr-1 pt-1'>
-        <div className='system-xs-semibold-uppercase py-0.5 text-text-secondary'>
-          <span className='px-1 py-0.5'>JSON</span>
-        </div>
-        <div className='flex items-center gap-x-0.5'>
-          {showFormatButton && (
-            <Tooltip popupContent={t('common.operation.format')}>
-              <button
-                type='button'
-                className='flex h-6 w-6 items-center justify-center'
-                onClick={formatJsonContent}
-              >
-                <RiIndentIncrease className='h-4 w-4 text-text-tertiary' />
-              </button>
-            </Tooltip>
-          )}
-          <Tooltip popupContent={t('common.operation.copy')}>
-            <button
-              type='button'
-              className='flex h-6 w-6 items-center justify-center'
-              onClick={() => copy(value)}>
-              <RiClipboardLine className='h-4 w-4 text-text-tertiary' />
-            </button>
-          </Tooltip>
-        </div>
-      </div>
-      <div className={classNames('relative', editorWrapperClassName)}>
-        <Editor
-          height='100%'
-          defaultLanguage='json'
-          value={value}
-          onChange={handleEditorChange}
-          onMount={handleEditorDidMount}
-          options={{
-            readOnly,
-            domReadOnly: true,
-            minimap: { enabled: false },
-            tabSize: 2,
-            scrollBeyondLastLine: false,
-            wordWrap: 'on',
-            wrappingIndent: 'same',
-            // Add these options
-            overviewRulerBorder: false,
-            hideCursorInOverviewRuler: true,
-            renderLineHighlightOnlyWhenFocus: false,
-            renderLineHighlight: 'none',
-            // Hide scrollbar borders
-            scrollbar: {
-              vertical: 'hidden',
-              horizontal: 'hidden',
-              verticalScrollbarSize: 0,
-              horizontalScrollbarSize: 0,
-              alwaysConsumeMouseWheel: false,
-            },
-          }}
-        />
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(CodeEditor)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/error-message.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/error-message.tsx
deleted file mode 100644
index 2685182..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/error-message.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react'
-import type { FC } from 'react'
-import { RiErrorWarningFill } from '@remixicon/react'
-import classNames from '@/utils/classnames'
-
-type ErrorMessageProps = {
-  message: string
-} & React.HTMLAttributes<HTMLDivElement>
-
-const ErrorMessage: FC<ErrorMessageProps> = ({
-  message,
-  className,
-}) => {
-  return (
-    <div className={classNames(
-      'flex gap-x-1 mt-1 p-2 rounded-lg border-[0.5px] border-components-panel-border bg-toast-error-bg',
-      className,
-    )}>
-      <RiErrorWarningFill className='h-4 w-4 shrink-0 text-text-destructive' />
-      <div className='system-xs-medium max-h-12 grow overflow-y-auto break-words text-text-primary'>
-        {message}
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(ErrorMessage)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/index.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/index.tsx
deleted file mode 100644
index d34836d..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/index.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React, { type FC } from 'react'
-import Modal from '../../../../../base/modal'
-import type { SchemaRoot } from '../../types'
-import JsonSchemaConfig from './json-schema-config'
-
-type JsonSchemaConfigModalProps = {
-  isShow: boolean
-  defaultSchema?: SchemaRoot
-  onSave: (schema: SchemaRoot) => void
-  onClose: () => void
-}
-
-const JsonSchemaConfigModal: FC<JsonSchemaConfigModalProps> = ({
-  isShow,
-  defaultSchema,
-  onSave,
-  onClose,
-}) => {
-  return (
-    <Modal
-      isShow={isShow}
-      onClose={onClose}
-      className='h-[800px] max-w-[960px] p-0'
-    >
-      <JsonSchemaConfig
-        defaultSchema={defaultSchema}
-        onSave={onSave}
-        onClose={onClose}
-      />
-    </Modal>
-  )
-}
-
-export default JsonSchemaConfigModal
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-importer.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-importer.tsx
deleted file mode 100644
index 643059a..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-importer.tsx
+++ /dev/null
@@ -1,136 +0,0 @@
-import React, { type FC, useCallback, useEffect, useRef, useState } from 'react'
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import cn from '@/utils/classnames'
-import { useTranslation } from 'react-i18next'
-import { RiCloseLine } from '@remixicon/react'
-import Button from '@/app/components/base/button'
-import { checkJsonDepth } from '../../utils'
-import { JSON_SCHEMA_MAX_DEPTH } from '@/config'
-import CodeEditor from './code-editor'
-import ErrorMessage from './error-message'
-import { useVisualEditorStore } from './visual-editor/store'
-import { useMittContext } from './visual-editor/context'
-
-type JsonImporterProps = {
-  onSubmit: (schema: any) => void
-  updateBtnWidth: (width: number) => void
-}
-
-const JsonImporter: FC<JsonImporterProps> = ({
-  onSubmit,
-  updateBtnWidth,
-}) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const [json, setJson] = useState('')
-  const [parseError, setParseError] = useState<any>(null)
-  const importBtnRef = useRef<HTMLButtonElement>(null)
-  const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
-  const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
-  const { emit } = useMittContext()
-
-  useEffect(() => {
-    if (importBtnRef.current) {
-      const rect = importBtnRef.current.getBoundingClientRect()
-      updateBtnWidth(rect.width)
-    }
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [])
-
-  const handleTrigger = useCallback((e: React.MouseEvent<HTMLElement, MouseEvent>) => {
-    e.stopPropagation()
-    if (advancedEditing || isAddingNewField)
-      emit('quitEditing', {})
-    setOpen(!open)
-  }, [open, advancedEditing, isAddingNewField, emit])
-
-  const onClose = useCallback(() => {
-    setOpen(false)
-  }, [])
-
-  const handleSubmit = useCallback(() => {
-    try {
-      const parsedJSON = JSON.parse(json)
-      if (typeof parsedJSON !== 'object' || Array.isArray(parsedJSON)) {
-        setParseError(new Error('Root must be an object, not an array or primitive value.'))
-        return
-      }
-      const maxDepth = checkJsonDepth(parsedJSON)
-      if (maxDepth > JSON_SCHEMA_MAX_DEPTH) {
-        setParseError({
-          type: 'error',
-          message: `Schema exceeds maximum depth of ${JSON_SCHEMA_MAX_DEPTH}.`,
-        })
-        return
-      }
-      onSubmit(parsedJSON)
-      setParseError(null)
-      setOpen(false)
-    }
-    catch (e: any) {
-      if (e instanceof Error)
-        setParseError(e)
-      else
-        setParseError(new Error('Invalid JSON'))
-    }
-  }, [onSubmit, json])
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 16,
-      }}
-    >
-      <PortalToFollowElemTrigger ref={importBtnRef} onClick={handleTrigger}>
-        <button
-          type='button'
-          className={cn(
-            'system-xs-medium flex shrink-0 rounded-md px-1.5 py-1 text-text-tertiary hover:bg-components-button-ghost-bg-hover',
-            open && 'bg-components-button-ghost-bg-hover',
-          )}
-        >
-          <span className='px-0.5'>{t('workflow.nodes.llm.jsonSchema.import')}</span>
-        </button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[100]'>
-        <div className='flex w-[400px] flex-col rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-2xl shadow-shadow-shadow-9'>
-          {/* Title */}
-          <div className='relative px-3 pb-1 pt-3.5'>
-            <div className='absolute bottom-0 right-2.5 flex h-8 w-8 items-center justify-center' onClick={onClose}>
-              <RiCloseLine className='h-4 w-4 text-text-tertiary' />
-            </div>
-            <div className='system-xl-semibold flex pl-1 pr-8 text-text-primary'>
-              {t('workflow.nodes.llm.jsonSchema.import')}
-            </div>
-          </div>
-          {/* Content */}
-          <div className='px-4 py-2'>
-            <CodeEditor
-              className='rounded-lg'
-              editorWrapperClassName='h-[340px]'
-              value={json}
-              onUpdate={setJson}
-              showFormatButton={false}
-            />
-            {parseError && <ErrorMessage message={parseError.message} />}
-          </div>
-          {/* Footer */}
-          <div className='flex items-center justify-end gap-x-2 p-4 pt-2'>
-            <Button variant='secondary' onClick={onClose}>
-              {t('common.operation.cancel')}
-            </Button>
-            <Button variant='primary' onClick={handleSubmit}>
-              {t('common.operation.submit')}
-            </Button>
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default JsonImporter
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-config.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-config.tsx
deleted file mode 100644
index 344d02c..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-config.tsx
+++ /dev/null
@@ -1,301 +0,0 @@
-import React, { type FC, useCallback, useState } from 'react'
-import { type SchemaRoot, Type } from '../../types'
-import { RiBracesLine, RiCloseLine, RiExternalLinkLine, RiTimelineView } from '@remixicon/react'
-import { SegmentedControl } from '../../../../../base/segmented-control'
-import JsonSchemaGenerator from './json-schema-generator'
-import Divider from '@/app/components/base/divider'
-import JsonImporter from './json-importer'
-import { useTranslation } from 'react-i18next'
-import Button from '@/app/components/base/button'
-import VisualEditor from './visual-editor'
-import SchemaEditor from './schema-editor'
-import {
-  checkJsonSchemaDepth,
-  convertBooleanToString,
-  getValidationErrorMessage,
-  jsonToSchema,
-  preValidateSchema,
-  validateSchemaAgainstDraft7,
-} from '../../utils'
-import { MittProvider, VisualEditorContextProvider, useMittContext } from './visual-editor/context'
-import ErrorMessage from './error-message'
-import { useVisualEditorStore } from './visual-editor/store'
-import Toast from '@/app/components/base/toast'
-import { useGetLanguage } from '@/context/i18n'
-import { JSON_SCHEMA_MAX_DEPTH } from '@/config'
-
-type JsonSchemaConfigProps = {
-  defaultSchema?: SchemaRoot
-  onSave: (schema: SchemaRoot) => void
-  onClose: () => void
-}
-
-enum SchemaView {
-  VisualEditor = 'visualEditor',
-  JsonSchema = 'jsonSchema',
-}
-
-const VIEW_TABS = [
-  { Icon: RiTimelineView, text: 'Visual Editor', value: SchemaView.VisualEditor },
-  { Icon: RiBracesLine, text: 'JSON Schema', value: SchemaView.JsonSchema },
-]
-
-const DEFAULT_SCHEMA: SchemaRoot = {
-  type: Type.object,
-  properties: {},
-  required: [],
-  additionalProperties: false,
-}
-
-const HELP_DOC_URL = {
-  zh_Hans: 'https://docs.dify.ai/zh-hans/guides/workflow/structured-outputs',
-  en_US: 'https://docs.dify.ai/en/guides/workflow/structured-outputs',
-  ja_JP: 'https://docs.dify.ai/ja-jp/guides/workflow/structured-outputs',
-}
-
-type LocaleKey = keyof typeof HELP_DOC_URL
-
-const JsonSchemaConfig: FC<JsonSchemaConfigProps> = ({
-  defaultSchema,
-  onSave,
-  onClose,
-}) => {
-  const { t } = useTranslation()
-  const locale = useGetLanguage() as LocaleKey
-  const [currentTab, setCurrentTab] = useState(SchemaView.VisualEditor)
-  const [jsonSchema, setJsonSchema] = useState(defaultSchema || DEFAULT_SCHEMA)
-  const [json, setJson] = useState(JSON.stringify(jsonSchema, null, 2))
-  const [btnWidth, setBtnWidth] = useState(0)
-  const [parseError, setParseError] = useState<Error | null>(null)
-  const [validationError, setValidationError] = useState<string>('')
-  const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
-  const setAdvancedEditing = useVisualEditorStore(state => state.setAdvancedEditing)
-  const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
-  const setIsAddingNewField = useVisualEditorStore(state => state.setIsAddingNewField)
-  const setHoveringProperty = useVisualEditorStore(state => state.setHoveringProperty)
-  const { emit } = useMittContext()
-
-  const updateBtnWidth = useCallback((width: number) => {
-    setBtnWidth(width + 32)
-  }, [])
-
-  const handleTabChange = useCallback((value: SchemaView) => {
-    if (currentTab === value) return
-    if (currentTab === SchemaView.JsonSchema) {
-      try {
-        const schema = JSON.parse(json)
-        setParseError(null)
-        const result = preValidateSchema(schema)
-        if (!result.success) {
-          setValidationError(result.error.message)
-          return
-        }
-        const schemaDepth = checkJsonSchemaDepth(schema)
-        if (schemaDepth > JSON_SCHEMA_MAX_DEPTH) {
-          setValidationError(`Schema exceeds maximum depth of ${JSON_SCHEMA_MAX_DEPTH}.`)
-          return
-        }
-        convertBooleanToString(schema)
-        const validationErrors = validateSchemaAgainstDraft7(schema)
-        if (validationErrors.length > 0) {
-          setValidationError(getValidationErrorMessage(validationErrors))
-          return
-        }
-        setJsonSchema(schema)
-        setValidationError('')
-      }
-      catch (error) {
-        setValidationError('')
-        if (error instanceof Error)
-          setParseError(error)
-        else
-          setParseError(new Error('Invalid JSON'))
-        return
-      }
-    }
-    else if (currentTab === SchemaView.VisualEditor) {
-      if (advancedEditing || isAddingNewField)
-        emit('quitEditing', { callback: (backup: SchemaRoot) => setJson(JSON.stringify(backup || jsonSchema, null, 2)) })
-      else
-        setJson(JSON.stringify(jsonSchema, null, 2))
-    }
-
-    setCurrentTab(value)
-  }, [currentTab, jsonSchema, json, advancedEditing, isAddingNewField, emit])
-
-  const handleApplySchema = useCallback((schema: SchemaRoot) => {
-    if (currentTab === SchemaView.VisualEditor)
-      setJsonSchema(schema)
-    else if (currentTab === SchemaView.JsonSchema)
-      setJson(JSON.stringify(schema, null, 2))
-  }, [currentTab])
-
-  const handleSubmit = useCallback((schema: any) => {
-    const jsonSchema = jsonToSchema(schema) as SchemaRoot
-    if (currentTab === SchemaView.VisualEditor)
-      setJsonSchema(jsonSchema)
-    else if (currentTab === SchemaView.JsonSchema)
-      setJson(JSON.stringify(jsonSchema, null, 2))
-  }, [currentTab])
-
-  const handleVisualEditorUpdate = useCallback((schema: SchemaRoot) => {
-    setJsonSchema(schema)
-  }, [])
-
-  const handleSchemaEditorUpdate = useCallback((schema: string) => {
-    setJson(schema)
-  }, [])
-
-  const handleResetDefaults = useCallback(() => {
-    if (currentTab === SchemaView.VisualEditor) {
-      setHoveringProperty(null)
-      advancedEditing && setAdvancedEditing(false)
-      isAddingNewField && setIsAddingNewField(false)
-    }
-    setJsonSchema(DEFAULT_SCHEMA)
-    setJson(JSON.stringify(DEFAULT_SCHEMA, null, 2))
-  }, [currentTab, advancedEditing, isAddingNewField, setAdvancedEditing, setIsAddingNewField, setHoveringProperty])
-
-  const handleCancel = useCallback(() => {
-    onClose()
-  }, [onClose])
-
-  const handleSave = useCallback(() => {
-    let schema = jsonSchema
-    if (currentTab === SchemaView.JsonSchema) {
-      try {
-        schema = JSON.parse(json)
-        setParseError(null)
-        const result = preValidateSchema(schema)
-        if (!result.success) {
-          setValidationError(result.error.message)
-          return
-        }
-        const schemaDepth = checkJsonSchemaDepth(schema)
-        if (schemaDepth > JSON_SCHEMA_MAX_DEPTH) {
-          setValidationError(`Schema exceeds maximum depth of ${JSON_SCHEMA_MAX_DEPTH}.`)
-          return
-        }
-        convertBooleanToString(schema)
-        const validationErrors = validateSchemaAgainstDraft7(schema)
-        if (validationErrors.length > 0) {
-          setValidationError(getValidationErrorMessage(validationErrors))
-          return
-        }
-        setJsonSchema(schema)
-        setValidationError('')
-      }
-      catch (error) {
-        setValidationError('')
-        if (error instanceof Error)
-          setParseError(error)
-        else
-          setParseError(new Error('Invalid JSON'))
-        return
-      }
-    }
-    else if (currentTab === SchemaView.VisualEditor) {
-      if (advancedEditing || isAddingNewField) {
-        Toast.notify({
-          type: 'warning',
-          message: t('workflow.nodes.llm.jsonSchema.warningTips.saveSchema'),
-        })
-        return
-      }
-    }
-    onSave(schema)
-    onClose()
-  }, [currentTab, jsonSchema, json, onSave, onClose, advancedEditing, isAddingNewField, t])
-
-  return (
-    <div className='flex h-full flex-col'>
-      {/* Header */}
-      <div className='relative flex p-6 pb-3 pr-14'>
-        <div className='title-2xl-semi-bold grow truncate text-text-primary'>
-          {t('workflow.nodes.llm.jsonSchema.title')}
-        </div>
-        <div className='absolute right-5 top-5 flex h-8 w-8 items-center justify-center p-1.5' onClick={onClose}>
-          <RiCloseLine className='h-[18px] w-[18px] text-text-tertiary' />
-        </div>
-      </div>
-      {/* Content */}
-      <div className='flex items-center justify-between px-6 py-2'>
-        {/* Tab */}
-        <SegmentedControl<SchemaView>
-          options={VIEW_TABS}
-          value={currentTab}
-          onChange={handleTabChange}
-        />
-        <div className='flex items-center gap-x-0.5'>
-          {/* JSON Schema Generator */}
-          <JsonSchemaGenerator
-            crossAxisOffset={btnWidth}
-            onApply={handleApplySchema}
-          />
-          <Divider type='vertical' className='h-3' />
-          {/* JSON Schema Importer */}
-          <JsonImporter
-            updateBtnWidth={updateBtnWidth}
-            onSubmit={handleSubmit}
-          />
-        </div>
-      </div>
-      <div className='flex grow flex-col gap-y-1 overflow-hidden px-6'>
-        {currentTab === SchemaView.VisualEditor && (
-          <VisualEditor
-            schema={jsonSchema}
-            onChange={handleVisualEditorUpdate}
-          />
-        )}
-        {currentTab === SchemaView.JsonSchema && (
-          <SchemaEditor
-            schema={json}
-            onUpdate={handleSchemaEditorUpdate}
-          />
-        )}
-        {parseError && <ErrorMessage message={parseError.message} />}
-        {validationError && <ErrorMessage message={validationError} />}
-      </div>
-      {/* Footer */}
-      <div className='flex items-center gap-x-2 p-6 pt-5'>
-        <a
-          className='flex grow items-center gap-x-1 text-text-accent'
-          href={HELP_DOC_URL[locale]}
-          target='_blank'
-          rel='noopener noreferrer'
-        >
-          <span className='system-xs-regular'>{t('workflow.nodes.llm.jsonSchema.doc')}</span>
-          <RiExternalLinkLine className='h-3 w-3' />
-        </a>
-        <div className='flex items-center gap-x-3'>
-          <div className='flex items-center gap-x-2'>
-            <Button variant='secondary' onClick={handleResetDefaults}>
-              {t('workflow.nodes.llm.jsonSchema.resetDefaults')}
-            </Button>
-            <Divider type='vertical' className='ml-1 mr-0 h-4' />
-          </div>
-          <div className='flex items-center gap-x-2'>
-            <Button variant='secondary' onClick={handleCancel}>
-              {t('common.operation.cancel')}
-            </Button>
-            <Button variant='primary' onClick={handleSave}>
-              {t('common.operation.save')}
-            </Button>
-          </div>
-        </div>
-      </div>
-    </div>
-  )
-}
-
-const JsonSchemaConfigWrapper: FC<JsonSchemaConfigProps> = (props) => {
-  return (
-    <MittProvider>
-      <VisualEditorContextProvider>
-        <JsonSchemaConfig {...props} />
-      </VisualEditorContextProvider>
-    </MittProvider>
-  )
-}
-
-export default JsonSchemaConfigWrapper
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/index.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/index.tsx
deleted file mode 100644
index 5f1f117..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/index.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import SchemaGeneratorLight from './schema-generator-light'
-import SchemaGeneratorDark from './schema-generator-dark'
-
-export {
-  SchemaGeneratorLight,
-  SchemaGeneratorDark,
-}
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/schema-generator-dark.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/schema-generator-dark.tsx
deleted file mode 100644
index ac4793b..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/schema-generator-dark.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-const SchemaGeneratorDark = () => {
-  return (
-    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
-      <path d="M9.33329 2.95825C10.2308 2.95825 10.9583 2.23071 10.9583 1.33325H11.7083C11.7083 2.23071 12.4358 2.95825 13.3333 2.95825V3.70825C12.4358 3.70825 11.7083 4.43579 11.7083 5.33325H10.9583C10.9583 4.43579 10.2308 3.70825 9.33329 3.70825V2.95825ZM0.666626 7.33325C2.87577 7.33325 4.66663 5.54239 4.66663 3.33325H5.99996C5.99996 5.54239 7.79083 7.33325 9.99996 7.33325V8.66659C7.79083 8.66659 5.99996 10.4575 5.99996 12.6666H4.66663C4.66663 10.4575 2.87577 8.66659 0.666626 8.66659V7.33325ZM11.5 9.33325C11.5 10.5299 10.5299 11.4999 9.33329 11.4999V12.4999C10.5299 12.4999 11.5 13.47 11.5 14.6666H12.5C12.5 13.47 13.47 12.4999 14.6666 12.4999V11.4999C13.47 11.4999 12.5 10.5299 12.5 9.33325H11.5Z" fill="url(#paint0_linear_13059_32065)" fillOpacity="0.95" />
-      <defs>
-        <linearGradient id="paint0_linear_13059_32065" x1="14.9996" y1="15" x2="-2.55847" y2="16.6207" gradientUnits="userSpaceOnUse">
-          <stop stopColor="#36BFFA" />
-          <stop offset="1" stopColor="#296DFF" />
-        </linearGradient>
-      </defs>
-    </svg>
-  )
-}
-
-export default SchemaGeneratorDark
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/schema-generator-light.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/schema-generator-light.tsx
deleted file mode 100644
index 8b898bd..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/assets/schema-generator-light.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-const SchemaGeneratorLight = () => {
-  return (
-    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
-      <path d="M9.33329 2.95837C10.2308 2.95837 10.9583 2.23083 10.9583 1.33337H11.7083C11.7083 2.23083 12.4358 2.95837 13.3333 2.95837V3.70837C12.4358 3.70837 11.7083 4.43591 11.7083 5.33337H10.9583C10.9583 4.43591 10.2308 3.70837 9.33329 3.70837V2.95837ZM0.666626 7.33337C2.87577 7.33337 4.66663 5.54251 4.66663 3.33337H5.99996C5.99996 5.54251 7.79083 7.33337 9.99996 7.33337V8.66671C7.79083 8.66671 5.99996 10.4576 5.99996 12.6667H4.66663C4.66663 10.4576 2.87577 8.66671 0.666626 8.66671V7.33337ZM11.5 9.33337C11.5 10.53 10.5299 11.5 9.33329 11.5V12.5C10.5299 12.5 11.5 13.4701 11.5 14.6667H12.5C12.5 13.4701 13.47 12.5 14.6666 12.5V11.5C13.47 11.5 12.5 10.53 12.5 9.33337H11.5Z" fill="url(#paint0_linear_13059_18704)" fillOpacity="0.95" />
-      <defs>
-        <linearGradient id="paint0_linear_13059_18704" x1="14.9996" y1="15.0001" x2="-2.55847" y2="16.6209" gradientUnits="userSpaceOnUse">
-          <stop stopColor="#0BA5EC" />
-          <stop offset="1" stopColor="#155AEF" />
-        </linearGradient>
-      </defs>
-    </svg>
-  )
-}
-
-export default SchemaGeneratorLight
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/generated-result.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/generated-result.tsx
deleted file mode 100644
index 00f5723..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/generated-result.tsx
+++ /dev/null
@@ -1,121 +0,0 @@
-import React, { type FC, useCallback, useMemo, useState } from 'react'
-import type { SchemaRoot } from '../../../types'
-import { RiArrowLeftLine, RiCloseLine, RiSparklingLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import Button from '@/app/components/base/button'
-import CodeEditor from '../code-editor'
-import ErrorMessage from '../error-message'
-import { getValidationErrorMessage, validateSchemaAgainstDraft7 } from '../../../utils'
-import Loading from '@/app/components/base/loading'
-
-type GeneratedResultProps = {
-  schema: SchemaRoot
-  isGenerating: boolean
-  onBack: () => void
-  onRegenerate: () => void
-  onClose: () => void
-  onApply: () => void
-}
-
-const GeneratedResult: FC<GeneratedResultProps> = ({
-  schema,
-  isGenerating,
-  onBack,
-  onRegenerate,
-  onClose,
-  onApply,
-}) => {
-  const { t } = useTranslation()
-  const [parseError, setParseError] = useState<Error | null>(null)
-  const [validationError, setValidationError] = useState<string>('')
-
-  const formatJSON = (json: SchemaRoot) => {
-    try {
-      const schema = JSON.stringify(json, null, 2)
-      setParseError(null)
-      return schema
-    }
-    catch (e) {
-      if (e instanceof Error)
-        setParseError(e)
-      else
-        setParseError(new Error('Invalid JSON'))
-      return ''
-    }
-  }
-
-  const jsonSchema = useMemo(() => formatJSON(schema), [schema])
-
-  const handleApply = useCallback(() => {
-    const validationErrors = validateSchemaAgainstDraft7(schema)
-    if (validationErrors.length > 0) {
-      setValidationError(getValidationErrorMessage(validationErrors))
-      return
-    }
-    onApply()
-    setValidationError('')
-  }, [schema, onApply])
-
-  return (
-    <div className='flex w-[480px] flex-col rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-2xl shadow-shadow-shadow-9'>
-      {
-        isGenerating ? (
-          <div className='flex h-[600px] flex-col items-center justify-center gap-y-3'>
-            <Loading type='area' />
-            <div className='system-xs-regular text-text-tertiary'>{t('workflow.nodes.llm.jsonSchema.generating')}</div>
-          </div>
-        ) : (
-          <>
-            <div className='absolute right-2.5 top-2.5 flex h-8 w-8 items-center justify-center' onClick={onClose}>
-              <RiCloseLine className='h-4 w-4 text-text-tertiary' />
-            </div>
-            {/* Title */}
-            <div className='flex flex-col gap-y-[0.5px] px-3 pb-1 pt-3.5'>
-              <div className='system-xl-semibold flex pl-1 pr-8 text-text-primary'>
-                {t('workflow.nodes.llm.jsonSchema.generatedResult')}
-              </div>
-              <div className='system-xs-regular flex px-1 text-text-tertiary'>
-                {t('workflow.nodes.llm.jsonSchema.resultTip')}
-              </div>
-            </div>
-            {/* Content */}
-            <div className='px-4 py-2'>
-              <CodeEditor
-                className='rounded-lg'
-                editorWrapperClassName='h-[424px]'
-                value={jsonSchema}
-                readOnly
-                showFormatButton={false}
-              />
-              {parseError && <ErrorMessage message={parseError.message} />}
-              {validationError && <ErrorMessage message={validationError} />}
-            </div>
-            {/* Footer */}
-            <div className='flex items-center justify-between p-4 pt-2'>
-              <Button variant='secondary' className='flex items-center gap-x-0.5' onClick={onBack}>
-                <RiArrowLeftLine className='h-4 w-4' />
-                <span>{t('workflow.nodes.llm.jsonSchema.back')}</span>
-              </Button>
-              <div className='flex items-center gap-x-2'>
-                <Button
-                  variant='secondary'
-                  className='flex items-center gap-x-0.5'
-                  onClick={onRegenerate}
-                >
-                  <RiSparklingLine className='h-4 w-4' />
-                  <span>{t('workflow.nodes.llm.jsonSchema.regenerate')}</span>
-                </Button>
-                <Button variant='primary' onClick={handleApply}>
-                  {t('workflow.nodes.llm.jsonSchema.apply')}
-                </Button>
-              </div>
-            </div>
-
-          </>
-        )
-      }
-    </div>
-  )
-}
-
-export default React.memo(GeneratedResult)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/index.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/index.tsx
deleted file mode 100644
index 4732499..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/index.tsx
+++ /dev/null
@@ -1,183 +0,0 @@
-import React, { type FC, useCallback, useEffect, useState } from 'react'
-import type { SchemaRoot } from '../../../types'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import useTheme from '@/hooks/use-theme'
-import type { CompletionParams, Model } from '@/types/app'
-import { ModelModeType } from '@/types/app'
-import { Theme } from '@/types/app'
-import { SchemaGeneratorDark, SchemaGeneratorLight } from './assets'
-import cn from '@/utils/classnames'
-import type { ModelInfo } from './prompt-editor'
-import PromptEditor from './prompt-editor'
-import GeneratedResult from './generated-result'
-import { useGenerateStructuredOutputRules } from '@/service/use-common'
-import Toast from '@/app/components/base/toast'
-import { type FormValue, ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import { useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
-import { useVisualEditorStore } from '../visual-editor/store'
-import { useTranslation } from 'react-i18next'
-import { useMittContext } from '../visual-editor/context'
-
-type JsonSchemaGeneratorProps = {
-  onApply: (schema: SchemaRoot) => void
-  crossAxisOffset?: number
-}
-
-enum GeneratorView {
-  promptEditor = 'promptEditor',
-  result = 'result',
-}
-
-export const JsonSchemaGenerator: FC<JsonSchemaGeneratorProps> = ({
-  onApply,
-  crossAxisOffset,
-}) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const [view, setView] = useState(GeneratorView.promptEditor)
-  const [model, setModel] = useState<Model>({
-    name: '',
-    provider: '',
-    mode: ModelModeType.completion,
-    completion_params: {} as CompletionParams,
-  })
-  const [instruction, setInstruction] = useState('')
-  const [schema, setSchema] = useState<SchemaRoot | null>(null)
-  const { theme } = useTheme()
-  const {
-    defaultModel,
-  } = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.textGeneration)
-  const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
-  const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
-  const { emit } = useMittContext()
-  const SchemaGenerator = theme === Theme.light ? SchemaGeneratorLight : SchemaGeneratorDark
-
-  useEffect(() => {
-    if (defaultModel) {
-      setModel(prev => ({
-        ...prev,
-        name: defaultModel.model,
-        provider: defaultModel.provider.provider,
-      }))
-    }
-  }, [defaultModel])
-
-  const handleTrigger = useCallback((e: React.MouseEvent<HTMLElement, MouseEvent>) => {
-    e.stopPropagation()
-    if (advancedEditing || isAddingNewField)
-      emit('quitEditing', {})
-    setOpen(!open)
-  }, [open, advancedEditing, isAddingNewField, emit])
-
-  const onClose = useCallback(() => {
-    setOpen(false)
-  }, [])
-
-  const handleModelChange = useCallback((model: ModelInfo) => {
-    setModel(prev => ({
-      ...prev,
-      provider: model.provider,
-      name: model.modelId,
-      mode: model.mode as ModelModeType,
-    }))
-  }, [])
-
-  const handleCompletionParamsChange = useCallback((newParams: FormValue) => {
-    setModel(prev => ({
-      ...prev,
-      completion_params: newParams as CompletionParams,
-    }),
-    )
-  }, [])
-
-  const { mutateAsync: generateStructuredOutputRules, isPending: isGenerating } = useGenerateStructuredOutputRules()
-
-  const generateSchema = useCallback(async () => {
-    const { output, error } = await generateStructuredOutputRules({ instruction, model_config: model! })
-    if (error) {
-      Toast.notify({
-        type: 'error',
-        message: error,
-      })
-      setSchema(null)
-      setView(GeneratorView.promptEditor)
-      return
-    }
-    return output
-  }, [instruction, model, generateStructuredOutputRules])
-
-  const handleGenerate = useCallback(async () => {
-    setView(GeneratorView.result)
-    const output = await generateSchema()
-    if (output === undefined) return
-    setSchema(JSON.parse(output))
-  }, [generateSchema])
-
-  const goBackToPromptEditor = () => {
-    setView(GeneratorView.promptEditor)
-  }
-
-  const handleRegenerate = useCallback(async () => {
-    const output = await generateSchema()
-    if (output === undefined) return
-    setSchema(JSON.parse(output))
-  }, [generateSchema])
-
-  const handleApply = () => {
-    onApply(schema!)
-    setOpen(false)
-  }
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: 4,
-        crossAxis: crossAxisOffset ?? 0,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={handleTrigger}>
-        <button
-          type='button'
-          className={cn(
-            'flex h-6 w-6 items-center justify-center rounded-md p-0.5 hover:bg-state-accent-hover',
-            open && 'bg-state-accent-active',
-          )}
-        >
-          <SchemaGenerator />
-        </button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[100]'>
-        {view === GeneratorView.promptEditor && (
-          <PromptEditor
-            instruction={instruction}
-            model={model}
-            onInstructionChange={setInstruction}
-            onCompletionParamsChange={handleCompletionParamsChange}
-            onGenerate={handleGenerate}
-            onClose={onClose}
-            onModelChange={handleModelChange}
-          />
-        )}
-        {view === GeneratorView.result && (
-          <GeneratedResult
-            schema={schema!}
-            isGenerating={isGenerating}
-            onBack={goBackToPromptEditor}
-            onRegenerate={handleRegenerate}
-            onApply={handleApply}
-            onClose={onClose}
-          />
-        )}
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default JsonSchemaGenerator
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/prompt-editor.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/prompt-editor.tsx
deleted file mode 100644
index 9387813..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/json-schema-generator/prompt-editor.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import React, { useCallback } from 'react'
-import type { FC } from 'react'
-import { RiCloseLine, RiSparklingFill } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import Textarea from '@/app/components/base/textarea'
-import Tooltip from '@/app/components/base/tooltip'
-import Button from '@/app/components/base/button'
-import type { FormValue } from '@/app/components/header/account-setting/model-provider-page/declarations'
-import ModelParameterModal from '@/app/components/header/account-setting/model-provider-page/model-parameter-modal'
-import type { Model } from '@/types/app'
-
-export type ModelInfo = {
-  modelId: string
-  provider: string
-  mode?: string
-  features?: string[]
-}
-
-type PromptEditorProps = {
-  instruction: string
-  model: Model
-  onInstructionChange: (instruction: string) => void
-  onCompletionParamsChange: (newParams: FormValue) => void
-  onModelChange: (model: ModelInfo) => void
-  onClose: () => void
-  onGenerate: () => void
-}
-
-const PromptEditor: FC<PromptEditorProps> = ({
-  instruction,
-  model,
-  onInstructionChange,
-  onCompletionParamsChange,
-  onClose,
-  onGenerate,
-  onModelChange,
-}) => {
-  const { t } = useTranslation()
-
-  const handleInstructionChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {
-    onInstructionChange(e.target.value)
-  }, [onInstructionChange])
-
-  return (
-    <div className='relative flex w-[480px] flex-col rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-2xl shadow-shadow-shadow-9'>
-      <div className='absolute right-2.5 top-2.5 flex h-8 w-8 items-center justify-center' onClick={onClose}>
-        <RiCloseLine className='h-4 w-4 text-text-tertiary'/>
-      </div>
-      {/* Title */}
-      <div className='flex flex-col gap-y-[0.5px] px-3 pb-1 pt-3.5'>
-        <div className='system-xl-semibold flex pl-1 pr-8 text-text-primary'>
-          {t('workflow.nodes.llm.jsonSchema.generateJsonSchema')}
-        </div>
-        <div className='system-xs-regular flex px-1 text-text-tertiary'>
-          {t('workflow.nodes.llm.jsonSchema.generationTip')}
-        </div>
-      </div>
-      {/* Content */}
-      <div className='flex flex-col gap-y-1 px-4 py-2'>
-        <div className='system-sm-semibold-uppercase flex h-6 items-center text-text-secondary'>
-          {t('common.modelProvider.model')}
-        </div>
-        <ModelParameterModal
-          popupClassName='!w-[448px]'
-          portalToFollowElemContentClassName='z-[1000]'
-          isAdvancedMode={true}
-          provider={model.provider}
-          mode={model.mode}
-          completionParams={model.completion_params}
-          modelId={model.name}
-          setModel={onModelChange}
-          onCompletionParamsChange={onCompletionParamsChange}
-          hideDebugWithMultipleModel
-        />
-      </div>
-      <div className='flex flex-col gap-y-1 px-4 py-2'>
-        <div className='system-sm-semibold-uppercase flex h-6 items-center text-text-secondary'>
-          <span>{t('workflow.nodes.llm.jsonSchema.instruction')}</span>
-          <Tooltip popupContent={t('workflow.nodes.llm.jsonSchema.promptTooltip')} />
-        </div>
-        <div className='flex items-center'>
-          <Textarea
-            className='h-[364px] resize-none px-2 py-1'
-            value={instruction}
-            placeholder={t('workflow.nodes.llm.jsonSchema.promptPlaceholder')}
-            onChange={handleInstructionChange}
-          />
-        </div>
-      </div>
-      {/* Footer */}
-      <div className='flex justify-end gap-x-2 p-4 pt-2'>
-        <Button variant='secondary' onClick={onClose}>
-          {t('common.operation.cancel')}
-        </Button>
-        <Button
-          variant='primary'
-          className='flex items-center gap-x-0.5'
-          onClick={onGenerate}
-        >
-          <RiSparklingFill className='h-4 w-4' />
-          <span>{t('workflow.nodes.llm.jsonSchema.generate')}</span>
-        </Button>
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(PromptEditor)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/schema-editor.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/schema-editor.tsx
deleted file mode 100644
index e78b922..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/schema-editor.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import React, { type FC } from 'react'
-import CodeEditor from './code-editor'
-
-type SchemaEditorProps = {
-  schema: string
-  onUpdate: (schema: string) => void
-}
-
-const SchemaEditor: FC<SchemaEditorProps> = ({
-  schema,
-  onUpdate,
-}) => {
-  return (
-    <CodeEditor
-      className='rounded-xl'
-      editorWrapperClassName='grow'
-      value={schema}
-      onUpdate={onUpdate}
-    />
-  )
-}
-
-export default SchemaEditor
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/add-field.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/add-field.tsx
deleted file mode 100644
index ab28233..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/add-field.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React, { useCallback } from 'react'
-import Button from '@/app/components/base/button'
-import { RiAddCircleFill } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import { useVisualEditorStore } from './store'
-import { useMittContext } from './context'
-
-const AddField = () => {
-  const { t } = useTranslation()
-  const setIsAddingNewField = useVisualEditorStore(state => state.setIsAddingNewField)
-  const { emit } = useMittContext()
-
-  const handleAddField = useCallback(() => {
-    setIsAddingNewField(true)
-    emit('addField', { path: [] })
-  }, [setIsAddingNewField, emit])
-
-  return (
-    <div className='py-2 pl-5'>
-      <Button
-        size='small'
-        variant='secondary-accent'
-        className='flex items-center gap-x-[1px]'
-        onClick={handleAddField}
-      >
-        <RiAddCircleFill className='h-3.5 w-3.5'/>
-        <span className='px-[3px]'>{t('workflow.nodes.llm.jsonSchema.addField')}</span>
-      </Button>
-    </div>
-  )
-}
-
-export default React.memo(AddField)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/card.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/card.tsx
deleted file mode 100644
index 4f53f6b..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/card.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import React, { type FC } from 'react'
-import { useTranslation } from 'react-i18next'
-
-type CardProps = {
-  name: string
-  type: string
-  required: boolean
-  description?: string
-}
-
-const Card: FC<CardProps> = ({
-  name,
-  type,
-  required,
-  description,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex flex-col py-0.5'>
-      <div className='flex h-6 items-center gap-x-1 pl-1 pr-0.5'>
-        <div className='system-sm-semibold truncate border border-transparent px-1 py-px text-text-primary'>
-          {name}
-        </div>
-        <div className='system-xs-medium px-1 py-0.5 text-text-tertiary'>
-          {type}
-        </div>
-        {
-          required && (
-            <div className='system-2xs-medium-uppercase px-1 py-0.5 text-text-warning'>
-              {t('workflow.nodes.llm.jsonSchema.required')}
-            </div>
-          )
-        }
-      </div>
-
-      {description && (
-        <div className='system-xs-regular truncate px-2 pb-1 text-text-tertiary'>
-          {description}
-        </div>
-      )}
-    </div>
-  )
-}
-
-export default React.memo(Card)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/context.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/context.tsx
deleted file mode 100644
index 5bf4b22..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/context.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import {
-  createContext,
-  useContext,
-  useRef,
-} from 'react'
-import { createVisualEditorStore } from './store'
-import { useMitt } from '@/hooks/use-mitt'
-import { noop } from 'lodash-es'
-
-type VisualEditorStore = ReturnType<typeof createVisualEditorStore>
-
-type VisualEditorContextType = VisualEditorStore | null
-
-type VisualEditorProviderProps = {
-  children: React.ReactNode
-}
-
-export const VisualEditorContext = createContext<VisualEditorContextType>(null)
-
-export const VisualEditorContextProvider = ({ children }: VisualEditorProviderProps) => {
-  const storeRef = useRef<VisualEditorStore>()
-
-  if (!storeRef.current)
-    storeRef.current = createVisualEditorStore()
-
-  return (
-    <VisualEditorContext.Provider value={storeRef.current}>
-      {children}
-    </VisualEditorContext.Provider>
-  )
-}
-
-export const MittContext = createContext<ReturnType<typeof useMitt>>({
-  emit: noop,
-  useSubscribe: noop,
-})
-
-export const MittProvider = ({ children }: { children: React.ReactNode }) => {
-  const mitt = useMitt()
-
-  return (
-    <MittContext.Provider value={mitt}>
-      {children}
-    </MittContext.Provider>
-  )
-}
-
-export const useMittContext = () => {
-  return useContext(MittContext)
-}
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/actions.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/actions.tsx
deleted file mode 100644
index 3f693c2..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/actions.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import type { FC } from 'react'
-import React from 'react'
-import Tooltip from '@/app/components/base/tooltip'
-import { RiAddCircleLine, RiDeleteBinLine, RiEditLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-
-type ActionsProps = {
-  disableAddBtn: boolean
-  onAddChildField: () => void
-  onEdit: () => void
-  onDelete: () => void
-}
-
-const Actions: FC<ActionsProps> = ({
-  disableAddBtn,
-  onAddChildField,
-  onEdit,
-  onDelete,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex items-center gap-x-0.5'>
-      <Tooltip popupContent={t('workflow.nodes.llm.jsonSchema.addChildField')}>
-        <button
-          type='button'
-          className='flex h-6 w-6 items-center justify-center rounded-md text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary disabled:cursor-not-allowed disabled:text-text-disabled'
-          onClick={onAddChildField}
-          disabled={disableAddBtn}
-        >
-          <RiAddCircleLine className='h-4 w-4'/>
-        </button>
-      </Tooltip>
-      <Tooltip popupContent={t('common.operation.edit')}>
-        <button
-          type='button'
-          className='flex h-6 w-6 items-center justify-center rounded-md text-text-tertiary hover:bg-state-base-hover hover:text-text-secondary'
-          onClick={onEdit}
-        >
-          <RiEditLine className='h-4 w-4' />
-        </button>
-      </Tooltip>
-      <Tooltip popupContent={t('common.operation.remove')}>
-        <button
-          type='button'
-          className='flex h-6 w-6 items-center justify-center rounded-md text-text-tertiary hover:bg-state-destructive-hover hover:text-text-destructive'
-          onClick={onDelete}
-        >
-          <RiDeleteBinLine className='h-4 w-4' />
-        </button>
-      </Tooltip>
-    </div>
-  )
-}
-
-export default React.memo(Actions)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/advanced-actions.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/advanced-actions.tsx
deleted file mode 100644
index e065406..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/advanced-actions.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import React, { type FC } from 'react'
-import Button from '@/app/components/base/button'
-import { useTranslation } from 'react-i18next'
-import { getKeyboardKeyCodeBySystem, getKeyboardKeyNameBySystem } from '@/app/components/workflow/utils'
-import { useKeyPress } from 'ahooks'
-
-type AdvancedActionsProps = {
-  isConfirmDisabled: boolean
-  onCancel: () => void
-  onConfirm: () => void
-}
-
-const Key = (props: { keyName: string }) => {
-  const { keyName } = props
-  return (
-    <kbd className='system-kbd flex h-4 min-w-4 items-center justify-center rounded-[4px] bg-components-kbd-bg-white px-px text-text-primary-on-surface'>
-      {keyName}
-    </kbd>
-  )
-}
-
-const AdvancedActions: FC<AdvancedActionsProps> = ({
-  isConfirmDisabled,
-  onCancel,
-  onConfirm,
-}) => {
-  const { t } = useTranslation()
-
-  useKeyPress([`${getKeyboardKeyCodeBySystem('ctrl')}.enter`], (e) => {
-    e.preventDefault()
-    onConfirm()
-  }, {
-    exactMatch: true,
-    useCapture: true,
-  })
-
-  return (
-    <div className='flex items-center gap-x-1'>
-      <Button size='small' variant='secondary' onClick={onCancel}>
-        {t('common.operation.cancel')}
-      </Button>
-      <Button
-        className='flex items-center gap-x-1'
-        disabled={isConfirmDisabled}
-        size='small'
-        variant='primary'
-        onClick={onConfirm}
-      >
-        <span>{t('common.operation.confirm')}</span>
-        <div className='flex items-center gap-x-0.5'>
-          <Key keyName={getKeyboardKeyNameBySystem('ctrl')} />
-          <Key keyName='鈴�' />
-        </div>
-      </Button>
-    </div>
-  )
-}
-
-export default React.memo(AdvancedActions)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/advanced-options.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/advanced-options.tsx
deleted file mode 100644
index cd06fc8..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/advanced-options.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-import React, { type FC, useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import Divider from '@/app/components/base/divider'
-import Textarea from '@/app/components/base/textarea'
-
-export type AdvancedOptionsType = {
-  enum: string
-}
-
-type AdvancedOptionsProps = {
-  options: AdvancedOptionsType
-  onChange: (options: AdvancedOptionsType) => void
-}
-
-const AdvancedOptions: FC<AdvancedOptionsProps> = ({
-  onChange,
-  options,
-}) => {
-  const { t } = useTranslation()
-  // const [showAdvancedOptions, setShowAdvancedOptions] = useState(false)
-  const [enumValue, setEnumValue] = useState(options.enum)
-
-  const handleEnumChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {
-    setEnumValue(e.target.value)
-  }, [])
-
-  const handleEnumBlur = useCallback((e: React.FocusEvent<HTMLTextAreaElement>) => {
-    onChange({ enum: e.target.value })
-  }, [onChange])
-
-  // const handleToggleAdvancedOptions = useCallback(() => {
-  //   setShowAdvancedOptions(prev => !prev)
-  // }, [])
-
-  return (
-    <div className='border-t border-divider-subtle'>
-      {/* {showAdvancedOptions ? ( */}
-      <div className='flex flex-col gap-y-1 px-2 py-1.5'>
-        <div className='flex w-full items-center gap-x-2'>
-          <span className='system-2xs-medium-uppercase text-text-tertiary'>
-            {t('workflow.nodes.llm.jsonSchema.stringValidations')}
-          </span>
-          <div className='grow'>
-            <Divider type='horizontal' className='my-0 h-px bg-line-divider-bg' />
-          </div>
-        </div>
-        <div className='flex flex-col'>
-          <div className='system-xs-medium flex h-6 items-center text-text-secondary'>
-            Enum
-          </div>
-          <Textarea
-            size='small'
-            className='min-h-6'
-            value={enumValue}
-            onChange={handleEnumChange}
-            onBlur={handleEnumBlur}
-            placeholder={'abcd, 1, 1.5, etc.'}
-          />
-        </div>
-      </div>
-      {/* ) : (
-        <button
-          type='button'
-          className='flex items-center gap-x-0.5 pb-1 pl-1.5 pr-2 pt-2'
-          onClick={handleToggleAdvancedOptions}
-        >
-          <RiArrowDownDoubleLine className='h-3 w-3 text-text-tertiary' />
-          <span className='system-xs-regular text-text-tertiary'>
-            {t('workflow.nodes.llm.jsonSchema.showAdvancedOptions')}
-          </span>
-        </button>
-      )} */}
-    </div>
-  )
-}
-
-export default React.memo(AdvancedOptions)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/auto-width-input.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/auto-width-input.tsx
deleted file mode 100644
index af4a82c..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/auto-width-input.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import React, { useEffect, useState } from 'react'
-import type { FC } from 'react'
-import cn from '@/utils/classnames'
-
-type AutoWidthInputProps = {
-  value: string
-  placeholder: string
-  onChange: (event: React.ChangeEvent<HTMLInputElement>) => void
-  onBlur: () => void
-  minWidth?: number
-  maxWidth?: number
-} & Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'>
-
-const AutoWidthInput: FC<AutoWidthInputProps> = ({
-  value,
-  placeholder,
-  onChange,
-  onBlur,
-  minWidth = 60,
-  maxWidth = 300,
-  className,
-  ...props
-}) => {
-  const [width, setWidth] = useState(minWidth)
-  const textRef = React.useRef<HTMLSpanElement>(null)
-
-  useEffect(() => {
-    if (textRef.current) {
-      textRef.current.textContent = value || placeholder
-      const textWidth = textRef.current.offsetWidth
-      const newWidth = Math.max(minWidth, Math.min(textWidth + 16, maxWidth))
-      if (width !== newWidth)
-        setWidth(newWidth)
-    }
-  }, [value, placeholder, minWidth, maxWidth, width])
-
-  // Handle Enter key
-  const handleKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {
-    if (e.key === 'Enter' && e.currentTarget.blur)
-      e.currentTarget.blur()
-    if (props.onKeyUp)
-      props.onKeyUp(e)
-  }
-
-  return (
-    <div className='relative inline-flex items-center'>
-      {/* Hidden measurement span */}
-      <span
-        ref={textRef}
-        className='system-sm-semibold invisible absolute left-0 top-0 -z-10 whitespace-pre px-1'
-        aria-hidden="true"
-      >
-        {value || placeholder}
-      </span>
-
-      {/* Actual input element */}
-      <input
-        value={value}
-        className={cn(
-          'system-sm-semibold placeholder:system-sm-semibold h-5 rounded-[5px] border border-transparent px-1',
-          'py-px text-text-primary caret-[#295EFF] shadow-shadow-shadow-3 outline-none',
-          'placeholder:text-text-placeholder hover:bg-state-base-hover focus:border-components-input-border-active focus:bg-components-input-bg-active focus:shadow-xs',
-          className,
-        )}
-        style={{
-          width: `${width}px`,
-          minWidth: `${minWidth}px`,
-          maxWidth: `${maxWidth}px`,
-          transition: 'width 100ms ease-out',
-        }}
-        placeholder={placeholder}
-        onChange={onChange}
-        onBlur={onBlur}
-        onKeyUp={handleKeyUp}
-        {...props}
-      />
-    </div>
-  )
-}
-
-export default React.memo(AutoWidthInput)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/index.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/index.tsx
deleted file mode 100644
index 4023a93..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/index.tsx
+++ /dev/null
@@ -1,277 +0,0 @@
-import React, { type FC, useCallback, useMemo, useRef, useState } from 'react'
-import type { SchemaEnumType } from '../../../../types'
-import { ArrayType, Type } from '../../../../types'
-import type { TypeItem } from './type-selector'
-import TypeSelector from './type-selector'
-import RequiredSwitch from './required-switch'
-import Divider from '@/app/components/base/divider'
-import Actions from './actions'
-import AdvancedActions from './advanced-actions'
-import AdvancedOptions, { type AdvancedOptionsType } from './advanced-options'
-import { useTranslation } from 'react-i18next'
-import classNames from '@/utils/classnames'
-import { useVisualEditorStore } from '../store'
-import { useMittContext } from '../context'
-import { useUnmount } from 'ahooks'
-import { JSON_SCHEMA_MAX_DEPTH } from '@/config'
-import AutoWidthInput from './auto-width-input'
-
-export type EditData = {
-  name: string
-  type: Type | ArrayType
-  required: boolean
-  description?: string
-  enum?: SchemaEnumType
-}
-
-type Options = {
-  description?: string
-  enum?: SchemaEnumType
-}
-
-type EditCardProps = {
-  fields: EditData
-  depth: number
-  path: string[]
-  parentPath: string[]
-}
-
-const TYPE_OPTIONS = [
-  { value: Type.string, text: 'string' },
-  { value: Type.number, text: 'number' },
-  // { value: Type.boolean, text: 'boolean' },
-  { value: Type.object, text: 'object' },
-  { value: ArrayType.string, text: 'array[string]' },
-  { value: ArrayType.number, text: 'array[number]' },
-  // { value: ArrayType.boolean, text: 'array[boolean]' },
-  { value: ArrayType.object, text: 'array[object]' },
-]
-
-const MAXIMUM_DEPTH_TYPE_OPTIONS = [
-  { value: Type.string, text: 'string' },
-  { value: Type.number, text: 'number' },
-  // { value: Type.boolean, text: 'boolean' },
-  { value: ArrayType.string, text: 'array[string]' },
-  { value: ArrayType.number, text: 'array[number]' },
-  // { value: ArrayType.boolean, text: 'array[boolean]' },
-]
-
-const EditCard: FC<EditCardProps> = ({
-  fields,
-  depth,
-  path,
-  parentPath,
-}) => {
-  const { t } = useTranslation()
-  const [currentFields, setCurrentFields] = useState(fields)
-  const [backupFields, setBackupFields] = useState<EditData | null>(null)
-  const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
-  const setIsAddingNewField = useVisualEditorStore(state => state.setIsAddingNewField)
-  const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
-  const setAdvancedEditing = useVisualEditorStore(state => state.setAdvancedEditing)
-  const { emit, useSubscribe } = useMittContext()
-  const blurWithActions = useRef(false)
-
-  const maximumDepthReached = depth === JSON_SCHEMA_MAX_DEPTH
-  const disableAddBtn = maximumDepthReached || (currentFields.type !== Type.object && currentFields.type !== ArrayType.object)
-  const hasAdvancedOptions = currentFields.type === Type.string || currentFields.type === Type.number
-  const isAdvancedEditing = advancedEditing || isAddingNewField
-
-  const advancedOptions = useMemo(() => {
-    let enumValue = ''
-    if (currentFields.type === Type.string || currentFields.type === Type.number)
-      enumValue = (currentFields.enum || []).join(', ')
-    return { enum: enumValue }
-  }, [currentFields.type, currentFields.enum])
-
-  useSubscribe('restorePropertyName', () => {
-    setCurrentFields(prev => ({ ...prev, name: fields.name }))
-  })
-
-  useSubscribe('fieldChangeSuccess', () => {
-    isAddingNewField && setIsAddingNewField(false)
-    advancedEditing && setAdvancedEditing(false)
-  })
-
-  const emitPropertyNameChange = useCallback(() => {
-    emit('propertyNameChange', { path, parentPath, oldFields: fields, fields: currentFields })
-  }, [fields, currentFields, path, parentPath, emit])
-
-  const emitPropertyTypeChange = useCallback((type: Type | ArrayType) => {
-    emit('propertyTypeChange', { path, parentPath, oldFields: fields, fields: { ...currentFields, type } })
-  }, [fields, currentFields, path, parentPath, emit])
-
-  const emitPropertyRequiredToggle = useCallback(() => {
-    emit('propertyRequiredToggle', { path, parentPath, oldFields: fields, fields: currentFields })
-  }, [emit, path, parentPath, fields, currentFields])
-
-  const emitPropertyOptionsChange = useCallback((options: Options) => {
-    emit('propertyOptionsChange', { path, parentPath, oldFields: fields, fields: { ...currentFields, ...options } })
-  }, [emit, path, parentPath, fields, currentFields])
-
-  const emitPropertyDelete = useCallback(() => {
-    emit('propertyDelete', { path, parentPath, oldFields: fields, fields: currentFields })
-  }, [emit, path, parentPath, fields, currentFields])
-
-  const emitPropertyAdd = useCallback(() => {
-    emit('addField', { path })
-  }, [emit, path])
-
-  const emitFieldChange = useCallback(() => {
-    emit('fieldChange', { path, parentPath, oldFields: fields, fields: currentFields })
-  }, [emit, path, parentPath, fields, currentFields])
-
-  const handlePropertyNameChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
-    setCurrentFields(prev => ({ ...prev, name: e.target.value }))
-  }, [])
-
-  const handlePropertyNameBlur = useCallback(() => {
-    if (isAdvancedEditing) return
-    emitPropertyNameChange()
-  }, [isAdvancedEditing, emitPropertyNameChange])
-
-  const handleTypeChange = useCallback((item: TypeItem) => {
-    setCurrentFields(prev => ({ ...prev, type: item.value }))
-    if (isAdvancedEditing) return
-    emitPropertyTypeChange(item.value)
-  }, [isAdvancedEditing, emitPropertyTypeChange])
-
-  const toggleRequired = useCallback(() => {
-    setCurrentFields(prev => ({ ...prev, required: !prev.required }))
-    if (isAdvancedEditing) return
-    emitPropertyRequiredToggle()
-  }, [isAdvancedEditing, emitPropertyRequiredToggle])
-
-  const handleDescriptionChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
-    setCurrentFields(prev => ({ ...prev, description: e.target.value }))
-  }, [])
-
-  const handleDescriptionBlur = useCallback(() => {
-    if (isAdvancedEditing) return
-    emitPropertyOptionsChange({ description: currentFields.description, enum: currentFields.enum })
-  }, [isAdvancedEditing, emitPropertyOptionsChange, currentFields])
-
-  const handleAdvancedOptionsChange = useCallback((options: AdvancedOptionsType) => {
-    let enumValue: any = options.enum
-    if (enumValue === '') {
-      enumValue = undefined
-    }
-    else {
-      enumValue = options.enum.replace(/\s/g, '').split(',')
-      if (currentFields.type === Type.number)
-        enumValue = (enumValue as SchemaEnumType).map(value => Number(value)).filter(num => !Number.isNaN(num))
-    }
-    setCurrentFields(prev => ({ ...prev, enum: enumValue }))
-    if (isAdvancedEditing) return
-    emitPropertyOptionsChange({ description: currentFields.description, enum: enumValue })
-  }, [isAdvancedEditing, emitPropertyOptionsChange, currentFields])
-
-  const handleDelete = useCallback(() => {
-    blurWithActions.current = true
-    emitPropertyDelete()
-  }, [emitPropertyDelete])
-
-  const handleAdvancedEdit = useCallback(() => {
-    setBackupFields({ ...currentFields })
-    setAdvancedEditing(true)
-  }, [currentFields, setAdvancedEditing])
-
-  const handleAddChildField = useCallback(() => {
-    blurWithActions.current = true
-    emitPropertyAdd()
-  }, [emitPropertyAdd])
-
-  const handleConfirm = useCallback(() => {
-    emitFieldChange()
-  }, [emitFieldChange])
-
-  const handleCancel = useCallback(() => {
-    if (isAddingNewField) {
-      blurWithActions.current = true
-      emit('restoreSchema')
-      setIsAddingNewField(false)
-      return
-    }
-    if (backupFields) {
-      setCurrentFields(backupFields)
-      setBackupFields(null)
-    }
-    setAdvancedEditing(false)
-  }, [isAddingNewField, emit, setIsAddingNewField, setAdvancedEditing, backupFields])
-
-  useUnmount(() => {
-    if (isAdvancedEditing || blurWithActions.current) return
-    emitFieldChange()
-  })
-
-  return (
-    <div className='flex flex-col rounded-lg bg-components-panel-bg py-0.5 shadow-sm shadow-shadow-shadow-4'>
-      <div className='flex h-6 items-center pl-1 pr-0.5'>
-        <div className='flex grow items-center gap-x-1'>
-          <AutoWidthInput
-            value={currentFields.name}
-            placeholder={t('workflow.nodes.llm.jsonSchema.fieldNamePlaceholder')}
-            minWidth={80}
-            maxWidth={300}
-            onChange={handlePropertyNameChange}
-            onBlur={handlePropertyNameBlur}
-          />
-          <TypeSelector
-            currentValue={currentFields.type}
-            items={maximumDepthReached ? MAXIMUM_DEPTH_TYPE_OPTIONS : TYPE_OPTIONS}
-            onSelect={handleTypeChange}
-            popupClassName={'z-[1000]'}
-          />
-          {
-            currentFields.required && (
-              <div className='system-2xs-medium-uppercase px-1 py-0.5 text-text-warning'>
-                {t('workflow.nodes.llm.jsonSchema.required')}
-              </div>
-            )
-          }
-        </div>
-        <RequiredSwitch
-          defaultValue={currentFields.required}
-          toggleRequired={toggleRequired}
-        />
-        <Divider type='vertical' className='h-3' />
-        {isAdvancedEditing ? (
-          <AdvancedActions
-            isConfirmDisabled={currentFields.name === ''}
-            onCancel={handleCancel}
-            onConfirm={handleConfirm}
-          />
-        ) : (
-          <Actions
-            disableAddBtn={disableAddBtn}
-            onAddChildField={handleAddChildField}
-            onDelete={handleDelete}
-            onEdit={handleAdvancedEdit}
-          />
-        )}
-      </div>
-
-      {(fields.description || isAdvancedEditing) && (
-        <div className={classNames('flex', isAdvancedEditing ? 'p-2 pt-1' : 'px-2 pb-1')}>
-          <input
-            value={currentFields.description}
-            className='system-xs-regular placeholder:system-xs-regular h-4 w-full p-0 text-text-tertiary caret-[#295EFF] outline-none placeholder:text-text-placeholder'
-            placeholder={t('workflow.nodes.llm.jsonSchema.descriptionPlaceholder')}
-            onChange={handleDescriptionChange}
-            onBlur={handleDescriptionBlur}
-            onKeyUp={e => e.key === 'Enter' && e.currentTarget.blur()}
-          />
-        </div>
-      )}
-
-      {isAdvancedEditing && hasAdvancedOptions && (
-        <AdvancedOptions
-          options={advancedOptions}
-          onChange={handleAdvancedOptionsChange}
-        />
-      )}
-    </div>
-  )
-}
-
-export default EditCard
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/required-switch.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/required-switch.tsx
deleted file mode 100644
index c717940..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/required-switch.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react'
-import type { FC } from 'react'
-import Switch from '@/app/components/base/switch'
-import { useTranslation } from 'react-i18next'
-
-type RequiredSwitchProps = {
-  defaultValue: boolean
-  toggleRequired: () => void
-}
-
-const RequiredSwitch: FC<RequiredSwitchProps> = ({
-  defaultValue,
-  toggleRequired,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex items-center gap-x-1 rounded-[5px] border border-divider-subtle bg-background-default-lighter px-1.5 py-1'>
-      <span className='system-2xs-medium-uppercase text-text-secondary'>{t('workflow.nodes.llm.jsonSchema.required')}</span>
-      <Switch size='xs' defaultValue={defaultValue} onChange={toggleRequired} />
-    </div>
-  )
-}
-
-export default React.memo(RequiredSwitch)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/type-selector.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/type-selector.tsx
deleted file mode 100644
index 84d75e1..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/edit-card/type-selector.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import type { ArrayType, Type } from '../../../../types'
-import type { FC } from 'react'
-import { useState } from 'react'
-import { RiArrowDownSLine, RiCheckLine } from '@remixicon/react'
-import cn from '@/utils/classnames'
-
-export type TypeItem = {
-  value: Type | ArrayType
-  text: string
-}
-
-type TypeSelectorProps = {
-  items: TypeItem[]
-  currentValue: Type | ArrayType
-  onSelect: (item: TypeItem) => void
-  popupClassName?: string
-}
-
-const TypeSelector: FC<TypeSelectorProps> = ({
-  items,
-  currentValue,
-  onSelect,
-  popupClassName,
-}) => {
-  const [open, setOpen] = useState(false)
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
-        <div className={cn(
-          'flex items-center rounded-[5px] p-0.5 pl-1 hover:bg-state-base-hover',
-          open && 'bg-state-base-hover',
-        )}>
-          <span className='system-xs-medium text-text-tertiary'>{currentValue}</span>
-          <RiArrowDownSLine className='h-4 w-4 text-text-tertiary' />
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className={popupClassName}>
-        <div className='w-40 rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg p-1 shadow-lg shadow-shadow-shadow-5'>
-          {items.map((item) => {
-            const isSelected = item.value === currentValue
-            return (<div
-              key={item.value}
-              className={'flex items-center gap-x-1 rounded-lg px-2 py-1 hover:bg-state-base-hover'}
-              onClick={() => {
-                onSelect(item)
-                setOpen(false)
-              }}
-            >
-              <span className='system-sm-medium px-1 text-text-secondary'>{item.text}</span>
-              {isSelected && <RiCheckLine className='h-4 w-4 text-text-accent' />}
-            </div>
-            )
-          })}
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default TypeSelector
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/hooks.ts b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/hooks.ts
deleted file mode 100644
index 470a322..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/hooks.ts
+++ /dev/null
@@ -1,441 +0,0 @@
-import produce from 'immer'
-import type { VisualEditorProps } from '.'
-import { useMittContext } from './context'
-import { useVisualEditorStore } from './store'
-import type { EditData } from './edit-card'
-import { ArrayType, type Field, Type } from '../../../types'
-import Toast from '@/app/components/base/toast'
-import { findPropertyWithPath } from '../../../utils'
-
-type ChangeEventParams = {
-  path: string[],
-  parentPath: string[],
-  oldFields: EditData,
-  fields: EditData,
-}
-
-type AddEventParams = {
-  path: string[]
-}
-
-export const useSchemaNodeOperations = (props: VisualEditorProps) => {
-  const { schema: jsonSchema, onChange } = props
-  const backupSchema = useVisualEditorStore(state => state.backupSchema)
-  const setBackupSchema = useVisualEditorStore(state => state.setBackupSchema)
-  const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
-  const setIsAddingNewField = useVisualEditorStore(state => state.setIsAddingNewField)
-  const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
-  const setAdvancedEditing = useVisualEditorStore(state => state.setAdvancedEditing)
-  const setHoveringProperty = useVisualEditorStore(state => state.setHoveringProperty)
-  const { emit, useSubscribe } = useMittContext()
-
-  useSubscribe('restoreSchema', () => {
-    if (backupSchema) {
-      onChange(backupSchema)
-      setBackupSchema(null)
-    }
-  })
-
-  useSubscribe('quitEditing', (params) => {
-    const { callback } = params as any
-    callback?.(backupSchema)
-    if (backupSchema) {
-      onChange(backupSchema)
-      setBackupSchema(null)
-    }
-    isAddingNewField && setIsAddingNewField(false)
-    advancedEditing && setAdvancedEditing(false)
-    setHoveringProperty(null)
-  })
-
-  useSubscribe('propertyNameChange', (params) => {
-    const { parentPath, oldFields, fields } = params as ChangeEventParams
-    const { name: oldName } = oldFields
-    const { name: newName } = fields
-    const newSchema = produce(jsonSchema, (draft) => {
-      if (oldName === newName) return
-      const schema = findPropertyWithPath(draft, parentPath) as Field
-
-      if (schema.type === Type.object) {
-        const properties = schema.properties || {}
-        if (properties[newName]) {
-          Toast.notify({
-            type: 'error',
-            message: 'Property name already exists',
-          })
-          emit('restorePropertyName')
-          return
-        }
-
-        const newProperties = Object.entries(properties).reduce((acc, [key, value]) => {
-          acc[key === oldName ? newName : key] = value
-          return acc
-        }, {} as Record<string, Field>)
-
-        const required = schema.required || []
-        const newRequired = produce(required, (draft) => {
-          const index = draft.indexOf(oldName)
-          if (index !== -1)
-            draft.splice(index, 1, newName)
-        })
-
-        schema.properties = newProperties
-        schema.required = newRequired
-      }
-
-      if (schema.type === Type.array && schema.items && schema.items.type === Type.object) {
-        const properties = schema.items.properties || {}
-        if (properties[newName]) {
-          Toast.notify({
-            type: 'error',
-            message: 'Property name already exists',
-          })
-          emit('restorePropertyName')
-          return
-        }
-
-        const newProperties = Object.entries(properties).reduce((acc, [key, value]) => {
-          acc[key === oldName ? newName : key] = value
-          return acc
-        }, {} as Record<string, Field>)
-        const required = schema.items.required || []
-        const newRequired = produce(required, (draft) => {
-          const index = draft.indexOf(oldName)
-          if (index !== -1)
-            draft.splice(index, 1, newName)
-        })
-
-        schema.items.properties = newProperties
-        schema.items.required = newRequired
-      }
-    })
-    onChange(newSchema)
-  })
-
-  useSubscribe('propertyTypeChange', (params) => {
-    const { path, oldFields, fields } = params as ChangeEventParams
-    const { type: oldType } = oldFields
-    const { type: newType } = fields
-    if (oldType === newType) return
-    const newSchema = produce(jsonSchema, (draft) => {
-      const schema = findPropertyWithPath(draft, path) as Field
-
-      if (schema.type === Type.object) {
-        delete schema.properties
-        delete schema.required
-      }
-      if (schema.type === Type.array)
-        delete schema.items
-      switch (newType) {
-        case Type.object:
-          schema.type = Type.object
-          schema.properties = {}
-          schema.required = []
-          schema.additionalProperties = false
-          break
-        case ArrayType.string:
-          schema.type = Type.array
-          schema.items = {
-            type: Type.string,
-          }
-          break
-        case ArrayType.number:
-          schema.type = Type.array
-          schema.items = {
-            type: Type.number,
-          }
-          break
-        // case ArrayType.boolean:
-        //   schema.type = Type.array
-        //   schema.items = {
-        //     type: Type.boolean,
-        //   }
-        //   break
-        case ArrayType.object:
-          schema.type = Type.array
-          schema.items = {
-            type: Type.object,
-            properties: {},
-            required: [],
-            additionalProperties: false,
-          }
-          break
-        default:
-          schema.type = newType as Type
-      }
-    })
-    onChange(newSchema)
-  })
-
-  useSubscribe('propertyRequiredToggle', (params) => {
-    const { parentPath, fields } = params as ChangeEventParams
-    const { name } = fields
-    const newSchema = produce(jsonSchema, (draft) => {
-      const schema = findPropertyWithPath(draft, parentPath) as Field
-
-      if (schema.type === Type.object) {
-        const required = schema.required || []
-        const newRequired = required.includes(name)
-          ? required.filter(item => item !== name)
-          : [...required, name]
-        schema.required = newRequired
-      }
-      if (schema.type === Type.array && schema.items && schema.items.type === Type.object) {
-        const required = schema.items.required || []
-        const newRequired = required.includes(name)
-          ? required.filter(item => item !== name)
-          : [...required, name]
-        schema.items.required = newRequired
-      }
-    })
-    onChange(newSchema)
-  })
-
-  useSubscribe('propertyOptionsChange', (params) => {
-    const { path, fields } = params as ChangeEventParams
-    const newSchema = produce(jsonSchema, (draft) => {
-      const schema = findPropertyWithPath(draft, path) as Field
-      schema.description = fields.description
-      schema.enum = fields.enum
-    })
-    onChange(newSchema)
-  })
-
-  useSubscribe('propertyDelete', (params) => {
-    const { parentPath, fields } = params as ChangeEventParams
-    const { name } = fields
-    const newSchema = produce(jsonSchema, (draft) => {
-      const schema = findPropertyWithPath(draft, parentPath) as Field
-      if (schema.type === Type.object && schema.properties) {
-        delete schema.properties[name]
-        schema.required = schema.required?.filter(item => item !== name)
-      }
-      if (schema.type === Type.array && schema.items?.properties && schema.items?.type === Type.object) {
-        delete schema.items.properties[name]
-        schema.items.required = schema.items.required?.filter(item => item !== name)
-      }
-    })
-    onChange(newSchema)
-  })
-
-  useSubscribe('addField', (params) => {
-    advancedEditing && setAdvancedEditing(false)
-    setBackupSchema(jsonSchema)
-    const { path } = params as AddEventParams
-    setIsAddingNewField(true)
-    const newSchema = produce(jsonSchema, (draft) => {
-      const schema = findPropertyWithPath(draft, path) as Field
-      if (schema.type === Type.object) {
-        schema.properties = {
-          ...(schema.properties || {}),
-          '': {
-            type: Type.string,
-          },
-        }
-        setHoveringProperty([...path, 'properties', ''].join('.'))
-      }
-      if (schema.type === Type.array && schema.items && schema.items.type === Type.object) {
-        schema.items.properties = {
-          ...(schema.items.properties || {}),
-          '': {
-            type: Type.string,
-          },
-        }
-        setHoveringProperty([...path, 'items', 'properties', ''].join('.'))
-      }
-    })
-    onChange(newSchema)
-  })
-
-  useSubscribe('fieldChange', (params) => {
-    let samePropertyNameError = false
-    const { parentPath, oldFields, fields } = params as ChangeEventParams
-    const newSchema = produce(jsonSchema, (draft) => {
-      const parentSchema = findPropertyWithPath(draft, parentPath) as Field
-      const { name: oldName, type: oldType, required: oldRequired } = oldFields
-      const { name: newName, type: newType, required: newRequired } = fields
-      if (parentSchema.type === Type.object && parentSchema.properties) {
-        // name change
-        if (oldName !== newName) {
-          const properties = parentSchema.properties
-          if (properties[newName]) {
-            Toast.notify({
-              type: 'error',
-              message: 'Property name already exists',
-            })
-            samePropertyNameError = true
-          }
-
-          const newProperties = Object.entries(properties).reduce((acc, [key, value]) => {
-            acc[key === oldName ? newName : key] = value
-            return acc
-          }, {} as Record<string, Field>)
-
-          const requiredProperties = parentSchema.required || []
-          const newRequiredProperties = produce(requiredProperties, (draft) => {
-            const index = draft.indexOf(oldName)
-            if (index !== -1)
-              draft.splice(index, 1, newName)
-          })
-
-          parentSchema.properties = newProperties
-          parentSchema.required = newRequiredProperties
-        }
-
-        // required change
-        if (oldRequired !== newRequired) {
-          const required = parentSchema.required || []
-          const newRequired = required.includes(newName)
-            ? required.filter(item => item !== newName)
-            : [...required, newName]
-          parentSchema.required = newRequired
-        }
-
-        const schema = parentSchema.properties[newName]
-
-        // type change
-        if (oldType !== newType) {
-          if (schema.type === Type.object) {
-            delete schema.properties
-            delete schema.required
-          }
-          if (schema.type === Type.array)
-            delete schema.items
-          switch (newType) {
-            case Type.object:
-              schema.type = Type.object
-              schema.properties = {}
-              schema.required = []
-              schema.additionalProperties = false
-              break
-            case ArrayType.string:
-              schema.type = Type.array
-              schema.items = {
-                type: Type.string,
-              }
-              break
-            case ArrayType.number:
-              schema.type = Type.array
-              schema.items = {
-                type: Type.number,
-              }
-              break
-            // case ArrayType.boolean:
-            //   schema.type = Type.array
-            //   schema.items = {
-            //     type: Type.boolean,
-            //   }
-            //   break
-            case ArrayType.object:
-              schema.type = Type.array
-              schema.items = {
-                type: Type.object,
-                properties: {},
-                required: [],
-                additionalProperties: false,
-              }
-              break
-            default:
-              schema.type = newType as Type
-          }
-        }
-
-        // other options change
-        schema.description = fields.description
-        schema.enum = fields.enum
-      }
-
-      if (parentSchema.type === Type.array && parentSchema.items && parentSchema.items.type === Type.object && parentSchema.items.properties) {
-        // name change
-        if (oldName !== newName) {
-          const properties = parentSchema.items.properties || {}
-          if (properties[newName]) {
-            Toast.notify({
-              type: 'error',
-              message: 'Property name already exists',
-            })
-            samePropertyNameError = true
-          }
-
-          const newProperties = Object.entries(properties).reduce((acc, [key, value]) => {
-            acc[key === oldName ? newName : key] = value
-            return acc
-          }, {} as Record<string, Field>)
-          const required = parentSchema.items.required || []
-          const newRequired = produce(required, (draft) => {
-            const index = draft.indexOf(oldName)
-            if (index !== -1)
-              draft.splice(index, 1, newName)
-          })
-
-          parentSchema.items.properties = newProperties
-          parentSchema.items.required = newRequired
-        }
-
-        // required change
-        if (oldRequired !== newRequired) {
-          const required = parentSchema.items.required || []
-          const newRequired = required.includes(newName)
-            ? required.filter(item => item !== newName)
-            : [...required, newName]
-          parentSchema.items.required = newRequired
-        }
-
-        const schema = parentSchema.items.properties[newName]
-        // type change
-        if (oldType !== newType) {
-          if (schema.type === Type.object) {
-            delete schema.properties
-            delete schema.required
-          }
-          if (schema.type === Type.array)
-            delete schema.items
-          switch (newType) {
-            case Type.object:
-              schema.type = Type.object
-              schema.properties = {}
-              schema.required = []
-              schema.additionalProperties = false
-              break
-            case ArrayType.string:
-              schema.type = Type.array
-              schema.items = {
-                type: Type.string,
-              }
-              break
-            case ArrayType.number:
-              schema.type = Type.array
-              schema.items = {
-                type: Type.number,
-              }
-              break
-            // case ArrayType.boolean:
-            //   schema.type = Type.array
-            //   schema.items = {
-            //     type: Type.boolean,
-            //   }
-            //   break
-            case ArrayType.object:
-              schema.type = Type.array
-              schema.items = {
-                type: Type.object,
-                properties: {},
-                required: [],
-                additionalProperties: false,
-              }
-              break
-            default:
-              schema.type = newType as Type
-          }
-        }
-
-        // other options change
-        schema.description = fields.description
-        schema.enum = fields.enum
-      }
-    })
-    if (samePropertyNameError) return
-    onChange(newSchema)
-    emit('fieldChangeSuccess')
-  })
-}
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/index.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/index.tsx
deleted file mode 100644
index 1df4253..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/index.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import type { FC } from 'react'
-import type { SchemaRoot } from '../../../types'
-import SchemaNode from './schema-node'
-import { useSchemaNodeOperations } from './hooks'
-
-export type VisualEditorProps = {
-  schema: SchemaRoot
-  onChange: (schema: SchemaRoot) => void
-}
-
-const VisualEditor: FC<VisualEditorProps> = (props) => {
-  const { schema } = props
-  useSchemaNodeOperations(props)
-
-  return (
-    <div className='h-full overflow-auto rounded-xl bg-background-section-burn p-1 pl-2'>
-      <SchemaNode
-        name='structured_output'
-        schema={schema}
-        required={false}
-        path={[]}
-        depth={0}
-      />
-    </div>
-  )
-}
-
-export default VisualEditor
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/schema-node.tsx b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/schema-node.tsx
deleted file mode 100644
index 70a6b86..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/schema-node.tsx
+++ /dev/null
@@ -1,194 +0,0 @@
-import type { FC } from 'react'
-import React, { useMemo, useState } from 'react'
-import { type Field, Type } from '../../../types'
-import classNames from '@/utils/classnames'
-import { RiArrowDropDownLine, RiArrowDropRightLine } from '@remixicon/react'
-import { getFieldType, getHasChildren } from '../../../utils'
-import Divider from '@/app/components/base/divider'
-import EditCard from './edit-card'
-import Card from './card'
-import { useVisualEditorStore } from './store'
-import { useDebounceFn } from 'ahooks'
-import AddField from './add-field'
-import { JSON_SCHEMA_MAX_DEPTH } from '@/config'
-
-type SchemaNodeProps = {
-  name: string
-  required: boolean
-  schema: Field
-  path: string[]
-  parentPath?: string[]
-  depth: number
-}
-
-// Support 10 levels of indentation
-const indentPadding: Record<number, string> = {
-  0: 'pl-0',
-  1: 'pl-[20px]',
-  2: 'pl-[40px]',
-  3: 'pl-[60px]',
-  4: 'pl-[80px]',
-  5: 'pl-[100px]',
-  6: 'pl-[120px]',
-  7: 'pl-[140px]',
-  8: 'pl-[160px]',
-  9: 'pl-[180px]',
-  10: 'pl-[200px]',
-}
-
-const indentLeft: Record<number, string> = {
-  0: 'left-0',
-  1: 'left-[20px]',
-  2: 'left-[40px]',
-  3: 'left-[60px]',
-  4: 'left-[80px]',
-  5: 'left-[100px]',
-  6: 'left-[120px]',
-  7: 'left-[140px]',
-  8: 'left-[160px]',
-  9: 'left-[180px]',
-  10: 'left-[200px]',
-}
-
-const SchemaNode: FC<SchemaNodeProps> = ({
-  name,
-  required,
-  schema,
-  path,
-  parentPath,
-  depth,
-}) => {
-  const [isExpanded, setIsExpanded] = useState(true)
-  const hoveringProperty = useVisualEditorStore(state => state.hoveringProperty)
-  const setHoveringProperty = useVisualEditorStore(state => state.setHoveringProperty)
-  const isAddingNewField = useVisualEditorStore(state => state.isAddingNewField)
-  const advancedEditing = useVisualEditorStore(state => state.advancedEditing)
-
-  const { run: setHoveringPropertyDebounced } = useDebounceFn((path: string | null) => {
-    setHoveringProperty(path)
-  }, { wait: 50 })
-
-  const hasChildren = useMemo(() => getHasChildren(schema), [schema])
-  const type = useMemo(() => getFieldType(schema), [schema])
-  const isHovering = hoveringProperty === path.join('.')
-
-  const handleExpand = () => {
-    setIsExpanded(!isExpanded)
-  }
-
-  const handleMouseEnter = () => {
-    if (advancedEditing || isAddingNewField) return
-    setHoveringPropertyDebounced(path.join('.'))
-  }
-
-  const handleMouseLeave = () => {
-    if (advancedEditing || isAddingNewField) return
-    setHoveringPropertyDebounced(null)
-  }
-
-  return (
-    <div className='relative'>
-      <div className={classNames('relative z-10', indentPadding[depth])}>
-        {depth > 0 && hasChildren && (
-          <div className={classNames(
-            'flex items-center absolute top-0 w-5 h-7 px-0.5 z-10 bg-background-section-burn',
-            indentLeft[depth - 1],
-          )}>
-            <button
-              onClick={handleExpand}
-              className='py-0.5 text-text-tertiary hover:text-text-accent'
-            >
-              {
-                isExpanded
-                  ? <RiArrowDropDownLine className='h-4 w-4' />
-                  : <RiArrowDropRightLine className='h-4 w-4' />
-              }
-            </button>
-          </div>
-        )}
-
-        <div
-          onMouseEnter={handleMouseEnter}
-          onMouseLeave={handleMouseLeave}
-        >
-          {(isHovering && depth > 0) ? (
-            <EditCard
-              fields={{
-                name,
-                type,
-                required,
-                description: schema.description,
-                enum: schema.enum,
-              }}
-              path={path}
-              parentPath={parentPath!}
-              depth={depth}
-            />
-          ) : (
-            <Card
-              name={name}
-              type={type}
-              required={required}
-              description={schema.description}
-            />
-          )}
-        </div>
-      </div>
-
-      <div className={classNames(
-        'flex justify-center w-5 absolute z-0',
-        schema.description ? 'h-[calc(100%-3rem)] top-12' : 'h-[calc(100%-1.75rem)] top-7',
-        indentLeft[depth],
-      )}>
-        <Divider
-          type='vertical'
-          className={classNames('mx-0', isHovering ? 'bg-divider-deep' : 'bg-divider-subtle')}
-        />
-      </div>
-
-      {isExpanded && hasChildren && depth < JSON_SCHEMA_MAX_DEPTH && (
-        <>
-          {schema.type === Type.object && schema.properties && (
-            Object.entries(schema.properties).map(([key, childSchema]) => (
-              <SchemaNode
-                key={key}
-                name={key}
-                required={!!schema.required?.includes(key)}
-                schema={childSchema}
-                path={[...path, 'properties', key]}
-                parentPath={path}
-                depth={depth + 1}
-              />
-            ))
-          )}
-
-          {schema.type === Type.array
-            && schema.items
-            && schema.items.type === Type.object
-            && schema.items.properties
-            && (
-              Object.entries(schema.items.properties).map(([key, childSchema]) => (
-                <SchemaNode
-                  key={key}
-                  name={key}
-                  required={!!schema.items?.required?.includes(key)}
-                  schema={childSchema}
-                  path={[...path, 'items', 'properties', key]}
-                  parentPath={path}
-                  depth={depth + 1}
-                />
-              ))
-            )}
-        </>
-      )}
-
-      {
-        depth === 0 && !isAddingNewField && (
-          <AddField />
-        )
-      }
-    </div>
-  )
-}
-
-export default React.memo(SchemaNode)
diff --git a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/store.ts b/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/store.ts
deleted file mode 100644
index 3dbd667..0000000
--- a/app/components/workflow/nodes/llm/components/json-schema-config-modal/visual-editor/store.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { useContext } from 'react'
-import { createStore, useStore } from 'zustand'
-import type { SchemaRoot } from '../../../types'
-import { VisualEditorContext } from './context'
-
-type VisualEditorStore = {
-  hoveringProperty: string | null
-  setHoveringProperty: (propertyPath: string | null) => void
-  isAddingNewField: boolean
-  setIsAddingNewField: (isAdding: boolean) => void
-  advancedEditing: boolean
-  setAdvancedEditing: (isEditing: boolean) => void
-  backupSchema: SchemaRoot | null
-  setBackupSchema: (schema: SchemaRoot | null) => void
-}
-
-export const createVisualEditorStore = () => createStore<VisualEditorStore>(set => ({
-  hoveringProperty: null,
-  setHoveringProperty: (propertyPath: string | null) => set({ hoveringProperty: propertyPath }),
-  isAddingNewField: false,
-  setIsAddingNewField: (isAdding: boolean) => set({ isAddingNewField: isAdding }),
-  advancedEditing: false,
-  setAdvancedEditing: (isEditing: boolean) => set({ advancedEditing: isEditing }),
-  backupSchema: null,
-  setBackupSchema: (schema: SchemaRoot | null) => set({ backupSchema: schema }),
-}))
-
-export const useVisualEditorStore = <T>(selector: (state: VisualEditorStore) => T): T => {
-  const store = useContext(VisualEditorContext)
-  if (!store)
-    throw new Error('Missing VisualEditorContext.Provider in the tree')
-
-  return useStore(store, selector)
-}
diff --git a/app/components/workflow/nodes/llm/components/structure-output.tsx b/app/components/workflow/nodes/llm/components/structure-output.tsx
deleted file mode 100644
index b20820d..0000000
--- a/app/components/workflow/nodes/llm/components/structure-output.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-import Button from '@/app/components/base/button'
-import { RiEditLine } from '@remixicon/react'
-import type { FC } from 'react'
-import React, { useCallback } from 'react'
-import { type SchemaRoot, type StructuredOutput, Type } from '../types'
-import ShowPanel from '@/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/show'
-import { useBoolean } from 'ahooks'
-import JsonSchemaConfigModal from './json-schema-config-modal'
-import cn from '@/utils/classnames'
-import { useTranslation } from 'react-i18next'
-
-type Props = {
-  className?: string
-  value?: StructuredOutput
-  onChange: (value: StructuredOutput) => void,
-}
-
-const StructureOutput: FC<Props> = ({
-  className,
-  value,
-  onChange,
-}) => {
-  const { t } = useTranslation()
-  const [showConfig, {
-    setTrue: showConfigModal,
-    setFalse: hideConfigModal,
-  }] = useBoolean(false)
-
-  const handleChange = useCallback((value: SchemaRoot) => {
-    onChange({
-      schema: value,
-    })
-  }, [onChange])
-  return (
-    <div className={cn(className)}>
-      <div className='flex justify-between'>
-        <div className='flex items-center leading-[18px]'>
-          <div className='code-sm-semibold text-text-secondary'>structured_output</div>
-          <div className='system-xs-regular ml-2 text-text-tertiary'>object</div>
-        </div>
-        <Button
-          size='small'
-          variant='secondary'
-          className='flex'
-          onClick={showConfigModal}
-        >
-          <RiEditLine className='mr-1 size-3.5' />
-          <div className='system-xs-medium text-components-button-secondary-text'>{t('app.structOutput.configure')}</div>
-        </Button>
-      </div>
-      {(value?.schema && value.schema.properties && Object.keys(value.schema.properties).length > 0) ? (
-        <ShowPanel
-          payload={value}
-        />) : (
-        <div className='system-xs-regular mt-1.5 flex h-10 cursor-pointer items-center justify-center rounded-[10px] bg-background-section text-text-tertiary' onClick={showConfigModal}>{t('app.structOutput.notConfiguredTip')}</div>
-      )}
-
-      {showConfig && (
-        <JsonSchemaConfigModal
-          isShow
-          defaultSchema={(value?.schema || {
-            type: Type.object,
-            properties: {},
-            required: [],
-            additionalProperties: false,
-          }) as any} // wait for types change
-          onSave={handleChange as any} // wait for types change
-          onClose={hideConfigModal}
-        />
-      )}
-    </div>
-  )
-}
-export default React.memo(StructureOutput)
diff --git a/app/components/workflow/nodes/loop-end/default.ts b/app/components/workflow/nodes/loop-end/default.ts
deleted file mode 100644
index c136704..0000000
--- a/app/components/workflow/nodes/loop-end/default.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import type { NodeDefault } from '../../types'
-import { ALL_CHAT_AVAILABLE_BLOCKS, ALL_COMPLETION_AVAILABLE_BLOCKS } from '@/app/components/workflow/blocks'
-import type {
-  SimpleNodeType,
-} from '@/app/components/workflow/simple-node/types'
-
-const nodeDefault: NodeDefault<SimpleNodeType> = {
-  defaultValue: {},
-  getAvailablePrevNodes(isChatMode: boolean) {
-    const nodes = isChatMode ? ALL_CHAT_AVAILABLE_BLOCKS : ALL_COMPLETION_AVAILABLE_BLOCKS
-    return nodes
-  },
-  getAvailableNextNodes() {
-    return []
-  },
-  checkValid() {
-    return {
-      isValid: true,
-    }
-  },
-}
-
-export default nodeDefault
diff --git a/app/components/workflow/nodes/loop-start/constants.ts b/app/components/workflow/nodes/loop-start/constants.ts
deleted file mode 100644
index 3185b84..0000000
--- a/app/components/workflow/nodes/loop-start/constants.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const CUSTOM_LOOP_START_NODE = 'custom-loop-start'
diff --git a/app/components/workflow/nodes/loop-start/default.ts b/app/components/workflow/nodes/loop-start/default.ts
deleted file mode 100644
index 685f227..0000000
--- a/app/components/workflow/nodes/loop-start/default.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import type { NodeDefault } from '../../types'
-import type { LoopStartNodeType } from './types'
-import { ALL_CHAT_AVAILABLE_BLOCKS, ALL_COMPLETION_AVAILABLE_BLOCKS } from '@/app/components/workflow/blocks'
-
-const nodeDefault: NodeDefault<LoopStartNodeType> = {
-  defaultValue: {},
-  getAvailablePrevNodes() {
-    return []
-  },
-  getAvailableNextNodes(isChatMode: boolean) {
-    const nodes = isChatMode ? ALL_CHAT_AVAILABLE_BLOCKS : ALL_COMPLETION_AVAILABLE_BLOCKS
-    return nodes
-  },
-  checkValid() {
-    return {
-      isValid: true,
-    }
-  },
-}
-
-export default nodeDefault
diff --git a/app/components/workflow/nodes/loop-start/index.tsx b/app/components/workflow/nodes/loop-start/index.tsx
deleted file mode 100644
index a48cc5f..0000000
--- a/app/components/workflow/nodes/loop-start/index.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import { memo } from 'react'
-import { useTranslation } from 'react-i18next'
-import type { NodeProps } from 'reactflow'
-import { RiHome5Fill } from '@remixicon/react'
-import Tooltip from '@/app/components/base/tooltip'
-import { NodeSourceHandle } from '@/app/components/workflow/nodes/_base/components/node-handle'
-
-const LoopStartNode = ({ id, data }: NodeProps) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='nodrag group mt-1 flex h-11 w-11 items-center justify-center rounded-2xl border border-workflow-block-border bg-workflow-block-bg'>
-      <Tooltip popupContent={t('workflow.blocks.loop-start')} asChild={false}>
-        <div className='flex h-6 w-6 items-center justify-center rounded-full border-[0.5px] border-components-panel-border-subtle bg-util-colors-blue-brand-blue-brand-500'>
-          <RiHome5Fill className='h-3 w-3 text-text-primary-on-surface' />
-        </div>
-      </Tooltip>
-      <NodeSourceHandle
-        id={id}
-        data={data}
-        handleClassName='!top-1/2 !-right-[9px] !-translate-y-1/2'
-        handleId='source'
-      />
-    </div>
-  )
-}
-
-export const LoopStartNodeDumb = () => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='nodrag relative left-[17px] top-[21px] z-[11] flex h-11 w-11 items-center justify-center rounded-2xl border border-workflow-block-border bg-workflow-block-bg'>
-      <Tooltip popupContent={t('workflow.blocks.loop-start')} asChild={false}>
-        <div className='flex h-6 w-6 items-center justify-center rounded-full border-[0.5px] border-components-panel-border-subtle bg-util-colors-blue-brand-blue-brand-500'>
-          <RiHome5Fill className='h-3 w-3 text-text-primary-on-surface' />
-        </div>
-      </Tooltip>
-    </div>
-  )
-}
-
-export default memo(LoopStartNode)
diff --git a/app/components/workflow/nodes/loop-start/types.ts b/app/components/workflow/nodes/loop-start/types.ts
deleted file mode 100644
index 1ba7136..0000000
--- a/app/components/workflow/nodes/loop-start/types.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import type { CommonNodeType } from '@/app/components/workflow/types'
-
-export type LoopStartNodeType = CommonNodeType
diff --git a/app/components/workflow/nodes/loop/add-block.tsx b/app/components/workflow/nodes/loop/add-block.tsx
deleted file mode 100644
index accee12..0000000
--- a/app/components/workflow/nodes/loop/add-block.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import {
-  memo,
-  useCallback,
-} from 'react'
-import {
-  RiAddLine,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import {
-  useAvailableBlocks,
-  useNodesInteractions,
-  useNodesReadOnly,
-} from '../../hooks'
-import type { LoopNodeType } from './types'
-import cn from '@/utils/classnames'
-import BlockSelector from '@/app/components/workflow/block-selector'
-
-import type {
-  OnSelectBlock,
-} from '@/app/components/workflow/types'
-import {
-  BlockEnum,
-} from '@/app/components/workflow/types'
-
-type AddBlockProps = {
-  loopNodeId: string
-  loopNodeData: LoopNodeType
-}
-const AddBlock = ({
-  loopNodeData,
-}: AddBlockProps) => {
-  const { t } = useTranslation()
-  const { nodesReadOnly } = useNodesReadOnly()
-  const { handleNodeAdd } = useNodesInteractions()
-  const { availableNextBlocks } = useAvailableBlocks(BlockEnum.Start, false, true)
-
-  const handleSelect = useCallback<OnSelectBlock>((type, toolDefaultValue) => {
-    handleNodeAdd(
-      {
-        nodeType: type,
-        toolDefaultValue,
-      },
-      {
-        prevNodeId: loopNodeData.start_node_id,
-        prevNodeSourceHandle: 'source',
-      },
-    )
-  }, [handleNodeAdd, loopNodeData.start_node_id])
-
-  const renderTriggerElement = useCallback((open: boolean) => {
-    return (
-      <div className={cn(
-        'system-sm-medium relative inline-flex h-8 cursor-pointer items-center rounded-lg border-[0.5px] border-components-button-secondary-border bg-components-button-secondary-bg px-3 text-components-button-secondary-text shadow-xs backdrop-blur-[5px] hover:bg-components-button-secondary-bg-hover',
-        `${nodesReadOnly && '!cursor-not-allowed bg-components-button-secondary-bg-disabled'}`,
-        open && 'bg-components-button-secondary-bg-hover',
-      )}>
-        <RiAddLine className='mr-1 h-4 w-4' />
-        {t('workflow.common.addBlock')}
-      </div>
-    )
-  }, [nodesReadOnly, t])
-
-  return (
-    <div className='absolute left-14 top-7 z-10 flex h-8 items-center'>
-      <div className='group/insert relative h-0.5 w-16 bg-gray-300'>
-        <div className='absolute right-0 top-1/2 h-2 w-0.5 -translate-y-1/2 bg-primary-500'></div>
-      </div>
-      <BlockSelector
-        disabled={nodesReadOnly}
-        onSelect={handleSelect}
-        trigger={renderTriggerElement}
-        triggerInnerClassName='inline-flex'
-        popupClassName='!min-w-[256px]'
-        availableBlocksTypes={availableNextBlocks}
-      />
-    </div>
-  )
-}
-
-export default memo(AddBlock)
diff --git a/app/components/workflow/nodes/loop/components/condition-add.tsx b/app/components/workflow/nodes/loop/components/condition-add.tsx
deleted file mode 100644
index cd5be85..0000000
--- a/app/components/workflow/nodes/loop/components/condition-add.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import {
-  useCallback,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiAddLine } from '@remixicon/react'
-import type { HandleAddCondition } from '../types'
-import Button from '@/app/components/base/button'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import VarReferenceVars from '@/app/components/workflow/nodes/_base/components/variable/var-reference-vars'
-import type {
-  NodeOutPutVar,
-  ValueSelector,
-  Var,
-} from '@/app/components/workflow/types'
-
-type ConditionAddProps = {
-  className?: string
-  variables: NodeOutPutVar[]
-  onSelectVariable: HandleAddCondition
-  disabled?: boolean
-}
-const ConditionAdd = ({
-  className,
-  variables,
-  onSelectVariable,
-  disabled,
-}: ConditionAddProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  const handleSelectVariable = useCallback((valueSelector: ValueSelector, varItem: Var) => {
-    onSelectVariable(valueSelector, varItem)
-    setOpen(false)
-  }, [onSelectVariable, setOpen])
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(!open)}>
-        <Button
-          size='small'
-          className={className}
-          disabled={disabled}
-        >
-          <RiAddLine className='mr-1 h-3.5 w-3.5' />
-          {t('workflow.nodes.ifElse.addCondition')}
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className='w-[296px] rounded-lg border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg'>
-          <VarReferenceVars
-            vars={variables}
-            isSupportFileVar
-            onChange={handleSelectVariable}
-          />
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default ConditionAdd
diff --git a/app/components/workflow/nodes/loop/components/condition-files-list-value.tsx b/app/components/workflow/nodes/loop/components/condition-files-list-value.tsx
deleted file mode 100644
index 772b960..0000000
--- a/app/components/workflow/nodes/loop/components/condition-files-list-value.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import {
-  memo,
-  useCallback,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { ComparisonOperator, type Condition } from '../types'
-import {
-  comparisonOperatorNotRequireValue,
-  isComparisonOperatorNeedTranslate,
-  isEmptyRelatedOperator,
-} from '../utils'
-import type { ValueSelector } from '../../../types'
-import { FILE_TYPE_OPTIONS, TRANSFER_METHOD } from './../default'
-import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development'
-import { BubbleX, Env } from '@/app/components/base/icons/src/vender/line/others'
-import cn from '@/utils/classnames'
-import { isConversationVar, isENV, isSystemVar } from '@/app/components/workflow/nodes/_base/components/variable/utils'
-const i18nPrefix = 'workflow.nodes.ifElse'
-
-type ConditionValueProps = {
-  condition: Condition
-}
-const ConditionValue = ({
-  condition,
-}: ConditionValueProps) => {
-  const { t } = useTranslation()
-  const {
-    variable_selector,
-    comparison_operator: operator,
-    sub_variable_condition,
-  } = condition
-
-  const variableSelector = variable_selector as ValueSelector
-
-  const variableName = (isSystemVar(variableSelector) ? variableSelector.slice(0).join('.') : variableSelector.slice(1).join('.'))
-  const operatorName = isComparisonOperatorNeedTranslate(operator) ? t(`workflow.nodes.ifElse.comparisonOperator.${operator}`) : operator
-  const notHasValue = comparisonOperatorNotRequireValue(operator)
-  const isEnvVar = isENV(variableSelector)
-  const isChatVar = isConversationVar(variableSelector)
-  const formatValue = useCallback((c: Condition) => {
-    const notHasValue = comparisonOperatorNotRequireValue(c.comparison_operator)
-    if (notHasValue)
-      return ''
-
-    const value = c.value as string
-    return value.replace(/{{#([^#]*)#}}/g, (a, b) => {
-      const arr: string[] = b.split('.')
-      if (isSystemVar(arr))
-        return `{{${b}}}`
-
-      return `{{${arr.slice(1).join('.')}}}`
-    })
-  }, [])
-
-  const isSelect = useCallback((c: Condition) => {
-    return c.comparison_operator === ComparisonOperator.in || c.comparison_operator === ComparisonOperator.notIn
-  }, [])
-
-  const selectName = useCallback((c: Condition) => {
-    const isSelect = c.comparison_operator === ComparisonOperator.in || c.comparison_operator === ComparisonOperator.notIn
-    if (isSelect) {
-      const name = [...FILE_TYPE_OPTIONS, ...TRANSFER_METHOD].filter(item => item.value === (Array.isArray(c.value) ? c.value[0] : c.value))[0]
-      return name
-        ? t(`workflow.nodes.ifElse.optionName.${name.i18nKey}`).replace(/{{#([^#]*)#}}/g, (a, b) => {
-          const arr: string[] = b.split('.')
-          if (isSystemVar(arr))
-            return `{{${b}}}`
-
-          return `{{${arr.slice(1).join('.')}}}`
-        })
-        : ''
-    }
-    return ''
-  }, [t])
-
-  return (
-    <div className='rounded-md bg-workflow-block-parma-bg'>
-      <div className='flex h-6 items-center px-1 '>
-        {!isEnvVar && !isChatVar && <Variable02 className='mr-1 h-3.5 w-3.5 shrink-0 text-text-accent' />}
-        {isEnvVar && <Env className='mr-1 h-3.5 w-3.5 shrink-0 text-util-colors-violet-violet-600' />}
-        {isChatVar && <BubbleX className='h-3.5 w-3.5 text-util-colors-teal-teal-700' />}
-
-        <div
-          className={cn(
-            'shrink-0  truncate text-xs font-medium text-text-accent',
-            !notHasValue && 'max-w-[70px]',
-          )}
-          title={variableName}
-        >
-          {variableName}
-        </div>
-        <div
-          className='mx-1 shrink-0 text-xs font-medium text-text-primary'
-          title={operatorName}
-        >
-          {operatorName}
-        </div>
-      </div>
-      <div className='ml-[10px] border-l border-divider-regular pl-[10px]'>
-        {
-          sub_variable_condition?.conditions.map((c: Condition, index) => (
-            <div className='relative flex h-6 items-center space-x-1' key={c.id}>
-              <div className='system-xs-medium text-text-accent'>{c.key}</div>
-              <div className='system-xs-medium text-text-primary'>{isComparisonOperatorNeedTranslate(c.comparison_operator) ? t(`workflow.nodes.ifElse.comparisonOperator.${c.comparison_operator}`) : c.comparison_operator}</div>
-              {c.comparison_operator && !isEmptyRelatedOperator(c.comparison_operator) && <div className='system-xs-regular text-text-secondary'>{isSelect(c) ? selectName(c) : formatValue(c)}</div>}
-              {index !== sub_variable_condition.conditions.length - 1 && (<div className='absolute bottom-[-10px] right-1 z-10 text-[10px] font-medium uppercase leading-4 text-text-accent'>{t(`${i18nPrefix}.${sub_variable_condition.logical_operator}`)}</div>)}
-            </div>
-          ))
-        }
-      </div>
-    </div>
-  )
-}
-
-export default memo(ConditionValue)
diff --git a/app/components/workflow/nodes/loop/components/condition-list/condition-input.tsx b/app/components/workflow/nodes/loop/components/condition-list/condition-input.tsx
deleted file mode 100644
index 5c02f14..0000000
--- a/app/components/workflow/nodes/loop/components/condition-list/condition-input.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import { useStore } from '@/app/components/workflow/store'
-import PromptEditor from '@/app/components/base/prompt-editor'
-import { BlockEnum } from '@/app/components/workflow/types'
-import type {
-  Node,
-} from '@/app/components/workflow/types'
-
-type ConditionInputProps = {
-  disabled?: boolean
-  value: string
-  onChange: (value: string) => void
-  availableNodes: Node[]
-}
-const ConditionInput = ({
-  value,
-  onChange,
-  disabled,
-  availableNodes,
-}: ConditionInputProps) => {
-  const { t } = useTranslation()
-  const controlPromptEditorRerenderKey = useStore(s => s.controlPromptEditorRerenderKey)
-
-  return (
-    <PromptEditor
-      key={controlPromptEditorRerenderKey}
-      compact
-      value={value}
-      placeholder={t('workflow.nodes.ifElse.enterValue') || ''}
-      workflowVariableBlock={{
-        show: true,
-        variables: [],
-        workflowNodesMap: availableNodes.reduce((acc, node) => {
-          acc[node.id] = {
-            title: node.data.title,
-            type: node.data.type,
-          }
-          if (node.data.type === BlockEnum.Start) {
-            acc.sys = {
-              title: t('workflow.blocks.start'),
-              type: BlockEnum.Start,
-            }
-          }
-          return acc
-        }, {} as any),
-      }}
-      onChange={onChange}
-      editable={!disabled}
-    />
-  )
-}
-
-export default ConditionInput
diff --git a/app/components/workflow/nodes/loop/components/condition-list/condition-item.tsx b/app/components/workflow/nodes/loop/components/condition-list/condition-item.tsx
deleted file mode 100644
index b3ce67b..0000000
--- a/app/components/workflow/nodes/loop/components/condition-list/condition-item.tsx
+++ /dev/null
@@ -1,330 +0,0 @@
-import {
-  useCallback,
-  useMemo,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiDeleteBinLine } from '@remixicon/react'
-import produce from 'immer'
-import type { VarType as NumberVarType } from '../../../tool/types'
-import type {
-  Condition,
-  HandleAddSubVariableCondition,
-  HandleRemoveCondition,
-  HandleToggleSubVariableConditionLogicalOperator,
-  HandleUpdateCondition,
-  HandleUpdateSubVariableCondition,
-  handleRemoveSubVariableCondition,
-} from '../../types'
-import {
-  ComparisonOperator,
-} from '../../types'
-import ConditionNumberInput from '../condition-number-input'
-import ConditionWrap from '../condition-wrap'
-import { comparisonOperatorNotRequireValue, getOperators } from './../../utils'
-import ConditionOperator from './condition-operator'
-import ConditionInput from './condition-input'
-import { FILE_TYPE_OPTIONS, SUB_VARIABLES, TRANSFER_METHOD } from './../../default'
-import type {
-  Node,
-  NodeOutPutVar,
-  ValueSelector,
-  Var,
-} from '@/app/components/workflow/types'
-import { VarType } from '@/app/components/workflow/types'
-import cn from '@/utils/classnames'
-import { SimpleSelect as Select } from '@/app/components/base/select'
-import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development'
-import ConditionVarSelector from './condition-var-selector'
-
-const optionNameI18NPrefix = 'workflow.nodes.ifElse.optionName'
-
-type ConditionItemProps = {
-  className?: string
-  disabled?: boolean
-  conditionId: string // in isSubVariableKey it's the value of the parent condition's id
-  condition: Condition // condition may the condition of case or condition of sub variable
-  file?: { key: string }
-  isSubVariableKey?: boolean
-  isValueFieldShort?: boolean
-  onRemoveCondition?: HandleRemoveCondition
-  onUpdateCondition?: HandleUpdateCondition
-  onAddSubVariableCondition?: HandleAddSubVariableCondition
-  onRemoveSubVariableCondition?: handleRemoveSubVariableCondition
-  onUpdateSubVariableCondition?: HandleUpdateSubVariableCondition
-  onToggleSubVariableConditionLogicalOperator?: HandleToggleSubVariableConditionLogicalOperator
-  nodeId: string
-  availableNodes: Node[]
-  numberVariables: NodeOutPutVar[]
-  availableVars: NodeOutPutVar[]
-}
-const ConditionItem = ({
-  className,
-  disabled,
-  conditionId,
-  condition,
-  file,
-  isSubVariableKey,
-  isValueFieldShort,
-  onRemoveCondition,
-  onUpdateCondition,
-  onAddSubVariableCondition,
-  onRemoveSubVariableCondition,
-  onUpdateSubVariableCondition,
-  onToggleSubVariableConditionLogicalOperator,
-  nodeId,
-  availableNodes,
-  numberVariables,
-  availableVars,
-}: ConditionItemProps) => {
-  const { t } = useTranslation()
-
-  const [isHovered, setIsHovered] = useState(false)
-  const [open, setOpen] = useState(false)
-
-  const doUpdateCondition = useCallback((newCondition: Condition) => {
-    if (isSubVariableKey)
-      onUpdateSubVariableCondition?.(conditionId, condition.id, newCondition)
-    else
-      onUpdateCondition?.(condition.id, newCondition)
-  }, [condition, conditionId, isSubVariableKey, onUpdateCondition, onUpdateSubVariableCondition])
-
-  const canChooseOperator = useMemo(() => {
-    if (disabled)
-      return false
-
-    if (isSubVariableKey)
-      return !!condition.key
-
-    return true
-  }, [condition.key, disabled, isSubVariableKey])
-  const handleUpdateConditionOperator = useCallback((value: ComparisonOperator) => {
-    const newCondition = {
-      ...condition,
-      comparison_operator: value,
-    }
-    doUpdateCondition(newCondition)
-  }, [condition, doUpdateCondition])
-
-  const handleUpdateConditionNumberVarType = useCallback((numberVarType: NumberVarType) => {
-    const newCondition = {
-      ...condition,
-      numberVarType,
-      value: '',
-    }
-    doUpdateCondition(newCondition)
-  }, [condition, doUpdateCondition])
-
-  const isSubVariable = condition.varType === VarType.arrayFile && [ComparisonOperator.contains, ComparisonOperator.notContains, ComparisonOperator.allOf].includes(condition.comparison_operator!)
-  const fileAttr = useMemo(() => {
-    if (file)
-      return file
-    if (isSubVariableKey) {
-      return {
-        key: condition.key!,
-      }
-    }
-    return undefined
-  }, [condition.key, file, isSubVariableKey])
-
-  const isArrayValue = fileAttr?.key === 'transfer_method' || fileAttr?.key === 'type'
-
-  const handleUpdateConditionValue = useCallback((value: string) => {
-    if (value === condition.value || (isArrayValue && value === condition.value?.[0]))
-      return
-    const newCondition = {
-      ...condition,
-      value: isArrayValue ? [value] : value,
-    }
-    doUpdateCondition(newCondition)
-  }, [condition, doUpdateCondition, isArrayValue])
-
-  const isSelect = condition.comparison_operator && [ComparisonOperator.in, ComparisonOperator.notIn].includes(condition.comparison_operator)
-  const selectOptions = useMemo(() => {
-    if (isSelect) {
-      if (fileAttr?.key === 'type' || condition.comparison_operator === ComparisonOperator.allOf) {
-        return FILE_TYPE_OPTIONS.map(item => ({
-          name: t(`${optionNameI18NPrefix}.${item.i18nKey}`),
-          value: item.value,
-        }))
-      }
-      if (fileAttr?.key === 'transfer_method') {
-        return TRANSFER_METHOD.map(item => ({
-          name: t(`${optionNameI18NPrefix}.${item.i18nKey}`),
-          value: item.value,
-        }))
-      }
-      return []
-    }
-    return []
-  }, [condition.comparison_operator, fileAttr?.key, isSelect, t])
-
-  const isNotInput = isSelect || isSubVariable
-
-  const isSubVarSelect = isSubVariableKey
-  const subVarOptions = SUB_VARIABLES.map(item => ({
-    name: item,
-    value: item,
-  }))
-
-  const handleSubVarKeyChange = useCallback((key: string) => {
-    const newCondition = produce(condition, (draft) => {
-      draft.key = key
-      if (key === 'size')
-        draft.varType = VarType.number
-      else
-        draft.varType = VarType.string
-
-      draft.value = ''
-      draft.comparison_operator = getOperators(undefined, { key })[0]
-    })
-
-    onUpdateSubVariableCondition?.(conditionId, condition.id, newCondition)
-  }, [condition, conditionId, onUpdateSubVariableCondition])
-
-  const doRemoveCondition = useCallback(() => {
-    if (isSubVariableKey)
-      onRemoveSubVariableCondition?.(conditionId, condition.id)
-    else
-      onRemoveCondition?.(condition.id)
-  }, [condition, conditionId, isSubVariableKey, onRemoveCondition, onRemoveSubVariableCondition])
-
-  const handleVarChange = useCallback((valueSelector: ValueSelector, varItem: Var) => {
-    const newCondition = produce(condition, (draft) => {
-      draft.variable_selector = valueSelector
-      draft.varType = varItem.type
-      draft.value = ''
-      draft.comparison_operator = getOperators(varItem.type)[0]
-    })
-    doUpdateCondition(newCondition)
-    setOpen(false)
-  }, [condition, doUpdateCondition])
-
-  return (
-    <div className={cn('mb-1 flex last-of-type:mb-0', className)}>
-      <div className={cn(
-        'grow rounded-lg bg-components-input-bg-normal',
-        isHovered && 'bg-state-destructive-hover',
-      )}>
-        <div className='flex items-center p-1'>
-          <div className='w-0 grow'>
-            {isSubVarSelect
-              ? (
-                <Select
-                  wrapperClassName='h-6'
-                  className='pl-0 text-xs'
-                  optionWrapClassName='w-[165px] max-h-none'
-                  defaultValue={condition.key}
-                  items={subVarOptions}
-                  onSelect={item => handleSubVarKeyChange(item.value as string)}
-                  renderTrigger={item => (
-                    item
-                      ? <div className='flex cursor-pointer justify-start'>
-                        <div className='inline-flex h-6 max-w-full items-center rounded-md border-[0.5px] border-components-panel-border-subtle bg-components-badge-white-to-dark px-1.5 text-text-accent shadow-xs'>
-                          <Variable02 className='h-3.5 w-3.5 shrink-0 text-text-accent' />
-                          <div className='system-xs-medium ml-0.5 truncate'>{item?.name}</div>
-                        </div>
-                      </div>
-                      : <div className='system-sm-regular text-left text-components-input-text-placeholder'>{t('common.placeholder.select')}</div>
-                  )}
-                  hideChecked
-                />
-              )
-              : (
-                <ConditionVarSelector
-                  open={open}
-                  onOpenChange={setOpen}
-                  valueSelector={condition.variable_selector || []}
-                  varType={condition.varType}
-                  availableNodes={availableNodes}
-                  nodesOutputVars={availableVars}
-                  onChange={handleVarChange}
-                />
-              )}
-
-          </div>
-          <div className='mx-1 h-3 w-[1px] bg-divider-regular'></div>
-          <ConditionOperator
-            disabled={!canChooseOperator}
-            varType={condition.varType}
-            value={condition.comparison_operator}
-            onSelect={handleUpdateConditionOperator}
-            file={fileAttr}
-          />
-        </div>
-        {
-          !comparisonOperatorNotRequireValue(condition.comparison_operator) && !isNotInput && condition.varType !== VarType.number && (
-            <div className='max-h-[100px] overflow-y-auto border-t border-t-divider-subtle px-2 py-1'>
-              <ConditionInput
-                disabled={disabled}
-                value={condition.value as string}
-                onChange={handleUpdateConditionValue}
-                availableNodes={availableNodes}
-              />
-            </div>
-          )
-        }
-        {
-          !comparisonOperatorNotRequireValue(condition.comparison_operator) && !isNotInput && condition.varType === VarType.number && (
-            <div className='border-t border-t-divider-subtle px-2 py-1 pt-[3px]'>
-              <ConditionNumberInput
-                numberVarType={condition.numberVarType}
-                onNumberVarTypeChange={handleUpdateConditionNumberVarType}
-                value={condition.value as string}
-                onValueChange={handleUpdateConditionValue}
-                variables={numberVariables}
-                isShort={isValueFieldShort}
-                unit={fileAttr?.key === 'size' ? 'Byte' : undefined}
-              />
-            </div>
-          )
-        }
-        {
-          !comparisonOperatorNotRequireValue(condition.comparison_operator) && isSelect && (
-            <div className='border-t border-t-divider-subtle'>
-              <Select
-                wrapperClassName='h-8'
-                className='rounded-t-none px-2 text-xs'
-                defaultValue={isArrayValue ? (condition.value as string[])?.[0] : (condition.value as string)}
-                items={selectOptions}
-                onSelect={item => handleUpdateConditionValue(item.value as string)}
-                hideChecked
-                notClearable
-              />
-            </div>
-          )
-        }
-        {
-          !comparisonOperatorNotRequireValue(condition.comparison_operator) && isSubVariable && (
-            <div className='p-1'>
-              <ConditionWrap
-                isSubVariable
-                conditions={condition.sub_variable_condition?.conditions || []}
-                logicalOperator={condition.sub_variable_condition?.logical_operator}
-                conditionId={conditionId}
-                readOnly={!!disabled}
-                handleAddSubVariableCondition={onAddSubVariableCondition}
-                handleRemoveSubVariableCondition={onRemoveSubVariableCondition}
-                handleUpdateSubVariableCondition={onUpdateSubVariableCondition}
-                handleToggleSubVariableConditionLogicalOperator={onToggleSubVariableConditionLogicalOperator}
-                nodeId={nodeId}
-                availableNodes={availableNodes}
-                availableVars={availableVars}
-              />
-            </div>
-          )
-        }
-      </div>
-      <div
-        className='ml-1 mt-1 flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-lg text-text-tertiary hover:bg-state-destructive-hover hover:text-text-destructive'
-        onMouseEnter={() => setIsHovered(true)}
-        onMouseLeave={() => setIsHovered(false)}
-        onClick={doRemoveCondition}
-      >
-        <RiDeleteBinLine className='h-4 w-4' />
-      </div>
-    </div>
-  )
-}
-
-export default ConditionItem
diff --git a/app/components/workflow/nodes/loop/components/condition-list/condition-operator.tsx b/app/components/workflow/nodes/loop/components/condition-list/condition-operator.tsx
deleted file mode 100644
index 9036e04..0000000
--- a/app/components/workflow/nodes/loop/components/condition-list/condition-operator.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import {
-  useMemo,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiArrowDownSLine } from '@remixicon/react'
-import { getOperators, isComparisonOperatorNeedTranslate } from '../../utils'
-import type { ComparisonOperator } from '../../types'
-import Button from '@/app/components/base/button'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import type { VarType } from '@/app/components/workflow/types'
-import cn from '@/utils/classnames'
-const i18nPrefix = 'workflow.nodes.ifElse'
-
-type ConditionOperatorProps = {
-  className?: string
-  disabled?: boolean
-  varType: VarType
-  file?: { key: string }
-  value?: string
-  onSelect: (value: ComparisonOperator) => void
-}
-const ConditionOperator = ({
-  className,
-  disabled,
-  varType,
-  file,
-  value,
-  onSelect,
-}: ConditionOperatorProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-
-  const options = useMemo(() => {
-    return getOperators(varType, file).map((o) => {
-      return {
-        label: isComparisonOperatorNeedTranslate(o) ? t(`${i18nPrefix}.comparisonOperator.${o}`) : o,
-        value: o,
-      }
-    })
-  }, [t, varType, file])
-  const selectedOption = options.find(o => Array.isArray(value) ? o.value === value[0] : o.value === value)
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom-end'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
-        <Button
-          className={cn('shrink-0', !selectedOption && 'opacity-50', className)}
-          size='small'
-          variant='ghost'
-          disabled={disabled}
-        >
-          {
-            selectedOption
-              ? selectedOption.label
-              : t(`${i18nPrefix}.select`)
-          }
-          <RiArrowDownSLine className='ml-1 h-3.5 w-3.5' />
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <div className='rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          {
-            options.map(option => (
-              <div
-                key={option.value}
-                className='flex h-7 cursor-pointer items-center rounded-lg px-3 py-1.5 text-[13px] font-medium text-text-secondary hover:bg-state-base-hover'
-                onClick={() => {
-                  onSelect(option.value)
-                  setOpen(false)
-                }}
-              >
-                {option.label}
-              </div>
-            ))
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default ConditionOperator
diff --git a/app/components/workflow/nodes/loop/components/condition-list/condition-var-selector.tsx b/app/components/workflow/nodes/loop/components/condition-list/condition-var-selector.tsx
deleted file mode 100644
index 4cb82b4..0000000
--- a/app/components/workflow/nodes/loop/components/condition-list/condition-var-selector.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
-import VariableTag from '@/app/components/workflow/nodes/_base/components/variable-tag'
-import VarReferenceVars from '@/app/components/workflow/nodes/_base/components/variable/var-reference-vars'
-import type { Node, NodeOutPutVar, ValueSelector, Var, VarType } from '@/app/components/workflow/types'
-
-type ConditionVarSelectorProps = {
-  open: boolean
-  onOpenChange: (open: boolean) => void
-  valueSelector: ValueSelector
-  varType: VarType
-  availableNodes: Node[]
-  nodesOutputVars: NodeOutPutVar[]
-  onChange: (valueSelector: ValueSelector, varItem: Var) => void
-}
-
-const ConditionVarSelector = ({
-  open,
-  onOpenChange,
-  valueSelector,
-  varType,
-  availableNodes,
-  nodesOutputVars,
-  onChange,
-}: ConditionVarSelectorProps) => {
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={onOpenChange}
-      placement='bottom-start'
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-    >
-      <PortalToFollowElemTrigger onClick={() => onOpenChange(!open)}>
-        <div className="cursor-pointer">
-          <VariableTag
-            valueSelector={valueSelector}
-            varType={varType}
-            availableNodes={availableNodes}
-            isShort
-          />
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[1000]'>
-        <div className='w-[296px] rounded-lg border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg'>
-          <VarReferenceVars
-            vars={nodesOutputVars}
-            isSupportFileVar
-            onChange={onChange}
-          />
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default ConditionVarSelector
diff --git a/app/components/workflow/nodes/loop/components/condition-list/index.tsx b/app/components/workflow/nodes/loop/components/condition-list/index.tsx
deleted file mode 100644
index 987452d..0000000
--- a/app/components/workflow/nodes/loop/components/condition-list/index.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-import { RiLoopLeftLine } from '@remixicon/react'
-import { useCallback, useMemo } from 'react'
-import {
-  type Condition,
-  type HandleAddSubVariableCondition,
-  type HandleRemoveCondition,
-  type HandleToggleConditionLogicalOperator,
-  type HandleToggleSubVariableConditionLogicalOperator,
-  type HandleUpdateCondition,
-  type HandleUpdateSubVariableCondition,
-  LogicalOperator,
-  type handleRemoveSubVariableCondition,
-} from '../../types'
-import ConditionItem from './condition-item'
-import type {
-  Node,
-  NodeOutPutVar,
-} from '@/app/components/workflow/types'
-import cn from '@/utils/classnames'
-
-type ConditionListProps = {
-  isSubVariable?: boolean
-  disabled?: boolean
-  conditionId?: string
-  conditions: Condition[]
-  logicalOperator?: LogicalOperator
-  onRemoveCondition?: HandleRemoveCondition
-  onUpdateCondition?: HandleUpdateCondition
-  onToggleConditionLogicalOperator?: HandleToggleConditionLogicalOperator
-  nodeId: string
-  availableNodes: Node[]
-  numberVariables: NodeOutPutVar[]
-  onAddSubVariableCondition?: HandleAddSubVariableCondition
-  onRemoveSubVariableCondition?: handleRemoveSubVariableCondition
-  onUpdateSubVariableCondition?: HandleUpdateSubVariableCondition
-  onToggleSubVariableConditionLogicalOperator?: HandleToggleSubVariableConditionLogicalOperator
-  availableVars: NodeOutPutVar[]
-}
-const ConditionList = ({
-  isSubVariable,
-  disabled,
-  conditionId,
-  conditions,
-  logicalOperator,
-  onUpdateCondition,
-  onRemoveCondition,
-  onToggleConditionLogicalOperator,
-  onAddSubVariableCondition,
-  onRemoveSubVariableCondition,
-  onUpdateSubVariableCondition,
-  onToggleSubVariableConditionLogicalOperator,
-  nodeId,
-  availableNodes,
-  numberVariables,
-  availableVars,
-}: ConditionListProps) => {
-  const doToggleConditionLogicalOperator = useCallback((conditionId?: string) => {
-    if (isSubVariable && conditionId)
-      onToggleSubVariableConditionLogicalOperator?.(conditionId)
-    else
-      onToggleConditionLogicalOperator?.()
-  }, [isSubVariable, onToggleConditionLogicalOperator, onToggleSubVariableConditionLogicalOperator])
-
-  const isValueFieldShort = useMemo(() => {
-    if (isSubVariable && conditions.length > 1)
-      return true
-
-    return false
-  }, [conditions.length, isSubVariable])
-  const conditionItemClassName = useMemo(() => {
-    if (!isSubVariable)
-      return ''
-    if (conditions.length < 2)
-      return ''
-    return logicalOperator === LogicalOperator.and ? 'pl-[51px]' : 'pl-[42px]'
-  }, [conditions.length, isSubVariable, logicalOperator])
-
-  return (
-    <div className={cn('relative', conditions.length > 1 && !isSubVariable && 'pl-[60px]')}>
-      {
-        conditions.length > 1 && (
-          <div className={cn(
-            'absolute bottom-0 left-0 top-0 w-[60px]',
-            isSubVariable && logicalOperator === LogicalOperator.and && 'left-[-10px]',
-            isSubVariable && logicalOperator === LogicalOperator.or && 'left-[-18px]',
-          )}>
-            <div className='absolute bottom-4 left-[46px] top-4 w-2.5 rounded-l-[8px] border border-r-0 border-divider-deep'></div>
-            <div className='absolute right-0 top-1/2 h-[29px] w-4 -translate-y-1/2 bg-components-panel-bg'></div>
-            <div
-              className='absolute right-1 top-1/2 flex h-[21px] -translate-y-1/2 cursor-pointer select-none items-center rounded-md border-[0.5px] border-components-button-secondary-border bg-components-button-secondary-bg px-1 text-[10px] font-semibold text-text-accent-secondary shadow-xs'
-              onClick={() => doToggleConditionLogicalOperator(conditionId)}
-            >
-              {logicalOperator && logicalOperator.toUpperCase()}
-              <RiLoopLeftLine className='ml-0.5 h-3 w-3' />
-            </div>
-          </div>
-        )
-      }
-      {
-        conditions.map(condition => (
-          <ConditionItem
-            key={condition.id}
-            className={conditionItemClassName}
-            disabled={disabled}
-            conditionId={isSubVariable ? conditionId! : condition.id}
-            condition={condition}
-            isValueFieldShort={isValueFieldShort}
-            onUpdateCondition={onUpdateCondition}
-            onRemoveCondition={onRemoveCondition}
-            onAddSubVariableCondition={onAddSubVariableCondition}
-            onRemoveSubVariableCondition={onRemoveSubVariableCondition}
-            onUpdateSubVariableCondition={onUpdateSubVariableCondition}
-            onToggleSubVariableConditionLogicalOperator={onToggleSubVariableConditionLogicalOperator}
-            nodeId={nodeId}
-            availableNodes={availableNodes}
-            numberVariables={numberVariables}
-            isSubVariableKey={isSubVariable}
-            availableVars={availableVars}
-          />
-        ))
-      }
-    </div>
-  )
-}
-
-export default ConditionList
diff --git a/app/components/workflow/nodes/loop/components/condition-number-input.tsx b/app/components/workflow/nodes/loop/components/condition-number-input.tsx
deleted file mode 100644
index ee13894..0000000
--- a/app/components/workflow/nodes/loop/components/condition-number-input.tsx
+++ /dev/null
@@ -1,168 +0,0 @@
-import {
-  memo,
-  useCallback,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiArrowDownSLine } from '@remixicon/react'
-import { capitalize } from 'lodash-es'
-import { useBoolean } from 'ahooks'
-import { VarType as NumberVarType } from '../../tool/types'
-import VariableTag from '../../_base/components/variable-tag'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Button from '@/app/components/base/button'
-import cn from '@/utils/classnames'
-import VarReferenceVars from '@/app/components/workflow/nodes/_base/components/variable/var-reference-vars'
-import type {
-  NodeOutPutVar,
-  ValueSelector,
-} from '@/app/components/workflow/types'
-import { VarType } from '@/app/components/workflow/types'
-import { variableTransformer } from '@/app/components/workflow/utils'
-import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development'
-
-const options = [
-  NumberVarType.variable,
-  NumberVarType.constant,
-]
-
-type ConditionNumberInputProps = {
-  numberVarType?: NumberVarType
-  onNumberVarTypeChange: (v: NumberVarType) => void
-  value: string
-  onValueChange: (v: string) => void
-  variables: NodeOutPutVar[]
-  isShort?: boolean
-  unit?: string
-}
-const ConditionNumberInput = ({
-  numberVarType = NumberVarType.constant,
-  onNumberVarTypeChange,
-  value,
-  onValueChange,
-  variables,
-  isShort,
-  unit,
-}: ConditionNumberInputProps) => {
-  const { t } = useTranslation()
-  const [numberVarTypeVisible, setNumberVarTypeVisible] = useState(false)
-  const [variableSelectorVisible, setVariableSelectorVisible] = useState(false)
-  const [isFocus, {
-    setTrue: setFocus,
-    setFalse: setBlur,
-  }] = useBoolean()
-
-  const handleSelectVariable = useCallback((valueSelector: ValueSelector) => {
-    onValueChange(variableTransformer(valueSelector) as string)
-    setVariableSelectorVisible(false)
-  }, [onValueChange])
-
-  return (
-    <div className='flex cursor-pointer items-center'>
-      <PortalToFollowElem
-        open={numberVarTypeVisible}
-        onOpenChange={setNumberVarTypeVisible}
-        placement='bottom-start'
-        offset={{ mainAxis: 2, crossAxis: 0 }}
-      >
-        <PortalToFollowElemTrigger onClick={() => setNumberVarTypeVisible(v => !v)}>
-          <Button
-            className='shrink-0'
-            variant='ghost'
-            size='small'
-          >
-            {capitalize(numberVarType)}
-            <RiArrowDownSLine className='ml-[1px] h-3.5 w-3.5' />
-          </Button>
-        </PortalToFollowElemTrigger>
-        <PortalToFollowElemContent className='z-[1000]'>
-          <div className='w-[112px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-            {
-              options.map(option => (
-                <div
-                  key={option}
-                  className={cn(
-                    'flex h-7 cursor-pointer items-center rounded-md px-3 hover:bg-state-base-hover',
-                    'text-[13px] font-medium text-text-secondary',
-                    numberVarType === option && 'bg-state-base-hover',
-                  )}
-                  onClick={() => {
-                    onNumberVarTypeChange(option)
-                    setNumberVarTypeVisible(false)
-                  }}
-                >
-                  {capitalize(option)}
-                </div>
-              ))
-            }
-          </div>
-        </PortalToFollowElemContent>
-      </PortalToFollowElem>
-      <div className='mx-1 h-4 w-[1px] bg-divider-regular'></div>
-      <div className='ml-0.5 w-0 grow'>
-        {
-          numberVarType === NumberVarType.variable && (
-            <PortalToFollowElem
-              open={variableSelectorVisible}
-              onOpenChange={setVariableSelectorVisible}
-              placement='bottom-start'
-              offset={{ mainAxis: 2, crossAxis: 0 }}
-            >
-              <PortalToFollowElemTrigger
-                className='w-full'
-                onClick={() => setVariableSelectorVisible(v => !v)}>
-                {
-                  value && (
-                    <VariableTag
-                      valueSelector={variableTransformer(value) as string[]}
-                      varType={VarType.number}
-                      isShort={isShort}
-                    />
-                  )
-                }
-                {
-                  !value && (
-                    <div className='flex h-6 items-center p-1 text-[13px] text-components-input-text-placeholder'>
-                      <Variable02 className='mr-1 h-4 w-4 shrink-0' />
-                      <div className='w-0 grow truncate'>{t('workflow.nodes.ifElse.selectVariable')}</div>
-                    </div>
-                  )
-                }
-              </PortalToFollowElemTrigger>
-              <PortalToFollowElemContent className='z-[1000]'>
-                <div className={cn('w-[296px] rounded-lg border-[0.5px] border-components-panel-border bg-components-panel-bg-blur pt-1 shadow-lg', isShort && 'w-[200px]')}>
-                  <VarReferenceVars
-                    vars={variables}
-                    onChange={handleSelectVariable}
-                  />
-                </div>
-              </PortalToFollowElemContent>
-            </PortalToFollowElem>
-          )
-        }
-        {
-          numberVarType === NumberVarType.constant && (
-            <div className=' relative'>
-              <input
-                className={cn('block w-full appearance-none bg-transparent px-2 text-[13px] text-components-input-text-filled outline-none placeholder:text-components-input-text-placeholder', unit && 'pr-6')}
-                type='number'
-                value={value}
-                onChange={e => onValueChange(e.target.value)}
-                placeholder={t('workflow.nodes.ifElse.enterValue') || ''}
-                onFocus={setFocus}
-                onBlur={setBlur}
-              />
-              {!isFocus && unit && <div className='system-sm-regular absolute right-2 top-[50%] translate-y-[-50%] text-text-tertiary'>{unit}</div>}
-            </div>
-          )
-        }
-      </div>
-    </div>
-  )
-}
-
-export default memo(ConditionNumberInput)
diff --git a/app/components/workflow/nodes/loop/components/condition-value.tsx b/app/components/workflow/nodes/loop/components/condition-value.tsx
deleted file mode 100644
index cc37a05..0000000
--- a/app/components/workflow/nodes/loop/components/condition-value.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import {
-  memo,
-  useMemo,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { ComparisonOperator } from '../types'
-import {
-  comparisonOperatorNotRequireValue,
-  isComparisonOperatorNeedTranslate,
-} from '../utils'
-import { FILE_TYPE_OPTIONS, TRANSFER_METHOD } from './../default'
-import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development'
-import { BubbleX, Env } from '@/app/components/base/icons/src/vender/line/others'
-import cn from '@/utils/classnames'
-import { isConversationVar, isENV, isSystemVar } from '@/app/components/workflow/nodes/_base/components/variable/utils'
-
-type ConditionValueProps = {
-  variableSelector: string[]
-  labelName?: string
-  operator: ComparisonOperator
-  value: string | string[]
-}
-const ConditionValue = ({
-  variableSelector,
-  labelName,
-  operator,
-  value,
-}: ConditionValueProps) => {
-  const { t } = useTranslation()
-  const variableName = labelName || (isSystemVar(variableSelector) ? variableSelector.slice(0).join('.') : variableSelector.slice(1).join('.'))
-  const operatorName = isComparisonOperatorNeedTranslate(operator) ? t(`workflow.nodes.ifElse.comparisonOperator.${operator}`) : operator
-  const notHasValue = comparisonOperatorNotRequireValue(operator)
-  const isEnvVar = isENV(variableSelector)
-  const isChatVar = isConversationVar(variableSelector)
-  const formatValue = useMemo(() => {
-    if (notHasValue)
-      return ''
-
-    if (Array.isArray(value)) // transfer method
-      return value[0]
-
-    return value.replace(/{{#([^#]*)#}}/g, (a, b) => {
-      const arr: string[] = b.split('.')
-      if (isSystemVar(arr))
-        return `{{${b}}}`
-
-      return `{{${arr.slice(1).join('.')}}}`
-    })
-  }, [notHasValue, value])
-
-  const isSelect = operator === ComparisonOperator.in || operator === ComparisonOperator.notIn
-  const selectName = useMemo(() => {
-    if (isSelect) {
-      const name = [...FILE_TYPE_OPTIONS, ...TRANSFER_METHOD].filter(item => item.value === (Array.isArray(value) ? value[0] : value))[0]
-      return name
-        ? t(`workflow.nodes.ifElse.optionName.${name.i18nKey}`).replace(/{{#([^#]*)#}}/g, (a, b) => {
-          const arr: string[] = b.split('.')
-          if (isSystemVar(arr))
-            return `{{${b}}}`
-
-          return `{{${arr.slice(1).join('.')}}}`
-        })
-        : ''
-    }
-    return ''
-  }, [isSelect, t, value])
-
-  return (
-    <div className='flex h-6 items-center rounded-md bg-workflow-block-parma-bg px-1'>
-      {!isEnvVar && !isChatVar && <Variable02 className='mr-1 h-3.5 w-3.5 shrink-0 text-text-accent' />}
-      {isEnvVar && <Env className='mr-1 h-3.5 w-3.5 shrink-0 text-util-colors-violet-violet-600' />}
-      {isChatVar && <BubbleX className='h-3.5 w-3.5 text-util-colors-teal-teal-700' />}
-
-      <div
-        className={cn(
-          'shrink-0  truncate text-xs font-medium text-text-accent',
-          !notHasValue && 'max-w-[70px]',
-        )}
-        title={variableName}
-      >
-        {variableName}
-      </div>
-      <div
-        className='mx-1 shrink-0 text-xs font-medium text-text-primary'
-        title={operatorName}
-      >
-        {operatorName}
-      </div>
-      {
-        !notHasValue && (
-          <div className='truncate text-xs text-text-secondary' title={formatValue}>{isSelect ? selectName : formatValue}</div>
-        )
-      }
-    </div>
-  )
-}
-
-export default memo(ConditionValue)
diff --git a/app/components/workflow/nodes/loop/components/condition-wrap.tsx b/app/components/workflow/nodes/loop/components/condition-wrap.tsx
deleted file mode 100644
index 7aef364..0000000
--- a/app/components/workflow/nodes/loop/components/condition-wrap.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiAddLine,
-} from '@remixicon/react'
-import type { Condition, HandleAddCondition, HandleAddSubVariableCondition, HandleRemoveCondition, HandleToggleConditionLogicalOperator, HandleToggleSubVariableConditionLogicalOperator, HandleUpdateCondition, HandleUpdateSubVariableCondition, LogicalOperator, handleRemoveSubVariableCondition } from '../types'
-import type { Node, NodeOutPutVar, Var } from '../../../types'
-import { VarType } from '../../../types'
-import { useGetAvailableVars } from '../../variable-assigner/hooks'
-import ConditionList from './condition-list'
-import ConditionAdd from './condition-add'
-import { SUB_VARIABLES } from './../default'
-import cn from '@/utils/classnames'
-import Button from '@/app/components/base/button'
-import { PortalSelect as Select } from '@/app/components/base/select'
-
-type Props = {
-  isSubVariable?: boolean
-  conditionId?: string
-  conditions: Condition[]
-  logicalOperator: LogicalOperator | undefined
-  readOnly: boolean
-  handleAddCondition?: HandleAddCondition
-  handleRemoveCondition?: HandleRemoveCondition
-  handleUpdateCondition?: HandleUpdateCondition
-  handleToggleConditionLogicalOperator?: HandleToggleConditionLogicalOperator
-  handleAddSubVariableCondition?: HandleAddSubVariableCondition
-  handleRemoveSubVariableCondition?: handleRemoveSubVariableCondition
-  handleUpdateSubVariableCondition?: HandleUpdateSubVariableCondition
-  handleToggleSubVariableConditionLogicalOperator?: HandleToggleSubVariableConditionLogicalOperator
-  nodeId: string
-  availableNodes: Node[]
-  availableVars: NodeOutPutVar[]
-}
-
-const ConditionWrap: FC<Props> = ({
-  isSubVariable,
-  conditionId,
-  conditions,
-  logicalOperator,
-  nodeId: id = '',
-  readOnly,
-  handleUpdateCondition,
-  handleAddCondition,
-  handleRemoveCondition,
-  handleToggleConditionLogicalOperator,
-  handleAddSubVariableCondition,
-  handleRemoveSubVariableCondition,
-  handleUpdateSubVariableCondition,
-  handleToggleSubVariableConditionLogicalOperator,
-  availableNodes = [],
-  availableVars = [],
-}) => {
-  const { t } = useTranslation()
-
-  const getAvailableVars = useGetAvailableVars()
-
-  const filterNumberVar = useCallback((varPayload: Var) => {
-    return varPayload.type === VarType.number
-  }, [])
-
-  const subVarOptions = SUB_VARIABLES.map(item => ({
-    name: item,
-    value: item,
-  }))
-
-  if (!conditions)
-    return <div />
-
-  return (
-    <>
-      <div>
-        <div
-          className={cn(
-            'group relative rounded-[10px] bg-components-panel-bg',
-            !isSubVariable && 'min-h-[40px] px-3 py-1 ',
-            isSubVariable && 'px-1 py-2',
-          )}
-        >
-          {
-            conditions && !!conditions.length && (
-              <div className='mb-2'>
-                <ConditionList
-                  disabled={readOnly}
-                  conditionId={conditionId}
-                  conditions={conditions}
-                  logicalOperator={logicalOperator}
-                  onUpdateCondition={handleUpdateCondition}
-                  onRemoveCondition={handleRemoveCondition}
-                  onToggleConditionLogicalOperator={handleToggleConditionLogicalOperator}
-                  nodeId={id}
-                  availableNodes={availableNodes}
-                  numberVariables={getAvailableVars(id, '', filterNumberVar)}
-                  onAddSubVariableCondition={handleAddSubVariableCondition}
-                  onRemoveSubVariableCondition={handleRemoveSubVariableCondition}
-                  onUpdateSubVariableCondition={handleUpdateSubVariableCondition}
-                  onToggleSubVariableConditionLogicalOperator={handleToggleSubVariableConditionLogicalOperator}
-                  isSubVariable={isSubVariable}
-                  availableVars={availableVars}
-                />
-              </div>
-            )
-          }
-
-          <div className={cn(
-            'flex items-center justify-between pr-[30px]',
-            !conditions.length && !isSubVariable && 'mt-1',
-            !conditions.length && isSubVariable && 'mt-2',
-            conditions.length > 1 && !isSubVariable && 'ml-[60px]',
-          )}>
-            {isSubVariable
-              ? (
-                <Select
-                  popupInnerClassName='w-[165px] max-h-none'
-                  onSelect={value => handleAddSubVariableCondition?.(conditionId!, value.value as string)}
-                  items={subVarOptions}
-                  value=''
-                  renderTrigger={() => (
-                    <Button
-                      size='small'
-                      disabled={readOnly}
-                    >
-                      <RiAddLine className='mr-1 h-3.5 w-3.5' />
-                      {t('workflow.nodes.ifElse.addSubVariable')}
-                    </Button>
-                  )}
-                  hideChecked
-                />
-              )
-              : (
-                <ConditionAdd
-                  disabled={readOnly}
-                  variables={availableVars}
-                  onSelectVariable={handleAddCondition!}
-                />
-              )}
-          </div>
-        </div>
-      </div>
-    </>
-  )
-}
-
-export default React.memo(ConditionWrap)
diff --git a/app/components/workflow/nodes/loop/components/loop-variables/empty.tsx b/app/components/workflow/nodes/loop/components/loop-variables/empty.tsx
deleted file mode 100644
index 6fe4aa0..0000000
--- a/app/components/workflow/nodes/loop/components/loop-variables/empty.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { useTranslation } from 'react-i18next'
-
-const Empty = () => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='system-xs-regular flex h-10 items-center justify-center rounded-[10px] bg-background-section text-text-tertiary'>
-      {t('workflow.nodes.loop.setLoopVariables')}
-    </div>
-  )
-}
-
-export default Empty
diff --git a/app/components/workflow/nodes/loop/components/loop-variables/form-item.tsx b/app/components/workflow/nodes/loop/components/loop-variables/form-item.tsx
deleted file mode 100644
index 4a05e45..0000000
--- a/app/components/workflow/nodes/loop/components/loop-variables/form-item.tsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import {
-  useCallback,
-  useMemo,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import VarReferencePicker from '@/app/components/workflow/nodes/_base/components/variable/var-reference-picker'
-import Input from '@/app/components/base/input'
-import Textarea from '@/app/components/base/textarea'
-import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor'
-import { CodeLanguage } from '@/app/components/workflow/nodes/code/types'
-import type {
-  LoopVariable,
-} from '@/app/components/workflow/nodes/loop/types'
-import type {
-  Var,
-} from '@/app/components/workflow/types'
-import {
-  ValueType,
-  VarType,
-} from '@/app/components/workflow/types'
-
-const objectPlaceholder = `#  example
-#  {
-#     "name": "ray",
-#     "age": 20
-#  }`
-const arrayStringPlaceholder = `#  example
-#  [
-#     "value1",
-#     "value2"
-#  ]`
-const arrayNumberPlaceholder = `#  example
-#  [
-#     100,
-#     200
-#  ]`
-const arrayObjectPlaceholder = `#  example
-#  [
-#     {
-#       "name": "ray",
-#       "age": 20
-#     },
-#     {
-#       "name": "lily",
-#       "age": 18
-#     }
-#  ]`
-
-type FormItemProps = {
-  nodeId: string
-  item: LoopVariable
-  onChange: (value: any) => void
-}
-const FormItem = ({
-  nodeId,
-  item,
-  onChange,
-}: FormItemProps) => {
-  const { t } = useTranslation()
-  const { value_type, var_type, value } = item
-
-  const handleInputChange = useCallback((e: any) => {
-    onChange(e.target.value)
-  }, [onChange])
-
-  const handleChange = useCallback((value: any) => {
-    onChange(value)
-  }, [onChange])
-
-  const filterVar = useCallback((variable: Var) => {
-    return variable.type === var_type
-  }, [var_type])
-
-  const editorMinHeight = useMemo(() => {
-    if (var_type === VarType.arrayObject)
-      return '240px'
-    return '120px'
-  }, [var_type])
-  const placeholder = useMemo(() => {
-    if (var_type === VarType.arrayString)
-      return arrayStringPlaceholder
-    if (var_type === VarType.arrayNumber)
-      return arrayNumberPlaceholder
-    if (var_type === VarType.arrayObject)
-      return arrayObjectPlaceholder
-    return objectPlaceholder
-  }, [var_type])
-
-  return (
-    <div>
-      {
-        value_type === ValueType.variable && (
-          <VarReferencePicker
-            readonly={false}
-            nodeId={nodeId}
-            isShowNodeName
-            value={value}
-            onChange={handleChange}
-            filterVar={filterVar}
-            placeholder={t('workflow.nodes.assigner.setParameter') as string}
-          />
-        )
-      }
-      {
-        value_type === ValueType.constant && var_type === VarType.string && (
-          <Textarea
-            value={value}
-            onChange={handleInputChange}
-            className='min-h-12 w-full'
-          />
-        )
-      }
-      {
-        value_type === ValueType.constant && var_type === VarType.number && (
-          <Input
-            type="number"
-            value={value}
-            onChange={handleInputChange}
-            className='w-full'
-          />
-        )
-      }
-      {
-        value_type === ValueType.constant
-        && (var_type === VarType.object || var_type === VarType.arrayString || var_type === VarType.arrayNumber || var_type === VarType.arrayObject)
-        && (
-          <div className='w-full rounded-[10px] bg-components-input-bg-normal py-2 pl-3 pr-1' style={{ height: editorMinHeight }}>
-            <CodeEditor
-              value={value}
-              isExpand
-              noWrapper
-              language={CodeLanguage.json}
-              onChange={handleChange}
-              className='w-full'
-              placeholder={<div className='whitespace-pre'>{placeholder}</div>}
-            />
-          </div>
-        )
-      }
-    </div>
-  )
-}
-
-export default FormItem
diff --git a/app/components/workflow/nodes/loop/components/loop-variables/index.tsx b/app/components/workflow/nodes/loop/components/loop-variables/index.tsx
deleted file mode 100644
index 26251e3..0000000
--- a/app/components/workflow/nodes/loop/components/loop-variables/index.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import Empty from './empty'
-import Item from './item'
-import type {
-  LoopVariable,
-  LoopVariablesComponentShape,
-} from '@/app/components/workflow/nodes/loop/types'
-
-type LoopVariableProps = {
-  variables?: LoopVariable[]
-} & LoopVariablesComponentShape
-
-const LoopVariableComponent = ({
-  variables = [],
-  ...restProps
-}: LoopVariableProps) => {
-  if (!variables.length)
-    return <Empty />
-
-  return variables.map(variable => (
-    <Item
-      key={variable.id}
-      item={variable}
-      {...restProps}
-    />
-  ))
-}
-
-export default LoopVariableComponent
diff --git a/app/components/workflow/nodes/loop/components/loop-variables/input-mode-selec.tsx b/app/components/workflow/nodes/loop/components/loop-variables/input-mode-selec.tsx
deleted file mode 100644
index 96f3515..0000000
--- a/app/components/workflow/nodes/loop/components/loop-variables/input-mode-selec.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import PureSelect from '@/app/components/base/select/pure'
-
-type InputModeSelectProps = {
-  value?: string
-  onChange: (value: string) => void
-}
-const InputModeSelect = ({
-  value,
-  onChange,
-}: InputModeSelectProps) => {
-  const { t } = useTranslation()
-  const options = [
-    {
-      label: 'Variable',
-      value: 'variable',
-    },
-    {
-      label: 'Constant',
-      value: 'constant',
-    },
-  ]
-
-  return (
-    <PureSelect
-      options={options}
-      value={value}
-      onChange={onChange}
-      popupProps={{
-        title: t('workflow.nodes.loop.inputMode'),
-        className: 'w-[132px]',
-      }}
-    />
-  )
-}
-
-export default InputModeSelect
diff --git a/app/components/workflow/nodes/loop/components/loop-variables/item.tsx b/app/components/workflow/nodes/loop/components/loop-variables/item.tsx
deleted file mode 100644
index d33e936..0000000
--- a/app/components/workflow/nodes/loop/components/loop-variables/item.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-import { useCallback } from 'react'
-import { RiDeleteBinLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import InputModeSelect from './input-mode-selec'
-import VariableTypeSelect from './variable-type-select'
-import FormItem from './form-item'
-import ActionButton from '@/app/components/base/action-button'
-import Input from '@/app/components/base/input'
-import type {
-  LoopVariable,
-  LoopVariablesComponentShape,
-} from '@/app/components/workflow/nodes/loop/types'
-
-type ItemProps = {
-  item: LoopVariable
-} & LoopVariablesComponentShape
-const Item = ({
-  nodeId,
-  item,
-  handleRemoveLoopVariable,
-  handleUpdateLoopVariable,
-}: ItemProps) => {
-  const { t } = useTranslation()
-  const handleUpdateItemLabel = useCallback((e: any) => {
-    handleUpdateLoopVariable(item.id, { label: e.target.value })
-  }, [item.id, handleUpdateLoopVariable])
-
-  const handleUpdateItemVarType = useCallback((value: any) => {
-    handleUpdateLoopVariable(item.id, { var_type: value, value: undefined })
-  }, [item.id, handleUpdateLoopVariable])
-
-  const handleUpdateItemValueType = useCallback((value: any) => {
-    handleUpdateLoopVariable(item.id, { value_type: value, value: undefined })
-  }, [item.id, handleUpdateLoopVariable])
-
-  const handleUpdateItemValue = useCallback((value: any) => {
-    handleUpdateLoopVariable(item.id, { value })
-  }, [item.id, handleUpdateLoopVariable])
-
-  return (
-    <div className='mb-4 flex last-of-type:mb-0'>
-      <div className='w-0 grow'>
-        <div className='mb-1 grid grid-cols-3 gap-1'>
-          <Input
-            value={item.label}
-            onChange={handleUpdateItemLabel}
-            autoFocus={!item.label}
-            placeholder={t('workflow.nodes.loop.variableName')}
-          />
-          <VariableTypeSelect
-            value={item.var_type}
-            onChange={handleUpdateItemVarType}
-          />
-          <InputModeSelect
-            value={item.value_type}
-            onChange={handleUpdateItemValueType}
-          />
-        </div>
-        <div>
-          <FormItem
-            nodeId={nodeId}
-            item={item}
-            onChange={handleUpdateItemValue}
-          />
-        </div>
-      </div>
-      <ActionButton
-        className='shrink-0'
-        size='l'
-        onClick={() => handleRemoveLoopVariable(item.id)}
-      >
-        <RiDeleteBinLine className='h-4 w-4 text-text-tertiary' />
-      </ActionButton>
-    </div>
-  )
-}
-
-export default Item
diff --git a/app/components/workflow/nodes/loop/components/loop-variables/variable-type-select.tsx b/app/components/workflow/nodes/loop/components/loop-variables/variable-type-select.tsx
deleted file mode 100644
index 5271660..0000000
--- a/app/components/workflow/nodes/loop/components/loop-variables/variable-type-select.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import PureSelect from '@/app/components/base/select/pure'
-import { VarType } from '@/app/components/workflow/types'
-
-type VariableTypeSelectProps = {
-  value?: string
-  onChange: (value: string) => void
-}
-const VariableTypeSelect = ({
-  value,
-  onChange,
-}: VariableTypeSelectProps) => {
-  const options = [
-    {
-      label: 'String',
-      value: VarType.string,
-    },
-    {
-      label: 'Number',
-      value: VarType.number,
-    },
-    {
-      label: 'Object',
-      value: VarType.object,
-    },
-    {
-      label: 'Array[string]',
-      value: VarType.arrayString,
-    },
-    {
-      label: 'Array[number]',
-      value: VarType.arrayNumber,
-    },
-    {
-      label: 'Array[object]',
-      value: VarType.arrayObject,
-    },
-  ]
-
-  return (
-    <PureSelect
-      options={options}
-      value={value}
-      onChange={onChange}
-      popupProps={{
-        className: 'w-[132px]',
-      }}
-    />
-  )
-}
-
-export default VariableTypeSelect
diff --git a/app/components/workflow/nodes/loop/default.ts b/app/components/workflow/nodes/loop/default.ts
deleted file mode 100644
index b446432..0000000
--- a/app/components/workflow/nodes/loop/default.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { BlockEnum } from '../../types'
-import type { NodeDefault } from '../../types'
-import { ComparisonOperator, LogicalOperator, type LoopNodeType } from './types'
-import { isEmptyRelatedOperator } from './utils'
-import { TransferMethod } from '@/types/app'
-import { ALL_CHAT_AVAILABLE_BLOCKS, ALL_COMPLETION_AVAILABLE_BLOCKS } from '@/app/components/workflow/blocks'
-import { LOOP_NODE_MAX_COUNT } from '@/config'
-const i18nPrefix = 'workflow.errorMsg'
-
-const nodeDefault: NodeDefault<LoopNodeType> = {
-  defaultValue: {
-    start_node_id: '',
-    break_conditions: [],
-    loop_count: 10,
-    _children: [],
-    logical_operator: LogicalOperator.and,
-  },
-  getAvailablePrevNodes(isChatMode: boolean) {
-    const nodes = isChatMode
-      ? ALL_CHAT_AVAILABLE_BLOCKS
-      : ALL_COMPLETION_AVAILABLE_BLOCKS.filter(type => type !== BlockEnum.End)
-    return nodes
-  },
-  getAvailableNextNodes(isChatMode: boolean) {
-    const nodes = isChatMode ? ALL_CHAT_AVAILABLE_BLOCKS : ALL_COMPLETION_AVAILABLE_BLOCKS
-    return nodes
-  },
-  checkValid(payload: LoopNodeType, t: any) {
-    let errorMessages = ''
-
-    payload.loop_variables?.forEach((variable) => {
-      if (!variable.label)
-        errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variable`) })
-    })
-
-    payload.break_conditions!.forEach((condition) => {
-      if (!errorMessages && (!condition.variable_selector || condition.variable_selector.length === 0))
-        errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variable`) })
-      if (!errorMessages && !condition.comparison_operator)
-        errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.ifElse.operator') })
-      if (!errorMessages) {
-        if (condition.sub_variable_condition
-          && ![ComparisonOperator.empty, ComparisonOperator.notEmpty].includes(condition.comparison_operator!)) {
-          const isSet = condition.sub_variable_condition.conditions.every((c) => {
-            if (!c.comparison_operator)
-              return false
-
-            if (isEmptyRelatedOperator(c.comparison_operator!))
-              return true
-
-            return !!c.value
-          })
-
-          if (!isSet)
-            errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variableValue`) })
-        }
-        else {
-          if (!isEmptyRelatedOperator(condition.comparison_operator!) && !condition.value)
-            errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t(`${i18nPrefix}.fields.variableValue`) })
-        }
-      }
-    })
-
-    if (!errorMessages && (
-      Number.isNaN(Number(payload.loop_count))
-      || !Number.isInteger(Number(payload.loop_count))
-      || payload.loop_count < 1
-      || payload.loop_count > LOOP_NODE_MAX_COUNT
-    ))
-      errorMessages = t('workflow.nodes.loop.loopMaxCountError', { maxCount: LOOP_NODE_MAX_COUNT })
-
-    return {
-      isValid: !errorMessages,
-      errorMessage: errorMessages,
-    }
-  },
-}
-
-export const FILE_TYPE_OPTIONS = [
-  { value: 'image', i18nKey: 'image' },
-  { value: 'document', i18nKey: 'doc' },
-  { value: 'audio', i18nKey: 'audio' },
-  { value: 'video', i18nKey: 'video' },
-]
-
-export const TRANSFER_METHOD = [
-  { value: TransferMethod.local_file, i18nKey: 'localUpload' },
-  { value: TransferMethod.remote_url, i18nKey: 'url' },
-]
-
-export const SUB_VARIABLES = ['type', 'size', 'name', 'url', 'extension', 'mime_type', 'transfer_method', 'related_id']
-export const OUTPUT_FILE_SUB_VARIABLES = SUB_VARIABLES.filter(key => key !== 'transfer_method')
-
-export default nodeDefault
diff --git a/app/components/workflow/nodes/loop/insert-block.tsx b/app/components/workflow/nodes/loop/insert-block.tsx
deleted file mode 100644
index c4f4348..0000000
--- a/app/components/workflow/nodes/loop/insert-block.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import {
-  memo,
-  useCallback,
-  useState,
-} from 'react'
-import cn from 'classnames'
-import { useNodesInteractions } from '../../hooks'
-import type {
-  BlockEnum,
-  OnSelectBlock,
-} from '../../types'
-import BlockSelector from '../../block-selector'
-
-type InsertBlockProps = {
-  startNodeId: string
-  availableBlocksTypes: BlockEnum[]
-}
-const InsertBlock = ({
-  startNodeId,
-  availableBlocksTypes,
-}: InsertBlockProps) => {
-  const [open, setOpen] = useState(false)
-  const { handleNodeAdd } = useNodesInteractions()
-
-  const handleOpenChange = useCallback((v: boolean) => {
-    setOpen(v)
-  }, [])
-  const handleInsert = useCallback<OnSelectBlock>((nodeType, toolDefaultValue) => {
-    handleNodeAdd(
-      {
-        nodeType,
-        toolDefaultValue,
-      },
-      {
-        nextNodeId: startNodeId,
-        nextNodeTargetHandle: 'target',
-      },
-    )
-  }, [startNodeId, handleNodeAdd])
-
-  return (
-    <div
-      className={cn(
-        'nopan nodrag',
-        'absolute left-1/2 top-1/2 hidden -translate-x-1/2 -translate-y-1/2 group-hover/insert:block',
-        open && '!block',
-      )}
-    >
-      <BlockSelector
-        open={open}
-        onOpenChange={handleOpenChange}
-        asChild
-        onSelect={handleInsert}
-        availableBlocksTypes={availableBlocksTypes}
-        triggerClassName={() => 'hover:scale-125 transition-all'}
-      />
-    </div>
-  )
-}
-
-export default memo(InsertBlock)
diff --git a/app/components/workflow/nodes/loop/node.tsx b/app/components/workflow/nodes/loop/node.tsx
deleted file mode 100644
index 57be10b..0000000
--- a/app/components/workflow/nodes/loop/node.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import type { FC } from 'react'
-import {
-  memo,
-  useEffect,
-} from 'react'
-import {
-  Background,
-  useNodesInitialized,
-  useViewport,
-} from 'reactflow'
-import { LoopStartNodeDumb } from '../loop-start'
-import { useNodeLoopInteractions } from './use-interactions'
-import type { LoopNodeType } from './types'
-import AddBlock from './add-block'
-import cn from '@/utils/classnames'
-
-import type { NodeProps } from '@/app/components/workflow/types'
-
-const Node: FC<NodeProps<LoopNodeType>> = ({
-  id,
-  data,
-}) => {
-  const { zoom } = useViewport()
-  const nodesInitialized = useNodesInitialized()
-  const { handleNodeLoopRerender } = useNodeLoopInteractions()
-
-  useEffect(() => {
-    if (nodesInitialized)
-      handleNodeLoopRerender(id)
-  }, [nodesInitialized, id, handleNodeLoopRerender])
-
-  return (
-    <div className={cn(
-      'relative h-full min-h-[90px] w-full min-w-[240px] rounded-2xl bg-workflow-canvas-workflow-bg',
-    )}>
-      <Background
-        id={`loop-background-${id}`}
-        className='!z-0 rounded-2xl'
-        gap={[14 / zoom, 14 / zoom]}
-        size={2 / zoom}
-        color='var(--color-workflow-canvas-workflow-dot-color)'
-      />
-      {
-        data._isCandidate && (
-          <LoopStartNodeDumb />
-        )
-      }
-      {
-        data._children!.length === 1 && (
-          <AddBlock
-            loopNodeId={id}
-            loopNodeData={data}
-          />
-        )
-      }
-
-    </div>
-  )
-}
-
-export default memo(Node)
diff --git a/app/components/workflow/nodes/loop/panel.tsx b/app/components/workflow/nodes/loop/panel.tsx
deleted file mode 100644
index 8114160..0000000
--- a/app/components/workflow/nodes/loop/panel.tsx
+++ /dev/null
@@ -1,160 +0,0 @@
-import type { FC } from 'react'
-import React, { useMemo } from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiAddLine } from '@remixicon/react'
-import Split from '../_base/components/split'
-import ResultPanel from '../../run/result-panel'
-import InputNumberWithSlider from '../_base/components/input-number-with-slider'
-import type { LoopNodeType } from './types'
-import useConfig from './use-config'
-import ConditionWrap from './components/condition-wrap'
-import LoopVariable from './components/loop-variables'
-import type { NodePanelProps } from '@/app/components/workflow/types'
-import Field from '@/app/components/workflow/nodes/_base/components/field'
-import BeforeRunForm from '@/app/components/workflow/nodes/_base/components/before-run-form'
-import formatTracing from '@/app/components/workflow/run/utils/format-log'
-
-import { useLogs } from '@/app/components/workflow/run/hooks'
-import { LOOP_NODE_MAX_COUNT } from '@/config'
-
-const i18nPrefix = 'workflow.nodes.loop'
-
-const Panel: FC<NodePanelProps<LoopNodeType>> = ({
-  id,
-  data,
-}) => {
-  const { t } = useTranslation()
-
-  const {
-    readOnly,
-    inputs,
-    childrenNodeVars,
-    loopChildrenNodes,
-    isShowSingleRun,
-    hideSingleRun,
-    runningStatus,
-    handleRun,
-    handleStop,
-    runResult,
-    loopRunResult,
-    handleAddCondition,
-    handleUpdateCondition,
-    handleRemoveCondition,
-    handleToggleConditionLogicalOperator,
-    handleAddSubVariableCondition,
-    handleRemoveSubVariableCondition,
-    handleUpdateSubVariableCondition,
-    handleToggleSubVariableConditionLogicalOperator,
-    handleUpdateLoopCount,
-    handleAddLoopVariable,
-    handleRemoveLoopVariable,
-    handleUpdateLoopVariable,
-  } = useConfig(id, data)
-
-  const nodeInfo = useMemo(() => {
-    const formattedNodeInfo = formatTracing(loopRunResult, t)[0]
-
-    if (runResult && formattedNodeInfo) {
-      return {
-        ...formattedNodeInfo,
-        execution_metadata: {
-          ...runResult.execution_metadata,
-          ...formattedNodeInfo.execution_metadata,
-        },
-      }
-    }
-
-    return formattedNodeInfo
-  }, [runResult, loopRunResult, t])
-  const logsParams = useLogs()
-
-  return (
-    <div className='mt-2'>
-      <div>
-        <Field
-          title={<div className='pl-3'>{t('workflow.nodes.loop.loopVariables')}</div>}
-          operations={
-            <div
-              className='mr-4 flex h-5 w-5 cursor-pointer items-center justify-center'
-              onClick={handleAddLoopVariable}
-            >
-              <RiAddLine className='h-4 w-4 text-text-tertiary' />
-            </div>
-          }
-        >
-          <div className='px-4'>
-            <LoopVariable
-              variables={inputs.loop_variables}
-              nodeId={id}
-              handleRemoveLoopVariable={handleRemoveLoopVariable}
-              handleUpdateLoopVariable={handleUpdateLoopVariable}
-            />
-          </div>
-        </Field>
-        <Split className='my-2' />
-        <Field
-          title={<div className='pl-3'>{t(`${i18nPrefix}.breakCondition`)}</div>}
-          tooltip={t(`${i18nPrefix}.breakConditionTip`)}
-        >
-          <ConditionWrap
-            nodeId={id}
-            readOnly={readOnly}
-            handleAddCondition={handleAddCondition}
-            handleRemoveCondition={handleRemoveCondition}
-            handleUpdateCondition={handleUpdateCondition}
-            handleToggleConditionLogicalOperator={handleToggleConditionLogicalOperator}
-            handleAddSubVariableCondition={handleAddSubVariableCondition}
-            handleRemoveSubVariableCondition={handleRemoveSubVariableCondition}
-            handleUpdateSubVariableCondition={handleUpdateSubVariableCondition}
-            handleToggleSubVariableConditionLogicalOperator={handleToggleSubVariableConditionLogicalOperator}
-            availableNodes={loopChildrenNodes}
-            availableVars={childrenNodeVars}
-            conditions={inputs.break_conditions || []}
-            logicalOperator={inputs.logical_operator!}
-          />
-        </Field>
-        <Split className='mt-2' />
-        <div className='mt-2'>
-          <Field
-            title={<div className='pl-3'>{t(`${i18nPrefix}.loopMaxCount`)}</div>}
-          >
-            <div className='px-3 py-2'>
-              <InputNumberWithSlider
-                min={1}
-                max={LOOP_NODE_MAX_COUNT}
-                value={inputs.loop_count}
-                onChange={(val) => {
-                  const roundedVal = Math.round(val)
-                  handleUpdateLoopCount(Number.isNaN(roundedVal) ? 1 : roundedVal)
-                }}
-              />
-            </div>
-          </Field>
-        </div>
-      </div>
-      {/* Error handling for the Loop node is currently not considered. */}
-      {/* <div className='px-4 py-2'>
-        <Field title={t(`${i18nPrefix}.errorResponseMethod`)} >
-          <Select items={responseMethod} defaultValue={inputs.error_handle_mode} onSelect={changeErrorResponseMode} allowSearch={false}>
-          </Select>
-        </Field>
-      </div> */}
-      {isShowSingleRun && (
-        <BeforeRunForm
-          nodeName={inputs.title}
-          onHide={hideSingleRun}
-          forms={[]}
-          runningStatus={runningStatus}
-          onRun={handleRun}
-          onStop={handleStop}
-          {...logsParams}
-          result={
-            <ResultPanel {...runResult} showSteps={false} nodeInfo={nodeInfo} {...logsParams} />
-          }
-        />
-      )}
-    </div>
-  )
-}
-
-export default React.memo(Panel)
diff --git a/app/components/workflow/nodes/loop/types.ts b/app/components/workflow/nodes/loop/types.ts
deleted file mode 100644
index 80c7d51..0000000
--- a/app/components/workflow/nodes/loop/types.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import type { VarType as NumberVarType } from '../tool/types'
-import type {
-  BlockEnum,
-  CommonNodeType,
-  ErrorHandleMode,
-  ValueSelector,
-  ValueType,
-  Var,
-  VarType,
-} from '@/app/components/workflow/types'
-
-export enum LogicalOperator {
-  and = 'and',
-  or = 'or',
-}
-
-export enum ComparisonOperator {
-  contains = 'contains',
-  notContains = 'not contains',
-  startWith = 'start with',
-  endWith = 'end with',
-  is = 'is',
-  isNot = 'is not',
-  empty = 'empty',
-  notEmpty = 'not empty',
-  equal = '=',
-  notEqual = '鈮�',
-  largerThan = '>',
-  lessThan = '<',
-  largerThanOrEqual = '鈮�',
-  lessThanOrEqual = '鈮�',
-  isNull = 'is null',
-  isNotNull = 'is not null',
-  in = 'in',
-  notIn = 'not in',
-  allOf = 'all of',
-  exists = 'exists',
-  notExists = 'not exists',
-}
-
-export type Condition = {
-  id: string
-  varType: VarType
-  variable_selector?: ValueSelector
-  key?: string // sub variable key
-  comparison_operator?: ComparisonOperator
-  value: string | string[]
-  numberVarType?: NumberVarType
-  sub_variable_condition?: CaseItem
-}
-
-export type CaseItem = {
-  logical_operator: LogicalOperator
-  conditions: Condition[]
-}
-
-export type HandleAddCondition = (valueSelector: ValueSelector, varItem: Var) => void
-export type HandleRemoveCondition = (conditionId: string) => void
-export type HandleUpdateCondition = (conditionId: string, newCondition: Condition) => void
-export type HandleUpdateConditionLogicalOperator = (value: LogicalOperator) => void
-
-export type HandleToggleConditionLogicalOperator = () => void
-
-export type HandleAddSubVariableCondition = (conditionId: string, key?: string) => void
-export type handleRemoveSubVariableCondition = (conditionId: string, subConditionId: string) => void
-export type HandleUpdateSubVariableCondition = (conditionId: string, subConditionId: string, newSubCondition: Condition) => void
-export type HandleToggleSubVariableConditionLogicalOperator = (conditionId: string) => void
-
-export type LoopVariable = {
-  id: string
-  label: string
-  var_type: VarType
-  value_type: ValueType
-  value: any
-}
-export type LoopNodeType = CommonNodeType & {
-  startNodeType?: BlockEnum
-  start_node_id: string
-  loop_id?: string
-  logical_operator?: LogicalOperator
-  break_conditions?: Condition[]
-  loop_count: number
-  error_handle_mode: ErrorHandleMode // how to handle error in the iteration
-  loop_variables?: LoopVariable[]
-}
-
-export type HandleUpdateLoopVariable = (id: string, updateData: Partial<LoopVariable>) => void
-export type HandleRemoveLoopVariable = (id: string) => void
-
-export type LoopVariablesComponentShape = {
-  nodeId: string
-  handleRemoveLoopVariable: HandleRemoveLoopVariable
-  handleUpdateLoopVariable: HandleUpdateLoopVariable
-}
diff --git a/app/components/workflow/nodes/loop/use-config.ts b/app/components/workflow/nodes/loop/use-config.ts
deleted file mode 100644
index fbd350c..0000000
--- a/app/components/workflow/nodes/loop/use-config.ts
+++ /dev/null
@@ -1,379 +0,0 @@
-import {
-  useCallback,
-  useRef,
-} from 'react'
-import produce from 'immer'
-import { useBoolean } from 'ahooks'
-import { v4 as uuid4 } from 'uuid'
-import {
-  useIsChatMode,
-  useIsNodeInLoop,
-  useNodesReadOnly,
-  useWorkflow,
-} from '../../hooks'
-import { ValueType, VarType } from '../../types'
-import type { ErrorHandleMode, ValueSelector, Var } from '../../types'
-import useNodeCrud from '../_base/hooks/use-node-crud'
-import { getNodeInfoById, getNodeUsedVarPassToServerKey, getNodeUsedVars, isSystemVar, toNodeOutputVars } from '../_base/components/variable/utils'
-import useOneStepRun from '../_base/hooks/use-one-step-run'
-import { getOperators } from './utils'
-import { LogicalOperator } from './types'
-import type { HandleAddCondition, HandleAddSubVariableCondition, HandleRemoveCondition, HandleToggleConditionLogicalOperator, HandleToggleSubVariableConditionLogicalOperator, HandleUpdateCondition, HandleUpdateSubVariableCondition, LoopNodeType } from './types'
-import useIsVarFileAttribute from './use-is-var-file-attribute'
-import { useStore } from '@/app/components/workflow/store'
-
-const DELIMITER = '@@@@@'
-const useConfig = (id: string, payload: LoopNodeType) => {
-  const { nodesReadOnly: readOnly } = useNodesReadOnly()
-  const { isNodeInLoop } = useIsNodeInLoop(id)
-  const isChatMode = useIsChatMode()
-  const conversationVariables = useStore(s => s.conversationVariables)
-
-  const { inputs, setInputs } = useNodeCrud<LoopNodeType>(id, payload)
-  const inputsRef = useRef(inputs)
-  const handleInputsChange = useCallback((newInputs: LoopNodeType) => {
-    inputsRef.current = newInputs
-    setInputs(newInputs)
-  }, [setInputs])
-
-  const filterInputVar = useCallback((varPayload: Var) => {
-    return [VarType.array, VarType.arrayString, VarType.arrayNumber, VarType.arrayObject, VarType.arrayFile].includes(varPayload.type)
-  }, [])
-
-  // output
-  const { getLoopNodeChildren, getBeforeNodesInSameBranch } = useWorkflow()
-  const beforeNodes = getBeforeNodesInSameBranch(id)
-  const loopChildrenNodes = [{ id, data: payload } as any, ...getLoopNodeChildren(id)]
-  const canChooseVarNodes = [...beforeNodes, ...loopChildrenNodes]
-  const childrenNodeVars = toNodeOutputVars(loopChildrenNodes, isChatMode, undefined, [], conversationVariables)
-
-  // single run
-  const loopInputKey = `${id}.input_selector`
-  const {
-    isShowSingleRun,
-    showSingleRun,
-    hideSingleRun,
-    toVarInputs,
-    runningStatus,
-    handleRun: doHandleRun,
-    handleStop,
-    runInputData,
-    setRunInputData,
-    runResult,
-    loopRunResult,
-  } = useOneStepRun<LoopNodeType>({
-    id,
-    data: inputs,
-    loopInputKey,
-    defaultRunInputData: {
-      [loopInputKey]: [''],
-    },
-  })
-
-  const [isShowLoopDetail, {
-    setTrue: doShowLoopDetail,
-    setFalse: doHideLoopDetail,
-  }] = useBoolean(false)
-
-  const hideLoopDetail = useCallback(() => {
-    hideSingleRun()
-    doHideLoopDetail()
-  }, [doHideLoopDetail, hideSingleRun])
-
-  const showLoopDetail = useCallback(() => {
-    doShowLoopDetail()
-  }, [doShowLoopDetail])
-
-  const backToSingleRun = useCallback(() => {
-    hideLoopDetail()
-    showSingleRun()
-  }, [hideLoopDetail, showSingleRun])
-
-  const {
-    getIsVarFileAttribute,
-  } = useIsVarFileAttribute({
-    nodeId: id,
-  })
-
-  const { usedOutVars, allVarObject } = (() => {
-    const vars: ValueSelector[] = []
-    const varObjs: Record<string, boolean> = {}
-    const allVarObject: Record<string, {
-      inSingleRunPassedKey: string
-    }> = {}
-    loopChildrenNodes.forEach((node) => {
-      const nodeVars = getNodeUsedVars(node).filter(item => item && item.length > 0)
-      nodeVars.forEach((varSelector) => {
-        if (varSelector[0] === id) { // skip Loop node itself variable: item, index
-          return
-        }
-        const isInLoop = isNodeInLoop(varSelector[0])
-        if (isInLoop) // not pass loop inner variable
-          return
-
-        const varSectorStr = varSelector.join('.')
-        if (!varObjs[varSectorStr]) {
-          varObjs[varSectorStr] = true
-          vars.push(varSelector)
-        }
-        let passToServerKeys = getNodeUsedVarPassToServerKey(node, varSelector)
-        if (typeof passToServerKeys === 'string')
-          passToServerKeys = [passToServerKeys]
-
-        passToServerKeys.forEach((key: string, index: number) => {
-          allVarObject[[varSectorStr, node.id, index].join(DELIMITER)] = {
-            inSingleRunPassedKey: key,
-          }
-        })
-      })
-    })
-    const res = toVarInputs(vars.map((item) => {
-      const varInfo = getNodeInfoById(canChooseVarNodes, item[0])
-      return {
-        label: {
-          nodeType: varInfo?.data.type,
-          nodeName: varInfo?.data.title || canChooseVarNodes[0]?.data.title, // default start node title
-          variable: isSystemVar(item) ? item.join('.') : item[item.length - 1],
-        },
-        variable: `${item.join('.')}`,
-        value_selector: item,
-      }
-    }))
-    return {
-      usedOutVars: res,
-      allVarObject,
-    }
-  })()
-
-  const handleRun = useCallback((data: Record<string, any>) => {
-    const formattedData: Record<string, any> = {}
-    Object.keys(allVarObject).forEach((key) => {
-      const [varSectorStr, nodeId] = key.split(DELIMITER)
-      formattedData[`${nodeId}.${allVarObject[key].inSingleRunPassedKey}`] = data[varSectorStr]
-    })
-    formattedData[loopInputKey] = data[loopInputKey]
-    doHandleRun(formattedData)
-  }, [allVarObject, doHandleRun, loopInputKey])
-
-  const inputVarValues = (() => {
-    const vars: Record<string, any> = {}
-    Object.keys(runInputData)
-      .filter(key => ![loopInputKey].includes(key))
-      .forEach((key) => {
-        vars[key] = runInputData[key]
-      })
-    return vars
-  })()
-
-  const setInputVarValues = useCallback((newPayload: Record<string, any>) => {
-    const newVars = {
-      ...newPayload,
-      [loopInputKey]: runInputData[loopInputKey],
-    }
-    setRunInputData(newVars)
-  }, [loopInputKey, runInputData, setRunInputData])
-
-  const loop = runInputData[loopInputKey]
-  const setLoop = useCallback((newLoop: string[]) => {
-    setRunInputData({
-      ...runInputData,
-      [loopInputKey]: newLoop,
-    })
-  }, [loopInputKey, runInputData, setRunInputData])
-
-  const changeErrorResponseMode = useCallback((item: { value: unknown }) => {
-    const newInputs = produce(inputs, (draft) => {
-      draft.error_handle_mode = item.value as ErrorHandleMode
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleAddCondition = useCallback<HandleAddCondition>((valueSelector, varItem) => {
-    const newInputs = produce(inputs, (draft) => {
-      if (!draft.break_conditions)
-        draft.break_conditions = []
-
-      draft.break_conditions?.push({
-        id: uuid4(),
-        varType: varItem.type,
-        variable_selector: valueSelector,
-        comparison_operator: getOperators(varItem.type, getIsVarFileAttribute(valueSelector) ? { key: valueSelector.slice(-1)[0] } : undefined)[0],
-        value: '',
-      })
-    })
-    setInputs(newInputs)
-  }, [getIsVarFileAttribute, inputs, setInputs])
-
-  const handleRemoveCondition = useCallback<HandleRemoveCondition>((conditionId) => {
-    const newInputs = produce(inputs, (draft) => {
-      draft.break_conditions = draft.break_conditions?.filter(item => item.id !== conditionId)
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleUpdateCondition = useCallback<HandleUpdateCondition>((conditionId, newCondition) => {
-    const newInputs = produce(inputs, (draft) => {
-      const targetCondition = draft.break_conditions?.find(item => item.id === conditionId)
-      if (targetCondition)
-        Object.assign(targetCondition, newCondition)
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleToggleConditionLogicalOperator = useCallback<HandleToggleConditionLogicalOperator>(() => {
-    const newInputs = produce(inputs, (draft) => {
-      draft.logical_operator = draft.logical_operator === LogicalOperator.and ? LogicalOperator.or : LogicalOperator.and
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleAddSubVariableCondition = useCallback<HandleAddSubVariableCondition>((conditionId: string, key?: string) => {
-    const newInputs = produce(inputs, (draft) => {
-      const condition = draft.break_conditions?.find(item => item.id === conditionId)
-      if (!condition)
-        return
-      if (!condition?.sub_variable_condition) {
-        condition.sub_variable_condition = {
-          logical_operator: LogicalOperator.and,
-          conditions: [],
-        }
-      }
-      const subVarCondition = condition.sub_variable_condition
-      if (subVarCondition) {
-        if (!subVarCondition.conditions)
-          subVarCondition.conditions = []
-
-        const svcComparisonOperators = getOperators(VarType.string, { key: key || '' })
-
-        subVarCondition.conditions.push({
-          id: uuid4(),
-          key: key || '',
-          varType: VarType.string,
-          comparison_operator: (svcComparisonOperators && svcComparisonOperators.length) ? svcComparisonOperators[0] : undefined,
-          value: '',
-        })
-      }
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleRemoveSubVariableCondition = useCallback((conditionId: string, subConditionId: string) => {
-    const newInputs = produce(inputs, (draft) => {
-      const condition = draft.break_conditions?.find(item => item.id === conditionId)
-      if (!condition)
-        return
-      if (!condition?.sub_variable_condition)
-        return
-      const subVarCondition = condition.sub_variable_condition
-      if (subVarCondition)
-        subVarCondition.conditions = subVarCondition.conditions.filter(item => item.id !== subConditionId)
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleUpdateSubVariableCondition = useCallback<HandleUpdateSubVariableCondition>((conditionId, subConditionId, newSubCondition) => {
-    const newInputs = produce(inputs, (draft) => {
-      const targetCondition = draft.break_conditions?.find(item => item.id === conditionId)
-      if (targetCondition && targetCondition.sub_variable_condition) {
-        const targetSubCondition = targetCondition.sub_variable_condition.conditions.find(item => item.id === subConditionId)
-        if (targetSubCondition)
-          Object.assign(targetSubCondition, newSubCondition)
-      }
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleToggleSubVariableConditionLogicalOperator = useCallback<HandleToggleSubVariableConditionLogicalOperator>((conditionId) => {
-    const newInputs = produce(inputs, (draft) => {
-      const targetCondition = draft.break_conditions?.find(item => item.id === conditionId)
-      if (targetCondition && targetCondition.sub_variable_condition)
-        targetCondition.sub_variable_condition.logical_operator = targetCondition.sub_variable_condition.logical_operator === LogicalOperator.and ? LogicalOperator.or : LogicalOperator.and
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleUpdateLoopCount = useCallback((value: number) => {
-    const newInputs = produce(inputs, (draft) => {
-      draft.loop_count = value
-    })
-    setInputs(newInputs)
-  }, [inputs, setInputs])
-
-  const handleAddLoopVariable = useCallback(() => {
-    const newInputs = produce(inputsRef.current, (draft) => {
-      if (!draft.loop_variables)
-        draft.loop_variables = []
-
-      draft.loop_variables.push({
-        id: uuid4(),
-        label: '',
-        var_type: VarType.string,
-        value_type: ValueType.constant,
-        value: '',
-      })
-    })
-    handleInputsChange(newInputs)
-  }, [handleInputsChange])
-
-  const handleRemoveLoopVariable = useCallback((id: string) => {
-    const newInputs = produce(inputsRef.current, (draft) => {
-      draft.loop_variables = draft.loop_variables?.filter(item => item.id !== id)
-    })
-    handleInputsChange(newInputs)
-  }, [handleInputsChange])
-
-  const handleUpdateLoopVariable = useCallback((id: string, updateData: any) => {
-    const loopVariables = inputsRef.current.loop_variables || []
-    const index = loopVariables.findIndex(item => item.id === id)
-    const newInputs = produce(inputsRef.current, (draft) => {
-      if (index > -1) {
-        draft.loop_variables![index] = {
-          ...draft.loop_variables![index],
-          ...updateData,
-        }
-      }
-    })
-    handleInputsChange(newInputs)
-  }, [handleInputsChange])
-
-  return {
-    readOnly,
-    inputs,
-    filterInputVar,
-    childrenNodeVars,
-    loopChildrenNodes,
-    isShowSingleRun,
-    showSingleRun,
-    hideSingleRun,
-    isShowLoopDetail,
-    showLoopDetail,
-    hideLoopDetail,
-    backToSingleRun,
-    runningStatus,
-    handleRun,
-    handleStop,
-    runResult,
-    inputVarValues,
-    setInputVarValues,
-    usedOutVars,
-    loop,
-    setLoop,
-    loopInputKey,
-    loopRunResult,
-    handleAddCondition,
-    handleRemoveCondition,
-    handleUpdateCondition,
-    handleToggleConditionLogicalOperator,
-    handleAddSubVariableCondition,
-    handleUpdateSubVariableCondition,
-    handleRemoveSubVariableCondition,
-    handleToggleSubVariableConditionLogicalOperator,
-    handleUpdateLoopCount,
-    changeErrorResponseMode,
-    handleAddLoopVariable,
-    handleRemoveLoopVariable,
-    handleUpdateLoopVariable,
-  }
-}
-
-export default useConfig
diff --git a/app/components/workflow/nodes/loop/use-interactions.ts b/app/components/workflow/nodes/loop/use-interactions.ts
deleted file mode 100644
index 83a3210..0000000
--- a/app/components/workflow/nodes/loop/use-interactions.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import { useCallback } from 'react'
-import produce from 'immer'
-import { useTranslation } from 'react-i18next'
-import { useStoreApi } from 'reactflow'
-import type {
-  BlockEnum,
-  Node,
-} from '../../types'
-import {
-  generateNewNode,
-  getNodeCustomTypeByNodeDataType,
-} from '../../utils'
-import {
-  LOOP_PADDING,
-  NODES_INITIAL_DATA,
-} from '../../constants'
-import { CUSTOM_LOOP_START_NODE } from '../loop-start/constants'
-
-export const useNodeLoopInteractions = () => {
-  const { t } = useTranslation()
-  const store = useStoreApi()
-
-  const handleNodeLoopRerender = useCallback((nodeId: string) => {
-    const {
-      getNodes,
-      setNodes,
-    } = store.getState()
-
-    const nodes = getNodes()
-    const currentNode = nodes.find(n => n.id === nodeId)!
-    const childrenNodes = nodes.filter(n => n.parentId === nodeId)
-    let rightNode: Node
-    let bottomNode: Node
-
-    childrenNodes.forEach((n) => {
-      if (rightNode) {
-        if (n.position.x + n.width! > rightNode.position.x + rightNode.width!)
-          rightNode = n
-      }
-      else {
-        rightNode = n
-      }
-      if (bottomNode) {
-        if (n.position.y + n.height! > bottomNode.position.y + bottomNode.height!)
-          bottomNode = n
-      }
-      else {
-        bottomNode = n
-      }
-    })
-
-    const widthShouldExtend = rightNode! && currentNode.width! < rightNode.position.x + rightNode.width!
-    const heightShouldExtend = bottomNode! && currentNode.height! < bottomNode.position.y + bottomNode.height!
-
-    if (widthShouldExtend || heightShouldExtend) {
-      const newNodes = produce(nodes, (draft) => {
-        draft.forEach((n) => {
-          if (n.id === nodeId) {
-            if (widthShouldExtend) {
-              n.data.width = rightNode.position.x + rightNode.width! + LOOP_PADDING.right
-              n.width = rightNode.position.x + rightNode.width! + LOOP_PADDING.right
-            }
-            if (heightShouldExtend) {
-              n.data.height = bottomNode.position.y + bottomNode.height! + LOOP_PADDING.bottom
-              n.height = bottomNode.position.y + bottomNode.height! + LOOP_PADDING.bottom
-            }
-          }
-        })
-      })
-
-      setNodes(newNodes)
-    }
-  }, [store])
-
-  const handleNodeLoopChildDrag = useCallback((node: Node) => {
-    const { getNodes } = store.getState()
-    const nodes = getNodes()
-
-    const restrictPosition: { x?: number; y?: number } = { x: undefined, y: undefined }
-
-    if (node.data.isInLoop) {
-      const parentNode = nodes.find(n => n.id === node.parentId)
-
-      if (parentNode) {
-        if (node.position.y < LOOP_PADDING.top)
-          restrictPosition.y = LOOP_PADDING.top
-        if (node.position.x < LOOP_PADDING.left)
-          restrictPosition.x = LOOP_PADDING.left
-        if (node.position.x + node.width! > parentNode!.width! - LOOP_PADDING.right)
-          restrictPosition.x = parentNode!.width! - LOOP_PADDING.right - node.width!
-        if (node.position.y + node.height! > parentNode!.height! - LOOP_PADDING.bottom)
-          restrictPosition.y = parentNode!.height! - LOOP_PADDING.bottom - node.height!
-      }
-    }
-
-    return {
-      restrictPosition,
-    }
-  }, [store])
-
-  const handleNodeLoopChildSizeChange = useCallback((nodeId: string) => {
-    const { getNodes } = store.getState()
-    const nodes = getNodes()
-    const currentNode = nodes.find(n => n.id === nodeId)!
-    const parentId = currentNode.parentId
-
-    if (parentId)
-      handleNodeLoopRerender(parentId)
-  }, [store, handleNodeLoopRerender])
-
-  const handleNodeLoopChildrenCopy = useCallback((nodeId: string, newNodeId: string) => {
-    const { getNodes } = store.getState()
-    const nodes = getNodes()
-    const childrenNodes = nodes.filter(n => n.parentId === nodeId && n.type !== CUSTOM_LOOP_START_NODE)
-
-    return childrenNodes.map((child, index) => {
-      const childNodeType = child.data.type as BlockEnum
-      const nodesWithSameType = nodes.filter(node => node.data.type === childNodeType)
-      const { newNode } = generateNewNode({
-        type: getNodeCustomTypeByNodeDataType(childNodeType),
-        data: {
-          ...NODES_INITIAL_DATA[childNodeType],
-          ...child.data,
-          selected: false,
-          _isBundled: false,
-          _connectedSourceHandleIds: [],
-          _connectedTargetHandleIds: [],
-          title: nodesWithSameType.length > 0 ? `${t(`workflow.blocks.${childNodeType}`)} ${nodesWithSameType.length + 1}` : t(`workflow.blocks.${childNodeType}`),
-          loop_id: newNodeId,
-
-        },
-        position: child.position,
-        positionAbsolute: child.positionAbsolute,
-        parentId: newNodeId,
-        extent: child.extent,
-        zIndex: child.zIndex,
-      })
-      newNode.id = `${newNodeId}${newNode.id + index}`
-      return newNode
-    })
-  }, [store, t])
-
-  return {
-    handleNodeLoopRerender,
-    handleNodeLoopChildDrag,
-    handleNodeLoopChildSizeChange,
-    handleNodeLoopChildrenCopy,
-  }
-}
diff --git a/app/components/workflow/nodes/loop/use-is-var-file-attribute.ts b/app/components/workflow/nodes/loop/use-is-var-file-attribute.ts
deleted file mode 100644
index b354d31..0000000
--- a/app/components/workflow/nodes/loop/use-is-var-file-attribute.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useMemo } from 'react'
-import { useIsChatMode, useWorkflow, useWorkflowVariables } from '../../hooks'
-import type { ValueSelector } from '../../types'
-import { VarType } from '../../types'
-
-type Params = {
-  nodeId: string
-}
-const useIsVarFileAttribute = ({
-  nodeId,
-}: Params) => {
-  const isChatMode = useIsChatMode()
-  const { getBeforeNodesInSameBranch } = useWorkflow()
-  const availableNodes = useMemo(() => {
-    return getBeforeNodesInSameBranch(nodeId)
-  }, [getBeforeNodesInSameBranch, nodeId])
-  const { getCurrentVariableType } = useWorkflowVariables()
-  const getIsVarFileAttribute = (variable: ValueSelector) => {
-    if (variable.length !== 3)
-      return false
-    const parentVariable = variable.slice(0, 2)
-    const varType = getCurrentVariableType({
-      valueSelector: parentVariable,
-      availableNodes,
-      isChatMode,
-      isConstant: false,
-    })
-    return varType === VarType.file
-  }
-  return {
-    getIsVarFileAttribute,
-  }
-}
-
-export default useIsVarFileAttribute
diff --git a/app/components/workflow/nodes/loop/utils.ts b/app/components/workflow/nodes/loop/utils.ts
deleted file mode 100644
index 2bc9d89..0000000
--- a/app/components/workflow/nodes/loop/utils.ts
+++ /dev/null
@@ -1,179 +0,0 @@
-import { ComparisonOperator } from './types'
-import { VarType } from '@/app/components/workflow/types'
-import type { Branch } from '@/app/components/workflow/types'
-
-export const isEmptyRelatedOperator = (operator: ComparisonOperator) => {
-  return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator)
-}
-
-const notTranslateKey = [
-  ComparisonOperator.equal, ComparisonOperator.notEqual,
-  ComparisonOperator.largerThan, ComparisonOperator.largerThanOrEqual,
-  ComparisonOperator.lessThan, ComparisonOperator.lessThanOrEqual,
-]
-
-export const isComparisonOperatorNeedTranslate = (operator?: ComparisonOperator) => {
-  if (!operator)
-    return false
-  return !notTranslateKey.includes(operator)
-}
-
-export const getOperators = (type?: VarType, file?: { key: string }) => {
-  const isFile = !!file
-  if (isFile) {
-    const { key } = file
-
-    switch (key) {
-      case 'name':
-        return [
-          ComparisonOperator.contains,
-          ComparisonOperator.notContains,
-          ComparisonOperator.startWith,
-          ComparisonOperator.endWith,
-          ComparisonOperator.is,
-          ComparisonOperator.isNot,
-          ComparisonOperator.empty,
-          ComparisonOperator.notEmpty,
-        ]
-      case 'type':
-        return [
-          ComparisonOperator.in,
-          ComparisonOperator.notIn,
-        ]
-      case 'size':
-        return [
-          ComparisonOperator.largerThan,
-          ComparisonOperator.largerThanOrEqual,
-          ComparisonOperator.lessThan,
-          ComparisonOperator.lessThanOrEqual,
-        ]
-      case 'extension':
-        return [
-          ComparisonOperator.is,
-          ComparisonOperator.isNot,
-          ComparisonOperator.contains,
-          ComparisonOperator.notContains,
-        ]
-      case 'mime_type':
-        return [
-          ComparisonOperator.contains,
-          ComparisonOperator.notContains,
-          ComparisonOperator.startWith,
-          ComparisonOperator.endWith,
-          ComparisonOperator.is,
-          ComparisonOperator.isNot,
-          ComparisonOperator.empty,
-          ComparisonOperator.notEmpty,
-        ]
-      case 'transfer_method':
-        return [
-          ComparisonOperator.in,
-          ComparisonOperator.notIn,
-        ]
-      case 'url':
-        return [
-          ComparisonOperator.contains,
-          ComparisonOperator.notContains,
-          ComparisonOperator.startWith,
-          ComparisonOperator.endWith,
-          ComparisonOperator.is,
-          ComparisonOperator.isNot,
-          ComparisonOperator.empty,
-          ComparisonOperator.notEmpty,
-        ]
-    }
-    return []
-  }
-  switch (type) {
-    case VarType.string:
-      return [
-        ComparisonOperator.contains,
-        ComparisonOperator.notContains,
-        ComparisonOperator.startWith,
-        ComparisonOperator.endWith,
-        ComparisonOperator.is,
-        ComparisonOperator.isNot,
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-    case VarType.number:
-      return [
-        ComparisonOperator.equal,
-        ComparisonOperator.notEqual,
-        ComparisonOperator.largerThan,
-        ComparisonOperator.lessThan,
-        ComparisonOperator.largerThanOrEqual,
-        ComparisonOperator.lessThanOrEqual,
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-    case VarType.object:
-      return [
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-    case VarType.file:
-      return [
-        ComparisonOperator.exists,
-        ComparisonOperator.notExists,
-      ]
-    case VarType.arrayString:
-    case VarType.arrayNumber:
-      return [
-        ComparisonOperator.contains,
-        ComparisonOperator.notContains,
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-    case VarType.array:
-    case VarType.arrayObject:
-      return [
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-    case VarType.arrayFile:
-      return [
-        ComparisonOperator.contains,
-        ComparisonOperator.notContains,
-        ComparisonOperator.allOf,
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-    default:
-      return [
-        ComparisonOperator.is,
-        ComparisonOperator.isNot,
-        ComparisonOperator.empty,
-        ComparisonOperator.notEmpty,
-      ]
-  }
-}
-
-export const comparisonOperatorNotRequireValue = (operator?: ComparisonOperator) => {
-  if (!operator)
-    return false
-
-  return [ComparisonOperator.empty, ComparisonOperator.notEmpty, ComparisonOperator.isNull, ComparisonOperator.isNotNull, ComparisonOperator.exists, ComparisonOperator.notExists].includes(operator)
-}
-
-export const branchNameCorrect = (branches: Branch[]) => {
-  const branchLength = branches.length
-  if (branchLength < 2)
-    throw new Error('if-else node branch number must than 2')
-
-  if (branchLength === 2) {
-    return branches.map((branch) => {
-      return {
-        ...branch,
-        name: branch.id === 'false' ? 'ELSE' : 'IF',
-      }
-    })
-  }
-
-  return branches.map((branch, index) => {
-    return {
-      ...branch,
-      name: branch.id === 'false' ? 'ELSE' : `CASE ${index + 1}`,
-    }
-  })
-}
diff --git a/app/components/workflow/nodes/utils.ts b/app/components/workflow/nodes/utils.ts
deleted file mode 100644
index 262dde6..0000000
--- a/app/components/workflow/nodes/utils.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import type {
-  NodeOutPutVar,
-  ValueSelector,
-} from '@/app/components/workflow/types'
-import { InputVarType } from '@/app/components/workflow/types'
-
-export const findVariableWhenOnLLMVision = (valueSelector: ValueSelector, availableVars: NodeOutPutVar[]) => {
-  const currentVariableNode = availableVars.find((availableVar) => {
-    if (valueSelector[0] === 'sys' && availableVar.isStartNode)
-      return true
-
-    return valueSelector[0] === availableVar.nodeId
-  })
-  const currentVariable = currentVariableNode?.vars.find((variable) => {
-    if (valueSelector[0] === 'sys' && variable.variable === `sys.${valueSelector[1]}`)
-      return true
-    return variable.variable === valueSelector[1]
-  })
-
-  let formType = ''
-  if (currentVariable?.type === 'array[file]')
-    formType = InputVarType.multiFiles
-  if (currentVariable?.type === 'file')
-    formType = InputVarType.singleFile
-
-  return currentVariable && {
-    ...currentVariable,
-    formType,
-  }
-}
diff --git a/app/components/workflow/operator/export-image.tsx b/app/components/workflow/operator/export-image.tsx
deleted file mode 100644
index f59f0cd..0000000
--- a/app/components/workflow/operator/export-image.tsx
+++ /dev/null
@@ -1,131 +0,0 @@
-import type { FC } from 'react'
-import {
-  memo,
-  useCallback,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { toJpeg, toPng, toSvg } from 'html-to-image'
-import { useNodesReadOnly } from '../hooks'
-import TipPopup from './tip-popup'
-import { RiExportLine } from '@remixicon/react'
-import cn from '@/utils/classnames'
-import { useStore as useAppStore } from '@/app/components/app/store'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-
-const ExportImage: FC = () => {
-  const { t } = useTranslation()
-  const { getNodesReadOnly } = useNodesReadOnly()
-
-  const appDetail = useAppStore(s => s.appDetail)
-  const [open, setOpen] = useState(false)
-
-  const handleExportImage = useCallback(async (type: 'png' | 'jpeg' | 'svg') => {
-    if (!appDetail)
-      return
-
-    if (getNodesReadOnly())
-      return
-
-    setOpen(false)
-    const flowElement = document.querySelector('.react-flow__viewport') as HTMLElement
-    if (!flowElement) return
-
-    try {
-      const filter = (node: HTMLElement) => {
-        if (node instanceof HTMLImageElement)
-          return node.complete && node.naturalHeight !== 0
-
-        return true
-      }
-
-      let dataUrl
-      switch (type) {
-        case 'png':
-          dataUrl = await toPng(flowElement, { filter })
-          break
-        case 'jpeg':
-          dataUrl = await toJpeg(flowElement, { filter })
-          break
-        case 'svg':
-          dataUrl = await toSvg(flowElement, { filter })
-          break
-        default:
-          dataUrl = await toPng(flowElement, { filter })
-      }
-
-      const link = document.createElement('a')
-      link.href = dataUrl
-      link.download = `${appDetail.name}.${type}`
-      document.body.appendChild(link)
-      link.click()
-      document.body.removeChild(link)
-    }
-    catch (error) {
-      console.error('Export image failed:', error)
-    }
-  }, [getNodesReadOnly, appDetail])
-
-  const handleTrigger = useCallback(() => {
-    if (getNodesReadOnly())
-      return
-
-    setOpen(v => !v)
-  }, [getNodesReadOnly])
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement="top-start"
-      offset={{
-        mainAxis: 4,
-        crossAxis: -8,
-      }}
-    >
-      <PortalToFollowElemTrigger>
-        <TipPopup title={t('workflow.common.exportImage')}>
-          <div
-            className={cn(
-              'flex h-8 w-8 cursor-pointer items-center justify-center rounded-lg hover:bg-state-base-hover hover:text-text-secondary',
-              `${getNodesReadOnly() && 'cursor-not-allowed text-text-disabled hover:bg-transparent hover:text-text-disabled'}`,
-            )}
-            onClick={handleTrigger}
-          >
-            <RiExportLine className='h-4 w-4' />
-          </div>
-        </TipPopup>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <div className='min-w-[120px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur text-text-secondary shadow-lg'>
-          <div className='p-1'>
-            <div
-              className='system-md-regular flex h-8 cursor-pointer items-center rounded-lg px-2 hover:bg-state-base-hover'
-              onClick={() => handleExportImage('png')}
-            >
-              {t('workflow.common.exportPNG')}
-            </div>
-            <div
-              className='system-md-regular flex h-8 cursor-pointer items-center rounded-lg px-2 hover:bg-state-base-hover'
-              onClick={() => handleExportImage('jpeg')}
-            >
-              {t('workflow.common.exportJPEG')}
-            </div>
-            <div
-              className='system-md-regular flex h-8 cursor-pointer items-center rounded-lg px-2 hover:bg-state-base-hover'
-              onClick={() => handleExportImage('svg')}
-            >
-              {t('workflow.common.exportSVG')}
-            </div>
-          </div>
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default memo(ExportImage)
diff --git a/app/components/workflow/panel/version-history-panel/context-menu/index.tsx b/app/components/workflow/panel/version-history-panel/context-menu/index.tsx
deleted file mode 100644
index 4d4f21d..0000000
--- a/app/components/workflow/panel/version-history-panel/context-menu/index.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import React, { type FC, useCallback } from 'react'
-import { RiMoreFill } from '@remixicon/react'
-import { VersionHistoryContextMenuOptions } from '../../../types'
-import MenuItem from './menu-item'
-import useContextMenu from './use-context-menu'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Button from '@/app/components/base/button'
-import Divider from '@/app/components/base/divider'
-
-export type ContextMenuProps = {
-  isShowDelete: boolean
-  isNamedVersion: boolean
-  open: boolean
-  setOpen: React.Dispatch<React.SetStateAction<boolean>>
-  handleClickMenuItem: (operation: VersionHistoryContextMenuOptions) => void
-}
-
-const ContextMenu: FC<ContextMenuProps> = (props: ContextMenuProps) => {
-  const { isShowDelete, handleClickMenuItem, open, setOpen } = props
-  const {
-    deleteOperation,
-    options,
-  } = useContextMenu(props)
-
-  const handleClickTrigger = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {
-    e.stopPropagation()
-    setOpen(v => !v)
-  }, [setOpen])
-
-  return (
-    <PortalToFollowElem
-      placement={'bottom-end'}
-      offset={{
-        mainAxis: 4,
-        crossAxis: 0,
-      }}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger>
-        <Button size='small' className='px-1' onClick={handleClickTrigger}>
-          <RiMoreFill className='h-4 w-4' />
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-10'>
-        <div className='flex w-[184px] flex-col rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg shadow-shadow-shadow-5 backdrop-blur-[5px]'>
-          <div className='flex flex-col p-1'>
-            {
-              options.map((option) => {
-                return (
-                  <MenuItem
-                    key={option.key}
-                    item={option}
-                    onClick={handleClickMenuItem.bind(null, option.key)}
-                  />
-                )
-              })
-            }
-          </div>
-          {
-            isShowDelete && (
-              <>
-                <Divider type='horizontal' className='my-0 h-[1px] bg-divider-subtle' />
-                <div className='p-1'>
-                  <MenuItem
-                    item={deleteOperation}
-                    isDestructive
-                    onClick={handleClickMenuItem.bind(null, VersionHistoryContextMenuOptions.delete)}
-                  />
-                </div>
-              </>
-            )
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default React.memo(ContextMenu)
diff --git a/app/components/workflow/panel/version-history-panel/context-menu/menu-item.tsx b/app/components/workflow/panel/version-history-panel/context-menu/menu-item.tsx
deleted file mode 100644
index dcfcb24..0000000
--- a/app/components/workflow/panel/version-history-panel/context-menu/menu-item.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import React, { type FC } from 'react'
-import type { VersionHistoryContextMenuOptions } from '../../../types'
-import cn from '@/utils/classnames'
-
-type MenuItemProps = {
-  item: {
-    key: VersionHistoryContextMenuOptions
-    name: string
-  }
-  onClick: (operation: VersionHistoryContextMenuOptions) => void
-  isDestructive?: boolean
-}
-
-const MenuItem: FC<MenuItemProps> = ({
-  item,
-  onClick,
-  isDestructive = false,
-}) => {
-  return (
-    <div
-      className={cn(
-        'flex cursor-pointer items-center justify-between rounded-lg px-2 py-1.5 ',
-        isDestructive ? 'hover:bg-state-destructive-hover' : 'hover:bg-state-base-hover',
-      )}
-      onClick={() => {
-        onClick(item.key)
-      }}
-    >
-      <div className={cn(
-        'system-md-regular flex-1 text-text-primary',
-        isDestructive && 'hover:text-text-destructive',
-      )}>
-        {item.name}
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(MenuItem)
diff --git a/app/components/workflow/panel/version-history-panel/context-menu/use-context-menu.ts b/app/components/workflow/panel/version-history-panel/context-menu/use-context-menu.ts
deleted file mode 100644
index 3b01db7..0000000
--- a/app/components/workflow/panel/version-history-panel/context-menu/use-context-menu.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { useMemo } from 'react'
-import { useTranslation } from 'react-i18next'
-import { VersionHistoryContextMenuOptions } from '../../../types'
-import type { ContextMenuProps } from './index'
-
-const useContextMenu = (props: ContextMenuProps) => {
-  const {
-    isNamedVersion,
-  } = props
-  const { t } = useTranslation()
-
-  const deleteOperation = {
-    key: VersionHistoryContextMenuOptions.delete,
-    name: t('common.operation.delete'),
-  }
-
-  const options = useMemo(() => {
-    return [
-      {
-        key: VersionHistoryContextMenuOptions.restore,
-        name: t('workflow.common.restore'),
-      },
-      isNamedVersion
-        ? {
-          key: VersionHistoryContextMenuOptions.edit,
-          name: t('workflow.versionHistory.editVersionInfo'),
-        }
-        : {
-          key: VersionHistoryContextMenuOptions.edit,
-          name: t('workflow.versionHistory.nameThisVersion'),
-        },
-    ]
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [isNamedVersion])
-
-  return {
-    deleteOperation,
-    options,
-  }
-}
-
-export default useContextMenu
diff --git a/app/components/workflow/panel/version-history-panel/delete-confirm-modal.tsx b/app/components/workflow/panel/version-history-panel/delete-confirm-modal.tsx
deleted file mode 100644
index 8ba1494..0000000
--- a/app/components/workflow/panel/version-history-panel/delete-confirm-modal.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import React, { type FC } from 'react'
-import Modal from '@/app/components/base/modal'
-import type { VersionHistory } from '@/types/workflow'
-import { useTranslation } from 'react-i18next'
-import Button from '@/app/components/base/button'
-
-type DeleteConfirmModalProps = {
-  isOpen: boolean
-  versionInfo: VersionHistory
-  onClose: () => void
-  onDelete: (id: string) => void
-}
-
-const DeleteConfirmModal: FC<DeleteConfirmModalProps> = ({
-  isOpen,
-  versionInfo,
-  onClose,
-  onDelete,
-}) => {
-  const { t } = useTranslation()
-
-  return <Modal className='p-0' isShow={isOpen} onClose={onClose}>
-    <div className='flex flex-col gap-y-2 p-6 pb-4 '>
-      <div className='title-2xl-semi-bold text-text-primary'>
-        {`${t('common.operation.delete')} ${versionInfo.marked_name || t('workflow.versionHistory.defaultName')}`}
-      </div>
-      <p className='system-md-regular text-text-secondary'>
-        {t('workflow.versionHistory.deletionTip')}
-      </p>
-    </div>
-    <div className='flex items-center justify-end gap-x-2 p-6'>
-      <Button onClick={onClose}>
-        {t('common.operation.cancel')}
-      </Button>
-      <Button variant='warning' onClick={onDelete.bind(null, versionInfo.id)}>
-        {t('common.operation.delete')}
-      </Button>
-    </div>
-  </Modal>
-}
-
-export default DeleteConfirmModal
diff --git a/app/components/workflow/panel/version-history-panel/empty.tsx b/app/components/workflow/panel/version-history-panel/empty.tsx
deleted file mode 100644
index e3f3a6e..0000000
--- a/app/components/workflow/panel/version-history-panel/empty.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import Button from '@/app/components/base/button'
-import { RiHistoryLine } from '@remixicon/react'
-import React, { type FC } from 'react'
-import { useTranslation } from 'react-i18next'
-
-type EmptyProps = {
-  onResetFilter: () => void
-}
-
-const Empty: FC<EmptyProps> = ({
-  onResetFilter,
-}) => {
-  const { t } = useTranslation()
-
-  return <div className='flex h-5/6 w-full flex-col justify-center gap-y-2'>
-    <div className='flex justify-center'>
-      <RiHistoryLine className='h-10 w-10 text-text-empty-state-icon' />
-    </div>
-    <div className='system-xs-regular flex justify-center text-text-tertiary'>
-      {t('workflow.versionHistory.filter.empty')}
-    </div>
-    <div className='flex justify-center'>
-      <Button size='small' onClick={onResetFilter}>
-        {t('workflow.versionHistory.filter.reset')}
-      </Button>
-    </div>
-  </div>
-}
-
-export default React.memo(Empty)
diff --git a/app/components/workflow/panel/version-history-panel/filter/filter-item.tsx b/app/components/workflow/panel/version-history-panel/filter/filter-item.tsx
deleted file mode 100644
index 4301a8e..0000000
--- a/app/components/workflow/panel/version-history-panel/filter/filter-item.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { RiCheckLine } from '@remixicon/react'
-import React, { type FC } from 'react'
-import type { WorkflowVersionFilterOptions } from '../../../types'
-
-type FilterItemProps = {
-  item: {
-    key: WorkflowVersionFilterOptions
-    name: string
-  }
-  isSelected?: boolean
-  onClick: (value: WorkflowVersionFilterOptions) => void
-}
-
-const FilterItem: FC<FilterItemProps> = ({
-  item,
-  isSelected = false,
-  onClick,
-}) => {
-  return (
-    <div
-      className='flex cursor-pointer items-center justify-between gap-x-1 rounded-lg px-2 py-1.5 hover:bg-state-base-hover'
-      onClick={() => {
-        onClick(item.key)
-      }}
-    >
-      <div className='system-md-regular flex-1 text-text-primary'>{item.name}</div>
-      {isSelected && <RiCheckLine className='h-4 w-4 shrink-0 text-text-accent' />}
-    </div>
-  )
-}
-
-export default React.memo(FilterItem)
diff --git a/app/components/workflow/panel/version-history-panel/filter/filter-switch.tsx b/app/components/workflow/panel/version-history-panel/filter/filter-switch.tsx
deleted file mode 100644
index 0eabd50..0000000
--- a/app/components/workflow/panel/version-history-panel/filter/filter-switch.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React, { type FC } from 'react'
-import { useTranslation } from 'react-i18next'
-import Switch from '@/app/components/base/switch'
-
-type FilterSwitchProps = {
-  enabled: boolean
-  handleSwitch: (value: boolean) => void
-}
-
-const FilterSwitch: FC<FilterSwitchProps> = ({
-  enabled,
-  handleSwitch,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div className='flex items-center p-1'>
-      <div className='flex w-full items-center gap-x-1 px-2 py-1.5'>
-        <div className='system-md-regular flex-1 px-1 text-text-secondary'>
-          {t('workflow.versionHistory.filter.onlyShowNamedVersions')}
-        </div>
-        <Switch
-          defaultValue={enabled}
-          onChange={v => handleSwitch(v)}
-          size='md'
-          className='shrink-0'
-        />
-      </div>
-    </div>
-  )
-}
-
-export default React.memo(FilterSwitch)
diff --git a/app/components/workflow/panel/version-history-panel/filter/index.tsx b/app/components/workflow/panel/version-history-panel/filter/index.tsx
deleted file mode 100644
index 12f2a72..0000000
--- a/app/components/workflow/panel/version-history-panel/filter/index.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import React, { type FC, useCallback, useState } from 'react'
-import { RiFilter3Line } from '@remixicon/react'
-import { WorkflowVersionFilterOptions } from '../../../types'
-import { useFilterOptions } from './use-filter'
-import FilterItem from './filter-item'
-import FilterSwitch from './filter-switch'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Divider from '@/app/components/base/divider'
-import cn from '@/utils/classnames'
-
-type FilterProps = {
-  filterValue: WorkflowVersionFilterOptions
-  isOnlyShowNamedVersions: boolean
-  onClickFilterItem: (filter: WorkflowVersionFilterOptions) => void
-  handleSwitch: (isOnlyShowNamedVersions: boolean) => void
-}
-
-const Filter: FC<FilterProps> = ({
-  filterValue,
-  isOnlyShowNamedVersions,
-  onClickFilterItem,
-  handleSwitch,
-}) => {
-  const [open, setOpen] = useState(false)
-  const options = useFilterOptions()
-
-  const handleOnClick = useCallback((value: WorkflowVersionFilterOptions) => {
-    onClickFilterItem(value)
-  }, [onClickFilterItem])
-
-  const isFiltering = filterValue !== WorkflowVersionFilterOptions.all || isOnlyShowNamedVersions
-
-  return (
-    <PortalToFollowElem
-      placement={'bottom-end'}
-      offset={{
-        mainAxis: 4,
-        crossAxis: 55,
-      }}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger onClick={() => setOpen(v => !v)}>
-        <div
-          className={cn(
-            'flex h-6 w-6 cursor-pointer items-center justify-center rounded-md p-0.5',
-            isFiltering ? 'bg-state-accent-active-alt' : 'hover:bg-state-base-hover',
-          )}
-        >
-          <RiFilter3Line className={cn('h-4 w-4', isFiltering ? 'text-text-accent' : ' text-text-tertiary')} />
-        </div>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[12]'>
-        <div className='flex w-[248px] flex-col rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg shadow-shadow-shadow-5 backdrop-blur-[5px]'>
-          <div className='flex flex-col p-1'>
-            {
-              options.map((option) => {
-                return (
-                  <FilterItem
-                    key={option.key}
-                    item={option}
-                    isSelected={filterValue === option.key}
-                    onClick={handleOnClick}
-                  />
-                )
-              })
-            }
-          </div>
-          <Divider type='horizontal' className='my-0 h-[1px] bg-divider-subtle' />
-          <FilterSwitch enabled={isOnlyShowNamedVersions} handleSwitch={handleSwitch} />
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default Filter
diff --git a/app/components/workflow/panel/version-history-panel/filter/use-filter.ts b/app/components/workflow/panel/version-history-panel/filter/use-filter.ts
deleted file mode 100644
index 1bc5571..0000000
--- a/app/components/workflow/panel/version-history-panel/filter/use-filter.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import { WorkflowVersionFilterOptions } from '../../../types'
-
-export const useFilterOptions = () => {
-  const { t } = useTranslation()
-
-  return [
-    {
-      key: WorkflowVersionFilterOptions.all,
-      name: t('workflow.versionHistory.filter.all'),
-    },
-    {
-      key: WorkflowVersionFilterOptions.onlyYours,
-      name: t('workflow.versionHistory.filter.onlyYours'),
-    },
-  ]
-}
diff --git a/app/components/workflow/panel/version-history-panel/index.tsx b/app/components/workflow/panel/version-history-panel/index.tsx
deleted file mode 100644
index a42eb0f..0000000
--- a/app/components/workflow/panel/version-history-panel/index.tsx
+++ /dev/null
@@ -1,279 +0,0 @@
-'use client'
-import React, { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiArrowDownDoubleLine, RiCloseLine, RiLoader2Line } from '@remixicon/react'
-import { useNodesSyncDraft, useWorkflowRun } from '../../hooks'
-import { useStore, useWorkflowStore } from '../../store'
-import { VersionHistoryContextMenuOptions, WorkflowVersionFilterOptions } from '../../types'
-import VersionHistoryItem from './version-history-item'
-import Filter from './filter'
-import type { VersionHistory } from '@/types/workflow'
-import { useStore as useAppStore } from '@/app/components/app/store'
-import { useDeleteWorkflow, useResetWorkflowVersionHistory, useUpdateWorkflow, useWorkflowVersionHistory } from '@/service/use-workflow'
-import Divider from '@/app/components/base/divider'
-import Loading from './loading'
-import Empty from './empty'
-import { useSelector as useAppContextSelector } from '@/context/app-context'
-import RestoreConfirmModal from './restore-confirm-modal'
-import DeleteConfirmModal from './delete-confirm-modal'
-import VersionInfoModal from '@/app/components/app/app-publisher/version-info-modal'
-import Toast from '@/app/components/base/toast'
-
-const HISTORY_PER_PAGE = 10
-const INITIAL_PAGE = 1
-
-const VersionHistoryPanel = () => {
-  const [filterValue, setFilterValue] = useState(WorkflowVersionFilterOptions.all)
-  const [isOnlyShowNamedVersions, setIsOnlyShowNamedVersions] = useState(false)
-  const [operatedItem, setOperatedItem] = useState<VersionHistory>()
-  const [restoreConfirmOpen, setRestoreConfirmOpen] = useState(false)
-  const [deleteConfirmOpen, setDeleteConfirmOpen] = useState(false)
-  const [editModalOpen, setEditModalOpen] = useState(false)
-  const workflowStore = useWorkflowStore()
-  const { handleSyncWorkflowDraft } = useNodesSyncDraft()
-  const { handleRestoreFromPublishedWorkflow, handleLoadBackupDraft } = useWorkflowRun()
-  const appDetail = useAppStore.getState().appDetail
-  const setShowWorkflowVersionHistoryPanel = useStore(s => s.setShowWorkflowVersionHistoryPanel)
-  const currentVersion = useStore(s => s.currentVersion)
-  const setCurrentVersion = useStore(s => s.setCurrentVersion)
-  const userProfile = useAppContextSelector(s => s.userProfile)
-  const { t } = useTranslation()
-
-  const {
-    data: versionHistory,
-    fetchNextPage,
-    hasNextPage,
-    isFetching,
-  } = useWorkflowVersionHistory({
-    appId: appDetail!.id,
-    initialPage: INITIAL_PAGE,
-    limit: HISTORY_PER_PAGE,
-    userId: filterValue === WorkflowVersionFilterOptions.onlyYours ? userProfile.id : '',
-    namedOnly: isOnlyShowNamedVersions,
-  })
-
-  const handleVersionClick = useCallback((item: VersionHistory) => {
-    if (item.id !== currentVersion?.id) {
-      setCurrentVersion(item)
-      handleRestoreFromPublishedWorkflow(item)
-    }
-  }, [currentVersion?.id, setCurrentVersion, handleRestoreFromPublishedWorkflow])
-
-  const handleNextPage = () => {
-    if (hasNextPage)
-      fetchNextPage()
-  }
-
-  const handleClose = () => {
-    handleLoadBackupDraft()
-    workflowStore.setState({ isRestoring: false })
-    setShowWorkflowVersionHistoryPanel(false)
-  }
-
-  const handleClickFilterItem = useCallback((value: WorkflowVersionFilterOptions) => {
-    setFilterValue(value)
-  }, [])
-
-  const handleSwitch = useCallback((value: boolean) => {
-    setIsOnlyShowNamedVersions(value)
-  }, [])
-
-  const handleResetFilter = useCallback(() => {
-    setFilterValue(WorkflowVersionFilterOptions.all)
-    setIsOnlyShowNamedVersions(false)
-  }, [])
-
-  const handleClickMenuItem = useCallback((item: VersionHistory, operation: VersionHistoryContextMenuOptions) => {
-    setOperatedItem(item)
-    switch (operation) {
-      case VersionHistoryContextMenuOptions.restore:
-        setRestoreConfirmOpen(true)
-        break
-      case VersionHistoryContextMenuOptions.edit:
-        setEditModalOpen(true)
-        break
-      case VersionHistoryContextMenuOptions.delete:
-        setDeleteConfirmOpen(true)
-        break
-    }
-  }, [])
-
-  const handleCancel = useCallback((operation: VersionHistoryContextMenuOptions) => {
-    switch (operation) {
-      case VersionHistoryContextMenuOptions.restore:
-        setRestoreConfirmOpen(false)
-        break
-      case VersionHistoryContextMenuOptions.edit:
-        setEditModalOpen(false)
-        break
-      case VersionHistoryContextMenuOptions.delete:
-        setDeleteConfirmOpen(false)
-        break
-    }
-  }, [])
-
-  const resetWorkflowVersionHistory = useResetWorkflowVersionHistory(appDetail!.id)
-
-  const handleRestore = useCallback((item: VersionHistory) => {
-    setShowWorkflowVersionHistoryPanel(false)
-    handleRestoreFromPublishedWorkflow(item)
-    workflowStore.setState({ isRestoring: false })
-    workflowStore.setState({ backupDraft: undefined })
-    handleSyncWorkflowDraft(true, false, {
-      onSuccess: () => {
-        Toast.notify({
-          type: 'success',
-          message: t('workflow.versionHistory.action.restoreSuccess'),
-        })
-      },
-      onError: () => {
-        Toast.notify({
-          type: 'error',
-          message: t('workflow.versionHistory.action.restoreFailure'),
-        })
-      },
-      onSettled: () => {
-        resetWorkflowVersionHistory()
-      },
-    })
-  }, [setShowWorkflowVersionHistoryPanel, handleSyncWorkflowDraft, workflowStore, handleRestoreFromPublishedWorkflow, resetWorkflowVersionHistory, t])
-
-  const { mutateAsync: deleteWorkflow } = useDeleteWorkflow(appDetail!.id)
-
-  const handleDelete = useCallback(async (id: string) => {
-    await deleteWorkflow(id, {
-      onSuccess: () => {
-        setDeleteConfirmOpen(false)
-        Toast.notify({
-          type: 'success',
-          message: t('workflow.versionHistory.action.deleteSuccess'),
-        })
-        resetWorkflowVersionHistory()
-      },
-      onError: () => {
-        Toast.notify({
-          type: 'error',
-          message: t('workflow.versionHistory.action.deleteFailure'),
-        })
-      },
-      onSettled: () => {
-        setDeleteConfirmOpen(false)
-      },
-    })
-  }, [t, deleteWorkflow, resetWorkflowVersionHistory])
-
-  const { mutateAsync: updateWorkflow } = useUpdateWorkflow(appDetail!.id)
-
-  const handleUpdateWorkflow = useCallback(async (params: { id?: string, title: string, releaseNotes: string }) => {
-    const { id, ...rest } = params
-    await updateWorkflow({
-      workflowId: id!,
-      ...rest,
-    }, {
-      onSuccess: () => {
-        setEditModalOpen(false)
-        Toast.notify({
-          type: 'success',
-          message: t('workflow.versionHistory.action.updateSuccess'),
-        })
-        resetWorkflowVersionHistory()
-      },
-      onError: () => {
-        Toast.notify({
-          type: 'error',
-          message: t('workflow.versionHistory.action.updateFailure'),
-        })
-      },
-      onSettled: () => {
-        setEditModalOpen(false)
-      },
-    })
-  }, [t, updateWorkflow, resetWorkflowVersionHistory])
-
-  return (
-    <div className='flex h-full w-[268px] flex-col rounded-l-2xl border-y-[0.5px] border-l-[0.5px] border-components-panel-border bg-components-panel-bg shadow-xl shadow-shadow-shadow-5'>
-      <div className='flex items-center gap-x-2 px-4 pt-3'>
-        <div className='system-xl-semibold flex-1 py-1 text-text-primary'>{t('workflow.versionHistory.title')}</div>
-        <Filter
-          filterValue={filterValue}
-          isOnlyShowNamedVersions={isOnlyShowNamedVersions}
-          onClickFilterItem={handleClickFilterItem}
-          handleSwitch={handleSwitch}
-        />
-        <Divider type='vertical' className='mx-1 h-3.5' />
-        <div
-          className='flex h-6 w-6 cursor-pointer items-center justify-center p-0.5'
-          onClick={handleClose}
-        >
-          <RiCloseLine className='h-4 w-4 text-text-tertiary' />
-        </div>
-      </div>
-      <div className="flex h-0 flex-1 flex-col">
-        <div className="flex-1 overflow-y-auto px-3 py-2">
-          {(isFetching && !versionHistory?.pages?.length)
-            ? (
-              <Loading />
-            )
-            : (
-              <>
-                {versionHistory?.pages?.map((page, pageNumber) => (
-                  page.items?.map((item, idx) => {
-                    const isLast = pageNumber === versionHistory.pages.length - 1 && idx === page.items.length - 1
-                    return <VersionHistoryItem
-                      key={item.id}
-                      item={item}
-                      currentVersion={currentVersion}
-                      latestVersionId={appDetail!.workflow!.id}
-                      onClick={handleVersionClick}
-                      handleClickMenuItem={handleClickMenuItem.bind(null, item)}
-                      isLast={isLast}
-                    />
-                  })
-                ))}
-                {!isFetching && (!versionHistory?.pages?.length || !versionHistory.pages[0].items.length) && (
-                  <Empty onResetFilter={handleResetFilter} />
-                )}
-              </>
-            )}
-        </div>
-        {hasNextPage && (
-          <div className='p-2'>
-            <div
-              className='flex cursor-pointer items-center gap-x-1'
-              onClick={handleNextPage}
-            >
-              <div className='item-center flex justify-center p-0.5'>
-                {isFetching
-                  ? <RiLoader2Line className='h-3.5 w-3.5 animate-spin text-text-accent' />
-                  : <RiArrowDownDoubleLine className='h-3.5 w-3.5 text-text-accent' />}
-              </div>
-              <div className='system-xs-medium-uppercase py-[1px] text-text-accent'>
-                {t('workflow.common.loadMore')}
-              </div>
-            </div>
-          </div>
-        )}
-      </div>
-      {restoreConfirmOpen && (<RestoreConfirmModal
-        isOpen={restoreConfirmOpen}
-        versionInfo={operatedItem!}
-        onClose={handleCancel.bind(null, VersionHistoryContextMenuOptions.restore)}
-        onRestore={handleRestore}
-      />)}
-      {deleteConfirmOpen && (<DeleteConfirmModal
-        isOpen={deleteConfirmOpen}
-        versionInfo={operatedItem!}
-        onClose={handleCancel.bind(null, VersionHistoryContextMenuOptions.delete)}
-        onDelete={handleDelete}
-      />)}
-      {editModalOpen && (<VersionInfoModal
-        isOpen={editModalOpen}
-        versionInfo={operatedItem}
-        onClose={handleCancel.bind(null, VersionHistoryContextMenuOptions.edit)}
-        onPublish={handleUpdateWorkflow}
-      />)}
-    </div>
-  )
-}
-
-export default React.memo(VersionHistoryPanel)
diff --git a/app/components/workflow/panel/version-history-panel/loading/index.tsx b/app/components/workflow/panel/version-history-panel/loading/index.tsx
deleted file mode 100644
index 2c4db66..0000000
--- a/app/components/workflow/panel/version-history-panel/loading/index.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import Item from './item'
-
-const itemConfig = Array.from({ length: 8 }).map((_, index) => {
-  return {
-    isFirst: index === 0,
-    isLast: index === 7,
-    titleWidth: (index + 1) % 2 === 0 ? 'w-1/3' : 'w-2/5',
-    releaseNotesWidth: (index + 1) % 2 === 0 ? 'w-3/4' : 'w-4/6',
-  }
-})
-
-const Loading = () => {
-  return <div className='relative w-full overflow-y-hidden'>
-    <div className='absolute left-0 top-0 z-10 h-full w-full bg-dataset-chunk-list-mask-bg' />
-    {itemConfig.map((config, index) => <Item key={index} {...config} />)}
-  </div>
-}
-
-export default Loading
diff --git a/app/components/workflow/panel/version-history-panel/loading/item.tsx b/app/components/workflow/panel/version-history-panel/loading/item.tsx
deleted file mode 100644
index 96d1fde..0000000
--- a/app/components/workflow/panel/version-history-panel/loading/item.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import React, { type FC } from 'react'
-import cn from '@/utils/classnames'
-
-type ItemProps = {
-  titleWidth: string
-  releaseNotesWidth: string
-  isFirst: boolean
-  isLast: boolean
-}
-
-const Item: FC<ItemProps> = ({
-  titleWidth,
-  releaseNotesWidth,
-  isFirst,
-  isLast,
-}) => {
-  return (
-    <div className='relative flex gap-x-1 p-2' >
-      {!isLast && <div className='absolute left-4 top-6 h-[calc(100%-0.75rem)] w-0.5 bg-divider-subtle' />}
-      <div className=' flex h-5 w-[18px] shrink-0 items-center justify-center'>
-        <div className='h-2 w-2 rounded-lg border-[2px] border-text-quaternary' />
-      </div>
-      <div className='flex grow flex-col gap-y-0.5'>
-        <div className='flex h-3.5 items-center'>
-          <div className={cn('h-2 w-full rounded-sm bg-text-quaternary opacity-20', titleWidth)} />
-        </div>
-        {
-          !isFirst && (
-            <div className='flex h-3 items-center'>
-              <div className={cn('h-1.5 w-full rounded-sm bg-text-quaternary opacity-20', releaseNotesWidth)} />
-            </div>
-          )
-        }
-      </div>
-    </div>
-
-  )
-}
-
-export default React.memo(Item)
diff --git a/app/components/workflow/panel/version-history-panel/restore-confirm-modal.tsx b/app/components/workflow/panel/version-history-panel/restore-confirm-modal.tsx
deleted file mode 100644
index d8394d2..0000000
--- a/app/components/workflow/panel/version-history-panel/restore-confirm-modal.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import React, { type FC } from 'react'
-import Modal from '@/app/components/base/modal'
-import type { VersionHistory } from '@/types/workflow'
-import { useTranslation } from 'react-i18next'
-import Button from '@/app/components/base/button'
-
-type RestoreConfirmModalProps = {
-  isOpen: boolean
-  versionInfo: VersionHistory
-  onClose: () => void
-  onRestore: (item: VersionHistory) => void
-}
-
-const RestoreConfirmModal: FC<RestoreConfirmModalProps> = ({
-  isOpen,
-  versionInfo,
-  onClose,
-  onRestore,
-}) => {
-  const { t } = useTranslation()
-
-  return <Modal className='p-0' isShow={isOpen} onClose={onClose}>
-    <div className='flex flex-col gap-y-2 p-6 pb-4 '>
-      <div className='title-2xl-semi-bold text-text-primary'>
-        {`${t('workflow.common.restore')} ${versionInfo.marked_name || t('workflow.versionHistory.defaultName')}`}
-      </div>
-      <p className='system-md-regular text-text-secondary'>
-        {t('workflow.versionHistory.restorationTip')}
-      </p>
-    </div>
-    <div className='flex items-center justify-end gap-x-2 p-6'>
-      <Button onClick={onClose}>
-        {t('common.operation.cancel')}
-      </Button>
-      <Button variant='primary' onClick={onRestore.bind(null, versionInfo)}>
-        {t('workflow.common.restore')}
-      </Button>
-    </div>
-  </Modal>
-}
-
-export default RestoreConfirmModal
diff --git a/app/components/workflow/panel/version-history-panel/version-history-item.tsx b/app/components/workflow/panel/version-history-panel/version-history-item.tsx
deleted file mode 100644
index 98fd7ce..0000000
--- a/app/components/workflow/panel/version-history-panel/version-history-item.tsx
+++ /dev/null
@@ -1,137 +0,0 @@
-import React, { useEffect, useState } from 'react'
-import dayjs from 'dayjs'
-import { useTranslation } from 'react-i18next'
-import ContextMenu from './context-menu'
-import cn from '@/utils/classnames'
-import type { VersionHistory } from '@/types/workflow'
-import { type VersionHistoryContextMenuOptions, WorkflowVersion } from '../../types'
-
-type VersionHistoryItemProps = {
-  item: VersionHistory
-  currentVersion: VersionHistory | null
-  latestVersionId: string
-  onClick: (item: VersionHistory) => void
-  handleClickMenuItem: (operation: VersionHistoryContextMenuOptions) => void
-  isLast: boolean
-}
-
-const formatVersion = (versionHistory: VersionHistory, latestVersionId: string): string => {
-  const { version, id } = versionHistory
-  if (version === WorkflowVersion.Draft)
-    return WorkflowVersion.Draft
-  if (id === latestVersionId)
-    return WorkflowVersion.Latest
-  try {
-    const date = new Date(version)
-    if (Number.isNaN(date.getTime()))
-      return version
-
-    // format as YYYY-MM-DD HH:mm:ss
-    return date.toISOString().slice(0, 19).replace('T', ' ')
-  }
-  catch {
-    return version
-  }
-}
-
-const VersionHistoryItem: React.FC<VersionHistoryItemProps> = ({
-  item,
-  currentVersion,
-  latestVersionId,
-  onClick,
-  handleClickMenuItem,
-  isLast,
-}) => {
-  const { t } = useTranslation()
-  const [isHovering, setIsHovering] = useState(false)
-  const [open, setOpen] = useState(false)
-
-  const formatTime = (time: number) => dayjs.unix(time).format('YYYY-MM-DD HH:mm')
-  const formattedVersion = formatVersion(item, latestVersionId)
-  const isSelected = item.version === currentVersion?.version
-  const isDraft = formattedVersion === WorkflowVersion.Draft
-  const isLatest = formattedVersion === WorkflowVersion.Latest
-
-  useEffect(() => {
-    if (isDraft)
-      onClick(item)
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [])
-
-  const handleClickItem = () => {
-    if (isSelected)
-      return
-    onClick(item)
-  }
-
-  return (
-    <div
-      className={cn(
-        'group relative flex gap-x-1 rounded-lg p-2',
-        isSelected ? 'cursor-not-allowed bg-state-accent-active' : 'cursor-pointer hover:bg-state-base-hover',
-      )}
-      onClick={handleClickItem}
-      onMouseEnter={() => setIsHovering(true)}
-      onMouseLeave={() => {
-        setIsHovering(false)
-        setOpen(false)
-      }}
-      onContextMenu={(e) => {
-        e.preventDefault()
-        setOpen(true)
-      }}
-    >
-      {!isLast && <div className='absolute left-4 top-6 h-[calc(100%-0.75rem)] w-0.5 bg-divider-subtle' />}
-      <div className=' flex h-5 w-[18px] shrink-0 items-center justify-center'>
-        <div className={cn(
-          'h-2 w-2 rounded-lg border-[2px]',
-          isSelected ? 'border-text-accent' : 'border-text-quaternary',
-        )}/>
-      </div>
-      <div className='flex grow flex-col gap-y-0.5 overflow-hidden'>
-        <div className='mr-6 flex h-5 items-center gap-x-1'>
-          <div className={cn(
-            'system-sm-semibold truncate py-[1px]',
-            isSelected ? 'text-text-accent' : 'text-text-secondary',
-          )}>
-            {isDraft ? t('workflow.versionHistory.currentDraft') : item.marked_name || t('workflow.versionHistory.defaultName')}
-          </div>
-          {isLatest && (
-            <div className='system-2xs-medium-uppercase flex h-5 shrink-0 items-center rounded-md border border-text-accent-secondary
-            bg-components-badge-bg-dimm px-[5px] text-text-accent-secondary'>
-              {t('workflow.versionHistory.latest')}
-            </div>
-          )}
-        </div>
-        {
-          !isDraft && (
-            <div className='system-xs-regular break-words text-text-secondary'>
-              {item.marked_comment || ''}
-            </div>
-          )
-        }
-        {
-          !isDraft && (
-            <div className='system-xs-regular truncate text-text-tertiary'>
-              {`${formatTime(item.created_at)} 路 ${item.created_by.name}`}
-            </div>
-          )
-        }
-      </div>
-      {/* Context Menu */}
-      {!isDraft && isHovering && (
-        <div className='absolute right-1 top-1'>
-          <ContextMenu
-            isShowDelete={!isLatest}
-            isNamedVersion={!!item.marked_name}
-            open={open}
-            setOpen={setOpen}
-            handleClickMenuItem={handleClickMenuItem}
-          />
-        </div>
-      )}
-    </div>
-  )
-}
-
-export default React.memo(VersionHistoryItem)
diff --git a/app/components/workflow/plugin-dependency/hooks.ts b/app/components/workflow/plugin-dependency/hooks.ts
deleted file mode 100644
index 1aa52cf..0000000
--- a/app/components/workflow/plugin-dependency/hooks.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { useCallback } from 'react'
-import { useStore as usePluginDependenciesStore } from './store'
-import { useMutationCheckDependencies } from '@/service/use-plugins'
-
-export const usePluginDependencies = () => {
-  const { mutateAsync } = useMutationCheckDependencies()
-
-  const handleCheckPluginDependencies = useCallback(async (appId: string) => {
-    const { leaked_dependencies } = await mutateAsync(appId)
-    const { setDependencies } = usePluginDependenciesStore.getState()
-    setDependencies(leaked_dependencies)
-  }, [mutateAsync])
-
-  return {
-    handleCheckPluginDependencies,
-  }
-}
diff --git a/app/components/workflow/plugin-dependency/index.tsx b/app/components/workflow/plugin-dependency/index.tsx
deleted file mode 100644
index 185722e..0000000
--- a/app/components/workflow/plugin-dependency/index.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { useCallback } from 'react'
-import { useStore } from './store'
-import InstallBundle from '@/app/components/plugins/install-plugin/install-bundle'
-
-const PluginDependency = () => {
-  const dependencies = useStore(s => s.dependencies)
-
-  const handleCancelInstallBundle = useCallback(() => {
-    const { setDependencies } = useStore.getState()
-    setDependencies([])
-  }, [])
-
-  if (!dependencies.length)
-    return null
-
-  return (
-    <InstallBundle
-      fromDSLPayload={dependencies}
-      onClose={handleCancelInstallBundle}
-    />
-  )
-}
-
-export default PluginDependency
diff --git a/app/components/workflow/plugin-dependency/store.ts b/app/components/workflow/plugin-dependency/store.ts
deleted file mode 100644
index a8e1d81..0000000
--- a/app/components/workflow/plugin-dependency/store.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { create } from 'zustand'
-import type { Dependency } from '@/app/components/plugins/types'
-
-type Shape = {
-  dependencies: Dependency[]
-  setDependencies: (dependencies: Dependency[]) => void
-}
-export const useStore = create<Shape>(set => ({
-  dependencies: [],
-  setDependencies: dependencies => set({ dependencies }),
-}))
diff --git a/app/components/workflow/run/agent-log/agent-log-item.tsx b/app/components/workflow/run/agent-log/agent-log-item.tsx
deleted file mode 100644
index ce81e36..0000000
--- a/app/components/workflow/run/agent-log/agent-log-item.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-import {
-  useMemo,
-  useState,
-} from 'react'
-import {
-  RiArrowRightSLine,
-  RiListView,
-} from '@remixicon/react'
-import cn from '@/utils/classnames'
-import Button from '@/app/components/base/button'
-import type { AgentLogItemWithChildren } from '@/types/workflow'
-import NodeStatusIcon from '@/app/components/workflow/nodes/_base/components/node-status-icon'
-import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor'
-import { CodeLanguage } from '@/app/components/workflow/nodes/code/types'
-import BlockIcon from '@/app/components/workflow/block-icon'
-import { BlockEnum } from '@/app/components/workflow/types'
-import useGetIcon from '@/app/components/plugins/install-plugin/base/use-get-icon'
-
-type AgentLogItemProps = {
-  item: AgentLogItemWithChildren
-  onShowAgentOrToolLog: (detail: AgentLogItemWithChildren) => void
-}
-const AgentLogItem = ({
-  item,
-  onShowAgentOrToolLog,
-}: AgentLogItemProps) => {
-  const {
-    label,
-    status,
-    children,
-    data,
-    metadata,
-  } = item
-  const [expanded, setExpanded] = useState(false)
-  const { getIconUrl } = useGetIcon()
-  const toolIcon = useMemo(() => {
-    const icon = metadata?.icon
-
-    if (icon) {
-      if (icon.includes('http'))
-        return icon
-
-      return getIconUrl(icon)
-    }
-
-    return ''
-  }, [getIconUrl, metadata?.icon])
-
-  const mergeStatus = useMemo(() => {
-    if (status === 'start')
-      return 'running'
-
-    return status
-  }, [status])
-
-  return (
-    <div className='rounded-[10px] border-[0.5px] border-components-panel-border bg-background-default'>
-      <div
-        className={cn(
-          'flex cursor-pointer items-center pb-2 pl-1.5 pr-3 pt-2',
-          expanded && 'pb-1',
-        )}
-        onClick={() => setExpanded(!expanded)}
-      >
-        {
-          expanded
-            ? <RiArrowRightSLine className='h-4 w-4 shrink-0 rotate-90 text-text-quaternary' />
-            : <RiArrowRightSLine className='h-4 w-4 shrink-0 text-text-quaternary' />
-        }
-        <BlockIcon
-          className='mr-1.5 shrink-0'
-          type={toolIcon ? BlockEnum.Tool : BlockEnum.Agent}
-          toolIcon={toolIcon}
-        />
-        <div
-          className='system-sm-semibold-uppercase grow truncate text-text-secondary'
-          title={label}
-        >
-          {label}
-        </div>
-        {
-          metadata?.elapsed_time && (
-            <div className='system-xs-regular mr-2 shrink-0 text-text-tertiary'>{metadata?.elapsed_time?.toFixed(3)}s</div>
-          )
-        }
-        <NodeStatusIcon status={mergeStatus} />
-      </div>
-      {
-        expanded && (
-          <div className='p-1 pt-0'>
-            {
-              !!children?.length && (
-                <Button
-                  className='mb-1 flex w-full items-center justify-between'
-                  variant='tertiary'
-                  onClick={() => onShowAgentOrToolLog(item)}
-                >
-                  <div className='flex items-center'>
-                    <RiListView className='mr-1 h-4 w-4 shrink-0 text-components-button-tertiary-text' />
-                    {`${children.length} Action Logs`}
-                  </div>
-                  <div className='flex'>
-                    <RiArrowRightSLine className='h-4 w-4 shrink-0 text-components-button-tertiary-text' />
-                  </div>
-                </Button>
-              )
-            }
-            {
-              data && (
-                <CodeEditor
-                  readOnly
-                  title={<div>{'data'.toLocaleUpperCase()}</div>}
-                  language={CodeLanguage.json}
-                  value={data}
-                  isJSONStringifyBeauty
-                />
-              )
-            }
-          </div>
-        )
-      }
-    </div>
-  )
-}
-
-export default AgentLogItem
diff --git a/app/components/workflow/run/agent-log/agent-log-nav-more.tsx b/app/components/workflow/run/agent-log/agent-log-nav-more.tsx
deleted file mode 100644
index 9f14aa1..0000000
--- a/app/components/workflow/run/agent-log/agent-log-nav-more.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import { useState } from 'react'
-import { RiMoreLine } from '@remixicon/react'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-import Button from '@/app/components/base/button'
-import type { AgentLogItemWithChildren } from '@/types/workflow'
-
-type AgentLogNavMoreProps = {
-  options: { id: string; label: string }[]
-  onShowAgentOrToolLog: (detail?: AgentLogItemWithChildren) => void
-}
-const AgentLogNavMore = ({
-  options,
-  onShowAgentOrToolLog,
-}: AgentLogNavMoreProps) => {
-  const [open, setOpen] = useState(false)
-
-  return (
-    <PortalToFollowElem
-      placement='bottom-start'
-      offset={{
-        mainAxis: 2,
-        crossAxis: -54,
-      }}
-      open={open}
-      onOpenChange={setOpen}
-    >
-      <PortalToFollowElemTrigger>
-        <Button
-          className='h-6 w-6'
-          variant='ghost-accent'
-        >
-          <RiMoreLine className='h-4 w-4' />
-        </Button>
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent>
-        <div className='w-[136px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg'>
-          {
-            options.map(option => (
-              <div
-                key={option.id}
-                className='system-md-regular flex h-8 cursor-pointer items-center rounded-lg px-2 text-text-secondary hover:bg-state-base-hover'
-                onClick={() => {
-                  onShowAgentOrToolLog(option as AgentLogItemWithChildren)
-                  setOpen(false)
-                }}
-              >
-                {option.label}
-              </div>
-            ))
-          }
-        </div>
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default AgentLogNavMore
diff --git a/app/components/workflow/run/agent-log/agent-log-nav.tsx b/app/components/workflow/run/agent-log/agent-log-nav.tsx
deleted file mode 100644
index 9307f31..0000000
--- a/app/components/workflow/run/agent-log/agent-log-nav.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-import { RiArrowLeftLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import AgentLogNavMore from './agent-log-nav-more'
-import Button from '@/app/components/base/button'
-import type { AgentLogItemWithChildren } from '@/types/workflow'
-
-type AgentLogNavProps = {
-  agentOrToolLogItemStack: AgentLogItemWithChildren[]
-  onShowAgentOrToolLog: (detail?: AgentLogItemWithChildren) => void
-}
-const AgentLogNav = ({
-  agentOrToolLogItemStack,
-  onShowAgentOrToolLog,
-}: AgentLogNavProps) => {
-  const { t } = useTranslation()
-  const agentOrToolLogItemStackLength = agentOrToolLogItemStack.length
-  const first = agentOrToolLogItemStack[0]
-  const mid = agentOrToolLogItemStack.slice(1, -1)
-  const end = agentOrToolLogItemStack.at(-1)
-
-  return (
-    <div className='flex h-8 items-center bg-components-panel-bg p-1 pr-3'>
-      <Button
-        className='shrink-0 px-[5px]'
-        size='small'
-        variant='ghost-accent'
-        onClick={() => {
-          onShowAgentOrToolLog()
-        }}
-      >
-        <RiArrowLeftLine className='mr-1 h-3.5 w-3.5' />
-        AGENT
-      </Button>
-      <div className='system-xs-regular mx-0.5 shrink-0 text-divider-deep'>/</div>
-      {
-        agentOrToolLogItemStackLength > 1
-          ? (
-            <Button
-              className='shrink-0 px-[5px]'
-              size='small'
-              variant='ghost-accent'
-              onClick={() => onShowAgentOrToolLog(first)}
-            >
-              {t('workflow.nodes.agent.strategy.label')}
-            </Button>
-          )
-          : (
-            <div className='system-xs-medium-uppercase flex items-center px-[5px] text-text-tertiary'>
-              {t('workflow.nodes.agent.strategy.label')}
-            </div>
-          )
-      }
-      {
-        !!mid.length && (
-          <>
-            <div className='system-xs-regular mx-0.5 shrink-0 text-divider-deep'>/</div>
-            <AgentLogNavMore
-              options={mid}
-              onShowAgentOrToolLog={onShowAgentOrToolLog}
-            />
-          </>
-        )
-      }
-      {
-        !!end && agentOrToolLogItemStackLength > 1 && (
-          <>
-            <div className='system-xs-regular mx-0.5 shrink-0 text-divider-deep'>/</div>
-            <div className='system-xs-medium-uppercase flex items-center px-[5px] text-text-tertiary'>
-              {end.label}
-            </div>
-          </>
-        )
-      }
-    </div>
-  )
-}
-
-export default AgentLogNav
diff --git a/app/components/workflow/run/agent-log/agent-log-trigger.tsx b/app/components/workflow/run/agent-log/agent-log-trigger.tsx
deleted file mode 100644
index 60b4097..0000000
--- a/app/components/workflow/run/agent-log/agent-log-trigger.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import { RiArrowRightLine } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import type {
-  AgentLogItemWithChildren,
-  NodeTracing,
-} from '@/types/workflow'
-
-type AgentLogTriggerProps = {
-  nodeInfo: NodeTracing
-  onShowAgentOrToolLog: (detail?: AgentLogItemWithChildren) => void
-}
-const AgentLogTrigger = ({
-  nodeInfo,
-  onShowAgentOrToolLog,
-}: AgentLogTriggerProps) => {
-  const { t } = useTranslation()
-  const { agentLog, execution_metadata } = nodeInfo
-  const agentStrategy = execution_metadata?.tool_info?.agent_strategy
-
-  return (
-    <div
-      className='cursor-pointer rounded-[10px] bg-components-button-tertiary-bg'
-      onClick={() => {
-        onShowAgentOrToolLog({ id: nodeInfo.id, children: agentLog || [] } as AgentLogItemWithChildren)
-      }}
-    >
-      <div className='system-2xs-medium-uppercase flex items-center px-3 pt-2 text-text-tertiary'>
-        {t('workflow.nodes.agent.strategy.label')}
-      </div>
-      <div className='flex items-center pb-1.5 pl-3 pr-2 pt-1'>
-        {
-          agentStrategy && (
-            <div className='system-xs-medium grow text-text-secondary'>
-              {agentStrategy}
-            </div>
-          )
-        }
-        <div
-          className='system-xs-regular-uppercase flex shrink-0 cursor-pointer items-center px-[1px] text-text-tertiary'
-        >
-          {t('runLog.detail')}
-          <RiArrowRightLine className='ml-0.5 h-3.5 w-3.5' />
-        </div>
-      </div>
-    </div>
-  )
-}
-
-export default AgentLogTrigger
diff --git a/app/components/workflow/run/agent-log/agent-result-panel.tsx b/app/components/workflow/run/agent-log/agent-result-panel.tsx
deleted file mode 100644
index c2fbac7..0000000
--- a/app/components/workflow/run/agent-log/agent-result-panel.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { RiAlertFill } from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import AgentLogItem from './agent-log-item'
-import AgentLogNav from './agent-log-nav'
-import type { AgentLogItemWithChildren } from '@/types/workflow'
-
-type AgentResultPanelProps = {
-  agentOrToolLogItemStack: AgentLogItemWithChildren[]
-  agentOrToolLogListMap: Record<string, AgentLogItemWithChildren[]>
-  onShowAgentOrToolLog: (detail?: AgentLogItemWithChildren) => void
-}
-const AgentResultPanel = ({
-  agentOrToolLogItemStack,
-  agentOrToolLogListMap,
-  onShowAgentOrToolLog,
-}: AgentResultPanelProps) => {
-  const { t } = useTranslation()
-  const top = agentOrToolLogItemStack[agentOrToolLogItemStack.length - 1]
-  const list = agentOrToolLogListMap[top.id]
-
-  return (
-    <div className='overflow-y-auto bg-background-section'>
-      <AgentLogNav
-        agentOrToolLogItemStack={agentOrToolLogItemStack}
-        onShowAgentOrToolLog={onShowAgentOrToolLog}
-      />
-      {
-        <div className='space-y-1 p-2'>
-          {
-            list.map(item => (
-              <AgentLogItem
-                key={item.id}
-                item={item}
-                onShowAgentOrToolLog={onShowAgentOrToolLog}
-              />
-            ))
-          }
-        </div>
-      }
-      {
-        top.hasCircle && (
-          <div className='mt-1 flex items-center rounded-xl border border-components-panel-border bg-components-panel-bg-blur px-3 pr-2 shadow-md'>
-            <div
-              className='absolute inset-0 rounded-xl opacity-[0.4]'
-              style={{
-                background: 'linear-gradient(92deg, rgba(247, 144, 9, 0.25) 0%, rgba(255, 255, 255, 0.00) 100%)',
-              }}
-            ></div>
-            <RiAlertFill className='mr-1.5 h-4 w-4 text-text-warning-secondary' />
-            <div className='system-xs-medium text-text-primary'>
-              {t('runLog.circularInvocationTip')}
-            </div>
-          </div>
-        )
-      }
-    </div>
-  )
-}
-
-export default AgentResultPanel
diff --git a/app/components/workflow/run/agent-log/index.tsx b/app/components/workflow/run/agent-log/index.tsx
deleted file mode 100644
index a39f541..0000000
--- a/app/components/workflow/run/agent-log/index.tsx
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as AgentLogTrigger } from './agent-log-trigger'
-export { default as AgentResultPanel } from './agent-result-panel'
diff --git a/app/components/workflow/run/assets/highlight-dark.svg b/app/components/workflow/run/assets/highlight-dark.svg
deleted file mode 100644
index 472da3d..0000000
--- a/app/components/workflow/run/assets/highlight-dark.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<svg width="237" height="50" viewBox="0 0 237 50" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path opacity="0.5" d="M0 8C0 3.58172 3.58172 0 8 0H237L215.033 50H8C3.58172 50 0 46.4183 0 42V8Z" fill="url(#paint0_linear_3552_29170)"/>
-<defs>
-<linearGradient id="paint0_linear_3552_29170" x1="-4.89158e-08" y1="4.62963" x2="168.013" y2="23.1752" gradientUnits="userSpaceOnUse">
-<stop stop-color="white" stop-opacity="0.03"/>
-<stop offset="1" stop-color="white" stop-opacity="0.05"/>
-</linearGradient>
-</defs>
-</svg>
diff --git a/app/components/workflow/run/hooks.ts b/app/components/workflow/run/hooks.ts
deleted file mode 100644
index 1835eb5..0000000
--- a/app/components/workflow/run/hooks.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-import {
-  useCallback,
-  useRef,
-  useState,
-} from 'react'
-import { useBoolean } from 'ahooks'
-import type {
-  AgentLogItemWithChildren,
-  IterationDurationMap,
-  LoopDurationMap,
-  LoopVariableMap,
-  NodeTracing,
-} from '@/types/workflow'
-
-export const useLogs = () => {
-  const [showRetryDetail, {
-    setTrue: setShowRetryDetailTrue,
-    setFalse: setShowRetryDetailFalse,
-  }] = useBoolean(false)
-  const [retryResultList, setRetryResultList] = useState<NodeTracing[]>([])
-  const handleShowRetryResultList = useCallback((detail: NodeTracing[]) => {
-    setShowRetryDetailTrue()
-    setRetryResultList(detail)
-  }, [setShowRetryDetailTrue, setRetryResultList])
-
-  const [showIteratingDetail, {
-    setTrue: setShowIteratingDetailTrue,
-    setFalse: setShowIteratingDetailFalse,
-  }] = useBoolean(false)
-  const [iterationResultList, setIterationResultList] = useState<NodeTracing[][]>([])
-  const [iterationResultDurationMap, setIterationResultDurationMap] = useState<IterationDurationMap>({})
-  const handleShowIterationResultList = useCallback((detail: NodeTracing[][], iterDurationMap: IterationDurationMap) => {
-    setShowIteratingDetailTrue()
-    setIterationResultList(detail)
-    setIterationResultDurationMap(iterDurationMap)
-  }, [setShowIteratingDetailTrue, setIterationResultList, setIterationResultDurationMap])
-
-  const [showLoopingDetail, {
-    setTrue: setShowLoopingDetailTrue,
-    setFalse: setShowLoopingDetailFalse,
-  }] = useBoolean(false)
-  const [loopResultList, setLoopResultList] = useState<NodeTracing[][]>([])
-  const [loopResultDurationMap, setLoopResultDurationMap] = useState<LoopDurationMap>({})
-  const [loopResultVariableMap, setLoopResultVariableMap] = useState<Record<string, any>>({})
-  const handleShowLoopResultList = useCallback((detail: NodeTracing[][], loopDurationMap: LoopDurationMap, loopVariableMap: LoopVariableMap) => {
-    setShowLoopingDetailTrue()
-    setLoopResultList(detail)
-    setLoopResultDurationMap(loopDurationMap)
-    setLoopResultVariableMap(loopVariableMap)
-  }, [setShowLoopingDetailTrue, setLoopResultList, setLoopResultDurationMap])
-
-  const [agentOrToolLogItemStack, setAgentOrToolLogItemStack] = useState<AgentLogItemWithChildren[]>([])
-  const agentOrToolLogItemStackRef = useRef(agentOrToolLogItemStack)
-  const [agentOrToolLogListMap, setAgentOrToolLogListMap] = useState<Record<string, AgentLogItemWithChildren[]>>({})
-  const agentOrToolLogListMapRef = useRef(agentOrToolLogListMap)
-  const handleShowAgentOrToolLog = useCallback((detail?: AgentLogItemWithChildren) => {
-    if (!detail) {
-      setAgentOrToolLogItemStack([])
-      agentOrToolLogItemStackRef.current = []
-      return
-    }
-    const { id, children } = detail
-    let currentAgentOrToolLogItemStack = agentOrToolLogItemStackRef.current.slice()
-    const index = currentAgentOrToolLogItemStack.findIndex(logItem => logItem.id === id)
-
-    if (index > -1)
-      currentAgentOrToolLogItemStack = currentAgentOrToolLogItemStack.slice(0, index + 1)
-    else
-      currentAgentOrToolLogItemStack = [...currentAgentOrToolLogItemStack.slice(), detail]
-
-    setAgentOrToolLogItemStack(currentAgentOrToolLogItemStack)
-    agentOrToolLogItemStackRef.current = currentAgentOrToolLogItemStack
-
-    if (children) {
-      setAgentOrToolLogListMap({
-        ...agentOrToolLogListMapRef.current,
-        [id]: children,
-      })
-    }
-  }, [setAgentOrToolLogItemStack, setAgentOrToolLogListMap])
-
-  return {
-    showSpecialResultPanel: showRetryDetail || showIteratingDetail || showLoopingDetail || !!agentOrToolLogItemStack.length,
-    showRetryDetail,
-    setShowRetryDetailTrue,
-    setShowRetryDetailFalse,
-    retryResultList,
-    setRetryResultList,
-    handleShowRetryResultList,
-
-    showIteratingDetail,
-    setShowIteratingDetailTrue,
-    setShowIteratingDetailFalse,
-    iterationResultList,
-    setIterationResultList,
-    iterationResultDurationMap,
-    setIterationResultDurationMap,
-    handleShowIterationResultList,
-
-    showLoopingDetail,
-    setShowLoopingDetailTrue,
-    setShowLoopingDetailFalse,
-    loopResultList,
-    setLoopResultList,
-    loopResultDurationMap,
-    setLoopResultDurationMap,
-    loopResultVariableMap,
-    setLoopResultVariableMap,
-    handleShowLoopResultList,
-
-    agentOrToolLogItemStack,
-    agentOrToolLogListMap,
-    handleShowAgentOrToolLog,
-  }
-}
diff --git a/app/components/workflow/run/iteration-log/index.tsx b/app/components/workflow/run/iteration-log/index.tsx
deleted file mode 100644
index 5cbe70f..0000000
--- a/app/components/workflow/run/iteration-log/index.tsx
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as IterationLogTrigger } from './iteration-log-trigger'
-export { default as IterationResultPanel } from './iteration-result-panel'
diff --git a/app/components/workflow/run/iteration-log/iteration-log-trigger.tsx b/app/components/workflow/run/iteration-log/iteration-log-trigger.tsx
deleted file mode 100644
index 91bcaf9..0000000
--- a/app/components/workflow/run/iteration-log/iteration-log-trigger.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import { RiArrowRightSLine } from '@remixicon/react'
-import Button from '@/app/components/base/button'
-import type {
-  IterationDurationMap,
-  NodeTracing,
-} from '@/types/workflow'
-import { Iteration } from '@/app/components/base/icons/src/vender/workflow'
-
-type IterationLogTriggerProps = {
-  nodeInfo: NodeTracing
-  allExecutions?: NodeTracing[]
-  onShowIterationResultList: (iterationResultList: NodeTracing[][], iterationResultDurationMap: IterationDurationMap) => void
-}
-const IterationLogTrigger = ({
-  nodeInfo,
-  allExecutions,
-  onShowIterationResultList,
-}: IterationLogTriggerProps) => {
-  const { t } = useTranslation()
-
-  const filterNodesForInstance = (key: string): NodeTracing[] => {
-    if (!allExecutions) return []
-
-    const parallelNodes = allExecutions.filter(exec =>
-      exec.execution_metadata?.parallel_mode_run_id === key,
-    )
-    if (parallelNodes.length > 0)
-      return parallelNodes
-
-    const serialIndex = parseInt(key, 10)
-    if (!isNaN(serialIndex)) {
-      const serialNodes = allExecutions.filter(exec =>
-        exec.execution_metadata?.iteration_id === nodeInfo.node_id
-        && exec.execution_metadata?.iteration_index === serialIndex,
-      )
-      if (serialNodes.length > 0)
-        return serialNodes
-    }
-
-    return []
-  }
-
-  const handleOnShowIterationDetail = (e: React.MouseEvent<HTMLButtonElement>) => {
-    e.stopPropagation()
-    e.nativeEvent.stopImmediatePropagation()
-
-    const iterationNodeMeta = nodeInfo.execution_metadata
-    const iterDurationMap = nodeInfo?.iterDurationMap || iterationNodeMeta?.iteration_duration_map || {}
-
-    let structuredList: NodeTracing[][] = []
-
-    if (iterationNodeMeta?.iteration_duration_map) {
-      const instanceKeys = Object.keys(iterationNodeMeta.iteration_duration_map)
-      structuredList = instanceKeys
-        .map(key => filterNodesForInstance(key))
-        .filter(branchNodes => branchNodes.length > 0)
-    }
-    else if (nodeInfo.details?.length) {
-      structuredList = nodeInfo.details
-    }
-
-    onShowIterationResultList(structuredList, iterDurationMap)
-  }
-
-  let displayIterationCount = 0
-  const iterMap = nodeInfo.execution_metadata?.iteration_duration_map
-  if (iterMap)
-    displayIterationCount = Object.keys(iterMap).length
-  else if (nodeInfo.details?.length)
-    displayIterationCount = nodeInfo.details.length
-  else if (nodeInfo.metadata?.iterator_length)
-    displayIterationCount = nodeInfo.metadata.iterator_length
-
-  const getErrorCount = (details: NodeTracing[][] | undefined) => {
-    if (!details || details.length === 0)
-      return 0
-    return details.reduce((acc, iteration) => {
-      if (iteration.some(item => item.status === 'failed'))
-        acc++
-      return acc
-    }, 0)
-  }
-  const errorCount = getErrorCount(nodeInfo.details)
-
-  return (
-    <Button
-      className='flex w-full cursor-pointer items-center gap-2 self-stretch rounded-lg border-none bg-components-button-tertiary-bg-hover px-3 py-2 hover:bg-components-button-tertiary-bg-hover'
-      onClick={handleOnShowIterationDetail}
-    >
-      <Iteration className='h-4 w-4 shrink-0 text-components-button-tertiary-text' />
-      <div className='system-sm-medium flex-1 text-left text-components-button-tertiary-text'>{t('workflow.nodes.iteration.iteration', { count: displayIterationCount })}{errorCount > 0 && (
-        <>
-          {t('workflow.nodes.iteration.comma')}
-          {t('workflow.nodes.iteration.error', { count: errorCount })}
-        </>
-      )}</div>
-      <RiArrowRightSLine className='h-4 w-4 shrink-0 text-components-button-tertiary-text' />
-    </Button>
-  )
-}
-
-export default IterationLogTrigger
diff --git a/app/components/workflow/run/iteration-log/iteration-result-panel.tsx b/app/components/workflow/run/iteration-log/iteration-result-panel.tsx
deleted file mode 100644
index 3d9ad87..0000000
--- a/app/components/workflow/run/iteration-log/iteration-result-panel.tsx
+++ /dev/null
@@ -1,128 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowLeftLine,
-  RiArrowRightSLine,
-  RiErrorWarningLine,
-  RiLoader2Line,
-} from '@remixicon/react'
-import { NodeRunningStatus } from '@/app/components/workflow/types'
-import TracingPanel from '@/app/components/workflow/run/tracing-panel'
-import { Iteration } from '@/app/components/base/icons/src/vender/workflow'
-import cn from '@/utils/classnames'
-import type { IterationDurationMap, NodeTracing } from '@/types/workflow'
-const i18nPrefix = 'workflow.singleRun'
-
-type Props = {
-  list: NodeTracing[][]
-  onBack: () => void
-  iterDurationMap?: IterationDurationMap
-}
-
-const IterationResultPanel: FC<Props> = ({
-  list,
-  onBack,
-  iterDurationMap,
-}) => {
-  const { t } = useTranslation()
-  const [expandedIterations, setExpandedIterations] = useState<Record<number, boolean>>({})
-
-  const toggleIteration = useCallback((index: number) => {
-    setExpandedIterations(prev => ({
-      ...prev,
-      [index]: !prev[index],
-    }))
-  }, [])
-  const countIterDuration = (iteration: NodeTracing[], iterDurationMap: IterationDurationMap): string => {
-    const IterRunIndex = iteration[0]?.execution_metadata?.iteration_index as number
-    const iterRunId = iteration[0]?.execution_metadata?.parallel_mode_run_id
-    const iterItem = iterDurationMap[iterRunId || IterRunIndex]
-    const duration = iterItem
-    return `${(duration && duration > 0.01) ? duration.toFixed(2) : 0.01}s`
-  }
-  const iterationStatusShow = (index: number, iteration: NodeTracing[], iterDurationMap?: IterationDurationMap) => {
-    const hasFailed = iteration.some(item => item.status === NodeRunningStatus.Failed)
-    const isRunning = iteration.some(item => item.status === NodeRunningStatus.Running)
-    const hasDurationMap = iterDurationMap && Object.keys(iterDurationMap).length !== 0
-
-    if (hasFailed)
-      return <RiErrorWarningLine className='h-4 w-4 text-text-destructive' />
-
-    if (isRunning)
-      return <RiLoader2Line className='h-3.5 w-3.5 animate-spin text-primary-600' />
-
-    return (
-      <>
-        {hasDurationMap && (
-          <div className='system-xs-regular text-text-tertiary'>
-            {countIterDuration(iteration, iterDurationMap)}
-          </div>
-        )}
-        <RiArrowRightSLine
-          className={cn(
-            'h-4 w-4 shrink-0 text-text-tertiary transition-transform duration-200',
-            expandedIterations[index] && 'rotate-90',
-          )}
-        />
-      </>
-    )
-  }
-
-  return (
-    <div className='bg-components-panel-bg'>
-      <div
-        className='flex h-8 cursor-pointer items-center border-b-[0.5px] border-b-divider-regular px-4 text-text-accent-secondary'
-        onClick={(e) => {
-          e.stopPropagation()
-          e.nativeEvent.stopImmediatePropagation()
-          onBack()
-        }}
-      >
-        <RiArrowLeftLine className='mr-1 h-4 w-4' />
-        <div className='system-sm-medium'>{t(`${i18nPrefix}.back`)}</div>
-      </div>
-      {/* List */}
-      <div className='bg-components-panel-bg p-2'>
-        {list.map((iteration, index) => (
-          <div key={index} className={cn('mb-1 overflow-hidden rounded-xl border-none bg-background-section-burn')}>
-            <div
-              className={cn(
-                'flex w-full cursor-pointer items-center justify-between px-3',
-                expandedIterations[index] ? 'pb-2 pt-3' : 'py-3',
-                'rounded-xl text-left',
-              )}
-              onClick={() => toggleIteration(index)}
-            >
-              <div className={cn('flex grow items-center gap-2')}>
-                <div className='flex h-4 w-4 shrink-0 items-center justify-center rounded-[5px] border-divider-subtle bg-util-colors-cyan-cyan-500'>
-                  <Iteration className='h-3 w-3 text-text-primary-on-surface' />
-                </div>
-                <span className='system-sm-semibold-uppercase grow text-text-primary'>
-                  {t(`${i18nPrefix}.iteration`)} {index + 1}
-                </span>
-                {iterationStatusShow(index, iteration, iterDurationMap)}
-              </div>
-            </div>
-            {expandedIterations[index] && <div
-              className="h-px grow bg-divider-subtle"
-            ></div>}
-            <div className={cn(
-              'transition-all duration-200',
-              expandedIterations[index]
-                ? 'opacity-100'
-                : 'max-h-0 overflow-hidden opacity-0',
-            )}>
-              <TracingPanel
-                list={iteration}
-                className='bg-background-section-burn'
-              />
-            </div>
-          </div>
-        ))}
-      </div>
-    </div>
-  )
-}
-export default React.memo(IterationResultPanel)
diff --git a/app/components/workflow/run/loop-log/index.tsx b/app/components/workflow/run/loop-log/index.tsx
deleted file mode 100644
index b80a24d..0000000
--- a/app/components/workflow/run/loop-log/index.tsx
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as LoopLogTrigger } from './loop-log-trigger'
-export { default as LoopResultPanel } from './loop-result-panel'
diff --git a/app/components/workflow/run/loop-log/loop-log-trigger.tsx b/app/components/workflow/run/loop-log/loop-log-trigger.tsx
deleted file mode 100644
index 76619ff..0000000
--- a/app/components/workflow/run/loop-log/loop-log-trigger.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import { RiArrowRightSLine } from '@remixicon/react'
-import Button from '@/app/components/base/button'
-import type {
-  LoopDurationMap,
-  LoopVariableMap,
-  NodeTracing,
-} from '@/types/workflow'
-import { Loop } from '@/app/components/base/icons/src/vender/workflow'
-
-type LoopLogTriggerProps = {
-  nodeInfo: NodeTracing
-  allExecutions?: NodeTracing[]
-  onShowLoopResultList: (loopResultList: NodeTracing[][], loopResultDurationMap: LoopDurationMap, loopVariableMap: LoopVariableMap) => void
-}
-const LoopLogTrigger = ({
-  nodeInfo,
-  allExecutions,
-  onShowLoopResultList,
-}: LoopLogTriggerProps) => {
-  const { t } = useTranslation()
-
-  const filterNodesForInstance = (key: string): NodeTracing[] => {
-    if (!allExecutions) return []
-
-    const parallelNodes = allExecutions.filter(exec =>
-      exec.execution_metadata?.parallel_mode_run_id === key,
-    )
-    if (parallelNodes.length > 0)
-      return parallelNodes
-
-    const serialIndex = parseInt(key, 10)
-    if (!isNaN(serialIndex)) {
-      const serialNodes = allExecutions.filter(exec =>
-        exec.execution_metadata?.loop_id === nodeInfo.node_id
-        && exec.execution_metadata?.loop_index === serialIndex,
-      )
-      if (serialNodes.length > 0)
-        return serialNodes
-    }
-
-    return []
-  }
-
-  const handleOnShowLoopDetail = (e: React.MouseEvent<HTMLButtonElement>) => {
-    e.stopPropagation()
-    e.nativeEvent.stopImmediatePropagation()
-
-    const loopNodeMeta = nodeInfo.execution_metadata
-    const loopDurMap = nodeInfo?.loopDurationMap || loopNodeMeta?.loop_duration_map || {}
-    const loopVarMap = loopNodeMeta?.loop_variable_map || {}
-
-    let structuredList: NodeTracing[][] = []
-
-    if (loopNodeMeta?.loop_duration_map) {
-      const instanceKeys = Object.keys(loopNodeMeta.loop_duration_map)
-      structuredList = instanceKeys
-        .map(key => filterNodesForInstance(key))
-        .filter(branchNodes => branchNodes.length > 0)
-    }
-    else if (nodeInfo.details?.length) {
-      structuredList = nodeInfo.details
-    }
-
-    onShowLoopResultList(
-      structuredList,
-      loopDurMap,
-      loopVarMap,
-    )
-  }
-
-  let displayLoopCount = 0
-  const loopMap = nodeInfo.execution_metadata?.loop_duration_map
-  if (loopMap)
-    displayLoopCount = Object.keys(loopMap).length
-  else if (nodeInfo.details?.length)
-    displayLoopCount = nodeInfo.details.length
-  else if (nodeInfo.metadata?.loop_length)
-    displayLoopCount = nodeInfo.metadata.loop_length
-
-  const getErrorCount = (details: NodeTracing[][] | undefined) => {
-    if (!details || details.length === 0)
-      return 0
-    return details.reduce((acc, loop) => {
-      if (loop.some(item => item.status === 'failed'))
-        acc++
-      return acc
-    }, 0)
-  }
-  const errorCount = getErrorCount(nodeInfo.details)
-
-  return (
-    <Button
-      className='flex w-full cursor-pointer items-center gap-2 self-stretch rounded-lg border-none bg-components-button-tertiary-bg-hover px-3 py-2 hover:bg-components-button-tertiary-bg-hover'
-      onClick={handleOnShowLoopDetail}
-    >
-      <Loop className='h-4 w-4 shrink-0 text-components-button-tertiary-text' />
-      <div className='system-sm-medium flex-1 text-left text-components-button-tertiary-text'>{t('workflow.nodes.loop.loop', { count: displayLoopCount })}{errorCount > 0 && (
-        <>
-          {t('workflow.nodes.loop.comma')}
-          {t('workflow.nodes.loop.error', { count: errorCount })}
-        </>
-      )}</div>
-      <RiArrowRightSLine className='h-4 w-4 shrink-0 text-components-button-tertiary-text' />
-    </Button>
-  )
-}
-
-export default LoopLogTrigger
diff --git a/app/components/workflow/run/loop-log/loop-result-panel.tsx b/app/components/workflow/run/loop-log/loop-result-panel.tsx
deleted file mode 100644
index 1887153..0000000
--- a/app/components/workflow/run/loop-log/loop-result-panel.tsx
+++ /dev/null
@@ -1,148 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowLeftLine,
-  RiArrowRightSLine,
-  RiErrorWarningLine,
-  RiLoader2Line,
-} from '@remixicon/react'
-import { NodeRunningStatus } from '@/app/components/workflow/types'
-import TracingPanel from '@/app/components/workflow/run/tracing-panel'
-import { Loop } from '@/app/components/base/icons/src/vender/workflow'
-import cn from '@/utils/classnames'
-import type { LoopDurationMap, LoopVariableMap, NodeTracing } from '@/types/workflow'
-import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor'
-import { CodeLanguage } from '@/app/components/workflow/nodes/code/types'
-const i18nPrefix = 'workflow.singleRun'
-
-type Props = {
-  list: NodeTracing[][]
-  onBack: () => void
-  loopDurationMap?: LoopDurationMap
-  loopVariableMap?: LoopVariableMap
-}
-
-const LoopResultPanel: FC<Props> = ({
-  list,
-  onBack,
-  loopDurationMap,
-  loopVariableMap,
-}) => {
-  const { t } = useTranslation()
-  const [expandedLoops, setExpandedLoops] = useState<Record<number, boolean>>({})
-
-  const toggleLoop = useCallback((index: number) => {
-    setExpandedLoops(prev => ({
-      ...prev,
-      [index]: !prev[index],
-    }))
-  }, [])
-
-  const countLoopDuration = (loop: NodeTracing[], loopDurationMap: LoopDurationMap): string => {
-    const loopRunIndex = loop[0]?.execution_metadata?.loop_index as number
-    const loopRunId = loop[0]?.execution_metadata?.parallel_mode_run_id
-    const loopItem = loopDurationMap[loopRunId || loopRunIndex]
-    const duration = loopItem
-    return `${(duration && duration > 0.01) ? duration.toFixed(2) : 0.01}s`
-  }
-
-  const loopStatusShow = (index: number, loop: NodeTracing[], loopDurationMap?: LoopDurationMap) => {
-    const hasFailed = loop.some(item => item.status === NodeRunningStatus.Failed)
-    const isRunning = loop.some(item => item.status === NodeRunningStatus.Running)
-    const hasDurationMap = loopDurationMap && Object.keys(loopDurationMap).length !== 0
-
-    if (hasFailed)
-      return <RiErrorWarningLine className='h-4 w-4 text-text-destructive' />
-
-    if (isRunning)
-      return <RiLoader2Line className='h-3.5 w-3.5 animate-spin text-primary-600' />
-
-    return (
-      <>
-        {hasDurationMap && (
-          <div className='system-xs-regular text-text-tertiary'>
-            {countLoopDuration(loop, loopDurationMap)}
-          </div>
-        )}
-        <RiArrowRightSLine
-          className={cn(
-            'h-4 w-4 shrink-0 text-text-tertiary transition-transform duration-200',
-            expandedLoops[index] && 'rotate-90',
-          )}
-        />
-      </>
-    )
-  }
-
-  return (
-    <div className='bg-components-panel-bg'>
-      <div
-        className='flex h-8 cursor-pointer items-center border-b-[0.5px] border-b-divider-regular px-4 text-text-accent-secondary'
-        onClick={(e) => {
-          e.stopPropagation()
-          e.nativeEvent.stopImmediatePropagation()
-          onBack()
-        }}
-      >
-        <RiArrowLeftLine className='mr-1 h-4 w-4' />
-        <div className='system-sm-medium'>{t(`${i18nPrefix}.back`)}</div>
-      </div>
-      {/* List */}
-      <div className='bg-components-panel-bg p-2'>
-        {list.map((loop, index) => (
-          <div key={index} className={cn('mb-1 overflow-hidden rounded-xl border-none bg-background-section-burn')}>
-            <div
-              className={cn(
-                'flex w-full cursor-pointer items-center justify-between px-3',
-                expandedLoops[index] ? 'pb-2 pt-3' : 'py-3',
-                'rounded-xl text-left',
-              )}
-              onClick={() => toggleLoop(index)}
-            >
-              <div className={cn('flex grow items-center gap-2')}>
-                <div className='flex h-4 w-4 shrink-0 items-center justify-center rounded-[5px] border-divider-subtle bg-util-colors-cyan-cyan-500'>
-                  <Loop className='h-3 w-3 text-text-primary-on-surface' />
-                </div>
-                <span className='system-sm-semibold-uppercase grow text-text-primary'>
-                  {t(`${i18nPrefix}.loop`)} {index + 1}
-                </span>
-                {loopStatusShow(index, loop, loopDurationMap)}
-              </div>
-            </div>
-            {expandedLoops[index] && <div
-              className="h-px grow bg-divider-subtle"
-            ></div>}
-            <div className={cn(
-              'transition-all duration-200',
-              expandedLoops[index]
-                ? 'opacity-100'
-                : 'max-h-0 overflow-hidden opacity-0',
-            )}>
-              {
-                loopVariableMap?.[index] && (
-                  <div className='p-2 pb-0'>
-                    <CodeEditor
-                      readOnly
-                      title={<div>{t('workflow.nodes.loop.loopVariables').toLocaleUpperCase()}</div>}
-                      language={CodeLanguage.json}
-                      height={112}
-                      value={loopVariableMap[index]}
-                      isJSONStringifyBeauty
-                    />
-                  </div>
-                )
-              }
-              <TracingPanel
-                list={loop}
-                className='bg-background-section-burn'
-              />
-            </div>
-          </div>
-        ))}
-      </div>
-    </div>
-  )
-}
-export default React.memo(LoopResultPanel)
diff --git a/app/components/workflow/run/loop-result-panel.tsx b/app/components/workflow/run/loop-result-panel.tsx
deleted file mode 100644
index 836bef8..0000000
--- a/app/components/workflow/run/loop-result-panel.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-'use client'
-import type { FC } from 'react'
-import React, { useCallback, useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowRightSLine,
-  RiCloseLine,
-} from '@remixicon/react'
-import { ArrowNarrowLeft } from '../../base/icons/src/vender/line/arrows'
-import TracingPanel from './tracing-panel'
-import { Loop } from '@/app/components/base/icons/src/vender/workflow'
-import cn from '@/utils/classnames'
-import type { NodeTracing } from '@/types/workflow'
-
-const i18nPrefix = 'workflow.singleRun'
-
-type Props = {
-  list: NodeTracing[][]
-  onHide: () => void
-  onBack: () => void
-  noWrap?: boolean
-}
-
-const LoopResultPanel: FC<Props> = ({
-  list,
-  onHide,
-  onBack,
-  noWrap,
-}) => {
-  const { t } = useTranslation()
-  const [expandedLoops, setExpandedLoops] = useState<Record<number, boolean>>([])
-
-  const toggleLoop = useCallback((index: number) => {
-    setExpandedLoops(prev => ({
-      ...prev,
-      [index]: !prev[index],
-    }))
-  }, [])
-
-  const main = (
-    <>
-      <div className={cn(!noWrap && 'shrink-0 ', 'px-4 pt-3')}>
-        <div className='flex h-8 shrink-0 items-center justify-between'>
-          <div className='system-xl-semibold truncate text-text-primary'>
-            {t(`${i18nPrefix}.testRunLoop`)}
-          </div>
-          <div className='ml-2 shrink-0 cursor-pointer p-1' onClick={onHide}>
-            <RiCloseLine className='h-4 w-4 text-text-tertiary' />
-          </div>
-        </div>
-        <div className='flex cursor-pointer items-center space-x-1 py-2 text-text-accent-secondary' onClick={onBack}>
-          <ArrowNarrowLeft className='h-4 w-4' />
-          <div className='system-sm-medium'>{t(`${i18nPrefix}.back`)}</div>
-        </div>
-      </div>
-      {/* List */}
-      <div className={cn(!noWrap ? 'grow overflow-auto' : 'max-h-full', 'bg-components-panel-bg p-2')}>
-        {list.map((loop, index) => (
-          <div key={index} className={cn('mb-1 overflow-hidden rounded-xl border-none bg-background-section-burn')}>
-            <div
-              className={cn(
-                'flex w-full cursor-pointer items-center justify-between px-3',
-                expandedLoops[index] ? 'pb-2 pt-3' : 'py-3',
-                'rounded-xl text-left',
-              )}
-              onClick={() => toggleLoop(index)}
-            >
-              <div className={cn('flex grow items-center gap-2')}>
-                <div className='flex h-4 w-4 shrink-0 items-center justify-center rounded-[5px] border-divider-subtle bg-util-colors-cyan-cyan-500'>
-                  <Loop className='h-3 w-3 text-text-primary-on-surface' />
-                </div>
-                <span className='system-sm-semibold-uppercase grow text-text-primary'>
-                  {t(`${i18nPrefix}.loop`)} {index + 1}
-                </span>
-                <RiArrowRightSLine className={cn(
-                  'h-4 w-4 shrink-0 text-text-tertiary transition-transform duration-200',
-                  expandedLoops[index] && 'rotate-90',
-                )} />
-              </div>
-            </div>
-            {expandedLoops[index] && <div
-              className="h-px grow bg-divider-subtle"
-            ></div>}
-            <div className={cn(
-              'transition-all duration-200',
-              expandedLoops[index]
-                ? 'opacity-100'
-                : 'max-h-0 overflow-hidden opacity-0',
-            )}>
-              <TracingPanel
-                list={loop}
-                className='bg-background-section-burn'
-              />
-
-            </div>
-          </div>
-        ))}
-      </div>
-    </>
-  )
-  const handleNotBubble = useCallback((e: React.MouseEvent) => {
-    // if not do this, it will trigger the message log modal disappear(useClickAway)
-    e.stopPropagation()
-    e.nativeEvent.stopImmediatePropagation()
-  }, [])
-
-  if (noWrap)
-    return main
-
-  return (
-    <div
-      className='absolute inset-0 z-10 rounded-2xl pt-10'
-      style={{
-        backgroundColor: 'rgba(16, 24, 40, 0.20)',
-      }}
-      onClick={handleNotBubble}
-    >
-      <div className='flex h-full flex-col rounded-2xl bg-components-panel-bg'>
-        {main}
-      </div>
-    </div >
-  )
-}
-export default React.memo(LoopResultPanel)
diff --git a/app/components/workflow/run/retry-log/index.tsx b/app/components/workflow/run/retry-log/index.tsx
deleted file mode 100644
index ee83f1a..0000000
--- a/app/components/workflow/run/retry-log/index.tsx
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as RetryLogTrigger } from './retry-log-trigger'
-export { default as RetryResultPanel } from './retry-result-panel'
diff --git a/app/components/workflow/run/retry-log/retry-log-trigger.tsx b/app/components/workflow/run/retry-log/retry-log-trigger.tsx
deleted file mode 100644
index 0a39e4f..0000000
--- a/app/components/workflow/run/retry-log/retry-log-trigger.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowRightSLine,
-  RiRestartFill,
-} from '@remixicon/react'
-import Button from '@/app/components/base/button'
-import type { NodeTracing } from '@/types/workflow'
-
-type RetryLogTriggerProps = {
-  nodeInfo: NodeTracing
-  onShowRetryResultList: (detail: NodeTracing[]) => void
-}
-const RetryLogTrigger = ({
-  nodeInfo,
-  onShowRetryResultList,
-}: RetryLogTriggerProps) => {
-  const { t } = useTranslation()
-  const { retryDetail } = nodeInfo
-
-  const handleShowRetryResultList = (e: React.MouseEvent<HTMLButtonElement>) => {
-    e.stopPropagation()
-    e.nativeEvent.stopImmediatePropagation()
-    onShowRetryResultList(retryDetail || [])
-  }
-
-  return (
-    <Button
-      className='mb-1 flex w-full items-center justify-between'
-      variant='tertiary'
-      onClick={handleShowRetryResultList}
-    >
-      <div className='flex items-center'>
-        <RiRestartFill className='mr-0.5 h-4 w-4 shrink-0 text-components-button-tertiary-text' />
-        {t('workflow.nodes.common.retry.retries', { num: retryDetail?.length })}
-      </div>
-      <RiArrowRightSLine className='h-4 w-4 shrink-0 text-components-button-tertiary-text' />
-    </Button>
-  )
-}
-
-export default RetryLogTrigger
diff --git a/app/components/workflow/run/retry-log/retry-result-panel.tsx b/app/components/workflow/run/retry-log/retry-result-panel.tsx
deleted file mode 100644
index 3d1eb77..0000000
--- a/app/components/workflow/run/retry-log/retry-result-panel.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-'use client'
-
-import type { FC } from 'react'
-import { memo } from 'react'
-import { useTranslation } from 'react-i18next'
-import {
-  RiArrowLeftLine,
-} from '@remixicon/react'
-import TracingPanel from '../tracing-panel'
-import type { NodeTracing } from '@/types/workflow'
-
-type Props = {
-  list: NodeTracing[]
-  onBack: () => void
-}
-
-const RetryResultPanel: FC<Props> = ({
-  list,
-  onBack,
-}) => {
-  const { t } = useTranslation()
-
-  return (
-    <div>
-      <div
-        className='system-sm-medium flex h-8 cursor-pointer items-center bg-components-panel-bg px-4 text-text-accent-secondary'
-        onClick={(e) => {
-          e.stopPropagation()
-          e.nativeEvent.stopImmediatePropagation()
-          onBack()
-        }}
-      >
-        <RiArrowLeftLine className='mr-1 h-4 w-4' />
-        {t('workflow.singleRun.back')}
-      </div>
-      <TracingPanel
-        list={list.map((item, index) => ({
-          ...item,
-          title: `${t('workflow.nodes.common.retry.retry')} ${index + 1}`,
-        }))}
-        className='bg-background-section-burn'
-      />
-    </div >
-  )
-}
-export default memo(RetryResultPanel)
diff --git a/app/components/workflow/run/special-result-panel.tsx b/app/components/workflow/run/special-result-panel.tsx
deleted file mode 100644
index d985950..0000000
--- a/app/components/workflow/run/special-result-panel.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import { RetryResultPanel } from './retry-log'
-import { IterationResultPanel } from './iteration-log'
-import { LoopResultPanel } from './loop-log'
-import { AgentResultPanel } from './agent-log'
-import type {
-  AgentLogItemWithChildren,
-  IterationDurationMap,
-  LoopDurationMap,
-  LoopVariableMap,
-  NodeTracing,
-} from '@/types/workflow'
-
-export type SpecialResultPanelProps = {
-  showRetryDetail?: boolean
-  setShowRetryDetailFalse?: () => void
-  retryResultList?: NodeTracing[]
-
-  showIteratingDetail?: boolean
-  setShowIteratingDetailFalse?: () => void
-  iterationResultList?: NodeTracing[][]
-  iterationResultDurationMap?: IterationDurationMap
-
-  showLoopingDetail?: boolean
-  setShowLoopingDetailFalse?: () => void
-  loopResultList?: NodeTracing[][]
-  loopResultDurationMap?: LoopDurationMap
-  loopResultVariableMap?: LoopVariableMap
-
-  agentOrToolLogItemStack?: AgentLogItemWithChildren[]
-  agentOrToolLogListMap?: Record<string, AgentLogItemWithChildren[]>
-  handleShowAgentOrToolLog?: (detail?: AgentLogItemWithChildren) => void
-}
-const SpecialResultPanel = ({
-  showRetryDetail,
-  setShowRetryDetailFalse,
-  retryResultList,
-
-  showIteratingDetail,
-  setShowIteratingDetailFalse,
-  iterationResultList,
-  iterationResultDurationMap,
-
-  showLoopingDetail,
-  setShowLoopingDetailFalse,
-  loopResultList,
-  loopResultDurationMap,
-  loopResultVariableMap,
-
-  agentOrToolLogItemStack,
-  agentOrToolLogListMap,
-  handleShowAgentOrToolLog,
-}: SpecialResultPanelProps) => {
-  return (
-    <div onClick={(e) => {
-      e.stopPropagation()
-      e.nativeEvent.stopImmediatePropagation()
-    }}>
-      {
-        !!showRetryDetail && !!retryResultList?.length && setShowRetryDetailFalse && (
-          <RetryResultPanel
-            list={retryResultList}
-            onBack={setShowRetryDetailFalse}
-          />
-        )
-      }
-      {
-        showIteratingDetail && !!iterationResultList?.length && setShowIteratingDetailFalse && (
-          <IterationResultPanel
-            list={iterationResultList}
-            onBack={setShowIteratingDetailFalse}
-            iterDurationMap={iterationResultDurationMap}
-          />
-        )
-      }
-      {
-        showLoopingDetail && !!loopResultList?.length && setShowLoopingDetailFalse && (
-          <LoopResultPanel
-            list={loopResultList}
-            onBack={setShowLoopingDetailFalse}
-            loopDurationMap={loopResultDurationMap}
-            loopVariableMap={loopResultVariableMap}
-          />
-        )
-      }
-      {
-        !!agentOrToolLogItemStack?.length && agentOrToolLogListMap && handleShowAgentOrToolLog && (
-          <AgentResultPanel
-            agentOrToolLogItemStack={agentOrToolLogItemStack}
-            agentOrToolLogListMap={agentOrToolLogListMap}
-            onShowAgentOrToolLog={handleShowAgentOrToolLog}
-          />
-        )
-      }
-    </div>
-  )
-}
-
-export default SpecialResultPanel
diff --git a/app/components/workflow/run/utils/format-log/agent/data.ts b/app/components/workflow/run/utils/format-log/agent/data.ts
deleted file mode 100644
index d90933c..0000000
--- a/app/components/workflow/run/utils/format-log/agent/data.ts
+++ /dev/null
@@ -1,179 +0,0 @@
-import { BlockEnum } from '@/app/components/workflow/types'
-
-export const agentNodeData = (() => {
-  const node = {
-    node_type: BlockEnum.Agent,
-    execution_metadata: {
-      agent_log: [
-        { id: '1', label: 'Root 1' },
-        { id: '2', parent_id: '1', label: 'Child 1.2' },
-        { id: '3', parent_id: '1', label: 'Child 1.3' },
-        { id: '4', parent_id: '2', label: 'Child 2.4' },
-        { id: '5', parent_id: '2', label: 'Child 2.5' },
-        { id: '6', parent_id: '3', label: 'Child 3.6' },
-        { id: '7', parent_id: '4', label: 'Child 4.7' },
-        { id: '8', parent_id: '4', label: 'Child 4.8' },
-        { id: '9', parent_id: '5', label: 'Child 5.9' },
-        { id: '10', parent_id: '5', label: 'Child 5.10' },
-        { id: '11', parent_id: '7', label: 'Child 7.11' },
-        { id: '12', parent_id: '7', label: 'Child 7.12' },
-        { id: '13', parent_id: '9', label: 'Child 9.13' },
-        { id: '14', parent_id: '9', label: 'Child 9.14' },
-        { id: '15', parent_id: '9', label: 'Child 9.15' },
-      ],
-    },
-  }
-
-  return {
-    in: [node],
-    expect: [{
-      ...node,
-      agentLog: [
-        {
-          id: '1',
-          label: 'Root 1',
-          children: [
-            {
-              id: '2',
-              parent_id: '1',
-              label: 'Child 1.2',
-              children: [
-                {
-                  id: '4',
-                  parent_id: '2',
-                  label: 'Child 2.4',
-                  children: [
-                    {
-                      id: '7',
-                      parent_id: '4',
-                      label: 'Child 4.7',
-                      children: [
-                        { id: '11', parent_id: '7', label: 'Child 7.11' },
-                        { id: '12', parent_id: '7', label: 'Child 7.12' },
-                      ],
-                    },
-                    { id: '8', parent_id: '4', label: 'Child 4.8' },
-                  ],
-                },
-                {
-                  id: '5',
-                  parent_id: '2',
-                  label: 'Child 2.5',
-                  children: [
-                    {
-                      id: '9',
-                      parent_id: '5',
-                      label: 'Child 5.9',
-                      children: [
-                        { id: '13', parent_id: '9', label: 'Child 9.13' },
-                        { id: '14', parent_id: '9', label: 'Child 9.14' },
-                        { id: '15', parent_id: '9', label: 'Child 9.15' },
-                      ],
-                    },
-                    { id: '10', parent_id: '5', label: 'Child 5.10' },
-                  ],
-                },
-              ],
-            },
-            {
-              id: '3',
-              parent_id: '1',
-              label: 'Child 1.3',
-              children: [
-                { id: '6', parent_id: '3', label: 'Child 3.6' },
-              ],
-            },
-          ],
-        },
-      ],
-    }],
-  }
-})()
-
-export const oneStepCircle = (() => {
-  const node = {
-    node_type: BlockEnum.Agent,
-    execution_metadata: {
-      agent_log: [
-        { id: '1', label: 'Node 1' },
-        { id: '1', parent_id: '1', label: 'Node 1' },
-        { id: '1', parent_id: '1', label: 'Node 1' },
-        { id: '1', parent_id: '1', label: 'Node 1' },
-        { id: '1', parent_id: '1', label: 'Node 1' },
-        { id: '1', parent_id: '1', label: 'Node 1' },
-      ],
-    },
-  }
-
-  return {
-    in: [node],
-    expect: [{
-      ...node,
-      agentLog: [
-        {
-          id: '1',
-          label: 'Node 1',
-          hasCircle: true,
-          children: [],
-        },
-      ],
-    }],
-  }
-})()
-
-export const multiStepsCircle = (() => {
-  const node = {
-    node_type: BlockEnum.Agent,
-    execution_metadata: {
-      agent_log: [
-        // 1 -> [2 -> 4 -> 1, 3]
-        { id: '1', label: 'Node 1' },
-        { id: '2', parent_id: '1', label: 'Node 2' },
-        { id: '3', parent_id: '1', label: 'Node 3' },
-        { id: '4', parent_id: '2', label: 'Node 4' },
-
-        // Loop
-        { id: '1', parent_id: '4', label: 'Node 1' },
-        { id: '2', parent_id: '1', label: 'Node 2' },
-        { id: '4', parent_id: '2', label: 'Node 4' },
-        { id: '1', parent_id: '4', label: 'Node 1' },
-        { id: '2', parent_id: '1', label: 'Node 2' },
-        { id: '4', parent_id: '2', label: 'Node 4' },
-      ],
-    },
-  }
-  // 1 -> [2(4(1(2(4...)))), 3]
-  return {
-    in: [node],
-    expect: [{
-      ...node,
-      agentLog: [
-        {
-          id: '1',
-          label: 'Node 1',
-          children: [
-            {
-              id: '2',
-              parent_id: '1',
-              label: 'Node 2',
-              children: [
-                {
-                  id: '4',
-                  parent_id: '2',
-                  label: 'Node 4',
-                  children: [],
-                  hasCircle: true,
-                },
-              ],
-            },
-            {
-              id: '3',
-              parent_id: '1',
-              label: 'Node 3',
-            },
-          ],
-        },
-      ],
-    }],
-  }
-})()
diff --git a/app/components/workflow/run/utils/format-log/agent/index.spec.ts b/app/components/workflow/run/utils/format-log/agent/index.spec.ts
deleted file mode 100644
index 59cf0ce..0000000
--- a/app/components/workflow/run/utils/format-log/agent/index.spec.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import format from '.'
-import { agentNodeData, multiStepsCircle, oneStepCircle } from './data'
-
-describe('agent', () => {
-  test('list should transform to tree', () => {
-    // console.log(format(agentNodeData.in as any))
-    expect(format(agentNodeData.in as any)).toEqual(agentNodeData.expect)
-  })
-
-  test('list should remove circle log item', () => {
-    // format(oneStepCircle.in as any)
-    expect(format(oneStepCircle.in as any)).toEqual(oneStepCircle.expect)
-    expect(format(multiStepsCircle.in as any)).toEqual(multiStepsCircle.expect)
-  })
-})
diff --git a/app/components/workflow/run/utils/format-log/agent/index.ts b/app/components/workflow/run/utils/format-log/agent/index.ts
deleted file mode 100644
index c1f3afc..0000000
--- a/app/components/workflow/run/utils/format-log/agent/index.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import { BlockEnum } from '@/app/components/workflow/types'
-import type { AgentLogItem, AgentLogItemWithChildren, NodeTracing } from '@/types/workflow'
-import { cloneDeep } from 'lodash-es'
-
-const supportedAgentLogNodes = [BlockEnum.Agent, BlockEnum.Tool]
-
-const remove = (node: AgentLogItemWithChildren, removeId: string) => {
-  let { children } = node
-  if (!children || children.length === 0)
-    return
-
-  const hasCircle = !!children.find(c => c.id === removeId)
-  if (hasCircle) {
-    node.hasCircle = true
-    node.children = node.children.filter(c => c.id !== removeId)
-    children = node.children
-  }
-
-  children.forEach((child) => {
-    remove(child, removeId)
-  })
-}
-
-const removeRepeatedSiblings = (list: AgentLogItemWithChildren[]) => {
-  if (!list || list.length === 0)
-    return []
-
-  const result: AgentLogItemWithChildren[] = []
-  const addedItemIds: string[] = []
-  list.forEach((item) => {
-    if (!addedItemIds.includes(item.id)) {
-      result.push(item)
-      addedItemIds.push(item.id)
-    }
-  })
-  return result
-}
-
-const removeCircleLogItem = (log: AgentLogItemWithChildren) => {
-  const newLog = cloneDeep(log)
-  newLog.children = removeRepeatedSiblings(newLog.children)
-  let { id, children } = newLog
-  if (!children || children.length === 0)
-    return log
-
-  // check one step circle
-  const hasOneStepCircle = !!children.find(c => c.id === id)
-  if (hasOneStepCircle) {
-    newLog.hasCircle = true
-    newLog.children = newLog.children.filter(c => c.id !== id)
-    children = newLog.children
-  }
-
-  children.forEach((child, index) => {
-    remove(child, id) // check multi steps circle
-    children[index] = removeCircleLogItem(child)
-  })
-  return newLog
-}
-
-const listToTree = (logs: AgentLogItem[]) => {
-  if (!logs || logs.length === 0)
-    return []
-
-  const tree: AgentLogItemWithChildren[] = []
-  logs.forEach((log) => {
-    const hasParent = !!log.parent_id
-    if (hasParent) {
-      const parent = logs.find(item => item.id === log.parent_id) as AgentLogItemWithChildren
-      if (parent) {
-        if (!parent.children)
-          parent.children = []
-        parent.children.push(log as AgentLogItemWithChildren)
-      }
-    }
-    else {
-      tree.push(log as AgentLogItemWithChildren)
-    }
-  })
-  return tree
-}
-
-const format = (list: NodeTracing[]): NodeTracing[] => {
-  const result: NodeTracing[] = list.map((item) => {
-    let treeList: AgentLogItemWithChildren[] = []
-    let removedCircleTree: AgentLogItemWithChildren[] = []
-    if (supportedAgentLogNodes.includes(item.node_type) && item.execution_metadata?.agent_log && item.execution_metadata?.agent_log.length > 0)
-      treeList = listToTree(item.execution_metadata.agent_log)
-    // console.log(JSON.stringify(treeList))
-    removedCircleTree = treeList.length > 0 ? treeList.map(t => removeCircleLogItem(t)) : []
-    item.agentLog = removedCircleTree
-
-    return item
-  })
-
-  return result
-}
-
-export default format
diff --git a/app/components/workflow/run/utils/format-log/graph-to-log-struct.spec.ts b/app/components/workflow/run/utils/format-log/graph-to-log-struct.spec.ts
deleted file mode 100644
index 10a139e..0000000
--- a/app/components/workflow/run/utils/format-log/graph-to-log-struct.spec.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-import parseDSL from './graph-to-log-struct'
-
-describe('parseDSL', () => {
-  it('should parse plain nodes correctly', () => {
-    const dsl = 'plainNode1 -> plainNode2'
-    const result = parseDSL(dsl)
-    expect(result).toEqual([
-      { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: {}, status: 'succeeded' },
-      { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: {}, status: 'succeeded' },
-    ])
-  })
-
-  it('should parse retry nodes correctly', () => {
-    const dsl = '(retry, retryNode, 3)'
-    const result = parseDSL(dsl)
-    expect(result).toEqual([
-      { id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'succeeded' },
-      { id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
-      { id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
-      { id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
-    ])
-  })
-
-  it('should parse iteration nodes correctly', () => {
-    const dsl = '(iteration, iterationNode, plainNode1 -> plainNode2)'
-    const result = parseDSL(dsl)
-    expect(result).toEqual([
-      { id: 'iterationNode', node_id: 'iterationNode', title: 'iterationNode', node_type: 'iteration', execution_metadata: {}, status: 'succeeded' },
-      { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0 }, status: 'succeeded' },
-      { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0 }, status: 'succeeded' },
-    ])
-  })
-
-  it('should parse loop nodes correctly', () => {
-    const dsl = '(loop, loopNode, plainNode1 -> plainNode2)'
-    const result = parseDSL(dsl)
-    expect(result).toEqual([
-      { id: 'loopNode', node_id: 'loopNode', title: 'loopNode', node_type: 'loop', execution_metadata: {}, status: 'succeeded' },
-      { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { loop_id: 'loopNode', loop_index: 0 }, status: 'succeeded' },
-      { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { loop_id: 'loopNode', loop_index: 0 }, status: 'succeeded' },
-    ])
-  })
-
-  it('should parse parallel nodes correctly', () => {
-    const dsl = '(parallel, parallelNode, nodeA, nodeB -> nodeC)'
-    const result = parseDSL(dsl)
-    expect(result).toEqual([
-      { id: 'parallelNode', node_id: 'parallelNode', title: 'parallelNode', execution_metadata: { parallel_id: 'parallelNode' }, status: 'succeeded' },
-      { id: 'nodeA', node_id: 'nodeA', title: 'nodeA', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeA' }, status: 'succeeded' },
-      { id: 'nodeB', node_id: 'nodeB', title: 'nodeB', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeB' }, status: 'succeeded' },
-      { id: 'nodeC', node_id: 'nodeC', title: 'nodeC', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeB' }, status: 'succeeded' },
-    ])
-  })
-
-  // TODO
-  // it('should handle nested parallel nodes', () => {
-  //   const dsl = '(parallel, outerParallel, (parallel, innerParallel, plainNode1 -> plainNode2) -> plainNode3)'
-  //   const result = parseDSL(dsl)
-  //   expect(result).toEqual([
-  //     {
-  //       id: 'outerParallel',
-  //       node_id: 'outerParallel',
-  //       title: 'outerParallel',
-  //       execution_metadata: { parallel_id: 'outerParallel' },
-  //       status: 'succeeded',
-  //     },
-  //     {
-  //       id: 'innerParallel',
-  //       node_id: 'innerParallel',
-  //       title: 'innerParallel',
-  //       execution_metadata: { parallel_id: 'outerParallel', parallel_start_node_id: 'innerParallel' },
-  //       status: 'succeeded',
-  //     },
-  //     {
-  //       id: 'plainNode1',
-  //       node_id: 'plainNode1',
-  //       title: 'plainNode1',
-  //       execution_metadata: {
-  //         parallel_id: 'innerParallel',
-  //         parallel_start_node_id: 'plainNode1',
-  //         parent_parallel_id: 'outerParallel',
-  //         parent_parallel_start_node_id: 'innerParallel',
-  //       },
-  //       status: 'succeeded',
-  //     },
-  //     {
-  //       id: 'plainNode2',
-  //       node_id: 'plainNode2',
-  //       title: 'plainNode2',
-  //       execution_metadata: {
-  //         parallel_id: 'innerParallel',
-  //         parallel_start_node_id: 'plainNode1',
-  //         parent_parallel_id: 'outerParallel',
-  //         parent_parallel_start_node_id: 'innerParallel',
-  //       },
-  //       status: 'succeeded',
-  //     },
-  //     {
-  //       id: 'plainNode3',
-  //       node_id: 'plainNode3',
-  //       title: 'plainNode3',
-  //       execution_metadata: {
-  //         parallel_id: 'outerParallel',
-  //         parallel_start_node_id: 'innerParallel',
-  //       },
-  //       status: 'succeeded',
-  //     },
-  //   ])
-  // })
-
-  // iterations not support nested iterations
-  // it('should handle nested iterations', () => {
-  //   const dsl = '(iteration, outerIteration, (iteration, innerIteration -> plainNode1 -> plainNode2))'
-  //   const result = parseDSL(dsl)
-  //   expect(result).toEqual([
-  //     { id: 'outerIteration', node_id: 'outerIteration', title: 'outerIteration', node_type: 'iteration', execution_metadata: {}, status: 'succeeded' },
-  //     { id: 'innerIteration', node_id: 'innerIteration', title: 'innerIteration', node_type: 'iteration', execution_metadata: { iteration_id: 'outerIteration', iteration_index: 0 }, status: 'succeeded' },
-  //     { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'innerIteration', iteration_index: 0 }, status: 'succeeded' },
-  //     { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'innerIteration', iteration_index: 0 }, status: 'succeeded' },
-  //   ])
-  // })
-
-  // it('should handle nested iterations within parallel nodes', () => {
-  //   const dsl = '(parallel, parallelNode, (iteration, iterationNode, plainNode1, plainNode2))'
-  //   const result = parseDSL(dsl)
-  //   expect(result).toEqual([
-  //     { id: 'parallelNode', node_id: 'parallelNode', title: 'parallelNode', execution_metadata: { parallel_id: 'parallelNode' }, status: 'succeeded' },
-  //     { id: 'iterationNode', node_id: 'iterationNode', title: 'iterationNode', node_type: 'iteration', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'iterationNode' }, status: 'succeeded' },
-  //     { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0, parallel_id: 'parallelNode', parallel_start_node_id: 'iterationNode' }, status: 'succeeded' },
-  //     { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0, parallel_id: 'parallelNode', parallel_start_node_id: 'iterationNode' }, status: 'succeeded' },
-  //   ])
-  // })
-
-  it('should throw an error for unknown node types', () => {
-    const dsl = '(unknown, nodeId)'
-    expect(() => parseDSL(dsl)).toThrowError('Unknown nodeType: unknown')
-  })
-})
diff --git a/app/components/workflow/run/utils/format-log/graph-to-log-struct.ts b/app/components/workflow/run/utils/format-log/graph-to-log-struct.ts
deleted file mode 100644
index 741fa08..0000000
--- a/app/components/workflow/run/utils/format-log/graph-to-log-struct.ts
+++ /dev/null
@@ -1,356 +0,0 @@
-type IterationInfo = { iterationId: string; iterationIndex: number }
-type LoopInfo = { loopId: string; loopIndex: number }
-type NodePlain = { nodeType: 'plain'; nodeId: string; } & (Partial<IterationInfo> & Partial<LoopInfo>)
-type NodeComplex = { nodeType: string; nodeId: string; params: (NodePlain | (NodeComplex & (Partial<IterationInfo> & Partial<LoopInfo>)) | Node[] | number)[] } & (Partial<IterationInfo> & Partial<LoopInfo>)
-type Node = NodePlain | NodeComplex
-
-/**
- * Parses a DSL string into an array of node objects.
- * @param dsl - The input DSL string.
- * @returns An array of parsed nodes.
- */
-function parseDSL(dsl: string): NodeData[] {
-  return convertToNodeData(parseTopLevelFlow(dsl).map(nodeStr => parseNode(nodeStr)))
-}
-
-/**
- * Splits a top-level flow string by "->", respecting nested structures.
- * @param dsl - The DSL string to split.
- * @returns An array of top-level segments.
- */
-function parseTopLevelFlow(dsl: string): string[] {
-  const segments: string[] = []
-  let buffer = ''
-  let nested = 0
-
-  for (let i = 0; i < dsl.length; i++) {
-    const char = dsl[i]
-    if (char === '(') nested++
-    if (char === ')') nested--
-    if (char === '-' && dsl[i + 1] === '>' && nested === 0) {
-      segments.push(buffer.trim())
-      buffer = ''
-      i++ // Skip the ">" character
-    }
-    else {
-      buffer += char
-    }
-  }
-  if (buffer.trim())
-    segments.push(buffer.trim())
-
-  return segments
-}
-
-/**
- * Parses a single node string.
- * If the node is complex (e.g., has parentheses), it extracts the node type, node ID, and parameters.
- * @param nodeStr - The node string to parse.
- * @param parentIterationId - The ID of the parent iteration node (if applicable).
- * @param parentLoopId - The ID of the parent loop node (if applicable).
- * @returns A parsed node object.
- */
-function parseNode(nodeStr: string, parentIterationId?: string, parentLoopId?: string): Node {
-  // Check if the node is a complex node
-  if (nodeStr.startsWith('(') && nodeStr.endsWith(')')) {
-    const innerContent = nodeStr.slice(1, -1).trim() // Remove outer parentheses
-    let nested = 0
-    let buffer = ''
-    const parts: string[] = []
-
-    // Split the inner content by commas, respecting nested parentheses
-    for (let i = 0; i < innerContent.length; i++) {
-      const char = innerContent[i]
-      if (char === '(') nested++
-      if (char === ')') nested--
-
-      if (char === ',' && nested === 0) {
-        parts.push(buffer.trim())
-        buffer = ''
-      }
-      else {
-        buffer += char
-      }
-    }
-    parts.push(buffer.trim())
-
-    // Extract nodeType, nodeId, and params
-    const [nodeType, nodeId, ...paramsRaw] = parts
-    const params = parseParams(paramsRaw, nodeType === 'iteration' ? nodeId.trim() : parentIterationId, nodeType === 'loop' ? nodeId.trim() : parentLoopId)
-    const complexNode = {
-      nodeType: nodeType.trim(),
-      nodeId: nodeId.trim(),
-      params,
-    }
-    if (parentIterationId) {
-      (complexNode as any).iterationId = parentIterationId;
-      (complexNode as any).iterationIndex = 0 // Fixed as 0
-    }
-    if (parentLoopId) {
-      (complexNode as any).loopId = parentLoopId;
-      (complexNode as any).loopIndex = 0 // Fixed as 0
-    }
-    return complexNode
-  }
-
-  // If it's not a complex node, treat it as a plain node
-  const plainNode: NodePlain = { nodeType: 'plain', nodeId: nodeStr.trim() }
-  if (parentIterationId) {
-    plainNode.iterationId = parentIterationId
-    plainNode.iterationIndex = 0 // Fixed as 0
-  }
-  if (parentLoopId) {
-    plainNode.loopId = parentLoopId
-    plainNode.loopIndex = 0 // Fixed as 0
-  }
-  return plainNode
-}
-
-/**
- * Parses parameters of a complex node.
- * Supports nested flows and complex sub-nodes.
- * Adds iteration-specific metadata recursively.
- * @param paramParts - The parameters string split by commas.
- * @param parentIterationId - The ID of the parent iteration node (if applicable).
- * @param parentLoopId - The ID of the parent loop node (if applicable).
- * @returns An array of parsed parameters (plain nodes, nested nodes, or flows).
- */
-function parseParams(paramParts: string[], parentIteration?: string, parentLoopId?: string): (Node | Node[] | number)[] {
-  return paramParts.map((part) => {
-    if (part.includes('->')) {
-      // Parse as a flow and return an array of nodes
-      return parseTopLevelFlow(part).map(node => parseNode(node, parentIteration || undefined, parentLoopId || undefined))
-    }
-    else if (part.startsWith('(')) {
-      // Parse as a nested complex node
-      return parseNode(part, parentIteration || undefined, parentLoopId || undefined)
-    }
-    else if (!Number.isNaN(Number(part.trim()))) {
-      // Parse as a numeric parameter
-      return Number(part.trim())
-    }
-    else {
-      // Parse as a plain node
-      return parseNode(part, parentIteration || undefined, parentLoopId || undefined)
-    }
-  })
-}
-
-type NodeData = {
-  id: string;
-  node_id: string;
-  title: string;
-  node_type?: string;
-  execution_metadata: Record<string, any>;
-  status: string;
-}
-
-/**
- * Converts a plain node to node data.
- */
-function convertPlainNode(node: Node): NodeData[] {
-  return [
-    {
-      id: node.nodeId,
-      node_id: node.nodeId,
-      title: node.nodeId,
-      execution_metadata: {},
-      status: 'succeeded',
-    },
-  ]
-}
-
-/**
- * Converts a retry node to node data.
- */
-function convertRetryNode(node: Node): NodeData[] {
-  const { nodeId, iterationId, iterationIndex, loopId, loopIndex, params } = node as NodeComplex
-  const retryCount = params ? Number.parseInt(params[0] as unknown as string, 10) : 0
-  const result: NodeData[] = [
-    {
-      id: nodeId,
-      node_id: nodeId,
-      title: nodeId,
-      execution_metadata: {},
-      status: 'succeeded',
-    },
-  ]
-
-  for (let i = 0; i < retryCount; i++) {
-    result.push({
-      id: nodeId,
-      node_id: nodeId,
-      title: nodeId,
-      execution_metadata: iterationId ? {
-        iteration_id: iterationId,
-        iteration_index: iterationIndex || 0,
-      } : loopId ? {
-        loop_id: loopId,
-        loop_index: loopIndex || 0,
-      } : {},
-      status: 'retry',
-    })
-  }
-
-  return result
-}
-
-/**
- * Converts an iteration node to node data.
- */
-function convertIterationNode(node: Node): NodeData[] {
-  const { nodeId, params } = node as NodeComplex
-  const result: NodeData[] = [
-    {
-      id: nodeId,
-      node_id: nodeId,
-      title: nodeId,
-      node_type: 'iteration',
-      status: 'succeeded',
-      execution_metadata: {},
-    },
-  ]
-
-  params?.forEach((param: any) => {
-    if (Array.isArray(param)) {
-      param.forEach((childNode: Node) => {
-        const childData = convertToNodeData([childNode])
-        childData.forEach((data) => {
-          data.execution_metadata = {
-            ...data.execution_metadata,
-            iteration_id: nodeId,
-            iteration_index: 0,
-          }
-        })
-        result.push(...childData)
-      })
-    }
-  })
-
-  return result
-}
-
-/**
- * Converts an loop node to node data.
- */
-function convertLoopNode(node: Node): NodeData[] {
-  const { nodeId, params } = node as NodeComplex
-  const result: NodeData[] = [
-    {
-      id: nodeId,
-      node_id: nodeId,
-      title: nodeId,
-      node_type: 'loop',
-      status: 'succeeded',
-      execution_metadata: {},
-    },
-  ]
-
-  params?.forEach((param: any) => {
-    if (Array.isArray(param)) {
-      param.forEach((childNode: Node) => {
-        const childData = convertToNodeData([childNode])
-        childData.forEach((data) => {
-          data.execution_metadata = {
-            ...data.execution_metadata,
-            loop_id: nodeId,
-            loop_index: 0,
-          }
-        })
-        result.push(...childData)
-      })
-    }
-  })
-
-  return result
-}
-
-/**
- * Converts a parallel node to node data.
- */
-function convertParallelNode(node: Node, parentParallelId?: string, parentStartNodeId?: string): NodeData[] {
-  const { nodeId, params } = node as NodeComplex
-  const result: NodeData[] = [
-    {
-      id: nodeId,
-      node_id: nodeId,
-      title: nodeId,
-      execution_metadata: {
-        parallel_id: nodeId,
-      },
-      status: 'succeeded',
-    },
-  ]
-
-  params?.forEach((param) => {
-    if (Array.isArray(param)) {
-      const startNodeId = param[0]?.nodeId
-      param.forEach((childNode: Node) => {
-        const childData = convertToNodeData([childNode])
-        childData.forEach((data) => {
-          data.execution_metadata = {
-            ...data.execution_metadata,
-            parallel_id: nodeId,
-            parallel_start_node_id: startNodeId,
-            ...(parentParallelId && {
-              parent_parallel_id: parentParallelId,
-              parent_parallel_start_node_id: parentStartNodeId,
-            }),
-          }
-        })
-        result.push(...childData)
-      })
-    }
-    else if (param && typeof param === 'object') {
-      const startNodeId = param.nodeId
-      const childData = convertToNodeData([param])
-      childData.forEach((data) => {
-        data.execution_metadata = {
-          ...data.execution_metadata,
-          parallel_id: nodeId,
-          parallel_start_node_id: startNodeId,
-          ...(parentParallelId && {
-            parent_parallel_id: parentParallelId,
-            parent_parallel_start_node_id: parentStartNodeId,
-          }),
-        }
-      })
-      result.push(...childData)
-    }
-  })
-
-  return result
-}
-
-/**
- * Main function to convert nodes to node data.
- */
-function convertToNodeData(nodes: Node[], parentParallelId?: string, parentStartNodeId?: string): NodeData[] {
-  const result: NodeData[] = []
-
-  nodes.forEach((node) => {
-    switch (node.nodeType) {
-      case 'plain':
-        result.push(...convertPlainNode(node))
-        break
-      case 'retry':
-        result.push(...convertRetryNode(node))
-        break
-      case 'iteration':
-        result.push(...convertIterationNode(node))
-        break
-      case 'loop':
-        result.push(...convertLoopNode(node))
-        break
-      case 'parallel':
-        result.push(...convertParallelNode(node, parentParallelId, parentStartNodeId))
-        break
-      default:
-        throw new Error(`Unknown nodeType: ${node.nodeType}`)
-    }
-  })
-
-  return result
-}
-
-export default parseDSL
diff --git a/app/components/workflow/run/utils/format-log/index.ts b/app/components/workflow/run/utils/format-log/index.ts
deleted file mode 100644
index 4f97814..0000000
--- a/app/components/workflow/run/utils/format-log/index.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import type { NodeTracing } from '@/types/workflow'
-import { addChildrenToIterationNode } from './iteration'
-import { addChildrenToLoopNode } from './loop'
-import formatParallelNode from './parallel'
-import formatRetryNode from './retry'
-import formatAgentNode from './agent'
-import { cloneDeep } from 'lodash-es'
-import { BlockEnum } from '../../../types'
-
-const formatIterationAndLoopNode = (list: NodeTracing[], t: any) => {
-  const clonedList = cloneDeep(list)
-
-  // Identify all loop and iteration nodes
-  const loopNodeIds = clonedList
-    .filter(item => item.node_type === BlockEnum.Loop)
-    .map(item => item.node_id)
-
-  const iterationNodeIds = clonedList
-    .filter(item => item.node_type === BlockEnum.Iteration)
-    .map(item => item.node_id)
-
-  // Identify all child nodes for both loop and iteration
-  const loopChildrenNodeIds = clonedList
-    .filter(item => item.execution_metadata?.loop_id && loopNodeIds.includes(item.execution_metadata.loop_id))
-    .map(item => item.node_id)
-
-  const iterationChildrenNodeIds = clonedList
-    .filter(item => item.execution_metadata?.iteration_id && iterationNodeIds.includes(item.execution_metadata.iteration_id))
-    .map(item => item.node_id)
-
-  // Filter out child nodes as they will be included in their parent nodes
-  const result = clonedList
-    .filter(item => !loopChildrenNodeIds.includes(item.node_id) && !iterationChildrenNodeIds.includes(item.node_id))
-    .map((item) => {
-      // Process Loop nodes
-      if (item.node_type === BlockEnum.Loop) {
-        const childrenNodes = clonedList.filter(child => child.execution_metadata?.loop_id === item.node_id)
-        const error = childrenNodes.find(child => child.status === 'failed')
-        if (error) {
-          item.status = 'failed'
-          item.error = error.error
-        }
-        const addedChildrenList = addChildrenToLoopNode(item, childrenNodes)
-
-        // Handle parallel nodes in loop node
-        if (addedChildrenList.details && addedChildrenList.details.length > 0) {
-          addedChildrenList.details = addedChildrenList.details.map((row) => {
-            return formatParallelNode(row, t)
-          })
-        }
-        return addedChildrenList
-      }
-
-      // Process Iteration nodes
-      if (item.node_type === BlockEnum.Iteration) {
-        const childrenNodes = clonedList.filter(child => child.execution_metadata?.iteration_id === item.node_id)
-        const error = childrenNodes.find(child => child.status === 'failed')
-        if (error) {
-          item.status = 'failed'
-          item.error = error.error
-        }
-        const addedChildrenList = addChildrenToIterationNode(item, childrenNodes)
-
-        // Handle parallel nodes in iteration node
-        if (addedChildrenList.details && addedChildrenList.details.length > 0) {
-          addedChildrenList.details = addedChildrenList.details.map((row) => {
-            return formatParallelNode(row, t)
-          })
-        }
-        return addedChildrenList
-      }
-
-      return item
-    })
-
-  return result
-}
-
-const formatToTracingNodeList = (list: NodeTracing[], t: any) => {
-  const allItems = cloneDeep([...list]).sort((a, b) => a.index - b.index)
-  /*
-  * First handle not change list structure node
-  * Because Handle struct node will put the node in different
-  */
-  const formattedAgentList = formatAgentNode(allItems)
-  const formattedRetryList = formatRetryNode(formattedAgentList) // retry one node
-  // would change the structure of the list. Iteration and parallel can include each other.
-  const formattedLoopAndIterationList = formatIterationAndLoopNode(formattedRetryList, t)
-  const formattedParallelList = formatParallelNode(formattedLoopAndIterationList, t)
-
-  const result = formattedParallelList
-  // console.log(allItems)
-  // console.log(result)
-
-  return result
-}
-
-export default formatToTracingNodeList
diff --git a/app/components/workflow/run/utils/format-log/iteration/index.spec.ts b/app/components/workflow/run/utils/format-log/iteration/index.spec.ts
deleted file mode 100644
index f5feb5c..0000000
--- a/app/components/workflow/run/utils/format-log/iteration/index.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import format from '.'
-import graphToLogStruct from '../graph-to-log-struct'
-import { noop } from 'lodash-es'
-
-describe('iteration', () => {
-  const list = graphToLogStruct('start -> (iteration, iterationNode, plainNode1 -> plainNode2)')
-  // const [startNode, iterationNode, ...iterations] = list
-  const result = format(list as any, noop)
-  test('result should have no nodes in iteration node', () => {
-    expect((result as any).find((item: any) => !!item.execution_metadata?.iteration_id)).toBeUndefined()
-  })
-  // test('iteration should put nodes in details', () => {
-  //   expect(result as any).toEqual([
-  //     startNode,
-  //     {
-  //       ...iterationNode,
-  //       details: [
-  //         [iterations[0], iterations[1]],
-  //       ],
-  //     },
-  //   ])
-  // })
-})
diff --git a/app/components/workflow/run/utils/format-log/iteration/index.ts b/app/components/workflow/run/utils/format-log/iteration/index.ts
deleted file mode 100644
index d0224d0..0000000
--- a/app/components/workflow/run/utils/format-log/iteration/index.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { BlockEnum } from '@/app/components/workflow/types'
-import type { NodeTracing } from '@/types/workflow'
-import formatParallelNode from '../parallel'
-
-export function addChildrenToIterationNode(iterationNode: NodeTracing, childrenNodes: NodeTracing[]): NodeTracing {
-  const details: NodeTracing[][] = []
-  childrenNodes.forEach((item, index) => {
-    if (!item.execution_metadata) return
-    const { iteration_index = 0 } = item.execution_metadata
-    const runIndex: number = iteration_index !== undefined ? iteration_index : index
-    if (!details[runIndex])
-      details[runIndex] = []
-
-    details[runIndex].push(item)
-  })
-  return {
-    ...iterationNode,
-    details,
-  }
-}
-
-const format = (list: NodeTracing[], t: any): NodeTracing[] => {
-  const iterationNodeIds = list
-    .filter(item => item.node_type === BlockEnum.Iteration)
-    .map(item => item.node_id)
-  const iterationChildrenNodeIds = list
-    .filter(item => item.execution_metadata?.iteration_id && iterationNodeIds.includes(item.execution_metadata.iteration_id))
-    .map(item => item.node_id)
-  // move iteration children nodes to iteration node's details field
-  const result = list
-    .filter(item => !iterationChildrenNodeIds.includes(item.node_id))
-    .map((item) => {
-      if (item.node_type === BlockEnum.Iteration) {
-        const childrenNodes = list.filter(child => child.execution_metadata?.iteration_id === item.node_id)
-        const error = childrenNodes.find(child => child.status === 'failed')
-        if (error) {
-          item.status = 'failed'
-          item.error = error.error
-        }
-        const addedChildrenList = addChildrenToIterationNode(item, childrenNodes)
-        // handle parallel node in iteration node
-        if (addedChildrenList.details && addedChildrenList.details.length > 0) {
-          addedChildrenList.details = addedChildrenList.details.map((row) => {
-            return formatParallelNode(row, t)
-          })
-        }
-        return addedChildrenList
-      }
-
-      return item
-    })
-
-  return result
-}
-
-export default format
diff --git a/app/components/workflow/run/utils/format-log/loop/index.spec.ts b/app/components/workflow/run/utils/format-log/loop/index.spec.ts
deleted file mode 100644
index 1f70cef..0000000
--- a/app/components/workflow/run/utils/format-log/loop/index.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import format from '.'
-import graphToLogStruct from '../graph-to-log-struct'
-import { noop } from 'lodash-es'
-
-describe('loop', () => {
-  const list = graphToLogStruct('start -> (loop, loopNode, plainNode1 -> plainNode2)')
-  const [startNode, loopNode, ...loops] = list
-  const result = format(list as any, noop)
-  test('result should have no nodes in loop node', () => {
-    expect(result.find(item => !!item.execution_metadata?.loop_id)).toBeUndefined()
-  })
-  test('loop should put nodes in details', () => {
-    expect(result).toEqual([
-      startNode,
-      {
-        ...loopNode,
-        details: [
-          [loops[0], loops[1]],
-        ],
-      },
-    ])
-  })
-})
diff --git a/app/components/workflow/run/utils/format-log/loop/index.ts b/app/components/workflow/run/utils/format-log/loop/index.ts
deleted file mode 100644
index b12e12e..0000000
--- a/app/components/workflow/run/utils/format-log/loop/index.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { BlockEnum } from '@/app/components/workflow/types'
-import type { NodeTracing } from '@/types/workflow'
-import formatParallelNode from '../parallel'
-
-export function addChildrenToLoopNode(loopNode: NodeTracing, childrenNodes: NodeTracing[]): NodeTracing {
-  const details: NodeTracing[][] = []
-  childrenNodes.forEach((item) => {
-    if (!item.execution_metadata) return
-    const { parallel_mode_run_id, loop_index = 0 } = item.execution_metadata
-    const runIndex: number = (parallel_mode_run_id || loop_index) as number
-    if (!details[runIndex])
-      details[runIndex] = []
-
-    details[runIndex].push(item)
-  })
-  return {
-    ...loopNode,
-    details,
-  }
-}
-
-const format = (list: NodeTracing[], t: any): NodeTracing[] => {
-  const loopNodeIds = list
-    .filter(item => item.node_type === BlockEnum.Loop)
-    .map(item => item.node_id)
-  const loopChildrenNodeIds = list
-    .filter(item => item.execution_metadata?.loop_id && loopNodeIds.includes(item.execution_metadata.loop_id))
-    .map(item => item.node_id)
-  // move loop children nodes to loop node's details field
-  const result = list
-    .filter(item => !loopChildrenNodeIds.includes(item.node_id))
-    .map((item) => {
-      if (item.node_type === BlockEnum.Loop) {
-        const childrenNodes = list.filter(child => child.execution_metadata?.loop_id === item.node_id)
-        const error = childrenNodes.find(child => child.status === 'failed')
-        if (error) {
-          item.status = 'failed'
-          item.error = error.error
-        }
-        const addedChildrenList = addChildrenToLoopNode(item, childrenNodes)
-        // handle parallel node in loop node
-        if (addedChildrenList.details && addedChildrenList.details.length > 0) {
-          addedChildrenList.details = addedChildrenList.details.map((row) => {
-            return formatParallelNode(row, t)
-          })
-        }
-        return addedChildrenList
-      }
-
-      return item
-    })
-
-  return result
-}
-
-export default format
diff --git a/app/components/workflow/run/utils/format-log/parallel/index.ts b/app/components/workflow/run/utils/format-log/parallel/index.ts
deleted file mode 100644
index f5a1136..0000000
--- a/app/components/workflow/run/utils/format-log/parallel/index.ts
+++ /dev/null
@@ -1,175 +0,0 @@
-import { BlockEnum } from '@/app/components/workflow/types'
-import type { NodeTracing } from '@/types/workflow'
-
-function printNodeStructure(node: NodeTracing, depth: number) {
-  const indent = '  '.repeat(depth)
-  console.log(`${indent}${node.title}`)
-  if (node.parallelDetail?.children) {
-    node.parallelDetail.children.forEach((child) => {
-      printNodeStructure(child, depth + 1)
-    })
-  }
-}
-
-function addTitle({
-  list, depth, belongParallelIndexInfo,
-}: {
-  list: NodeTracing[],
-  depth: number,
-  belongParallelIndexInfo?: string,
-}, t: any) {
-  let branchIndex = 0
-  const hasMoreThanOneParallel = list.filter(node => node.parallelDetail?.isParallelStartNode).length > 1
-  list.forEach((node) => {
-    const parallel_id = node.parallel_id ?? node.execution_metadata?.parallel_id ?? null
-    const parallel_start_node_id = node.parallel_start_node_id ?? node.execution_metadata?.parallel_start_node_id ?? null
-
-    const isNotInParallel = !parallel_id || node.node_type === BlockEnum.End
-    if (isNotInParallel)
-      return
-
-    const isParallelStartNode = node.parallelDetail?.isParallelStartNode
-
-    const parallelIndexLetter = (() => {
-      if (!isParallelStartNode || !hasMoreThanOneParallel)
-        return ''
-
-      const index = 1 + list.filter(node => node.parallelDetail?.isParallelStartNode).findIndex(item => item.node_id === node.node_id)
-      return String.fromCharCode(64 + index)
-    })()
-
-    const parallelIndexInfo = `${depth}${parallelIndexLetter}`
-
-    if (isParallelStartNode) {
-      node.parallelDetail!.isParallelStartNode = true
-      node.parallelDetail!.parallelTitle = `${t('workflow.common.parallel')}-${parallelIndexInfo}`
-    }
-
-    const isBrachStartNode = parallel_start_node_id === node.node_id
-    if (isBrachStartNode) {
-      branchIndex++
-      const branchLetter = String.fromCharCode(64 + branchIndex)
-      if (!node.parallelDetail) {
-        node.parallelDetail = {
-          branchTitle: '',
-        }
-      }
-
-      node.parallelDetail!.branchTitle = `${t('workflow.common.branch')}-${belongParallelIndexInfo}-${branchLetter}`
-    }
-
-    if (node.parallelDetail?.children && node.parallelDetail.children.length > 0) {
-      addTitle({
-        list: node.parallelDetail.children,
-        depth: depth + 1,
-        belongParallelIndexInfo: parallelIndexInfo,
-      }, t)
-    }
-  })
-}
-
-// list => group by parallel_id(parallel tree).
-const format = (list: NodeTracing[], t: any, isPrint?: boolean): NodeTracing[] => {
-  if (isPrint)
-    console.log(list)
-
-  const result: NodeTracing[] = [...list]
-  // list to tree by parent_parallel_start_node_id and branch by parallel_start_node_id. Each parallel may has more than one branch.
-  result.forEach((node) => {
-    const parallel_id = node.parallel_id ?? node.execution_metadata?.parallel_id ?? null
-    const parallel_start_node_id = node.parallel_start_node_id ?? node.execution_metadata?.parallel_start_node_id ?? null
-    const parent_parallel_id = node.parent_parallel_id ?? node.execution_metadata?.parent_parallel_id ?? null
-    const branchStartNodeId = node.parallel_start_node_id ?? node.execution_metadata?.parallel_start_node_id ?? null
-    const parentParallelBranchStartNodeId = node.parent_parallel_start_node_id ?? node.execution_metadata?.parent_parallel_start_node_id ?? null
-    const isNotInParallel = !parallel_id || node.node_type === BlockEnum.End
-    if (isNotInParallel)
-      return
-
-    const isParallelStartNode = parallel_start_node_id === node.node_id // in the same parallel has more than one start node
-    if (isParallelStartNode) {
-      const selfNode = { ...node, parallelDetail: undefined }
-      node.parallelDetail = {
-        isParallelStartNode: true,
-        children: [selfNode],
-      }
-      const isRootLevel = !parent_parallel_id
-      if (isRootLevel)
-        return
-
-      const parentParallelStartNode = result.find(item => item.node_id === parentParallelBranchStartNodeId)
-      // append to parent parallel start node and after the same branch
-      if (parentParallelStartNode) {
-        if (!parentParallelStartNode?.parallelDetail) {
-          parentParallelStartNode!.parallelDetail = {
-            children: [],
-          }
-        }
-        if (parentParallelStartNode!.parallelDetail.children) {
-          const sameBranchNodesLastIndex = parentParallelStartNode.parallelDetail.children.findLastIndex((node) => {
-            const currStartNodeId = node.parallel_start_node_id ?? node.execution_metadata?.parallel_start_node_id ?? null
-            return currStartNodeId === parentParallelBranchStartNodeId
-          })
-          if (sameBranchNodesLastIndex !== -1)
-            parentParallelStartNode!.parallelDetail.children.splice(sameBranchNodesLastIndex + 1, 0, node)
-          else
-            parentParallelStartNode!.parallelDetail.children.push(node)
-        }
-      }
-      return
-    }
-
-    // append to parallel start node and after the same branch
-    const parallelStartNode = result.find(item => parallel_start_node_id === item.node_id)
-
-    if (parallelStartNode && parallelStartNode.parallelDetail && parallelStartNode!.parallelDetail!.children) {
-      const sameBranchNodesLastIndex = parallelStartNode.parallelDetail.children.findLastIndex((node) => {
-        const currStartNodeId = node.parallel_start_node_id ?? node.execution_metadata?.parallel_start_node_id ?? null
-        return currStartNodeId === branchStartNodeId
-      })
-      if (sameBranchNodesLastIndex !== -1) {
-        parallelStartNode.parallelDetail.children.splice(sameBranchNodesLastIndex + 1, 0, node)
-      }
-      else { // new branch
-        parallelStartNode.parallelDetail.children.push(node)
-      }
-    }
-    // parallelStartNode!.parallelDetail!.children.push(node)
-  })
-
-  const filteredInParallelSubNodes = result.filter((node) => {
-    const parallel_id = node.parallel_id ?? node.execution_metadata?.parallel_id ?? null
-    const isNotInParallel = !parallel_id || node.node_type === BlockEnum.End
-    if (isNotInParallel)
-      return true
-
-    const parent_parallel_id = node.parent_parallel_id ?? node.execution_metadata?.parent_parallel_id ?? null
-
-    if (parent_parallel_id)
-      return false
-
-    const isParallelStartNode = node.parallelDetail?.isParallelStartNode
-    // eslint-disable-next-line sonarjs/prefer-single-boolean-return
-    if (!isParallelStartNode)
-      return false
-
-    return true
-  })
-
-  // print node structure for debug
-  if (isPrint) {
-    filteredInParallelSubNodes.forEach((node) => {
-      const now = Date.now()
-      console.log(`----- p: ${now} start -----`)
-      printNodeStructure(node, 0)
-      console.log(`----- p: ${now} end -----`)
-    })
-  }
-
-  addTitle({
-    list: filteredInParallelSubNodes,
-    depth: 1,
-  }, t)
-
-  return filteredInParallelSubNodes
-}
-export default format
diff --git a/app/components/workflow/run/utils/format-log/retry/index.spec.ts b/app/components/workflow/run/utils/format-log/retry/index.spec.ts
deleted file mode 100644
index 2ce9554..0000000
--- a/app/components/workflow/run/utils/format-log/retry/index.spec.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import format from '.'
-import graphToLogStruct from '../graph-to-log-struct'
-
-describe('retry', () => {
-  // retry nodeId:1 3 times.
-  const steps = graphToLogStruct('start -> (retry, retryNode, 3)')
-  const [startNode, retryNode, ...retryDetail] = steps
-  const result = format(steps as any)
-  test('should have no retry status nodes', () => {
-    expect(result.find(item => item.status === 'retry')).toBeUndefined()
-  })
-  test('should put retry nodes in retryDetail', () => {
-    expect(result).toEqual([
-      startNode,
-      {
-        ...retryNode,
-        retryDetail,
-      },
-    ])
-  })
-})
diff --git a/app/components/workflow/run/utils/format-log/retry/index.ts b/app/components/workflow/run/utils/format-log/retry/index.ts
deleted file mode 100644
index 5226f79..0000000
--- a/app/components/workflow/run/utils/format-log/retry/index.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import type { NodeTracing } from '@/types/workflow'
-
-const format = (list: NodeTracing[]): NodeTracing[] => {
-  const retryNodes = list.filter((item) => {
-    return item.status === 'retry'
-  })
-
-  const retryNodeIds = retryNodes.map(item => item.node_id)
-  // move retry nodes to retryDetail
-  const result = list.filter((item) => {
-    return item.status !== 'retry'
-  }).map((item) => {
-    const { execution_metadata } = item
-    const isInIteration = !!execution_metadata?.iteration_id
-    const isInLoop = !!execution_metadata?.loop_id
-    const nodeId = item.node_id
-    const isRetryBelongNode = retryNodeIds.includes(nodeId)
-
-    if (isRetryBelongNode) {
-      return {
-        ...item,
-        retryDetail: retryNodes.filter((node) => {
-          if (!isInIteration && !isInLoop)
-            return node.node_id === nodeId
-
-          // retry node in iteration
-          if (isInIteration)
-            return node.node_id === nodeId && node.execution_metadata?.iteration_index === execution_metadata?.iteration_index
-
-          // retry node in loop
-          if (isInLoop)
-            return node.node_id === nodeId && node.execution_metadata?.loop_index === execution_metadata?.loop_index
-
-          return false
-        }),
-      }
-    }
-    return item
-  })
-  return result
-}
-
-export default format
diff --git a/app/components/workflow/simple-node/constants.ts b/app/components/workflow/simple-node/constants.ts
deleted file mode 100644
index 8a36636..0000000
--- a/app/components/workflow/simple-node/constants.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const CUSTOM_SIMPLE_NODE = 'custom-simple'
diff --git a/app/components/workflow/simple-node/index.tsx b/app/components/workflow/simple-node/index.tsx
deleted file mode 100644
index 4af8a5c..0000000
--- a/app/components/workflow/simple-node/index.tsx
+++ /dev/null
@@ -1,148 +0,0 @@
-import type {
-  FC,
-} from 'react'
-import {
-  memo,
-  useMemo,
-} from 'react'
-import {
-  RiAlertFill,
-  RiCheckboxCircleFill,
-  RiErrorWarningFill,
-  RiLoader2Line,
-} from '@remixicon/react'
-import { useTranslation } from 'react-i18next'
-import {
-  NodeTargetHandle,
-} from '@/app/components/workflow/nodes/_base/components/node-handle'
-import NodeControl from '@/app/components/workflow/nodes/_base/components/node-control'
-import cn from '@/utils/classnames'
-import BlockIcon from '@/app/components/workflow/block-icon'
-import type {
-  NodeProps,
-} from '@/app/components/workflow/types'
-import {
-  NodeRunningStatus,
-} from '@/app/components/workflow/types'
-import {
-  useNodesReadOnly,
-} from '@/app/components/workflow/hooks'
-
-type SimpleNodeProps = NodeProps
-
-const SimpleNode: FC<SimpleNodeProps> = ({
-  id,
-  data,
-}) => {
-  const { t } = useTranslation()
-  const { nodesReadOnly } = useNodesReadOnly()
-
-  const showSelectedBorder = data.selected || data._isBundled || data._isEntering
-  const {
-    showRunningBorder,
-    showSuccessBorder,
-    showFailedBorder,
-    showExceptionBorder,
-  } = useMemo(() => {
-    return {
-      showRunningBorder: data._runningStatus === NodeRunningStatus.Running && !showSelectedBorder,
-      showSuccessBorder: data._runningStatus === NodeRunningStatus.Succeeded && !showSelectedBorder,
-      showFailedBorder: data._runningStatus === NodeRunningStatus.Failed && !showSelectedBorder,
-      showExceptionBorder: data._runningStatus === NodeRunningStatus.Exception && !showSelectedBorder,
-    }
-  }, [data._runningStatus, showSelectedBorder])
-
-  return (
-    <div
-      className={cn(
-        'flex rounded-2xl border-[2px]',
-        showSelectedBorder ? 'border-components-option-card-option-selected-border' : 'border-transparent',
-        !showSelectedBorder && data._inParallelHovering && 'border-workflow-block-border-highlight',
-        data._waitingRun && 'opacity-70',
-      )}
-      style={{
-        width: 'auto',
-        height: 'auto',
-      }}
-    >
-      <div
-        className={cn(
-          'group relative pb-1 shadow-xs',
-          'rounded-[15px] border border-transparent',
-          'w-[240px] bg-workflow-block-bg',
-          !data._runningStatus && 'hover:shadow-lg',
-          showRunningBorder && '!border-state-accent-solid',
-          showSuccessBorder && '!border-state-success-solid',
-          showFailedBorder && '!border-state-destructive-solid',
-          showExceptionBorder && '!border-state-warning-solid',
-          data._isBundled && '!shadow-lg',
-        )}
-      >
-        {
-          data._inParallelHovering && (
-            <div className='top system-2xs-medium-uppercase absolute -top-2.5 left-2 z-10 text-text-tertiary'>
-              {t('workflow.common.parallelRun')}
-            </div>
-          )
-        }
-        {
-          !data._isCandidate && (
-            <NodeTargetHandle
-              id={id}
-              data={data}
-              handleClassName='!top-4 !-left-[9px] !translate-y-0'
-              handleId='target'
-            />
-          )
-        }
-        {
-          !data._runningStatus && !nodesReadOnly && !data._isCandidate && (
-            <NodeControl
-              id={id}
-              data={data}
-            />
-          )
-        }
-        <div className={cn(
-          'flex items-center rounded-t-2xl px-3 pb-2 pt-3',
-        )}>
-          <BlockIcon
-            className='mr-2 shrink-0'
-            type={data.type}
-            size='md'
-          />
-          <div
-            title={data.title}
-            className='system-sm-semibold-uppercase mr-1 flex grow items-center truncate text-text-primary'
-          >
-            <div>
-              {data.title}
-            </div>
-          </div>
-          {
-            (data._runningStatus === NodeRunningStatus.Running || data._singleRunningStatus === NodeRunningStatus.Running) && (
-              <RiLoader2Line className='h-3.5 w-3.5 animate-spin text-text-accent' />
-            )
-          }
-          {
-            data._runningStatus === NodeRunningStatus.Succeeded && (
-              <RiCheckboxCircleFill className='h-3.5 w-3.5 text-text-success' />
-            )
-          }
-          {
-            data._runningStatus === NodeRunningStatus.Failed && (
-              <RiErrorWarningFill className='h-3.5 w-3.5 text-text-destructive' />
-            )
-          }
-          {
-            data._runningStatus === NodeRunningStatus.Exception && (
-              <RiAlertFill className='h-3.5 w-3.5 text-text-warning-secondary' />
-            )
-          }
-        </div>
-      </div>
-    </div>
-  )
-}
-
-export default memo(SimpleNode)
diff --git a/app/components/workflow/simple-node/types.ts b/app/components/workflow/simple-node/types.ts
deleted file mode 100644
index 8768d69..0000000
--- a/app/components/workflow/simple-node/types.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import type { CommonNodeType } from '@/app/components/workflow/types'
-
-export type SimpleNodeType = CommonNodeType
diff --git a/app/components/workflow/store/index.ts b/app/components/workflow/store/index.ts
deleted file mode 100644
index 61cd577..0000000
--- a/app/components/workflow/store/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './workflow'
diff --git a/app/components/workflow/store/workflow/chat-variable-slice.ts b/app/components/workflow/store/workflow/chat-variable-slice.ts
deleted file mode 100644
index 0d81446..0000000
--- a/app/components/workflow/store/workflow/chat-variable-slice.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type { ConversationVariable } from '@/app/components/workflow/types'
-
-export type ChatVariableSliceShape = {
-  showChatVariablePanel: boolean
-  setShowChatVariablePanel: (showChatVariablePanel: boolean) => void
-  showGlobalVariablePanel: boolean
-  setShowGlobalVariablePanel: (showGlobalVariablePanel: boolean) => void
-  conversationVariables: ConversationVariable[]
-  setConversationVariables: (conversationVariables: ConversationVariable[]) => void
-}
-
-export const createChatVariableSlice: StateCreator<ChatVariableSliceShape> = (set) => {
-  const hideAllPanel = {
-    showDebugAndPreviewPanel: false,
-    showEnvPanel: false,
-    showChatVariablePanel: false,
-    showGlobalVariablePanel: false,
-  }
-
-  return ({
-    showChatVariablePanel: false,
-    setShowChatVariablePanel: showChatVariablePanel => set(() => ({ showChatVariablePanel })),
-    showGlobalVariablePanel: false,
-    setShowGlobalVariablePanel: showGlobalVariablePanel => set(() => {
-      if (showGlobalVariablePanel)
-        return { ...hideAllPanel, showGlobalVariablePanel: true }
-      else
-        return { showGlobalVariablePanel: false }
-    }),
-    conversationVariables: [],
-    setConversationVariables: conversationVariables => set(() => ({ conversationVariables })),
-  })
-}
diff --git a/app/components/workflow/store/workflow/env-variable-slice.ts b/app/components/workflow/store/workflow/env-variable-slice.ts
deleted file mode 100644
index de60e7d..0000000
--- a/app/components/workflow/store/workflow/env-variable-slice.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type { EnvironmentVariable } from '@/app/components/workflow/types'
-
-export type EnvVariableSliceShape = {
-  showEnvPanel: boolean
-  setShowEnvPanel: (showEnvPanel: boolean) => void
-  environmentVariables: EnvironmentVariable[]
-  setEnvironmentVariables: (environmentVariables: EnvironmentVariable[]) => void
-  envSecrets: Record<string, string>
-  setEnvSecrets: (envSecrets: Record<string, string>) => void
-}
-
-export const createEnvVariableSlice: StateCreator<EnvVariableSliceShape> = set => ({
-  showEnvPanel: false,
-  setShowEnvPanel: showEnvPanel => set(() => ({ showEnvPanel })),
-  environmentVariables: [],
-  setEnvironmentVariables: environmentVariables => set(() => ({ environmentVariables })),
-  envSecrets: {},
-  setEnvSecrets: envSecrets => set(() => ({ envSecrets })),
-})
diff --git a/app/components/workflow/store/workflow/form-slice.ts b/app/components/workflow/store/workflow/form-slice.ts
deleted file mode 100644
index a6c607d..0000000
--- a/app/components/workflow/store/workflow/form-slice.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type {
-  RunFile,
-} from '@/app/components/workflow/types'
-
-export type FormSliceShape = {
-  inputs: Record<string, string>
-  setInputs: (inputs: Record<string, string>) => void
-  files: RunFile[]
-  setFiles: (files: RunFile[]) => void
-}
-
-export const createFormSlice: StateCreator<FormSliceShape> = set => ({
-  inputs: {},
-  setInputs: inputs => set(() => ({ inputs })),
-  files: [],
-  setFiles: files => set(() => ({ files })),
-})
diff --git a/app/components/workflow/store/workflow/help-line-slice.ts b/app/components/workflow/store/workflow/help-line-slice.ts
deleted file mode 100644
index 7d9aeac..0000000
--- a/app/components/workflow/store/workflow/help-line-slice.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type {
-  HelpLineHorizontalPosition,
-  HelpLineVerticalPosition,
-} from '@/app/components/workflow/help-line/types'
-
-export type HelpLineSliceShape = {
-  helpLineHorizontal?: HelpLineHorizontalPosition
-  setHelpLineHorizontal: (helpLineHorizontal?: HelpLineHorizontalPosition) => void
-  helpLineVertical?: HelpLineVerticalPosition
-  setHelpLineVertical: (helpLineVertical?: HelpLineVerticalPosition) => void
-}
-
-export const createHelpLineSlice: StateCreator<HelpLineSliceShape> = set => ({
-  helpLineHorizontal: undefined,
-  setHelpLineHorizontal: helpLineHorizontal => set(() => ({ helpLineHorizontal })),
-  helpLineVertical: undefined,
-  setHelpLineVertical: helpLineVertical => set(() => ({ helpLineVertical })),
-})
diff --git a/app/components/workflow/store/workflow/history-slice.ts b/app/components/workflow/store/workflow/history-slice.ts
deleted file mode 100644
index 47d1b8a..0000000
--- a/app/components/workflow/store/workflow/history-slice.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type {
-  HistoryWorkflowData,
-} from '@/app/components/workflow/types'
-import type {
-  VersionHistory,
-} from '@/types/workflow'
-
-export type HistorySliceShape = {
-  historyWorkflowData?: HistoryWorkflowData
-  setHistoryWorkflowData: (historyWorkflowData?: HistoryWorkflowData) => void
-  showRunHistory: boolean
-  setShowRunHistory: (showRunHistory: boolean) => void
-  versionHistory: VersionHistory[]
-  setVersionHistory: (versionHistory: VersionHistory[]) => void
-}
-
-export const createHistorySlice: StateCreator<HistorySliceShape> = set => ({
-  historyWorkflowData: undefined,
-  setHistoryWorkflowData: historyWorkflowData => set(() => ({ historyWorkflowData })),
-  showRunHistory: false,
-  setShowRunHistory: showRunHistory => set(() => ({ showRunHistory })),
-  versionHistory: [],
-  setVersionHistory: versionHistory => set(() => ({ versionHistory })),
-})
diff --git a/app/components/workflow/store/workflow/index.ts b/app/components/workflow/store/workflow/index.ts
deleted file mode 100644
index 0e2f5eb..0000000
--- a/app/components/workflow/store/workflow/index.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { useContext } from 'react'
-import type {
-  StateCreator,
-} from 'zustand'
-import {
-  useStore as useZustandStore,
-} from 'zustand'
-import { createStore } from 'zustand/vanilla'
-import type { ChatVariableSliceShape } from './chat-variable-slice'
-import { createChatVariableSlice } from './chat-variable-slice'
-import type { EnvVariableSliceShape } from './env-variable-slice'
-import { createEnvVariableSlice } from './env-variable-slice'
-import type { FormSliceShape } from './form-slice'
-import { createFormSlice } from './form-slice'
-import type { HelpLineSliceShape } from './help-line-slice'
-import { createHelpLineSlice } from './help-line-slice'
-import type { HistorySliceShape } from './history-slice'
-import { createHistorySlice } from './history-slice'
-import type { NodeSliceShape } from './node-slice'
-import { createNodeSlice } from './node-slice'
-import type { PanelSliceShape } from './panel-slice'
-import { createPanelSlice } from './panel-slice'
-import type { ToolSliceShape } from './tool-slice'
-import { createToolSlice } from './tool-slice'
-import type { VersionSliceShape } from './version-slice'
-import { createVersionSlice } from './version-slice'
-import type { WorkflowDraftSliceShape } from './workflow-draft-slice'
-import { createWorkflowDraftSlice } from './workflow-draft-slice'
-import type { WorkflowSliceShape } from './workflow-slice'
-import { createWorkflowSlice } from './workflow-slice'
-import { WorkflowContext } from '@/app/components/workflow/context'
-import type { WorkflowSliceShape as WorkflowAppSliceShape } from '@/app/components/workflow-app/store/workflow/workflow-slice'
-
-export type Shape =
-  ChatVariableSliceShape &
-  EnvVariableSliceShape &
-  FormSliceShape &
-  HelpLineSliceShape &
-  HistorySliceShape &
-  NodeSliceShape &
-  PanelSliceShape &
-  ToolSliceShape &
-  VersionSliceShape &
-  WorkflowDraftSliceShape &
-  WorkflowSliceShape &
-  WorkflowAppSliceShape
-
-type CreateWorkflowStoreParams = {
-  injectWorkflowStoreSliceFn?: StateCreator<WorkflowAppSliceShape>
-}
-
-export const createWorkflowStore = (params: CreateWorkflowStoreParams) => {
-  const { injectWorkflowStoreSliceFn } = params || {}
-
-  return createStore<Shape>((...args) => ({
-    ...createChatVariableSlice(...args),
-    ...createEnvVariableSlice(...args),
-    ...createFormSlice(...args),
-    ...createHelpLineSlice(...args),
-    ...createHistorySlice(...args),
-    ...createNodeSlice(...args),
-    ...createPanelSlice(...args),
-    ...createToolSlice(...args),
-    ...createVersionSlice(...args),
-    ...createWorkflowDraftSlice(...args),
-    ...createWorkflowSlice(...args),
-    ...(injectWorkflowStoreSliceFn?.(...args) || {} as WorkflowAppSliceShape),
-  }))
-}
-
-export function useStore<T>(selector: (state: Shape) => T): T {
-  const store = useContext(WorkflowContext)
-  if (!store)
-    throw new Error('Missing WorkflowContext.Provider in the tree')
-
-  return useZustandStore(store, selector)
-}
-
-export const useWorkflowStore = () => {
-  return useContext(WorkflowContext)!
-}
diff --git a/app/components/workflow/store/workflow/node-slice.ts b/app/components/workflow/store/workflow/node-slice.ts
deleted file mode 100644
index 2068ee0..0000000
--- a/app/components/workflow/store/workflow/node-slice.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type {
-  Node,
-} from '@/app/components/workflow/types'
-import type {
-  VariableAssignerNodeType,
-} from '@/app/components/workflow/nodes/variable-assigner/types'
-import type {
-  NodeTracing,
-} from '@/types/workflow'
-
-export type NodeSliceShape = {
-  showSingleRunPanel: boolean
-  setShowSingleRunPanel: (showSingleRunPanel: boolean) => void
-  nodeAnimation: boolean
-  setNodeAnimation: (nodeAnimation: boolean) => void
-  candidateNode?: Node
-  setCandidateNode: (candidateNode?: Node) => void
-  nodeMenu?: {
-    top: number
-    left: number
-    nodeId: string
-  }
-  setNodeMenu: (nodeMenu: NodeSliceShape['nodeMenu']) => void
-  showAssignVariablePopup?: {
-    nodeId: string
-    nodeData: Node['data']
-    variableAssignerNodeId: string
-    variableAssignerNodeData: VariableAssignerNodeType
-    variableAssignerNodeHandleId: string
-    parentNode?: Node
-    x: number
-    y: number
-  }
-  setShowAssignVariablePopup: (showAssignVariablePopup: NodeSliceShape['showAssignVariablePopup']) => void
-  hoveringAssignVariableGroupId?: string
-  setHoveringAssignVariableGroupId: (hoveringAssignVariableGroupId?: string) => void
-  connectingNodePayload?: { nodeId: string; nodeType: string; handleType: string; handleId: string | null }
-  setConnectingNodePayload: (startConnectingPayload?: NodeSliceShape['connectingNodePayload']) => void
-  enteringNodePayload?: {
-    nodeId: string
-    nodeData: VariableAssignerNodeType
-  }
-  setEnteringNodePayload: (enteringNodePayload?: NodeSliceShape['enteringNodePayload']) => void
-  iterTimes: number
-  setIterTimes: (iterTimes: number) => void
-  loopTimes: number
-  setLoopTimes: (loopTimes: number) => void
-  iterParallelLogMap: Map<string, Map<string, NodeTracing[]>>
-  setIterParallelLogMap: (iterParallelLogMap: Map<string, Map<string, NodeTracing[]>>) => void
-}
-
-export const createNodeSlice: StateCreator<NodeSliceShape> = set => ({
-  showSingleRunPanel: false,
-  setShowSingleRunPanel: showSingleRunPanel => set(() => ({ showSingleRunPanel })),
-  nodeAnimation: false,
-  setNodeAnimation: nodeAnimation => set(() => ({ nodeAnimation })),
-  candidateNode: undefined,
-  setCandidateNode: candidateNode => set(() => ({ candidateNode })),
-  nodeMenu: undefined,
-  setNodeMenu: nodeMenu => set(() => ({ nodeMenu })),
-  showAssignVariablePopup: undefined,
-  setShowAssignVariablePopup: showAssignVariablePopup => set(() => ({ showAssignVariablePopup })),
-  hoveringAssignVariableGroupId: undefined,
-  setHoveringAssignVariableGroupId: hoveringAssignVariableGroupId => set(() => ({ hoveringAssignVariableGroupId })),
-  connectingNodePayload: undefined,
-  setConnectingNodePayload: connectingNodePayload => set(() => ({ connectingNodePayload })),
-  enteringNodePayload: undefined,
-  setEnteringNodePayload: enteringNodePayload => set(() => ({ enteringNodePayload })),
-  iterTimes: 1,
-  setIterTimes: iterTimes => set(() => ({ iterTimes })),
-  loopTimes: 1,
-  setLoopTimes: loopTimes => set(() => ({ loopTimes })),
-  iterParallelLogMap: new Map<string, Map<string, NodeTracing[]>>(),
-  setIterParallelLogMap: iterParallelLogMap => set(() => ({ iterParallelLogMap })),
-})
diff --git a/app/components/workflow/store/workflow/panel-slice.ts b/app/components/workflow/store/workflow/panel-slice.ts
deleted file mode 100644
index 06a5f45..0000000
--- a/app/components/workflow/store/workflow/panel-slice.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import type { StateCreator } from 'zustand'
-
-export type PanelSliceShape = {
-  panelWidth: number
-  showFeaturesPanel: boolean
-  setShowFeaturesPanel: (showFeaturesPanel: boolean) => void
-  showWorkflowVersionHistoryPanel: boolean
-  setShowWorkflowVersionHistoryPanel: (showWorkflowVersionHistoryPanel: boolean) => void
-  showInputsPanel: boolean
-  setShowInputsPanel: (showInputsPanel: boolean) => void
-  showDebugAndPreviewPanel: boolean
-  setShowDebugAndPreviewPanel: (showDebugAndPreviewPanel: boolean) => void
-  panelMenu?: {
-    top: number
-    left: number
-  }
-  setPanelMenu: (panelMenu: PanelSliceShape['panelMenu']) => void
-}
-
-export const createPanelSlice: StateCreator<PanelSliceShape> = set => ({
-  panelWidth: localStorage.getItem('workflow-node-panel-width') ? Number.parseFloat(localStorage.getItem('workflow-node-panel-width')!) : 420,
-  showFeaturesPanel: false,
-  setShowFeaturesPanel: showFeaturesPanel => set(() => ({ showFeaturesPanel })),
-  showWorkflowVersionHistoryPanel: false,
-  setShowWorkflowVersionHistoryPanel: showWorkflowVersionHistoryPanel => set(() => ({ showWorkflowVersionHistoryPanel })),
-  showInputsPanel: false,
-  setShowInputsPanel: showInputsPanel => set(() => ({ showInputsPanel })),
-  showDebugAndPreviewPanel: false,
-  setShowDebugAndPreviewPanel: showDebugAndPreviewPanel => set(() => ({ showDebugAndPreviewPanel })),
-  panelMenu: undefined,
-  setPanelMenu: panelMenu => set(() => ({ panelMenu })),
-})
diff --git a/app/components/workflow/store/workflow/tool-slice.ts b/app/components/workflow/store/workflow/tool-slice.ts
deleted file mode 100644
index 2d54bbd..0000000
--- a/app/components/workflow/store/workflow/tool-slice.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type {
-  ToolWithProvider,
-} from '@/app/components/workflow/types'
-
-export type ToolSliceShape = {
-  buildInTools: ToolWithProvider[]
-  setBuildInTools: (tools: ToolWithProvider[]) => void
-  customTools: ToolWithProvider[]
-  setCustomTools: (tools: ToolWithProvider[]) => void
-  workflowTools: ToolWithProvider[]
-  setWorkflowTools: (tools: ToolWithProvider[]) => void
-  toolPublished: boolean
-  setToolPublished: (toolPublished: boolean) => void
-}
-
-export const createToolSlice: StateCreator<ToolSliceShape> = set => ({
-  buildInTools: [],
-  setBuildInTools: buildInTools => set(() => ({ buildInTools })),
-  customTools: [],
-  setCustomTools: customTools => set(() => ({ customTools })),
-  workflowTools: [],
-  setWorkflowTools: workflowTools => set(() => ({ workflowTools })),
-  toolPublished: false,
-  setToolPublished: toolPublished => set(() => ({ toolPublished })),
-})
diff --git a/app/components/workflow/store/workflow/version-slice.ts b/app/components/workflow/store/workflow/version-slice.ts
deleted file mode 100644
index df19218..0000000
--- a/app/components/workflow/store/workflow/version-slice.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type {
-  VersionHistory,
-} from '@/types/workflow'
-
-export type VersionSliceShape = {
-  draftUpdatedAt: number
-  setDraftUpdatedAt: (draftUpdatedAt: number) => void
-  publishedAt: number
-  setPublishedAt: (publishedAt: number) => void
-  currentVersion: VersionHistory | null
-  setCurrentVersion: (currentVersion: VersionHistory) => void
-  isRestoring: boolean
-  setIsRestoring: (isRestoring: boolean) => void
-}
-
-export const createVersionSlice: StateCreator<VersionSliceShape> = set => ({
-  draftUpdatedAt: 0,
-  setDraftUpdatedAt: draftUpdatedAt => set(() => ({ draftUpdatedAt: draftUpdatedAt ? draftUpdatedAt * 1000 : 0 })),
-  publishedAt: 0,
-  setPublishedAt: publishedAt => set(() => ({ publishedAt: publishedAt ? publishedAt * 1000 : 0 })),
-  currentVersion: null,
-  setCurrentVersion: currentVersion => set(() => ({ currentVersion })),
-  isRestoring: false,
-  setIsRestoring: isRestoring => set(() => ({ isRestoring })),
-})
diff --git a/app/components/workflow/store/workflow/workflow-draft-slice.ts b/app/components/workflow/store/workflow/workflow-draft-slice.ts
deleted file mode 100644
index ec28deb..0000000
--- a/app/components/workflow/store/workflow/workflow-draft-slice.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import type { StateCreator } from 'zustand'
-import { debounce } from 'lodash-es'
-import type { Viewport } from 'reactflow'
-import type {
-  Edge,
-  EnvironmentVariable,
-  Node,
-} from '@/app/components/workflow/types'
-
-export type WorkflowDraftSliceShape = {
-  backupDraft?: {
-    nodes: Node[]
-    edges: Edge[]
-    viewport: Viewport
-    features: Record<string, any>
-    environmentVariables: EnvironmentVariable[]
-  }
-  setBackupDraft: (backupDraft?: WorkflowDraftSliceShape['backupDraft']) => void
-  debouncedSyncWorkflowDraft: (fn: () => void) => void
-  syncWorkflowDraftHash: string
-  setSyncWorkflowDraftHash: (hash: string) => void
-  isSyncingWorkflowDraft: boolean
-  setIsSyncingWorkflowDraft: (isSyncingWorkflowDraft: boolean) => void
-}
-
-export const createWorkflowDraftSlice: StateCreator<WorkflowDraftSliceShape> = set => ({
-  backupDraft: undefined,
-  setBackupDraft: backupDraft => set(() => ({ backupDraft })),
-  debouncedSyncWorkflowDraft: debounce((syncWorkflowDraft) => {
-    syncWorkflowDraft()
-  }, 5000),
-  syncWorkflowDraftHash: '',
-  setSyncWorkflowDraftHash: syncWorkflowDraftHash => set(() => ({ syncWorkflowDraftHash })),
-  isSyncingWorkflowDraft: false,
-  setIsSyncingWorkflowDraft: isSyncingWorkflowDraft => set(() => ({ isSyncingWorkflowDraft })),
-})
diff --git a/app/components/workflow/store/workflow/workflow-slice.ts b/app/components/workflow/store/workflow/workflow-slice.ts
deleted file mode 100644
index 6bb69cd..0000000
--- a/app/components/workflow/store/workflow/workflow-slice.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import type { StateCreator } from 'zustand'
-import type {
-  Node,
-  WorkflowRunningData,
-} from '@/app/components/workflow/types'
-
-type PreviewRunningData = WorkflowRunningData & {
-  resultTabActive?: boolean
-  resultText?: string
-}
-
-export type WorkflowSliceShape = {
-  workflowRunningData?: PreviewRunningData
-  setWorkflowRunningData: (workflowData: PreviewRunningData) => void
-  clipboardElements: Node[]
-  setClipboardElements: (clipboardElements: Node[]) => void
-  selection: null | { x1: number; y1: number; x2: number; y2: number }
-  setSelection: (selection: WorkflowSliceShape['selection']) => void
-  bundleNodeSize: { width: number; height: number } | null
-  setBundleNodeSize: (bundleNodeSize: WorkflowSliceShape['bundleNodeSize']) => void
-  controlMode: 'pointer' | 'hand'
-  setControlMode: (controlMode: WorkflowSliceShape['controlMode']) => void
-  mousePosition: { pageX: number; pageY: number; elementX: number; elementY: number }
-  setMousePosition: (mousePosition: WorkflowSliceShape['mousePosition']) => void
-  showConfirm?: { title: string; desc?: string; onConfirm: () => void }
-  setShowConfirm: (showConfirm: WorkflowSliceShape['showConfirm']) => void
-  controlPromptEditorRerenderKey: number
-  setControlPromptEditorRerenderKey: (controlPromptEditorRerenderKey: number) => void
-  showImportDSLModal: boolean
-  setShowImportDSLModal: (showImportDSLModal: boolean) => void
-  showTips: string
-  setShowTips: (showTips: string) => void
-  workflowConfig?: Record<string, any>
-  setWorkflowConfig: (workflowConfig: Record<string, any>) => void
-}
-
-export const createWorkflowSlice: StateCreator<WorkflowSliceShape> = set => ({
-  workflowRunningData: undefined,
-  setWorkflowRunningData: workflowRunningData => set(() => ({ workflowRunningData })),
-  clipboardElements: [],
-  setClipboardElements: clipboardElements => set(() => ({ clipboardElements })),
-  selection: null,
-  setSelection: selection => set(() => ({ selection })),
-  bundleNodeSize: null,
-  setBundleNodeSize: bundleNodeSize => set(() => ({ bundleNodeSize })),
-  controlMode: localStorage.getItem('workflow-operation-mode') === 'pointer' ? 'pointer' : 'hand',
-  setControlMode: (controlMode) => {
-    set(() => ({ controlMode }))
-    localStorage.setItem('workflow-operation-mode', controlMode)
-  },
-  mousePosition: { pageX: 0, pageY: 0, elementX: 0, elementY: 0 },
-  setMousePosition: mousePosition => set(() => ({ mousePosition })),
-  showConfirm: undefined,
-  setShowConfirm: showConfirm => set(() => ({ showConfirm })),
-  controlPromptEditorRerenderKey: 0,
-  setControlPromptEditorRerenderKey: controlPromptEditorRerenderKey => set(() => ({ controlPromptEditorRerenderKey })),
-  showImportDSLModal: false,
-  setShowImportDSLModal: showImportDSLModal => set(() => ({ showImportDSLModal })),
-  showTips: '',
-  setShowTips: showTips => set(() => ({ showTips })),
-  workflowConfig: undefined,
-  setWorkflowConfig: workflowConfig => set(() => ({ workflowConfig })),
-})
diff --git a/app/components/workflow/utils/common.ts b/app/components/workflow/utils/common.ts
deleted file mode 100644
index 8a8afbb..0000000
--- a/app/components/workflow/utils/common.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-export const isMac = () => {
-  return navigator.userAgent.toUpperCase().includes('MAC')
-}
-
-const specialKeysNameMap: Record<string, string | undefined> = {
-  ctrl: '鈱�',
-  alt: '鈱�',
-  shift: '鈬�',
-}
-
-export const getKeyboardKeyNameBySystem = (key: string) => {
-  if (isMac())
-    return specialKeysNameMap[key] || key
-
-  return key
-}
-
-const specialKeysCodeMap: Record<string, string | undefined> = {
-  ctrl: 'meta',
-}
-
-export const getKeyboardKeyCodeBySystem = (key: string) => {
-  if (isMac())
-    return specialKeysCodeMap[key] || key
-
-  return key
-}
-
-export const isEventTargetInputArea = (target: HTMLElement) => {
-  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')
-    return true
-
-  if (target.contentEditable === 'true')
-    return true
-}
diff --git a/app/components/workflow/utils/edge.ts b/app/components/workflow/utils/edge.ts
deleted file mode 100644
index b539c21..0000000
--- a/app/components/workflow/utils/edge.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import {
-  NodeRunningStatus,
-} from '../types'
-
-export const getEdgeColor = (nodeRunningStatus?: NodeRunningStatus, isFailBranch?: boolean) => {
-  if (nodeRunningStatus === NodeRunningStatus.Succeeded)
-    return 'var(--color-workflow-link-line-success-handle)'
-
-  if (nodeRunningStatus === NodeRunningStatus.Failed)
-    return 'var(--color-workflow-link-line-error-handle)'
-
-  if (nodeRunningStatus === NodeRunningStatus.Exception)
-    return 'var(--color-workflow-link-line-failure-handle)'
-
-  if (nodeRunningStatus === NodeRunningStatus.Running) {
-    if (isFailBranch)
-      return 'var(--color-workflow-link-line-failure-handle)'
-
-    return 'var(--color-workflow-link-line-handle)'
-  }
-
-  return 'var(--color-workflow-link-line-normal)'
-}
diff --git a/app/components/workflow/utils/index.ts b/app/components/workflow/utils/index.ts
deleted file mode 100644
index 4a1da76..0000000
--- a/app/components/workflow/utils/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export * from './node'
-export * from './edge'
-export * from './workflow-init'
-export * from './layout'
-export * from './common'
-export * from './tool'
-export * from './workflow'
-export * from './variable'
diff --git a/app/components/workflow/utils/layout.ts b/app/components/workflow/utils/layout.ts
deleted file mode 100644
index 3c4189b..0000000
--- a/app/components/workflow/utils/layout.ts
+++ /dev/null
@@ -1,178 +0,0 @@
-import dagre from '@dagrejs/dagre'
-import {
-  cloneDeep,
-} from 'lodash-es'
-import type {
-  Edge,
-  Node,
-} from '../types'
-import {
-  BlockEnum,
-} from '../types'
-import {
-  CUSTOM_NODE,
-  NODE_LAYOUT_HORIZONTAL_PADDING,
-  NODE_LAYOUT_MIN_DISTANCE,
-  NODE_LAYOUT_VERTICAL_PADDING,
-} from '../constants'
-import { CUSTOM_ITERATION_START_NODE } from '../nodes/iteration-start/constants'
-import { CUSTOM_LOOP_START_NODE } from '../nodes/loop-start/constants'
-
-export const getLayoutByDagre = (originNodes: Node[], originEdges: Edge[]) => {
-  const dagreGraph = new dagre.graphlib.Graph()
-  dagreGraph.setDefaultEdgeLabel(() => ({}))
-  const nodes = cloneDeep(originNodes).filter(node => !node.parentId && node.type === CUSTOM_NODE)
-  const edges = cloneDeep(originEdges).filter(edge => (!edge.data?.isInIteration && !edge.data?.isInLoop))
-  dagreGraph.setGraph({
-    rankdir: 'LR',
-    align: 'UL',
-    nodesep: 40,
-    ranksep: 60,
-    ranker: 'tight-tree',
-    marginx: 30,
-    marginy: 200,
-  })
-  nodes.forEach((node) => {
-    dagreGraph.setNode(node.id, {
-      width: node.width!,
-      height: node.height!,
-    })
-  })
-  edges.forEach((edge) => {
-    dagreGraph.setEdge(edge.source, edge.target)
-  })
-  dagre.layout(dagreGraph)
-  return dagreGraph
-}
-
-export const getLayoutForChildNodes = (parentNodeId: string, originNodes: Node[], originEdges: Edge[]) => {
-  const dagreGraph = new dagre.graphlib.Graph()
-  dagreGraph.setDefaultEdgeLabel(() => ({}))
-
-  const nodes = cloneDeep(originNodes).filter(node => node.parentId === parentNodeId)
-  const edges = cloneDeep(originEdges).filter(edge =>
-    (edge.data?.isInIteration && edge.data?.iteration_id === parentNodeId)
-    || (edge.data?.isInLoop && edge.data?.loop_id === parentNodeId),
-  )
-
-  const startNode = nodes.find(node =>
-    node.type === CUSTOM_ITERATION_START_NODE
-    || node.type === CUSTOM_LOOP_START_NODE
-    || node.data?.type === BlockEnum.LoopStart
-    || node.data?.type === BlockEnum.IterationStart,
-  )
-
-  if (!startNode) {
-    dagreGraph.setGraph({
-      rankdir: 'LR',
-      align: 'UL',
-      nodesep: 40,
-      ranksep: 60,
-      marginx: NODE_LAYOUT_HORIZONTAL_PADDING,
-      marginy: NODE_LAYOUT_VERTICAL_PADDING,
-    })
-
-    nodes.forEach((node) => {
-      dagreGraph.setNode(node.id, {
-        width: node.width || 244,
-        height: node.height || 100,
-      })
-    })
-
-    edges.forEach((edge) => {
-      dagreGraph.setEdge(edge.source, edge.target)
-    })
-
-    dagre.layout(dagreGraph)
-    return dagreGraph
-  }
-
-  const startNodeOutEdges = edges.filter(edge => edge.source === startNode.id)
-  const firstConnectedNodes = startNodeOutEdges.map(edge =>
-    nodes.find(node => node.id === edge.target),
-  ).filter(Boolean) as Node[]
-
-  const nonStartNodes = nodes.filter(node => node.id !== startNode.id)
-  const nonStartEdges = edges.filter(edge => edge.source !== startNode.id && edge.target !== startNode.id)
-
-  dagreGraph.setGraph({
-    rankdir: 'LR',
-    align: 'UL',
-    nodesep: 40,
-    ranksep: 60,
-    marginx: NODE_LAYOUT_HORIZONTAL_PADDING / 2,
-    marginy: NODE_LAYOUT_VERTICAL_PADDING / 2,
-  })
-
-  nonStartNodes.forEach((node) => {
-    dagreGraph.setNode(node.id, {
-      width: node.width || 244,
-      height: node.height || 100,
-    })
-  })
-
-  nonStartEdges.forEach((edge) => {
-    dagreGraph.setEdge(edge.source, edge.target)
-  })
-
-  dagre.layout(dagreGraph)
-
-  const startNodeSize = {
-    width: startNode.width || 44,
-    height: startNode.height || 48,
-  }
-
-  const startNodeX = NODE_LAYOUT_HORIZONTAL_PADDING / 1.5
-  let startNodeY = 100
-
-  let minFirstLayerX = Infinity
-  let avgFirstLayerY = 0
-  let firstLayerCount = 0
-
-  if (firstConnectedNodes.length > 0) {
-    firstConnectedNodes.forEach((node) => {
-      if (dagreGraph.node(node.id)) {
-        const nodePos = dagreGraph.node(node.id)
-        avgFirstLayerY += nodePos.y
-        firstLayerCount++
-        minFirstLayerX = Math.min(minFirstLayerX, nodePos.x - nodePos.width / 2)
-      }
-    })
-
-    if (firstLayerCount > 0) {
-      avgFirstLayerY /= firstLayerCount
-      startNodeY = avgFirstLayerY
-    }
-
-    const minRequiredX = startNodeX + startNodeSize.width + NODE_LAYOUT_MIN_DISTANCE
-
-    if (minFirstLayerX < minRequiredX) {
-      const shiftX = minRequiredX - minFirstLayerX
-
-      nonStartNodes.forEach((node) => {
-        if (dagreGraph.node(node.id)) {
-          const nodePos = dagreGraph.node(node.id)
-          dagreGraph.setNode(node.id, {
-            x: nodePos.x + shiftX,
-            y: nodePos.y,
-            width: nodePos.width,
-            height: nodePos.height,
-          })
-        }
-      })
-    }
-  }
-
-  dagreGraph.setNode(startNode.id, {
-    x: startNodeX + startNodeSize.width / 2,
-    y: startNodeY,
-    width: startNodeSize.width,
-    height: startNodeSize.height,
-  })
-
-  startNodeOutEdges.forEach((edge) => {
-    dagreGraph.setEdge(edge.source, edge.target)
-  })
-
-  return dagreGraph
-}
diff --git a/app/components/workflow/utils/node.ts b/app/components/workflow/utils/node.ts
deleted file mode 100644
index 7a9e33b..0000000
--- a/app/components/workflow/utils/node.ts
+++ /dev/null
@@ -1,145 +0,0 @@
-import {
-  Position,
-} from 'reactflow'
-import type {
-  Node,
-} from '../types'
-import {
-  BlockEnum,
-} from '../types'
-import {
-  CUSTOM_NODE,
-  ITERATION_CHILDREN_Z_INDEX,
-  ITERATION_NODE_Z_INDEX,
-  LOOP_CHILDREN_Z_INDEX,
-  LOOP_NODE_Z_INDEX,
-} from '../constants'
-import { CUSTOM_ITERATION_START_NODE } from '../nodes/iteration-start/constants'
-import { CUSTOM_LOOP_START_NODE } from '../nodes/loop-start/constants'
-import type { IterationNodeType } from '../nodes/iteration/types'
-import type { LoopNodeType } from '../nodes/loop/types'
-import { CUSTOM_SIMPLE_NODE } from '@/app/components/workflow/simple-node/constants'
-
-export function generateNewNode({ data, position, id, zIndex, type, ...rest }: Omit<Node, 'id'> & { id?: string }): {
-  newNode: Node
-  newIterationStartNode?: Node
-  newLoopStartNode?: Node
-} {
-  const newNode = {
-    id: id || `${Date.now()}`,
-    type: type || CUSTOM_NODE,
-    data,
-    position,
-    targetPosition: Position.Left,
-    sourcePosition: Position.Right,
-    zIndex: data.type === BlockEnum.Iteration ? ITERATION_NODE_Z_INDEX : (data.type === BlockEnum.Loop ? LOOP_NODE_Z_INDEX : zIndex),
-    ...rest,
-  } as Node
-
-  if (data.type === BlockEnum.Iteration) {
-    const newIterationStartNode = getIterationStartNode(newNode.id);
-    (newNode.data as IterationNodeType).start_node_id = newIterationStartNode.id;
-    (newNode.data as IterationNodeType)._children = [{ nodeId: newIterationStartNode.id, nodeType: BlockEnum.IterationStart }]
-    return {
-      newNode,
-      newIterationStartNode,
-    }
-  }
-
-  if (data.type === BlockEnum.Loop) {
-    const newLoopStartNode = getLoopStartNode(newNode.id);
-    (newNode.data as LoopNodeType).start_node_id = newLoopStartNode.id;
-    (newNode.data as LoopNodeType)._children = [{ nodeId: newLoopStartNode.id, nodeType: BlockEnum.LoopStart }]
-    return {
-      newNode,
-      newLoopStartNode,
-    }
-  }
-
-  return {
-    newNode,
-  }
-}
-
-export function getIterationStartNode(iterationId: string): Node {
-  return generateNewNode({
-    id: `${iterationId}start`,
-    type: CUSTOM_ITERATION_START_NODE,
-    data: {
-      title: '',
-      desc: '',
-      type: BlockEnum.IterationStart,
-      isInIteration: true,
-    },
-    position: {
-      x: 24,
-      y: 68,
-    },
-    zIndex: ITERATION_CHILDREN_Z_INDEX,
-    parentId: iterationId,
-    selectable: false,
-    draggable: false,
-  }).newNode
-}
-
-export function getLoopStartNode(loopId: string): Node {
-  return generateNewNode({
-    id: `${loopId}start`,
-    type: CUSTOM_LOOP_START_NODE,
-    data: {
-      title: '',
-      desc: '',
-      type: BlockEnum.LoopStart,
-      isInLoop: true,
-    },
-    position: {
-      x: 24,
-      y: 68,
-    },
-    zIndex: LOOP_CHILDREN_Z_INDEX,
-    parentId: loopId,
-    selectable: false,
-    draggable: false,
-  }).newNode
-}
-
-export const genNewNodeTitleFromOld = (oldTitle: string) => {
-  const regex = /^(.+?)\s*\((\d+)\)\s*$/
-  const match = oldTitle.match(regex)
-
-  if (match) {
-    const title = match[1]
-    const num = Number.parseInt(match[2], 10)
-    return `${title} (${num + 1})`
-  }
-  else {
-    return `${oldTitle} (1)`
-  }
-}
-
-export const getTopLeftNodePosition = (nodes: Node[]) => {
-  let minX = Infinity
-  let minY = Infinity
-
-  nodes.forEach((node) => {
-    if (node.position.x < minX)
-      minX = node.position.x
-
-    if (node.position.y < minY)
-      minY = node.position.y
-  })
-
-  return {
-    x: minX,
-    y: minY,
-  }
-}
-
-export const hasRetryNode = (nodeType?: BlockEnum) => {
-  return nodeType === BlockEnum.LLM || nodeType === BlockEnum.Tool || nodeType === BlockEnum.HttpRequest || nodeType === BlockEnum.Code
-}
-
-export const getNodeCustomTypeByNodeDataType = (nodeType: BlockEnum) => {
-  if (nodeType === BlockEnum.LoopEnd)
-    return CUSTOM_SIMPLE_NODE
-}
diff --git a/app/components/workflow/utils/tool.ts b/app/components/workflow/utils/tool.ts
deleted file mode 100644
index d1dda12..0000000
--- a/app/components/workflow/utils/tool.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import type {
-  InputVar,
-  ToolWithProvider,
-} from '../types'
-import type { ToolNodeType } from '../nodes/tool/types'
-import { CollectionType } from '@/app/components/tools/types'
-import { toolParametersToFormSchemas } from '@/app/components/tools/utils/to-form-schema'
-import { canFindTool } from '@/utils'
-
-export const getToolCheckParams = (
-  toolData: ToolNodeType,
-  buildInTools: ToolWithProvider[],
-  customTools: ToolWithProvider[],
-  workflowTools: ToolWithProvider[],
-  language: string,
-) => {
-  const { provider_id, provider_type, tool_name } = toolData
-  const isBuiltIn = provider_type === CollectionType.builtIn
-  const currentTools = provider_type === CollectionType.builtIn ? buildInTools : provider_type === CollectionType.custom ? customTools : workflowTools
-  const currCollection = currentTools.find(item => canFindTool(item.id, provider_id))
-  const currTool = currCollection?.tools.find(tool => tool.name === tool_name)
-  const formSchemas = currTool ? toolParametersToFormSchemas(currTool.parameters) : []
-  const toolInputVarSchema = formSchemas.filter(item => item.form === 'llm')
-  const toolSettingSchema = formSchemas.filter(item => item.form !== 'llm')
-
-  return {
-    toolInputsSchema: (() => {
-      const formInputs: InputVar[] = []
-      toolInputVarSchema.forEach((item: any) => {
-        formInputs.push({
-          label: item.label[language] || item.label.en_US,
-          variable: item.variable,
-          type: item.type,
-          required: item.required,
-        })
-      })
-      return formInputs
-    })(),
-    notAuthed: isBuiltIn && !!currCollection?.allow_delete && !currCollection?.is_team_authorization,
-    toolSettingSchema,
-    language,
-  }
-}
diff --git a/app/components/workflow/utils/variable.ts b/app/components/workflow/utils/variable.ts
deleted file mode 100644
index f73f92e..0000000
--- a/app/components/workflow/utils/variable.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type {
-  ValueSelector,
-} from '../types'
-import type {
-  BlockEnum,
-} from '../types'
-import { hasErrorHandleNode } from '.'
-
-export const variableTransformer = (v: ValueSelector | string) => {
-  if (typeof v === 'string')
-    return v.replace(/^{{#|#}}$/g, '').split('.')
-
-  return `{{#${v.join('.')}#}}`
-}
-
-export const isExceptionVariable = (variable: string, nodeType?: BlockEnum) => {
-  return (variable === 'error_message' || variable === 'error_type') && hasErrorHandleNode(nodeType)
-}
diff --git a/app/components/workflow/utils/workflow-init.spec.ts b/app/components/workflow/utils/workflow-init.spec.ts
deleted file mode 100644
index 8b7bdfa..0000000
--- a/app/components/workflow/utils/workflow-init.spec.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { preprocessNodesAndEdges } from './workflow-init'
-import { BlockEnum } from '@/app/components/workflow/types'
-import type {
-  Node,
-} from '@/app/components/workflow/types'
-import { CUSTOM_ITERATION_START_NODE } from '@/app/components/workflow/nodes/iteration-start/constants'
-
-describe('preprocessNodesAndEdges', () => {
-  it('process nodes without iteration node or loop node should return origin nodes and edges.', () => {
-    const nodes = [
-      {
-        data: {
-          type: BlockEnum.Code,
-        },
-      },
-    ]
-
-    const result = preprocessNodesAndEdges(nodes as Node[], [])
-    expect(result).toEqual({
-      nodes,
-      edges: [],
-    })
-  })
-
-  it('process nodes with iteration node should return nodes with iteration start node', () => {
-    const nodes = [
-      {
-        id: 'iteration',
-        data: {
-          type: BlockEnum.Iteration,
-        },
-      },
-    ]
-
-    const result = preprocessNodesAndEdges(nodes as Node[], [])
-    expect(result.nodes).toEqual(
-      expect.arrayContaining([
-        expect.objectContaining({
-          data: expect.objectContaining({
-            type: BlockEnum.IterationStart,
-          }),
-        }),
-      ]),
-    )
-  })
-
-  it('process nodes with iteration node start should return origin', () => {
-    const nodes = [
-      {
-        data: {
-          type: BlockEnum.Iteration,
-          start_node_id: 'iterationStart',
-        },
-      },
-      {
-        id: 'iterationStart',
-        type: CUSTOM_ITERATION_START_NODE,
-        data: {
-          type: BlockEnum.IterationStart,
-        },
-      },
-    ]
-    const result = preprocessNodesAndEdges(nodes as Node[], [])
-    expect(result).toEqual({
-      nodes,
-      edges: [],
-    })
-  })
-})
diff --git a/app/components/workflow/utils/workflow-init.ts b/app/components/workflow/utils/workflow-init.ts
deleted file mode 100644
index 93a6123..0000000
--- a/app/components/workflow/utils/workflow-init.ts
+++ /dev/null
@@ -1,338 +0,0 @@
-import {
-  getConnectedEdges,
-} from 'reactflow'
-import {
-  cloneDeep,
-} from 'lodash-es'
-import type {
-  Edge,
-  Node,
-} from '../types'
-import {
-  BlockEnum,
-  ErrorHandleMode,
-} from '../types'
-import {
-  CUSTOM_NODE,
-  DEFAULT_RETRY_INTERVAL,
-  DEFAULT_RETRY_MAX,
-  ITERATION_CHILDREN_Z_INDEX,
-  LOOP_CHILDREN_Z_INDEX,
-  NODE_WIDTH_X_OFFSET,
-  START_INITIAL_POSITION,
-} from '../constants'
-import { CUSTOM_ITERATION_START_NODE } from '../nodes/iteration-start/constants'
-import { CUSTOM_LOOP_START_NODE } from '../nodes/loop-start/constants'
-import type { QuestionClassifierNodeType } from '../nodes/question-classifier/types'
-import type { IfElseNodeType } from '../nodes/if-else/types'
-import { branchNameCorrect } from '../nodes/if-else/utils'
-import type { IterationNodeType } from '../nodes/iteration/types'
-import type { LoopNodeType } from '../nodes/loop/types'
-import {
-  getIterationStartNode,
-  getLoopStartNode,
-} from '.'
-import { correctModelProvider } from '@/utils'
-
-const WHITE = 'WHITE'
-const GRAY = 'GRAY'
-const BLACK = 'BLACK'
-const isCyclicUtil = (nodeId: string, color: Record<string, string>, adjList: Record<string, string[]>, stack: string[]) => {
-  color[nodeId] = GRAY
-  stack.push(nodeId)
-
-  for (let i = 0; i < adjList[nodeId].length; ++i) {
-    const childId = adjList[nodeId][i]
-
-    if (color[childId] === GRAY) {
-      stack.push(childId)
-      return true
-    }
-    if (color[childId] === WHITE && isCyclicUtil(childId, color, adjList, stack))
-      return true
-  }
-  color[nodeId] = BLACK
-  if (stack.length > 0 && stack[stack.length - 1] === nodeId)
-    stack.pop()
-  return false
-}
-
-const getCycleEdges = (nodes: Node[], edges: Edge[]) => {
-  const adjList: Record<string, string[]> = {}
-  const color: Record<string, string> = {}
-  const stack: string[] = []
-
-  for (const node of nodes) {
-    color[node.id] = WHITE
-    adjList[node.id] = []
-  }
-
-  for (const edge of edges)
-    adjList[edge.source]?.push(edge.target)
-
-  for (let i = 0; i < nodes.length; i++) {
-    if (color[nodes[i].id] === WHITE)
-      isCyclicUtil(nodes[i].id, color, adjList, stack)
-  }
-
-  const cycleEdges = []
-  if (stack.length > 0) {
-    const cycleNodes = new Set(stack)
-    for (const edge of edges) {
-      if (cycleNodes.has(edge.source) && cycleNodes.has(edge.target))
-        cycleEdges.push(edge)
-    }
-  }
-
-  return cycleEdges
-}
-
-export const preprocessNodesAndEdges = (nodes: Node[], edges: Edge[]) => {
-  const hasIterationNode = nodes.some(node => node.data.type === BlockEnum.Iteration)
-  const hasLoopNode = nodes.some(node => node.data.type === BlockEnum.Loop)
-
-  if (!hasIterationNode && !hasLoopNode) {
-    return {
-      nodes,
-      edges,
-    }
-  }
-
-  const nodesMap = nodes.reduce((prev, next) => {
-    prev[next.id] = next
-    return prev
-  }, {} as Record<string, Node>)
-
-  const iterationNodesWithStartNode = []
-  const iterationNodesWithoutStartNode = []
-  const loopNodesWithStartNode = []
-  const loopNodesWithoutStartNode = []
-
-  for (let i = 0; i < nodes.length; i++) {
-    const currentNode = nodes[i] as Node<IterationNodeType | LoopNodeType>
-
-    if (currentNode.data.type === BlockEnum.Iteration) {
-      if (currentNode.data.start_node_id) {
-        if (nodesMap[currentNode.data.start_node_id]?.type !== CUSTOM_ITERATION_START_NODE)
-          iterationNodesWithStartNode.push(currentNode)
-      }
-      else {
-        iterationNodesWithoutStartNode.push(currentNode)
-      }
-    }
-
-    if (currentNode.data.type === BlockEnum.Loop) {
-      if (currentNode.data.start_node_id) {
-        if (nodesMap[currentNode.data.start_node_id]?.type !== CUSTOM_LOOP_START_NODE)
-          loopNodesWithStartNode.push(currentNode)
-      }
-      else {
-        loopNodesWithoutStartNode.push(currentNode)
-      }
-    }
-  }
-
-  const newIterationStartNodesMap = {} as Record<string, Node>
-  const newIterationStartNodes = [...iterationNodesWithStartNode, ...iterationNodesWithoutStartNode].map((iterationNode, index) => {
-    const newNode = getIterationStartNode(iterationNode.id)
-    newNode.id = newNode.id + index
-    newIterationStartNodesMap[iterationNode.id] = newNode
-    return newNode
-  })
-
-  const newLoopStartNodesMap = {} as Record<string, Node>
-  const newLoopStartNodes = [...loopNodesWithStartNode, ...loopNodesWithoutStartNode].map((loopNode, index) => {
-    const newNode = getLoopStartNode(loopNode.id)
-    newNode.id = newNode.id + index
-    newLoopStartNodesMap[loopNode.id] = newNode
-    return newNode
-  })
-
-  const newEdges = [...iterationNodesWithStartNode, ...loopNodesWithStartNode].map((nodeItem) => {
-    const isIteration = nodeItem.data.type === BlockEnum.Iteration
-    const newNode = (isIteration ? newIterationStartNodesMap : newLoopStartNodesMap)[nodeItem.id]
-    const startNode = nodesMap[nodeItem.data.start_node_id]
-    const source = newNode.id
-    const sourceHandle = 'source'
-    const target = startNode.id
-    const targetHandle = 'target'
-
-    const parentNode = nodes.find(node => node.id === startNode.parentId) || null
-    const isInIteration = !!parentNode && parentNode.data.type === BlockEnum.Iteration
-    const isInLoop = !!parentNode && parentNode.data.type === BlockEnum.Loop
-
-    return {
-      id: `${source}-${sourceHandle}-${target}-${targetHandle}`,
-      type: 'custom',
-      source,
-      sourceHandle,
-      target,
-      targetHandle,
-      data: {
-        sourceType: newNode.data.type,
-        targetType: startNode.data.type,
-        isInIteration,
-        iteration_id: isInIteration ? startNode.parentId : undefined,
-        isInLoop,
-        loop_id: isInLoop ? startNode.parentId : undefined,
-        _connectedNodeIsSelected: true,
-      },
-      zIndex: isIteration ? ITERATION_CHILDREN_Z_INDEX : LOOP_CHILDREN_Z_INDEX,
-    }
-  })
-  nodes.forEach((node) => {
-    if (node.data.type === BlockEnum.Iteration && newIterationStartNodesMap[node.id])
-      (node.data as IterationNodeType).start_node_id = newIterationStartNodesMap[node.id].id
-
-    if (node.data.type === BlockEnum.Loop && newLoopStartNodesMap[node.id])
-      (node.data as LoopNodeType).start_node_id = newLoopStartNodesMap[node.id].id
-  })
-
-  return {
-    nodes: [...nodes, ...newIterationStartNodes, ...newLoopStartNodes],
-    edges: [...edges, ...newEdges],
-  }
-}
-
-export const initialNodes = (originNodes: Node[], originEdges: Edge[]) => {
-  const { nodes, edges } = preprocessNodesAndEdges(cloneDeep(originNodes), cloneDeep(originEdges))
-  const firstNode = nodes[0]
-
-  if (!firstNode?.position) {
-    nodes.forEach((node, index) => {
-      node.position = {
-        x: START_INITIAL_POSITION.x + index * NODE_WIDTH_X_OFFSET,
-        y: START_INITIAL_POSITION.y,
-      }
-    })
-  }
-
-  const iterationOrLoopNodeMap = nodes.reduce((acc, node) => {
-    if (node.parentId) {
-      if (acc[node.parentId])
-        acc[node.parentId].push({ nodeId: node.id, nodeType: node.data.type })
-      else
-        acc[node.parentId] = [{ nodeId: node.id, nodeType: node.data.type }]
-    }
-    return acc
-  }, {} as Record<string, { nodeId: string; nodeType: BlockEnum }[]>)
-
-  return nodes.map((node) => {
-    if (!node.type)
-      node.type = CUSTOM_NODE
-
-    const connectedEdges = getConnectedEdges([node], edges)
-    node.data._connectedSourceHandleIds = connectedEdges.filter(edge => edge.source === node.id).map(edge => edge.sourceHandle || 'source')
-    node.data._connectedTargetHandleIds = connectedEdges.filter(edge => edge.target === node.id).map(edge => edge.targetHandle || 'target')
-
-    if (node.data.type === BlockEnum.IfElse) {
-      const nodeData = node.data as IfElseNodeType
-
-      if (!nodeData.cases && nodeData.logical_operator && nodeData.conditions) {
-        (node.data as IfElseNodeType).cases = [
-          {
-            case_id: 'true',
-            logical_operator: nodeData.logical_operator,
-            conditions: nodeData.conditions,
-          },
-        ]
-      }
-      node.data._targetBranches = branchNameCorrect([
-        ...(node.data as IfElseNodeType).cases.map(item => ({ id: item.case_id, name: '' })),
-        { id: 'false', name: '' },
-      ])
-    }
-
-    if (node.data.type === BlockEnum.QuestionClassifier) {
-      node.data._targetBranches = (node.data as QuestionClassifierNodeType).classes.map((topic) => {
-        return topic
-      })
-    }
-
-    if (node.data.type === BlockEnum.Iteration) {
-      const iterationNodeData = node.data as IterationNodeType
-      iterationNodeData._children = iterationOrLoopNodeMap[node.id] || []
-      iterationNodeData.is_parallel = iterationNodeData.is_parallel || false
-      iterationNodeData.parallel_nums = iterationNodeData.parallel_nums || 10
-      iterationNodeData.error_handle_mode = iterationNodeData.error_handle_mode || ErrorHandleMode.Terminated
-    }
-
-    // TODO: loop error handle mode
-    if (node.data.type === BlockEnum.Loop) {
-      const loopNodeData = node.data as LoopNodeType
-      loopNodeData._children = iterationOrLoopNodeMap[node.id] || []
-      loopNodeData.error_handle_mode = loopNodeData.error_handle_mode || ErrorHandleMode.Terminated
-    }
-
-    // legacy provider handle
-    if (node.data.type === BlockEnum.LLM)
-      (node as any).data.model.provider = correctModelProvider((node as any).data.model.provider)
-
-    if (node.data.type === BlockEnum.KnowledgeRetrieval && (node as any).data.multiple_retrieval_config?.reranking_model)
-      (node as any).data.multiple_retrieval_config.reranking_model.provider = correctModelProvider((node as any).data.multiple_retrieval_config?.reranking_model.provider)
-
-    if (node.data.type === BlockEnum.QuestionClassifier)
-      (node as any).data.model.provider = correctModelProvider((node as any).data.model.provider)
-
-    if (node.data.type === BlockEnum.ParameterExtractor)
-      (node as any).data.model.provider = correctModelProvider((node as any).data.model.provider)
-    if (node.data.type === BlockEnum.HttpRequest && !node.data.retry_config) {
-      node.data.retry_config = {
-        retry_enabled: true,
-        max_retries: DEFAULT_RETRY_MAX,
-        retry_interval: DEFAULT_RETRY_INTERVAL,
-      }
-    }
-
-    return node
-  })
-}
-
-export const initialEdges = (originEdges: Edge[], originNodes: Node[]) => {
-  const { nodes, edges } = preprocessNodesAndEdges(cloneDeep(originNodes), cloneDeep(originEdges))
-  let selectedNode: Node | null = null
-  const nodesMap = nodes.reduce((acc, node) => {
-    acc[node.id] = node
-
-    if (node.data?.selected)
-      selectedNode = node
-
-    return acc
-  }, {} as Record<string, Node>)
-
-  const cycleEdges = getCycleEdges(nodes, edges)
-  return edges.filter((edge) => {
-    return !cycleEdges.find(cycEdge => cycEdge.source === edge.source && cycEdge.target === edge.target)
-  }).map((edge) => {
-    edge.type = 'custom'
-
-    if (!edge.sourceHandle)
-      edge.sourceHandle = 'source'
-
-    if (!edge.targetHandle)
-      edge.targetHandle = 'target'
-
-    if (!edge.data?.sourceType && edge.source && nodesMap[edge.source]) {
-      edge.data = {
-        ...edge.data,
-        sourceType: nodesMap[edge.source].data.type!,
-      } as any
-    }
-
-    if (!edge.data?.targetType && edge.target && nodesMap[edge.target]) {
-      edge.data = {
-        ...edge.data,
-        targetType: nodesMap[edge.target].data.type!,
-      } as any
-    }
-
-    if (selectedNode) {
-      edge.data = {
-        ...edge.data,
-        _connectedNodeIsSelected: edge.source === selectedNode.id || edge.target === selectedNode.id,
-      } as any
-    }
-
-    return edge
-  })
-}
diff --git a/app/components/workflow/utils/workflow.ts b/app/components/workflow/utils/workflow.ts
deleted file mode 100644
index 88c31f0..0000000
--- a/app/components/workflow/utils/workflow.ts
+++ /dev/null
@@ -1,329 +0,0 @@
-import {
-  getConnectedEdges,
-  getIncomers,
-  getOutgoers,
-} from 'reactflow'
-import { v4 as uuid4 } from 'uuid'
-import {
-  groupBy,
-  isEqual,
-  uniqBy,
-} from 'lodash-es'
-import type {
-  Edge,
-  Node,
-} from '../types'
-import {
-  BlockEnum,
-} from '../types'
-import type { IterationNodeType } from '../nodes/iteration/types'
-import type { LoopNodeType } from '../nodes/loop/types'
-
-export const canRunBySingle = (nodeType: BlockEnum) => {
-  return nodeType === BlockEnum.LLM
-    || nodeType === BlockEnum.KnowledgeRetrieval
-    || nodeType === BlockEnum.Code
-    || nodeType === BlockEnum.TemplateTransform
-    || nodeType === BlockEnum.QuestionClassifier
-    || nodeType === BlockEnum.HttpRequest
-    || nodeType === BlockEnum.Tool
-    || nodeType === BlockEnum.ParameterExtractor
-    || nodeType === BlockEnum.Iteration
-    || nodeType === BlockEnum.Agent
-    || nodeType === BlockEnum.DocExtractor
-    || nodeType === BlockEnum.Loop
-}
-
-type ConnectedSourceOrTargetNodesChange = {
-  type: string
-  edge: Edge
-}[]
-export const getNodesConnectedSourceOrTargetHandleIdsMap = (changes: ConnectedSourceOrTargetNodesChange, nodes: Node[]) => {
-  const nodesConnectedSourceOrTargetHandleIdsMap = {} as Record<string, any>
-
-  changes.forEach((change) => {
-    const {
-      edge,
-      type,
-    } = change
-    const sourceNode = nodes.find(node => node.id === edge.source)!
-    if (sourceNode) {
-      nodesConnectedSourceOrTargetHandleIdsMap[sourceNode.id] = nodesConnectedSourceOrTargetHandleIdsMap[sourceNode.id] || {
-        _connectedSourceHandleIds: [...(sourceNode?.data._connectedSourceHandleIds || [])],
-        _connectedTargetHandleIds: [...(sourceNode?.data._connectedTargetHandleIds || [])],
-      }
-    }
-
-    const targetNode = nodes.find(node => node.id === edge.target)!
-    if (targetNode) {
-      nodesConnectedSourceOrTargetHandleIdsMap[targetNode.id] = nodesConnectedSourceOrTargetHandleIdsMap[targetNode.id] || {
-        _connectedSourceHandleIds: [...(targetNode?.data._connectedSourceHandleIds || [])],
-        _connectedTargetHandleIds: [...(targetNode?.data._connectedTargetHandleIds || [])],
-      }
-    }
-
-    if (sourceNode) {
-      if (type === 'remove') {
-        const index = nodesConnectedSourceOrTargetHandleIdsMap[sourceNode.id]._connectedSourceHandleIds.findIndex((handleId: string) => handleId === edge.sourceHandle)
-        nodesConnectedSourceOrTargetHandleIdsMap[sourceNode.id]._connectedSourceHandleIds.splice(index, 1)
-      }
-
-      if (type === 'add')
-        nodesConnectedSourceOrTargetHandleIdsMap[sourceNode.id]._connectedSourceHandleIds.push(edge.sourceHandle || 'source')
-    }
-
-    if (targetNode) {
-      if (type === 'remove') {
-        const index = nodesConnectedSourceOrTargetHandleIdsMap[targetNode.id]._connectedTargetHandleIds.findIndex((handleId: string) => handleId === edge.targetHandle)
-        nodesConnectedSourceOrTargetHandleIdsMap[targetNode.id]._connectedTargetHandleIds.splice(index, 1)
-      }
-
-      if (type === 'add')
-        nodesConnectedSourceOrTargetHandleIdsMap[targetNode.id]._connectedTargetHandleIds.push(edge.targetHandle || 'target')
-    }
-  })
-
-  return nodesConnectedSourceOrTargetHandleIdsMap
-}
-
-export const getValidTreeNodes = (nodes: Node[], edges: Edge[]) => {
-  const startNode = nodes.find(node => node.data.type === BlockEnum.Start)
-
-  if (!startNode) {
-    return {
-      validNodes: [],
-      maxDepth: 0,
-    }
-  }
-
-  const list: Node[] = [startNode]
-  let maxDepth = 1
-
-  const traverse = (root: Node, depth: number) => {
-    if (depth > maxDepth)
-      maxDepth = depth
-
-    const outgoers = getOutgoers(root, nodes, edges)
-
-    if (outgoers.length) {
-      outgoers.forEach((outgoer) => {
-        list.push(outgoer)
-
-        if (outgoer.data.type === BlockEnum.Iteration)
-          list.push(...nodes.filter(node => node.parentId === outgoer.id))
-        if (outgoer.data.type === BlockEnum.Loop)
-          list.push(...nodes.filter(node => node.parentId === outgoer.id))
-
-        traverse(outgoer, depth + 1)
-      })
-    }
-    else {
-      list.push(root)
-
-      if (root.data.type === BlockEnum.Iteration)
-        list.push(...nodes.filter(node => node.parentId === root.id))
-      if (root.data.type === BlockEnum.Loop)
-        list.push(...nodes.filter(node => node.parentId === root.id))
-    }
-  }
-
-  traverse(startNode, maxDepth)
-
-  return {
-    validNodes: uniqBy(list, 'id'),
-    maxDepth,
-  }
-}
-
-export const changeNodesAndEdgesId = (nodes: Node[], edges: Edge[]) => {
-  const idMap = nodes.reduce((acc, node) => {
-    acc[node.id] = uuid4()
-
-    return acc
-  }, {} as Record<string, string>)
-
-  const newNodes = nodes.map((node) => {
-    return {
-      ...node,
-      id: idMap[node.id],
-    }
-  })
-
-  const newEdges = edges.map((edge) => {
-    return {
-      ...edge,
-      source: idMap[edge.source],
-      target: idMap[edge.target],
-    }
-  })
-
-  return [newNodes, newEdges] as [Node[], Edge[]]
-}
-
-type ParallelInfoItem = {
-  parallelNodeId: string
-  depth: number
-  isBranch?: boolean
-}
-type NodeParallelInfo = {
-  parallelNodeId: string
-  edgeHandleId: string
-  depth: number
-}
-type NodeHandle = {
-  node: Node
-  handle: string
-}
-type NodeStreamInfo = {
-  upstreamNodes: Set<string>
-  downstreamEdges: Set<string>
-}
-export const getParallelInfo = (nodes: Node[], edges: Edge[], parentNodeId?: string) => {
-  let startNode
-
-  if (parentNodeId) {
-    const parentNode = nodes.find(node => node.id === parentNodeId)
-    if (!parentNode)
-      throw new Error('Parent node not found')
-
-    startNode = nodes.find(node => node.id === (parentNode.data as (IterationNodeType | LoopNodeType)).start_node_id)
-  }
-  else {
-    startNode = nodes.find(node => node.data.type === BlockEnum.Start)
-  }
-  if (!startNode)
-    throw new Error('Start node not found')
-
-  const parallelList = [] as ParallelInfoItem[]
-  const nextNodeHandles = [{ node: startNode, handle: 'source' }]
-  let hasAbnormalEdges = false
-
-  const traverse = (firstNodeHandle: NodeHandle) => {
-    const nodeEdgesSet = {} as Record<string, Set<string>>
-    const totalEdgesSet = new Set<string>()
-    const nextHandles = [firstNodeHandle]
-    const streamInfo = {} as Record<string, NodeStreamInfo>
-    const parallelListItem = {
-      parallelNodeId: '',
-      depth: 0,
-    } as ParallelInfoItem
-    const nodeParallelInfoMap = {} as Record<string, NodeParallelInfo>
-    nodeParallelInfoMap[firstNodeHandle.node.id] = {
-      parallelNodeId: '',
-      edgeHandleId: '',
-      depth: 0,
-    }
-
-    while (nextHandles.length) {
-      const currentNodeHandle = nextHandles.shift()!
-      const { node: currentNode, handle: currentHandle = 'source' } = currentNodeHandle
-      const currentNodeHandleKey = currentNode.id
-      const connectedEdges = edges.filter(edge => edge.source === currentNode.id && edge.sourceHandle === currentHandle)
-      const connectedEdgesLength = connectedEdges.length
-      const outgoers = nodes.filter(node => connectedEdges.some(edge => edge.target === node.id))
-      const incomers = getIncomers(currentNode, nodes, edges)
-
-      if (!streamInfo[currentNodeHandleKey]) {
-        streamInfo[currentNodeHandleKey] = {
-          upstreamNodes: new Set<string>(),
-          downstreamEdges: new Set<string>(),
-        }
-      }
-
-      if (nodeEdgesSet[currentNodeHandleKey]?.size > 0 && incomers.length > 1) {
-        const newSet = new Set<string>()
-        for (const item of totalEdgesSet) {
-          if (!streamInfo[currentNodeHandleKey].downstreamEdges.has(item))
-            newSet.add(item)
-        }
-        if (isEqual(nodeEdgesSet[currentNodeHandleKey], newSet)) {
-          parallelListItem.depth = nodeParallelInfoMap[currentNode.id].depth
-          nextNodeHandles.push({ node: currentNode, handle: currentHandle })
-          break
-        }
-      }
-
-      if (nodeParallelInfoMap[currentNode.id].depth > parallelListItem.depth)
-        parallelListItem.depth = nodeParallelInfoMap[currentNode.id].depth
-
-      outgoers.forEach((outgoer) => {
-        const outgoerConnectedEdges = getConnectedEdges([outgoer], edges).filter(edge => edge.source === outgoer.id)
-        const sourceEdgesGroup = groupBy(outgoerConnectedEdges, 'sourceHandle')
-        const incomers = getIncomers(outgoer, nodes, edges)
-
-        if (outgoers.length > 1 && incomers.length > 1)
-          hasAbnormalEdges = true
-
-        Object.keys(sourceEdgesGroup).forEach((sourceHandle) => {
-          nextHandles.push({ node: outgoer, handle: sourceHandle })
-        })
-        if (!outgoerConnectedEdges.length)
-          nextHandles.push({ node: outgoer, handle: 'source' })
-
-        const outgoerKey = outgoer.id
-        if (!nodeEdgesSet[outgoerKey])
-          nodeEdgesSet[outgoerKey] = new Set<string>()
-
-        if (nodeEdgesSet[currentNodeHandleKey]) {
-          for (const item of nodeEdgesSet[currentNodeHandleKey])
-            nodeEdgesSet[outgoerKey].add(item)
-        }
-
-        if (!streamInfo[outgoerKey]) {
-          streamInfo[outgoerKey] = {
-            upstreamNodes: new Set<string>(),
-            downstreamEdges: new Set<string>(),
-          }
-        }
-
-        if (!nodeParallelInfoMap[outgoer.id]) {
-          nodeParallelInfoMap[outgoer.id] = {
-            ...nodeParallelInfoMap[currentNode.id],
-          }
-        }
-
-        if (connectedEdgesLength > 1) {
-          const edge = connectedEdges.find(edge => edge.target === outgoer.id)!
-          nodeEdgesSet[outgoerKey].add(edge.id)
-          totalEdgesSet.add(edge.id)
-
-          streamInfo[currentNodeHandleKey].downstreamEdges.add(edge.id)
-          streamInfo[outgoerKey].upstreamNodes.add(currentNodeHandleKey)
-
-          for (const item of streamInfo[currentNodeHandleKey].upstreamNodes)
-            streamInfo[item].downstreamEdges.add(edge.id)
-
-          if (!parallelListItem.parallelNodeId)
-            parallelListItem.parallelNodeId = currentNode.id
-
-          const prevDepth = nodeParallelInfoMap[currentNode.id].depth + 1
-          const currentDepth = nodeParallelInfoMap[outgoer.id].depth
-
-          nodeParallelInfoMap[outgoer.id].depth = Math.max(prevDepth, currentDepth)
-        }
-        else {
-          for (const item of streamInfo[currentNodeHandleKey].upstreamNodes)
-            streamInfo[outgoerKey].upstreamNodes.add(item)
-
-          nodeParallelInfoMap[outgoer.id].depth = nodeParallelInfoMap[currentNode.id].depth
-        }
-      })
-    }
-
-    parallelList.push(parallelListItem)
-  }
-
-  while (nextNodeHandles.length) {
-    const nodeHandle = nextNodeHandles.shift()!
-    traverse(nodeHandle)
-  }
-
-  return {
-    parallelList,
-    hasAbnormalEdges,
-  }
-}
-
-export const hasErrorHandleNode = (nodeType?: BlockEnum) => {
-  return nodeType === BlockEnum.LLM || nodeType === BlockEnum.Tool || nodeType === BlockEnum.HttpRequest || nodeType === BlockEnum.Code
-}
diff --git a/app/dev-only/i18n-checker/page.tsx b/app/dev-only/i18n-checker/page.tsx
deleted file mode 100644
index 5ed0c86..0000000
--- a/app/dev-only/i18n-checker/page.tsx
+++ /dev/null
@@ -1,164 +0,0 @@
-'use client'
-import { resources } from '@/i18n/i18next-config'
-import { useEffect, useState } from 'react'
-import cn from '@/utils/classnames'
-
-export default function I18nTest() {
-  const [langs, setLangs] = useState<Lang[]>([])
-
-  useEffect(() => {
-    setLangs(genLangs())
-  }, [])
-
-  return (
-    <div
-      style={{
-        height: 'calc(100% - 6em)',
-        overflowY: 'auto',
-        margin: '1em 1em 5em',
-      }}
-    >
-
-      <div style={{ minHeight: '75vh' }}>
-        <h2>Summary</h2>
-
-        <table
-          className={cn('mt-2 min-w-[340px] border-collapse border-0')}
-        >
-          <thead className="system-xs-medium-uppercase text-text-tertiary">
-            <tr>
-              <td className="w-5 min-w-5 whitespace-nowrap rounded-l-lg bg-background-section-burn pl-2 pr-1">
-                #
-              </td>
-              <td className="w-20 min-w-20 whitespace-nowrap bg-background-section-burn py-1.5 pl-3">
-                lang
-              </td>
-              <td className="w-20 min-w-20 whitespace-nowrap bg-background-section-burn py-1.5 pl-3">
-                count
-              </td>
-              <td className="w-20 min-w-20 whitespace-nowrap bg-background-section-burn py-1.5 pl-3">
-                missing
-              </td>
-              <td className="w-20 min-w-20 whitespace-nowrap bg-background-section-burn py-1.5 pl-3">
-                extra
-              </td>
-            </tr>
-          </thead>
-          <tbody className="system-sm-regular text-text-secondary">
-            {langs.map(({ locale, count, missing, extra }, idx) => <tr key={locale}>
-              <td className="">{idx}</td>
-              <td className="p-1.5">{locale}</td>
-              <td>{count}</td>
-              <td>{missing.length}</td>
-              <td>{extra.length}</td>
-            </tr>)}
-          </tbody>
-        </table>
-      </div>
-
-      <h2>Details</h2>
-
-      <table
-        className={cn('mt-2 w-full min-w-[340px] border-collapse border-0')}
-      >
-        <thead className="system-xs-medium-uppercase text-text-tertiary">
-          <tr>
-            <td className="w-5 min-w-5 whitespace-nowrap rounded-l-lg bg-background-section-burn pl-2 pr-1">
-              #
-            </td>
-            <td className="w-20 min-w-20 whitespace-nowrap bg-background-section-burn py-1.5 pl-3">
-              lang
-            </td>
-            <td className="w-full whitespace-nowrap bg-background-section-burn py-1.5 pl-3">
-              missing
-            </td>
-            <td className="w-full whitespace-nowrap bg-background-section-burn py-1.5 pl-3">
-              extra
-            </td>
-          </tr>
-        </thead>
-
-        <tbody>
-          {langs.map(({ locale, missing, extra }, idx) => {
-            return (<tr key={locale}>
-              <td className="py-2 align-top">{idx}</td>
-              <td className="py-2 align-top">{locale}</td>
-              <td className="py-2 align-top">
-                <ul>
-                  {missing.map(key => (
-                    <li key={key}>{key}</li>
-                  ))}
-                </ul>
-              </td>
-              <td className="py-2 align-top">
-                <ul>
-                  {extra.map(key => (
-                    <li key={key}>{key}</li>
-                  ))}
-                </ul>
-              </td>
-            </tr>
-            )
-          })}
-        </tbody>
-      </table>
-
-    </div>
-  )
-}
-
-function genLangs() {
-  const langs_: Lang[] = []
-  let en!: Lang
-
-  for (const [key, value] of Object.entries(resources)) {
-    const keys = getNestedKeys(value.translation)
-    const lang: Lang = {
-      locale: key,
-      keys: new Set(keys),
-      count: keys.length,
-      missing: [],
-      extra: [],
-    }
-
-    langs_.push(lang)
-    if (key === 'en-US') en = lang
-  }
-
-  for (const lang of langs_) {
-    const missing: string[] = []
-    const extra: string[] = []
-
-    for (const key of lang.keys)
-      if (!en.keys.has(key)) extra.push(key)
-
-    for (const key of en.keys)
-      if (!lang.keys.has(key)) missing.push(key)
-
-    lang.missing = missing
-    lang.extra = extra
-  }
-  return langs_
-}
-
-function getNestedKeys(translation: Record<string, any>): string[] {
-  const nestedKeys: string[] = []
-  const iterateKeys = (obj: Record<string, any>, prefix = '') => {
-    for (const key in obj) {
-      const nestedKey = prefix ? `${prefix}.${key}` : key
-      //   nestedKeys.push(nestedKey);
-      if (typeof obj[key] === 'object') iterateKeys(obj[key], nestedKey)
-      else if (typeof obj[key] === 'string') nestedKeys.push(nestedKey)
-    }
-  }
-  iterateKeys(translation)
-  return nestedKeys
-}
-
-type Lang = {
-  locale: string;
-  keys: Set<string>;
-  count: number;
-  missing: string[];
-  extra: string[];
-}
diff --git a/app/dev-only/layout.tsx b/app/dev-only/layout.tsx
deleted file mode 100644
index d8bcc5e..0000000
--- a/app/dev-only/layout.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import type React from 'react'
-import { notFound } from 'next/navigation'
-
-export default async function Layout({ children }: React.PropsWithChildren) {
-  if (process.env.NODE_ENV !== 'development')
-    notFound()
-
-  return children
-}
diff --git a/app/dev-preview/page.tsx b/app/dev-preview/page.tsx
deleted file mode 100644
index 69464d6..0000000
--- a/app/dev-preview/page.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-'use client'
-
-import DemoForm from '../components/base/form/form-scenarios/demo'
-
-export default function Page() {
-  return (
-    <div className='flex h-screen w-full items-center justify-center p-20'>
-      <DemoForm />
-    </div>
-  )
-}
diff --git a/app/education-apply/constants.ts b/app/education-apply/constants.ts
deleted file mode 100644
index a5672d1..0000000
--- a/app/education-apply/constants.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export const EDUCATION_VERIFY_URL_SEARCHPARAMS_ACTION = 'getEducationVerify'
-export const EDUCATION_VERIFYING_LOCALSTORAGE_ITEM = 'educationVerifying'
diff --git a/app/education-apply/education-apply-page.tsx b/app/education-apply/education-apply-page.tsx
deleted file mode 100644
index 980e36e..0000000
--- a/app/education-apply/education-apply-page.tsx
+++ /dev/null
@@ -1,189 +0,0 @@
-'use client'
-
-import {
-  useMemo,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { RiExternalLinkLine } from '@remixicon/react'
-import {
-  useRouter,
-  useSearchParams,
-} from 'next/navigation'
-import UserInfo from './user-info'
-import SearchInput from './search-input'
-import RoleSelector from './role-selector'
-import Confirm from './verify-state-modal'
-import Button from '@/app/components/base/button'
-import Checkbox from '@/app/components/base/checkbox'
-import {
-  useEducationAdd,
-  useInvalidateEducationStatus,
-} from '@/service/use-education'
-import { useProviderContext } from '@/context/provider-context'
-import { useToastContext } from '@/app/components/base/toast'
-import { EDUCATION_VERIFYING_LOCALSTORAGE_ITEM } from '@/app/education-apply/constants'
-import { getLocaleOnClient } from '@/i18n'
-import { noop } from 'lodash-es'
-import DifyLogo from '../components/base/logo/dify-logo'
-
-const EducationApplyAge = () => {
-  const { t } = useTranslation()
-  const locale = getLocaleOnClient()
-  const [schoolName, setSchoolName] = useState('')
-  const [role, setRole] = useState('Student')
-  const [ageChecked, setAgeChecked] = useState(false)
-  const [inSchoolChecked, setInSchoolChecked] = useState(false)
-  const {
-    isPending,
-    mutateAsync: educationAdd,
-  } = useEducationAdd({ onSuccess: noop })
-  const [modalShow, setShowModal] = useState<undefined | { title: string; desc: string; onConfirm?: () => void }>(undefined)
-  const { onPlanInfoChanged } = useProviderContext()
-  const updateEducationStatus = useInvalidateEducationStatus()
-  const { notify } = useToastContext()
-  const router = useRouter()
-
-  const docLink = useMemo(() => {
-    if (locale === 'zh-Hans')
-      return 'https://docs.dify.ai/zh-hans/getting-started/dify-for-education'
-    if (locale === 'ja-JP')
-      return 'https://docs.dify.ai/ja-jp/getting-started/dify-for-education'
-    return 'https://docs.dify.ai/getting-started/dify-for-education'
-  }, [locale])
-
-  const handleModalConfirm = () => {
-    setShowModal(undefined)
-    onPlanInfoChanged()
-    updateEducationStatus()
-    localStorage.removeItem(EDUCATION_VERIFYING_LOCALSTORAGE_ITEM)
-    router.replace('/')
-  }
-
-  const searchParams = useSearchParams()
-  const token = searchParams.get('token')
-  const handleSubmit = () => {
-    educationAdd({
-      token: token || '',
-      role,
-      institution: schoolName,
-    }).then((res) => {
-      if (res.message === 'success') {
-        setShowModal({
-          title: t('education.successTitle'),
-          desc: t('education.successContent'),
-          onConfirm: handleModalConfirm,
-        })
-      }
-      else {
-        notify({
-          type: 'error',
-          message: t('education.submitError'),
-        })
-      }
-    })
-  }
-
-  return (
-    <div className='fixed inset-0 z-[31] overflow-y-auto bg-background-body p-6'>
-      <div className='mx-auto w-full max-w-[1408px] rounded-2xl border border-effects-highlight bg-background-default-subtle'>
-        <div
-          className="h-[349px] w-full overflow-hidden rounded-t-2xl bg-cover bg-center bg-no-repeat"
-          style={{
-            backgroundImage: 'url(/education/bg.png)',
-          }}
-        >
-        </div>
-        <div className='mt-[-349px] box-content flex h-7 items-center justify-between p-6'>
-          <DifyLogo size='large' style='monochromeWhite' />
-        </div>
-        <div className='mx-auto max-w-[720px] px-8 pb-[180px]'>
-          <div className='mb-2 flex h-[192px] flex-col justify-end pb-4 pt-3 text-text-primary-on-surface'>
-            <div className='title-5xl-bold mb-2 shadow-xs'>{t('education.toVerified')}</div>
-            <div className='system-md-medium shadow-xs'>
-              {t('education.toVerifiedTip.front')}&nbsp;
-              <span className='system-md-semibold underline'>{t('education.toVerifiedTip.coupon')}</span>&nbsp;
-              {t('education.toVerifiedTip.end')}
-            </div>
-          </div>
-          <div className='mb-7'>
-            <UserInfo />
-          </div>
-          <div className='mb-7'>
-            <div className='system-md-semibold mb-1 flex h-6 items-center text-text-secondary'>
-              {t('education.form.schoolName.title')}
-            </div>
-            <SearchInput
-              value={schoolName}
-              onChange={setSchoolName}
-            />
-          </div>
-          <div className='mb-7'>
-            <div className='system-md-semibold mb-1 flex h-6 items-center text-text-secondary'>
-              {t('education.form.schoolRole.title')}
-            </div>
-            <RoleSelector
-              value={role}
-              onChange={setRole}
-            />
-          </div>
-          <div className='mb-7'>
-            <div className='system-md-semibold mb-1 flex h-6 items-center text-text-secondary'>
-              {t('education.form.terms.title')}
-            </div>
-            <div className='system-md-regular mb-1 text-text-tertiary'>
-              {t('education.form.terms.desc.front')}&nbsp;
-              <a href='https://dify.ai/terms' target='_blank' className='text-text-secondary hover:underline'>{t('education.form.terms.desc.termsOfService')}</a>&nbsp;
-              {t('education.form.terms.desc.and')}&nbsp;
-              <a href='https://dify.ai/privacy' target='_blank' className='text-text-secondary hover:underline'>{t('education.form.terms.desc.privacyPolicy')}</a>
-              {t('education.form.terms.desc.end')}
-            </div>
-            <div className='system-md-regular py-2 text-text-primary'>
-              <div className='mb-2 flex'>
-                <Checkbox
-                  className='mr-2 shrink-0'
-                  checked={ageChecked}
-                  onCheck={() => setAgeChecked(!ageChecked)}
-                />
-                {t('education.form.terms.option.age')}
-              </div>
-              <div className='flex'>
-                <Checkbox
-                  className='mr-2 shrink-0'
-                  checked={inSchoolChecked}
-                  onCheck={() => setInSchoolChecked(!inSchoolChecked)}
-                />
-                {t('education.form.terms.option.inSchool')}
-              </div>
-            </div>
-          </div>
-          <Button
-            variant='primary'
-            disabled={!ageChecked || !inSchoolChecked || !schoolName || !role || isPending}
-            onClick={handleSubmit}
-          >
-            {t('education.submit')}
-          </Button>
-          <div className='mb-4 mt-5 h-[1px] bg-gradient-to-r from-[rgba(16,24,40,0.08)]'></div>
-          <a
-            className='system-xs-regular flex items-center text-text-accent'
-            href={docLink}
-            target='_blank'
-          >
-            {t('education.learn')}
-            <RiExternalLinkLine className='ml-1 h-3 w-3' />
-          </a>
-        </div>
-      </div>
-      <Confirm
-        isShow={!!modalShow}
-        title={modalShow?.title || ''}
-        content={modalShow?.desc}
-        onConfirm={modalShow?.onConfirm || noop}
-        onCancel={modalShow?.onConfirm || noop}
-      />
-    </div>
-  )
-}
-
-export default EducationApplyAge
diff --git a/app/education-apply/hooks.ts b/app/education-apply/hooks.ts
deleted file mode 100644
index 01fb36c..0000000
--- a/app/education-apply/hooks.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import {
-  useCallback,
-  useEffect,
-  useState,
-} from 'react'
-import { useDebounceFn } from 'ahooks'
-import { useSearchParams } from 'next/navigation'
-import type { SearchParams } from './types'
-import {
-  EDUCATION_VERIFYING_LOCALSTORAGE_ITEM,
-  EDUCATION_VERIFY_URL_SEARCHPARAMS_ACTION,
-} from './constants'
-import { useEducationAutocomplete } from '@/service/use-education'
-import { useModalContextSelector } from '@/context/modal-context'
-
-export const useEducation = () => {
-  const {
-    mutateAsync,
-    isPending,
-    data,
-  } = useEducationAutocomplete()
-
-  const [prevSchools, setPrevSchools] = useState<string[]>([])
-  const handleUpdateSchools = useCallback((searchParams: SearchParams) => {
-    if (searchParams.keywords) {
-      mutateAsync(searchParams).then((res) => {
-        const currentPage = searchParams.page || 0
-        const resSchools = res.data
-        if (currentPage > 0)
-          setPrevSchools(prevSchools => [...(prevSchools || []), ...resSchools])
-        else
-          setPrevSchools(resSchools)
-      })
-    }
-  }, [mutateAsync])
-
-  const { run: querySchoolsWithDebounced } = useDebounceFn((searchParams: SearchParams) => {
-    handleUpdateSchools(searchParams)
-  }, {
-    wait: 300,
-  })
-
-  return {
-    schools: prevSchools,
-    setSchools: setPrevSchools,
-    querySchoolsWithDebounced,
-    handleUpdateSchools,
-    isLoading: isPending,
-    hasNext: data?.has_next,
-  }
-}
-
-export const useEducationInit = () => {
-  const setShowAccountSettingModal = useModalContextSelector(s => s.setShowAccountSettingModal)
-  const educationVerifying = localStorage.getItem(EDUCATION_VERIFYING_LOCALSTORAGE_ITEM)
-  const searchParams = useSearchParams()
-  const educationVerifyAction = searchParams.get('action')
-
-  useEffect(() => {
-    if (educationVerifying === 'yes' || educationVerifyAction === EDUCATION_VERIFY_URL_SEARCHPARAMS_ACTION) {
-      setShowAccountSettingModal({ payload: 'billing' })
-
-      if (educationVerifyAction === EDUCATION_VERIFY_URL_SEARCHPARAMS_ACTION)
-        localStorage.setItem(EDUCATION_VERIFYING_LOCALSTORAGE_ITEM, 'yes')
-    }
-  }, [setShowAccountSettingModal, educationVerifying, educationVerifyAction])
-}
diff --git a/app/education-apply/role-selector.tsx b/app/education-apply/role-selector.tsx
deleted file mode 100644
index b8448a0..0000000
--- a/app/education-apply/role-selector.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import cn from '@/utils/classnames'
-
-type RoleSelectorProps = {
-  onChange: (value: string) => void
-  value: string
-}
-
-const RoleSelector = ({
-  onChange,
-  value,
-}: RoleSelectorProps) => {
-  const { t } = useTranslation()
-  const options = [
-    {
-      key: 'Student',
-      value: t('education.form.schoolRole.option.student'),
-    },
-    {
-      key: 'Teacher',
-      value: t('education.form.schoolRole.option.teacher'),
-    },
-    {
-      key: 'School-Administrator',
-      value: t('education.form.schoolRole.option.administrator'),
-    },
-  ]
-
-  return (
-    <div className='flex'>
-      {
-        options.map(option => (
-          <div
-            key={option.key}
-            className='system-md-regular mr-6 flex h-5 cursor-pointer items-center text-text-primary'
-            onClick={() => onChange(option.key)}
-          >
-            <div
-              className={cn(
-                'mr-2 h-4 w-4 rounded-full border border-components-radio-border bg-components-radio-bg shadow-xs',
-                option.key === value && 'border-[5px] border-components-radio-border-checked ',
-              )}
-            >
-            </div>
-            {option.value}
-          </div>
-        ))
-      }
-    </div>
-  )
-}
-
-export default RoleSelector
diff --git a/app/education-apply/search-input.tsx b/app/education-apply/search-input.tsx
deleted file mode 100644
index 63a393b..0000000
--- a/app/education-apply/search-input.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import type { ChangeEventHandler } from 'react'
-import {
-  useCallback,
-  useRef,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { useEducation } from './hooks'
-import Input from '@/app/components/base/input'
-import {
-  PortalToFollowElem,
-  PortalToFollowElemContent,
-  PortalToFollowElemTrigger,
-} from '@/app/components/base/portal-to-follow-elem'
-
-type SearchInputProps = {
-  value?: string
-  onChange: (value: string) => void
-}
-const SearchInput = ({
-  value,
-  onChange,
-}: SearchInputProps) => {
-  const { t } = useTranslation()
-  const [open, setOpen] = useState(false)
-  const {
-    schools,
-    setSchools,
-    querySchoolsWithDebounced,
-    handleUpdateSchools,
-    hasNext,
-  } = useEducation()
-  const pageRef = useRef(0)
-  const valueRef = useRef(value)
-
-  const handleSearch = useCallback((debounced?: boolean) => {
-    const keywords = valueRef.current
-    const page = pageRef.current
-    if (debounced) {
-      querySchoolsWithDebounced({
-        keywords,
-        page,
-      })
-      return
-    }
-
-    handleUpdateSchools({
-      keywords,
-      page,
-    })
-  }, [querySchoolsWithDebounced, handleUpdateSchools])
-
-  const handleValueChange: ChangeEventHandler<HTMLInputElement> = useCallback((e) => {
-    setOpen(true)
-    setSchools([])
-    pageRef.current = 0
-    const inputValue = e.target.value
-    valueRef.current = inputValue
-    onChange(inputValue)
-    handleSearch(true)
-  }, [onChange, handleSearch, setSchools])
-
-  const handleScroll = useCallback((e: Event) => {
-    const target = e.target as HTMLDivElement
-    const {
-      scrollTop,
-      scrollHeight,
-      clientHeight,
-    } = target
-    if (scrollTop + clientHeight >= scrollHeight - 5 && scrollTop > 0 && hasNext) {
-      pageRef.current += 1
-      handleSearch()
-    }
-  }, [handleSearch, hasNext])
-
-  return (
-    <PortalToFollowElem
-      open={open}
-      onOpenChange={setOpen}
-      placement='bottom'
-      offset={4}
-      triggerPopupSameWidth
-    >
-      <PortalToFollowElemTrigger className='block w-full'>
-        <Input
-          className='w-full'
-          placeholder={t('education.form.schoolName.placeholder')}
-          value={value}
-          onChange={handleValueChange}
-        />
-      </PortalToFollowElemTrigger>
-      <PortalToFollowElemContent className='z-[32]'>
-        {
-          !!schools.length && value && (
-            <div
-              className='max-h-[330px] overflow-y-auto rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1'
-              onScroll={handleScroll as any}
-            >
-              {
-                schools.map((school, index) => (
-                  <div
-                    key={index}
-                    className='system-md-regular flex h-8 cursor-pointer items-center truncate rounded-lg px-2 py-1.5 text-text-secondary hover:bg-state-base-hover'
-                    title={school}
-                    onClick={() => {
-                      onChange(school)
-                      setOpen(false)
-                    }}
-                  >
-                    {school}
-                  </div>
-                ))
-              }
-            </div>
-          )
-        }
-      </PortalToFollowElemContent>
-    </PortalToFollowElem>
-  )
-}
-
-export default SearchInput
diff --git a/app/education-apply/types.ts b/app/education-apply/types.ts
deleted file mode 100644
index ff435c6..0000000
--- a/app/education-apply/types.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export type SearchParams = {
-  keywords?: string
-  page?: number
-  limit?: number
-}
-
-export type EducationAddParams = {
-  token: string
-  institution: string
-  role: string
-}
diff --git a/app/education-apply/user-info.tsx b/app/education-apply/user-info.tsx
deleted file mode 100644
index e1d60a5..0000000
--- a/app/education-apply/user-info.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import { useTranslation } from 'react-i18next'
-import { useRouter } from 'next/navigation'
-import Button from '@/app/components/base/button'
-import { useAppContext } from '@/context/app-context'
-import { logout } from '@/service/common'
-import Avatar from '@/app/components/base/avatar'
-import { Triangle } from '@/app/components/base/icons/src/public/education'
-
-const UserInfo = () => {
-  const router = useRouter()
-  const { t } = useTranslation()
-  const { userProfile } = useAppContext()
-
-  const handleLogout = async () => {
-    await logout({
-      url: '/logout',
-      params: {},
-    })
-
-    localStorage.removeItem('setup_status')
-    localStorage.removeItem('console_token')
-    localStorage.removeItem('refresh_token')
-
-    router.push('/signin')
-  }
-
-  return (
-    <div className='relative flex items-center justify-between rounded-xl border-[4px] border-components-panel-on-panel-item-bg bg-gradient-to-r from-background-gradient-bg-fill-chat-bg-2 to-background-gradient-bg-fill-chat-bg-1 pb-6 pl-6 pr-8 pt-9 shadow-shadow-shadow-5'>
-      <div className='absolute left-0 top-0 flex items-center'>
-        <div className='system-2xs-semibold-uppercase flex h-[22px] items-center bg-components-panel-on-panel-item-bg pl-2 pt-1 text-text-accent-light-mode-only'>
-          {t('education.currentSigned')}
-        </div>
-        <Triangle className='h-[22px] w-4 text-components-panel-on-panel-item-bg' />
-      </div>
-      <div className='flex items-center'>
-        <Avatar
-          className='mr-4'
-          avatar={userProfile.avatar_url}
-          name={userProfile.name}
-          size={48}
-        />
-        <div className='pt-1.5'>
-          <div className='system-md-semibold text-text-primary'>
-            {userProfile.name}
-          </div>
-          <div className='system-sm-regular text-text-secondary'>
-            {userProfile.email}
-          </div>
-        </div>
-      </div>
-      <Button
-        variant='secondary'
-        onClick={handleLogout}
-      >
-        {t('common.userProfile.logout')}
-      </Button>
-    </div>
-  )
-}
-
-export default UserInfo
diff --git a/app/education-apply/verify-state-modal.tsx b/app/education-apply/verify-state-modal.tsx
deleted file mode 100644
index aace6a3..0000000
--- a/app/education-apply/verify-state-modal.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import React, { useEffect, useMemo, useRef, useState } from 'react'
-import { createPortal } from 'react-dom'
-import { useTranslation } from 'react-i18next'
-import {
-  RiExternalLinkLine,
-} from '@remixicon/react'
-import Button from '@/app/components/base/button'
-import { getLocaleOnClient } from '@/i18n'
-
-export type IConfirm = {
-  className?: string
-  isShow: boolean
-  title: string
-  content?: React.ReactNode
-  onConfirm: () => void
-  onCancel: () => void
-  maskClosable?: boolean
-  email?: string
-  showLink?: boolean
-}
-
-function Confirm({
-  isShow,
-  title,
-  content,
-  onConfirm,
-  onCancel,
-  maskClosable = true,
-  showLink,
-  email,
-}: IConfirm) {
-  const { t } = useTranslation()
-  const locale = getLocaleOnClient()
-  const dialogRef = useRef<HTMLDivElement>(null)
-  const [isVisible, setIsVisible] = useState(isShow)
-
-  const docLink = useMemo(() => {
-    if (locale === 'zh-Hans')
-      return 'https://docs.dify.ai/zh-hans/getting-started/dify-for-education'
-    if (locale === 'ja-JP')
-      return 'https://docs.dify.ai/ja-jp/getting-started/dify-for-education'
-    return 'https://docs.dify.ai/getting-started/dify-for-education'
-  }, [locale])
-
-  const handleClick = () => {
-    window.open(docLink, '_blank', 'noopener,noreferrer')
-  }
-
-  useEffect(() => {
-    const handleKeyDown = (event: KeyboardEvent) => {
-      if (event.key === 'Escape')
-        onCancel()
-    }
-
-    document.addEventListener('keydown', handleKeyDown)
-    return () => {
-      document.removeEventListener('keydown', handleKeyDown)
-    }
-  }, [onCancel])
-
-  const handleClickOutside = (event: MouseEvent) => {
-    if (maskClosable && dialogRef.current && !dialogRef.current.contains(event.target as Node))
-      onCancel()
-  }
-
-  useEffect(() => {
-    document.addEventListener('mousedown', handleClickOutside)
-    return () => {
-      document.removeEventListener('mousedown', handleClickOutside)
-    }
-  }, [maskClosable])
-
-  useEffect(() => {
-    if (isShow) {
-      setIsVisible(true)
-    }
-    else {
-      const timer = setTimeout(() => setIsVisible(false), 200)
-      return () => clearTimeout(timer)
-    }
-  }, [isShow])
-
-  if (!isVisible)
-    return null
-
-  return createPortal(
-    <div className={'fixed inset-0 z-[10000000] flex items-center justify-center bg-background-overlay'}
-      onClick={(e) => {
-        e.preventDefault()
-        e.stopPropagation()
-      }}
-    >
-      <div ref={dialogRef} className={'relative w-full max-w-[481px] overflow-hidden'}>
-        <div className='shadows-shadow-lg flex max-w-full flex-col items-start rounded-2xl border-[0.5px] border-solid border-components-panel-border bg-components-panel-bg'>
-          <div className='flex flex-col items-start gap-2 self-stretch pb-4 pl-6 pr-6 pt-6'>
-            <div className='title-2xl-semi-bold text-text-primary'>{title}</div>
-            <div className='system-md-regular w-full text-text-tertiary'>{content}</div>
-          </div>
-          {email && (
-            <div className='w-full space-y-1 px-6 py-3'>
-              <div className='system-sm-semibold py-1 text-text-secondary'>{t('education.emailLabel')}</div>
-              <div className='system-sm-regular rounded-lg bg-components-input-bg-disabled px-3 py-2 text-components-input-text-filled-disabled'>{email}</div>
-            </div>
-          )}
-          <div className='flex items-center justify-between gap-2 self-stretch p-6'>
-            <div className='flex items-center gap-1'>
-              {showLink && (
-                <>
-                  <a onClick={handleClick} href={docLink} target='_blank' className='system-xs-regular cursor-pointer text-text-accent'>{t('education.learn')}</a>
-                  <RiExternalLinkLine className='h-3 w-3 text-text-accent' />
-                </>
-              )}
-            </div>
-            <Button variant='primary' className='!w-20' onClick={onConfirm}>{t('common.operation.ok')}</Button>
-          </div>
-        </div>
-      </div>
-    </div>, document.body,
-  )
-}
-
-export default React.memo(Confirm)
diff --git "a/app/repos/\133owner\135/\133repo\135/releases/route.ts" "b/app/repos/\133owner\135/\133repo\135/releases/route.ts"
deleted file mode 100644
index 29b604d..0000000
--- "a/app/repos/\133owner\135/\133repo\135/releases/route.ts"
+++ /dev/null
@@ -1,36 +0,0 @@
-import { type NextRequest, NextResponse } from 'next/server'
-import { Octokit } from '@octokit/core'
-import { RequestError } from '@octokit/request-error'
-import { GITHUB_ACCESS_TOKEN } from '@/config'
-
-type Params = {
-  owner: string,
-  repo: string,
-}
-
-const octokit = new Octokit({
-  auth: GITHUB_ACCESS_TOKEN,
-})
-
-export async function GET(
-  request: NextRequest,
-  { params }: { params: Promise<Params> },
-) {
-  const { owner, repo } = (await params)
-  try {
-    const releasesRes = await octokit.request('GET /repos/{owner}/{repo}/releases', {
-      owner,
-      repo,
-      headers: {
-        'X-GitHub-Api-Version': '2022-11-28',
-      },
-    })
-    return NextResponse.json(releasesRes)
-  }
-  catch (error) {
-    if (error instanceof RequestError)
-      return NextResponse.json(error.response)
-    else
-      throw error
-  }
-}
diff --git a/app/routePrefixHandle.tsx b/app/routePrefixHandle.tsx
deleted file mode 100644
index 16ed480..0000000
--- a/app/routePrefixHandle.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-'use client'
-
-import { basePath } from '@/utils/var'
-import { useEffect } from 'react'
-import { usePathname } from 'next/navigation'
-
-export default function RoutePrefixHandle() {
-  const pathname = usePathname()
-  const handleRouteChange = () => {
-    const addPrefixToImg = (e: HTMLImageElement) => {
-      const url = new URL(e.src)
-      const prefix = url.pathname.substr(0, basePath.length)
-      if (prefix !== basePath) {
-        url.pathname = basePath + url.pathname
-        e.src = url.toString()
-      }
-    }
-    // create an observer instance
-    const observer = new MutationObserver((mutationsList) => {
-      for (const mutation of mutationsList) {
-        if (mutation.type === 'childList') {
-          // listen for newly added img tags
-          mutation.addedNodes.forEach((node) => {
-            if (((node as HTMLElement).tagName) === 'IMG')
-              addPrefixToImg(node as HTMLImageElement)
-          })
-        }
-        else if (mutation.type === 'attributes' && (mutation.target as HTMLElement).tagName === 'IMG') {
-          // if the src of an existing img tag changes, update the prefix
-          if (mutation.attributeName === 'src')
-            addPrefixToImg(mutation.target as HTMLImageElement)
-        }
-      }
-    })
-
-    // configure observation options
-    const config = {
-      childList: true,
-      attributes: true,
-      subtree: true,
-      attributeFilter: ['src'],
-    }
-
-    observer.observe(document.body, config)
-  }
-
-  useEffect(() => {
-    if (basePath)
-      handleRouteChange()
-  }, [pathname])
-
-  return null
-}
diff --git a/dev_dify.bat b/dev_dify.bat
new file mode 100644
index 0000000..781c297
--- /dev/null
+++ b/dev_dify.bat
@@ -0,0 +1,3 @@
+docker build -t swr.cn-north-4.myhuaweicloud.com/qxueyou/dev_dify:1.0.0 .
+docker push swr.cn-north-4.myhuaweicloud.com/qxueyou/dev_dify:1.0.0
+pause
\ No newline at end of file
diff --git a/eslint.config.mjs b/eslint.config.mjs
deleted file mode 100644
index d40d963..0000000
--- a/eslint.config.mjs
+++ /dev/null
@@ -1,249 +0,0 @@
-import {
-  GLOB_TESTS, combine, javascript, node,
-  stylistic, typescript, unicorn,
-} from '@antfu/eslint-config'
-import globals from 'globals'
-import storybook from 'eslint-plugin-storybook'
-// import { fixupConfigRules } from '@eslint/compat'
-import tailwind from 'eslint-plugin-tailwindcss'
-import reactHooks from 'eslint-plugin-react-hooks'
-import sonar from 'eslint-plugin-sonarjs'
-
-// import reactRefresh from 'eslint-plugin-react-refresh'
-
-export default combine(
-  stylistic({
-    lessOpinionated: true,
-    // original @antfu/eslint-config does not support jsx
-    jsx: false,
-    semi: false,
-    quotes: 'single',
-    overrides: {
-      // original config
-      'style/indent': ['error', 2],
-      'style/quotes': ['error', 'single'],
-      'curly': ['error', 'multi-or-nest', 'consistent'],
-      'style/comma-spacing': ['error', { before: false, after: true }],
-      'style/quote-props': ['warn', 'consistent-as-needed'],
-
-      // these options does not exist in old version
-      // maybe useless
-      'style/indent-binary-ops': 'off',
-      'style/multiline-ternary': 'off',
-      'antfu/top-level-function': 'off',
-      'antfu/curly': 'off',
-      'antfu/consistent-chaining': 'off',
-
-      // copy from eslint-config-antfu 0.36.0
-      'style/brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
-      'style/dot-location': ['error', 'property'],
-      'style/object-curly-newline': ['error', { consistent: true, multiline: true }],
-      'style/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
-      'style/template-curly-spacing': ['error', 'never'],
-      'style/keyword-spacing': 'off',
-
-      // not exist in old version, and big change
-      'style/member-delimiter-style': 'off',
-    },
-  }),
-  javascript({
-    overrides: {
-      // handled by unused-imports/no-unused-vars
-      'no-unused-vars': 'off',
-    },
-  }),
-  typescript({
-    overrides: {
-      // original config
-      'ts/consistent-type-definitions': ['warn', 'type'],
-
-      // useful, but big change
-      'ts/no-empty-object-type': 'off',
-    },
-  }),
-  unicorn(),
-  node(),
-  // use nextjs config will break @eslint/config-inspector
-  // use `ESLINT_CONFIG_INSPECTOR=true pnpx @eslint/config-inspector` to check the config
-  // ...process.env.ESLINT_CONFIG_INSPECTOR
-  //   ? []
-  {
-    rules: {
-      // performance issue, and not used.
-      '@next/next/no-html-link-for-pages': 'off',
-    },
-  },
-  {
-    ignores: [
-      '**/node_modules/*',
-      '**/dist/',
-      '**/build/',
-      '**/out/',
-      '**/.next/',
-      '**/public/*',
-      '**/*.json',
-    ],
-  },
-  {
-    // orignal config
-    rules: {
-      // orignal ts/no-var-requires
-      'ts/no-require-imports': 'off',
-      'no-console': 'off',
-      'react-hooks/exhaustive-deps': 'warn',
-      'react/display-name': 'off',
-      'array-callback-return': ['error', {
-        allowImplicit: false,
-        checkForEach: false,
-      }],
-
-      // copy from eslint-config-antfu 0.36.0
-      'camelcase': 'off',
-      'default-case-last': 'error',
-
-      // antfu use eslint-plugin-perfectionist to replace this
-      // will cause big change, so keep the original sort-imports
-      'sort-imports': [
-        'error',
-        {
-          ignoreCase: false,
-          ignoreDeclarationSort: true,
-          ignoreMemberSort: false,
-          memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
-          allowSeparatedGroups: false,
-        },
-      ],
-
-      // antfu migrate to eslint-plugin-unused-imports
-      'unused-imports/no-unused-vars': 'warn',
-      'unused-imports/no-unused-imports': 'warn',
-
-      // We use `import { noop } from 'lodash-es'` across `web` project
-      'no-empty-function': 'error',
-    },
-
-    languageOptions: {
-      globals: {
-        ...globals.browser,
-        ...globals.es2025,
-        ...globals.node,
-        React: 'readable',
-        JSX: 'readable',
-      },
-    },
-  },
-  storybook.configs['flat/recommended'],
-  // reactRefresh.configs.recommended,
-  {
-    rules: reactHooks.configs.recommended.rules,
-    plugins: {
-      'react-hooks': reactHooks,
-    },
-  },
-  // sonar
-  {
-    rules: {
-      ...sonar.configs.recommended.rules,
-      // code complexity
-      'sonarjs/cognitive-complexity': 'off',
-      'sonarjs/no-nested-functions': 'warn',
-      'sonarjs/no-nested-conditional': 'warn',
-      'sonarjs/nested-control-flow': 'warn', // 3 levels of nesting
-      'sonarjs/no-small-switch': 'off',
-      'sonarjs/no-nested-template-literals': 'warn',
-      'sonarjs/redundant-type-aliases': 'off',
-      'sonarjs/regex-complexity': 'warn',
-      // maintainability
-      'sonarjs/no-ignored-exceptions': 'off',
-      'sonarjs/no-commented-code': 'warn',
-      'sonarjs/no-unused-vars': 'warn',
-      'sonarjs/prefer-single-boolean-return': 'warn',
-      'sonarjs/duplicates-in-character-class': 'off',
-      'sonarjs/single-char-in-character-classes': 'off',
-      'sonarjs/anchor-precedence': 'warn',
-      'sonarjs/updated-loop-counter': 'off',
-      'sonarjs/no-dead-store': 'warn',
-      'sonarjs/no-duplicated-branches': 'warn',
-      'sonarjs/max-lines': 'warn', // max 1000 lines
-      'sonarjs/no-variable-usage-before-declaration': 'error',
-      // security
-      // eslint-disable-next-line sonarjs/no-hardcoded-passwords
-      'sonarjs/no-hardcoded-passwords': 'off', // detect the wrong code that is not password.
-      'sonarjs/no-hardcoded-secrets': 'off',
-      'sonarjs/pseudo-random': 'off',
-      // performance
-      'sonarjs/slow-regex': 'warn',
-      // others
-      'sonarjs/todo-tag': 'warn',
-      'sonarjs/table-header': 'off',
-    },
-    plugins: {
-      sonarjs: sonar,
-    },
-  },
-  // need further research
-  {
-    rules: {
-      // not exist in old version
-      'antfu/consistent-list-newline': 'off',
-      'node/prefer-global/process': 'off',
-      'node/prefer-global/buffer': 'off',
-      'node/no-callback-literal': 'off',
-
-      // useful, but big change
-      'unicorn/prefer-number-properties': 'warn',
-      'unicorn/no-new-array': 'warn',
-      'style/indent': 'off',
-    },
-  },
-  // suppress error for `no-undef` rule
-  {
-    files: GLOB_TESTS,
-    languageOptions: {
-      globals: {
-        ...globals.browser,
-        ...globals.es2021,
-        ...globals.node,
-        ...globals.jest,
-      },
-    },
-  },
-  tailwind.configs['flat/recommended'],
-  {
-    settings: {
-      tailwindcss: {
-        // These are the default values but feel free to customize
-        callees: ['classnames', 'clsx', 'ctl', 'cn'],
-        config: 'tailwind.config.js', // returned from `loadConfig()` utility if not provided
-        cssFiles: [
-          '**/*.css',
-          '!**/node_modules',
-          '!**/.*',
-          '!**/dist',
-          '!**/build',
-          '!**/.storybook',
-          '!**/.next',
-          '!**/.public',
-        ],
-        cssFilesRefreshRate: 5_000,
-        removeDuplicates: true,
-        skipClassAttribute: false,
-        whitelist: [],
-        tags: [], // can be set to e.g. ['tw'] for use in tw`bg-blue`
-        classRegex: '^class(Name)?$', // can be modified to support custom attributes. E.g. "^tw$" for `twin.macro`
-      },
-    },
-    rules: {
-      // due to 1k lines of tailwind config, these rule have performance issue
-      'tailwindcss/no-contradicting-classname': 'off',
-      'tailwindcss/enforces-shorthand': 'off',
-      'tailwindcss/no-custom-classname': 'off',
-      'tailwindcss/no-unnecessary-arbitrary-value': 'off',
-
-      'tailwindcss/no-arbitrary-value': 'off',
-      'tailwindcss/classnames-order': 'warn',
-      'tailwindcss/enforces-negative-arbitrary-values': 'warn',
-      'tailwindcss/migration-from-tailwind-2': 'warn',
-    },
-  },
-)
diff --git a/hooks/use-breakpoints.spec.ts b/hooks/use-breakpoints.spec.ts
deleted file mode 100644
index 315e514..0000000
--- a/hooks/use-breakpoints.spec.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { act, renderHook } from '@testing-library/react'
-import useBreakpoints, { MediaType } from './use-breakpoints'
-
-describe('useBreakpoints', () => {
-  const originalInnerWidth = window.innerWidth
-
-  // Mock the window resize event
-  const fireResize = (width: number) => {
-    window.innerWidth = width
-    act(() => {
-      window.dispatchEvent(new Event('resize'))
-    })
-  }
-
-  // Restore the original innerWidth after tests
-  afterAll(() => {
-    window.innerWidth = originalInnerWidth
-  })
-
-  it('should return mobile for width <= 640px', () => {
-    // Mock window.innerWidth for mobile
-    Object.defineProperty(window, 'innerWidth', {
-      writable: true,
-      configurable: true,
-      value: 640,
-    })
-
-    const { result } = renderHook(() => useBreakpoints())
-    expect(result.current).toBe(MediaType.mobile)
-  })
-
-  it('should return tablet for width > 640px and <= 768px', () => {
-    // Mock window.innerWidth for tablet
-    Object.defineProperty(window, 'innerWidth', {
-      writable: true,
-      configurable: true,
-      value: 768,
-    })
-
-    const { result } = renderHook(() => useBreakpoints())
-    expect(result.current).toBe(MediaType.tablet)
-  })
-
-  it('should return pc for width > 768px', () => {
-    // Mock window.innerWidth for pc
-    Object.defineProperty(window, 'innerWidth', {
-      writable: true,
-      configurable: true,
-      value: 1024,
-    })
-
-    const { result } = renderHook(() => useBreakpoints())
-    expect(result.current).toBe(MediaType.pc)
-  })
-
-  it('should update media type when window resizes', () => {
-    // Start with desktop
-    Object.defineProperty(window, 'innerWidth', {
-      writable: true,
-      configurable: true,
-      value: 1024,
-    })
-
-    const { result } = renderHook(() => useBreakpoints())
-    expect(result.current).toBe(MediaType.pc)
-
-    // Resize to tablet
-    fireResize(768)
-    expect(result.current).toBe(MediaType.tablet)
-
-    // Resize to mobile
-    fireResize(600)
-    expect(result.current).toBe(MediaType.mobile)
-  })
-
-  it('should clean up event listeners on unmount', () => {
-    // Spy on addEventListener and removeEventListener
-    const addEventListenerSpy = jest.spyOn(window, 'addEventListener')
-    const removeEventListenerSpy = jest.spyOn(window, 'removeEventListener')
-
-    const { unmount } = renderHook(() => useBreakpoints())
-
-    // Unmount should trigger cleanup
-    unmount()
-
-    expect(addEventListenerSpy).toHaveBeenCalledWith('resize', expect.any(Function))
-    expect(removeEventListenerSpy).toHaveBeenCalledWith('resize', expect.any(Function))
-
-    // Clean up spies
-    addEventListenerSpy.mockRestore()
-    removeEventListenerSpy.mockRestore()
-  })
-})
diff --git a/hooks/use-i18n.ts b/hooks/use-i18n.ts
deleted file mode 100644
index c2356b1..0000000
--- a/hooks/use-i18n.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useLanguage } from '@/app/components/header/account-setting/model-provider-page/hooks'
-import { renderI18nObject } from '@/i18n'
-
-export const useRenderI18nObject = () => {
-  const language = useLanguage()
-  return (obj: Record<string, string>) => {
-    return renderI18nObject(obj, language)
-  }
-}
diff --git a/hooks/use-import-dsl.ts b/hooks/use-import-dsl.ts
deleted file mode 100644
index e5fafb1..0000000
--- a/hooks/use-import-dsl.ts
+++ /dev/null
@@ -1,163 +0,0 @@
-import {
-  useCallback,
-  useRef,
-  useState,
-} from 'react'
-import { useTranslation } from 'react-i18next'
-import { useRouter } from 'next/navigation'
-import type {
-  DSLImportMode,
-  DSLImportResponse,
-} from '@/models/app'
-import { DSLImportStatus } from '@/models/app'
-import {
-  importDSL,
-  importDSLConfirm,
-} from '@/service/apps'
-import type { AppIconType } from '@/types/app'
-import { useToastContext } from '@/app/components/base/toast'
-import { usePluginDependencies } from '@/app/components/workflow/plugin-dependency/hooks'
-import { getRedirection } from '@/utils/app-redirection'
-import { useSelector } from '@/context/app-context'
-import { NEED_REFRESH_APP_LIST_KEY } from '@/config'
-
-type DSLPayload = {
-  mode: DSLImportMode
-  yaml_content?: string
-  yaml_url?: string
-  name?: string
-  icon_type?: AppIconType
-  icon?: string
-  icon_background?: string
-  description?: string
-}
-type ResponseCallback = {
-  onSuccess?: () => void
-  onPending?: (payload: DSLImportResponse) => void
-  onFailed?: () => void
-}
-export const useImportDSL = () => {
-  const { t } = useTranslation()
-  const { notify } = useToastContext()
-  const [isFetching, setIsFetching] = useState(false)
-  const { handleCheckPluginDependencies } = usePluginDependencies()
-  const isCurrentWorkspaceEditor = useSelector(s => s.isCurrentWorkspaceEditor)
-  const { push } = useRouter()
-  const [versions, setVersions] = useState<{ importedVersion: string; systemVersion: string }>()
-  const importIdRef = useRef<string>('')
-
-  const handleImportDSL = useCallback(async (
-    payload: DSLPayload,
-    {
-      onSuccess,
-      onPending,
-      onFailed,
-    }: ResponseCallback,
-  ) => {
-    if (isFetching)
-      return
-    setIsFetching(true)
-
-    try {
-      const response = await importDSL(payload)
-
-      if (!response)
-        return
-
-      const {
-        id,
-        status,
-        app_id,
-        app_mode,
-        imported_dsl_version,
-        current_dsl_version,
-      } = response
-
-      if (status === DSLImportStatus.COMPLETED || status === DSLImportStatus.COMPLETED_WITH_WARNINGS) {
-        if (!app_id)
-          return
-
-        notify({
-          type: status === DSLImportStatus.COMPLETED ? 'success' : 'warning',
-          message: t(status === DSLImportStatus.COMPLETED ? 'app.newApp.appCreated' : 'app.newApp.caution'),
-          children: status === DSLImportStatus.COMPLETED_WITH_WARNINGS && t('app.newApp.appCreateDSLWarning'),
-        })
-        onSuccess?.()
-        localStorage.setItem(NEED_REFRESH_APP_LIST_KEY, '1')
-        await handleCheckPluginDependencies(app_id)
-        getRedirection(isCurrentWorkspaceEditor, { id: app_id, mode: app_mode }, push)
-      }
-      else if (status === DSLImportStatus.PENDING) {
-        setVersions({
-          importedVersion: imported_dsl_version ?? '',
-          systemVersion: current_dsl_version ?? '',
-        })
-        importIdRef.current = id
-        onPending?.(response)
-      }
-      else {
-        notify({ type: 'error', message: t('app.newApp.appCreateFailed') })
-        onFailed?.()
-      }
-    }
-    catch {
-      notify({ type: 'error', message: t('app.newApp.appCreateFailed') })
-      onFailed?.()
-    }
-    finally {
-      setIsFetching(false)
-    }
-  }, [t, notify, handleCheckPluginDependencies, isCurrentWorkspaceEditor, push, isFetching])
-
-  const handleImportDSLConfirm = useCallback(async (
-    {
-      onSuccess,
-      onFailed,
-    }: Pick<ResponseCallback, 'onSuccess' | 'onFailed'>,
-  ) => {
-    if (isFetching)
-      return
-    setIsFetching(true)
-    if (!importIdRef.current)
-      return
-
-    try {
-      const response = await importDSLConfirm({
-        import_id: importIdRef.current,
-      })
-
-      const { status, app_id, app_mode } = response
-      if (!app_id)
-        return
-
-      if (status === DSLImportStatus.COMPLETED) {
-        onSuccess?.()
-        notify({
-          type: 'success',
-          message: t('app.newApp.appCreated'),
-        })
-        await handleCheckPluginDependencies(app_id)
-        localStorage.setItem(NEED_REFRESH_APP_LIST_KEY, '1')
-        getRedirection(isCurrentWorkspaceEditor, { id: app_id!, mode: app_mode }, push)
-      }
-      else if (status === DSLImportStatus.FAILED) {
-        notify({ type: 'error', message: t('app.newApp.appCreateFailed') })
-        onFailed?.()
-      }
-    }
-    catch {
-      notify({ type: 'error', message: t('app.newApp.appCreateFailed') })
-      onFailed?.()
-    }
-    finally {
-      setIsFetching(false)
-    }
-  }, [t, notify, handleCheckPluginDependencies, isCurrentWorkspaceEditor, push, isFetching])
-
-  return {
-    handleImportDSL,
-    handleImportDSLConfirm,
-    versions,
-    isFetching,
-  }
-}
diff --git a/hooks/use-mitt.ts b/hooks/use-mitt.ts
deleted file mode 100644
index 584636c..0000000
--- a/hooks/use-mitt.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import type { Emitter, EventType, Handler, WildcardHandler } from 'mitt'
-import create from 'mitt'
-import { useEffect, useRef } from 'react'
-
-const merge = <T extends Record<string, any>>(
-  ...args: Array<T | undefined>
-): T => {
-  return Object.assign({}, ...args)
-}
-
-export type _Events = Record<EventType, unknown>
-
-export type UseSubscribeOption = {
-  /**
-     * Whether the subscription is enabled.
-     * @default true
-     */
-  enabled: boolean;
-}
-
-export type ExtendedOn<Events extends _Events> = {
-  <Key extends keyof Events>(
-    type: Key,
-    handler: Handler<Events[Key]>,
-    options?: UseSubscribeOption,
-  ): void;
-  (
-    type: '*',
-    handler: WildcardHandler<Events>,
-    option?: UseSubscribeOption,
-  ): void;
-}
-
-export type UseMittReturn<Events extends _Events> = {
-  useSubscribe: ExtendedOn<Events>;
-  emit: Emitter<Events>['emit'];
-}
-
-const defaultSubscribeOption: UseSubscribeOption = {
-  enabled: true,
-}
-
-function useMitt<Events extends _Events>(
-  mitt?: Emitter<Events>,
-): UseMittReturn<Events> {
-  const emitterRef = useRef<Emitter<Events> | undefined>(undefined)
-  if (!emitterRef.current)
-    emitterRef.current = mitt ?? create<Events>()
-
-  if (mitt && emitterRef.current !== mitt) {
-    emitterRef.current.off('*')
-    emitterRef.current = mitt
-  }
-  const emitter = emitterRef.current
-  const useSubscribe: ExtendedOn<Events> = (
-    type: string,
-    handler: any,
-    option?: UseSubscribeOption,
-  ) => {
-    const { enabled } = merge(defaultSubscribeOption, option)
-    useEffect(() => {
-      if (enabled) {
-        emitter.on(type, handler)
-        return () => emitter.off(type, handler)
-      }
-    })
-  }
-  return {
-    emit: emitter.emit,
-    useSubscribe,
-  }
-}
-
-export { useMitt }
diff --git a/hooks/use-theme.ts b/hooks/use-theme.ts
deleted file mode 100644
index c814c7d..0000000
--- a/hooks/use-theme.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Theme } from '@/types/app'
-import { useTheme as useBaseTheme } from 'next-themes'
-
-const useTheme = () => {
-  const { theme, resolvedTheme, ...rest } = useBaseTheme()
-  return {
-    // only returns 'light' or 'dark' theme
-    theme: theme === Theme.system ? resolvedTheme as Theme : theme as Theme,
-    ...rest,
-  }
-}
-
-export default useTheme
diff --git a/hooks/use-timestamp.spec.ts b/hooks/use-timestamp.spec.ts
deleted file mode 100644
index d1113f5..0000000
--- a/hooks/use-timestamp.spec.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { renderHook } from '@testing-library/react'
-import useTimestamp from './use-timestamp'
-
-jest.mock('@/context/app-context', () => ({
-  useAppContext: jest.fn(() => ({
-    userProfile: {
-      id: '8b18e24b-1ac8-4262-aa5c-e9aa95c76846',
-      name: 'test',
-      avatar: null,
-      avatar_url: null,
-      email: 'test@dify.ai',
-      is_password_set: false,
-      interface_language: 'zh-Hans',
-      interface_theme: 'light',
-      timezone: 'Asia/Shanghai',
-      last_login_at: 1744188761,
-      last_login_ip: '127.0.0.1',
-      created_at: 1728444483,
-    },
-  })),
-}))
-
-describe('useTimestamp', () => {
-  describe('formatTime', () => {
-    it('should format unix timestamp correctly', () => {
-      const { result } = renderHook(() => useTimestamp())
-      const timestamp = 1704132000
-
-      expect(result.current.formatTime(timestamp, 'YYYY-MM-DD HH:mm:ss'))
-        .toBe('2024-01-02 02:00:00')
-    })
-
-    it('should format with different patterns', () => {
-      const { result } = renderHook(() => useTimestamp())
-      const timestamp = 1704132000
-
-      expect(result.current.formatTime(timestamp, 'MM/DD/YYYY'))
-        .toBe('01/02/2024')
-
-      expect(result.current.formatTime(timestamp, 'HH:mm'))
-        .toBe('02:00')
-    })
-  })
-
-  describe('formatDate', () => {
-    it('should format date string correctly', () => {
-      const { result } = renderHook(() => useTimestamp())
-      const dateString = '2024-01-01T12:00:00Z'
-
-      expect(result.current.formatDate(dateString, 'YYYY-MM-DD HH:mm:ss'))
-        .toBe('2024-01-01 20:00:00')
-    })
-
-    it('should format with different patterns', () => {
-      const { result } = renderHook(() => useTimestamp())
-      const dateString = '2024-01-01T12:00:00Z'
-
-      expect(result.current.formatDate(dateString, 'MM/DD/YYYY'))
-        .toBe('01/01/2024')
-
-      expect(result.current.formatDate(dateString, 'HH:mm'))
-        .toBe('20:00')
-    })
-  })
-})
diff --git a/i18n/DEV.md b/i18n/DEV.md
deleted file mode 100644
index 08b478f..0000000
--- a/i18n/DEV.md
+++ /dev/null
@@ -1,49 +0,0 @@
-
-## library
-
-* i18next
-* react-i18next
-
-## hooks
-
-* useTranslation
-* useGetLanguage
-* useI18N
-* useRenderI18nObject
-
-## impl
-
-* App Boot
-  - app/layout.tsx load i18n and init context
-    - use `<I18nServer/>`
-      - read locale with `getLocaleOnServer` (in node.js)
-        - locale from cookie, or browser request header
-        - only used in client app init and 2 server code(plugin desc, datasets)
-      - use `<I18N/>`
-        - init i18n context
-        - `setLocaleOnClient`
-          - `changeLanguage` (defined in i18n/i18next-config, also init i18n resources (side effects))
-            * is `i18next.changeLanguage`
-            * all languages text is merge & load in FrontEnd as .js (see i18n/i18next-config)
-* i18n context
-  - `locale` - current locale code (ex `eu-US`, `zh-Hans`)
-  - `i18n` - useless
-  - `setLocaleOnClient` - used by App Boot and user change language
-
-### load i18n resources
-
-- client: i18n/i18next-config.ts
-  * ns = camalCase(filename)
-  * ex: `app/components/datasets/create/embedding-process/index.tsx`
-    * `t('datasetSettings.form.retrievalSetting.title')`
-- server: i18n/server.ts
-  * ns = filename
-  * ex: `app/(commonLayout)/datasets/(datasetDetailLayout)/[datasetId]/settings/page.tsx`
-    * `translate(locale, 'dataset-settings')`
-
-## TODO
-
-* [ ] ts docs for useGetLanguage
-* [ ] ts docs for useI18N
-* [ ] client docs for i18n
-* [ ] server docs for i18n
diff --git a/i18n/de-DE/education.ts b/i18n/de-DE/education.ts
deleted file mode 100644
index aa6e3c7..0000000
--- a/i18n/de-DE/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: 'exklusiver 100% Gutschein',
-    end: 'f眉r den Dify Professional Plan.',
-    front: 'Sie sind jetzt berechtigt, den Status 鈥濨ildung verifiziert鈥� zu erhalten. Bitte geben Sie unten Ihre Bildungsinformationen ein, um den Prozess abzuschlie脽en und eine Zu erhalten.',
-  },
-  form: {
-    schoolName: {
-      placeholder: 'Geben Sie den offiziellen, unabgek眉rzten Namen Ihrer Schule ein.',
-      title: 'Ihr Schulname',
-    },
-    schoolRole: {
-      option: {
-        teacher: 'Lehrer',
-        administrator: 'Schuladministrator',
-        student: 'Sch眉ler',
-      },
-      title: 'Ihre Schulrolle',
-    },
-    terms: {
-      desc: {
-        and: 'und',
-        privacyPolicy: 'Datenschutzrichtlinie',
-        termsOfService: 'Nutzungsbedingungen',
-        end: '. Durch die Einreichung:',
-        front: 'Ihre Informationen und die Nutzung des Status "Bildung best盲tigt" unterliegen unseren',
-      },
-      option: {
-        inSchool: 'Ich best盲tige, dass ich an der angegebenen Einrichtung eingeschrieben oder angestellt bin. Dify kann einen Nachweis 眉ber die Einschreibung/Anstellung anfordern. Wenn ich meine Berechtigung falsch darstelle, stimme ich zu, alle Geb眉hren zu zahlen, die aufgrund meines Bildungsstatus urspr眉nglich erlassen wurden.',
-        age: 'Ich best盲tige, dass ich mindestens 18 Jahre alt bin.',
-      },
-      title: 'Allgemeine Gesch盲ftsbedingungen',
-    },
-  },
-  toVerified: 'Bildung 眉berpr眉fen lassen',
-  rejectTitle: 'Ihre Dify-Ausbildungs眉berpr眉fung wurde abgelehnt.',
-  currentSigned: 'DERZEIT ANGEMELDET ALS',
-  submit: 'Einreichen',
-  submitError: 'Die Formular眉bermittlung ist fehlgeschlagen. Bitte versuchen Sie es sp盲ter erneut.',
-  rejectContent: 'Leider sind Sie nicht f眉r den Status "Education Verified" berechtigt und k枚nnen daher den exklusiven 100%-Gutschein f眉r den Dify Professional Plan nicht erhalten, wenn Sie diese E-Mail-Adresse verwenden.',
-  successContent: 'Wir haben einen 100% Rabattgutschein f眉r den Dify Professional Plan auf Ihr Konto ausgestellt. Der Gutschein ist ein Jahr lang g眉ltig, bitte nutzen Sie ihn innerhalb des G眉ltigkeitszeitraums.',
-  learn: 'Erfahren Sie, wie Sie Ihre Ausbildung 眉berpr眉fen lassen.',
-  emailLabel: 'Ihre aktuelle E-Mail',
-  successTitle: 'Sie haben die Dify-Ausbildung verifiziert',
-}
-
-export default translation
diff --git a/i18n/de-DE/plugin-tags.ts b/i18n/de-DE/plugin-tags.ts
deleted file mode 100644
index 3f4423e..0000000
--- a/i18n/de-DE/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    weather: 'Wetter',
-    social: 'Sozial',
-    image: 'Bild',
-    education: 'Bildung',
-    travel: 'Reise',
-    agent: 'Agent',
-    design: 'Entwurf',
-    finance: 'Finanzieren',
-    search: 'Suchen',
-    medical: 'Medizinisch',
-    business: 'Gesch盲ft',
-    news: 'Nachrichten',
-    videos: 'Videos',
-    other: 'Andere',
-    entertainment: 'Unterhaltung',
-    utilities: 'Versorgungswirtschaft',
-    productivity: 'Produktivit盲t',
-  },
-  searchTags: 'Such-Tags',
-  allTags: 'Alle Schlagw枚rter',
-}
-
-export default translation
diff --git a/i18n/de-DE/plugin.ts b/i18n/de-DE/plugin.ts
deleted file mode 100644
index 9202c22..0000000
--- a/i18n/de-DE/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    extensions: 'Erweiterungen',
-    bundles: 'B眉ndel',
-    agents: 'Agenten-Strategien',
-    models: 'Modelle',
-    all: 'Alle',
-    tools: 'Werkzeuge',
-  },
-  categorySingle: {
-    extension: 'Erweiterung',
-    agent: 'Agenten-Strategie',
-    bundle: 'B眉ndel',
-    model: 'Modell',
-    tool: 'Werkzeug',
-  },
-  list: {
-    source: {
-      marketplace: 'Installation aus dem Marketplace',
-      github: 'Installation von GitHub',
-      local: 'Installation aus lokaler Paketdatei',
-    },
-    notFound: 'Keine Plugins gefunden',
-    noInstalled: 'Keine Plugins installiert',
-  },
-  source: {
-    github: 'GitHub (Englisch)',
-    marketplace: 'Marktplatz',
-    local: 'Lokale Paketdatei',
-  },
-  detailPanel: {
-    categoryTip: {
-      local: 'Lokales Plugin',
-      github: 'Installiert von Github',
-      marketplace: 'Installiert aus dem Marketplace',
-      debugging: 'Debuggen-Plugin',
-    },
-    operation: {
-      remove: 'Entfernen',
-      detail: 'Einzelheiten',
-      install: 'Installieren',
-      info: 'Plugin-Informationen',
-      checkUpdate: 'Update pr眉fen',
-      update: 'Aktualisieren',
-      viewDetail: 'Im Detail sehen',
-    },
-    toolSelector: {
-      paramsTip1: 'Steuert LLM-Inferenzparameter.',
-      settings: 'BENUTZEREINSTELLUNGEN',
-      uninstalledLink: 'In Plugins verwalten',
-      descriptionLabel: 'Beschreibung des Werkzeugs',
-      empty: 'Klicken Sie auf die Schaltfl盲che "+", um Werkzeuge hinzuzuf眉gen. Sie k枚nnen mehrere Werkzeuge hinzuf眉gen.',
-      title: 'Werkzeug "Hinzuf眉gen"',
-      paramsTip2: 'Wenn "Automatisch" ausgeschaltet ist, wird der Standardwert verwendet.',
-      unsupportedContent: 'Die installierte Plug-in-Version bietet diese Aktion nicht.',
-      unsupportedTitle: 'Nicht unterst眉tzte Aktion',
-      descriptionPlaceholder: 'Kurze Beschreibung des Zwecks des Werkzeugs, z. B. um die Temperatur f眉r einen bestimmten Ort zu ermitteln.',
-      auto: 'Automatisch',
-      params: 'KONFIGURATION DER ARGUMENTATION',
-      unsupportedContent2: 'Klicken Sie hier, um die Version zu wechseln.',
-      placeholder: 'W盲hlen Sie ein Werkzeug aus...',
-      uninstalledTitle: 'Tool nicht installiert',
-      toolLabel: 'Werkzeug',
-      uninstalledContent: 'Dieses Plugin wird aus dem lokalen/GitHub-Repository installiert. Bitte nach der Installation verwenden.',
-    },
-    strategyNum: '{{num}} {{Strategie}} IINKLUSIVE',
-    configureApp: 'App konfigurieren',
-    endpointDeleteContent: 'M枚chten Sie {{name}} entfernen?',
-    endpointsEmpty: 'Klicken Sie auf die Schaltfl盲che "+", um einen Endpunkt hinzuzuf眉gen',
-    disabled: 'Arbeitsunf盲hig',
-    endpointsDocLink: 'Dokument anzeigen',
-    endpointDisableTip: 'Endpunkt deaktivieren',
-    endpoints: 'Endpunkte',
-    actionNum: '{{num}} {{Aktion}} IINKLUSIVE',
-    endpointModalTitle: 'Endpunkt einrichten',
-    endpointModalDesc: 'Nach der Konfiguration k枚nnen die Funktionen, die das Plugin 眉ber API-Endpunkte bereitstellt, verwendet werden.',
-    configureTool: 'Werkzeug konfigurieren',
-    endpointsTip: 'Dieses Plugin bietet bestimmte Funktionen 眉ber Endpunkte, und Sie k枚nnen mehrere Endpunkts盲tze f眉r den aktuellen Arbeitsbereich konfigurieren.',
-    modelNum: '{{num}} ENTHALTENE MODELLE',
-    configureModel: 'Modell konfigurieren',
-    endpointDisableContent: 'M枚chten Sie {{name}} deaktivieren?',
-    endpointDeleteTip: 'Endpunkt entfernen',
-    serviceOk: 'Service in Ordnung',
-    switchVersion: 'Version wechseln',
-  },
-  debugInfo: {
-    title: 'Debuggen',
-    viewDocs: 'Dokumente anzeigen',
-  },
-  privilege: {
-    everyone: 'Jeder',
-    title: 'Plugin-Einstellungen',
-    noone: 'Niemand',
-    admins: 'Administratoren',
-    whoCanDebug: 'Wer kann Plugins debuggen?',
-    whoCanInstall: 'Wer kann Plugins installieren und verwalten?',
-  },
-  pluginInfoModal: {
-    repository: 'Aufbewahrungsort',
-    title: 'Plugin-Info',
-    packageName: 'Paket',
-    release: 'Loslassen',
-  },
-  action: {
-    checkForUpdates: 'Nach Updates suchen',
-    pluginInfo: 'Plugin-Info',
-    usedInApps: 'Dieses Plugin wird in {{num}} Apps verwendet.',
-    delete: 'Plugin entfernen',
-    deleteContentRight: 'Plugin?',
-    deleteContentLeft: 'M枚chten Sie',
-  },
-  installModal: {
-    labels: {
-      repository: 'Aufbewahrungsort',
-      package: 'Paket',
-      version: 'Version',
-    },
-    installFailed: 'Installation fehlgeschlagen',
-    installPlugin: 'Plugin installieren',
-    uploadFailed: 'Upload fehlgeschlagen',
-    install: 'Installieren',
-    installComplete: 'Installation abgeschlossen',
-    installing: 'Installation...',
-    installedSuccessfullyDesc: 'Das Plugin wurde erfolgreich installiert.',
-    installedSuccessfully: 'Installation erfolgreich',
-    installFailedDesc: 'Die Installation des Plugins ist fehlgeschlagen.',
-    pluginLoadError: 'Fehler beim Laden des Plugins',
-    close: 'Schlie脽en',
-    pluginLoadErrorDesc: 'Dieses Plugin wird nicht installiert',
-    cancel: 'Abbrechen',
-    back: 'Zur眉ck',
-    uploadingPackage: 'Das Hochladen von {{packageName}}...',
-    readyToInstallPackage: '脺ber die Installation des folgenden Plugins',
-    readyToInstallPackages: '脺ber die Installation der folgenden {{num}} Plugins',
-    fromTrustSource: 'Bitte stellen Sie sicher, dass Sie nur Plugins aus einer <trustSource>vertrauensw眉rdigen Quelle</trustSource> installieren.',
-    readyToInstall: '脺ber die Installation des folgenden Plugins',
-    dropPluginToInstall: 'Legen Sie das Plugin-Paket hier ab, um es zu installieren',
-    next: 'N盲chster',
-  },
-  installFromGitHub: {
-    selectPackagePlaceholder: 'Bitte w盲hlen Sie ein Paket aus',
-    gitHubRepo: 'GitHub-Repository',
-    uploadFailed: 'Upload fehlgeschlagen',
-    selectPackage: 'Paket ausw盲hlen',
-    installFailed: 'Installation fehlgeschlagen',
-    installNote: 'Bitte stellen Sie sicher, dass Sie nur Plugins aus einer vertrauensw眉rdigen Quelle installieren.',
-    selectVersionPlaceholder: 'Bitte w盲hlen Sie eine Version aus',
-    updatePlugin: 'Update-Plugin von GitHub',
-    installPlugin: 'Plugin von GitHub installieren',
-    installedSuccessfully: 'Installation erfolgreich',
-    selectVersion: 'Ausf眉hrung w盲hlen',
-  },
-  upgrade: {
-    usedInApps: 'Wird in {{num}} Apps verwendet',
-    description: '脺ber die Installation des folgenden Plugins',
-    upgrading: 'Installation...',
-    successfulTitle: 'Installation erfolgreich',
-    upgrade: 'Installieren',
-    title: 'Plugin installieren',
-    close: 'Schlie脽en',
-  },
-  error: {
-    inValidGitHubUrl: 'Ung眉ltige GitHub-URL. Bitte geben Sie eine g眉ltige URL im Format ein: https://github.com/owner/repo',
-    noReleasesFound: 'Keine Ver枚ffentlichungen gefunden. Bitte 眉berpr眉fen Sie das GitHub-Repository oder die Eingabe-URL.',
-    fetchReleasesError: 'Freigaben k枚nnen nicht abgerufen werden. Bitte versuchen Sie es sp盲ter erneut.',
-  },
-  marketplace: {
-    sortOption: {
-      newlyReleased: 'Neu ver枚ffentlicht',
-      mostPopular: 'Beliebteste',
-      firstReleased: 'Zuerst ver枚ffentlicht',
-      recentlyUpdated: 'K眉rzlich aktualisiert',
-    },
-    viewMore: 'Mehr anzeigen',
-    sortBy: 'Schwarze Stadt',
-    discover: 'Entdecken',
-    noPluginFound: 'Kein Plugin gefunden',
-    difyMarketplace: 'Dify Marktplatz',
-    moreFrom: 'Mehr aus dem Marketplace',
-    pluginsResult: '{{num}} Ergebnisse',
-    empower: 'Unterst眉tzen Sie Ihre KI-Entwicklung',
-    and: 'und',
-    partnerTip: 'Von einem Dify-Partner verifiziert',
-    verifiedTip: 'Von Dify 眉berpr眉ft',
-  },
-  task: {
-    clearAll: 'Alle l枚schen',
-    installingWithError: 'Installation von {{installingLength}} Plugins, {{successLength}} erfolgreich, {{errorLength}} fehlgeschlagen',
-    installingWithSuccess: 'Installation von {{installingLength}} Plugins, {{successLength}} erfolgreich.',
-    installedError: '{{errorLength}} Plugins konnten nicht installiert werden',
-    installing: 'Installation von {{installingLength}} Plugins, 0 erledigt.',
-    installError: '{{errorLength}} Plugins konnten nicht installiert werden, klicken Sie hier, um sie anzusehen',
-  },
-  allCategories: 'Alle Kategorien',
-  install: '{{num}} Installationen',
-  installAction: 'Installieren',
-  submitPlugin: 'Plugin einreichen',
-  from: 'Von',
-  fromMarketplace: 'Aus dem Marketplace',
-  search: 'Suchen',
-  searchCategories: 'Kategorien durchsuchen',
-  searchPlugins: 'Plugins suchen',
-  endpointsEnabled: '{{num}} Gruppen von Endpunkten aktiviert',
-  searchInMarketplace: 'Suche im Marketplace',
-  searchTools: 'Suchwerkzeuge...',
-  findMoreInMarketplace: 'Weitere Informationen finden Sie im Marketplace',
-  installPlugin: 'Plugin installieren',
-  installFrom: 'INSTALLIEREN VON',
-  metadata: {
-    title: 'Plugins',
-  },
-  difyVersionNotCompatible: 'Die aktuelle Dify-Version ist mit diesem Plugin nicht kompatibel, bitte aktualisieren Sie auf die erforderliche Mindestversion: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/de-DE/time.ts b/i18n/de-DE/time.ts
deleted file mode 100644
index 16f5bc8..0000000
--- a/i18n/de-DE/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Sat: 'Sat',
-    Fri: 'Freitag',
-    Thu: 'Donnerstag',
-    Tue: 'Tue',
-    Sun: 'Sonne',
-    Mon: 'Mon',
-    Wed: 'Mittwoch',
-  },
-  months: {
-    August: 'August',
-    March: 'M盲rz',
-    January: 'Januar',
-    June: 'Juni',
-    July: 'Juli',
-    November: 'November',
-    September: 'September',
-    April: 'April',
-    February: 'Februar',
-    May: 'Mai',
-    December: 'Dezember',
-    October: 'Oktober',
-  },
-  operation: {
-    pickDate: 'Datum ausw盲hlen',
-    ok: 'OK',
-    cancel: 'Stornieren',
-    now: 'Jetzt',
-  },
-  title: {
-    pickTime: 'W盲hle Zeit',
-  },
-  defaultPlaceholder: 'W盲hle eine Zeit...',
-}
-
-export default translation
diff --git a/i18n/en-US/education.ts b/i18n/en-US/education.ts
deleted file mode 100644
index ea125a1..0000000
--- a/i18n/en-US/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerified: 'Get Education Verified',
-  toVerifiedTip: {
-    front: 'You are now eligible for Education Verified status. Please enter your education information below to complete the process and receive an',
-    coupon: 'exclusive 100% coupon',
-    end: 'for the Dify Professional Plan.',
-  },
-  currentSigned: 'CURRENTLY SIGNED IN AS',
-  form: {
-    schoolName: {
-      title: 'Your School Name',
-      placeholder: 'Enter the official, unabbreviated name of your school',
-    },
-    schoolRole: {
-      title: 'Your School Role',
-      option: {
-        student: 'Student',
-        teacher: 'Teacher',
-        administrator: 'School Administrator',
-      },
-    },
-    terms: {
-      title: 'Terms & Agreements',
-      desc: {
-        front: 'Your information and use of Education Verified status are subject to our',
-        and: 'and',
-        end: '. By submitting锛�',
-        termsOfService: 'Terms of Service',
-        privacyPolicy: 'Privacy Policy',
-      },
-      option: {
-        age: 'I confirm I am at least 18 years old',
-        inSchool: 'I confirm I am enrolled or employed at the institution provided. Dify may request proof of enrollment/employment. If I misrepresent my eligibility, I agree to pay any fees initially waived based on my education status.',
-      },
-    },
-  },
-  submit: 'Submit',
-  submitError: 'Form submission failed. Please try again later.',
-  learn: 'Learn how to get education verified',
-  successTitle: 'You Have Got Dify Education Verified',
-  successContent: 'We have issued a 100% discount coupon for the Dify Professional plan to your account. The coupon is valid for one year, please use it within the validity period.',
-  rejectTitle: 'Your Dify Educational Verification Has Been Rejected',
-  rejectContent: 'Unfortunately, you are not eligible for Education Verified status and therefore cannot receive the exclusive 100% coupon for the Dify Professional Plan if you use this email address.',
-  emailLabel: 'Your current email',
-}
-
-export default translation
diff --git a/i18n/en-US/plugin-tags.ts b/i18n/en-US/plugin-tags.ts
deleted file mode 100644
index d2177b2..0000000
--- a/i18n/en-US/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  allTags: 'All Tags',
-  searchTags: 'Search Tags',
-  tags: {
-    agent: 'Agent',
-    search: 'Search',
-    image: 'Image',
-    videos: 'Videos',
-    weather: 'Weather',
-    finance: 'Finance',
-    design: 'Design',
-    travel: 'Travel',
-    social: 'Social',
-    news: 'News',
-    medical: 'Medical',
-    productivity: 'Productivity',
-    education: 'Education',
-    business: 'Business',
-    entertainment: 'Entertainment',
-    utilities: 'Utilities',
-    other: 'Other',
-  },
-}
-
-export default translation
diff --git a/i18n/en-US/plugin.ts b/i18n/en-US/plugin.ts
deleted file mode 100644
index a0b36fb..0000000
--- a/i18n/en-US/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  metadata: {
-    title: 'Plugins',
-  },
-  category: {
-    all: 'All',
-    models: 'Models',
-    tools: 'Tools',
-    agents: 'Agent Strategies',
-    extensions: 'Extensions',
-    bundles: 'Bundles',
-  },
-  categorySingle: {
-    model: 'Model',
-    tool: 'Tool',
-    agent: 'Agent Strategy',
-    extension: 'Extension',
-    bundle: 'Bundle',
-  },
-  search: 'Search',
-  allCategories: 'All Categories',
-  searchCategories: 'Search Categories',
-  searchPlugins: 'Search plugins',
-  from: 'From',
-  findMoreInMarketplace: 'Find more in Marketplace',
-  searchInMarketplace: 'Search in Marketplace',
-  fromMarketplace: 'From Marketplace',
-  endpointsEnabled: '{{num}} sets of endpoints enabled',
-  searchTools: 'Search tools...',
-  installPlugin: 'Install plugin',
-  installFrom: 'INSTALL FROM',
-  list: {
-    noInstalled: 'No plugins installed',
-    notFound: 'No plugins found',
-    source: {
-      marketplace: 'Install from Marketplace',
-      github: 'Install from GitHub',
-      local: 'Install from Local Package File',
-    },
-  },
-  source: {
-    marketplace: 'Marketplace',
-    github: 'GitHub',
-    local: 'Local Package File',
-  },
-  detailPanel: {
-    switchVersion: 'Switch Version',
-    categoryTip: {
-      marketplace: 'Installed from Marketplace',
-      github: 'Installed from Github',
-      local: 'Local Plugin',
-      debugging: 'Debugging Plugin',
-    },
-    operation: {
-      install: 'Install',
-      detail: 'Details',
-      update: 'Update',
-      info: 'Plugin Info',
-      checkUpdate: 'Check Update',
-      viewDetail: 'View Detail',
-      remove: 'Remove',
-    },
-    actionNum: '{{num}} {{action}} INCLUDED',
-    strategyNum: '{{num}} {{strategy}} INCLUDED',
-    endpoints: 'Endpoints',
-    endpointsTip: 'This plugin provides specific functionalities via endpoints, and you can configure multiple endpoint sets for current workspace.',
-    endpointsDocLink: 'View the document',
-    endpointsEmpty: 'Click the \'+\' button to add an endpoint',
-    endpointDisableTip: 'Disable Endpoint',
-    endpointDisableContent: 'Would you like to disable {{name}}? ',
-    endpointDeleteTip: 'Remove Endpoint',
-    endpointDeleteContent: 'Would you like to remove {{name}}? ',
-    endpointModalTitle: 'Setup endpoint',
-    endpointModalDesc: 'Once configured, the features provided by the plugin via API endpoints can be used.',
-    serviceOk: 'Service OK',
-    disabled: 'Disabled',
-    modelNum: '{{num}} MODELS INCLUDED',
-    toolSelector: {
-      title: 'Add tool',
-      toolLabel: 'Tool',
-      descriptionLabel: 'Tool description',
-      descriptionPlaceholder: 'Brief description of the tool\'s purpose, e.g., get the temperature for a specific location.',
-      placeholder: 'Select a tool...',
-      settings: 'USER SETTINGS',
-      params: 'REASONING CONFIG',
-      paramsTip1: 'Controls LLM inference parameters.',
-      paramsTip2: 'When \'Automatic\' is off, the default value is used.',
-      auto: 'Automatic',
-      empty: 'Click the \'+\' button to add tools. You can add multiple tools.',
-      uninstalledTitle: 'Tool not installed',
-      uninstalledContent: 'This plugin is installed from the local/GitHub repository. Please use after installation.',
-      uninstalledLink: 'Manage in Plugins',
-      unsupportedTitle: 'Unsupported Action',
-      unsupportedContent: 'The installed plugin version does not provide this action.',
-      unsupportedContent2: 'Click to switch version.',
-    },
-    configureApp: 'Configure App',
-    configureModel: 'Configure model',
-    configureTool: 'Configure tool',
-  },
-  install: '{{num}} installs',
-  installAction: 'Install',
-  debugInfo: {
-    title: 'Debugging',
-    viewDocs: 'View Docs',
-  },
-  privilege: {
-    title: 'Plugin Preferences',
-    whoCanInstall: 'Who can install and manage plugins?',
-    whoCanDebug: 'Who can debug plugins?',
-    everyone: 'Everyone',
-    admins: 'Admins',
-    noone: 'No one',
-  },
-  pluginInfoModal: {
-    title: 'Plugin info',
-    repository: 'Repository',
-    release: 'Release',
-    packageName: 'Package',
-  },
-  action: {
-    checkForUpdates: 'Check for updates',
-    pluginInfo: 'Plugin info',
-    delete: 'Remove plugin',
-    deleteContentLeft: 'Would you like to remove ',
-    deleteContentRight: ' plugin?',
-    usedInApps: 'This plugin is being used in {{num}} apps.',
-  },
-  installModal: {
-    installPlugin: 'Install Plugin',
-    installComplete: 'Installation complete',
-    installedSuccessfully: 'Installation successful',
-    installedSuccessfullyDesc: 'The plugin has been installed successfully.',
-    uploadFailed: 'Upload failed',
-    installFailed: 'Installation failed',
-    installFailedDesc: 'The plugin has been installed failed.',
-    install: 'Install',
-    installing: 'Installing...',
-    uploadingPackage: 'Uploading {{packageName}}...',
-    readyToInstall: 'About to install the following plugin',
-    readyToInstallPackage: 'About to install the following plugin',
-    readyToInstallPackages: 'About to install the following {{num}} plugins',
-    fromTrustSource: 'Please make sure that you only install plugins from a <trustSource>trusted source</trustSource>.',
-    dropPluginToInstall: 'Drop plugin package here to install',
-    labels: {
-      repository: 'Repository',
-      version: 'Version',
-      package: 'Package',
-    },
-    close: 'Close',
-    cancel: 'Cancel',
-    back: 'Back',
-    next: 'Next',
-    pluginLoadError: 'Plugin load error',
-    pluginLoadErrorDesc: 'This plugin will not be installed',
-  },
-  installFromGitHub: {
-    installPlugin: 'Install plugin from GitHub',
-    updatePlugin: 'Update plugin from GitHub',
-    installedSuccessfully: 'Installation successful',
-    installFailed: 'Installation failed',
-    uploadFailed: 'Upload failed',
-    gitHubRepo: 'GitHub repository',
-    selectVersion: 'Select version',
-    selectVersionPlaceholder: 'Please select a version',
-    installNote: 'Please make sure that you only install plugins from a trusted source.',
-    selectPackage: 'Select package',
-    selectPackagePlaceholder: 'Please select a package',
-  },
-  upgrade: {
-    title: 'Install Plugin',
-    successfulTitle: 'Install successful',
-    description: 'About to install the following plugin',
-    usedInApps: 'Used in {{num}} apps',
-    upgrade: 'Install',
-    upgrading: 'Installing...',
-    close: 'Close',
-  },
-  error: {
-    inValidGitHubUrl: 'Invalid GitHub URL. Please enter a valid URL in the format: https://github.com/owner/repo',
-    fetchReleasesError: 'Unable to retrieve releases. Please try again later.',
-    noReleasesFound: 'No releases found. Please check the GitHub repository or the input URL.',
-  },
-  marketplace: {
-    empower: 'Empower your AI development',
-    discover: 'Discover',
-    and: 'and',
-    difyMarketplace: 'Dify Marketplace',
-    moreFrom: 'More from Marketplace',
-    noPluginFound: 'No plugin found',
-    pluginsResult: '{{num}} results',
-    sortBy: 'Sort by',
-    sortOption: {
-      mostPopular: 'Most Popular',
-      recentlyUpdated: 'Recently Updated',
-      newlyReleased: 'Newly Released',
-      firstReleased: 'First Released',
-    },
-    viewMore: 'View more',
-    verifiedTip: 'Verified by Dify',
-    partnerTip: 'Verified by a Dify partner',
-  },
-  task: {
-    installing: 'Installing {{installingLength}} plugins, 0 done.',
-    installingWithSuccess: 'Installing {{installingLength}} plugins, {{successLength}} success.',
-    installingWithError: 'Installing {{installingLength}} plugins, {{successLength}} success, {{errorLength}} failed',
-    installError: '{{errorLength}} plugins failed to install, click to view',
-    installedError: '{{errorLength}} plugins failed to install',
-    clearAll: 'Clear all',
-  },
-  submitPlugin: 'Submit plugin',
-  difyVersionNotCompatible: 'The current Dify version is not compatible with this plugin, please upgrade to the minimum version required: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/en-US/time.ts b/i18n/en-US/time.ts
deleted file mode 100644
index 40adad0..0000000
--- a/i18n/en-US/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Sun: 'Sun',
-    Mon: 'Mon',
-    Tue: 'Tue',
-    Wed: 'Wed',
-    Thu: 'Thu',
-    Fri: 'Fri',
-    Sat: 'Sat',
-  },
-  months: {
-    January: 'January',
-    February: 'February',
-    March: 'March',
-    April: 'April',
-    May: 'May',
-    June: 'June',
-    July: 'July',
-    August: 'August',
-    September: 'September',
-    October: 'October',
-    November: 'November',
-    December: 'December',
-  },
-  operation: {
-    now: 'Now',
-    ok: 'OK',
-    cancel: 'Cancel',
-    pickDate: 'Pick Date',
-  },
-  title: {
-    pickTime: 'Pick Time',
-  },
-  defaultPlaceholder: 'Pick a time...',
-}
-
-export default translation
diff --git a/i18n/es-ES/education.ts b/i18n/es-ES/education.ts
deleted file mode 100644
index 9382a2d..0000000
--- a/i18n/es-ES/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: 'cup贸n exclusivo del 100%',
-    end: 'para el Plan Profesional de Dify.',
-    front: 'Ahora eres elegible para el estado de Educaci贸n Verificada. Por favor, introduce tu informaci贸n educativa a continuaci贸n para completar el proceso y recibir un',
-  },
-  form: {
-    schoolName: {
-      title: 'El nombre de tu escuela',
-      placeholder: 'Ingrese el nombre oficial y completo de su escuela',
-    },
-    schoolRole: {
-      option: {
-        student: 'Estudiante',
-        administrator: 'Administrador escolar',
-        teacher: 'Profesor',
-      },
-      title: 'Tu rol en la escuela',
-    },
-    terms: {
-      desc: {
-        termsOfService: 'T茅rminos de Servicio',
-        privacyPolicy: 'Pol铆tica de privacidad',
-        and: 'y',
-        front: 'Su informaci贸n y uso del estado de Educaci贸n Verificada est谩n sujetos a nuestra',
-        end: '. Al enviar:',
-      },
-      option: {
-        age: 'Confirmo que tengo al menos 18 a帽os',
-        inSchool: 'Confirmo que estoy inscrito o empleado en la instituci贸n indicada. Dify puede solicitar prueba de inscripci贸n/empleo. Si falseo mi elegibilidad, acepto pagar cualquier tarifa que se haya eximido inicialmente en funci贸n de mi estado educativo.',
-      },
-      title: 'T茅rminos y Acuerdos',
-    },
-  },
-  emailLabel: 'Tu correo electr贸nico actual',
-  submit: 'Enviar',
-  submitError: 'Error en el env铆o del formulario. Por favor, int茅ntelo de nuevo m谩s tarde.',
-  successTitle: 'Tienes la educaci贸n Dify verificada',
-  toVerified: 'Verifica la educaci贸n',
-  successContent: 'Hemos emitido un cup贸n de descuento del 100% para el plan Dify Professional en tu cuenta. El cup贸n es v谩lido por un a帽o, por favor util铆zalo dentro del per铆odo de validez.',
-  learn: 'Aprende c贸mo obtener la verificaci贸n de la educaci贸n',
-  rejectTitle: 'Su verificaci贸n educativa de Dify ha sido rechazada.',
-  currentSigned: 'ACTUALMENTE CONECTADO COMO',
-  rejectContent: 'Desafortunadamente, no eres elegible para el estado de Educaci贸n Verificada y, por lo tanto, no puedes recibir el exclusivo cup贸n del 100% para el Plan Profesional de Dify si utilizas esta direcci贸n de correo electr贸nico.',
-}
-
-export default translation
diff --git a/i18n/es-ES/plugin-tags.ts b/i18n/es-ES/plugin-tags.ts
deleted file mode 100644
index e91684d..0000000
--- a/i18n/es-ES/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    image: 'Imagen',
-    agent: 'Agente',
-    medical: 'M茅dico',
-    weather: 'Tiempo',
-    design: 'Dise帽o',
-    videos: 'V铆deos',
-    education: 'Educaci贸n',
-    finance: 'Finanzas',
-    entertainment: 'Diversi贸n',
-    social: 'Social',
-    travel: 'Viajar',
-    utilities: 'Utilidades',
-    search: 'Buscar',
-    news: 'Noticia',
-    business: 'Negocio',
-    other: 'Otro',
-    productivity: 'Productividad',
-  },
-  allTags: 'Todas las etiquetas',
-  searchTags: 'Etiquetas de b煤squeda',
-}
-
-export default translation
diff --git a/i18n/es-ES/plugin.ts b/i18n/es-ES/plugin.ts
deleted file mode 100644
index 3e62e18..0000000
--- a/i18n/es-ES/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    bundles: 'Paquetes',
-    all: 'Todo',
-    extensions: 'Extensiones',
-    tools: 'Herramientas',
-    agents: 'Estrategias de los agentes',
-    models: 'Modelos',
-  },
-  categorySingle: {
-    bundle: 'Haz',
-    extension: 'Extensi贸n',
-    tool: 'Herramienta',
-    model: 'Modelo',
-    agent: 'Estrategia del agente',
-  },
-  list: {
-    source: {
-      marketplace: 'Instalar desde Marketplace',
-      github: 'Instalar desde GitHub',
-      local: 'Instalar desde el archivo de paquete local',
-    },
-    noInstalled: 'No hay plugins instalados',
-    notFound: 'No se han encontrado plugins',
-  },
-  source: {
-    marketplace: 'Mercado',
-    local: 'Archivo de paquete local',
-    github: 'GitHub (en ingl茅s)',
-  },
-  detailPanel: {
-    categoryTip: {
-      local: 'Plugin Local',
-      marketplace: 'Instalado desde Marketplace',
-      github: 'Instalado desde Github',
-      debugging: 'Complemento de depuraci贸n',
-    },
-    operation: {
-      viewDetail: 'Ver Detalle',
-      detail: 'Detalles',
-      checkUpdate: 'Comprobar actualizaci贸n',
-      install: 'Instalar',
-      remove: 'Eliminar',
-      info: 'Informaci贸n del plugin',
-      update: 'Actualizar',
-    },
-    toolSelector: {
-      toolLabel: 'Herramienta',
-      paramsTip1: 'Controla los par谩metros de inferencia de LLM.',
-      settings: 'CONFIGURACI脫N DEL USUARIO',
-      unsupportedContent2: 'Haga clic para cambiar de versi贸n.',
-      descriptionPlaceholder: 'Breve descripci贸n del prop贸sito de la herramienta, por ejemplo, obtener la temperatura para una ubicaci贸n espec铆fica.',
-      empty: 'Haga clic en el bot贸n \'+\' para agregar herramientas. Puede agregar varias herramientas.',
-      paramsTip2: 'Cuando \'Autom谩tico\' est谩 desactivado, se utiliza el valor predeterminado.',
-      uninstalledTitle: 'Herramienta no instalada',
-      descriptionLabel: 'Descripci贸n de la herramienta',
-      unsupportedContent: 'La versi贸n del plugin instalado no proporciona esta acci贸n.',
-      auto: 'Autom谩tico',
-      title: 'Agregar herramienta',
-      placeholder: 'Seleccione una herramienta...',
-      uninstalledContent: 'Este plugin se instala desde el repositorio local/GitHub. 脷selo despu茅s de la instalaci贸n.',
-      unsupportedTitle: 'Acci贸n no admitida',
-      params: 'CONFIGURACI脫N DE RAZONAMIENTO',
-      uninstalledLink: 'Administrar en Plugins',
-    },
-    endpointDeleteContent: '驴Te gustar铆a eliminar {{nombre}}?',
-    endpointDisableTip: 'Deshabilitar punto de conexi贸n',
-    endpointDeleteTip: 'Eliminar punto de conexi贸n',
-    strategyNum: '{{num}} {{estrategia}} INCLUIDO',
-    disabled: 'Deshabilitado',
-    serviceOk: 'Servicio OK',
-    endpointDisableContent: '驴Te gustar铆a desactivar {{name}}?',
-    switchVersion: 'Versi贸n del interruptor',
-    endpointsTip: 'Este complemento proporciona funcionalidades espec铆ficas a trav茅s de puntos finales, y puede configurar varios conjuntos de puntos finales para el espacio de trabajo actual.',
-    configureModel: 'Configurar modelo',
-    actionNum: '{{num}} {{acci贸n}} INCLUIDO',
-    configureTool: 'Herramienta de configuraci贸n',
-    endpointModalDesc: 'Una vez configurado, se pueden utilizar las funciones proporcionadas por el complemento a trav茅s de los puntos finales de la API.',
-    modelNum: '{{num}} MODELOS INCLUIDOS',
-    endpoints: 'Extremos',
-    endpointModalTitle: 'Punto de conexi贸n de configuraci贸n',
-    endpointsDocLink: 'Ver el documento',
-    endpointsEmpty: 'Haga clic en el bot贸n \'+\' para agregar un punto de conexi贸n',
-    configureApp: 'Configurar la aplicaci贸n',
-  },
-  debugInfo: {
-    title: 'Depuraci贸n',
-    viewDocs: 'Ver documentos',
-  },
-  privilege: {
-    everyone: 'Todos',
-    title: 'Preferencias del plugin',
-    whoCanDebug: '驴Qui茅n puede depurar plugins?',
-    admins: 'Administradores',
-    whoCanInstall: '驴Qui茅n puede instalar y administrar complementos?',
-    noone: 'Nadie',
-  },
-  pluginInfoModal: {
-    repository: 'Dep贸sito',
-    title: 'Informaci贸n del plugin',
-    packageName: 'Paquete',
-    release: 'Lanzamiento',
-  },
-  action: {
-    checkForUpdates: 'Buscar actualizaciones',
-    deleteContentLeft: '驴Le gustar铆a eliminar',
-    deleteContentRight: '驴Complemento?',
-    usedInApps: 'Este plugin se est谩 utilizando en las aplicaciones {{num}}.',
-    delete: 'Eliminar plugin',
-    pluginInfo: 'Informaci贸n del plugin',
-  },
-  installModal: {
-    labels: {
-      repository: 'Dep贸sito',
-      version: 'Versi贸n',
-      package: 'Paquete',
-    },
-    installPlugin: 'Instalar plugin',
-    close: 'Cerrar',
-    uploadingPackage: 'Subiendo {{packageName}}...',
-    installComplete: 'Instalaci贸n completa',
-    installFailed: 'Error de instalaci贸n',
-    fromTrustSource: 'Por favor, aseg煤rate de que s贸lo instalas plugins de una <trustSource>fuente de confianza</trustSource>.',
-    installedSuccessfullyDesc: 'El plugin se ha instalado correctamente.',
-    back: 'Atr谩s',
-    installFailedDesc: 'El plugin ha fallado en la instalaci贸n.',
-    installing: 'Instalar...',
-    next: 'Pr贸ximo',
-    readyToInstallPackages: 'A punto de instalar los siguientes plugins {{num}}',
-    cancel: 'Cancelar',
-    uploadFailed: 'Error de carga',
-    install: 'Instalar',
-    pluginLoadError: 'Error de carga del plugin',
-    pluginLoadErrorDesc: 'Este plugin no se instalar谩',
-    readyToInstall: 'A punto de instalar el siguiente plugin',
-    dropPluginToInstall: 'Suelte el paquete del complemento aqu铆 para instalarlo',
-    readyToInstallPackage: 'A punto de instalar el siguiente plugin',
-    installedSuccessfully: 'Instalaci贸n exitosa',
-  },
-  installFromGitHub: {
-    uploadFailed: 'Error de carga',
-    updatePlugin: 'Actualizar plugin desde GitHub',
-    selectPackagePlaceholder: 'Por favor, seleccione un paquete',
-    installedSuccessfully: 'Instalaci贸n exitosa',
-    installNote: 'Por favor, aseg煤rate de que s贸lo instalas plugins de una fuente de confianza.',
-    gitHubRepo: 'Repositorio de GitHub',
-    selectPackage: 'Seleccionar paquete',
-    selectVersion: 'Seleccionar versi贸n',
-    selectVersionPlaceholder: 'Por favor, seleccione una versi贸n',
-    installPlugin: 'Instalar plugin desde GitHub',
-    installFailed: 'Error de instalaci贸n',
-  },
-  upgrade: {
-    upgrading: 'Instalar...',
-    close: 'Cerrar',
-    description: 'A punto de instalar el siguiente plugin',
-    upgrade: 'Instalar',
-    title: 'Instalar plugin',
-    successfulTitle: 'Instalaci贸n correcta',
-    usedInApps: 'Usado en aplicaciones {{num}}',
-  },
-  error: {
-    fetchReleasesError: 'No se pueden recuperar las versiones. Por favor, int茅ntelo de nuevo m谩s tarde.',
-    noReleasesFound: 'No se han encontrado versiones. Compruebe el repositorio de GitHub o la URL de entrada.',
-    inValidGitHubUrl: 'URL de GitHub no v谩lida. Introduzca una URL v谩lida en el formato: https://github.com/owner/repo',
-  },
-  marketplace: {
-    sortOption: {
-      recentlyUpdated: 'Actualizado recientemente',
-      newlyReleased: 'Reci茅n estrenado',
-      firstReleased: 'Lanzado por primera vez',
-      mostPopular: 'Lo m谩s popular',
-    },
-    empower: 'Potencie su desarrollo de IA',
-    moreFrom: 'M谩s de Marketplace',
-    viewMore: 'Ver m谩s',
-    sortBy: 'Ciudad negra',
-    noPluginFound: 'No se ha encontrado ning煤n plugin',
-    pluginsResult: '{{num}} resultados',
-    discover: 'Descubrir',
-    and: 'y',
-    difyMarketplace: 'Mercado de Dify',
-    verifiedTip: 'Verificado por Dify',
-    partnerTip: 'Verificado por un socio de Dify',
-  },
-  task: {
-    installing: 'Instalando plugins {{installingLength}}, 0 hecho.',
-    clearAll: 'Borrar todo',
-    installingWithSuccess: 'Instalando plugins {{installingLength}}, {{successLength}} 茅xito.',
-    installedError: 'Los complementos {{errorLength}} no se pudieron instalar',
-    installError: 'Los complementos {{errorLength}} no se pudieron instalar, haga clic para ver',
-    installingWithError: 'Instalando plugins {{installingLength}}, {{successLength}} 茅xito, {{errorLength}} fallido',
-  },
-  fromMarketplace: 'De Marketplace',
-  endpointsEnabled: '{{num}} conjuntos de puntos finales habilitados',
-  from: 'De',
-  submitPlugin: 'Enviar plugin',
-  installAction: 'Instalar',
-  install: '{{num}} instalaciones',
-  allCategories: 'Todas las categor铆as',
-  searchCategories: 'Categor铆as de b煤squeda',
-  installFrom: 'INSTALAR DESDE',
-  search: 'Buscar',
-  searchInMarketplace: 'Buscar en Marketplace',
-  searchTools: 'Herramientas de b煤squeda...',
-  findMoreInMarketplace: 'M谩s informaci贸n en Marketplace',
-  installPlugin: 'Instalar plugin',
-  searchPlugins: 'Plugins de b煤squeda',
-  metadata: {
-    title: 'Complementos',
-  },
-  difyVersionNotCompatible: 'La versi贸n actual de Dify no es compatible con este plugin, por favor actualiza a la versi贸n m铆nima requerida: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/es-ES/time.ts b/i18n/es-ES/time.ts
deleted file mode 100644
index 920c80e..0000000
--- a/i18n/es-ES/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Sun: 'Sol',
-    Thu: 'Jue',
-    Tue: 'Mar',
-    Sat: 'S谩b',
-    Mon: 'Mon',
-    Fri: 'Viernes',
-    Wed: 'Mi茅rcoles',
-  },
-  months: {
-    August: 'Agosto',
-    September: 'Septiembre',
-    April: 'Abril',
-    February: 'Febrero',
-    January: 'Enero',
-    November: 'Noviembre',
-    October: 'octubre',
-    May: 'Mayo',
-    June: 'Junio',
-    December: 'Diciembre',
-    July: 'Julio',
-    March: 'Marzo',
-  },
-  operation: {
-    ok: 'De acuerdo',
-    pickDate: 'Seleccionar fecha',
-    cancel: 'Cancelar',
-    now: 'Ahora',
-  },
-  title: {
-    pickTime: 'Elegir hora',
-  },
-  defaultPlaceholder: 'Elige una hora...',
-}
-
-export default translation
diff --git a/i18n/fa-IR/education.ts b/i18n/fa-IR/education.ts
deleted file mode 100644
index 331c3a6..0000000
--- a/i18n/fa-IR/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: '讴賵倬賳 丕賳丨氐丕乇蹖 郾郯郯侏',
-    end: '亘乇丕蹖 胤乇丨 丨乇賮賴鈥屫й� 丿蹖賮蹖.',
-    front: '卮賲丕 丕讴賳賵賳 亘乇丕蹖 賵囟毓蹖鬲 鬲兀蹖蹖丿 卮丿賴 丌賲賵夭卮蹖 賵丕噩丿 卮乇丕蹖胤 賴爻鬲蹖丿. 賱胤賮丕賸 丕胤賱丕毓丕鬲 鬲丨氐蹖賱蹖 禺賵丿 乇丕 丿乇 夭蹖乇 賵丕乇丿 讴賳蹖丿 鬲丕 賮乇丌蹖賳丿 乇丕 讴丕賲賱 讴乇丿賴 賵 蹖讴 丿乇蹖丕賮鬲 讴賳蹖丿.',
-  },
-  form: {
-    schoolName: {
-      title: '賳丕賲 賲丿乇爻賴 卮賲丕',
-      placeholder: '賳丕賲 乇爻賲蹖 賵 讴丕賲賱 賲丿乇爻賴 禺賵丿 乇丕 賵丕乇丿 讴賳蹖丿',
-    },
-    schoolRole: {
-      option: {
-        teacher: '賲毓賱賲',
-        student: '丿丕賳卮 丌賲賵夭',
-        administrator: '賲丿蹖乇 賲丿乇爻賴',
-      },
-      title: '賳賯卮 卮賲丕 丿乇 賲丿乇爻賴',
-    },
-    terms: {
-      desc: {
-        privacyPolicy: '爻蹖丕爻鬲 丨乇蹖賲 禺氐賵氐蹖',
-        end: '亘丕 丕乇爻丕賱:',
-        and: '賵',
-        termsOfService: '卮乇丕蹖胤 禺丿賲丕鬲',
-        front: '丕胤賱丕毓丕鬲 卮賲丕 賵 丕爻鬲賮丕丿賴 丕夭 賵囟毓蹖鬲 鬲兀蹖蹖丿 卮丿賴 丌賲賵夭卮蹖 鬲丕亘毓 卮乇丕蹖胤 賲丕 丕爻鬲.',
-      },
-      option: {
-        age: '賲賳 鬲兀蹖蹖丿 賲蹖鈥屭┵嗁� 讴賴 丨丿丕賯賱 郾鄹 爻丕賱 爻賳 丿丕乇賲',
-        inSchool: '賲賳 鬲兀蹖蹖丿 賲蹖鈥屭┵嗁� 讴賴 丿乇 賲丐爻爻賴鈥屫й� 讴賴 賳丕賲 亘乇丿賴 卮丿賴貙 孬亘鬲鈥屬嗀з� 卮丿賴 蹖丕 丕爻鬲禺丿丕賲 卮丿賴鈥屫з�. 丿蹖賮蹖 賲賲讴賳 丕爻鬲 丕夭 賲賳 亘禺賵丕賴丿 賲丿乇讴蹖 亘乇丕蹖 孬亘鬲鈥屬嗀з�/丕爻鬲禺丿丕賲 丕乇丕卅賴 丿賴賲. 丕诏乇 氐賱丕丨蹖鬲賲 乇丕 丕卮鬲亘丕賴 賳賲丕蹖賲貙 賲賵丕賮賯鬲 賲蹖鈥屭┵嗁� 讴賴 賴乇 诏賵賳賴 賴夭蹖賳賴鈥屫й� 讴賴 亘賴鈥屫ж坟� 賵囟毓蹖鬲 鬲丨氐蹖賱蹖 賲賳 丕亘鬲丿丕 賲毓丕賮 卮丿賴貙 倬乇丿丕禺鬲 讴賳賲.',
-      },
-      title: '卮乇丕蹖胤 賵 鬲賵丕賮賯丕鬲',
-    },
-  },
-  submitError: '丕乇爻丕賱 賮乇賲 賳丕賲賵賮賯 亘賵丿. 賱胤賮丕 亘毓丿丕賸 丿賵亘丕乇賴 鬲賱丕卮 讴賳蹖丿.',
-  emailLabel: '丕蹖賲蹖賱 賮毓賱蹖 卮賲丕',
-  currentSigned: '丕讴賳賵賳 亘賴 毓賳賵丕賳',
-  rejectContent: '賲鬲丕爻賮丕賳賴貙 卮賲丕 賵丕噩丿 卮乇丕蹖胤 賵囟毓蹖鬲 鬲兀蹖蹖丿 卮丿賴 丌賲賵夭卮蹖 賳蹖爻鬲蹖丿 賵 亘賴 賴賲蹖賳 丿賱蹖賱 賳賲蹖鈥屫堌з嗃屫� 讴賵倬賳 丕賳丨氐丕乇蹖 郾郯郯侏 亘乇丕蹖 胤乇丨 丨乇賮賴鈥屫й� Dify 乇丕 丿乇 氐賵乇鬲 丕爻鬲賮丕丿賴 丕夭 丕蹖賳 丌丿乇爻 丕蹖賲蹖賱 丿乇蹖丕賮鬲 讴賳蹖丿.',
-  learn: '蹖丕丿 亘诏蹖乇蹖丿 趩诏賵賳賴 賲丿丕乇讴 鬲丨氐蹖賱蹖 禺賵丿 乇丕 鬲兀蹖蹖丿 讴賳蹖丿',
-  successContent: '賲丕 蹖讴 讴賵倬賳 鬲禺賮蹖賮 郾郯郯侏 亘乇丕蹖 胤乇丨 丨乇賮賴鈥屫й� Dify 亘賴 丨爻丕亘 卮賲丕 氐丕丿乇 讴乇丿賴鈥屫й屬�. 丕蹖賳 讴賵倬賳 亘賴 賲丿鬲 蹖讴 爻丕賱 丕毓鬲亘丕乇 丿丕乇丿貙 賱胤賮丕賸 丿乇 亘丕夭賴 丕毓鬲亘丕乇 丕夭 丌賳 丕爻鬲賮丕丿賴 讴賳蹖丿.',
-  toVerified: '鬲丨氐蹖賱丕鬲 禺賵丿 乇丕 鬲兀蹖蹖丿 讴賳蹖丿',
-  rejectTitle: '鬲兀蹖蹖丿蹖賴 丌賲賵夭卮蹖 丿蹖賮蹖 卮賲丕 乇丿 卮丿賴 丕爻鬲',
-  submit: '丕乇爻丕賱',
-  successTitle: '卮賲丕 丌賲賵夭卮 丿蹖賮蹖 鬲兀蹖蹖丿 卮丿賴 丿丕乇蹖丿',
-}
-
-export default translation
diff --git a/i18n/fa-IR/plugin-tags.ts b/i18n/fa-IR/plugin-tags.ts
deleted file mode 100644
index 237aa68..0000000
--- a/i18n/fa-IR/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    productivity: '亘賴乇賴 賵乇蹖',
-    news: '丕禺亘丕乇',
-    medical: '倬夭卮讴蹖',
-    image: '鬲氐賵蹖乇',
-    search: '噩爻鬲噩賵',
-    other: '丿蹖诏乇',
-    utilities: '鬲丕爻蹖爻丕鬲',
-    design: '胤乇丕丨蹖',
-    entertainment: '爻乇诏乇賲蹖',
-    social: '丕噩鬲賲丕毓蹖',
-    education: '丌賲賵夭卮',
-    business: '鬲噩丕乇蹖',
-    finance: '賲丕賱蹖',
-    weather: '賴賵丕',
-    travel: '爻賮乇',
-    videos: '賮蹖賱賲',
-    agent: '毓丕賲賱',
-  },
-  searchTags: '噩爻鬲噩賵 亘乇趩爻亘 賴丕',
-  allTags: '賴賲賴 亘乇趩爻亘 賴丕',
-}
-
-export default translation
diff --git a/i18n/fa-IR/plugin.ts b/i18n/fa-IR/plugin.ts
deleted file mode 100644
index 81aa61a..0000000
--- a/i18n/fa-IR/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    all: '賴賲賴',
-    models: '賲丿賱',
-    bundles: '亘爻鬲賴',
-    agents: '丕爻鬲乇丕鬲跇蹖 賴丕蹖 毓丕賲賱',
-    tools: '丕亘夭丕乇',
-    extensions: '倬爻賵賳丿',
-  },
-  categorySingle: {
-    tool: '丕亘夭丕乇',
-    agent: '丕爻鬲乇丕鬲跇蹖 賳賲丕蹖賳丿诏蹖',
-    extension: '賮乇賲鬲',
-    model: '賲丿賱',
-    bundle: '亘爻鬲賴',
-  },
-  list: {
-    source: {
-      marketplace: '丕夭 Marketplace 賳氐亘 讴賳蹖丿',
-      github: '賳氐亘 丕夭 GitHub',
-      local: '賳氐亘 丕夭 賮丕蹖賱 亘爻鬲賴 賲丨賱蹖',
-    },
-    notFound: '賴蹖趩 丕賮夭賵賳賴 丕蹖 蹖丕賮鬲 賳卮丿',
-    noInstalled: '賴蹖趩 丕賮夭賵賳賴 丕蹖 賳氐亘 賳卮丿賴 丕爻鬲',
-  },
-  source: {
-    github: '诏蹖鬲鈥屬囏ж�',
-    marketplace: '亘丕夭丕乇',
-    local: '賮丕蹖賱 亘爻鬲賴 賲丨賱蹖',
-  },
-  detailPanel: {
-    categoryTip: {
-      debugging: '丕卮讴丕賱 夭丿丕蹖蹖 倬賱丕诏蹖賳',
-      marketplace: '賳氐亘 卮丿賴 丕夭 Marketplace',
-      local: '倬賱丕诏蹖賳 賲丨賱蹖',
-      github: '賳氐亘 卮丿賴 丕夭 Github',
-    },
-    operation: {
-      checkUpdate: '亘賴 乇賵夭 乇爻丕賳蹖 乇丕 亘乇乇爻蹖 讴賳蹖丿',
-      info: '丕胤賱丕毓丕鬲 倬賱丕诏蹖賳',
-      remove: '丨匕賮',
-      update: '乇賵夭 乇爻丕賳蹖',
-      detail: '噩夭卅蹖丕鬲',
-      viewDetail: '賳賲丕蹖卮 噩夭卅蹖丕鬲',
-      install: '賳氐亘',
-    },
-    toolSelector: {
-      descriptionPlaceholder: '卮乇丨 賲禺鬲氐乇蹖 丕夭 賴丿賮 丕亘夭丕乇貙 亘賴 毓賳賵丕賳 賲孬丕賱貙 丿賲丕 乇丕 亘乇丕蹖 蹖讴 賲讴丕賳 禺丕氐 丿乇蹖丕賮鬲 讴賳蹖丿.',
-      auto: '禺賵丿讴丕乇',
-      unsupportedContent: '賳爻禺賴 丕賮夭賵賳賴 賳氐亘 卮丿賴 丕蹖賳 毓賲賱 乇丕 丕乇丕卅賴 賳賲蹖 丿賴丿.',
-      paramsTip1: '倬丕乇丕賲鬲乇賴丕蹖 丕爻鬲賳鬲丕噩 LLM 乇丕 讴賳鬲乇賱 賲蹖 讴賳丿.',
-      params: '倬蹖讴乇亘賳丿蹖 丕爻鬲丿賱丕賱',
-      placeholder: '蹖讴 丕亘夭丕乇 乇丕 丕賳鬲禺丕亘 讴賳蹖丿...',
-      paramsTip2: '賵賯鬲蹖 芦禺賵丿讴丕乇禄 禺丕賲賵卮 亘丕卮丿貙 丕夭 賲賯丿丕乇 倬蹖卮 賮乇囟 丕爻鬲賮丕丿賴 賲蹖 卮賵丿.',
-      descriptionLabel: '鬲賵囟蹖丨丕鬲 丕亘夭丕乇',
-      title: '丕亘夭丕乇 丕賮夭賵丿賳',
-      settings: '鬲賳馗蹖賲丕鬲 讴丕乇亘乇',
-      empty: '亘乇丕蹖 丕賮夭賵丿賳 丕亘夭丕乇賴丕 乇賵蹖 丿讴賲賴 "+" 讴賱蹖讴 讴賳蹖丿. 賲蹖 鬲賵丕賳蹖丿 趩賳丿蹖賳 丕亘夭丕乇 丕囟丕賮賴 讴賳蹖丿.',
-      toolLabel: '丕亘夭丕乇',
-      uninstalledTitle: '丕亘夭丕乇 賳氐亘 賳卮丿賴 丕爻鬲',
-      uninstalledLink: '賲丿蹖乇蹖鬲 丿乇 倬賱丕诏蹖賳 賴丕',
-      uninstalledContent: '丕蹖賳 丕賮夭賵賳賴 丕夭 賲禺夭賳 local/GitHub 賳氐亘 卮丿賴 丕爻鬲. 賱胤賮丕 倬爻 丕夭 賳氐亘 丕爻鬲賮丕丿賴 讴賳蹖丿.',
-      unsupportedTitle: '丕讴卮賳 倬卮鬲蹖亘丕賳蹖 賳卮丿賴',
-      unsupportedContent2: '亘乇丕蹖 鬲睾蹖蹖乇 賳爻禺賴 讴賱蹖讴 讴賳蹖丿.',
-    },
-    endpointDeleteTip: '丨匕賮 賳賯胤賴 倬丕蹖丕賳蹖',
-    disabled: '睾蹖乇 賮毓丕賱',
-    strategyNum: '{{毓丿丿}} {{丕爻鬲乇丕鬲跇蹖}} 卮丕賲賱',
-    configureApp: '倬蹖讴乇亘賳丿蹖 丕倬賱蹖讴蹖卮賳',
-    endpoints: '賳賯丕胤 倬丕蹖丕賳蹖',
-    endpointsDocLink: '賲卮丕賴丿賴 爻賳丿',
-    actionNum: '{{毓丿丿}} {{丕賯丿丕賲}} 卮丕賲賱',
-    endpointDisableContent: '丌蹖丕 賲蹖 禺賵丕賴蹖丿 {{name}} 乇丕 睾蹖乇賮毓丕賱 讴賳蹖丿責',
-    endpointModalTitle: '乇丕賴 丕賳丿丕夭蹖 丕賳丿倬賵蹖賳鬲',
-    endpointsTip: '丕蹖賳 丕賮夭賵賳賴 毓賲賱讴乇丿賴丕蹖 禺丕氐蹖 乇丕 丕夭 胤乇蹖賯 賳賯丕胤 倬丕蹖丕賳蹖 丕乇丕卅賴 賲蹖 丿賴丿 賵 賲蹖 鬲賵丕賳蹖丿 趩賳丿蹖賳 賲噩賲賵毓賴 賳賯胤賴 倬丕蹖丕賳蹖 乇丕 亘乇丕蹖 賮囟丕蹖 讴丕乇蹖 賮毓賱蹖 倬蹖讴乇亘賳丿蹖 讴賳蹖丿.',
-    serviceOk: '禺丿賲丕鬲 禺賵亘',
-    modelNum: '{{毓丿丿}} 賲丿賱 賴丕蹖 诏賳噩丕賳丿賴 卮丿賴 丕爻鬲',
-    endpointDisableTip: '睾蹖乇賮毓丕賱 讴乇丿賳 賳賯胤賴 倬丕蹖丕賳蹖',
-    configureModel: '賲丿賱 乇丕 倬蹖讴乇亘賳丿蹖 讴賳蹖丿',
-    configureTool: '丕亘夭丕乇 倬蹖讴乇亘賳丿蹖',
-    endpointsEmpty: '亘乇丕蹖 丕賮夭賵丿賳 賳賯胤賴 倬丕蹖丕賳蹖 乇賵蹖 丿讴賲賴 "+" 讴賱蹖讴 讴賳蹖丿',
-    endpointModalDesc: '倬爻 丕夭 倬蹖讴乇亘賳丿蹖貙 賲蹖 鬲賵丕賳 丕夭 賵蹖跇诏蹖 賴丕蹖 丕乇丕卅賴 卮丿賴 鬲賵爻胤 丕賮夭賵賳賴 丕夭 胤乇蹖賯 賳賯丕胤 倬丕蹖丕賳蹖 API 丕爻鬲賮丕丿賴 讴乇丿.',
-    switchVersion: '賳爻禺賴 爻賵卅蹖趩',
-    endpointDeleteContent: '丌蹖丕 賲蹖 禺賵丕賴蹖丿 {{name}} 乇丕 丨匕賮 讴賳蹖丿責',
-  },
-  debugInfo: {
-    title: '丕卮讴丕賱 夭丿丕蹖蹖',
-    viewDocs: '賲卮丕賴丿賴 丕爻賳丕丿',
-  },
-  privilege: {
-    everyone: '賴賲賴',
-    admins: '賲丿蹖乇丕賳',
-    whoCanInstall: '趩賴 讴爻蹖 賲蹖 鬲賵丕賳丿 丕賮夭賵賳賴 賴丕 乇丕 賳氐亘 賵 賲丿蹖乇蹖鬲 讴賳丿責',
-    title: '鬲賳馗蹖賲丕鬲 倬賱丕诏蹖賳',
-    noone: '賴蹖趩',
-    whoCanDebug: '趩賴 讴爻蹖 賲蹖 鬲賵丕賳丿 丕賮夭賵賳賴 賴丕 乇丕 丕卮讴丕賱 夭丿丕蹖蹖 讴賳丿責',
-  },
-  pluginInfoModal: {
-    repository: '賲禺夭賳',
-    packageName: '亘爻鬲賴',
-    title: '丕胤賱丕毓丕鬲 倬賱丕诏蹖賳',
-    release: '丕賳鬲卮丕乇',
-  },
-  action: {
-    pluginInfo: '丕胤賱丕毓丕鬲 倬賱丕诏蹖賳',
-    usedInApps: '丕蹖賳 丕賮夭賵賳賴 丿乇 亘乇賳丕賲賴 賴丕蹖 {{num}} 丕爻鬲賮丕丿賴 賲蹖 卮賵丿.',
-    deleteContentLeft: '丌蹖丕 賲蹖 禺賵丕賴蹖丿',
-    checkForUpdates: '亘乇乇爻蹖 亘賴 乇賵夭乇爻丕賳蹖 賴丕',
-    delete: '丨匕賮 丕賮夭賵賳賴',
-    deleteContentRight: '丕賮夭賵賳賴?',
-  },
-  installModal: {
-    labels: {
-      package: '亘爻鬲賴',
-      version: '賳爻禺賴贁',
-      repository: '賲禺夭賳',
-    },
-    back: '亘丕夭诏卮鬲',
-    next: '亘毓丿蹖',
-    cancel: '賱睾賵',
-    uploadingPackage: '丌倬賱賵丿 {{packageName}}...',
-    fromTrustSource: '賱胤賮丕 賲胤賲卅賳 卮賵蹖丿 讴賴 丕賮夭賵賳賴 賴丕 乇丕 賮賯胤 丕夭 <trustSource>蹖讴 賲賳亘毓 賯丕亘賱 丕毓鬲賲丕丿</trustSource> 賳氐亘 賲蹖 讴賳蹖丿.',
-    readyToInstall: '丿乇 賲賵乇丿 賳氐亘 丕賮夭賵賳賴 夭蹖乇',
-    install: '賳氐亘',
-    pluginLoadError: '禺胤丕蹖 亘丕乇诏匕丕乇蹖 丕賮夭賵賳賴',
-    pluginLoadErrorDesc: '丕蹖賳 丕賮夭賵賳賴 賳氐亘 賳禺賵丕賴丿 卮丿',
-    close: '賳夭丿蹖讴',
-    installFailed: '賳氐亘 賳丕賲賵賮賯 亘賵丿',
-    installFailedDesc: '丕賮夭賵賳賴 賳氐亘 卮丿賴 丕爻鬲 賳丕賲賵賮賯 丕爻鬲.',
-    installedSuccessfullyDesc: '丕蹖賳 丕賮夭賵賳賴 亘丕 賲賵賮賯蹖鬲 賳氐亘 卮丿.',
-    dropPluginToInstall: '亘爻鬲賴 丕賮夭賵賳賴 乇丕 亘乇丕蹖 賳氐亘 丕蹖賳噩丕 乇賴丕 讴賳蹖丿',
-    installing: '賳氐亘...',
-    readyToInstallPackage: '丿乇 賲賵乇丿 賳氐亘 丕賮夭賵賳賴 夭蹖乇',
-    readyToInstallPackages: '丿乇 卮乇賮 賳氐亘 丕賮夭賵賳賴 賴丕蹖 {{num}} 夭蹖乇',
-    installedSuccessfully: '賳氐亘 賲賵賮賯蹖鬲 丌賲蹖夭 亘賵丿',
-    installPlugin: '丕賮夭賵賳賴 乇丕 賳氐亘 讴賳蹖丿',
-    installComplete: '賳氐亘 讴丕賲賱 卮丿',
-    uploadFailed: '丌倬賱賵丿 丕賳噩丕賲 賳卮丿',
-  },
-  installFromGitHub: {
-    installPlugin: '丕賮夭賵賳賴 乇丕 丕夭 GitHub 賳氐亘 讴賳蹖丿',
-    selectPackagePlaceholder: '賱胤賮丕 蹖讴 亘爻鬲賴 乇丕 丕賳鬲禺丕亘 讴賳蹖丿',
-    gitHubRepo: '賲禺夭賳 GitHub',
-    updatePlugin: '丕賮夭賵賳賴 乇丕 丕夭 GitHub 亘賴 乇賵夭 讴賳蹖丿',
-    uploadFailed: '丌倬賱賵丿 丕賳噩丕賲 賳卮丿',
-    installedSuccessfully: '賳氐亘 賲賵賮賯蹖鬲 丌賲蹖夭 亘賵丿',
-    installNote: '賱胤賮丕 賲胤賲卅賳 卮賵蹖丿 讴賴 丕賮夭賵賳賴 賴丕 乇丕 賮賯胤 丕夭 蹖讴 賲賳亘毓 賯丕亘賱 丕毓鬲賲丕丿 賳氐亘 賲蹖 讴賳蹖丿.',
-    installFailed: '賳氐亘 賳丕賲賵賮賯 亘賵丿',
-    selectVersionPlaceholder: '賱胤賮丕 蹖讴 賳爻禺賴 乇丕 丕賳鬲禺丕亘 讴賳蹖丿',
-    selectPackage: '亘爻鬲賴 乇丕 丕賳鬲禺丕亘 讴賳蹖丿',
-    selectVersion: '丕賳鬲禺丕亘 賳爻禺賴',
-  },
-  upgrade: {
-    usedInApps: '丕爻鬲賮丕丿賴 卮丿賴 丿乇 亘乇賳丕賲賴 賴丕蹖 {{num}}',
-    successfulTitle: '賳氐亘 賲賵賮賯蹖鬲 丌賲蹖夭',
-    close: '賳夭丿蹖讴',
-    title: '丕賮夭賵賳賴 乇丕 賳氐亘 讴賳蹖丿',
-    upgrading: '賳氐亘...',
-    upgrade: '賳氐亘',
-    description: '丿乇 賲賵乇丿 賳氐亘 丕賮夭賵賳賴 夭蹖乇',
-  },
-  error: {
-    noReleasesFound: '賴蹖趩 賳爻禺賴 丕蹖 蹖丕賮鬲 賳卮丿. 賱胤賮丕 賲禺夭賳 GitHub 蹖丕 URL 賵乇賵丿蹖 乇丕 亘乇乇爻蹖 讴賳蹖丿.',
-    inValidGitHubUrl: 'URL GitHub 賳丕賲毓鬲亘乇 丕爻鬲. 賱胤賮丕 蹖讴 URL 賲毓鬲亘乇 乇丕 丿乇 賯丕賱亘 賵丕乇丿 讴賳蹖丿: https://github.com/owner/repo',
-    fetchReleasesError: '丕賲讴丕賳 亘丕夭蹖丕亘蹖 賳爻禺賴 賴丕 賵噩賵丿 賳丿丕乇丿. 賱胤賮丕 亘毓丿丕 丿賵亘丕乇賴 丕賲鬲丨丕賳 讴賳蹖丿.',
-  },
-  marketplace: {
-    sortOption: {
-      firstReleased: '丕賵賱蹖賳 賲賳鬲卮乇 卮丿',
-      recentlyUpdated: '丕禺蹖乇丕 亘賴 乇賵夭 卮丿賴 丕爻鬲',
-      mostPopular: '賲丨亘賵亘 鬲乇蹖賳',
-      newlyReleased: '鬲丕夭賴 賲賳鬲卮乇 卮丿賴',
-    },
-    and: '賵',
-    viewMore: '亘蹖卮鬲乇 亘亘蹖賳蹖丿',
-    moreFrom: '丕胤賱丕毓丕鬲 亘蹖卮鬲乇 丕夭 Marketplace',
-    pluginsResult: '賳鬲丕蹖噩 {{num}}',
-    noPluginFound: '賴蹖趩 丕賮夭賵賳賴 丕蹖 蹖丕賮鬲 賳卮丿',
-    sortBy: '卮賴乇 爻蹖丕賴',
-    difyMarketplace: '亘丕夭丕乇 丿蹖賮蹖',
-    empower: '鬲賵爻毓賴 賴賵卮 賲氐賳賵毓蹖 禺賵丿 乇丕 鬲賵丕賳賲賳丿 讴賳蹖丿',
-    discover: '讴卮賮',
-    verifiedTip: '鬲兀蹖蹖丿 卮丿賴 鬲賵爻胤 丿蹖賮蹖',
-    partnerTip: '鬲兀蹖蹖丿 卮丿賴 鬲賵爻胤 蹖讴 卮乇蹖讴 丿蹖賮蹖',
-  },
-  task: {
-    installing: '賳氐亘 倬賱丕诏蹖賳 賴丕蹖 {{installingLength}}貙 0 丕賳噩丕賲 卮丿.',
-    clearAll: '倬丕讴 讴乇丿賳 賴賲賴',
-    installedError: '丕賮夭賵賳賴 賴丕蹖 {{errorLength}} 賳氐亘 賳卮丿賳丿',
-    installError: '倬賱丕诏蹖賳 賴丕蹖 {{errorLength}} 賳氐亘 賳卮丿賳丿貙 亘乇丕蹖 賲卮丕賴丿賴 讴賱蹖讴 讴賳蹖丿',
-    installingWithSuccess: '賳氐亘 倬賱丕诏蹖賳 賴丕蹖 {{installingLength}}貙 {{successLength}} 賲賵賮賯蹖鬲 丌賲蹖夭 丕爻鬲.',
-    installingWithError: '賳氐亘 倬賱丕诏蹖賳 賴丕蹖 {{installingLength}}貙 {{successLength}} 亘丕 賲賵賮賯蹖鬲 賲賵丕噩賴 卮丿貙 {{errorLength}} 賳丕賲賵賮賯 亘賵丿',
-  },
-  searchTools: '丕亘夭丕乇賴丕蹖 噩爻鬲噩賵...',
-  findMoreInMarketplace: '丕胤賱丕毓丕鬲 亘蹖卮鬲乇 丿乇 Marketplace',
-  searchInMarketplace: '噩爻鬲噩賵 丿乇 Marketplace',
-  submitPlugin: '丕乇爻丕賱 丕賮夭賵賳賴',
-  searchCategories: '丿爻鬲賴 亘賳丿蹖 賴丕 乇丕 噩爻鬲噩賵 讴賳蹖丿',
-  fromMarketplace: '丕夭 亘丕夭丕乇',
-  installPlugin: '丕賮夭賵賳賴 乇丕 賳氐亘 讴賳蹖丿',
-  from: '丕夭',
-  install: '{{num}} 賳氐亘 賲蹖 卮賵丿',
-  endpointsEnabled: '{{num}} 賲噩賲賵毓賴 賳賯丕胤 倬丕蹖丕賳蹖 賮毓丕賱 卮丿賴 丕爻鬲',
-  searchPlugins: '噩爻鬲噩賵蹖 丕賮夭賵賳賴 賴丕',
-  installFrom: '賳氐亘 丕夭',
-  installAction: '賳氐亘',
-  allCategories: '賴賲賴 丿爻鬲賴 亘賳丿蹖 賴丕',
-  search: '噩爻鬲噩賵',
-  metadata: {
-    title: '倬賱丕诏蹖賳 賴丕',
-  },
-  difyVersionNotCompatible: '賳爻禺賴 賮毓賱蹖 丿蹖賮蹖 亘丕 丕蹖賳 倬賱丕诏蹖賳 爻丕夭诏丕乇 賳蹖爻鬲貙 賱胤賮丕賸 亘賴 賳爻禺賴 丨丿丕賯賱 賲賵乇丿 賳蹖丕夭 亘賴鈥屫辟堌藏必池з嗃� 讴賳蹖丿: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/fa-IR/time.ts b/i18n/fa-IR/time.ts
deleted file mode 100644
index 2e4ffea..0000000
--- a/i18n/fa-IR/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Sat: '卮賳亘賴',
-    Sun: '禺賵乇卮蹖丿',
-    Mon: '賲賵賳',
-    Wed: '趩賴丕乇卮賳亘賴',
-    Fri: '噩賲毓賴',
-    Tue: '爻賴 卮賳亘賴',
-    Thu: '倬賳噩鈥屫促嗀ㄙ�',
-  },
-  months: {
-    October: '丕讴鬲亘乇',
-    February: '賮賵乇蹖賴',
-    September: '爻倬鬲丕賲亘乇',
-    July: '噩賵賱丕蹖',
-    August: '丕賵鬲',
-    January: '跇丕賳賵蹖賴',
-    April: '丌賵乇蹖賱',
-    November: '賳賵丕賲亘乇',
-    March: '賲丕乇爻',
-    May: '賲賴',
-    June: '跇賵卅賳',
-    December: '丿爻丕賲亘乇',
-  },
-  operation: {
-    pickDate: '鬲丕乇蹖禺 乇丕 丕賳鬲禺丕亘 讴賳蹖丿',
-    ok: '禺賵亘',
-    now: '丨丕賱丕',
-    cancel: '賱睾賵',
-  },
-  title: {
-    pickTime: '夭賲丕賳 丕賳鬲禺丕亘 讴賳蹖丿',
-  },
-  defaultPlaceholder: '夭賲丕賳蹖 乇丕 丕賳鬲禺丕亘 讴賳蹖丿...',
-}
-
-export default translation
diff --git a/i18n/fr-FR/education.ts b/i18n/fr-FR/education.ts
deleted file mode 100644
index 8dcb687..0000000
--- a/i18n/fr-FR/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    front: 'Vous 锚tes maintenant 茅ligible pour le statut V茅rifi茅 en 脡ducation. Veuillez entrer vos informations 茅ducatives ci-dessous pour compl茅ter le processus et recevoir un',
-    coupon: 'coupon exclusif 100%',
-    end: 'pour le Plan Professionnel Dify.',
-  },
-  form: {
-    schoolName: {
-      placeholder: 'Entrez le nom officiel et complet de votre 茅cole',
-      title: 'Le nom de votre 茅cole',
-    },
-    schoolRole: {
-      option: {
-        administrator: 'Administrateur scolaire',
-        student: '脡tudiant',
-        teacher: 'Professeur',
-      },
-      title: 'Votre r么le 脿 l\'茅cole',
-    },
-    terms: {
-      desc: {
-        and: 'et',
-        privacyPolicy: 'Politique de confidentialit茅',
-        termsOfService: 'Conditions d\'utilisation',
-        end: '. En soumettant :',
-        front: 'Vos informations et votre utilisation du statut 脡ducation V茅rifi茅e sont soumises 脿 notre',
-      },
-      option: {
-        age: 'Je confirme que j\'ai au moins 18 ans.',
-        inSchool: 'Je confirme que je suis inscrit ou employ茅 dans l\'institution indiqu茅e. Dify peut demander une preuve d\'inscription/employ茅. Si je falsifie mon 茅ligibilit茅, j\'accepte de payer tous les frais initialement annul茅s en fonction de mon statut 茅ducatif.',
-      },
-      title: 'Conditions et accords',
-    },
-  },
-  emailLabel: 'Votre email actuel',
-  learn: 'Apprenez comment faire v茅rifier votre 茅ducation',
-  currentSigned: 'ACTUELLEMENT CONNECT脡 EN TANT QUE',
-  successTitle: 'Vous avez obtenu une 茅ducation Dify v茅rifi茅e.',
-  successContent: 'Nous avons 茅mis un coupon de r茅duction de 100 % pour le plan Dify Professionnel sur votre compte. Le coupon est valable pendant un an, veuillez l\'utiliser dans la p茅riode de validit茅.',
-  rejectTitle: 'Votre v茅rification 茅ducative Dify a 茅t茅 rejet茅e.',
-  submit: 'Soumettre',
-  submitError: 'L\'envoi du formulaire a 茅chou茅. Veuillez r茅essayer plus tard.',
-  toVerified: 'Faire v茅rifier l\'茅ducation',
-  rejectContent: 'Malheureusement, vous n\'锚tes pas 茅ligible au statut 脡ducation V茅rifi茅 et ne pouvez donc pas recevoir le coupon exclusif de 100 % pour le Plan Professionnel Dify si vous utilisez cette adresse e-mail.',
-}
-
-export default translation
diff --git a/i18n/fr-FR/plugin-tags.ts b/i18n/fr-FR/plugin-tags.ts
deleted file mode 100644
index 492fd6c..0000000
--- a/i18n/fr-FR/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    news: 'Nouvelles',
-    design: 'Concevoir',
-    videos: 'Vid茅os',
-    agent: 'Agent',
-    finance: 'Finance',
-    entertainment: 'Divertissement',
-    travel: 'Voyager',
-    productivity: 'Productivit茅',
-    search: 'Rechercher',
-    education: '脡ducation',
-    business: 'Affaire',
-    weather: 'Temps',
-    image: 'Image',
-    social: 'Social',
-    medical: 'M茅dical',
-    other: 'Autre',
-    utilities: 'Utilitaires',
-  },
-  searchTags: 'Mots-cl茅s de recherche',
-  allTags: 'Tous les mots-cl茅s',
-}
-
-export default translation
diff --git a/i18n/fr-FR/plugin.ts b/i18n/fr-FR/plugin.ts
deleted file mode 100644
index 04269e7..0000000
--- a/i18n/fr-FR/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    extensions: 'Extensions',
-    agents: 'Strat茅gies des agents',
-    models: 'Mod猫le',
-    tools: 'Outils',
-    bundles: 'Paquets',
-    all: 'Tout',
-  },
-  categorySingle: {
-    extension: 'Extension',
-    tool: 'Outil',
-    model: 'Mod猫le',
-    agent: 'Strat茅gie d鈥檃gent',
-    bundle: 'Paquet',
-  },
-  list: {
-    source: {
-      github: 'Installer 脿 partir de GitHub',
-      local: 'Installer 脿 partir d鈥檜n fichier de package local',
-      marketplace: 'Installer 脿 partir de Marketplace',
-    },
-    notFound: 'Aucun plugin trouv茅',
-    noInstalled: 'Aucun plugin install茅',
-  },
-  source: {
-    local: 'Fichier de package local',
-    github: 'Lien avec GitHub',
-    marketplace: 'March茅',
-  },
-  detailPanel: {
-    categoryTip: {
-      debugging: 'Plugin de d茅bogage',
-      local: 'Plugin local',
-      github: 'Install茅 脿 partir de Github',
-      marketplace: 'Install茅 脿 partir de Marketplace',
-    },
-    operation: {
-      viewDetail: 'Voir les d茅tails',
-      info: 'Informations sur le plugin',
-      checkUpdate: 'V茅rifier la mise 脿 jour',
-      update: 'Mettre 脿 jour',
-      install: 'Installer',
-      remove: 'Enlever',
-      detail: 'D茅tails',
-    },
-    toolSelector: {
-      uninstalledLink: 'G茅rer dans les plugins',
-      title: 'Ajouter un outil',
-      uninstalledContent: 'Ce plugin est install茅 脿 partir du r茅f茅rentiel local/GitHub. Veuillez utiliser apr猫s l鈥檌nstallation.',
-      unsupportedTitle: 'Action non soutenue',
-      descriptionLabel: 'Description de l鈥檕util',
-      placeholder: 'S茅lectionnez un outil...',
-      params: 'CONFIGURATION DE RAISONNEMENT',
-      unsupportedContent: 'La version du plugin install茅e ne fournit pas cette action.',
-      auto: 'Automatique',
-      descriptionPlaceholder: 'Br猫ve description de l鈥檕bjectif de l鈥檕util, par exemple, obtenir la temp茅rature d鈥檜n endroit sp茅cifique.',
-      unsupportedContent2: 'Cliquez pour changer de version.',
-      uninstalledTitle: 'Outil non install茅',
-      empty: 'Cliquez sur le bouton 芦 + 禄 pour ajouter des outils. Vous pouvez ajouter plusieurs outils.',
-      toolLabel: 'Outil',
-      settings: 'PARAM脠TRES UTILISATEUR',
-      paramsTip2: 'Lorsque 芦 Automatique 禄 est d茅sactiv茅, la valeur par d茅faut est utilis茅e.',
-      paramsTip1: 'Contr么le les param猫tres d鈥檌nf茅rence LLM.',
-    },
-    modelNum: '{{num}} MOD脠LES INCLUS',
-    endpointDeleteTip: 'Supprimer le point de terminaison',
-    endpoints: 'Terminaison',
-    endpointsDocLink: 'Voir le document',
-    switchVersion: 'Version du commutateur',
-    strategyNum: '{{num}} {{strat茅gie}} INCLUS',
-    configureTool: 'Configurer l鈥檕util',
-    endpointDeleteContent: 'Souhaitez-vous supprimer {{name}} ?',
-    disabled: 'Handicap茅',
-    endpointsTip: 'Ce plug-in fournit des fonctionnalit茅s sp茅cifiques via des points de terminaison, et vous pouvez configurer plusieurs ensembles de points de terminaison pour l鈥檈space de travail actuel.',
-    configureModel: 'Configurer le mod猫le',
-    configureApp: 'Configurer l鈥檃pplication',
-    endpointsEmpty: 'Cliquez sur le bouton 芦 + 禄 pour ajouter un point de terminaison',
-    actionNum: '{{num}} {{action}} INCLUS',
-    endpointDisableContent: 'Souhaitez-vous d茅sactiver {{name}} ?',
-    endpointDisableTip: 'D茅sactiver le point de terminaison',
-    endpointModalTitle: 'Configurer le point de terminaison',
-    serviceOk: 'Service OK',
-    endpointModalDesc: 'Une fois configur茅, les fonctionnalit茅s fournies par le plugin via les points de terminaison de l鈥橝PI peuvent 锚tre utilis茅es.',
-  },
-  debugInfo: {
-    title: 'D茅bogage',
-    viewDocs: 'Voir la documentation',
-  },
-  privilege: {
-    whoCanInstall: 'Qui peut installer et g茅rer les plugins ?',
-    admins: 'Administrateurs',
-    noone: 'Personne',
-    title: 'Pr茅f茅rences du plugin',
-    everyone: 'Tout le monde',
-    whoCanDebug: 'Qui peut d茅boguer les plugins ?',
-  },
-  pluginInfoModal: {
-    release: 'Lib茅rer',
-    title: 'Informations sur le plugin',
-    packageName: 'Colis',
-    repository: 'D茅p么t',
-  },
-  action: {
-    checkForUpdates: 'Rechercher des mises 脿 jour',
-    pluginInfo: 'Informations sur le plugin',
-    delete: 'Supprimer le plugin',
-    deleteContentLeft: 'Souhaitez-vous supprimer',
-    deleteContentRight: 'Plug-in ?',
-    usedInApps: 'Ce plugin est utilis茅 dans les applications {{num}}.',
-  },
-  installModal: {
-    labels: {
-      package: 'Colis',
-      version: 'Version',
-      repository: 'D茅p么t',
-    },
-    installedSuccessfullyDesc: 'Le plugin a 茅t茅 install茅 avec succ猫s.',
-    uploadingPackage: 'T茅l茅chargement de {{packageName}}...',
-    readyToInstallPackage: 'Sur le point d鈥檌nstaller le plugin suivant',
-    back: 'Pr茅c茅dent',
-    fromTrustSource: 'Assurez-vous de n鈥檌nstaller que des plugins provenant d鈥檜ne <trustSource>source fiable</trustSource>.',
-    close: 'Fermer',
-    installing: 'Installation...',
-    pluginLoadErrorDesc: 'Ce plugin ne sera pas install茅',
-    cancel: 'Annuler',
-    installFailed: '脡chec de l鈥檌nstallation',
-    readyToInstallPackages: 'Sur le point d鈥檌nstaller les plugins {{num}} suivants',
-    install: 'Installer',
-    uploadFailed: '脡chec du t茅l茅chargement',
-    installComplete: 'Installation termin茅e',
-    pluginLoadError: 'Erreur de chargement du plugin',
-    dropPluginToInstall: 'D茅posez le package de plugin ici pour l鈥檌nstaller',
-    readyToInstall: 'Sur le point d鈥檌nstaller le plugin suivant',
-    installedSuccessfully: 'Installation r茅ussie',
-    next: 'Prochain',
-    installPlugin: 'Installer le plugin',
-    installFailedDesc: 'L鈥檌nstallation du plug-in a 茅chou茅.',
-  },
-  installFromGitHub: {
-    installFailed: '脡chec de l鈥檌nstallation',
-    installPlugin: 'Installer le plugin depuis GitHub',
-    gitHubRepo: 'R茅f茅rentiel GitHub',
-    selectPackage: 'S茅lectionnez le forfait',
-    selectVersion: 'S茅lectionner la version',
-    uploadFailed: '脡chec du t茅l茅chargement',
-    installNote: 'Assurez-vous de n鈥檌nstaller que des plugins provenant d鈥檜ne source fiable.',
-    selectVersionPlaceholder: 'Veuillez s茅lectionner une version',
-    installedSuccessfully: 'Installation r茅ussie',
-    updatePlugin: 'Mettre 脿 jour le plugin 脿 partir de GitHub',
-    selectPackagePlaceholder: 'Veuillez s茅lectionner un forfait',
-  },
-  upgrade: {
-    upgrading: 'Installation...',
-    usedInApps: 'Utilis茅 dans les applications {{num}}',
-    close: 'Fermer',
-    description: 'Sur le point d鈥檌nstaller le plugin suivant',
-    upgrade: 'Installer',
-    title: 'Installer le plugin',
-    successfulTitle: 'Installation r茅ussie',
-  },
-  error: {
-    noReleasesFound: 'Aucune version n鈥檃 茅t茅 trouv茅e. V茅rifiez le r茅f茅rentiel GitHub ou l鈥橴RL d鈥檈ntr茅e.',
-    inValidGitHubUrl: 'URL GitHub non valide. Entrez une URL valide au format : https://github.com/owner/repo',
-    fetchReleasesError: 'Impossible de r茅cup茅rer les versions. Veuillez r茅essayer plus tard.',
-  },
-  marketplace: {
-    sortOption: {
-      firstReleased: 'Premi猫re sortie',
-      mostPopular: 'Les plus populaires',
-      recentlyUpdated: 'R茅cemment mis 脿 jour',
-      newlyReleased: 'Nouvellement publi茅',
-    },
-    noPluginFound: 'Aucun plugin trouv茅',
-    moreFrom: 'Plus de Marketplace',
-    and: 'et',
-    viewMore: 'Voir plus',
-    pluginsResult: '{{num}} r茅sultats',
-    discover: 'D茅couvrir',
-    difyMarketplace: 'March茅 Dify',
-    empower: 'Renforcez le d茅veloppement de votre IA',
-    sortBy: 'Ville noire',
-    partnerTip: 'V茅rifi茅 par un partenaire Dify',
-    verifiedTip: 'V茅rifi茅 par Dify',
-  },
-  task: {
-    installError: '{{errorLength}} les plugins n鈥檕nt pas pu 锚tre install茅s, cliquez pour voir',
-    installingWithSuccess: 'Installation des plugins {{installingLength}}, succ猫s de {{successLength}}.',
-    installingWithError: 'Installation des plugins {{installingLength}}, succ猫s de {{successLength}}, 茅chec de {{errorLength}}',
-    installedError: '{{errorLength}} les plugins n鈥檕nt pas pu 锚tre install茅s',
-    clearAll: 'Effacer tout',
-    installing: 'Installation des plugins {{installingLength}}, 0 fait.',
-  },
-  search: 'Rechercher',
-  submitPlugin: 'Soumettre le plugin',
-  installAction: 'Installer',
-  from: 'De',
-  searchCategories: 'Cat茅gories de recherche',
-  searchPlugins: 'Rechercher des plugins',
-  fromMarketplace: '脌 partir de Marketplace',
-  findMoreInMarketplace: 'En savoir plus sur Marketplace',
-  install: '{{num}} s鈥檌nstalle',
-  installFrom: 'INSTALLER 脌 PARTIR DE',
-  searchInMarketplace: 'Rechercher sur Marketplace',
-  allCategories: 'Toutes les cat茅gories',
-  endpointsEnabled: '{{num}} ensembles de points de terminaison activ茅s',
-  searchTools: 'Outils de recherche...',
-  installPlugin: 'Installer le plugin',
-  metadata: {
-    title: 'Plugins',
-  },
-  difyVersionNotCompatible: 'La version actuelle de Dify n\'est pas compatible avec ce plugin, veuillez mettre 脿 niveau vers la version minimale requise : {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/fr-FR/time.ts b/i18n/fr-FR/time.ts
deleted file mode 100644
index e05e6dc..0000000
--- a/i18n/fr-FR/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Sat: 'Sat',
-    Fri: 'Libre',
-    Wed: 'Mercredi',
-    Mon: 'Mon',
-    Thu: 'Jeudi',
-    Tue: 'Mardi',
-    Sun: 'Soleil',
-  },
-  months: {
-    October: 'octobre',
-    July: 'Juillet',
-    June: 'Juin',
-    December: 'D茅cembre',
-    November: 'Novembre',
-    April: 'Avril',
-    September: 'Septembre',
-    February: 'F茅vrier',
-    May: 'Mai',
-    January: 'Janvier',
-    August: 'ao没t',
-    March: 'Mars',
-  },
-  operation: {
-    now: 'Maintenant',
-    pickDate: 'Choisir une date',
-    cancel: 'Annuler',
-    ok: 'D\'accord',
-  },
-  title: {
-    pickTime: 'Choisir le temps',
-  },
-  defaultPlaceholder: 'Choisissez un moment...',
-}
-
-export default translation
diff --git a/i18n/hi-IN/education.ts b/i18n/hi-IN/education.ts
deleted file mode 100644
index 0577fa1..0000000
--- a/i18n/hi-IN/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: '啶掂た啶多啶� 100% 啶曕啶え',
-    front: '啶嗋お 啶呧が 啶多た啶曕啶粪ぞ 啶膏い啷嵿く啶距お啶苦い 啶膏啶ムた啶むた 啶曕 啶侧た啶� 啶啶椸啶� 啶灌啶傕イ 啶曕啶く啶� 啶ㄠ啶氞 啶呧お啶ㄠ 啶多た啶曕啶粪ぞ 啶曕 啶溹ぞ啶ㄠ啶距ぐ啷� 啶啶班う啶距え 啶曕ぐ啷囙 啶むぞ啶曕た 啶啶班啷嵿ぐ啶苦く啶� 啶曕 啶啶班ぞ 啶曕た啶ぞ 啶溹ぞ 啶膏啷� 啶斷ぐ 啶忇 啶啶班ぞ啶啶� 啶灌 啶膏啷�',
-    end: 'Dify 啶啶班啶啶多え啶� 啶啶溹え啶� 啶曕 啶侧た啶忇イ',
-  },
-  form: {
-    schoolName: {
-      placeholder: '啶呧お啶ㄠ 啶膏啶曕啶� 啶曕ぞ 啶嗋ぇ啶苦啶距ぐ啶苦, 啶た啶ㄠぞ 啶膏啶曕啶粪た啶啶� 啶ㄠぞ啶� 啶︵ぐ啷嵿 啶曕ぐ啷囙',
-      title: '啶嗋お啶曕 啶膏啶曕啶� 啶曕ぞ 啶ㄠぞ啶�',
-    },
-    schoolRole: {
-      option: {
-        administrator: '啶膏啶曕啶� 啶啶班ざ啶距じ啶�',
-        student: '啶涏ぞ啶む啶�',
-        teacher: '啶多た啶曕啶粪',
-      },
-      title: '啶嗋お啶曕 啶膏啶曕啶� 啶曕 啶啶た啶曕ぞ',
-    },
-    terms: {
-      desc: {
-        and: '啶斷ぐ',
-        termsOfService: '啶膏啶掂ぞ啶撪 啶曕 啶多ぐ啷嵿い啷囙',
-        privacyPolicy: '啶椸啶え啷�啶い啶� 啶ㄠ啶むた',
-        end: '. 啶啶班じ啷嵿い啷佮い 啶曕ぐ啶曕:',
-        front: '啶嗋お啶曕 啶溹ぞ啶ㄠ啶距ぐ啷� 啶斷ぐ 啶多た啶曕啶粪ぞ 啶膏い啷嵿く啶距お啶苦い 啶膏啶ムた啶むた 啶曕ぞ 啶夃お啶啶� 啶灌ぎ啶距ぐ啷� 啶多ぐ啷嵿い啷嬥 啶曕 啶呧ぇ啷�啶� 啶灌啷�',
-      },
-      option: {
-        age: '啶啶� 啶啶粪啶熰た 啶曕ぐ啶むぞ 啶灌啶� 啶曕た 啶啶� 啶曕ぎ 啶膏 啶曕ぎ 18 啶膏ぞ啶� 啶曕ぞ 啶灌啶�',
-        inSchool: '啶啶� 啶啶粪啶熰た 啶曕ぐ啶むぞ 啶灌啶� 啶曕た 啶啶� 啶︵ 啶椸 啶膏啶膏啶ムぞ啶� 啶啶� 啶ㄠぞ啶ぞ啶傕啶苦い 啶ぞ 啶ㄠた啶啶曕啶� 啶灌啶傕イ Dify 啶ㄠぞ啶ぞ啶傕啶�/啶ㄠた啶啶曕啶むた 啶曕ぞ 啶啶班ぎ啶距ぃ 啶ぞ啶傕 啶膏啶むぞ 啶灌啷� 啶う啶� 啶啶� 啶呧お啶ㄠ 啶ぞ啶む啶班い啶� 啶曕ぞ 啶椸げ啶� 啶掂ぐ啷嵿ぃ啶� 啶曕ぐ啶むぞ 啶灌啶�, 啶む 啶啶� 啶膏す啶い 啶灌啶� 啶曕た 啶啶� 啶呧お啶ㄠ 啶多た啶曕啶粪ぞ 啶膏啶ムた啶むた 啶曕 啶嗋ぇ啶距ぐ 啶ぐ 啶曕た啶膏 啶 啶多啶侧啶� 啶曕ぞ 啶啶椸い啶距え 啶曕ぐ啷傕 啶溹 啶啶班ぞ啶班啶� 啶啶� 啶ぞ啶� 啶曕た啶ぞ 啶椸く啶� 啶ムぞ啷�',
-      },
-      title: '啶ㄠた啶ぎ 啶斷ぐ 啶多ぐ啷嵿い啷囙',
-    },
-  },
-  submitError: '啶啶班啶� 啶溹ぎ啶� 啶曕ぐ啶ㄠ 啶啶� 啶掂た啶げ啶むぞ 啶灌啶堗イ 啶曕啶く啶� 啶ぞ啶� 啶啶� 啶啶ㄠ 啶啶班く啶距じ 啶曕ぐ啷囙啷�',
-  currentSigned: '啶掂ぐ啷嵿い啶ぞ啶� 啶啶� 啶膏ぞ啶囙え 啶囙え 啶曕た啶ぞ 啶椸く啶� 啶灌 啶曕 啶班啶� 啶啶�',
-  learn: '啶多た啶曕啶粪ぞ 啶曕 啶啶班ぎ啶距ぃ啶苦い 啶曕ぐ啶距え啷� 啶曕ぞ 啶むぐ啷�啶曕ぞ 啶膏啶栢啶�',
-  toVerified: '啶多た啶曕啶粪ぞ 啶曕 啶啶粪啶熰た 啶曕ぐ啶距啶�',
-  emailLabel: '啶嗋お啶曕ぞ 啶掂ぐ啷嵿い啶ぞ啶� 啶堗ぎ啷囙げ',
-  submit: '啶膏が啶た啶� 啶曕ぐ啷囙',
-  rejectTitle: '啶嗋お啶曕 啶∴た啶ぞ啶� 啶多啶曕啶粪ぃ啶苦 啶膏い啷嵿く啶距お啶� 啶曕 啶呧じ啷嵿さ啷�啶曕啶� 啶曕ぐ 啶︵た啶ぞ 啶椸く啶� 啶灌',
-  successTitle: '啶嗋お啶曕 啶∴た啶ぞ啶� 啶多た啶曕啶粪ぞ 啶曕 啶膏い啷嵿く啶距お啶苦い 啶曕た啶ぞ 啶椸く啶� 啶灌',
-  successContent: '啶灌ぎ啶ㄠ 啶嗋お啶曕 啶栢ぞ啶む 啶曕 啶侧た啶� Dify 啶啶班啶啶多え啶� 啶啶溹え啶� 啶曕 啶侧た啶� 100% 啶涏啶� 啶曕啶え 啶溹ぞ啶班 啶曕た啶ぞ 啶灌啷� 啶す 啶曕啶え 啶忇 啶掂ぐ啷嵿し 啶曕 啶侧た啶� 啶ぞ啶ㄠ啶� 啶灌, 啶曕啶く啶� 啶囙じ啷� 啶ぞ啶ㄠ啶い啶� 啶曕 啶呧さ啶оた 啶曕 啶啶むぐ 啶夃お啶啶� 啶曕ぐ啷囙啷�',
-  rejectContent: '啶︵啶班啶ぞ啶椸啶さ啶�, 啶嗋お 啶多た啶曕啶粪ぞ 啶膏い啷嵿く啶距お啶苦い 啶膏啶ムた啶むた 啶曕 啶侧た啶� 啶啶椸啶� 啶ㄠす啷�啶� 啶灌啶� 啶斷ぐ 啶囙じ啶侧た啶� 啶う啶� 啶嗋お 啶囙じ 啶堗ぎ啷囙げ 啶い啷� 啶曕ぞ 啶夃お啶啶� 啶曕ぐ啶む 啶灌啶�, 啶む 啶嗋お 啶∴た啶ぞ啶� 啶啶班啶啶多え啶� 啶啶溹え啶� 啶曕 啶侧た啶� 啶掂た啶多啶� 100% 啶曕啶え 啶啶班ぞ啶啶� 啶ㄠす啷�啶� 啶曕ぐ 啶膏啶む啷�',
-}
-
-export default translation
diff --git a/i18n/hi-IN/plugin-tags.ts b/i18n/hi-IN/plugin-tags.ts
deleted file mode 100644
index 8ff3949..0000000
--- a/i18n/hi-IN/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    social: '啶膏ぞ啶ぞ啶溹た啶�',
-    business: '啶掂啶さ啶膏ぞ啶�',
-    agent: '啶忇啷囙啶�',
-    design: '啶∴た啶溹ぜ啶距啶�',
-    education: '啶多た啶曕啶粪ぞ',
-    news: '啶膏ぎ啶距啶距ぐ',
-    productivity: '啶夃い啷嵿お啶距う啶曕い啶�',
-    weather: '啶啶膏ぎ',
-    utilities: '啶啶熰た啶侧た啶熰啶�',
-    image: '啶涏さ啶�',
-    search: '啶栢啶�',
-    videos: '啶掂啶∴た啶',
-    travel: '啶ぞ啶む啶班ぞ',
-    entertainment: '啶え啷嬥ぐ啶傕啶�',
-    other: '啶呧え啷嵿く',
-    medical: '啶氞た啶曕た啶む啶膏ぞ',
-    finance: '啶掂た啶む啶�',
-  },
-  searchTags: '啶栢啶� 啶熰啶�',
-  allTags: '啶膏き啷� 啶熰啶�',
-}
-
-export default translation
diff --git a/i18n/hi-IN/plugin.ts b/i18n/hi-IN/plugin.ts
deleted file mode 100644
index 075e9a1..0000000
--- a/i18n/hi-IN/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    models: '啶啶∴げ啷嵿じ',
-    all: '啶膏き啷�',
-    bundles: '啶啶∴げ',
-    extensions: '啶忇啷嵿じ啶熰啶傕ざ啶ㄠ啶�',
-    tools: '啶夃お啶曕ぐ啶�',
-    agents: '啶忇啷囙啶� 啶班ぃ啶ㄠ啶むた啶ぞ啶�',
-  },
-  categorySingle: {
-    extension: '啶掂た啶膏啶むぞ啶�',
-    bundle: '啶啶∴げ',
-    tool: '啶夃お啶曕ぐ啶�',
-    agent: '啶忇啷囙啶� 啶班ぃ啶ㄠ啶むた',
-    model: '啶啶∴げ',
-  },
-  list: {
-    source: {
-      marketplace: '啶ぞ啶班啶曕啶熰お啷嵿げ啷囙じ 啶膏 啶囙啶膏啶熰啶� 啶曕ぐ啷囙',
-      github: '啶椸た啶熰す啶� 啶膏 啶囙啶膏啶熰啶� 啶曕ぐ啷囙',
-      local: '啶膏啶ムぞ啶ㄠ啶� 啶啶曕啶� 啶ぜ啶距啶� 啶膏 啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-    },
-    notFound: '啶曕啶� 啶啶侧啶囙え 啶ㄠす啷�啶� 啶た啶侧ぞ',
-    noInstalled: '啶曕啶� 啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶ㄠす啷�啶� 啶灌啶�',
-  },
-  source: {
-    github: '啶椸た啶熰す啶�',
-    local: '啶膏啶ムぞ啶ㄠ啶� 啶啶曕啶� 啶ぜ啶距啶�',
-    marketplace: '啶ぞ啶溹ぞ啶�',
-  },
-  detailPanel: {
-    categoryTip: {
-      github: '啶椸た啶熰す啶� 啶膏 啶膏啶ムぞ啶た啶� 啶曕た啶ぞ 啶椸く啶�',
-      local: '啶膏啶ムぞ啶ㄠ啶� 啶啶侧啶囙え',
-      marketplace: '啶ぞ啶班啶曕啶熰お啷嵿げ啷囙じ 啶膏 啶膏啶ムぞ啶た啶� 啶曕た啶ぞ 啶椸く啶�',
-      debugging: '啶∴た啶啶苦啶� 啶啶侧啶囙え',
-    },
-    operation: {
-      info: '啶啶侧啶囙え 啶溹ぞ啶ㄠ啶距ぐ啷�',
-      remove: '啶灌啶距啶�',
-      checkUpdate: '啶呧お啶∴啶� 啶溹ぞ啶傕啷囙',
-      viewDetail: '啶掂た啶掂ぐ啶� 啶︵啶栢啶�',
-      install: '啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-      detail: '啶掂た啶掂ぐ啶�',
-      update: '啶呧お啶∴啶�',
-    },
-    toolSelector: {
-      uninstalledTitle: '啶夃お啶曕ぐ啶� 啶膏啶ムぞ啶た啶� 啶ㄠす啷�啶� 啶灌',
-      auto: '啶膏啶掂啶距げ啶苦い',
-      uninstalledLink: '啶啶侧啶囙え啷嵿じ 啶啶� 啶啶班が啶傕ぇ啶苦い 啶曕ぐ啷囙',
-      unsupportedTitle: '啶呧じ啶ぐ啷嵿ぅ啶苦い 啶曕啶班た啶ぞ',
-      unsupportedContent: '啶膏啶ムぞ啶た啶� 啶啶侧啶囙え 啶膏啶膏啶曕ぐ啶� 啶す 啶曕啶班た啶ぞ 啶啶班う啶距え 啶ㄠす啷�啶� 啶曕ぐ啶むぞ 啶灌啷�',
-      descriptionLabel: '啶夃お啶曕ぐ啶� 啶曕ぞ 啶掂た啶掂ぐ啶�',
-      unsupportedContent2: '啶膏啶膏啶曕ぐ啶� 啶う啶侧え啷� 啶曕 啶侧た啶� 啶曕啶侧た啶� 啶曕ぐ啷囙啷�',
-      placeholder: '啶忇 啶夃お啶曕ぐ啶� 啶氞啶ㄠ啶�...',
-      title: '啶夃お啶曕ぐ啶� 啶溹啶∴ぜ啷囙',
-      toolLabel: '啶夃お啶曕ぐ啶�',
-      params: '啶曕ぞ啶班ぃ 啶ㄠた啶班啶оぞ啶班ぃ 啶曕啶ㄠ啶ぜ啶苦',
-      empty: '啶夃お啶曕ぐ啶� 啶溹啶∴ぜ啶ㄠ 啶曕 啶侧た啶� \'+\' 啶啶� 啶ぐ 啶曕啶侧た啶� 啶曕ぐ啷囙啷� 啶嗋お 啶曕 啶夃お啶曕ぐ啶� 啶溹啶∴ぜ 啶膏啶む 啶灌啶傕イ',
-      settings: '啶夃お啶啶椸啶班啶むぞ 啶膏啶熰た啶傕啷嵿じ',
-      uninstalledContent: '啶す 啶啶侧啶囙え 啶膏啶ムぞ啶ㄠ啶�/啶椸た啶熰す啶� 啶班た啶啶溹た啶熰ぐ啷� 啶膏 啶膏啶ムぞ啶た啶� 啶曕た啶ぞ 啶椸く啶� 啶灌啷� 啶曕啶く啶� 啶膏啶ムぞ啶え啶� 啶曕 啶ぞ啶� 啶夃お啶啶� 啶曕ぐ啷囙啷�',
-      paramsTip2: '啶溹が \'啶膏啶掂啶距げ啶苦い\' 啶啶� 啶灌啶むぞ 啶灌, 啶む 啶∴た啶ぜ啷夃げ啷嵿 啶ぞ啶� 啶曕ぞ 啶夃お啶啶� 啶曕た啶ぞ 啶溹ぞ啶むぞ 啶灌啷�',
-      descriptionPlaceholder: '啶夃お啶曕ぐ啶� 啶曕 啶夃う啷嵿う啷囙ざ啷嵿く 啶曕ぞ 啶膏啶曕啶粪た啶啶� 啶掂た啶掂ぐ啶�, 啶溹啶膏, 啶曕た啶膏 啶掂た啶多啶� 啶膏啶ムぞ啶� 啶曕 啶侧た啶� 啶むぞ啶ぎ啶距え 啶啶班ぞ啶啶� 啶曕ぐ啶ㄠぞ啷�',
-      paramsTip1: '啶忇げ啶忇げ啶忇ぎ 啶呧え啷佮ぎ啶距え 啶啶班ぞ啶啶熰ぐ 啶曕 啶ㄠた啶啶む啶班た啶� 啶曕ぐ啶むぞ 啶灌啷�',
-    },
-    switchVersion: '啶膏啶掂た啶� 啶膏啶膏啶曕ぐ啶�',
-    endpointModalDesc: '啶忇 啶ぞ啶� 啶曕啶ㄠ啶ぜ啶苦啶� 啶灌啶ㄠ 啶曕 啶ぞ啶�, 啶啶侧啶囙え 啶︵啶掂ぞ啶班ぞ API 啶忇啶∴お啷夃啶傕啷嵿じ 啶曕 啶ぞ啶о啶ぎ 啶膏 啶啶班う啶距え 啶曕 啶椸 啶膏啶掂た啶оぞ啶撪 啶曕ぞ 啶夃お啶啶� 啶曕た啶ぞ 啶溹ぞ 啶膏啶むぞ 啶灌啷�',
-    actionNum: '{{num}} {{action}} 啶多ぞ啶た啶� 啶灌',
-    endpointDeleteTip: '啶忇啶∴お啷夃啶傕 啶灌啶距啶�',
-    endpointsDocLink: '啶︵じ啷嵿い啶距さ啷囙啶� 啶︵啶栢啶�',
-    disabled: '啶呧啷嵿し啶�',
-    modelNum: '{{num}} 啶啶∴げ 啶多ぞ啶た啶� 啶灌啶�',
-    endpoints: '啶忇啶∴お啷夃啶傕啷嵿じ',
-    endpointDeleteContent: '啶曕啶ぞ 啶嗋お {{name}} 啶曕 啶灌啶距え啶� 啶氞ぞ啶灌啶傕啷�?',
-    serviceOk: '啶膏啶掂ぞ 啶犩啶� 啶灌',
-    configureTool: '啶夃お啶曕ぐ啶� 啶曕啶ㄠ啶ぜ啶苦啶� 啶曕ぐ啷囙',
-    configureApp: '啶愢お 啶曕啶ㄠ啶ぜ啶苦啶� 啶曕ぐ啷囙',
-    endpointDisableContent: '啶曕啶ぞ 啶嗋お {{name}} 啶曕 啶呧啷嵿し啶� 啶曕ぐ啶ㄠぞ 啶氞ぞ啶灌啶傕啷�?',
-    endpointDisableTip: '啶忇啶∴お啷夃啶傕 啶呧啷嵿し啶� 啶曕ぐ啷囙',
-    configureModel: '啶啶∴げ 啶曕啶ㄠ啶ぜ啶苦啶� 啶曕ぐ啷囙',
-    endpointsEmpty: '啶忇 啶忇啶∴お啷夃啶傕 啶溹啶∴ぜ啶ㄠ 啶曕 啶侧た啶� \'+\' 啶啶� 啶ぐ 啶曕啶侧た啶� 啶曕ぐ啷囙',
-    endpointModalTitle: '啶忇啶∴お啷夃啶傕 啶膏啶熰啶� 啶曕ぐ啷囙',
-    strategyNum: '{{num}} {{啶班ぃ啶ㄠ啶むた}} 啶多ぞ啶た啶�',
-    endpointsTip: '啶す 啶啶侧啶囙え 啶忇啶∴お啷夃啶傕啷嵿じ 啶曕 啶ぞ啶о啶ぎ 啶膏 啶掂た啶多た啶粪啶� 啶曕ぞ啶班啶啷嵿し啶い啶距啶� 啶啶班う啶距え 啶曕ぐ啶むぞ 啶灌, 啶斷ぐ 啶嗋お 啶掂ぐ啷嵿い啶ぞ啶� 啶曕ぞ啶班啶啷嵿し啷囙い啷嵿ぐ 啶曕 啶侧た啶� 啶曕 啶忇啶∴お啷夃啶傕 啶膏啶� 啶曕啶ㄠ啶ぜ啶苦啶� 啶曕ぐ 啶膏啶む 啶灌啶傕イ',
-  },
-  debugInfo: {
-    viewDocs: '啶︵じ啷嵿い啶距さ啷囙啶� 啶︵啶栢啶�',
-    title: '啶∴た啶啶苦啶�',
-  },
-  privilege: {
-    whoCanDebug: '啶曕啶� 啶啶侧啶囙え啷嵿じ 啶曕 啶∴た啶 啶曕ぐ 啶膏啶むぞ 啶灌?',
-    whoCanInstall: '啶曕啶� 啶啶侧啶囙え啷嵿じ 啶曕 啶膏啶ムぞ啶た啶� 啶斷ぐ 啶啶班が啶傕ぇ啶苦い 啶曕ぐ 啶膏啶むぞ 啶灌?',
-    noone: '啶曕啶� 啶ㄠす啷�啶�',
-    everyone: '啶膏き啷�',
-    title: '啶啶侧啶囙え 啶啶班ぞ啶ムぎ啶苦啶むぞ啶忇',
-    admins: '啶掂啶さ啶膏啶ムぞ啶',
-  },
-  pluginInfoModal: {
-    repository: '啶啶∴ぞ啶�',
-    packageName: '啶啶曕啶�',
-    release: '啶班た啶灌ぞ啶�',
-    title: '啶啶侧啶囙え 啶溹ぞ啶ㄠ啶距ぐ啷�',
-  },
-  action: {
-    pluginInfo: '啶啶侧啶囙え 啶溹ぞ啶ㄠ啶距ぐ啷�',
-    checkForUpdates: '啶呧お啶∴啶� 啶曕 啶侧た啶� 啶溹ぞ啶傕啷囙',
-    deleteContentLeft: '啶曕啶ぞ 啶嗋お 啶灌啶距え啶� 啶氞ぞ啶灌啶傕啷�',
-    deleteContentRight: '啶啶侧啶囙え?',
-    usedInApps: '啶す 啶啶侧啶囙え {{num}} 啶愢お啷嵿じ 啶啶� 啶夃お啶啶� 啶曕た啶ぞ 啶溹ぞ 啶班す啶� 啶灌啷�',
-    delete: '啶啶侧啶囙え 啶灌啶距啶�',
-  },
-  installModal: {
-    labels: {
-      repository: '啶啶∴ぞ啶�',
-      package: '啶啶曕啶�',
-      version: '啶膏啶膏啶曕ぐ啶�',
-    },
-    uploadFailed: '啶呧お啶侧啶� 啶掂た啶げ',
-    next: '啶呧啶侧ぞ',
-    cancel: '啶班う啷嵿う 啶曕ぐ啷囙',
-    pluginLoadErrorDesc: '啶す 啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶ㄠす啷�啶� 啶曕た啶ぞ 啶溹ぞ啶忇啶�',
-    back: '啶啶涏',
-    installComplete: '啶膏啶ムぞ啶え啶� 啶啶班啶�',
-    installPlugin: '啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-    readyToInstallPackages: '啶ㄠた啶啶ㄠげ啶苦啶苦い {{num}} 啶啶侧啶囙え啷嵿じ 啶膏啶ムぞ啶た啶� 啶曕ぐ啶ㄠ 啶掂ぞ啶侧 啶灌啶�',
-    install: '啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-    close: '啶曕ぐ啷�啶�',
-    uploadingPackage: '{{packageName}} 啶呧お啶侧啶� 啶灌 啶班す啶� 啶灌...',
-    installing: '啶膏啶ムぞ啶た啶� 啶曕ぐ 啶班す啶� 啶灌...',
-    installedSuccessfully: '啶膏啶ムぞ啶え啶� 啶膏か啶�',
-    dropPluginToInstall: '啶す啶距 啶啶侧啶囙え 啶啶曕啶� 啶∴啶班啶� 啶曕ぐ啷囙 啶むぞ啶曕た 啶囙じ啷� 啶膏啶ムぞ啶た啶� 啶曕た啶ぞ 啶溹ぞ 啶膏啷�',
-    readyToInstallPackage: '啶ㄠた啶啶ㄠげ啶苦啶苦い 啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶曕ぐ啶ㄠ 啶掂ぞ啶侧 啶灌啶�',
-    pluginLoadError: '啶啶侧啶囙え 啶侧啶� 啶む啶班啶熰た',
-    installFailed: '啶膏啶ムぞ啶え啶� 啶掂た啶げ 啶灌 啶椸',
-    readyToInstall: '啶ㄠた啶啶ㄠげ啶苦啶苦い 啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶曕ぐ啶ㄠ 啶掂ぞ啶侧 啶灌啶�',
-    installFailedDesc: '啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶曕ぐ啶ㄠ 啶啶� 啶掂た啶げ 啶班す啶距イ',
-    installedSuccessfullyDesc: '啶啶侧啶囙え 啶膏か啶侧い啶距お啷傕ぐ啷嵿さ啶� 啶膏啶ムぞ啶た啶� 啶曕た啶ぞ 啶椸く啶� 啶灌啷�',
-    fromTrustSource: '啶曕啶く啶� 啶膏啶ㄠた啶多啶氞た啶� 啶曕ぐ啷囙 啶曕た 啶嗋お 啶曕啶掂げ 啶忇 <trustSource>啶掂た啶多啶掂じ啶ㄠ啶� 啶膏啶班啶�</trustSource> 啶膏 啶啶侧啶囙え啷嵿じ 啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙啷�',
-  },
-  installFromGitHub: {
-    gitHubRepo: '啶椸た啶熰す啶� 啶班た啶啶溹た啶熰ぐ啷�',
-    selectPackage: '啶啶曕啶� 啶氞啶ㄠ啶�',
-    selectVersionPlaceholder: '啶曕啶く啶� 啶忇 啶膏啶膏啶曕ぐ啶� 啶氞啶ㄠ啶�',
-    selectVersion: '啶膏啶膏啶曕ぐ啶� 啶氞啶ㄠ啶�',
-    updatePlugin: '啶椸た啶熰す啶� 啶膏 啶啶侧啶囙え 啶呧お啶∴啶� 啶曕ぐ啷囙',
-    installPlugin: 'GitHub 啶膏 啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-    selectPackagePlaceholder: '啶曕啶く啶� 啶忇 啶啶曕啶� 啶氞啶ㄠ啶�',
-    installNote: '啶曕啶く啶� 啶膏啶ㄠた啶多啶氞た啶� 啶曕ぐ啷囙 啶曕た 啶嗋お 啶曕啶掂げ 啶忇 啶掂た啶多啶掂じ啶ㄠ啶� 啶膏啶班啶� 啶膏 啶啶侧啶囙え啷嵿じ 啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙啷�',
-    installedSuccessfully: '啶膏啶ムぞ啶え啶� 啶膏か啶�',
-    installFailed: '啶膏啶ムぞ啶え啶� 啶掂た啶げ 啶灌 啶椸',
-    uploadFailed: '啶呧お啶侧啶� 啶掂た啶げ',
-  },
-  upgrade: {
-    title: '啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-    close: '啶曕ぐ啷�啶�',
-    upgrade: '啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-    upgrading: '啶膏啶ムぞ啶た啶� 啶曕ぐ 啶班す啶� 啶灌...',
-    successfulTitle: '啶膏啶ムぞ啶え啶� 啶膏か啶�',
-    description: '啶ㄠた啶啶ㄠげ啶苦啶苦い 啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶曕ぐ啶ㄠ 啶掂ぞ啶侧 啶灌啶�',
-    usedInApps: '{{num}} 啶愢お啷嵿じ 啶啶� 啶夃お啶啶� 啶曕た啶ぞ 啶椸く啶�',
-  },
-  error: {
-    inValidGitHubUrl: '啶呧ぎ啶距え啷嵿く GitHub URL啷� 啶曕啶く啶� 啶ㄠた啶啶ㄠげ啶苦啶苦い 啶啶班ぞ啶班啶� 啶啶� 啶忇 啶ぞ啶ㄠ啶� URL 啶︵ぐ啷嵿 啶曕ぐ啷囙: https://github.com/owner/repo',
-    noReleasesFound: '啶曕啶� 啶班た啶侧啶溹ぜ 啶ㄠす啷�啶� 啶た啶侧啷� 啶曕啶く啶� GitHub 啶班た啶啶溹た啶熰ぐ啷� 啶ぞ 啶囙え啶啶� URL 啶曕 啶溹ぞ啶傕 啶曕ぐ啷囙啷�',
-    fetchReleasesError: '啶班た啶侧啶溹ぜ 啶啶班ぞ啶啶� 啶曕ぐ啶ㄠ 啶啶� 啶呧じ啶ぐ啷嵿ぅ啷� 啶曕啶く啶� 啶ぞ啶� 啶啶� 啶た啶� 啶膏 啶啶班く啶距じ 啶曕ぐ啷囙啷�',
-  },
-  marketplace: {
-    sortOption: {
-      mostPopular: '啶膏が啶膏 啶侧啶曕お啷嵿ぐ啶苦く',
-      newlyReleased: '啶ㄠさ啷�啶ㄠい啶� 啶溹ぞ啶班 啶曕た啶ぞ 啶椸く啶�',
-      firstReleased: '啶す啶侧 啶ぞ啶� 啶溹ぞ啶班 啶曕た啶ぞ 啶椸く啶�',
-      recentlyUpdated: '啶灌ぞ啶� 啶灌 啶啶� 啶呧お啶∴啶� 啶曕た啶ぞ 啶椸く啶�',
-    },
-    pluginsResult: '{{num}} 啶ぐ啶苦ぃ啶距ぎ',
-    empower: '啶呧お啶ㄠ 啶忇啶� 啶掂た啶曕ぞ啶� 啶曕 啶膏ざ啶曕啶� 啶え啶距啶�',
-    noPluginFound: '啶曕啶� 啶啶侧啶囙え 啶ㄠす啷�啶� 啶た啶侧ぞ',
-    viewMore: '啶斷ぐ 啶︵啶栢啶�',
-    moreFrom: '啶ぞ啶班啶曕啶熰お啷嵿げ啷囙じ 啶膏 啶呧ぇ啶苦',
-    and: '啶斷ぐ',
-    difyMarketplace: '啶∴た啶ぞ啶� 啶ぞ啶班啶曕啶熰お啷嵿げ啷囙じ',
-    sortBy: '啶曕ぞ啶侧ぞ 啶多す啶�',
-    discover: '啶栢啶溹啶�',
-    partnerTip: 'Dify 啶ぞ啶椸啶︵ぞ啶� 啶︵啶掂ぞ啶班ぞ 啶膏い啷嵿く啶距お啶苦い',
-    verifiedTip: '啶∴た啶ぞ啶� 啶︵啶掂ぞ啶班ぞ 啶膏い啷嵿く啶距お啶苦い',
-  },
-  task: {
-    clearAll: '啶膏き啷� 啶膏ぞ啶� 啶曕ぐ啷囙',
-    installing: '{{installingLength}} 啶啶侧啶囙え啷嵿じ 啶膏啶ムぞ啶た啶� 啶曕ぐ 啶班す啷� 啶灌啶�, 0 啶啶班ぞ 啶灌啶嗋イ',
-    installError: '{{errorLength}} 啶啶侧啶囙え啷嵿じ 啶膏啶ムぞ啶た啶� 啶曕ぐ啶ㄠ 啶啶� 啶掂た啶げ 啶班す啷�, 啶︵啶栢え啷� 啶曕 啶侧た啶� 啶曕啶侧た啶� 啶曕ぐ啷囙',
-    installedError: '{{errorLength}} 啶啶侧啶囙え啷嵿じ 啶膏啶ムぞ啶た啶� 啶曕ぐ啶ㄠ 啶啶� 啶掂た啶げ 啶班す啷�',
-    installingWithError: '{{installingLength}} 啶啶侧啶囙え啷嵿じ 啶膏啶ムぞ啶た啶� 啶曕ぐ 啶班す啷� 啶灌啶�, {{successLength}} 啶膏か啶�, {{errorLength}} 啶掂た啶げ',
-    installingWithSuccess: '{{installingLength}} 啶啶侧啶囙え啷嵿じ 啶膏啶ムぞ啶た啶� 啶曕ぐ 啶班す啷� 啶灌啶�, {{successLength}} 啶膏か啶侧イ',
-  },
-  installFrom: '啶膏 啶囙啶膏啶熰啶� 啶曕ぐ啷囙',
-  fromMarketplace: '啶ぞ啶班啶曕啶熰お啷嵿げ啷囙じ 啶膏',
-  searchPlugins: '啶栢啶� 啶啶侧啶囙え啷嵿じ',
-  install: '{{num}} 啶囙啶膏啶熰啶侧啶多え',
-  submitPlugin: '啶啶侧啶囙え 啶膏が啶た啶� 啶曕ぐ啷囙',
-  allCategories: '啶膏き啷� 啶多啶班啶`た啶ぞ啶�',
-  search: '啶栢啶�',
-  searchTools: '啶栢啶� 啶夃お啶曕ぐ啶�...',
-  searchCategories: '啶栢啶� 啶多啶班啶`た啶ぞ啶�',
-  installAction: '啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-  searchInMarketplace: '啶ぞ啶班啶曕啶熰お啷嵿げ啷囙じ 啶啶� 啶栢啶溹啶�',
-  installPlugin: '啶啶侧啶囙え 啶膏啶ムぞ啶た啶� 啶曕ぐ啷囙',
-  findMoreInMarketplace: '啶ぞ啶班啶曕啶熰お啷嵿げ啷囙じ 啶啶� 啶斷ぐ 啶栢啶溹啶�',
-  endpointsEnabled: '{{num}} 啶忇啶∴お啷夃啶傕啷嵿じ 啶曕 啶膏啶� 啶膏啷嵿し啶� 啶曕た啶� 啶椸',
-  from: '啶膏',
-  metadata: {
-    title: '啶啶侧啶囙え啷嵿じ',
-  },
-  difyVersionNotCompatible: '啶掂ぐ啷嵿い啶ぞ啶� 啶∴た啶ぞ啶� 啶膏啶膏啶曕ぐ啶� 啶囙じ 啶啶侧啶囙え 啶曕 啶膏ぞ啶� 啶膏啶椸い 啶ㄠす啷�啶� 啶灌, 啶曕啶く啶� 啶嗋さ啶多啶 啶ㄠ啶啶ㄠい啶� 啶膏啶膏啶曕ぐ啶� 啶啶� 啶呧お啶椸啶班啶� 啶曕ぐ啷囙: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/hi-IN/time.ts b/i18n/hi-IN/time.ts
deleted file mode 100644
index 72f6cd5..0000000
--- a/i18n/hi-IN/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Fri: '啶多啶曕啶班さ啶距ぐ',
-    Tue: '啶啶椸げ啶掂ぞ啶�',
-    Sun: '啶膏啶班啶�',
-    Wed: '啶啶оさ啶距ぐ',
-    Sat: '啶多え啶苦さ啶距ぐ',
-    Mon: '啶啶�',
-    Thu: '啶椸啶班啶掂ぞ啶�',
-  },
-  months: {
-    July: '啶溹啶侧ぞ啶�',
-    August: '啶呧啶膏啶�',
-    September: '啶膏た啶む啶ぐ',
-    March: '啶ぞ啶班啶�',
-    May: '啶',
-    October: '啶呧啷嵿啷傕が啶�',
-    April: '啶呧お啷嵿ぐ啷堗げ',
-    December: '啶︵た啶膏啶ぐ',
-    February: '啶ぐ啶掂ぐ啷�',
-    June: '啶溹啶�',
-    November: '啶ㄠさ啶傕が啶�',
-    January: '啶溹え啶掂ぐ啷�',
-  },
-  operation: {
-    now: '啶呧が',
-    pickDate: '啶むぞ啶班啶栢ぜ 啶氞啶ㄠ啶�',
-    ok: '啶犩啶� 啶灌',
-    cancel: '啶班う啷嵿う 啶曕ぐ啷囙',
-  },
-  title: {
-    pickTime: '啶膏ぎ啶� 啶氞啶ㄠ啶�',
-  },
-  defaultPlaceholder: '啶忇 啶膏ぎ啶� 啶氞啶ㄠ啶�...',
-}
-
-export default translation
diff --git a/i18n/it-IT/education.ts b/i18n/it-IT/education.ts
deleted file mode 100644
index 1abb222..0000000
--- a/i18n/it-IT/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: 'coupon esclusivo al 100%',
-    end: 'per il Piano Professionale Dify.',
-    front: 'Ora sei idoneo per lo stato di Educazione Verificata. Per favore, inserisci le tue informazioni educative qui sotto per completare il processo e ricevere un',
-  },
-  form: {
-    schoolName: {
-      title: 'Il Nome della tua Scuola',
-      placeholder: 'Inserisci il nome ufficiale e completo della tua scuola',
-    },
-    schoolRole: {
-      option: {
-        teacher: 'Insegnante',
-        student: 'Studente',
-        administrator: 'Amministratore scolastico',
-      },
-      title: 'Il tuo ruolo scolastico',
-    },
-    terms: {
-      desc: {
-        and: 'e',
-        privacyPolicy: 'Informativa sulla privacy',
-        end: '. Inviando:',
-        front: 'Le tue informazioni e l\'uso dello stato di Educazione Verificato sono soggetti a nostri',
-        termsOfService: 'Termini di servizio',
-      },
-      option: {
-        inSchool: 'Confermo di essere iscritto o impiegato presso l\'istituzione fornita. Dify pu貌 richiedere una prova di iscrizione/impegno. Se rappresento erroneamente la mia idoneit脿, accetto di pagare eventuali tasse inizialmente esonerate in base al mio stato di istruzione.',
-        age: 'Confermo di avere almeno 18 anni',
-      },
-      title: 'Termini e Accordi',
-    },
-  },
-  toVerified: 'Fai verificare la tua istruzione',
-  successTitle: 'Hai ottenuto l\'istruzione Dify verificata',
-  submitError: 'Invio del modulo non riuscito. Per favore riprova pi霉 tardi.',
-  submit: 'Invia',
-  currentSigned: 'ATTUALMENTE ACCEDUTO COME',
-  successContent: 'Abbiamo emesso un coupon sconto del 100% per il piano Dify Professionale sul tuo account. Il coupon 猫 valido per un anno, ti preghiamo di utilizzarlo entro il periodo di validit脿.',
-  learn: 'Scopri come far verificare la tua istruzione',
-  emailLabel: 'La tua email attuale',
-  rejectContent: 'Sfortunatamente, non sei idoneo per lo status di Educazione Verificata e quindi non puoi ricevere il coupon esclusivo del 100% per il Piano Professionale Dify se usi questo indirizzo email.',
-  rejectTitle: 'La tua verifica educativa Dify 猫 stata rifiutata.',
-}
-
-export default translation
diff --git a/i18n/it-IT/plugin-tags.ts b/i18n/it-IT/plugin-tags.ts
deleted file mode 100644
index 2732466..0000000
--- a/i18n/it-IT/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    design: 'Disegno',
-    education: 'Educazione',
-    search: 'Ricerca',
-    entertainment: 'Divertimento',
-    agent: 'Agente',
-    image: 'Immagine',
-    weather: 'Tempo',
-    business: 'Azienda',
-    news: 'Notizie',
-    other: 'Altro',
-    travel: 'Viaggio',
-    medical: 'Medico',
-    utilities: 'Utilit脿',
-    videos: 'Video',
-    productivity: 'Produttivit脿',
-    finance: 'Finanza',
-    social: 'Sociale',
-  },
-  searchTags: 'Cerca Tag',
-  allTags: 'Tutti i tag',
-}
-
-export default translation
diff --git a/i18n/it-IT/plugin.ts b/i18n/it-IT/plugin.ts
deleted file mode 100644
index 2832776..0000000
--- a/i18n/it-IT/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    extensions: 'Estensioni',
-    tools: 'Utensileria',
-    agents: 'Strategie degli agenti',
-    bundles: 'Pacchetti',
-    models: 'Modelli',
-    all: 'Tutto',
-  },
-  categorySingle: {
-    bundle: 'Fascio',
-    model: 'Modello',
-    agent: 'Strategia dell\'agente',
-    extension: 'Estensione',
-    tool: 'Strumento',
-  },
-  list: {
-    source: {
-      local: 'Installa dal file del pacchetto locale',
-      github: 'Installa da GitHub',
-      marketplace: 'Installa da Marketplace',
-    },
-    noInstalled: 'Nessun plug-in installato',
-    notFound: 'Nessun plugin trovato',
-  },
-  source: {
-    github: 'GitHub',
-    local: 'File del pacchetto locale',
-    marketplace: 'Mercato',
-  },
-  detailPanel: {
-    categoryTip: {
-      github: 'Installato da Github',
-      marketplace: 'Installato da Marketplace',
-      local: 'Plugin locale',
-      debugging: 'Plugin di debug',
-    },
-    operation: {
-      detail: 'Dettagli',
-      remove: 'Togliere',
-      update: 'Aggiornare',
-      install: 'Installare',
-      viewDetail: 'vedi dettagli',
-      checkUpdate: 'Controlla l\'aggiornamento',
-      info: 'Informazioni sul plugin',
-    },
-    toolSelector: {
-      paramsTip1: 'Controlla i parametri di inferenza LLM.',
-      descriptionPlaceholder: 'Breve descrizione dello scopo dell\'utensile, ad es. ottenere la temperatura per una posizione specifica.',
-      unsupportedTitle: 'Azione non supportata',
-      uninstalledTitle: 'Strumento non installato',
-      params: 'CONFIGURAZIONE DEL RAGIONAMENTO',
-      uninstalledContent: 'Questo plugin viene installato dal repository locale/GitHub. Si prega di utilizzare dopo l\'installazione.',
-      empty: 'Fare clic sul pulsante \'+\' per aggiungere strumenti. 脠 possibile aggiungere pi霉 strumenti.',
-      toolLabel: 'Strumento',
-      unsupportedContent2: 'Fare clic per cambiare versione.',
-      title: 'Aggiungi strumento',
-      settings: 'IMPOSTAZIONI UTENTE',
-      uninstalledLink: 'Gestisci nei plugin',
-      placeholder: 'Seleziona uno strumento...',
-      unsupportedContent: 'La versione del plug-in installata non fornisce questa azione.',
-      descriptionLabel: 'Descrizione dell\'utensile',
-      auto: 'Automatico',
-      paramsTip2: 'Quando \'Automatico\' 猫 disattivato, viene utilizzato il valore predefinito.',
-    },
-    modelNum: '{{num}} MODELLI INCLUSI',
-    endpointModalTitle: 'Endpoint di configurazione',
-    endpointsDocLink: 'Visualizza il documento',
-    endpointDisableTip: 'Disabilita endpoint',
-    switchVersion: 'Versione switch',
-    configureTool: 'Strumento di configurazione',
-    serviceOk: 'Servizio OK',
-    disabled: 'Disabile',
-    configureModel: 'Configura modello',
-    endpointModalDesc: 'Una volta configurate, 猫 possibile utilizzare le funzionalit脿 fornite dal plug-in tramite endpoint API.',
-    endpointDeleteContent: 'Vuoi rimuovere {{name}}?',
-    strategyNum: '{{num}} {{strategia}} INCLUSO',
-    endpoints: 'Endpoint',
-    configureApp: 'Configura l\'app',
-    endpointsTip: 'Questo plug-in fornisce funzionalit脿 specifiche tramite endpoint ed 猫 possibile configurare pi霉 set di endpoint per l\'area di lavoro corrente.',
-    endpointDisableContent: 'Vorresti disabilitare {{name}}?',
-    endpointDeleteTip: 'Rimuovi punto finale',
-    endpointsEmpty: 'Fare clic sul pulsante \'+\' per aggiungere un punto finale',
-    actionNum: '{{num}} {{azione}} INCLUSO',
-  },
-  debugInfo: {
-    title: 'Debug',
-    viewDocs: 'Visualizza documenti',
-  },
-  privilege: {
-    whoCanDebug: 'Chi pu貌 eseguire il debug dei plugin?',
-    admins: 'Amministratori',
-    title: 'Preferenze del plugin',
-    noone: 'Nessuno',
-    everyone: 'Ciascuno',
-    whoCanInstall: 'Chi pu貌 installare e gestire i plugin?',
-  },
-  pluginInfoModal: {
-    packageName: 'Pacco',
-    release: 'Rilascio',
-    repository: 'Deposito',
-    title: 'Informazioni sul plugin',
-  },
-  action: {
-    usedInApps: 'Questo plugin viene utilizzato nelle app {{num}}.',
-    delete: 'Rimuovi plugin',
-    pluginInfo: 'Informazioni sul plugin',
-    checkForUpdates: 'Controlla gli aggiornamenti',
-    deleteContentRight: 'plugin?',
-    deleteContentLeft: 'Vorresti rimuovere',
-  },
-  installModal: {
-    labels: {
-      version: 'Versione',
-      repository: 'Deposito',
-      package: 'Pacco',
-    },
-    next: 'Prossimo',
-    pluginLoadErrorDesc: 'Questo plugin non verr脿 installato',
-    installComplete: 'Installazione completata',
-    dropPluginToInstall: 'Rilascia qui il pacchetto del plug-in per installarlo',
-    installedSuccessfully: 'Installazione riuscita',
-    installedSuccessfullyDesc: 'Il plug-in 猫 stato installato correttamente.',
-    installPlugin: 'Installa il plugin',
-    fromTrustSource: 'Assicurati di installare i plug-in solo da una <trustSource>fonte attendibile</trustSource>.',
-    uploadFailed: 'Caricamento non riuscito',
-    uploadingPackage: 'Caricamento di {{packageName}}...',
-    pluginLoadError: 'Errore di caricamento del plugin',
-    cancel: 'Annulla',
-    readyToInstallPackage: 'Sto per installare il seguente plugin',
-    installFailed: 'Installazione non riuscita',
-    back: 'Indietro',
-    close: 'Chiudere',
-    installFailedDesc: 'Il plug-in 猫 stato installato non riuscito.',
-    readyToInstall: 'Sto per installare il seguente plugin',
-    installing: 'Installazione...',
-    install: 'Installare',
-    readyToInstallPackages: 'Sto per installare i seguenti plugin {{num}}',
-  },
-  installFromGitHub: {
-    installedSuccessfully: 'Installazione riuscita',
-    selectPackagePlaceholder: 'Seleziona un pacchetto',
-    installNote: 'Assicurati di installare i plug-in solo da una fonte attendibile.',
-    updatePlugin: 'Aggiorna il plugin da GitHub',
-    uploadFailed: 'Caricamento non riuscito',
-    gitHubRepo: 'Repository GitHub',
-    installPlugin: 'Installa il plugin da GitHub',
-    installFailed: 'Installazione non riuscita',
-    selectVersionPlaceholder: 'Seleziona una versione',
-    selectPackage: 'Seleziona il pacchetto',
-    selectVersion: 'Seleziona la versione',
-  },
-  upgrade: {
-    upgrade: 'Installare',
-    usedInApps: 'Utilizzato nelle app {{num}}',
-    title: 'Installa il plugin',
-    description: 'Sto per installare il seguente plugin',
-    upgrading: 'Installazione...',
-    successfulTitle: 'Installazione riuscita',
-    close: 'Chiudere',
-  },
-  error: {
-    fetchReleasesError: 'Impossibile recuperare le release. Riprova pi霉 tardi.',
-    noReleasesFound: 'Nessuna pubblicazione trovata. Controlla il repository GitHub o l\'URL di input.',
-    inValidGitHubUrl: 'URL GitHub non valido. Inserisci un URL valido nel formato: https://github.com/owner/repo',
-  },
-  marketplace: {
-    sortOption: {
-      recentlyUpdated: 'Aggiornato di recente',
-      firstReleased: 'Prima pubblicazione',
-      newlyReleased: 'Appena uscito',
-      mostPopular: 'I pi霉 popolari',
-    },
-    moreFrom: 'Altro da Marketplace',
-    difyMarketplace: 'Mercato Dify',
-    discover: 'Scoprire',
-    pluginsResult: '{{num}} risultati',
-    noPluginFound: 'Nessun plug-in trovato',
-    empower: 'Potenzia lo sviluppo dell\'intelligenza artificiale',
-    sortBy: 'Citt脿 nera',
-    and: 'e',
-    viewMore: 'Vedi di pi霉',
-    verifiedTip: 'Verificato da Dify',
-    partnerTip: 'Verificato da un partner Dify',
-  },
-  task: {
-    clearAll: 'Cancella tutto',
-    installError: 'Impossibile installare i plugin {{errorLength}}, clicca per visualizzare',
-    installing: 'Installazione dei plugin {{installingLength}}, 0 fatto.',
-    installedError: 'Impossibile installare i plugin di {{errorLength}}',
-    installingWithError: 'Installazione dei plugin {{installingLength}}, {{successLength}} successo, {{errorLength}} fallito',
-    installingWithSuccess: 'Installazione dei plugin {{installingLength}}, {{successLength}} successo.',
-  },
-  searchInMarketplace: 'Cerca nel Marketplace',
-  endpointsEnabled: '{{num}} set di endpoint abilitati',
-  from: 'Da',
-  installAction: 'Installare',
-  allCategories: 'Tutte le categorie',
-  fromMarketplace: 'Dal Marketplace',
-  searchTools: 'Strumenti di ricerca...',
-  searchCategories: 'Cerca Categorie',
-  install: '{{num}} installazioni',
-  findMoreInMarketplace: 'Scopri di pi霉 su Marketplace',
-  installPlugin: 'Installa il plugin',
-  submitPlugin: 'Invia plugin',
-  searchPlugins: 'Plugin di ricerca',
-  search: 'Ricerca',
-  installFrom: 'INSTALLA DA',
-  metadata: {
-    title: 'Plugin',
-  },
-  difyVersionNotCompatible: 'L\'attuale versione di Dify non 猫 compatibile con questo plugin, si prega di aggiornare alla versione minima richiesta: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/it-IT/time.ts b/i18n/it-IT/time.ts
deleted file mode 100644
index f330e8f..0000000
--- a/i18n/it-IT/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Tue: 'Marted矛',
-    Thu: 'Gioved矛',
-    Mon: 'Mon',
-    Fri: 'Venerd矛',
-    Sat: 'Sat',
-    Wed: 'Mercoled矛',
-    Sun: 'Sole',
-  },
-  months: {
-    February: 'Febbraio',
-    April: 'Aprile',
-    January: 'Gennaio',
-    December: 'Dicembre',
-    March: 'Marzo',
-    May: 'Maggio',
-    August: 'Agosto',
-    June: 'Giugno',
-    July: 'Luglio',
-    October: 'Ottobre',
-    September: 'Settembre',
-    November: 'Novembre',
-  },
-  operation: {
-    ok: 'OK',
-    now: 'Ora',
-    cancel: 'Annulla',
-    pickDate: 'Seleziona Data',
-  },
-  title: {
-    pickTime: 'Scegli Tempo',
-  },
-  defaultPlaceholder: 'Scegli un orario...',
-}
-
-export default translation
diff --git a/i18n/ja-JP/education.ts b/i18n/ja-JP/education.ts
deleted file mode 100644
index d51bac8..0000000
--- a/i18n/ja-JP/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerified: '鏁欒偛瑾嶈銈掑彇寰�',
-  toVerifiedTip: {
-    front: '鐝惧湪銆佹暀鑲茶獚瑷笺偣銉嗐兗銈裤偣銈掑彇寰椼仚銈嬭硣鏍笺亴銇傘倞銇俱仚銆備互涓嬨伀鏁欒偛鎯呭牨銈掑叆鍔涖仐銆佽獚瑷笺儣銉偦銈广倰瀹屼簡銇欍倠銇ㄣ�丏ify銉椼儹銉曘偋銉冦偡銉с儕銉儣銉┿兂銇�',
-    coupon: '50锛呭壊寮曘偗銉笺儩銉�',
-    end: '銈掑彈銇戝彇銈嬨亾銇ㄣ亴銇с亶銇俱仚銆�',
-  },
-  currentSigned: '鐝惧湪銉偘銈ゃ兂涓伄銈€偒銈︺兂銉堛伅',
-  form: {
-    schoolName: {
-      title: '瀛︽牎鍚�',
-      placeholder: '瀛︽牎銇寮忓悕绉帮紙鐪佺暐涓嶅彲锛夈倰鍏ュ姏銇椼仸銇忋仩銇曘亜銆�',
-    },
-    schoolRole: {
-      title: '瀛︽牎銇с伄褰瑰壊',
-      option: {
-        student: '瀛︾敓',
-        teacher: '鏁欏斧',
-        administrator: '瀛︽牎绠$悊鑰�',
-      },
-    },
-    terms: {
-      title: '鍒╃敤瑕忕磩銇ㄥ悓鎰忎簨闋�',
-      desc: {
-        front: '銇婂妲樸伄鎯呭牨銇娿倛銇� 鏁欒偛瑾嶈銈广儐銉笺偪銈� 銇埄鐢ㄣ伅銆佸綋绀俱伄 ',
-        and: '銇娿倛銇�',
-        end: '銇緭銇嗐倐銇仺銇椼伨銇欍�傞�佷俊銇欍倠銇撱仺銇т互涓嬨倰纰鸿獚銇椼伨銇欙細',
-        termsOfService: '鍒╃敤瑕忕磩',
-        privacyPolicy: '銉椼儵銈ゃ儛銈枫兗銉濄儶銈枫兗',
-      },
-      option: {
-        age: '18姝充互涓娿仹銇傘倠銇撱仺銈掔⒑瑾嶃仐銇俱仚銆�',
-        inSchool: '鎻愪緵銇椼仧鏁欒偛姗熼枹銇湪绫嶃伨銇熴伅鍕ゅ嫏銇椼仸銇勩倠 銇撱仺銈掔⒑瑾嶃仐銇俱仚銆侱ify銇湪绫�/闆囩敤瑷兼槑銇彁鍑恒倰姹傘倎銈嬪牬鍚堛亴銇傘倞銇俱仚銆備笉姝c仾鎯呭牨銈掔敵鍛娿仐銇熷牬鍚堛�佹暀鑲茶獚瑷笺伀鍩恒仴銇嶅厤闄ゃ仌銈屻仧璨荤敤銈掓敮鎵曘亞銇撱仺銇悓鎰忋仐銇俱仚銆�',
-      },
-    },
-  },
-  submit: '閫佷俊',
-  submitError: '銉曘偐銉笺儬銇�佷俊銇け鏁椼仐銇俱仐銇熴�傘仐銇般倝銇忋仐銇︺亱銈夊啀搴︺仈鎻愬嚭銇忋仩銇曘亜銆�',
-  learn: '鏁欒偛瑾嶈銇彇寰楁柟娉曘伅銇撱仭銈�',
-  successTitle: 'Dify鏁欒偛瑾嶈銈掑彇寰椼仐銇俱仐銇燂紒',
-  successContent: '銇婂妲樸伄銈€偒銈︺兂銉堛伀 Dify銉椼儹銉曘偋銉冦偡銉с儕銉儣銉┿兂銇�50%鍓插紩銈兗銉濄兂 銈掔櫤琛屻仐銇俱仐銇熴�傛湁鍔规湡闁撱伅 1骞撮枔 銇с仚銇仹銆佹湡闄愬唴銇仈鍒╃敤銇忋仩銇曘亜銆�',
-  rejectTitle: 'Dify鏁欒偛瑾嶈銇屾嫆鍚︺仌銈屻伨銇椼仧',
-  rejectContent: '鐢炽仐瑷炽仈銇栥亜銇俱仜銈撱亴銆併亾銇儭銉笺儷銈€儔銉偣銇с伅 鏁欒偛瑾嶈 銇硣鏍笺倰鍙栧緱銇с亶銇氥�丏ify銉椼儹銉曘偋銉冦偡銉с儕銉儣銉┿兂銇�50锛呭壊寮曘偗銉笺儩銉� 銈掑彈銇戝彇銈嬨亾銇ㄣ伅銇с亶銇俱仜銈撱��',
-  emailLabel: '鐝惧湪銇儭銉笺儷銈€儔銉偣',
-}
-
-export default translation
diff --git a/i18n/ja-JP/plugin-tags.ts b/i18n/ja-JP/plugin-tags.ts
deleted file mode 100644
index ace8c9b..0000000
--- a/i18n/ja-JP/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    utilities: '銉︺兗銉嗐偅銉儐銈�',
-    weather: '澶╂皸',
-    education: '鏁欒偛',
-    design: '銉囥偠銈ゃ兂',
-    videos: '銉撱儑銈�',
-    search: '妞滅储',
-    finance: '閲戣瀺',
-    productivity: '鐢熺敚鎬�',
-    image: '鐢诲儚',
-    entertainment: '銈ㄣ兂銈裤兗銉嗐偆銉炽儭銉炽儓',
-    medical: '鍖荤檪',
-    social: '绀句細',
-    news: '銉嬨儱銉笺偣',
-    other: '浠�',
-    agent: '銈ㄣ兗銈搞偋銉炽儓',
-    business: '銉撱偢銉嶃偣',
-    travel: '鏃呰',
-  },
-  searchTags: '妞滅储銈裤偘',
-  allTags: '銇欍伖銇︺伄銈裤偘',
-}
-
-export default translation
diff --git a/i18n/ja-JP/plugin.ts b/i18n/ja-JP/plugin.ts
deleted file mode 100644
index 6a27048..0000000
--- a/i18n/ja-JP/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    extensions: '鎷″嫉姗熻兘',
-    all: '銇欍伖銇�',
-    tools: '閬撳叿',
-    bundles: '銉愩兂銉夈儷',
-    agents: '銈ㄣ兗銈搞偋銉炽儓鎴︾暐',
-    models: '銉€儑銉�',
-  },
-  categorySingle: {
-    agent: '銈ㄣ兗銈搞偋銉炽儓鎴︾暐',
-    model: '銉€儑銉�',
-    bundle: '銉愩兂銉夈儷',
-    tool: '閬撳叿',
-    extension: '鎷″嫉',
-  },
-  list: {
-    source: {
-      local: '銉兗銈儷銉戙儍銈便兗銈搞儠銈°偆銉亱銈夈偆銉炽偣銉堛兗銉�',
-      github: 'GitHub銇嬨倝銈ゃ兂銈广儓銉笺儷銇欍倠',
-      marketplace: '銉炪兗銈便儍銉堛儣銉偆銈广亱銈夈偆銉炽偣銉堛兗銉�',
-    },
-    noInstalled: '銉椼儵銈般偆銉炽伅銈ゃ兂銈广儓銉笺儷銇曘倢銇︺亜銇俱仜銈�',
-    notFound: '銉椼儵銈般偆銉炽亴瑕嬨仱銇嬨倞銇俱仜銈�',
-  },
-  source: {
-    github: 'GitHub',
-    local: '銉兗銈儷銉戙儍銈便兗銈搞儠銈°偆銉�',
-    marketplace: '銉炪兗銈便儍銉堛儣銉偆銈�',
-  },
-  detailPanel: {
-    categoryTip: {
-      marketplace: '銉炪兗銈便儍銉堛儣銉偆銈广亱銈夈偆銉炽偣銉堛兗銉仌銈屻伨銇椼仧',
-      local: '銉兗銈儷銉椼儵銈般偆銉�',
-      debugging: '銉囥儛銉冦偘銉椼儵銈般偆銉�',
-      github: 'Github銇嬨倝銈ゃ兂銈广儓銉笺儷銇椼伨銇椼仧',
-    },
-    operation: {
-      info: '銉椼儵銈般偆銉虫儏鍫�',
-      install: '銈ゃ兂銈广儓銉笺儷',
-      viewDetail: '瑭崇窗銈掕銈�',
-      checkUpdate: '鏇存柊銈掔⒑瑾嶃仚銈�',
-      update: '鏇存柊',
-      detail: '瑭崇窗',
-      remove: '鍓婇櫎',
-    },
-    toolSelector: {
-      descriptionPlaceholder: '銉勩兗銉伄鐩殑銇啊鍗樸仾瑾槑銆佷緥銇堛伆銆佺壒瀹氥伄鍫存墍銇俯搴︺倰鍙栧緱銇欍倠銇撱仺銆�',
-      paramsTip2: '銆岃嚜鍕曘�嶃亴銈儠銇仺銇嶃�併儑銉曘偐銉儓鍊ゃ亴浣跨敤銇曘倢銇俱仚銆�',
-      settings: '銉︺兗銈躲兗瑷畾',
-      unsupportedContent2: '銉愩兗銈搞儳銉炽倰鍒囥倞鏇裤亪銈嬨伀銇偗銉儍銈仐銇︺亸銇犮仌銇勩��',
-      unsupportedContent: '銈ゃ兂銈广儓銉笺儷銇曘倢銇熴儣銉┿偘銈ゃ兂銇儛銉笺偢銉с兂銇�併亾銇偄銈偡銉с兂銈掓彁渚涖仐銇︺亜銇俱仜銈撱��',
-      title: '銉勩兗銉倰杩藉姞',
-      uninstalledContent: '銇撱伄銉椼儵銈般偆銉炽伅銉兗銈儷/GitHub銉儩銈搞儓銉亱銈夈偆銉炽偣銉堛兗銉仌銈屻伨銇欍�傘偆銉炽偣銉堛兗銉緦銇仈鍒╃敤銇忋仩銇曘亜銆�',
-      descriptionLabel: '銉勩兗銉伄瑾槑',
-      auto: '鑷嫊',
-      params: '鎺ㄨ珫瑷畾',
-      uninstalledLink: '銉椼儵銈般偆銉炽倰绠$悊銇欍倠',
-      placeholder: '銉勩兗銉倰閬告姙...',
-      uninstalledTitle: '銉勩兗銉亴銈ゃ兂銈广儓銉笺儷銇曘倢銇︺亜銇俱仜銈�',
-      empty: '銉勩兗銉倰杩藉姞銇欍倠銇伅銆�+銆嶃儨銈裤兂銈掋偗銉儍銈仐銇︺亸銇犮仌銇勩�傝鏁般伄銉勩兗銉倰杩藉姞銇с亶銇俱仚銆�',
-      paramsTip1: 'LLM鎺ㄨ珫銉戙儵銉°兗銈裤倰鍒跺尽銇椼伨銇欍��',
-      toolLabel: '閬撳叿',
-      unsupportedTitle: '銈点儩銉笺儓銇曘倢銇︺亜銇亜銈€偗銈枫儳銉�',
-    },
-    endpointDisableTip: '銈ㄣ兂銉夈儩銈ゃ兂銉堛倰鐒″姽銇仚銈�',
-    endpointModalDesc: '瑷畾銇屽畬浜嗐仚銈嬨仺銆丄PI銈ㄣ兂銉夈儩銈ゃ兂銉堛倰浠嬨仐銇︺儣銉┿偘銈ゃ兂銇屾彁渚涖仚銈嬫鑳姐倰浣跨敤銇с亶銇俱仚銆�',
-    endpointDisableContent: '{{name}}銈掔劇鍔广伀銇椼伨銇欍亱锛�',
-    endpointModalTitle: '銈ㄣ兂銉夈儩銈ゃ兂銉堛倰瑷畾銇欍倠',
-    endpointDeleteTip: '銈ㄣ兂銉夈儩銈ゃ兂銉堛倰鍓婇櫎',
-    modelNum: '{{num}} 銉€儑銉亴鍚伨銈屻仸銇勩伨銇�',
-    serviceOk: '銈点兗銉撱偣銇甯搞仹銇�',
-    disabled: '銈点兗銉撱偣銇劇鍔瑰寲銇曘倢銇︺亜銇俱仚',
-    endpoints: '銈ㄣ兂銉夈儩銈ゃ兂銉�',
-    endpointsTip: '銇撱伄銉椼儵銈般偆銉炽伅銈ㄣ兂銉夈儩銈ゃ兂銉堛倰浠嬨仐銇︾壒瀹氥伄姗熻兘銈掓彁渚涖仐銆佺従鍦ㄣ伄銉兗銈偣銉氥兗銈广伄銇熴倎銇鏁般伄銈ㄣ兂銉夈儩銈ゃ兂銉堛偦銉冦儓銈掓鎴愩仹銇嶃伨銇欍��',
-    configureModel: '銉€儑銉倰瑷畾銇欍倠',
-    configureTool: '銉勩兗銉倰瑷畾銇欍倠',
-    endpointsEmpty: '銈ㄣ兂銉夈儩銈ゃ兂銉堛倰杩藉姞銇欍倠銇伅銆乗'+\'銉溿偪銉炽倰銈儶銉冦偗銇椼仸銇忋仩銇曘亜',
-    strategyNum: '{{num}} {{strategy}} 銇屽惈銇俱倢銇︺亜銇俱仚',
-    configureApp: '銈€儣銉倰瑷畾銇欍倠',
-    endpointDeleteContent: '{{name}}銈掑墛闄ゃ仐銇俱仚銇嬶紵',
-    actionNum: '{{num}} {{action}} 銇屽惈銇俱倢銇︺亜銇俱仚',
-    endpointsDocLink: '銉夈偔銉ャ儭銉炽儓銈掕〃绀恒仚銈�',
-    switchVersion: '銉愩兗銈搞儳銉炽伄鍒囥倞鏇裤亪',
-  },
-  debugInfo: {
-    title: '銉囥儛銉冦偘',
-    viewDocs: '銉夈偔銉ャ儭銉炽儓銈掕銈�',
-  },
-  privilege: {
-    admins: '绠$悊鑰�',
-    noone: '瑾般倐銇勩仾銇�',
-    whoCanInstall: '瑾般亴銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇椼仸绠$悊銇с亶銇俱仚銇嬶紵',
-    whoCanDebug: '瑾般亴銉椼儵銈般偆銉炽伄銉囥儛銉冦偘銈掕銇嗐亾銇ㄣ亴銇с亶銇俱仚銇嬶紵',
-    everyone: '銇裤倱銇�',
-    title: '銉椼儵銈般偆銉炽伄瑷畾',
-  },
-  pluginInfoModal: {
-    packageName: '銉戙儍銈便兗銈�',
-    release: '銉儶銉笺偣',
-    title: '銉椼儵銈般偆銉虫儏鍫�',
-    repository: '銉儩銈搞儓銉�',
-  },
-  action: {
-    deleteContentRight: '銉椼儵銈般偆銉筹紵',
-    usedInApps: '銇撱伄銉椼儵銈般偆銉炽伅{{num}}銇偄銉椼儶銇т娇鐢ㄣ仌銈屻仸銇勩伨銇欍��',
-    delete: '銉椼儵銈般偆銉炽倰鍓婇櫎銇欍倠',
-    pluginInfo: '銉椼儵銈般偆銉虫儏鍫�',
-    deleteContentLeft: '鍓婇櫎銇椼伨銇欍亱',
-    checkForUpdates: '鏇存柊銈掔⒑瑾嶃仚銈�',
-  },
-  installModal: {
-    labels: {
-      version: '銉愩兗銈搞儳銉�',
-      package: '銉戙儍銈便兗銈�',
-      repository: '銉儩銈搞儓銉�',
-    },
-    cancel: '銈儯銉炽偦銉�',
-    installing: '銈ゃ兂銈广儓銉笺儷涓�...',
-    installedSuccessfully: '銈ゃ兂銈广儓銉笺儷銇垚鍔熴仐銇俱仐銇�',
-    installFailedDesc: '銉椼儵銈般偆銉炽伄銈ゃ兂銈广儓銉笺儷銇け鏁椼仐銇俱仐銇熴��',
-    fromTrustSource: '淇¢牸銇с亶銈嬨偨銉笺偣銇嬨倝銇伩銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇欍倠銈堛亞銇仐銇︺亸銇犮仌銇勩��',
-    installedSuccessfullyDesc: '銉椼儵銈般偆銉炽伅姝e父銇偆銉炽偣銉堛兗銉仌銈屻伨銇椼仧銆�',
-    installFailed: '銈ゃ兂銈广儓銉笺儷銇け鏁椼仐銇俱仐銇�',
-    readyToInstallPackage: '娆°伄銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇椼倛銇嗐仺銇椼仸銇勩伨銇�',
-    uploadFailed: '銈€儍銉椼儹銉笺儔銇け鏁椼仐銇俱仐銇�',
-    pluginLoadErrorDesc: '銇撱伄銉椼儵銈般偆銉炽伅銈ゃ兂銈广儓銉笺儷銇曘倢銇俱仜銈�',
-    installComplete: '銈ゃ兂銈广儓銉笺儷瀹屼簡',
-    next: '娆�',
-    readyToInstall: '娆°伄銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇椼倛銇嗐仺銇椼仸銇勩伨銇�',
-    pluginLoadError: '銉椼儵銈般偆銉炽伄瑾伩杈笺伩銈ㄣ儵銉�',
-    readyToInstallPackages: '娆°伄{{num}}銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇椼倛銇嗐仺銇椼仸銇勩伨銇�',
-    close: '闁夈仒銈�',
-    install: '銈ゃ兂銈广儓銉笺儷',
-    dropPluginToInstall: '銉椼儵銈般偆銉炽儜銉冦偙銉笺偢銈掋亾銇撱伀銉夈儹銉冦儣銇椼仸銈ゃ兂銈广儓銉笺儷銇椼伨銇�',
-    installPlugin: '銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇欍倠',
-    back: '鎴汇倠',
-    uploadingPackage: '{{packageName}}銈掋偄銉冦儣銉兗銉変腑...',
-  },
-  installFromGitHub: {
-    installedSuccessfully: '銈ゃ兂銈广儓銉笺儷銇垚鍔熴仐銇俱仐銇�',
-    installNote: '淇¢牸銇с亶銈嬨偨銉笺偣銇嬨倝銇伩銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇欍倠銈堛亞銇仐銇︺亸銇犮仌銇勩��',
-    updatePlugin: 'GitHub銇嬨倝銉椼儵銈般偆銉炽倰鏇存柊銇欍倠',
-    selectPackage: '銉戙儍銈便兗銈搞倰閬告姙',
-    installFailed: '銈ゃ兂銈广儓銉笺儷銇け鏁椼仐銇俱仐銇�',
-    selectPackagePlaceholder: '銉戙儍銈便兗銈搞倰閬告姙銇椼仸銇忋仩銇曘亜',
-    gitHubRepo: 'GitHub銉儩銈搞儓銉�',
-    selectVersionPlaceholder: '銉愩兗銈搞儳銉炽倰閬告姙銇椼仸銇忋仩銇曘亜',
-    uploadFailed: '銈€儍銉椼儹銉笺儔銇け鏁椼仐銇俱仐銇�',
-    selectVersion: '銉愩兗銈搞儳銉炽倰閬告姙',
-    installPlugin: 'GitHub銇嬨倝銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇欍倠',
-  },
-  upgrade: {
-    title: '銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇欍倠',
-    close: '闁夈仒銈�',
-    upgrading: '銈ゃ兂銈广儓銉笺儷涓�...',
-    description: '娆°伄銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇椼倛銇嗐仺銇椼仸銇勩伨銇�',
-    successfulTitle: '銈ゃ兂銈广儓銉笺儷銇垚鍔熴仐銇俱仐銇�',
-    usedInApps: '{{num}}銇偄銉椼儶銇т娇鐢ㄣ仌銈屻仸銇勩伨銇�',
-    upgrade: '銈ゃ兂銈广儓銉笺儷',
-  },
-  error: {
-    fetchReleasesError: '銉儶銉笺偣銈掑彇寰椼仹銇嶃伨銇涖倱銆傚緦銇с倐銇嗕竴搴︺亰瑭︺仐銇忋仩銇曘亜銆�',
-    inValidGitHubUrl: '鐒″姽銇狦itHub URL銇с仚銆傛湁鍔广仾URL銈掓銇舰寮忋仹鍏ュ姏銇椼仸銇忋仩銇曘亜: https://github.com/owner/repo',
-    noReleasesFound: '銉儶銉笺偣銇銇ゃ亱銈娿伨銇涖倱銆侴itHub銉儩銈搞儓銉伨銇熴伅鍏ュ姏URL銈掔⒑瑾嶃仐銇︺亸銇犮仌銇勩��',
-  },
-  marketplace: {
-    empower: 'AI闁嬬櫤銈掋偟銉濄兗銉堛仚銈�',
-    discover: '鎺㈢储',
-    and: '銇�',
-    difyMarketplace: 'Dify銉炪兗銈便儍銉堛儣銉偆銈�',
-    moreFrom: '銉炪兗銈便儍銉堛儣銉偆銈广亱銈夈伄銇曘倝銇倠鎯呭牨',
-    noPluginFound: '銉椼儵銈般偆銉炽亴瑕嬨仱銇嬨倞銇俱仜銈�',
-    pluginsResult: '{{num}} 浠躲伄绲愭灉',
-    sortBy: '涓︺伖鏇裤亪',
-    sortOption: {
-      mostPopular: '浜烘皸闋�',
-      recentlyUpdated: '鏈�杩戞洿鏂伴爢',
-      newlyReleased: '鏂扮潃闋�',
-      firstReleased: '銉儶銉笺偣闋�',
-    },
-    viewMore: '銈傘仯銇ㄨ銈�',
-    verifiedTip: '銇撱伄銉椼儵銈般偆銉炽伅Dify銇倛銇c仸瑾嶈銇曘倢銇︺亜銇俱仚',
-    partnerTip: '銇撱伄銉椼儵銈般偆銉炽伅Dify銇儜銉笺儓銉娿兗銇倛銇c仸瑾嶈銇曘倢銇︺亜銇俱仚',
-  },
-  task: {
-    installError: '{{errorLength}} 銉椼儵銈般偆銉炽伄銈ゃ兂銈广儓銉笺儷銇け鏁椼仐銇俱仐銇熴�傝〃绀恒仚銈嬨伀銇偗銉儍銈仐銇︺亸銇犮仌銇勩��',
-    installingWithSuccess: '{{installingLength}}鍊嬨伄銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷涓�亄{successLength}}鍊嬫垚鍔熴仐銇俱仐銇熴��',
-    clearAll: '銇欍伖銇︺偗銉偄',
-    installedError: '{{errorLength}} 銉椼儵銈般偆銉炽伄銈ゃ兂銈广儓銉笺儷銇け鏁椼仐銇俱仐銇�',
-    installingWithError: '{{installingLength}}鍊嬨伄銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷涓�亄{successLength}}浠舵垚鍔熴�亄{errorLength}}浠跺け鏁�',
-    installing: '{{installingLength}}鍊嬨伄銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷涓��0鍊嬪畬浜嗐��',
-  },
-  from: '銈ゃ兂銈广儓銉笺儷鍏�',
-  install: '{{num}} 銈ゃ兂銈广儓銉笺儷',
-  installAction: '銈ゃ兂銈广儓銉笺儷',
-  installFrom: '銈ゃ兂銈广儓銉笺儷鍏�',
-  searchPlugins: '妞滅储銉椼儵銈般偆銉�',
-  search: '妞滅储',
-  endpointsEnabled: '{{num}} 銈汇儍銉堛伄銈ㄣ兂銉夈儩銈ゃ兂銉堛亴鏈夊姽銇仾銈娿伨銇椼仧',
-  findMoreInMarketplace: '銉炪兗銈便儍銉堛儣銉偆銈广仹銇曘倝銇銇ゃ亼銇︺亸銇犮仌銇�',
-  fromMarketplace: '銉炪兗銈便儍銉堛儣銉偆銈广亱銈�',
-  searchCategories: '妞滅储銈儐銈淬儶',
-  allCategories: '銇欍伖銇︺伄銈儐銈淬儶',
-  searchTools: '妞滅储銉勩兗銉�...',
-  installPlugin: '銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇欍倠',
-  searchInMarketplace: '銉炪兗銈便儍銉堛儣銉偆銈广仹妞滅储',
-  submitPlugin: '銉椼儵銈般偆銉炽倰鎻愬嚭銇欍倠',
-  difyVersionNotCompatible: '鐝惧湪銇瓺ify銉愩兗銈搞儳銉炽伅銇撱伄銉椼儵銈般偆銉炽仺浜掓彌鎬с亴銇傘倞銇俱仜銈撱�傛渶灏忋儛銉笺偢銉с兂銇瘂{minimalDifyVersion}}銇с仚銆�',
-  metadata: {
-    title: '銉椼儵銈般偆銉�',
-  },
-}
-
-export default translation
diff --git a/i18n/ja-JP/time.ts b/i18n/ja-JP/time.ts
deleted file mode 100644
index 36d4c69..0000000
--- a/i18n/ja-JP/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Tue: '鐏洔鏃�',
-    Sat: '鍦熸洔鏃�',
-    Mon: '銉€兂',
-    Thu: '鏈ㄦ洔鏃�',
-    Fri: '鑷敱',
-    Wed: '姘存洔鏃�',
-    Sun: '澶櫧',
-  },
-  months: {
-    November: '11鏈�',
-    December: '12鏈�',
-    March: '3鏈�',
-    September: '9鏈�',
-    July: '7鏈�',
-    April: '鍥涙湀',
-    February: '2鏈�',
-    June: '6鏈�',
-    January: '1鏈�',
-    May: '5鏈�',
-    August: '鍏湀',
-    October: '鍗佹湀',
-  },
-  operation: {
-    now: '浠�',
-    cancel: '銈儯銉炽偦銉�',
-    ok: '銇亜',
-    pickDate: '鏃ヤ粯銈掗伕鎶�',
-  },
-  title: {
-    pickTime: '銉斻儍銈偪銈ゃ儬',
-  },
-  defaultPlaceholder: '鏅傞枔銈掗伕銈撱仹銇忋仩銇曘亜...',
-}
-
-export default translation
diff --git a/i18n/ko-KR/education.ts b/i18n/ko-KR/education.ts
deleted file mode 100644
index 78e4be7..0000000
--- a/i18n/ko-KR/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    end: 'Dify 頂勲韼橃厰雱� 頂岆灉鞚� 鞙勴暣.',
-    coupon: '霃呾爯 100% 炜犿彴',
-    front: '雼轨嫚鞚� 鞚挫牅 甑愳湣 鞚胳 靸來儨毳� 氚涭潉 鞛愱博鞚� 鞛堨姷雼堧嫟. 鞎勲灅鞐� 攴�頃橃潣 甑愳湣 鞝曤炒毳� 鞛呺牓頃橃棳 瓿检爼鞚� 鞕勲頃橁碃 鞚胳鞚� 氚涭溂鞁嫓鞓�.',
-  },
-  form: {
-    schoolName: {
-      placeholder: '攴�頃橃潣 頃欔祼鞚� 瓿奠嫕 鞎届柎臧� 鞎勲媽 鞝勳泊 鞚措鞚� 鞛呺牓頃橃劯鞖�.',
-      title: '雼轨嫚鞚� 頃欔祼 鞚措',
-    },
-    schoolRole: {
-      option: {
-        teacher: '甑愳偓',
-        student: '頃欖儩',
-        administrator: '頃欔祼 甏�毽瀽',
-      },
-      title: '雼轨嫚鞚� 頃欔祼 鞐暊',
-    },
-    terms: {
-      desc: {
-        end: '鞝滌稖頃溂搿滌崹锛�',
-        and: '鞕�',
-        termsOfService: '靹滊箘鞀� 鞎疥磤',
-        front: '攴�頃橃潣 鞝曤炒 氚� 甑愳湣 鞚胳 靸來儨 靷毄鞚� 鞖半Μ鞚�',
-        privacyPolicy: '臧滌澑鞝曤炒 氤错樃鞝曥眳',
-      },
-      option: {
-        inSchool: '雮橂姅 鞝滉车霅� 旮瓣磤鞐� 鞛暀 欷戩澊瓯半倶 瓿犾毄霅橃柎 鞛堨潓鞚� 頇曥澑頃╇媹雼�. Dify電� 鞛暀歃濍獏靹滊倶 瓿犾毄歃濍獏靹滊ゼ 鞖旍箔頃� 靾� 鞛堨姷雼堧嫟. 毵岇暯 雮搓皜 鞛愱博鞚� 項堨渼搿� 歆勳垹頃橂┐, 雮橂姅 雮� 甑愳湣 靸來儨鞐� 霐半澕 觳橃潓 氅挫牅霅� 靾橃垬耄岆ゼ 歆�攵堩晿旮半 霃欖潣頃╇媹雼�.',
-        age: '雮橂姅 斓滌唽頃� 18靹� 鞚挫儊鞛勳潉 頇曥澑頃╇媹雼�.',
-      },
-      title: '鞎疥磤 氚� 霃欖潣靷暛',
-    },
-  },
-  submit: '鞝滌稖',
-  rejectContent: '鞎堩儉旯濌矊霃�, 攴�頃橂姅 甑愳湣 鞚胳 靸來儨鞐� 鞝來暕頃橃 鞎婌溂氙�搿� 鞚� 鞚措鞚� 欤检唽毳� 靷毄頃� 瓴届毎 Dify Professional Plan鞚� 霃呾爯 100% 炜犿彴鞚� 氚涭潉 靾� 鞐嗢姷雼堧嫟.',
-  successContent: '攴�頃橃潣 瓿勳爼鞐� Dify Professional 頂岆灉鞚� 鞙勴暅 100% 頃犾澑 炜犿彴鞚� 氚滉笁頄堨姷雼堧嫟. 鞚� 炜犿彴鞚� 1雲勱皠 鞙犿毃頃橂瘈搿� 鞙犿毃 旮瓣皠 雮挫棎 靷毄頃� 欤检嫓旮� 氚旊瀺雼堧嫟.',
-  currentSigned: '順勳灛 搿滉犯鞚� 欷戩瀰雼堧嫟',
-  toVerified: '甑愳湣 鞚胳 氚涥赴',
-  rejectTitle: '攴�頃橃潣 Dify 甑愳湣 鞚胳鞚� 瓯半秬霅橃棃鞀惦媹雼�.',
-  learn: '甑愳湣 鞚胳鞚� 氚涬姅 氚╇矔鞚� 氚办毎靹胳殧',
-  submitError: '鞏戩嫕 鞝滌稖鞐� 鞁ろ尐頄堨姷雼堧嫟. 雮橃鞐� 雼れ嫓 鞁滊弰頃� 欤检劯鞖�.',
-  successTitle: '雼轨嫚鞚� Dify 甑愳湣 鞚胳鞚� 氚涭晿鞀惦媹雼�.',
-  emailLabel: '順勳灛 鞚措鞚�',
-}
-
-export default translation
diff --git a/i18n/ko-KR/plugin-tags.ts b/i18n/ko-KR/plugin-tags.ts
deleted file mode 100644
index ddd75ef..0000000
--- a/i18n/ko-KR/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    social: '靷殞鞝侅澑',
-    finance: '旮堨湹',
-    travel: '鞐枆頃橂嫟',
-    search: '瓴�靸�',
-    entertainment: '鞓る澖',
-    utilities: '鞙犿嫺毽嫲',
-    productivity: '靸濎偘霠�',
-    weather: '雮犾敤',
-    other: '雼るジ',
-    videos: '霃欖榿靸�',
-    news: '靻岇嫕',
-    medical: '雮搓臣鞚�',
-    education: '甑愳湣',
-    image: '鞚措歆�',
-    design: '霐旍瀽鞚�',
-    business: '靷梾',
-    agent: '雽�毽澑',
-  },
-  allTags: '氇摖 韮滉犯',
-  searchTags: '瓴�靸� 韮滉犯',
-}
-
-export default translation
diff --git a/i18n/ko-KR/plugin.ts b/i18n/ko-KR/plugin.ts
deleted file mode 100644
index 923f9d5..0000000
--- a/i18n/ko-KR/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    agents: '鞐愳澊鞝勴姼 鞝勲灥',
-    models: '氇嵏',
-    all: '氇憪',
-    extensions: '頇曥灔',
-    tools: '霃勱惮',
-    bundles: '氩堧摛',
-  },
-  categorySingle: {
-    extension: '頇曥灔',
-    tool: '霃勱惮',
-    agent: '鞐愳澊鞝勴姼 鞝勲灥',
-    bundle: '氤措敯毽�',
-    model: '氇嵏',
-  },
-  list: {
-    source: {
-      marketplace: '毵堨紦頂岆爤鞚挫姢鞐愳劀 靹れ箻',
-      local: '搿滌滑 韺偆歆� 韺岇澕鞐愳劀 靹れ箻',
-      github: 'GitHub鞐愳劀 靹れ箻',
-    },
-    noInstalled: '靹れ箻霅� 頂岆煬攴胳澑鞚� 鞐嗢姷雼堧嫟.',
-    notFound: '頂岆煬攴胳澑鞚� 彀眷潉 靾� 鞐嗢姷雼堧嫟.',
-  },
-  source: {
-    local: '搿滌滑 韺偆歆� 韺岇澕',
-    marketplace: '鞁滌灔',
-    github: '旯冺棃敫�',
-  },
-  detailPanel: {
-    categoryTip: {
-      marketplace: '毵堨紦頂岆爤鞚挫姢鞐愳劀 靹れ箻霅�',
-      debugging: '霐旊矂旯� 頂岆煬攴胳澑',
-      github: 'Github鞐愳劀 靹れ箻霅�',
-      local: '搿滌滑 頂岆煬攴胳澑',
-    },
-    operation: {
-      detail: '靹鸽秬 鞝曤炒',
-      install: '靹れ箻',
-      viewDetail: '鞛愳劯頌堧炒旮�',
-      info: '頂岆煬攴胳澑 鞝曤炒',
-      update: '鞐呺嵃鞚错姼',
-      remove: '鞝滉卑',
-      checkUpdate: '鞐呺嵃鞚错姼 頇曥澑',
-    },
-    toolSelector: {
-      empty: '\'+\' 氩勴娂鞚� 韥措Ν頃橃棳 霃勱惮毳� 於旉皜頃╇媹雼�. 鞐煬 霃勱惮毳� 於旉皜頃� 靾� 鞛堨姷雼堧嫟.',
-      descriptionLabel: '霃勱惮 靹る獏',
-      uninstalledContent: '鞚� 頂岆煬攴胳澑鞚� 搿滌滑/GitHub 鞝�鞛レ唽鞐愳劀 靹れ箻霅╇媹雼�. 靹れ箻 頉� 靷毄頃橃嫮鞁滌槫.',
-      params: '於旊 甑劚',
-      paramsTip1: 'LLM 於旊 韺岆澕氙疙劙毳� 鞝滌柎頃╇媹雼�.',
-      uninstalledLink: '頂岆煬攴胳澑鞐愳劀 甏�毽�',
-      unsupportedTitle: '歆�鞗愲悩歆� 鞎婋姅 鞛戩梾',
-      auto: '鞛愲彊 氩堨棴',
-      settings: '靷毄鞛� 靹れ爼',
-      unsupportedContent2: '氩勳爠鞚� 鞝勴櫂頃橂牑氅� 韥措Ν頃╇媹雼�.',
-      uninstalledTitle: '霃勱惮臧� 靹れ箻霅橃 鞎婌潓',
-      descriptionPlaceholder: '霃勱惮鞚� 鞖╇弰鞐� 雽�頃� 臧勲灥頃� 靹る獏(鞓�: 韸轨爼 鞙勳箻鞚� 鞓弰 臧�鞝胳槫旮�).',
-      title: '於旉皜 霃勱惮',
-      toolLabel: '霃勱惮',
-      placeholder: '霃勱惮 靹犿儩...',
-      paramsTip2: '\'鞛愲彊\'鞚� 旰检牳 鞛堨溂氅� 旮半掣臧掛澊 靷毄霅╇媹雼�.',
-      unsupportedContent: '靹れ箻霅� 頂岆煬攴胳澑 氩勳爠鞚� 鞚� 鞛戩梾鞚� 鞝滉车頃橃 鞎婌姷雼堧嫟.',
-    },
-    configureApp: '鞎� 甑劚',
-    strategyNum: '{{氩堩樃}} {{鞝勲灥}} 韽暔',
-    endpointModalDesc: '甑劚鞚� 鞕勲霅橂┐ API 鞐旊摐韽澑韸鸽ゼ 韱淀暣 頂岆煬攴胳澑鞐愳劀 鞝滉车頃橂姅 旮半姤鞚� 靷毄頃� 靾� 鞛堨姷雼堧嫟.',
-    actionNum: '{{氩堩樃}} {{頄夒彊}} 韽暔',
-    endpointDeleteTip: '鞐旊摐韽澑韸� 鞝滉卑',
-    modelNum: '{{氩堩樃}} 韽暔 霅� 氇嵏',
-    configureModel: '氇嵏 甑劚',
-    configureTool: '甑劚 霃勱惮',
-    switchVersion: '鞀れ渼旃� 氩勳爠',
-    endpointsEmpty: '\'+\' 氩勴娂鞚� 韥措Ν頃橃棳 鞐旊摐韽澑韸鸽ゼ 於旉皜頃╇媹雼�.',
-    endpointModalTitle: '鞐旊摐韽澑韸� 靹れ爼',
-    endpointsTip: '鞚� 頂岆煬攴胳澑鞚� 鞐旊摐韽澑韸鸽ゼ 韱淀暣 韸轨爼 旮半姤鞚� 鞝滉车頃橂┌ 順勳灛 鞛戩梾 瓿店皠鞐� 雽�頃� 鞐煬 鞐旊摐韽澑韸� 靹疙姼毳� 甑劚頃� 靾� 鞛堨姷雼堧嫟.',
-    endpointDisableContent: '{{name}}鞚� 牍勴櫆靹表檾頃橃嫓瓴犾姷雼堦箤?',
-    endpointDeleteContent: '{{name}}鞚� 鞝滉卑頃橃嫓瓴犾姷雼堦箤?',
-    disabled: '牍勴櫆靹表檾',
-    endpointsDocLink: '氍胳劀 氤搓赴',
-    endpoints: '雭濎爯',
-    serviceOk: '靹滊箘鞀� 鞝曥儊',
-    endpointDisableTip: '鞐旊摐韽澑韸� 牍勴櫆靹表檾',
-  },
-  debugInfo: {
-    title: '霐旊矂旯�',
-    viewDocs: '氍胳劀 氤搓赴',
-  },
-  privilege: {
-    admins: '甏�毽瀽',
-    title: '頂岆煬攴胳澑 旮半掣 靹れ爼',
-    whoCanDebug: '雸勱皜 頂岆煬攴胳澑鞚� 霐旊矂旯呿暊 靾� 鞛堧倶鞖�?',
-    noone: '鞎勲霃� 鞐嗢柎',
-    everyone: '氇憪',
-    whoCanInstall: '雸勱皜 頂岆煬攴胳澑鞚� 靹れ箻頃橁碃 甏�毽暊 靾� 鞛堨姷雼堦箤?',
-  },
-  pluginInfoModal: {
-    packageName: '韺偆歆�',
-    repository: '鞝�鞛レ唽',
-    title: '頂岆煬攴胳澑 鞝曤炒',
-    release: '靹濍癌',
-  },
-  action: {
-    deleteContentRight: '頂岆煬攴胳澑?',
-    usedInApps: '鞚� 頂岆煬攴胳澑鞚� {{num}}臧滌潣 鞎膘棎靹� 靷毄霅橁碃 鞛堨姷雼堧嫟.',
-    pluginInfo: '頂岆煬攴胳澑 鞝曤炒',
-    checkForUpdates: '鞐呺嵃鞚错姼 頇曥澑',
-    deleteContentLeft: '鞝滉卑頃橃嫓瓴犾姷雼堦箤?',
-    delete: '頂岆煬攴胳澑 鞝滉卑',
-  },
-  installModal: {
-    labels: {
-      package: '韺偆歆�',
-      repository: '鞝�鞛レ唽',
-      version: '氩勳爠',
-    },
-    back: '霋る',
-    readyToInstallPackage: '雼れ潓 頂岆煬攴胳澑鞚� 靹れ箻頃橂牑瓿� 頃╇媹雼�.',
-    close: '雼嫟',
-    fromTrustSource: '<trustSource>鞁犽頃� 靾� 鞛堧姅 於滌矘</trustSource>鞚� 頂岆煬攴胳澑毵� 靹れ箻頃橂弰搿� 頃橃劯鞖�.',
-    readyToInstall: '雼れ潓 頂岆煬攴胳澑鞚� 靹れ箻頃橂牑瓿� 頃╇媹雼�.',
-    uploadFailed: '鞐呺霌� 鞁ろ尐',
-    installPlugin: '頂岆煬攴胳澑 靹れ箻',
-    pluginLoadErrorDesc: '鞚� 頂岆煬攴胳澑鞚� 靹れ箻霅橃 鞎婌姷雼堧嫟.',
-    installedSuccessfully: '靹れ箻 靹标车',
-    installedSuccessfullyDesc: '頂岆煬攴胳澑鞚� 靹标车鞝侅溂搿� 靹れ箻霅橃棃鞀惦媹雼�.',
-    installing: '靹れ箻...',
-    pluginLoadError: '頂岆煬攴胳澑 搿滊摐 鞓る',
-    installFailedDesc: '頂岆煬攴胳澑鞚� 靹れ箻霅橃 鞎婌晿鞀惦媹雼�.',
-    installFailed: '靹れ箻 鞁ろ尐',
-    next: '雼れ潓',
-    installComplete: '靹れ箻 鞕勲',
-    install: '靹れ箻頃橂嫟',
-    readyToInstallPackages: '雼れ潓 {{num}} 頂岆煬攴胳澑鞚� 靹れ箻頃橂牑瓿� 頃╇媹雼�.',
-    uploadingPackage: '{{packageName}} 鞐呺霌� 欷�...',
-    dropPluginToInstall: '頂岆煬攴胳澑 韺偆歆�毳� 鞐赴鞐� 雴撿晞 靹れ箻頃橃嫮鞁滌槫.',
-    cancel: '旆唽',
-  },
-  installFromGitHub: {
-    uploadFailed: '鞐呺霌� 鞁ろ尐',
-    selectVersionPlaceholder: '氩勳爠鞚� 靹犿儩頃橃劯鞖�.',
-    installPlugin: 'GitHub鞐愳劀 頂岆煬攴胳澑 靹れ箻',
-    installFailed: '靹れ箻 鞁ろ尐',
-    updatePlugin: 'GitHub鞐愳劀 頂岆煬攴胳澑 鞐呺嵃鞚错姼',
-    selectPackage: '韺偆歆� 靹犿儩',
-    gitHubRepo: 'GitHub 毽彫歆�韱犽Μ',
-    selectPackagePlaceholder: '韺偆歆�毳� 靹犿儩頃橃劯鞖�.',
-    installedSuccessfully: '靹れ箻 靹标车',
-    selectVersion: '氩勳爠 靹犿儩',
-    installNote: '鞁犽頃� 靾� 鞛堧姅 於滌矘鞚� 頂岆煬攴胳澑毵� 靹れ箻頃橂弰搿� 頃橃劯鞖�.',
-  },
-  upgrade: {
-    usedInApps: '{{num}}臧滌潣 鞎膘棎靹� 靷毄霅�',
-    description: '雼れ潓 頂岆煬攴胳澑鞚� 靹れ箻頃橂牑瓿� 頃╇媹雼�.',
-    successfulTitle: '靹れ箻 靹标车',
-    upgrade: '靹れ箻頃橂嫟',
-    upgrading: '靹れ箻...',
-    close: '雼嫟',
-    title: '頂岆煬攴胳澑 靹れ箻',
-  },
-  error: {
-    noReleasesFound: '毽措Μ鞀るゼ 彀眷潉 靾� 鞐嗢姷雼堧嫟. GitHub 毽彫歆�韱犽Μ 霕愲姅 鞛呺牓 URL鞚� 頇曥澑頃橃劯鞖�.',
-    fetchReleasesError: '毽措Μ鞀るゼ 瓴�靸夗暊 靾� 鞐嗢姷雼堧嫟. 雮橃鞐� 雼れ嫓 鞁滊弰頃橃嫮鞁滌槫.',
-    inValidGitHubUrl: '鞛橂霅� GitHub URL鞛呺媹雼�. 鞙犿毃頃� URL鞚� https://github.com/owner/repo 順曥嫕鞙茧 鞛呺牓頃橃嫮鞁滌槫.',
-  },
-  marketplace: {
-    sortOption: {
-      recentlyUpdated: '斓滉芳 鞐呺嵃鞚错姼',
-      firstReleased: '觳� 於滌嫓',
-      newlyReleased: '靸堧 於滌嫓 霅�',
-      mostPopular: '臧�鞛� 鞚戈赴 鞛堧姅',
-    },
-    noPluginFound: '頂岆煬攴胳澑鞚� 彀眷潉 靾� 鞐嗢姷雼堧嫟.',
-    empower: 'AI 臧滊皽 鞐焿 臧曧檾',
-    viewMore: '雿旊炒旮�',
-    difyMarketplace: 'Dify 毵堨紦頂岆爤鞚挫姢',
-    pluginsResult: '{{num}} 瓴瓣臣',
-    discover: '氚滉铂頃橂嫟',
-    moreFrom: 'Marketplace鞐愳劀 雿� 氤搓赴',
-    sortBy: '鞝曤牞',
-    and: '攴鸽Μ瓿�',
-    verifiedTip: 'Dify鞐� 鞚橅暣 頇曥澑霅�',
-    partnerTip: 'Dify 韺岉姼雱堨棎 鞚橅暣 頇曥澑霅�',
-  },
-  task: {
-    installingWithSuccess: '{{installingLength}} 頂岆煬攴胳澑 靹れ箻, {{successLength}} 靹标车.',
-    installedError: '{{errorLength}} 頂岆煬攴胳澑 靹れ箻 鞁ろ尐',
-    installing: '{{installingLength}} 頂岆煬攴胳澑 靹れ箻, 0 鞕勲.',
-    installingWithError: '{{installingLength}} 頂岆煬攴胳澑 靹れ箻, {{successLength}} 靹标车, {{errorLength}} 鞁ろ尐',
-    installError: '{{errorLength}} 頂岆煬攴胳澑 靹れ箻 鞁ろ尐, 氤措牑氅� 韥措Ν頃橃嫮鞁滌槫.',
-    clearAll: '氇憪 歆�鞖瓣赴',
-  },
-  installAction: '靹れ箻頃橂嫟',
-  searchTools: '瓴�靸� 霃勱惮...',
-  installPlugin: '頂岆煬攴胳澑 靹れ箻',
-  endpointsEnabled: '{{num}}臧滌潣 鞐旊摐韽澑韸� 歆戫暕鞚� 頇滌劚頇旊悩鞐堨姷雼堧嫟.',
-  installFrom: '鞐愳劀 靹れ箻',
-  allCategories: '氇摖 旃错厡瓿犽Μ',
-  submitPlugin: '鞝滌稖 頂岆煬攴胳澑',
-  findMoreInMarketplace: 'Marketplace鞐愳劀 雿� 鞎岇晞氤搓赴',
-  searchCategories: '瓴�靸� 旃错厡瓿犽Μ',
-  search: '瓴�靸�',
-  searchInMarketplace: 'Marketplace鞐愳劀 瓴�靸�',
-  from: '氤措偢 靷瀸',
-  searchPlugins: '瓴�靸� 頂岆煬攴胳澑',
-  install: '{{num}} 靹れ箻',
-  fromMarketplace: 'Marketplace鞐愳劀',
-  metadata: {
-    title: '頂岆煬攴胳澑',
-  },
-  difyVersionNotCompatible: '順勳灛 Dify 氩勳爠鞚� 鞚� 頂岆煬攴胳澑瓿� 順疙櫂霅橃 鞎婌姷雼堧嫟. 頃勳殧頃� 斓滌唽 氩勳爠鞙茧 鞐呹犯霠堨澊霌滍晿鞁嫓鞓�: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/ko-KR/time.ts b/i18n/ko-KR/time.ts
deleted file mode 100644
index 78e825d..0000000
--- a/i18n/ko-KR/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Wed: '靾橃殧鞚�',
-    Thu: '氇╈殧鞚�',
-    Fri: '鞛愳湢',
-    Sat: '韱犾殧鞚�',
-    Sun: '韮滌枒',
-    Tue: '頇旍殧鞚�',
-    Mon: '氇�',
-  },
-  months: {
-    May: '5鞗�',
-    January: '1鞗�',
-    August: '8鞗�',
-    July: '7鞗�',
-    April: '4鞗�',
-    October: '10鞗�',
-    December: '12鞗�',
-    February: '2鞗�',
-    June: '6鞗�',
-    November: '11鞗�',
-    March: '3鞗�',
-    September: '9鞗�',
-  },
-  operation: {
-    pickDate: '雮犾 靹犿儩',
-    cancel: '旆唽',
-    ok: '膦嬱晞鞖�',
-    now: '歆�旮�',
-  },
-  title: {
-    pickTime: '鞁滉皠 靹犿儩',
-  },
-  defaultPlaceholder: '鞁滉皠鞚� 靹犿儩頃橃劯鞖�...',
-}
-
-export default translation
diff --git a/i18n/pl-PL/education.ts b/i18n/pl-PL/education.ts
deleted file mode 100644
index a7684c2..0000000
--- a/i18n/pl-PL/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: 'ekskluzywny kupon 100%',
-    front: 'Teraz jeste艣 uprawniony do statusu zweryfikowanej edukacji. Prosz臋 wprowadzi膰 swoje informacje edukacyjne poni偶ej, aby zako艅czy膰 proces i otrzyma膰',
-    end: 'dla Profesjonalnego Planu Dify.',
-  },
-  form: {
-    schoolName: {
-      title: 'Nazwa Twojej Szko艂y',
-      placeholder: 'Wpisz oficjaln膮, pe艂n膮 nazw臋 swojej szko艂y',
-    },
-    schoolRole: {
-      option: {
-        student: 'Uczniowie',
-        teacher: 'Nauczyciel',
-        administrator: 'Administrator szko艂y',
-      },
-      title: 'Twoja rola w szkole',
-    },
-    terms: {
-      desc: {
-        termsOfService: 'Warunki 艣wiadczenia us艂ug',
-        privacyPolicy: 'Polityka prywatno艣ci',
-        and: 'i',
-        front: 'Twoje informacje i u偶ycie statusu Weryfikowanej Edukacji podlegaj膮 naszym',
-        end: 'Przez przes艂anie:',
-      },
-      option: {
-        age: 'Potwierdzam, 偶e mam co najmniej 18 lat',
-        inSchool: 'Potwierdzam, 偶e jestem zapisany lub zatrudniony w podanej instytucji. Dify mo偶e wymaga膰 dowodu zapisania/zatrudnienia. Je艣li wprowadz臋 w b艂膮d dotycz膮cy mojej zdolno艣ci do uczestnictwa, zgadzam si臋 zap艂aci膰 wszelkie op艂aty, kt贸re zosta艂y pocz膮tkowo zaniechane w oparciu o m贸j status edukacyjny.',
-      },
-      title: 'Warunki i umowy',
-    },
-  },
-  toVerified: 'Uzyskaj potwierdzenie edukacji',
-  submit: 'Zatwierd藕',
-  rejectContent: 'Niestety, nie kwalifikujesz si臋 do statusu Zweryfikowanej Edukacji i w zwi膮zku z tym nie mo偶esz otrzyma膰 ekskluzywnego kuponu 100% na plan Dify Professional, je艣li korzystasz z tego adresu e-mail.',
-  successContent: 'Wydali艣my kupon rabatowy na 100% dla planu Dify Professional na Twoje konto. Kupon jest wa偶ny przez jeden rok, prosimy o jego u偶ycie w okresie wa偶no艣ci.',
-  currentSigned: 'AKTUALNIE ZALOGOWANY JAKO',
-  successTitle: 'Masz zweryfikowane wykszta艂cenie Dify',
-  rejectTitle: 'Twoja weryfikacja edukacyjna Dify zosta艂a odrzucona',
-  learn: 'Dowiedz si臋, jak uzyska膰 potwierdzenie wykszta艂cenia',
-  emailLabel: 'Tw贸j aktualny email',
-  submitError: 'Przes艂anie formularza nie powiod艂o si臋. Prosz臋 spr贸bowa膰 ponownie p贸藕niej.',
-}
-
-export default translation
diff --git a/i18n/pl-PL/plugin-tags.ts b/i18n/pl-PL/plugin-tags.ts
deleted file mode 100644
index 600fa02..0000000
--- a/i18n/pl-PL/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    business: 'Biznes',
-    weather: 'Pogoda',
-    entertainment: 'Rozrywka',
-    education: 'Edukacja',
-    agent: 'Agent',
-    videos: 'Filmy',
-    utilities: 'Narz臋dzia',
-    image: 'Obraz',
-    other: 'Inny',
-    news: 'Wiadomo艣ci',
-    social: 'Spo艂eczny',
-    medical: 'Medyczny',
-    search: 'Szuka膰',
-    productivity: 'Produktywno艣膰',
-    travel: 'Podr贸偶',
-    design: 'Projekt',
-    finance: 'Finanse',
-  },
-  searchTags: 'Szukaj tag贸w',
-  allTags: 'Wszystkie tagi',
-}
-
-export default translation
diff --git a/i18n/pl-PL/plugin.ts b/i18n/pl-PL/plugin.ts
deleted file mode 100644
index 0883a98..0000000
--- a/i18n/pl-PL/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    extensions: 'Rozszerzenia',
-    agents: 'Strategie agent贸w',
-    bundles: 'Wi膮zki',
-    all: 'Ca艂y',
-    tools: 'Narz臋dzia',
-    models: 'Modele',
-  },
-  categorySingle: {
-    model: 'Model',
-    extension: 'Rozszerzenie',
-    bundle: 'Pakiet',
-    agent: 'Strategia agenta',
-    tool: 'Narz臋dzie',
-  },
-  list: {
-    source: {
-      marketplace: 'Instalowanie z Marketplace',
-      github: 'Instalowanie z us艂ugi GitHub',
-      local: 'Zainstaluj z lokalnego pliku pakietu',
-    },
-    notFound: 'Nie znaleziono wtyczek',
-    noInstalled: 'Brak zainstalowanych wtyczek',
-  },
-  source: {
-    github: 'Us艂uga GitHub',
-    local: 'Lokalny plik pakietu',
-    marketplace: 'Rynek',
-  },
-  detailPanel: {
-    categoryTip: {
-      local: 'Wtyczka lokalna',
-      github: 'Zainstalowany z Github',
-      marketplace: 'Zainstalowano z witryny Marketplace',
-      debugging: 'Wtyczka do debugowania',
-    },
-    operation: {
-      remove: 'Usun膮膰',
-      checkUpdate: 'Sprawd藕 aktualizacj臋',
-      detail: 'Szczeg贸艂y',
-      update: 'Aktualizacja',
-      install: 'Instalowa膰',
-      viewDetail: 'Poka偶 szczeg贸艂y',
-      info: 'Informacje o wtyczce',
-    },
-    toolSelector: {
-      unsupportedContent2: 'Kliknij, aby zmieni膰 wersj臋.',
-      uninstalledLink: 'Zarz膮dzanie we wtyczkach',
-      placeholder: 'Wybierz narz臋dzie...',
-      paramsTip1: 'Steruje parametrami wnioskowania LLM.',
-      unsupportedContent: 'Zainstalowana wersja wtyczki nie zapewnia tej akcji.',
-      params: 'KONFIGURACJA ROZUMOWANIA',
-      auto: 'Automatyczne',
-      empty: 'Kliknij przycisk "+", aby doda膰 narz臋dzia. Mo偶esz doda膰 wiele narz臋dzi.',
-      descriptionLabel: 'Opis narz臋dzia',
-      title: 'Dodaj narz臋dzie',
-      descriptionPlaceholder: 'Kr贸tki opis przeznaczenia narz臋dzia, np. zmierzenie temperatury dla konkretnej lokalizacji.',
-      settings: 'USTAWIENIA U呕YTKOWNIKA',
-      uninstalledContent: 'Ta wtyczka jest instalowana z repozytorium lokalnego/GitHub. Prosz臋 u偶y膰 po instalacji.',
-      unsupportedTitle: 'Nieobs艂ugiwana akcja',
-      uninstalledTitle: 'Narz臋dzie nie jest zainstalowane',
-      paramsTip2: 'Gdy opcja "Automatycznie" jest wy艂膮czona, u偶ywana jest warto艣膰 domy艣lna.',
-      toolLabel: 'Narz臋dzie',
-    },
-    strategyNum: '{{liczba}} {{strategia}} ZAWARTE',
-    endpointsEmpty: 'Kliknij przycisk "+", aby doda膰 punkt ko艅cowy',
-    endpointDisableTip: 'Wy艂膮cz punkt ko艅cowy',
-    endpoints: 'Punkty ko艅cowe',
-    disabled: 'Niepe艂nosprawny',
-    endpointModalTitle: 'Punkt ko艅cowy konfiguracji',
-    endpointsDocLink: 'Wy艣wietlanie dokumentu',
-    endpointDeleteTip: 'Usu艅 punkt ko艅cowy',
-    actionNum: '{{liczba}} {{akcja}} ZAWARTE',
-    configureTool: 'Narz臋dzie konfiguracji',
-    configureModel: 'Konfiguracja modelu',
-    switchVersion: 'Wersja prze艂膮cznika',
-    serviceOk: 'Serwis OK',
-    configureApp: 'Konfiguracja aplikacji',
-    endpointModalDesc: 'Po skonfigurowaniu mo偶na korzysta膰 z funkcji dostarczanych przez wtyczk臋 za po艣rednictwem punkt贸w ko艅cowych API.',
-    endpointDisableContent: 'Czy chcesz wy艂膮czy膰 {{name}}?',
-    endpointDeleteContent: 'Czy chcesz usun膮膰 {{name}}?',
-    endpointsTip: 'Ta wtyczka zapewnia okre艣lone funkcje za po艣rednictwem punkt贸w ko艅cowych i mo偶na skonfigurowa膰 wiele zestaw贸w punkt贸w ko艅cowych dla bie偶膮cego obszaru roboczego.',
-    modelNum: '{{liczba}} MODELE W ZESTAWIE',
-  },
-  debugInfo: {
-    viewDocs: 'Wy艣wietlanie dokument贸w',
-    title: 'Debugowanie',
-  },
-  privilege: {
-    everyone: 'Ka偶dy',
-    whoCanDebug: 'Kto mo偶e debugowa膰 wtyczki?',
-    admins: 'Administratorzy',
-    noone: 'Nikt',
-    whoCanInstall: 'Kto mo偶e instalowa膰 wtyczki i nimi zarz膮dza膰?',
-    title: 'Preferencje wtyczek',
-  },
-  pluginInfoModal: {
-    packageName: 'Pakiet',
-    title: 'Informacje o wtyczce',
-    release: 'Zwolni膰',
-    repository: 'Repozytorium',
-  },
-  action: {
-    deleteContentLeft: 'Czy chcesz usun膮膰',
-    delete: 'Usu艅 wtyczk臋',
-    pluginInfo: 'Informacje o wtyczce',
-    checkForUpdates: 'Sprawd藕 dost臋pno艣膰 aktualizacji',
-    usedInApps: 'Ta wtyczka jest u偶ywana w aplikacjach {{num}}.',
-    deleteContentRight: 'wtyczka?',
-  },
-  installModal: {
-    labels: {
-      package: 'Pakiet',
-      repository: 'Repozytorium',
-      version: 'Wersja',
-    },
-    installPlugin: 'Zainstaluj wtyczk臋',
-    install: 'Instalowa膰',
-    installFailedDesc: 'Instalacja wtyczki nie powiod艂a si臋.',
-    installedSuccessfullyDesc: 'Wtyczka zosta艂a pomy艣lnie zainstalowana.',
-    back: 'Wstecz',
-    readyToInstallPackages: 'Informacje o instalacji nast臋puj膮cych wtyczek {{num}}',
-    cancel: 'Anuluj',
-    pluginLoadError: 'B艂膮d 艂adowania wtyczki',
-    installing: 'Instalowanie...',
-    installFailed: 'Instalacja nie powiod艂a si臋',
-    installComplete: 'Instalacja zako艅czona',
-    readyToInstall: 'Informacje o instalacji nast臋puj膮cej wtyczki',
-    dropPluginToInstall: 'Upu艣膰 pakiet wtyczek tutaj, aby zainstalowa膰',
-    uploadFailed: 'Przekazywanie nie powiod艂o si臋',
-    next: 'Nast臋pny',
-    fromTrustSource: 'Upewnij si臋, 偶e instalujesz wtyczki tylko z <trustSource>zaufanego 藕r贸d艂a</trustSource>.',
-    pluginLoadErrorDesc: 'Ta wtyczka nie zostanie zainstalowana',
-    close: 'Zamyka膰',
-    readyToInstallPackage: 'Informacje o instalacji nast臋puj膮cej wtyczki',
-    uploadingPackage: 'Przesy艂anie {{packageName}}...',
-    installedSuccessfully: 'Instalacja powiod艂a si臋',
-  },
-  installFromGitHub: {
-    installPlugin: 'Zainstaluj wtyczk臋 z GitHub',
-    selectVersionPlaceholder: 'Prosz臋 wybra膰 wersj臋',
-    gitHubRepo: 'Repozytorium GitHub',
-    uploadFailed: 'Przekazywanie nie powiod艂o si臋',
-    selectVersion: 'Wybierz wersj臋',
-    installFailed: 'Instalacja nie powiod艂a si臋',
-    updatePlugin: 'Zaktualizuj wtyczk臋 z GitHub',
-    selectPackagePlaceholder: 'Prosz臋 wybra膰 pakiet',
-    selectPackage: 'Wybierz pakiet',
-    installedSuccessfully: 'Instalacja powiod艂a si臋',
-    installNote: 'Upewnij si臋, 偶e instalujesz wtyczki tylko z zaufanego 藕r贸d艂a.',
-  },
-  upgrade: {
-    successfulTitle: 'Instalacja powiod艂a si臋',
-    description: 'Informacje o instalacji nast臋puj膮cej wtyczki',
-    close: 'Zamyka膰',
-    upgrade: 'Instalowa膰',
-    title: 'Zainstaluj wtyczk臋',
-    upgrading: 'Instalowanie...',
-    usedInApps: 'U偶ywane w aplikacjach {{num}}',
-  },
-  error: {
-    inValidGitHubUrl: 'Nieprawid艂owy adres URL us艂ugi GitHub. Podaj prawid艂owy adres URL w formacie: https://github.com/owner/repo',
-    noReleasesFound: 'Nie znaleziono wyda艅. Sprawd藕 repozytorium GitHub lub wej艣ciowy adres URL.',
-    fetchReleasesError: 'Nie mo偶na pobra膰 wyda艅. Spr贸buj ponownie p贸藕niej.',
-  },
-  marketplace: {
-    sortOption: {
-      newlyReleased: 'Nowo wydany',
-      firstReleased: 'Po raz pierwszy wydany',
-      recentlyUpdated: 'Ostatnio zaktualizowane',
-      mostPopular: 'Najpopularniejsze',
-    },
-    sortBy: 'Czarne miasto',
-    discover: 'Odkry膰',
-    moreFrom: 'Wi臋cej z Marketplace',
-    empower: 'Zwi臋ksz mo偶liwo艣ci rozwoju sztucznej inteligencji',
-    viewMore: 'Zobacz wi臋cej',
-    and: 'i',
-    difyMarketplace: 'Rynek Dify',
-    noPluginFound: 'Nie znaleziono wtyczki',
-    pluginsResult: '{{num}} wyniki',
-    partnerTip: 'Zweryfikowane przez partnera Dify',
-    verifiedTip: 'Zweryfikowane przez Dify',
-  },
-  task: {
-    installError: 'Nie uda艂o si臋 zainstalowa膰 wtyczek {{errorLength}}, kliknij, aby wy艣wietli膰',
-    installedError: 'Nie uda艂o si臋 zainstalowa膰 wtyczek {{errorLength}}',
-    installing: 'Instalowanie wtyczek {{installingLength}}, 0 gotowe.',
-    installingWithSuccess: 'Instalacja wtyczek {{installingLength}}, {{successLength}} powodzenie.',
-    clearAll: 'Wyczy艣膰 wszystko',
-    installingWithError: 'Instalacja wtyczek {{installingLength}}, {{successLength}} powodzenie, {{errorLength}} niepowodzenie',
-  },
-  search: 'Szuka膰',
-  installFrom: 'ZAINSTALUJ Z',
-  searchCategories: 'Kategorie wyszukiwania',
-  allCategories: 'Wszystkie kategorie',
-  findMoreInMarketplace: 'Wi臋cej informacji w Marketplace',
-  searchInMarketplace: 'Wyszukiwanie w Marketplace',
-  endpointsEnabled: '{{num}} w艂膮czone zestawy punkt贸w ko艅cowych',
-  install: '{{num}} instalacji',
-  installAction: 'Instalowa膰',
-  installPlugin: 'Zainstaluj wtyczk臋',
-  from: 'Z',
-  fromMarketplace: 'Z Marketplace',
-  searchPlugins: 'Wtyczki wyszukiwania',
-  searchTools: 'Narz臋dzia wyszukiwania...',
-  submitPlugin: 'Prze艣lij wtyczk臋',
-  metadata: {
-    title: 'Wtyczki',
-  },
-  difyVersionNotCompatible: 'Obecna wersja Dify nie jest kompatybilna z tym wtyczk膮, prosz臋 zaktualizowa膰 do minimalnej wymaganej wersji: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/pl-PL/time.ts b/i18n/pl-PL/time.ts
deleted file mode 100644
index e98ebdd..0000000
--- a/i18n/pl-PL/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Thu: 'Czw',
-    Tue: 'Wtorek',
-    Mon: 'Mon',
-    Sun: 'S艂o艅ce',
-    Fri: 'Wolny',
-    Sat: 'Sat',
-    Wed: '艢roda',
-  },
-  months: {
-    July: 'lipiec',
-    January: 'Stycze艅',
-    August: 'Sierpie艅',
-    February: 'Luty',
-    October: 'Pa藕dziernik',
-    April: 'Kwiecie艅',
-    December: 'Grudzie艅',
-    March: 'Marzec',
-    May: 'Maj',
-    September: 'Wrzesie艅',
-    June: 'Czerwiec',
-    November: 'Listopad',
-  },
-  operation: {
-    cancel: 'Anuluj',
-    pickDate: 'Wybierz dat臋',
-    now: 'Teraz',
-    ok: 'OK',
-  },
-  title: {
-    pickTime: 'Wybierz czas',
-  },
-  defaultPlaceholder: 'Wybierz czas...',
-}
-
-export default translation
diff --git a/i18n/pt-BR/education.ts b/i18n/pt-BR/education.ts
deleted file mode 100644
index af0cd15..0000000
--- a/i18n/pt-BR/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    front: 'Voc锚 agora est谩 eleg铆vel para o status de Educa莽茫o Verificada. Por favor, insira suas informa莽玫es educacionais abaixo para concluir o processo e receber um',
-    coupon: 'cupom exclusivo de 100%',
-    end: 'para o Plano Profissional Dify.',
-  },
-  form: {
-    schoolName: {
-      placeholder: 'Digite o nome oficial e n茫o abreviado da sua escola',
-      title: 'O nome da sua escola',
-    },
-    schoolRole: {
-      option: {
-        teacher: 'Professor',
-        student: 'Estudante',
-        administrator: 'Administrador Escolar',
-      },
-      title: 'Seu Papel na Escola',
-    },
-    terms: {
-      desc: {
-        and: 'e',
-        privacyPolicy: 'Pol铆tica de Privacidade',
-        front: 'Suas informa莽玫es e o uso do status de Educa莽茫o Verificada est茫o sujeitos ao nosso',
-        termsOfService: 'Termos de Servi莽o',
-        end: 'Ao enviar:',
-      },
-      option: {
-        inSchool: 'Eu confirmo que estou matriculado ou empregado na institui莽茫o mencionada. A Dify pode solicitar comprova莽茫o de matr铆cula/emprego. Se eu representar indevidamente minha elegibilidade, concordo em pagar quaisquer taxas inicialmente isentas com base no meu status educacional.',
-        age: 'Eu confirmo que tenho pelo menos 18 anos',
-      },
-      title: 'Termos e Acordos',
-    },
-  },
-  learn: 'Aprenda como fazer a verifica莽茫o da sua educa莽茫o',
-  toVerified: 'Verifique a Educa莽茫o',
-  currentSigned: 'ATUALMENTE CONECTADO COMO',
-  submit: 'Enviar',
-  emailLabel: 'Seu e-mail atual',
-  successContent: 'Emitimos um cupom de desconto de 100% para o plano Dify Professional na sua conta. O cupom 茅 v谩lido por um ano, por favor, utilize-o dentro do per铆odo de validade.',
-  rejectTitle: 'A sua verifica莽茫o educacional Dify foi rejeitada.',
-  rejectContent: 'Infelizmente, voc锚 n茫o 茅 eleg铆vel para o status de Educa莽茫o Verificada e, portanto, n茫o pode receber o cupom exclusivo de 100% para o Plano Profissional Dify se usar este endere莽o de e-mail.',
-  successTitle: 'Voc锚 Tem a Educa莽茫o Dify Verificada',
-  submitError: 'A submiss茫o do formul谩rio falhou. Por favor, tente novamente mais tarde.',
-}
-
-export default translation
diff --git a/i18n/pt-BR/plugin-tags.ts b/i18n/pt-BR/plugin-tags.ts
deleted file mode 100644
index 08f050b..0000000
--- a/i18n/pt-BR/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    other: 'Outro',
-    medical: 'M茅dico',
-    videos: 'V铆deos',
-    productivity: 'Produtividade',
-    utilities: 'Utilidades',
-    social: 'Social',
-    finance: 'Financiar',
-    image: 'Imagem',
-    education: 'Educa莽茫o',
-    design: 'Projetar',
-    business: 'Neg贸cio',
-    weather: 'Tempo',
-    news: 'Not铆cia',
-    agent: 'Agente',
-    entertainment: 'Entretenimento',
-    search: 'Procurar',
-    travel: 'Viajar',
-  },
-  allTags: 'Todas as tags',
-  searchTags: 'Tags de pesquisa',
-}
-
-export default translation
diff --git a/i18n/pt-BR/plugin.ts b/i18n/pt-BR/plugin.ts
deleted file mode 100644
index c02f9cb..0000000
--- a/i18n/pt-BR/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    extensions: 'Extens玫es',
-    all: 'Todo',
-    bundles: 'Pacotes',
-    models: 'Modelos',
-    agents: 'Estrat茅gias do agente',
-    tools: 'Ferramentas',
-  },
-  categorySingle: {
-    model: 'Modelo',
-    bundle: 'Pacote',
-    agent: 'Estrat茅gia do agente',
-    extension: 'Extens茫o',
-    tool: 'Ferramenta',
-  },
-  list: {
-    source: {
-      marketplace: 'Instalar do Marketplace',
-      github: 'Instalar do GitHub',
-      local: 'Instalar a partir do arquivo de pacote local',
-    },
-    noInstalled: 'Nenhum plug-in instalado',
-    notFound: 'Nenhum plugin encontrado',
-  },
-  source: {
-    local: 'Arquivo de pacote local',
-    github: 'GitHub',
-    marketplace: 'Mercado',
-  },
-  detailPanel: {
-    categoryTip: {
-      debugging: 'Plugin de depura莽茫o',
-      marketplace: 'Instalado do Marketplace',
-      local: 'Plug-in local',
-      github: 'Instalado a partir do Github',
-    },
-    operation: {
-      checkUpdate: 'Verifique a atualiza莽茫o',
-      install: 'Instalar',
-      update: 'Atualiza莽茫o',
-      info: 'Informa莽玫es do plugin',
-      detail: 'Detalhes',
-      remove: 'Retirar',
-      viewDetail: 'Ver detalhes',
-    },
-    toolSelector: {
-      uninstalledLink: 'Gerenciar em plug-ins',
-      unsupportedContent2: 'Clique para mudar de vers茫o.',
-      auto: 'Autom谩tico',
-      title: 'Adicionar ferramenta',
-      params: 'CONFIGURA脟脙O DE RACIOC脥NIO',
-      toolLabel: 'Ferramenta',
-      paramsTip1: 'Controla os par芒metros de infer锚ncia do LLM.',
-      descriptionLabel: 'Descri莽茫o da ferramenta',
-      uninstalledContent: 'Este plug-in 茅 instalado a partir do reposit贸rio local/GitHub. Por favor, use ap贸s a instala莽茫o.',
-      paramsTip2: 'Quando \'Autom谩tico\' est谩 desativado, o valor padr茫o 茅 usado.',
-      placeholder: 'Selecione uma ferramenta...',
-      empty: 'Clique no bot茫o \'+\' para adicionar ferramentas. Voc锚 pode adicionar v谩rias ferramentas.',
-      settings: 'CONFIGURA脟脮ES DO USU脕RIO',
-      unsupportedContent: 'A vers茫o do plug-in instalada n茫o fornece essa a莽茫o.',
-      descriptionPlaceholder: 'Breve descri莽茫o da finalidade da ferramenta, por exemplo, obter a temperatura para um local espec铆fico.',
-      uninstalledTitle: 'Ferramenta n茫o instalada',
-      unsupportedTitle: 'A莽茫o sem suporte',
-    },
-    serviceOk: 'Servi莽o OK',
-    endpointsTip: 'Este plug-in fornece funcionalidades espec铆ficas por meio de endpoints e voc锚 pode configurar v谩rios conjuntos de endpoints para o workspace atual.',
-    strategyNum: '{{num}} {{estrat茅gia}} INCLUSO',
-    endpointDisableContent: 'Gostaria de desativar {{name}}?',
-    endpointDeleteContent: 'Gostaria de remover {{name}}?',
-    endpointsEmpty: 'Clique no bot茫o \'+\' para adicionar um endpoint',
-    configureModel: 'Configurar modelo',
-    endpointModalDesc: 'Uma vez configurados, os recursos fornecidos pelo plug-in por meio de endpoints de API podem ser usados.',
-    endpointDeleteTip: 'Remover endpoint',
-    endpointDisableTip: 'Desativar ponto de extremidade',
-    modelNum: '{{num}} MODELOS INCLU脥DOS',
-    actionNum: '{{num}} {{a莽茫o}} INCLUSO',
-    switchVersion: 'Vers茫o do Switch',
-    endpoints: 'Extremidade',
-    disabled: 'Desactivado',
-    configureApp: 'Configurar aplicativo',
-    configureTool: 'Ferramenta de configura莽茫o',
-    endpointsDocLink: 'Veja o documento',
-    endpointModalTitle: 'Ponto de extremidade de configura莽茫o',
-  },
-  debugInfo: {
-    title: 'Depura莽茫o',
-    viewDocs: 'Ver documentos',
-  },
-  privilege: {
-    whoCanInstall: 'Quem pode instalar e gerenciar plugins?',
-    admins: 'Administradores',
-    noone: 'Ningu茅m',
-    whoCanDebug: 'Quem pode depurar plugins?',
-    title: 'Prefer锚ncias de plug-ins',
-    everyone: 'Todos',
-  },
-  pluginInfoModal: {
-    repository: 'Reposit贸rio',
-    title: 'Informa莽玫es do plugin',
-    packageName: 'Pacote',
-    release: 'Soltar',
-  },
-  action: {
-    deleteContentLeft: 'Gostaria de remover',
-    deleteContentRight: 'plugin?',
-    delete: 'Remover plugin',
-    pluginInfo: 'Informa莽玫es do plugin',
-    checkForUpdates: 'Verifique se h谩 atualiza莽玫es',
-    usedInApps: 'Este plugin est谩 sendo usado em aplicativos {{num}}.',
-  },
-  installModal: {
-    labels: {
-      version: 'Vers茫o',
-      repository: 'Reposit贸rio',
-      package: 'Pacote',
-    },
-    installPlugin: 'Instale o plugin',
-    close: 'Fechar',
-    installedSuccessfullyDesc: 'O plugin foi instalado com sucesso.',
-    next: 'Pr贸ximo',
-    installFailedDesc: 'O plug-in foi instalado falhou.',
-    installedSuccessfully: 'Instala莽茫o bem-sucedida',
-    install: 'Instalar',
-    installFailed: 'Falha na instala莽茫o',
-    readyToInstallPackages: 'Prestes a instalar os seguintes plugins {{num}}',
-    back: 'Voltar',
-    installComplete: 'Instala莽茫o conclu铆da',
-    readyToInstallPackage: 'Prestes a instalar o seguinte plugin',
-    cancel: 'Cancelar',
-    fromTrustSource: 'Certifique-se de instalar apenas plug-ins de uma <trustSource>fonte confi谩vel</trustSource>.',
-    pluginLoadError: 'Erro de carregamento do plug-in',
-    readyToInstall: 'Prestes a instalar o seguinte plugin',
-    pluginLoadErrorDesc: 'Este plugin n茫o ser谩 instalado',
-    uploadFailed: 'Falha no upload',
-    installing: 'Instalar...',
-    uploadingPackage: 'Carregando {{packageName}} ...',
-    dropPluginToInstall: 'Solte o pacote de plug-in aqui para instalar',
-  },
-  installFromGitHub: {
-    selectVersionPlaceholder: 'Selecione uma vers茫o',
-    updatePlugin: 'Atualizar plugin do GitHub',
-    installPlugin: 'Instale o plugin do GitHub',
-    gitHubRepo: 'Reposit贸rio GitHub',
-    installFailed: 'Falha na instala莽茫o',
-    selectVersion: 'Selecione a vers茫o',
-    uploadFailed: 'Falha no upload',
-    installedSuccessfully: 'Instala莽茫o bem-sucedida',
-    installNote: 'Certifique-se de instalar apenas plug-ins de uma fonte confi谩vel.',
-    selectPackagePlaceholder: 'Selecione um pacote',
-    selectPackage: 'Selecione o pacote',
-  },
-  upgrade: {
-    title: 'Instale o plugin',
-    successfulTitle: 'Instala莽茫o bem-sucedida',
-    close: 'Fechar',
-    upgrading: 'Instalar...',
-    upgrade: 'Instalar',
-    description: 'Prestes a instalar o seguinte plugin',
-    usedInApps: 'Usado em aplicativos {{num}}',
-  },
-  error: {
-    inValidGitHubUrl: 'URL do GitHub inv谩lida. Insira um URL v谩lido no formato: https://github.com/owner/repo',
-    noReleasesFound: 'Nenhuma vers茫o encontrada. Verifique o reposit贸rio GitHub ou a URL de entrada.',
-    fetchReleasesError: 'N茫o 茅 poss铆vel recuperar vers玫es. Por favor, tente novamente mais tarde.',
-  },
-  marketplace: {
-    sortOption: {
-      mostPopular: 'Mais popular',
-      firstReleased: 'Lan莽ado pela primeira vez',
-      recentlyUpdated: 'Atualizado recentemente',
-      newlyReleased: 'Rec茅m-lan莽ado',
-    },
-    sortBy: 'Cidade negra',
-    viewMore: 'Ver mais',
-    and: 'e',
-    pluginsResult: '{{num}} resultados',
-    empower: 'Capacite seu desenvolvimento de IA',
-    difyMarketplace: 'Mercado Dify',
-    moreFrom: 'Mais do Marketplace',
-    noPluginFound: 'Nenhum plugin encontrado',
-    discover: 'Descobrir',
-    verifiedTip: 'Verificado pelo Dify',
-    partnerTip: 'Verificado por um parceiro da Dify',
-  },
-  task: {
-    installedError: 'Falha na instala莽茫o dos plug-ins {{errorLength}}',
-    installingWithSuccess: 'Instalando plugins {{installingLength}}, {{successLength}} sucesso.',
-    installError: '{{errorLength}} plugins falha ao instalar, clique para ver',
-    installingWithError: 'Instalando plug-ins {{installingLength}}, {{successLength}} sucesso, {{errorLength}} falhou',
-    installing: 'Instalando plugins {{installingLength}}, 0 feito.',
-    clearAll: 'Apagar tudo',
-  },
-  installAction: 'Instalar',
-  endpointsEnabled: '{{num}} conjuntos de endpoints habilitados',
-  submitPlugin: 'Enviar plugin',
-  searchPlugins: 'Pesquisar plugins',
-  searchInMarketplace: 'Pesquisar no Marketplace',
-  installPlugin: 'Instale o plugin',
-  from: 'De',
-  searchTools: 'Ferramentas de pesquisa...',
-  search: 'Procurar',
-  fromMarketplace: 'Do Marketplace',
-  allCategories: 'Todas as categorias',
-  install: '{{num}} instala',
-  searchCategories: 'Categorias de pesquisa',
-  findMoreInMarketplace: 'Saiba mais no Marketplace',
-  installFrom: 'INSTALAR DE',
-  metadata: {
-    title: 'Plugins',
-  },
-  difyVersionNotCompatible: 'A vers茫o atual do Dify n茫o 茅 compat铆vel com este plugin, por favor atualize para a vers茫o m铆nima exigida: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/pt-BR/time.ts b/i18n/pt-BR/time.ts
deleted file mode 100644
index fcf25ca..0000000
--- a/i18n/pt-BR/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Wed: 'Quarta-feira',
-    Tue: 'Ter莽a-feira',
-    Sun: 'Sol',
-    Thu: 'Quinta-feira',
-    Fri: 'Sexta',
-    Sat: 'S谩bado',
-    Mon: 'Mon',
-  },
-  months: {
-    May: 'Maio',
-    February: 'Fevereiro',
-    April: 'abril',
-    September: 'Setembro',
-    March: 'Mar莽o',
-    December: 'Dezembro',
-    November: 'Novembro',
-    October: 'Outubro',
-    July: 'Julho',
-    August: 'Agosto',
-    June: 'junho',
-    January: 'Janeiro',
-  },
-  operation: {
-    pickDate: 'Escolher Data',
-    ok: 'OK',
-    cancel: 'Cancelar',
-    now: 'Agora',
-  },
-  title: {
-    pickTime: 'Escolha o Hor谩rio',
-  },
-  defaultPlaceholder: 'Escolha um hor谩rio...',
-}
-
-export default translation
diff --git a/i18n/ro-RO/education.ts b/i18n/ro-RO/education.ts
deleted file mode 100644
index cda0952..0000000
--- a/i18n/ro-RO/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: 'cupom exclusiv 100%',
-    front: 'Sunte葲i acum eligibil pentru statutul de Educa葲ie Verificat膬. V膬 rug膬m s膬 introduce葲i informa葲iile despre educa葲ia dumneavoastr膬 mai jos pentru a finaliza procesul 葯i a primi un',
-    end: 'pentru Planul Profesional Dify.',
-  },
-  form: {
-    schoolName: {
-      placeholder: 'Introduce葲i numele oficial, neabbreviat al 葯colii dumneavoastr膬',
-      title: 'Numele 葮colii Tale',
-    },
-    schoolRole: {
-      option: {
-        teacher: 'Profesor',
-        administrator: 'Administrator 葯colar',
-        student: 'Student',
-      },
-      title: 'Rolul t膬u la 葯coal膬',
-    },
-    terms: {
-      desc: {
-        and: '葯i',
-        front: 'Informa葲iile tale 葯i utilizarea statutului de Educa葲ie Verificat膬 sunt supuse termenilor no葯tri',
-        end: 'Prin trimiterea:',
-        termsOfService: 'Termeni 葯i condi葲ii',
-        privacyPolicy: 'Politica de confiden牛ialitate',
-      },
-      option: {
-        inSchool: 'Confirm c膬 sunt 卯nscris sau angajat la institu葲ia men葲ionat膬. Dify poate solicita dovada 卯nscrierii/angaj膬rii. Dac膬 卯mi reprezint gre葯it eligibilitatea, sunt de acord s膬 pl膬tesc orice taxe ini葲ial renun葲ate pe baza statutului meu educa葲ional.',
-        age: 'Confirm c膬 am cel pu葲in 18 ani',
-      },
-      title: 'Termeni 葯i condi葲ii',
-    },
-  },
-  toVerified: 'Ob葲ine葲i verificarea educa葲iei',
-  submitError: 'Trimiterea formularului a e艧uat. V膬 rug膬m s膬 卯ncerca葲i din nou mai t芒rziu.',
-  rejectContent: 'Din p膬cate, nu e葯ti eligibil pentru statutul de Verificat Educa葲ional 葯i, prin urmare, nu po葲i primi cuponul exclusiv de 100% pentru Planul Profesional Dify dac膬 folose葯ti aceast膬 adres膬 de email.',
-  successTitle: 'Ai ob葲inut educa葲ia Dify verificat膬',
-  learn: '脦nv膬葲a葲i cum s膬 verifica葲i educa葲ia',
-  submit: 'Trimite',
-  emailLabel: 'Emailul t膬u curent',
-  currentSigned: 'CONEXIUNE 脦N PREZENT CA',
-  rejectTitle: 'Verificarea educa葲ional膬 Dify a fost respins膬',
-  successContent: 'Am emis un cupon de discount de 100% pentru planul Professional Dify pe contul dumneavoastr膬. Cuponul este valabil timp de un an, v膬 rug膬m s膬 卯l utiliza葲i 卯n perioada de valabilitate.',
-}
-
-export default translation
diff --git a/i18n/ro-RO/plugin-tags.ts b/i18n/ro-RO/plugin-tags.ts
deleted file mode 100644
index e48732e..0000000
--- a/i18n/ro-RO/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    education: 'Educa葲ie',
-    finance: 'Finan牛a',
-    other: 'Alt',
-    travel: 'C膬l膬torie',
-    news: '葮tiri',
-    utilities: 'Utilit膬牛i',
-    entertainment: 'Divertisment',
-    search: 'C膬utare',
-    productivity: 'Productivitate',
-    design: 'Design',
-    videos: 'Videoclipuri',
-    medical: 'Medical',
-    social: 'Social',
-    agent: 'Agent',
-    business: 'Afacere',
-    weather: 'Vreme',
-    image: 'Imagine',
-  },
-  allTags: 'Toate etichetele',
-  searchTags: 'Etichete de c膬utare',
-}
-
-export default translation
diff --git a/i18n/ro-RO/plugin.ts b/i18n/ro-RO/plugin.ts
deleted file mode 100644
index 4fe0782..0000000
--- a/i18n/ro-RO/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    all: 'Tot',
-    bundles: 'Pachete',
-    agents: 'Strategii pentru agen葲i',
-    tools: 'Instrumente',
-    extensions: 'Extensii',
-    models: 'Modele',
-  },
-  categorySingle: {
-    tool: 'Unealt膬',
-    bundle: 'Pachet',
-    extension: 'Extensie',
-    agent: 'Strategia agentului',
-    model: 'Model',
-  },
-  list: {
-    source: {
-      marketplace: 'Instaleaz膬 din Marketplace',
-      github: 'Instala葲i din GitHub',
-      local: 'Instalare din fi葯ierul pachet local',
-    },
-    noInstalled: 'Nu sunt instalate plugin-uri',
-    notFound: 'Nu au fost g膬site plugin-uri',
-  },
-  source: {
-    local: 'Fi葯ier pachet local',
-    marketplace: 'T芒rg',
-    github: 'GitHub',
-  },
-  detailPanel: {
-    categoryTip: {
-      debugging: 'Plugin de depanare',
-      github: 'Instalat de pe Github',
-      marketplace: 'Instalat din Marketplace',
-      local: 'Plugin local',
-    },
-    operation: {
-      checkUpdate: 'Verifica葲i actualizarea',
-      update: 'Actualiza',
-      viewDetail: 'Vezi detalii',
-      remove: 'Dep膬rta',
-      install: 'Instala',
-      detail: 'Detalii',
-      info: 'Informa葲ii despre plugin',
-    },
-    toolSelector: {
-      unsupportedContent: 'Versiunea de plugin instalat膬 nu ofer膬 aceast膬 ac葲iune.',
-      auto: 'Automat',
-      empty: 'Face葲i clic pe butonul "+" pentru a ad膬uga instrumente. Pute葲i ad膬uga mai multe instrumente.',
-      uninstalledContent: 'Acest plugin este instalat din depozitul local/GitHub. V膬 rug膬m s膬 utiliza葲i dup膬 instalare.',
-      descriptionLabel: 'Descrierea instrumentului',
-      unsupportedContent2: 'Face葲i clic pentru a comuta versiunea.',
-      uninstalledLink: 'Gestiona葲i 卯n pluginuri',
-      paramsTip1: 'Controleaz膬 parametrii de inferen葲膬 LLM.',
-      params: 'CONFIGURAREA RA葰IONAMENTULUI',
-      paramsTip2: 'C芒nd "Automat" este dezactivat, se folose葯te valoarea implicit膬.',
-      settings: 'SET膫RI UTILIZATOR',
-      unsupportedTitle: 'Ac葲iune neacceptat膬',
-      placeholder: 'Selecta葲i un instrument...',
-      title: 'Ad膬ugare instrument',
-      descriptionPlaceholder: 'Scurt膬 descriere a scopului instrumentului, de exemplu, ob葲ine葲i temperatura pentru o anumit膬 loca葲ie.',
-      toolLabel: 'Unealt膬',
-      uninstalledTitle: 'Instrumentul nu este instalat',
-    },
-    endpointDeleteContent: 'Dori葲i s膬 elimina葲i {{name}}?',
-    strategyNum: '{{num}} {{strategie}} INCLUS',
-    configureApp: 'Configura葲i aplica葲ia',
-    actionNum: '{{num}} {{ac葲iune}} INCLUS',
-    endpointsTip: 'Acest plugin ofer膬 func葲ionalit膬葲i specifice prin puncte finale 葯i pute葲i configura mai multe seturi de puncte finale pentru spa葲iul de lucru curent.',
-    switchVersion: 'Versiune de comutare',
-    endpointDisableContent: 'Dori葲i s膬 dezactiva葲i {{name}}?',
-    endpointModalTitle: 'Configura葲i punctul final',
-    endpointDisableTip: 'Dezactiva葲i punctul final',
-    endpointsEmpty: 'Face葲i clic pe butonul "+" pentru a ad膬uga un punct final',
-    endpointDeleteTip: 'Elimina葲i punctul final',
-    disabled: 'Dezactivat',
-    configureTool: 'Instrumentul de configurare',
-    endpointsDocLink: 'Vizualiza葲i documentul',
-    endpoints: 'Capetele',
-    serviceOk: 'Serviciu OK',
-    endpointModalDesc: 'Odat膬 configurate, pot fi utilizate func葲iile furnizate de plugin prin intermediul punctelor finale API.',
-    modelNum: '{{num}} MODELE INCLUSE',
-    configureModel: 'Configurarea modelului',
-  },
-  debugInfo: {
-    viewDocs: 'Vizualiza葲i documentele',
-    title: 'Depanare',
-  },
-  privilege: {
-    whoCanDebug: 'Cine poate depana pluginuri?',
-    everyone: 'Oricine',
-    title: 'Preferin葲e plugin',
-    whoCanInstall: 'Cine poate instala 葯i gestiona plugin-uri?',
-    noone: 'Nimeni',
-    admins: 'Administratori',
-  },
-  pluginInfoModal: {
-    release: 'Elibera',
-    packageName: 'Pachet',
-    title: 'Informa葲ii despre plugin',
-    repository: 'Depozit',
-  },
-  action: {
-    deleteContentRight: 'plugin?',
-    pluginInfo: 'Informa葲ii despre plugin',
-    usedInApps: 'Acest plugin este folosit 卯n aplica葲iile {{num}}.',
-    delete: 'Elimina葲i pluginul',
-    checkForUpdates: 'Verifica葲i dac膬 exist膬 actualiz膬ri',
-    deleteContentLeft: 'Dori葲i s膬 elimina葲i',
-  },
-  installModal: {
-    labels: {
-      version: 'Versiune',
-      package: 'Pachet',
-      repository: 'Depozit',
-    },
-    installing: 'Instalarea...',
-    dropPluginToInstall: 'Arunca葲i pachetul de plugin aici pentru a instala',
-    back: 'Spate',
-    installFailed: 'Instalarea a e葯uat',
-    pluginLoadError: 'Eroare de 卯nc膬rcare a pluginului',
-    installComplete: 'Instalare finalizat膬',
-    installedSuccessfully: 'Instalarea cu succes',
-    cancel: 'Anula',
-    install: 'Instala',
-    uploadingPackage: '脦nc膬rcarea {{packageName}}...',
-    installPlugin: 'Instaleaz膬 pluginul',
-    close: '脦nchide',
-    readyToInstallPackages: 'Despre instalarea urm膬toarelor plugin-uri {{num}}',
-    next: 'Urm膬tor',
-    installFailedDesc: 'Pluginul a fost instalat a e葯uat.',
-    uploadFailed: '脦nc膬rcarea a e葯uat',
-    fromTrustSource: 'V膬 rug膬m s膬 v膬 asigura葲i c膬 instala葲i plugin-uri numai dintr-o <trustSource>surs膬 de 卯ncredere</trustSource>.',
-    readyToInstallPackage: 'Despre instalarea urm膬torului plugin',
-    pluginLoadErrorDesc: 'Acest plugin nu va fi instalat',
-    installedSuccessfullyDesc: 'Pluginul a fost instalat cu succes.',
-    readyToInstall: 'Despre instalarea urm膬torului plugin',
-  },
-  installFromGitHub: {
-    installFailed: 'Instalarea a e葯uat',
-    updatePlugin: 'Actualiza葲i pluginul de pe GitHub',
-    uploadFailed: '脦nc膬rcarea a e葯uat',
-    selectVersionPlaceholder: 'V膬 rug膬m s膬 selecta葲i o versiune',
-    installNote: 'V膬 rug膬m s膬 v膬 asigura葲i c膬 instala葲i plugin-uri numai dintr-o surs膬 de 卯ncredere.',
-    gitHubRepo: 'Depozit GitHub',
-    selectPackagePlaceholder: 'V膬 rug膬m s膬 selecta葲i un pachet',
-    selectPackage: 'Selecteaz膬 pachetul',
-    selectVersion: 'Selecteaz膬 versiunea',
-    installPlugin: 'Instala葲i pluginul de pe GitHub',
-    installedSuccessfully: 'Instalarea cu succes',
-  },
-  upgrade: {
-    close: '脦nchide',
-    upgrade: 'Instala',
-    description: 'Despre instalarea urm膬torului plugin',
-    upgrading: 'Instalarea...',
-    successfulTitle: 'Instalarea cu succes',
-    title: 'Instaleaz膬 pluginul',
-    usedInApps: 'Folosit 卯n {{num}} aplica葲ii',
-  },
-  error: {
-    fetchReleasesError: 'Nu se pot recupera versiunile. V膬 rug膬m s膬 卯ncerca葲i din nou mai t芒rziu.',
-    inValidGitHubUrl: 'URL GitHub nevalid. V膬 rug膬m s膬 introduce葲i o adres膬 URL valid膬 卯n formatul: https://github.com/owner/repo',
-    noReleasesFound: 'Nu s-au g膬sit eliber膬ri. V膬 rug膬m s膬 verifica葲i depozitul GitHub sau URL-ul de intrare.',
-  },
-  marketplace: {
-    sortOption: {
-      newlyReleased: 'Nou lansat',
-      recentlyUpdated: 'Actualizat recent',
-      mostPopular: 'Cele mai populare',
-      firstReleased: 'Prima lansare',
-    },
-    noPluginFound: 'Nu s-a g膬sit niciun plugin',
-    sortBy: 'Ora葯ul negru',
-    discover: 'Descoperi',
-    empower: '脦mbun膬t膬葲e葯te-葲i dezvoltarea AI',
-    pluginsResult: '{{num}} rezultate',
-    difyMarketplace: 'Pia葲a Dify',
-    moreFrom: 'Mai multe din Marketplace',
-    and: '葯i',
-    viewMore: 'Vezi mai mult',
-    partnerTip: 'Verificat de un partener Dify',
-    verifiedTip: 'Verificat de Dify',
-  },
-  task: {
-    installError: '{{errorLength}} plugin-urile nu s-au instalat, face葲i clic pentru a vizualiza',
-    clearAll: '葮terge葲i tot',
-    installedError: '{{errorLength}} plugin-urile nu s-au instalat',
-    installingWithError: 'Instalarea pluginurilor {{installingLength}}, {{successLength}} succes, {{errorLength}} e葯uat',
-    installingWithSuccess: 'Instalarea pluginurilor {{installingLength}}, {{successLength}} succes.',
-    installing: 'Instalarea pluginurilor {{installingLength}}, 0 terminat.',
-  },
-  submitPlugin: 'Trimite plugin',
-  fromMarketplace: 'Din Marketplace',
-  from: 'Din',
-  findMoreInMarketplace: 'Afl膬 mai multe 卯n Marketplace',
-  searchInMarketplace: 'C膬utare 卯n Marketplace',
-  searchTools: 'Instrumente de c膬utare...',
-  installFrom: 'INSTALEAZ膫 DE LA',
-  allCategories: 'Toate categoriile',
-  searchPlugins: 'Pluginuri de c膬utare',
-  installPlugin: 'Instaleaz膬 pluginul',
-  install: '{{num}} instal膬ri',
-  search: 'C膬utare',
-  installAction: 'Instala',
-  endpointsEnabled: '{{num}} seturi de puncte finale activate',
-  searchCategories: 'Categorii de c膬utare',
-  metadata: {
-    title: 'Pluginuri',
-  },
-  difyVersionNotCompatible: 'Versiunea curent膬 Dify nu este compatibil膬 cu acest plugin, v膬 rug膬m s膬 face葲i upgrade la versiunea minim膬 necesar膬: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/ro-RO/time.ts b/i18n/ro-RO/time.ts
deleted file mode 100644
index 2b40803..0000000
--- a/i18n/ro-RO/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Sun: 'Soare',
-    Thu: 'Joia',
-    Wed: 'Miercuri',
-    Tue: 'Mar葲i',
-    Sat: 'Sat',
-    Mon: 'Mon',
-    Fri: 'Vineri',
-  },
-  months: {
-    December: 'Decembrie',
-    February: 'Februarie',
-    April: 'Aprilie',
-    August: 'August',
-    September: 'septembrie',
-    March: 'Martie',
-    May: 'Mai',
-    July: 'Iulie',
-    June: 'Iunie',
-    October: 'Octombrie',
-    November: 'Noiembrie',
-    January: 'ianuarie',
-  },
-  operation: {
-    cancel: 'Anuleaz膬',
-    pickDate: 'Alege o dat膬',
-    now: 'Acum',
-    ok: 'Bine',
-  },
-  title: {
-    pickTime: 'Alege葲i timpul',
-  },
-  defaultPlaceholder: 'Alege o or膬...',
-}
-
-export default translation
diff --git a/i18n/ru-RU/education.ts b/i18n/ru-RU/education.ts
deleted file mode 100644
index b614f04..0000000
--- a/i18n/ru-RU/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    end: '写谢褟 锌褉芯褎械褋褋懈芯薪邪谢褜薪芯谐芯 锌谢邪薪邪 Dify.',
-    front: '孝械锌械褉褜 胁褘 懈屑械械褌械 锌褉邪胁芯 薪邪 褋褌邪褌褍褋 "袩褉芯胁械褉械薪薪芯械 芯斜褉邪蟹芯胁邪薪懈械". 袩芯卸邪谢褍泄褋褌邪, 胁胁械写懈褌械 褋胁芯懈 芯斜褉邪蟹芯胁邪褌械谢褜薪褘械 写邪薪薪褘械 薪懈卸械, 褔褌芯斜褘 蟹邪胁械褉褕懈褌褜 锌褉芯褑械褋褋 懈 锌芯谢褍褔懈褌褜',
-    coupon: '褝泻褋泻谢褞蟹懈胁薪褘泄 100% 泻褍锌芯薪',
-  },
-  form: {
-    schoolName: {
-      title: '袧邪蟹胁邪薪懈械 胁邪褕械泄 褕泻芯谢褘',
-      placeholder: '袙胁械写懈褌械 芯褎懈褑懈邪谢褜薪芯械, 锌芯谢薪芯械 薪邪蟹胁邪薪懈械 胁邪褕械泄 褕泻芯谢褘',
-    },
-    schoolRole: {
-      option: {
-        student: '小褌褍写械薪褌',
-        teacher: '校褔懈褌械谢褜',
-        administrator: '楔泻芯谢褜薪褘泄 邪写屑懈薪懈褋褌褉邪褌芯褉',
-      },
-      title: '袙邪褕邪 褕泻芯谢褜薪邪褟 褉芯谢褜',
-    },
-    terms: {
-      desc: {
-        termsOfService: '校褋谢芯胁懈褟 芯斜褋谢褍卸懈胁邪薪懈褟',
-        front: '袙邪褕邪 懈薪褎芯褉屑邪褑懈褟 懈 懈褋锌芯谢褜蟹芯胁邪薪懈械 褋褌邪褌褍褋邪 袩褉芯胁械褉械薪薪芯械 芯斜褉邪蟹芯胁邪薪懈械 锌芯写谢械卸邪褌 薪邪褕懈屑',
-        privacyPolicy: '袩芯谢懈褌懈泻邪 泻芯薪褎懈写械薪褑懈邪谢褜薪芯褋褌懈',
-        and: '懈',
-        end: '. 袨褌锌褉邪胁谢褟褟:',
-      },
-      option: {
-        age: '携 锌芯写褌胁械褉卸写邪褞, 褔褌芯 屑薪械 薪械 屑械薪褜褕械 18 谢械褌',
-        inSchool: '携 锌芯写褌胁械褉卸写邪褞, 褔褌芯 褟 蟹邪褔懈褋谢械薪 懈谢懈 褉邪斜芯褌邪褞 胁 褍泻邪蟹邪薪薪芯泄 褍褔褉械卸写械薪懈懈. Dify 屑芯卸械褌 蟹邪锌褉芯褋懈褌褜 锌芯写褌胁械褉卸写械薪懈械 蟹邪褔懈褋谢械薪懈褟/褌褉褍写芯褍褋褌褉芯泄褋褌胁邪. 袝褋谢懈 褟 薪械锌褉邪胁懈谢褜薪芯 褍泻邪卸褍 褋胁芯褞 锌褉邪胁芯芯斜谢邪写邪薪薪芯褋褌褜, 褟 褋芯谐谢邪褋械薪 芯锌谢邪褌懈褌褜 谢褞斜褘械 褋斜芯褉褘, 泻芯褌芯褉褘械 懈蟹薪邪褔邪谢褜薪芯 斜褘谢懈 芯褌屑械薪械薪褘 薪邪 芯褋薪芯胁邪薪懈懈 屑芯械谐芯 芯斜褉邪蟹芯胁邪褌械谢褜薪芯谐芯 褋褌邪褌褍褋邪.',
-      },
-      title: '校褋谢芯胁懈褟 懈 褋芯谐谢邪褕械薪懈褟',
-    },
-  },
-  submit: '袨褌锌褉邪胁懈褌褜',
-  rejectTitle: '袙邪褕邪 芯斜褉邪蟹芯胁邪褌械谢褜薪邪褟 锌褉芯胁械褉泻邪 Dify 斜褘谢邪 芯褌泻谢芯薪械薪邪',
-  currentSigned: '袙 袛袗袧袧蝎袡 袦袨袦袝袧孝 袙啸袨袛 袙 袩袪袨肖袠袥鞋 袣袗袣',
-  toVerified: '袩芯谢褍褔懈褌械 锌芯写褌胁械褉卸写械薪懈械 芯斜褉邪蟹芯胁邪薪懈褟',
-  learn: '校蟹薪邪泄褌械, 泻邪泻 锌芯谢褍褔懈褌褜 锌芯写褌胁械褉卸写械薪懈械 芯斜褉邪蟹芯胁邪薪懈褟',
-  submitError: '袨褌锌褉邪胁泻邪 褎芯褉屑褘 薪械 褍写邪谢邪褋褜. 袩芯卸邪谢褍泄褋褌邪, 锌芯锌褉芯斜褍泄褌械 锌芯蟹卸械.',
-  successTitle: '袙褘 锌芯谢褍褔懈谢懈 锌芯写褌胁械褉卸写械薪薪芯械 芯斜褉邪蟹芯胁邪薪懈械 Dify',
-  emailLabel: '袙邪褕 褌械泻褍褖懈泄 邪写褉械褋 褝谢械泻褌褉芯薪薪芯泄 锌芯褔褌褘',
-  rejectContent: '袣 褋芯卸邪谢械薪懈褞, 胁褘 薪械 懈屑械械褌械 锌褉邪胁邪 薪邪 褋褌邪褌褍褋 袩褉芯胁械褉械薪薪芯谐芯 芯斜褉邪蟹芯胁邪薪懈械屑 懈, 褋谢械写芯胁邪褌械谢褜薪芯, 薪械 屑芯卸械褌械 锌芯谢褍褔懈褌褜 褝泻褋泻谢褞蟹懈胁薪褘泄 泻褍锌芯薪 薪邪 100% 写谢褟 锌褉芯褎械褋褋懈芯薪邪谢褜薪芯谐芯 锌谢邪薪邪 Dify, 械褋谢懈 胁褘 懈褋锌芯谢褜蟹褍械褌械 褝褌芯褌 邪写褉械褋 褝谢械泻褌褉芯薪薪芯泄 锌芯褔褌褘.',
-  successContent: '袦褘 胁褘写邪谢懈 泻褍锌芯薪 薪邪 100% 褋泻懈写泻褍 薪邪 锌谢邪薪 Dify Professional 写谢褟 胁邪褕械谐芯 邪泻泻邪褍薪褌邪. 袣褍锌芯薪 写械泄褋褌胁懈褌械谢械薪 胁 褌械褔械薪懈械 芯写薪芯谐芯 谐芯写邪, 锌芯卸邪谢褍泄褋褌邪, 懈褋锌芯谢褜蟹褍泄褌械 械谐芯 胁 褌械褔械薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟.',
-}
-
-export default translation
diff --git a/i18n/ru-RU/plugin-tags.ts b/i18n/ru-RU/plugin-tags.ts
deleted file mode 100644
index d6dab2a..0000000
--- a/i18n/ru-RU/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    business: '袛械谢芯',
-    videos: '袙懈写械芯',
-    travel: '袩褍褌械褕械褋褌胁芯胁邪褌褜',
-    social: '袨斜褖械褋褌胁械薪薪褘泄',
-    agent: '袗谐械薪褌',
-    search: '袠褋泻邪褌褜',
-    design: '袩褉芯械泻褌懈褉芯胁邪褌褜',
-    image: '袨斜褉邪蟹',
-    news: '袧芯胁芯褋褌懈',
-    utilities: '袣芯屑屑褍薪邪谢褜薪褘械 褍褋谢褍谐懈',
-    weather: '袩芯谐芯写邪',
-    medical: '袦械写懈褑懈薪褋泻懈泄',
-    other: '袛褉褍谐芯泄',
-    finance: '肖懈薪邪薪褋懈褉芯胁邪褌褜',
-    education: '袨斜褉邪蟹芯胁邪薪懈械',
-    productivity: '袩褉芯写褍泻褌懈胁薪芯褋褌褜',
-    entertainment: '袪邪蟹胁谢械褔械薪懈械',
-  },
-  allTags: '袙褋械 褌械谐懈',
-  searchTags: '袩芯懈褋泻 褌械谐芯胁',
-}
-
-export default translation
diff --git a/i18n/ru-RU/plugin.ts b/i18n/ru-RU/plugin.ts
deleted file mode 100644
index 9d99bc1..0000000
--- a/i18n/ru-RU/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    extensions: '袪邪褋褕懈褉械薪懈褟',
-    tools: '袠薪褋褌褉褍屑械薪褌褘',
-    models: '袦芯写械谢懈',
-    all: '袙褋械',
-    bundles: '袩邪泻械褌褘',
-    agents: '袗谐械薪褌褋泻懈械 褋褌褉邪褌械谐懈懈',
-  },
-  categorySingle: {
-    bundle: '小胁褟蟹泻邪',
-    agent: '袗谐械薪褌褋泻邪褟 褋褌褉邪褌械谐懈褟',
-    model: '袦芯写械谢褜',
-    extension: '袪邪褋褕懈褉械薪懈械',
-    tool: '袠薪褋褌褉褍屑械薪褌',
-  },
-  list: {
-    source: {
-      github: '校褋褌邪薪芯胁泻邪 褋 GitHub',
-      marketplace: '校褋褌邪薪芯胁泻邪 懈蟹 Marketplace',
-      local: '校褋褌邪薪芯胁泻邪 懈蟹 谢芯泻邪谢褜薪芯谐芯 褎邪泄谢邪 锌邪泻械褌邪',
-    },
-    notFound: '袩谢邪谐懈薪褘 薪械 薪邪泄写械薪褘',
-    noInstalled: '袩谢邪谐懈薪褘 薪械 褍褋褌邪薪芯胁谢械薪褘',
-  },
-  source: {
-    github: '小邪泄褌 GitHub',
-    marketplace: '袪褘薪芯泻',
-    local: '袥芯泻邪谢褜薪褘泄 褎邪泄谢 锌邪泻械褌邪',
-  },
-  detailPanel: {
-    categoryTip: {
-      github: '校褋褌邪薪芯胁谢械薪芯 褋 Github',
-      debugging: '袩谢邪谐懈薪 写谢褟 芯褌谢邪写泻懈',
-      local: '袥芯泻邪谢褜薪褘泄 锌谢邪谐懈薪',
-      marketplace: '校褋褌邪薪芯胁谢械薪芯 懈蟹 Marketplace',
-    },
-    operation: {
-      viewDetail: '袩芯写褉芯斜薪械械',
-      detail: '袩芯写褉芯斜薪芯褋褌懈',
-      info: '袠薪褎芯褉屑邪褑懈褟 芯 锌谢邪谐懈薪械',
-      remove: '校斜懈褉邪褌褜',
-      install: '校褋褌邪薪邪胁谢懈胁邪褌褜',
-      update: '袨斜薪芯胁谢褟褌褜',
-      checkUpdate: '袩褉芯胁械褉懈褌褜 芯斜薪芯胁谢械薪懈械',
-    },
-    toolSelector: {
-      placeholder: '袙褘斜械褉懈褌械 懈薪褋褌褉褍屑械薪褌...',
-      auto: '袗胁褌芯屑邪褌懈褔械褋泻懈',
-      title: '袛芯斜邪胁懈褌褜 懈薪褋褌褉褍屑械薪褌',
-      uninstalledTitle: '袠薪褋褌褉褍屑械薪褌 薪械 褍褋褌邪薪芯胁谢械薪',
-      descriptionLabel: '袨锌懈褋邪薪懈械 懈薪褋褌褉褍屑械薪褌邪',
-      unsupportedTitle: '袧械锌芯写写械褉卸懈胁邪械屑芯械 写械泄褋褌胁懈械',
-      settings: '袩袨袥鞋袟袨袙袗孝袝袥鞋小袣袠袝 袧袗小孝袪袨袡袣袠',
-      unsupportedContent: '校褋褌邪薪芯胁谢械薪薪邪褟 胁械褉褋懈褟 锌谢邪谐懈薪邪 薪械 锌褉械写褍褋屑邪褌褉懈胁邪械褌 褝褌芯谐芯 写械泄褋褌胁懈褟.',
-      empty: '袧邪卸屑懈褌械 泻薪芯锌泻褍 芦+禄, 褔褌芯斜褘 写芯斜邪胁懈褌褜 懈薪褋褌褉褍屑械薪褌褘. 袙褘 屑芯卸械褌械 写芯斜邪胁懈褌褜 薪械褋泻芯谢褜泻芯 懈薪褋褌褉褍屑械薪褌芯胁.',
-      uninstalledContent: '协褌芯褌 锌谢邪谐懈薪 褍褋褌邪薪邪胁谢懈胁邪械褌褋褟 懈蟹 褉械锌芯蟹懈褌芯褉懈褟 local/GitHub. 袩芯卸邪谢褍泄褋褌邪, 懈褋锌芯谢褜蟹褍泄褌械 锌芯褋谢械 褍褋褌邪薪芯胁泻懈.',
-      paramsTip2: '袣芯谐写邪 锌邪褉邪屑械褌褉 芦袗胁褌芯屑邪褌懈褔械褋泻懈禄 胁褘泻谢褞褔械薪, 懈褋锌芯谢褜蟹褍械褌褋褟 蟹薪邪褔械薪懈械 锌芯 褍屑芯谢褔邪薪懈褞.',
-      toolLabel: '袠薪褋褌褉褍屑械薪褌',
-      paramsTip1: '校锌褉邪胁谢褟械褌 锌邪褉邪屑械褌褉邪屑懈 胁褘胁芯写邪 LLM.',
-      descriptionPlaceholder: '袣褉邪褌泻芯械 芯锌懈褋邪薪懈械 薪邪蟹薪邪褔械薪懈褟 懈薪褋褌褉褍屑械薪褌邪, 薪邪锌褉懈屑械褉, 锌芯谢褍褔械薪懈械 褌械屑锌械褉邪褌褍褉褘 写谢褟 泻芯薪泻褉械褌薪芯谐芯 屑械褋褌邪.',
-      params: '袣袨袧肖袠袚校袪袗笑袠携 袪袗小小校袞袛袝袧袠袡',
-      unsupportedContent2: '袧邪卸屑懈褌械, 褔褌芯斜褘 锌械褉械泻谢褞褔懈褌褜 胁械褉褋懈褞.',
-      uninstalledLink: '校锌褉邪胁谢械薪懈械 胁 锌谢邪谐懈薪邪褏',
-    },
-    configureTool: '袠薪褋褌褉褍屑械薪褌 薪邪褋褌褉芯泄泻懈',
-    endpointsTip: '协褌芯褌 锌谢邪谐懈薪 锌褉械写芯褋褌邪胁谢褟械褌 芯锌褉械写械谢械薪薪褘械 褎褍薪泻褑懈芯薪邪谢褜薪褘械 胁芯蟹屑芯卸薪芯褋褌懈 褔械褉械蟹 泻芯薪械褔薪褘械 褌芯褔泻懈, 懈 胁褘 屑芯卸械褌械 薪邪褋褌褉芯懈褌褜 薪械褋泻芯谢褜泻芯 薪邪斜芯褉芯胁 泻芯薪械褔薪褘褏 褌芯褔械泻 写谢褟 褌械泻褍褖械泄 褉邪斜芯褔械泄 芯斜谢邪褋褌懈.',
-    endpointDeleteTip: '校写邪谢懈褌褜 泻芯薪械褔薪褍褞 褌芯褔泻褍',
-    disabled: '袧械褌褉褍写芯褋锌芯褋芯斜薪褘泄',
-    serviceOk: '校褋谢褍谐邪 袨袣',
-    configureApp: '袧邪褋褌褉芯泄泻邪 锌褉懈谢芯卸械薪懈褟',
-    endpointDeleteContent: '啸芯褌械谢懈 斜褘 胁褘 褍写邪谢懈褌褜 {{name}}?',
-    strategyNum: '{{褔懈褋谢芯}} {{小褌褉邪褌械谐懈褟}} 袙袣袥挟效袝袧袧蝎袡',
-    endpoints: '袣芯薪械褔薪褘械 褌芯褔泻懈',
-    modelNum: '{{褔懈褋谢芯}} 袦袨袛袝袥袠 袙 袣袨袦袩袥袝袣孝袝',
-    endpointDisableTip: '袨褌泻谢褞褔懈褌褜 泻芯薪械褔薪褍褞 褌芯褔泻褍',
-    configureModel: '袧邪褋褌褉芯泄泻邪 屑芯写械谢懈',
-    endpointModalDesc: '袩芯褋谢械 薪邪褋褌褉芯泄泻懈 屑芯卸薪芯 懈褋锌芯谢褜蟹芯胁邪褌褜 褎褍薪泻褑懈懈, 锌褉械写芯褋褌邪胁谢褟械屑褘械 锌谢邪谐懈薪芯屑 褔械褉械蟹 泻芯薪械褔薪褘械 褌芯褔泻懈 API.',
-    endpointModalTitle: '袧邪褋褌褉芯泄泻邪 泻芯薪械褔薪芯泄 褌芯褔泻懈',
-    actionNum: '{{褔懈褋谢芯}} {{写械泄褋褌胁懈械}} 袙袣袥挟效袝袧袧蝎袡',
-    endpointDisableContent: '啸芯褌械谢懈 斜褘 胁褘 芯褌泻谢褞褔懈褌褜 {{name}}?',
-    endpointsEmpty: '袧邪卸屑懈褌械 泻薪芯锌泻褍 芦+禄, 褔褌芯斜褘 写芯斜邪胁懈褌褜 泻芯薪械褔薪褍褞 褌芯褔泻褍',
-    switchVersion: '袙械褉褋懈褟 写谢褟 锌械褉械泻谢褞褔邪褌械谢褟',
-    endpointsDocLink: '袩芯褋屑芯褌褉械褌褜 写芯泻褍屑械薪褌',
-  },
-  debugInfo: {
-    title: '袨褌谢邪写泻邪',
-    viewDocs: '袩褉芯褋屑芯褌褉 写芯泻褍屑械薪褌邪褑懈懈',
-  },
-  privilege: {
-    whoCanDebug: '袣褌芯 屑芯卸械褌 芯褌谢邪卸懈胁邪褌褜 锌谢邪谐懈薪褘?',
-    admins: '袗写屑懈薪褘',
-    noone: '袧懈泻褌芯',
-    everyone: '袣邪卸写褘泄',
-    title: '袧邪褋褌褉芯泄泻懈 锌谢邪谐懈薪邪',
-    whoCanInstall: '袣褌芯 屑芯卸械褌 褍褋褌邪薪邪胁谢懈胁邪褌褜 锌谢邪谐懈薪褘 懈 褍锌褉邪胁谢褟褌褜 懈屑懈?',
-  },
-  pluginInfoModal: {
-    packageName: '袩邪泻械褌',
-    title: '袠薪褎芯褉屑邪褑懈褟 芯 锌谢邪谐懈薪械',
-    repository: '啸褉邪薪懈谢懈褖械',
-    release: '袨褌锌褍褋泻邪褌褜',
-  },
-  action: {
-    deleteContentLeft: '袙褘 褏芯褌械谢懈 斜褘 褍写邪谢懈褌褜',
-    pluginInfo: '袠薪褎芯褉屑邪褑懈褟 芯 锌谢邪谐懈薪械',
-    checkForUpdates: '袩褉芯胁械褉泻邪 芯斜薪芯胁谢械薪懈泄',
-    delete: '校写邪谢懈褌褜 锌谢邪谐懈薪',
-    deleteContentRight: '袩谢邪谐懈薪?',
-    usedInApps: '协褌芯褌 锌谢邪谐懈薪 懈褋锌芯谢褜蟹褍械褌褋褟 胁 锌褉懈谢芯卸械薪懈褟褏 {{num}}.',
-  },
-  installModal: {
-    labels: {
-      package: '袩邪泻械褌',
-      version: '袙械褉褋懈褟',
-      repository: '啸褉邪薪懈谢懈褖械',
-    },
-    readyToInstall: '袨 锌褉芯谐褉邪屑屑械 褍褋褌邪薪芯胁泻懈 褋谢械写褍褞褖械谐芯 锌谢邪谐懈薪邪',
-    close: '袟邪泻褉褘胁邪褌褜',
-    installedSuccessfully: '校褋褌邪薪芯胁泻邪 褍褋锌械褕薪邪',
-    dropPluginToInstall: '袩械褉械褌邪褖懈褌械 锌邪泻械褌 锌谢邪谐懈薪邪 褋褞写邪 写谢褟 褍褋褌邪薪芯胁泻懈',
-    uploadFailed: '袨褕懈斜泻邪 蟹邪谐褉褍蟹泻懈',
-    cancel: '袨褌屑械薪邪',
-    installFailed: '袨褕懈斜泻邪 褍褋褌邪薪芯胁泻懈',
-    readyToInstallPackages: '袨 薪械芯斜褏芯写懈屑芯褋褌懈 褍褋褌邪薪芯胁泻懈 褋谢械写褍褞褖懈褏 锌谢邪谐懈薪芯胁 {{num}}',
-    installedSuccessfullyDesc: '袩谢邪谐懈薪 褍褋锌械褕薪芯 褍褋褌邪薪芯胁谢械薪.',
-    installComplete: '袦芯薪褌邪卸 蟹邪胁械褉褕械薪',
-    next: '小谢械写褍褞褖懈泄',
-    fromTrustSource: '校斜械写懈褌械褋褜, 褔褌芯 胁褘 褍褋褌邪薪邪胁谢懈胁邪械褌械 锌谢邪谐懈薪褘 褌芯谢褜泻芯 懈蟹 <trustSource>薪邪写械卸薪芯谐芯 懈褋褌芯褔薪懈泻邪</trustSource>.',
-    install: '校褋褌邪薪邪胁谢懈胁邪褌褜',
-    installPlugin: '校褋褌邪薪芯胁懈褌褜 锌谢邪谐懈薪',
-    installFailedDesc: '袩谢邪谐懈薪 斜褘谢 褍褋褌邪薪芯胁谢械薪 薪械 褍写邪谢芯褋褜.',
-    back: '袧邪蟹邪写',
-    pluginLoadErrorDesc: '协褌芯褌 锌谢邪谐懈薪 薪械 斜褍写械褌 褍褋褌邪薪芯胁谢械薪',
-    installing: '校褋褌邪薪芯胁泻邪...',
-    uploadingPackage: '袟邪谐褉褍蟹泻邪 {{packageName}}...',
-    pluginLoadError: '袨褕懈斜泻邪 蟹邪谐褉褍蟹泻懈 锌谢邪谐懈薪邪',
-    readyToInstallPackage: '袨 锌褉芯谐褉邪屑屑械 褍褋褌邪薪芯胁泻懈 褋谢械写褍褞褖械谐芯 锌谢邪谐懈薪邪',
-  },
-  installFromGitHub: {
-    gitHubRepo: '袪械锌芯蟹懈褌芯褉懈泄 GitHub',
-    selectPackagePlaceholder: '袩芯卸邪谢褍泄褋褌邪, 胁褘斜械褉懈褌械 锌邪泻械褌',
-    installNote: '校斜械写懈褌械褋褜, 褔褌芯 胁褘 褍褋褌邪薪邪胁谢懈胁邪械褌械 锌谢邪谐懈薪褘 褌芯谢褜泻芯 懈蟹 薪邪写械卸薪芯谐芯 懈褋褌芯褔薪懈泻邪.',
-    selectPackage: '袙褘斜褉邪褌褜 锌邪泻械褌',
-    installedSuccessfully: '校褋褌邪薪芯胁泻邪 褍褋锌械褕薪邪',
-    selectVersion: '袙褘斜械褉懈褌械 胁械褉褋懈褞',
-    updatePlugin: '袨斜薪芯胁谢械薪懈械 锌谢邪谐懈薪邪 褋 GitHub',
-    installFailed: '袨褕懈斜泻邪 褍褋褌邪薪芯胁泻懈',
-    uploadFailed: '袨褕懈斜泻邪 蟹邪谐褉褍蟹泻懈',
-    installPlugin: '校褋褌邪薪芯胁泻邪 锌谢邪谐懈薪邪 褋 GitHub',
-    selectVersionPlaceholder: '袩芯卸邪谢褍泄褋褌邪, 胁褘斜械褉懈褌械 胁械褉褋懈褞',
-  },
-  upgrade: {
-    close: '袟邪泻褉褘胁邪褌褜',
-    upgrading: '校褋褌邪薪芯胁泻邪...',
-    successfulTitle: '校褋褌邪薪芯胁泻邪 褍褋锌械褕薪邪',
-    title: '校褋褌邪薪芯胁懈褌褜 锌谢邪谐懈薪',
-    upgrade: '校褋褌邪薪邪胁谢懈胁邪褌褜',
-    usedInApps: '袠褋锌芯谢褜蟹褍械褌褋褟 胁 锌褉懈谢芯卸械薪懈褟褏 {{num}}',
-    description: '袨 锌褉芯谐褉邪屑屑械 褍褋褌邪薪芯胁泻懈 褋谢械写褍褞褖械谐芯 锌谢邪谐懈薪邪',
-  },
-  error: {
-    inValidGitHubUrl: '袧械写芯锌褍褋褌懈屑褘泄 URL-邪写褉械褋 GitHub. 袩芯卸邪谢褍泄褋褌邪, 胁胁械写懈褌械 写械泄褋褌胁懈褌械谢褜薪褘泄 URL-邪写褉械褋 胁 褎芯褉屑邪褌械: https://github.com/owner/repo',
-    noReleasesFound: '袪械谢懈蟹褘 薪械 薪邪泄写械薪褘. 袩芯卸邪谢褍泄褋褌邪, 锌褉芯胁械褉褜褌械 褉械锌芯蟹懈褌芯褉懈泄 GitHub 懈谢懈 胁褏芯写薪芯泄 URL.',
-    fetchReleasesError: '袧械 褍写邪械褌褋褟 锌芯谢褍褔懈褌褜 褉械谢懈蟹褘. 袩芯卸邪谢褍泄褋褌邪, 锌芯胁褌芯褉懈褌械 锌芯锌褘褌泻褍 锌芯蟹卸械.',
-  },
-  marketplace: {
-    sortOption: {
-      newlyReleased: '袧械写邪胁薪芯 胁褘锌褍褖械薪薪褘械',
-      mostPopular: '小邪屑褘械 锌芯锌褍谢褟褉薪褘械',
-      firstReleased: '袙锌械褉胁褘械 胁褘锌褍褖械薪',
-      recentlyUpdated: '袧械写邪胁薪芯 芯斜薪芯胁谢械薪薪褘械',
-    },
-    pluginsResult: '袪械蟹褍谢褜褌邪褌褘 {{num}}',
-    moreFrom: '袘芯谢褜褕械 懈蟹 Marketplace',
-    noPluginFound: '袩谢邪谐懈薪 薪械 薪邪泄写械薪',
-    sortBy: '效械褉薪褘泄 谐芯褉芯写',
-    empower: '袪邪褋褕懈褉褜褌械 胁芯蟹屑芯卸薪芯褋褌懈 褉邪蟹褉邪斜芯褌泻懈 袠袠',
-    difyMarketplace: '孝芯褉谐芯胁邪褟 锌谢芯褖邪写泻邪 Dify',
-    viewMore: '袩芯写褉芯斜薪械械',
-    and: '懈',
-    discover: '袨斜薪邪褉褍卸懈胁邪褌褜',
-    verifiedTip: '袩芯写褌胁械褉卸写械薪芯 Dify',
-    partnerTip: '袩芯写褌胁械褉卸写械薪芯 锌邪褉褌薪械褉芯屑 Dify',
-  },
-  task: {
-    installing: '校褋褌邪薪芯胁泻邪 锌谢邪谐懈薪芯胁 {{installingLength}}, 0 谐芯褌芯胁芯.',
-    installingWithError: '校褋褌邪薪芯胁泻邪 锌谢邪谐懈薪芯胁 {{installingLength}}, {{successLength}} 褍褋锌械褏, {{errorLength}} 薪械褍写邪褔薪褘泄',
-    clearAll: '袨褔懈褋褌懈褌褜 胁褋械',
-    installingWithSuccess: '校褋褌邪薪芯胁泻邪 锌谢邪谐懈薪芯胁 {{installingLength}}, {{successLength}} 褍褋锌械褏.',
-    installedError: '锌谢邪谐懈薪褘 {{errorLength}} 薪械 褍写邪谢芯褋褜 褍褋褌邪薪芯胁懈褌褜',
-    installError: '袩谢邪谐懈薪褘 {{errorLength}} 薪械 褍写邪谢芯褋褜 褍褋褌邪薪芯胁懈褌褜, 薪邪卸屑懈褌械 写谢褟 锌褉芯褋屑芯褌褉邪',
-  },
-  install: '{{num}} 褍褋褌邪薪芯胁芯泻',
-  searchCategories: '袩芯懈褋泻 泻邪褌械谐芯褉懈泄',
-  search: '袠褋泻邪褌褜',
-  searchInMarketplace: '袩芯懈褋泻 胁 屑邪褉泻械褌锌谢械泄褋械',
-  searchTools: '袠薪褋褌褉褍屑械薪褌褘 锌芯懈褋泻邪...',
-  allCategories: '袙褋械 泻邪褌械谐芯褉懈懈',
-  endpointsEnabled: '{{num}} 薪邪斜芯褉褘 胁泻谢褞褔械薪薪褘褏 泻芯薪械褔薪褘褏 褌芯褔械泻',
-  submitPlugin: '袨褌锌褉邪胁懈褌褜 锌谢邪谐懈薪',
-  installAction: '校褋褌邪薪邪胁谢懈胁邪褌褜',
-  from: '袨褌',
-  installFrom: '校小孝袗袧袨袙袠孝鞋 小',
-  findMoreInMarketplace: '校蟹薪邪泄褌械 斜芯谢褜褕械 胁 Marketplace',
-  installPlugin: '校褋褌邪薪芯胁泻邪 锌谢邪谐懈薪邪',
-  searchPlugins: '袩谢邪谐懈薪褘 锌芯懈褋泻邪',
-  fromMarketplace: '袠蟹 屑邪褉泻械褌锌谢械泄褋邪',
-  metadata: {
-    title: '袩谢邪谐懈薪褘',
-  },
-  difyVersionNotCompatible: '孝械泻褍褖邪褟 胁械褉褋懈褟 Dify 薪械 褋芯胁屑械褋褌懈屑邪 褋 褝褌懈屑 锌谢邪谐懈薪芯屑, 锌芯卸邪谢褍泄褋褌邪, 芯斜薪芯胁懈褌械 写芯 屑懈薪懈屑邪谢褜薪芯 薪械芯斜褏芯写懈屑芯泄 胁械褉褋懈懈: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/ru-RU/time.ts b/i18n/ru-RU/time.ts
deleted file mode 100644
index be9e38f..0000000
--- a/i18n/ru-RU/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Mon: '袦芯泄',
-    Tue: '袙褌芯褉薪懈泻',
-    Sat: '小褍斜斜芯褌邪',
-    Sun: '小芯谢薪褑械',
-    Thu: '效械褌胁械褉谐',
-    Wed: '小褉褟写邪',
-    Fri: '小胁芯斜芯写薪芯',
-  },
-  months: {
-    March: '袦邪褉褌',
-    May: '袦邪泄',
-    April: '袗锌褉械谢褜',
-    July: '袠褞谢褜',
-    January: '携薪胁邪褉褜',
-    August: '袗胁谐褍褋褌',
-    December: '袛械泻邪斜褉褜',
-    February: '肖械胁褉邪谢褜',
-    September: '小械薪褌褟斜褉褜',
-    October: '袨泻褌褟斜褉褜',
-    June: '袠褞薪褜',
-    November: '袧芯褟斜褉褜',
-  },
-  operation: {
-    ok: '啸芯褉芯褕芯',
-    pickDate: '袙褘斜械褉懈褌械 写邪褌褍',
-    now: '孝械锌械褉褜',
-    cancel: '袨褌屑械薪邪',
-  },
-  title: {
-    pickTime: '袙褘斜械褉懈褌械 胁褉械屑褟',
-  },
-  defaultPlaceholder: '袙褘斜械褉懈褌械 胁褉械屑褟...',
-}
-
-export default translation
diff --git a/i18n/sl-SI/education.ts b/i18n/sl-SI/education.ts
deleted file mode 100644
index 6a78a04..0000000
--- a/i18n/sl-SI/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    end: 'za profesionalni na膷rt Dify.',
-    front: 'Zdaj ste upravi膷eni do statusa Preverjeno izobra啪evanje. Prosimo, vnesite svoje izobra啪evalne podatke spodaj, da zaklju膷ite postopek in prejmete',
-    coupon: 'izklju膷no 100% kupon',
-  },
-  form: {
-    schoolName: {
-      placeholder: 'Vpi拧ite uradno, neokrnjeno ime va拧e 拧ole',
-      title: 'Ime va拧e 拧ole',
-    },
-    schoolRole: {
-      option: {
-        administrator: '艩olski administrator',
-        teacher: 'U膷itelj',
-        student: '艩tudent',
-      },
-      title: 'Va拧a 拧olska vloga',
-    },
-    terms: {
-      desc: {
-        and: 'in',
-        termsOfService: 'Pogoji storitve',
-        end: '. Z oddajo:',
-        privacyPolicy: 'Politika zasebnosti',
-        front: 'Va拧e informacije in uporaba statusa preverjene izobrazbe so predmet na拧ih',
-      },
-      option: {
-        inSchool: 'Potrjujem, da sem vpisan ali zaposlen na navedenem zavodu. Dify lahko zahteva dokazilo o vpisu/zaposlitvi. 膶e napa膷no predstavim svojo upravi膷enost, se strinjam, da pla膷am morebitne pristojbine, ki so bile sprva opro拧膷ene na podlagi mojega izobra啪evalnega statusa.',
-        age: 'Potrjujem, da sem star najmanj 18 let',
-      },
-      title: 'Pogoji in dogovori',
-    },
-  },
-  toVerified: 'Preverite izobrazbo',
-  successContent: 'Za va拧e ra膷une smo izdali kupon za 100% popust na profesionalni na膷rt Dify. Kupon je veljaven eno leto, prosimo, uporabite ga v veljavnem obdobju.',
-  successTitle: 'Imate verifikacijo izobra啪evanja Dify',
-  submitError: 'Po拧iljanje obrazca ni uspelo. Prosimo, poskusite znova kasneje.',
-  submit: 'Predlo啪i',
-  rejectTitle: 'Va拧a Dify izobra啪evalna verifikacija je bila zavrnjena.',
-  learn: 'Nau膷ite se, kako preveriti izobrazbo',
-  emailLabel: 'Va拧 trenutni elektronski naslov',
-  currentSigned: 'Trenutno prijavljen kot',
-  rejectContent: 'Na 啪alost niste upravi膷eni do statusa Verificirane izobrazbe in zato ne morete prejeti ekskluzivnega 100-odstotnega kupona za Dify profesionalni na膷rt, 膷e uporabljate ta e-po拧tni naslov.',
-}
-
-export default translation
diff --git a/i18n/sl-SI/plugin-tags.ts b/i18n/sl-SI/plugin-tags.ts
deleted file mode 100644
index 62e6aa1..0000000
--- a/i18n/sl-SI/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    design: 'Oblikovanje',
-    videos: 'Videi',
-    education: 'Izobra啪evanje',
-    search: 'Iskanje',
-    image: 'Slika',
-    medical: 'Medicinski',
-    weather: 'Vreme',
-    social: 'Dru啪beni',
-    entertainment: 'Zabava',
-    productivity: 'Produktivnost',
-    finance: 'Finance',
-    news: 'Novice',
-    business: 'Poslovanje',
-    utilities: 'Komunalne storitve',
-    agent: 'Agent',
-    other: 'Drugo',
-    travel: 'Potovanje',
-  },
-  searchTags: 'Iskalne oznake',
-  allTags: 'Vse nalepke',
-}
-
-export default translation
diff --git a/i18n/sl-SI/plugin.ts b/i18n/sl-SI/plugin.ts
deleted file mode 100644
index 848ef39..0000000
--- a/i18n/sl-SI/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  metadata: {
-    title: 'Vti膷niki',
-  },
-  category: {
-    bundles: 'Paketi',
-    all: 'Vse',
-    extensions: 'Raz拧iritve',
-    models: 'Modeli',
-    agents: 'Strategije agenta',
-    tools: 'Orodja',
-  },
-  categorySingle: {
-    extension: 'Raz拧iritev',
-    bundle: 'Paket',
-    agent: 'Agentska strategija',
-    tool: 'Orodje',
-    model: 'Model',
-  },
-  list: {
-    source: {
-      local: 'Namestite iz lokalne paketne datoteke',
-      marketplace: 'Namestite iz tr啪nice',
-      github: 'Namestite iz GitHub-a',
-    },
-    notFound: 'Nobeni vti膷niki niso bili najdeni.',
-    noInstalled: 'Nobeni vti膷niki niso name拧膷eni.',
-  },
-  source: {
-    marketplace: 'Tr啪nica',
-    github: 'GitHub',
-    local: 'Lokalna paketna datoteka',
-  },
-  detailPanel: {
-    categoryTip: {
-      local: 'Lokalni vti膷nik',
-      marketplace: 'Name拧膷eno iz tr啪nice',
-      debugging: 'Orodje za odpravljanje napak',
-      github: 'Name拧膷en iz Githuba',
-    },
-    operation: {
-      remove: 'Odstrani',
-      install: 'Namestite',
-      viewDetail: 'Oglej si podrobnosti',
-      detail: 'Podrobnosti',
-      update: 'Posodobitev',
-      checkUpdate: 'Preveri posodobitev',
-      info: 'Informacije o vti膷niku',
-    },
-    toolSelector: {
-      unsupportedContent: 'V razli膷ici vti膷nika, ki je name拧膷ena, ta akcija ni zagotovljena.',
-      unsupportedContent2: 'Kliknite za preklop razli膷ice.',
-      params: 'RAZLOGOVANJE KONFIGURACIJA',
-      auto: 'Samodejno',
-      title: 'Dodaj orodje',
-      settings: 'UPORABNI艩KE NASTAVITVE',
-      descriptionLabel: 'Opis orodja',
-      uninstalledLink: 'Upravljanje v vti膷nikih',
-      unsupportedTitle: 'Nepodprta akcija',
-      placeholder: 'Izberite orodje...',
-      uninstalledTitle: 'Orodje ni name拧膷eno',
-      uninstalledContent: 'Ta vti膷nik je name拧膷en iz lokalnega/GitHub repozitorija. Uporabite ga prosim po namestitvi.',
-      toolLabel: 'Orodje',
-      descriptionPlaceholder: 'Kratek opis namena orodja, npr. pridobitev temperature za dolo膷eno lokacijo.',
-      empty: 'Kliknite gumb \' \' za dodajanje orodij. Dodate lahko ve膷 orodij.',
-      paramsTip1: 'Nadzoruje parametre sklepanja LLM.',
-      paramsTip2: 'Ko je \'Avtomatsko\' izklopljeno, se uporablja privzeta vrednost.',
-    },
-    endpointDisableContent: 'Ali 啪elite onemogo膷iti {{name}}?',
-    serviceOk: 'Storitve so v redu',
-    endpointDeleteTip: 'Odstrani kon膷no to膷ko',
-    actionNum: '{{num}} {{action}} VKLJU膶ENO',
-    endpointDeleteContent: 'Ali 啪elite odstraniti {{name}}?',
-    configureApp: 'Konfiguriraj aplikacijo',
-    endpointsDocLink: 'Oglejte si dokument',
-    endpointModalTitle: 'Nastavi kon膷no to膷ko',
-    disabled: 'Onemogo膷eno',
-    configureTool: 'Konfigurirajte orodje',
-    switchVersion: 'Preklopna razli膷ica',
-    strategyNum: '{{num}} {{strategy}} VKLJU膶ENO',
-    endpoints: 'Kon膷ne to膷ke',
-    configureModel: 'Konfiguriraj model',
-    modelNum: '{{num}} VZORCI VKLJU膶ENI',
-    endpointDisableTip: 'Onemogo膷i kon膷no to膷ko',
-    endpointsTip: 'Ta vti膷nik zagotavlja specifi膷ne funkcionalnosti preko kon膷nih to膷k, prav tako pa lahko konfigurirate ve膷 nizov kon膷nih to膷k za trenutno delovno okolje.',
-    endpointModalDesc: 'Ko je konfiguriran, se lahko uporabljajo funkcije, ki jih vti膷nik zagotavlja prek API kon膷nih to膷k.',
-    endpointsEmpty: 'Kliknite gumb \' \' za dodajanje kon膷ne to膷ke',
-  },
-  debugInfo: {
-    viewDocs: 'Oglejte si dokumente',
-    title: 'Odpravljanje napak',
-  },
-  privilege: {
-    whoCanInstall: 'Kdo lahko namesti in upravlja vti膷nike?',
-    title: 'Nastavitve vti膷nika',
-    admins: 'Administratori',
-    whoCanDebug: 'Kdo lahko odpravi napake v vti膷nikih?',
-    everyone: 'Vsi',
-    noone: 'Nih膷e',
-  },
-  pluginInfoModal: {
-    title: 'Informacije o vti膷niku',
-    packageName: 'Paket',
-    release: 'Izdati',
-    repository: 'Shramba',
-  },
-  action: {
-    usedInApps: 'Ta vti膷nik se uporablja v {{num}} aplikacijah.',
-    checkForUpdates: 'Preverite posodobitve',
-    deleteContentLeft: 'Ali 啪elite odstraniti',
-    deleteContentRight: 'vti膷nik?',
-    delete: 'Odstrani vti膷nik',
-    pluginInfo: 'Informacije o vti膷niku',
-  },
-  installModal: {
-    labels: {
-      repository: 'Shramba',
-      version: 'Razli膷ica',
-      package: 'Paket',
-    },
-    installFailed: 'Namestitev ni uspela',
-    installing: 'Name拧膷anje...',
-    installedSuccessfully: 'Namestitev uspe拧na',
-    uploadFailed: 'Nalaganje ni uspelo',
-    pluginLoadErrorDesc: 'Ta vti膷nik ne bo name拧膷en',
-    readyToInstallPackages: 'Prihajamo do namestitve naslednjih {{num}} dodatkov',
-    cancel: 'Prekli膷i',
-    fromTrustSource: 'Prosimo, poskrbite, da namestite le vti膷nike iz <trustSource>zaupanja vrednega vira</trustSource>.',
-    installedSuccessfullyDesc: 'Vti膷nik je bil uspe拧no name拧膷en.',
-    readyToInstallPackage: 'Namestitev naslednjega vti膷nika',
-    installComplete: 'Namestitev kon膷ana',
-    installFailedDesc: 'Namestitev vti膷nika je bila neuspe拧na.',
-    close: 'Zapri',
-    uploadingPackage: 'Nalagam {{packageName}}...',
-    readyToInstall: 'Namestitev naslednjega vti膷nika',
-    dropPluginToInstall: 'Tukaj spustite paket vti膷nika, da ga namestite',
-    next: 'Naprej',
-    back: 'Nazaj',
-    install: 'Namestite',
-    pluginLoadError: 'Napaka pri nalaganju vti膷nika',
-    installPlugin: 'Namestite vti膷nik',
-  },
-  installFromGitHub: {
-    updatePlugin: 'Posodobite vti膷nik iz GitHuba',
-    gitHubRepo: 'GitHub repozitorij',
-    installFailed: 'Namestitev ni uspela',
-    installPlugin: 'Namestite vti膷nik iz GitHuba',
-    selectVersionPlaceholder: 'Prosim, izberite razli膷ico',
-    selectPackagePlaceholder: 'Prosim, izberite paket',
-    selectPackage: 'Izberite paket',
-    uploadFailed: 'Nalaganje ni uspelo',
-    selectVersion: 'Izberite razli膷ico',
-    installedSuccessfully: 'Namestitev uspe拧na',
-    installNote: 'Prosim, prepri膷ajte se, da namestite vti膷nike samo iz zaupanja vrednega vira.',
-  },
-  upgrade: {
-    close: 'Zapri',
-    description: 'Namestitev naslednjega vti膷nika',
-    upgrading: 'Name拧膷anje...',
-    successfulTitle: 'Namestitev uspe拧na',
-    upgrade: 'Namestite',
-    usedInApps: 'Uporablja se v {{num}} aplikacijah',
-    title: 'Namestite vti膷nik',
-  },
-  error: {
-    noReleasesFound: 'Ni najdenih izdaj. Prosimo preverite GitHub repozitorij ali vhodni URL.',
-    fetchReleasesError: 'Ne morem pridobiti izdaj. Prosim, poskusite znova pozneje.',
-    inValidGitHubUrl: 'Neveljavna GitHub povezava. Vnesite veljavno povezavo v formatu: https://github.com/lastnik/repo',
-  },
-  marketplace: {
-    sortOption: {
-      mostPopular: 'Najbolj priljubljeno',
-      firstReleased: 'Prvi膷 izdan',
-      recentlyUpdated: 'Nedavno posodobljeno',
-      newlyReleased: 'Nedavno izdano',
-    },
-    and: 'in',
-    pluginsResult: '{{num}} rezultati',
-    sortBy: 'Razvrsti po',
-    verifiedTip: 'Verificirano s strani Dify',
-    discover: 'Odkrijte',
-    partnerTip: 'Potrjeno s strani partnerja Dify',
-    empower: 'Okrepite svoj razvoj AI',
-    noPluginFound: 'Nobenega vti膷nika ni bilo najti.',
-    viewMore: 'Oglejte si ve膷',
-    moreFrom: 'Ve膷 iz tr啪nice',
-    difyMarketplace: 'Dify Marketplace',
-  },
-  task: {
-    installing: 'Namestitev {{installingLength}} vti膷nikov, 0 kon膷anih.',
-    clearAll: 'Po膷isti vse',
-    installError: '{{errorLength}} vti膷nikov ni uspelo namestiti, kliknite za ogled',
-    installingWithSuccess: 'Namestitev {{installingLength}} dodatkov, {{successLength}} uspe拧nih.',
-    installedError: '{{errorLength}} vti膷nikov ni uspelo namestiti',
-    installingWithError: 'Namestitev {{installingLength}} vti膷nikov, {{successLength}} uspe拧nih, {{errorLength}} neuspe拧nih',
-  },
-  endpointsEnabled: '{{num}} nizov kon膷nih to膷k omogo膷enih',
-  search: 'Iskanje',
-  searchInMarketplace: 'Iskanje na trgu',
-  searchPlugins: 'I拧膷i vti膷nike',
-  fromMarketplace: 'Iz tr啪nice',
-  searchTools: 'Iskalna orodja...',
-  installPlugin: 'Namestite vti膷nik',
-  from: 'Iz',
-  installFrom: 'NAMESTITE IZ',
-  searchCategories: 'I拧膷i kategorije',
-  installAction: 'Namestite',
-  findMoreInMarketplace: 'Poi拧膷ite ve膷 v Tr啪nici',
-  install: '{{num}} namestitev',
-  allCategories: 'Vse kategorije',
-  submitPlugin: 'Oddajte vti膷nik',
-  difyVersionNotCompatible: 'Trenutna razli膷ica Dify ni zdru啪ljiva s to vti膷nico, prosimo, posodobite na minimalno zahtevano razli膷ico: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/sl-SI/time.ts b/i18n/sl-SI/time.ts
deleted file mode 100644
index b88a33b..0000000
--- a/i18n/sl-SI/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Thu: '膶etrtek',
-    Fri: 'Petek',
-    Tue: 'Torek',
-    Sun: 'Sonce',
-    Wed: 'Sreda',
-    Mon: 'Mon',
-    Sat: 'Satelit',
-  },
-  months: {
-    February: 'Februar',
-    April: 'April',
-    October: 'oktober',
-    May: 'Maj',
-    December: 'December',
-    September: 'September',
-    January: 'Januar',
-    July: 'Julij',
-    March: 'Marec',
-    June: 'Junij',
-    November: 'November',
-    August: 'Avgust',
-  },
-  operation: {
-    cancel: 'Prekli膷i',
-    now: 'Zdaj',
-    pickDate: 'Izberi datum',
-    ok: 'V redu',
-  },
-  title: {
-    pickTime: 'Izberi 膷as',
-  },
-  defaultPlaceholder: 'Izberi 膷as...',
-}
-
-export default translation
diff --git a/i18n/th-TH/education.ts b/i18n/th-TH/education.ts
deleted file mode 100644
index 5d19cbe..0000000
--- a/i18n/th-TH/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: '喔勦腹喔涏腑喔囙笧喔脆箑喔ㄠ俯 100%',
-    end: '喔赋喔福喔编笟喙佮笢喔權浮喔粪腑喔覆喔娻傅喔炧競喔竾 Dify.',
-    front: '喔勦父喔撪浮喔掂釜喔脆笚喔樴复喙屶箘喔斷箟喔`副喔氞釜喔栢覆喔權赴喔佮覆喔`笗喔`抚喔堗釜喔笟喔佮覆喔`辅喔多竵喔┼覆喙佮弗喙夃抚 喔佮福喔膏笓喔侧竵喔`腑喔佮競喙夃腑喔∴腹喔ム竵喔侧福喔ㄠ付喔佮俯喔侧競喔竾喔勦父喔撪笖喙夃覆喔權弗喙堗覆喔囙箑喔炧阜喙堗腑喔斷赋喙�喔權复喔權竵喔侧福喙冟斧喙夃箑喔福喙囙笀喔复喙夃笝喙佮弗喔班福喔编笟喔复喔椸笜喔脆箤',
-  },
-  form: {
-    schoolName: {
-      title: '喔娻阜喙堗腑喙傕福喔囙箑喔`傅喔⑧笝喔傕腑喔囙竸喔膏笓',
-      placeholder: '喔佮福喔膏笓喔侧箖喔箞喔娻阜喙堗腑喔傕腑喔囙箓喔`竾喙�喔`傅喔⑧笝喔涪喙堗覆喔囙箑喔涏箛喔權笚喔侧竾喔佮覆喔`笚喔掂箞喙勦浮喙堗浮喔掂竵喔侧福喔⑧箞喔�',
-    },
-    schoolRole: {
-      option: {
-        student: '喔權副喔佮箑喔`傅喔⑧笝',
-        teacher: '喔勦福喔�',
-        administrator: '喔溹腹喙夃笖喔灌箒喔ム箓喔`竾喙�喔`傅喔⑧笝',
-      },
-      title: '喔氞笚喔氞覆喔椸競喔竾喔勦父喔撪箖喔權箓喔`竾喙�喔`傅喔⑧笝',
-    },
-    terms: {
-      desc: {
-        front: '喔傕箟喔浮喔灌弗喔傕腑喔囙竸喔膏笓喙佮弗喔班竵喔侧福喙冟笂喙夃釜喔栢覆喔權赴喔佮覆喔`笗喔`抚喔堗釜喔笟喔佮覆喔`辅喔多竵喔┼覆喔涪喔灌箞喔犩覆喔⑧箖喔曕箟喙�喔囙阜喙堗腑喔權箘喔傕競喔竾喙�喔`覆',
-        end: '. 喙傕笖喔⑧竵喔侧福喔箞喔�:',
-        privacyPolicy: '喔權箓喔⑧笟喔侧涪喔勦抚喔侧浮喙�喔涏箛喔權釜喙堗抚喔權笗喔编抚',
-        and: '喙佮弗喔�',
-        termsOfService: '喔傕箟喔竵喔赤斧喔權笖喙冟笝喔佮覆喔`箖喔箟喔氞福喔脆竵喔侧福',
-      },
-      option: {
-        age: '喔夃副喔權涪喔粪笝喔⑧副喔權抚喙堗覆喔夃副喔權浮喔掂腑喔侧涪喔膏腑喔⑧箞喔侧竾喔權箟喔涪 18 喔涏傅',
-        inSchool: '喔夃副喔權涪喔粪笝喔⑧副喔權抚喙堗覆喔夃副喔權箘喔斷箟喔ム竾喔椸赴喙�喔氞傅喔⑧笝喔福喔粪腑喔椸赋喔囙覆喔權笚喔掂箞喔笘喔侧笟喔编笝喔椸傅喙堗福喔班笟喔膏箘喔о箟 Dify 喔覆喔堗競喔斧喔ム副喔佮笎喔侧笝喔佮覆喔`弗喔囙笚喔班箑喔氞傅喔⑧笝/喔佮覆喔`笀喙夃覆喔囙竾喔侧笝 喔覆喔佮笁喔编笝喙佮釜喔斷竾喔勦抚喔侧浮喙勦浮喙堗笘喔灌竵喔曕箟喔竾喙�喔佮傅喙堗涪喔о竵喔编笟喔勦父喔撪釜喔∴笟喔编笗喔脆競喔竾喔夃副喔� 喔夃副喔權笗喔佮弗喔囙笚喔掂箞喔堗赴喔娻赋喔`赴喔勦箞喔侧笜喔`福喔∴箑喔權傅喔⑧浮喙冟笖 喙� 喔椸傅喙堗笘喔灌竵喔⑧竵喙�喔о箟喔權箘喔涏箖喔權箑喔氞阜喙夃腑喔囙笗喙夃笝喔曕覆喔∴釜喔栢覆喔權赴喔佮覆喔`辅喔多竵喔┼覆喔傕腑喔囙笁喔编笝.',
-      },
-      title: '喔傕箟喔竵喔赤斧喔權笖喙佮弗喔班箑喔囙阜喙堗腑喔權箘喔�',
-    },
-  },
-  toVerified: '喔曕福喔о笀喔腑喔氞竵喔侧福喔ㄠ付喔佮俯喔�',
-  rejectTitle: '喔佮覆喔`笗喔`抚喔堗釜喔笟喔佮覆喔`辅喔多竵喔┼覆 Dify 喔傕腑喔囙竸喔膏笓喔栢腹喔佮笡喔忇复喙�喔笜',
-  emailLabel: '喔傅喙�喔∴弗喔涏副喔堗笀喔膏笟喔编笝喔傕腑喔囙竸喔膏笓',
-  currentSigned: '喔ム竾喔娻阜喙堗腑喙�喔傕箟喔侧箖喔娻箟喙冟笝喔愢覆喔權赴',
-  successTitle: '喔勦父喔撪箘喔斷箟喔`副喔氞竵喔侧福喔`副喔氞福喔竾喔佮覆喔`辅喔多竵喔┼覆 Dify',
-  learn: '喙�喔`傅喔⑧笝喔`腹喙夃抚喔脆笜喔掂竵喔侧福喔曕福喔о笀喔腑喔氞竵喔侧福喔ㄠ付喔佮俯喔�',
-  submitError: '喔佮覆喔`釜喙堗竾喙佮笟喔氞笩喔福喙屶浮喔ム箟喔∴箑喔弗喔� 喙傕笡喔`笖喔ム腑喔囙腑喔掂竵喔勦福喔编箟喔囙箖喔權笭喔侧涪喔弗喔编竾.',
-  submit: '喔箞喔�',
-  successContent: '喙�喔`覆喙勦笖喙夃腑喔竵喔勦腹喔涏腑喔囙釜喙堗抚喔權弗喔� 100% 喔赋喔福喔编笟喙佮笢喔� Dify Professional 喙冟斧喙夃竵喔编笟喔氞副喔嵿笂喔掂競喔竾喔勦父喔� 喔勦腹喔涏腑喔囙笝喔掂箟喔覆喔∴覆喔`笘喙冟笂喙夃箘喔斷箟喙�喔涏箛喔權福喔班涪喔班箑喔о弗喔� 1 喔涏傅 喔佮福喔膏笓喔侧箖喔娻箟喔犩覆喔⑧箖喔權笂喙堗抚喔囙福喔班涪喔班箑喔о弗喔侧笚喔掂箞喔佮赋喔笝喔�.',
-  rejectContent: '喔權箞喔侧箑喔傅喔⑧笖喔侧涪喔椸傅喙堗竸喔膏笓喙勦浮喙堗浮喔掂釜喔脆笚喔樴复喙屶箘喔斷箟喔`副喔氞釜喔栢覆喔權赴喔佮覆喔`笗喔`抚喔堗釜喔笟喔佮覆喔`辅喔多竵喔┼覆喙佮弗喔班笖喔编竾喔權副喙夃笝喔勦父喔撪笀喔多竾喙勦浮喙堗釜喔侧浮喔侧福喔栢福喔编笟喔勦腹喔涏腑喔囙笧喔脆箑喔ㄠ俯 100% 喔赋喔福喔编笟喙佮笢喔權浮喔粪腑喔覆喔娻傅喔� Dify 喔覆喔佮竸喔膏笓喙冟笂喙夃笚喔掂箞喔涪喔灌箞喔傅喙�喔∴弗喔權傅喙�.',
-}
-
-export default translation
diff --git a/i18n/th-TH/plugin-tags.ts b/i18n/th-TH/plugin-tags.ts
deleted file mode 100644
index a6eaeff..0000000
--- a/i18n/th-TH/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    weather: '喔覆喔佮覆喔�',
-    finance: '喔佮覆喔`箑喔囙复喔�',
-    social: '喔副喔囙竸喔�',
-    entertainment: '喔∴斧喔`釜喔�',
-    education: '喔佮覆喔`辅喔多竵喔┼覆',
-    news: '喔傕箞喔侧抚',
-    design: '喔腑喔佮箒喔氞笟',
-    agent: '喔曕副喔о箒喔椸笝',
-    videos: '喔о复喔斷傅喙傕腑',
-    utilities: '喔覆喔樴覆喔`笓喔灌笡喙傕笭喔�',
-    search: '喔勦箟喔�',
-    business: '喔樴父喔`竵喔脆笀',
-    productivity: '喔溹弗喔脆笗喔犩覆喔�',
-    travel: '喙�喔斷复喔權笚喔侧竾',
-    medical: '喔椸覆喔囙竵喔侧福喙佮笧喔椸涪喙�',
-    image: '喔犩覆喔�',
-    other: '喔阜喙堗笝喙�',
-  },
-  searchTags: '喙佮笚喙囙竵喔勦箟喔權斧喔�',
-  allTags: '喙佮笚喙囙竵喔椸副喙夃竾喔浮喔�',
-}
-
-export default translation
diff --git a/i18n/th-TH/plugin.ts b/i18n/th-TH/plugin.ts
deleted file mode 100644
index eb42371..0000000
--- a/i18n/th-TH/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    extensions: '喔權覆喔� 喔竵喔膏弗',
-    models: '喔`父喙堗笝',
-    tools: '喙�喔勦福喔粪箞喔竾 喔∴阜喔�',
-    agents: '喔佮弗喔⑧父喔椸笜喙屶笗喔编抚喙佮笚喔�',
-    all: '喔椸副喙夃竾喔浮喔�',
-    bundles: '喔娻父喔斷福喔о浮',
-  },
-  categorySingle: {
-    tool: '喙�喔勦福喔粪箞喔竾喔∴阜喔�',
-    extension: '喔佮覆喔`箑喔炧复喙堗浮',
-    agent: '喔佮弗喔⑧父喔椸笜喙屶笗喔编抚喙佮笚喔�',
-    model: '喙佮笟喔�',
-    bundle: '喔∴副喔�',
-  },
-  list: {
-    source: {
-      github: '喔曕复喔斷笗喔编箟喔囙笀喔侧竵 GitHub',
-      local: '喔曕复喔斷笗喔编箟喔囙笀喔侧竵喙勦笩喔ム箤喙佮笧喙囙竸喙�喔佮笀喙冟笝喙�喔勦福喔粪箞喔竾',
-      marketplace: '喔曕复喔斷笗喔编箟喔囙笀喔侧竵 Marketplace',
-    },
-    noInstalled: '喙勦浮喙堗箘喔斷箟喔曕复喔斷笗喔编箟喔囙笡喔ム副喙娻竵喔复喔�',
-    notFound: '喙勦浮喙堗笧喔氞笡喔ム副喙娻竵喔复喔�',
-  },
-  source: {
-    local: '喙勦笩喔ム箤喙佮笧喙囙竸喙�喔佮笀喙冟笝喙�喔勦福喔粪箞喔竾',
-    github: '喙�喔佮抚喔�',
-    marketplace: '喔曕弗喔侧笖',
-  },
-  detailPanel: {
-    categoryTip: {
-      debugging: '喔涏弗喔编箠喔佮腑喔脆笝喔佮覆喔`笖喔掂笟喔编竵',
-      local: '喔涏弗喔编箠喔佮腑喔脆笝喔椸箟喔竾喔栢复喙堗笝',
-      marketplace: '喔曕复喔斷笗喔编箟喔囙笀喔侧竵 Marketplace',
-      github: '喔曕复喔斷笗喔编箟喔囙笀喔侧竵 Github',
-    },
-    operation: {
-      info: '喔傕箟喔浮喔灌弗喔涏弗喔编箠喔佮腑喔脆笝',
-      detail: '喔`覆喔� 喔ム赴喙�喔傅喔⑧笖',
-      install: '喔曕复喔斷笗喔编箟喔�',
-      update: '喔副喔炧箑喔斷笗',
-      viewDetail: '喔斷腹喔`覆喔⑧弗喔班箑喔傅喔⑧笖',
-      checkUpdate: '喔曕福喔о笀喔腑喔氞竵喔侧福喔副喔涏箑喔斷笗',
-      remove: '喔栢腑喔�',
-    },
-    toolSelector: {
-      settings: '喔佮覆喔`笗喔编箟喔囙竸喙堗覆喔溹腹喙夃箖喔娻箟',
-      placeholder: '喙�喔ム阜喔竵喙�喔勦福喔粪箞喔竾喔∴阜喔�...',
-      params: '喔佮覆喔`竵喙嵿覆喔笝喔斷竸喙堗覆喙�喔笗喔膏笢喔�',
-      paramsTip2: '喙�喔∴阜喙堗腑喔涏复喔� \'喔副喔曕箓喔權浮喔编笗喔碶' 喔堗赴喙冟笂喙夃竸喙堗覆喙�喔`复喙堗浮喔曕箟喔�',
-      toolLabel: '喙�喔勦福喔粪箞喔竾喔∴阜喔�',
-      paramsTip1: '喔勦抚喔氞竸喔膏浮喔炧覆喔`覆喔∴复喙�喔曕腑喔`箤喔佮覆喔`腑喔權父喔∴覆喔� LLM',
-      uninstalledLink: '喔堗副喔斷竵喔侧福喙冟笝喔涏弗喔编箠喔佮腑喔脆笝',
-      unsupportedContent: '喙�喔о腑喔`箤喔娻副喔權笡喔ム副喙娻竵喔复喔權笚喔掂箞喔曕复喔斷笗喔编箟喔囙箘喔∴箞喔∴傅喔佮覆喔`笖喙嵿覆喙�喔權复喔權竵喔侧福喔權傅喙�',
-      title: '喙�喔炧复喙堗浮喙�喔勦福喔粪箞喔竾喔∴阜喔�',
-      unsupportedContent2: '喔勦弗喔脆竵喙�喔炧阜喙堗腑喙�喔涏弗喔掂箞喔⑧笝喙�喔о腑喔`箤喔娻副喔�',
-      empty: '喔勦弗喔脆竵喔涏父喙堗浮 \'+\' 喙�喔炧阜喙堗腑喙�喔炧复喙堗浮喙�喔勦福喔粪箞喔竾喔∴阜喔� 喔勦父喔撪釜喔侧浮喔侧福喔栢箑喔炧复喙堗浮喙�喔勦福喔粪箞喔竾喔∴阜喔箘喔斷箟喔弗喔侧涪喔涪喙堗覆喔�',
-      descriptionLabel: '喔勦箥喔侧腑喔樴复喔氞覆喔⑧箑喔勦福喔粪箞喔竾喔∴阜喔�',
-      auto: '喔副喔曕箓喔權浮喔编笗喔�',
-      unsupportedTitle: '喔佮覆喔`笖喙嵿覆喙�喔權复喔權竵喔侧福喔椸傅喙堗箘喔∴箞喔`腑喔囙福喔编笟',
-      uninstalledTitle: '喙勦浮喙堗箘喔斷箟喔曕复喔斷笗喔编箟喔囙箑喔勦福喔粪箞喔竾喔∴阜喔�',
-      descriptionPlaceholder: '喔勦箥喔侧腑喔樴复喔氞覆喔⑧釜喔编箟喔� 喙� 喙�喔佮傅喙堗涪喔о竵喔编笟喔о副喔曕笘喔膏笡喔`赴喔竾喔勦箤喔傕腑喔囙箑喔勦福喔粪箞喔竾喔∴阜喔� 喙�喔娻箞喔� 喔`副喔氞腑喔膏笓喔笭喔灌浮喔脆釜喙嵿覆喔福喔编笟喔曕箥喔侧箒喔笝喙堗竾喙�喔夃笧喔侧赴',
-      uninstalledContent: '喔涏弗喔编箠喔佮腑喔脆笝喔權傅喙夃笗喔脆笖喔曕副喙夃竾喔堗覆喔佮笚喔掂箞喙�喔佮箛喔氞箖喔權箑喔勦福喔粪箞喔竾/GitHub 喔佮福喔膏笓喔侧箖喔娻箟喔弗喔编竾喔佮覆喔`笗喔脆笖喔曕副喙夃竾',
-    },
-    endpointDisableContent: '喔勦父喔撪笗喙夃腑喔囙竵喔侧福喔涏复喔斷竵喔侧福喙冟笂喙夃竾喔侧笝 {{name}} 喔福喔粪腑喙勦浮喙�?',
-    configureApp: '喔佮箥喔侧斧喔權笖喔勦箞喔侧箒喔笡',
-    configureTool: '喔佮箥喔侧斧喔權笖喔勦箞喔侧箑喔勦福喔粪箞喔竾喔∴阜喔�',
-    switchVersion: '喔弗喔编笟喙�喔о腑喔`箤喔娻副喔�',
-    endpointModalTitle: '喔涏弗喔侧涪喔椸覆喔囙竵喔侧福喔曕副喙夃竾喔勦箞喔�',
-    actionNum: '{{num}} {{喔佮覆喔`竵喔`赴喔椸箥喔瞹} 喔`抚喔�',
-    strategyNum: '{{num}} {{喔佮弗喔⑧父喔椸笜喙寎} 喔`抚喔�',
-    endpointsDocLink: '喔斷腹喙�喔竵喔覆喔�',
-    configureModel: '喔佮箥喔侧斧喔權笖喔勦箞喔侧箒喔氞笟喔堗箥喔侧弗喔竾',
-    endpointModalDesc: '喙�喔∴阜喙堗腑喔佮箥喔侧斧喔權笖喔勦箞喔侧箒喔ム箟喔� 喔覆喔∴覆喔`笘喙冟笂喙夃竸喔膏笓喔浮喔氞副喔曕复喔椸傅喙堗笡喔ム副喙娻竵喔复喔權箖喔箟喔溹箞喔侧笝喔涏弗喔侧涪喔椸覆喔� API 喙勦笖喙�',
-    modelNum: '{{num}} 喔`父喙堗笝喔`抚喔�',
-    endpointDisableTip: '喔涏复喔斷箖喔娻箟喔囙覆喔權笡喔ム覆喔⑧笚喔侧竾',
-    endpointDeleteTip: '喔ム笟喔涏弗喔侧涪喔椸覆喔�',
-    disabled: '喔炧复喔佮覆喔�',
-    endpointDeleteContent: '喔勦父喔撪笗喙夃腑喔囙竵喔侧福喔ム笟 {{name}} 喔福喔粪腑喙勦浮喙�?',
-    endpoints: '喔涏弗喔侧涪 喔椸覆喔�',
-    endpointsTip: '喔涏弗喔编箠喔佮腑喔脆笝喔權傅喙夃浮喔掂笩喔编竾喔佮箤喔娻副喔權箑喔夃笧喔侧赴喔溹箞喔侧笝喔涏弗喔侧涪喔椸覆喔� 喙佮弗喔班竸喔膏笓喔覆喔∴覆喔`笘喔佮箥喔侧斧喔權笖喔勦箞喔侧笂喔膏笖喔涏弗喔侧涪喔椸覆喔囙斧喔ム覆喔⑧笂喔膏笖喔箥喔侧斧喔`副喔氞笧喔粪箟喔權笚喔掂箞喔椸箥喔侧竾喔侧笝喔涏副喔堗笀喔膏笟喔编笝喙勦笖喙�',
-    endpointsEmpty: '喔勦弗喔脆竵喔涏父喙堗浮 \'+\' 喙�喔炧阜喙堗腑喙�喔炧复喙堗浮喔涏弗喔侧涪喔椸覆喔�',
-    serviceOk: '喔氞福喔脆竵喔侧福喔曕竵喔ム竾',
-  },
-  debugInfo: {
-    viewDocs: '喔斷腹喙�喔竵喔覆喔�',
-    title: '喔佮覆喔`箒喔佮箟喔堗父喔斷笟喔佮笧喔`箞喔竾',
-  },
-  privilege: {
-    everyone: '喔椸父喔佮竸喔�',
-    whoCanInstall: '喙冟竸喔`釜喔侧浮喔侧福喔栢笗喔脆笖喔曕副喙夃竾喙佮弗喔班笀喔编笖喔佮覆喔`笡喔ム副喙娻竵喔复喔權箘喔斷箟喔氞箟喔侧竾',
-    noone: '喙勦浮喙堗浮喔掂箖喔勦福',
-    whoCanDebug: '喙冟竸喔`釜喔侧浮喔侧福喔栢笖喔掂笟喔编竵喔涏弗喔编箠喔佮腑喔脆笝喙勦笖喙夃笟喙夃覆喔�',
-    title: '喔佮覆喔`笗喔编箟喔囙竸喙堗覆喔涏弗喔编箠喔佮腑喔脆笝',
-    admins: '喔溹腹喙夃笖喔灌箒喔ム福喔班笟喔�',
-  },
-  pluginInfoModal: {
-    packageName: '喔箞喔�',
-    title: '喔傕箟喔浮喔灌弗喔涏弗喔编箠喔佮腑喔脆笝',
-    release: '喔涏弗喙堗腑喔�',
-    repository: '喙�喔佮箛喔�',
-  },
-  action: {
-    pluginInfo: '喔傕箟喔浮喔灌弗喔涏弗喔编箠喔佮腑喔脆笝',
-    deleteContentLeft: '喔勦父喔撪笗喙夃腑喔囙竵喔侧福喔ム笟',
-    deleteContentRight: '喔涏弗喔编箠喔佮腑喔脆笝?',
-    usedInApps: '喔涏弗喔编箠喔佮腑喔脆笝喔權傅喙夃笘喔灌竵喙冟笂喙夃箖喔權箒喔笡 {{num}}',
-    delete: '喔ム笟喔涏弗喔编箠喔佮腑喔脆笝',
-    checkForUpdates: '喔曕福喔о笀喔腑喔氞竵喔侧福喔副喔涏箑喔斷笗',
-  },
-  installModal: {
-    labels: {
-      version: '喙�喔о腑喔`箤喔娻副喔�',
-      package: '喔箞喔�',
-      repository: '喙�喔佮箛喔�',
-    },
-    pluginLoadErrorDesc: '喔涏弗喔编箠喔佮腑喔脆笝喔權傅喙夃笀喔班箘喔∴箞喔栢腹喔佮笗喔脆笖喔曕副喙夃竾',
-    readyToInstall: '喙�喔佮傅喙堗涪喔о竵喔编笟喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝喔曕箞喔箘喔涏笝喔掂箟',
-    uploadFailed: '喔副喔涏箓喔弗喔斷弗喙夃浮喙�喔弗喔�',
-    installFailed: '喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔ム箟喔∴箑喔弗喔�',
-    installedSuccessfullyDesc: '喔曕复喔斷笗喔编箟喔囙笡喔ム副喙娻竵喔复喔權釜喙嵿覆喙�喔`箛喔堗箒喔ム箟喔�',
-    readyToInstallPackage: '喙�喔佮傅喙堗涪喔о竵喔编笟喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝喔曕箞喔箘喔涏笝喔掂箟',
-    dropPluginToInstall: '喔о覆喔囙箒喔炧箛喔勦箑喔佮笀喔涏弗喔编箠喔佮腑喔脆笝喔椸傅喙堗笝喔掂箞喙�喔炧阜喙堗腑喔曕复喔斷笗喔编箟喔�',
-    install: '喔曕复喔斷笗喔编箟喔�',
-    back: '喔⑧箟喔笝喔佮弗喔编笟',
-    cancel: '喔⑧竵喙�喔ム复喔�',
-    installPlugin: '喔曕复喔斷笗喔编箟喔囙笡喔ム副喙娻竵喔复喔�',
-    readyToInstallPackages: '喙�喔佮傅喙堗涪喔о竵喔编笟喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝 {{num}} 喔曕箞喔箘喔涏笝喔掂箟',
-    uploadingPackage: '喔佮箥喔侧弗喔编竾喔副喔涏箓喔弗喔� {{packageName}}...',
-    installFailedDesc: '喔曕复喔斷笗喔编箟喔囙笡喔ム副喙娻竵喔复喔權弗喙夃浮喙�喔弗喔�',
-    next: '喔曕箞喔箘喔�',
-    fromTrustSource: '喙傕笡喔`笖喔曕福喔о笀喔腑喔氞箖喔箟喙佮笝喙堗箖喔堗抚喙堗覆喔勦父喔撪笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝喔堗覆喔�<trustSource>喙佮斧喔ム箞喔囙笚喔掂箞喙�喔娻阜喙堗腑喔栢阜喔箘喔斷箟</trustSource>喙�喔椸箞喔侧笝喔编箟喔�',
-    installing: '喔曕复喔� 喔曕副喙夃竾   ',
-    close: '喔涏复喔�',
-    installedSuccessfully: '喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔箥喔侧箑喔`箛喔�',
-    installComplete: '喔佮覆喔`笗喔脆笖喔曕副喙夃竾喙�喔福喙囙笀喔浮喔氞腹喔`笓喙�',
-    pluginLoadError: '喔傕箟喔笢喔脆笖喔炧弗喔侧笖喙冟笝喔佮覆喔`箓喔弗喔斷笡喔ム副喙娻竵喔复喔�',
-  },
-  installFromGitHub: {
-    updatePlugin: '喔副喔涏箑喔斷笗喔涏弗喔编箠喔佮腑喔脆笝喔堗覆喔� GitHub',
-    gitHubRepo: '喔椸傅喙堗箑喔佮箛喔� GitHub',
-    installNote: '喙傕笡喔`笖喔曕福喔о笀喔腑喔氞箖喔箟喙佮笝喙堗箖喔堗抚喙堗覆喔勦父喔撪笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝喔堗覆喔佮箒喔弗喙堗竾喔椸傅喙堗箑喔娻阜喙堗腑喔栢阜喔箘喔斷箟喙�喔椸箞喔侧笝喔编箟喔�',
-    installedSuccessfully: '喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔箥喔侧箑喔`箛喔�',
-    uploadFailed: '喔副喔涏箓喔弗喔斷弗喙夃浮喙�喔弗喔�',
-    selectVersionPlaceholder: '喙傕笡喔`笖喙�喔ム阜喔竵喙�喔о腑喔`箤喔娻副喔�',
-    selectPackagePlaceholder: '喙傕笡喔`笖喙�喔ム阜喔竵喙佮笧喙囙竵喙�喔佮笀',
-    installFailed: '喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔ム箟喔∴箑喔弗喔�',
-    selectVersion: '喙�喔ム阜喔竵喔`父喙堗笝',
-    installPlugin: '喔曕复喔斷笗喔编箟喔囙笡喔ム副喙娻竵喔复喔權笀喔侧竵 GitHub',
-    selectPackage: '喙�喔ム阜喔竵喙佮笧喙囙竵喙�喔佮笀',
-  },
-  upgrade: {
-    description: '喙�喔佮傅喙堗涪喔о竵喔编笟喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝喔曕箞喔箘喔涏笝喔掂箟',
-    title: '喔曕复喔斷笗喔编箟喔囙笡喔ム副喙娻竵喔复喔�',
-    upgrading: '喔曕复喔� 喔曕副喙夃竾   ',
-    successfulTitle: '喔曕复喔斷笗喔编箟喔囙釜喙嵿覆喙�喔`箛喔�',
-    upgrade: '喔曕复喔斷笗喔编箟喔�',
-    usedInApps: '喙冟笂喙夃箖喔權箒喔笡 {{num}}',
-    close: '喔涏复喔�',
-  },
-  error: {
-    noReleasesFound: '喙勦浮喙堗笧喔氞競喙堗覆喔о笡喔`赴喔娻覆喔副喔∴笧喔编笝喔樴箤 喙傕笡喔`笖喔曕福喔о笀喔腑喔氞笚喔掂箞喙�喔佮箛喔� GitHub 喔福喔粪腑 URL 喔椸傅喙堗笡喙夃腑喔權競喙夃腑喔∴腹喔�',
-    inValidGitHubUrl: 'URL GitHub 喙勦浮喙堗笘喔灌竵喔曕箟喔竾 喙傕笡喔`笖喔涏箟喔笝 URL 喔椸傅喙堗笘喔灌竵喔曕箟喔竾喙冟笝喔`腹喔涏箒喔氞笟: https://github.com/owner/repo',
-    fetchReleasesError: '喙勦浮喙堗釜喔侧浮喔侧福喔栢笖喔多竾喔傕箟喔浮喔灌弗喔佮覆喔`箑喔溹涪喙佮笧喔`箞喙勦笖喙� 喙傕笡喔`笖喔ム腑喔囙腑喔掂竵喔勦福喔编箟喔囙箖喔權笭喔侧涪喔弗喔编竾',
-  },
-  marketplace: {
-    sortOption: {
-      newlyReleased: '喙�喔涏复喔斷笗喔编抚喙冟斧喔∴箞',
-      mostPopular: '喙佮斧喙堗竾',
-      recentlyUpdated: '喔副喔炧箑喔斷笚喔ム箞喔侧釜喔膏笖',
-      firstReleased: '喙�喔涏复喔斷笗喔编抚喔勦福喔编箟喔囙箒喔`竵',
-    },
-    viewMore: '喔斷腹喙�喔炧复喙堗浮喙�喔曕复喔�',
-    moreFrom: '喙佮腑喔涏箑喔炧复喙堗浮喙�喔曕复喔∴笀喔侧竵 Marketplace',
-    pluginsResult: '{{num}} 喔溹弗喔ム副喔炧笜喙�',
-    and: '喙佮弗喔�',
-    sortBy: '喙�喔∴阜喔竾喔傅喔斷箥喔�',
-    discover: '喔勦箟喔權笧喔�',
-    noPluginFound: '喙勦浮喙堗笧喔氞笡喔ム副喙娻竵喔复喔�',
-    empower: '喙�喔炧复喙堗浮喔ㄠ副喔佮涪喔犩覆喔炧箖喔權竵喔侧福喔炧副喔掄笝喔� AI 喔傕腑喔囙竸喔膏笓',
-    difyMarketplace: '喔曕弗喔侧笖 Dify',
-    partnerTip: '喙勦笖喙夃福喔编笟喔佮覆喔`笗喔`抚喔堗釜喔笟喙傕笖喔⑧笧喔编笝喔樴浮喔脆笗喔`競喔竾 Dify',
-    verifiedTip: '喙勦笖喙夃福喔编笟喔佮覆喔`笗喔`抚喔堗釜喔笟喙傕笖喔� Dify',
-  },
-  task: {
-    installing: '喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝 {{installingLength}} 0 喙�喔福喙囙笀喙佮弗喙夃抚',
-    installingWithError: '喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝 {{installingLength}}, {{successLength}} 喔箥喔侧箑喔`箛喔�, {{errorLength}} 喔ム箟喔∴箑喔弗喔�',
-    installingWithSuccess: '喔佮覆喔`笗喔脆笖喔曕副喙夃竾喔涏弗喔编箠喔佮腑喔脆笝 {{installingLength}}, {{successLength}} 喔箥喔侧箑喔`箛喔�',
-    installedError: '{{errorLength}} 喔涏弗喔编箠喔佮腑喔脆笝喔曕复喔斷笗喔编箟喔囙箘喔∴箞喔箥喔侧箑喔`箛喔�',
-    clearAll: '喔ム箟喔侧竾喔椸副喙夃竾喔浮喔�',
-    installError: '{{errorLength}} 喔涏弗喔编箠喔佮腑喔脆笝喔曕复喔斷笗喔编箟喔囙箘喔∴箞喔箥喔侧箑喔`箛喔� 喔勦弗喔脆竵喙�喔炧阜喙堗腑喔斷腹',
-  },
-  searchCategories: '喔浮喔о笖喔浮喔灌箞喔佮覆喔`竸喙夃笝喔覆',
-  searchInMarketplace: '喔勦箟喔權斧喔侧箖喔� Marketplace',
-  findMoreInMarketplace: '喔勦箟喔權斧喔侧箑喔炧复喙堗浮喙�喔曕复喔∴箖喔� Marketplace',
-  installPlugin: '喔曕复喔斷笗喔编箟喔囙笡喔ム副喙娻竵喔复喔�',
-  search: '喔勦箟喔�',
-  from: '喔堗覆喔�',
-  install: '{{num}} 喔佮覆喔`笗喔脆笖喔曕副喙夃竾',
-  endpointsEnabled: '{{num}} 喔娻父喔斷競喔竾喔涏弗喔侧涪喔椸覆喔囙笚喔掂箞喙�喔涏复喔斷箖喔娻箟喔囙覆喔�',
-  searchPlugins: '喔勦箟喔權斧喔侧笡喔ム副喙娻竵喔复喔�',
-  installAction: '喔曕复喔斷笗喔编箟喔�',
-  searchTools: '喙�喔勦福喔粪箞喔竾喔∴阜喔竸喙夃笝喔覆...',
-  installFrom: '喔曕复喔斷笗喔编箟喔囙笀喔侧竵',
-  fromMarketplace: '喔堗覆喔� Marketplace',
-  submitPlugin: '喔箞喔囙笡喔ム副喙娻竵喔复喔�',
-  allCategories: '喔浮喔о笖喔浮喔灌箞喔椸副喙夃竾喔浮喔�',
-  metadata: {
-    title: '喔涏弗喔编箠喔佮腑喔脆笝',
-  },
-  difyVersionNotCompatible: '喙�喔о腑喔`箤喔娻副喙堗笝喔涏副喔堗笀喔膏笟喔编笝喔傕腑喔� Dify 喙勦浮喙堗釜喔侧浮喔侧福喔栢箖喔娻箟喔囙覆喔權福喙堗抚喔∴竵喔编笟喔涏弗喔编箠喔佮腑喔脆笝喔權傅喙夃箘喔斷箟 喔佮福喔膏笓喔侧腑喔编笡喙�喔佮福喔斷箘喔涏涪喔编竾喙�喔о腑喔`箤喔娻副喙堗笝喔傕副喙夃笝喔曕箞喔赤笚喔掂箞喔曕箟喔竾喔佮覆喔�: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/th-TH/time.ts b/i18n/th-TH/time.ts
deleted file mode 100644
index 03897dd..0000000
--- a/i18n/th-TH/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Fri: '喙�喔福喔�',
-    Sat: '喙�喔覆喔`箤',
-    Wed: '喔о副喔權笧喔膏笜',
-    Sun: '喔斷抚喔囙腑喔侧笚喔脆笗喔⑧箤',
-    Tue: '喔副喔囙竸喔侧福',
-    Thu: '喔о副喔權笧喔む斧喔编釜喔氞笖喔�',
-    Mon: '喔∴腑喔�',
-  },
-  months: {
-    February: '喔佮父喔∴笭喔侧笧喔编笝喔樴箤',
-    July: '喔佮福喔佮笌喔侧竸喔�',
-    June: '喔∴复喔栢父喔權覆喔⑧笝',
-    January: '喔∴竵喔`覆喔勦浮',
-    September: '喔佮副喔權涪喔侧涪喔�',
-    August: '喔复喔囙斧喔侧竸喔�',
-    October: '喔曕父喔ム覆喔勦浮',
-    May: '喔炧袱喔┼笭喔侧竸喔�',
-    November: '喔炧袱喔ㄠ笀喔脆竵喔侧涪喔�',
-    March: '喔∴傅喔權覆喔勦浮',
-    December: '喔樴副喔權抚喔侧竸喔�',
-    April: '喙�喔∴俯喔侧涪喔�',
-  },
-  operation: {
-    ok: '喔曕竵喔ム竾',
-    cancel: '喔⑧竵喙�喔ム复喔�',
-    pickDate: '喙�喔ム阜喔竵喔о副喔權笚喔掂箞',
-    now: '喔曕腑喔權笝喔掂箟',
-  },
-  title: {
-    pickTime: '喙�喔ム阜喔竵喙�喔о弗喔�',
-  },
-  defaultPlaceholder: '喙�喔ム阜喔竵喙�喔о弗喔�...',
-}
-
-export default translation
diff --git a/i18n/tr-TR/education.ts b/i18n/tr-TR/education.ts
deleted file mode 100644
index f6afb98..0000000
--- a/i18n/tr-TR/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    end: 'Dify Profesyonel Plan谋 i莽in.',
-    front: 'Art谋k E臒itim Do臒ruland谋 stat眉s眉ne uygun oldunuz. L眉tfen s眉reci tamamlamak ve bir almak i莽in e臒itim bilgilerinizi a艧a臒谋ya girin.',
-    coupon: '枚zel %100 kupon',
-  },
-  form: {
-    schoolName: {
-      placeholder: 'Okulunuzun resmi, k谋salt谋lmam谋艧 ad谋n谋 girin',
-      title: 'Okulunuzun Ad谋',
-    },
-    schoolRole: {
-      option: {
-        student: '脰臒renci',
-        teacher: '脰臒retmen',
-        administrator: 'Okul Y枚neticisi',
-      },
-      title: 'Okul Rol眉n眉z',
-    },
-    terms: {
-      desc: {
-        front: 'E臒itim Do臒ruland谋 durumunuza ili艧kin bilgileriniz ve kullan谋m谋n谋z, bizim',
-        termsOfService: 'Hizmet 艦artlar谋',
-        end: 'G枚ndererek:',
-        privacyPolicy: 'Gizlilik Politikas谋',
-        and: 've',
-      },
-      option: {
-        age: 'En az 18 ya艧谋nda oldu臒umu onayl谋yorum.',
-        inSchool: 'Verilen kurumda kay谋tl谋 veya istihdamda oldu臒umu onayl谋yorum. Dify, kay谋t veya istihdam kan谋t谋 talep edebilir. Uygunlu臒umu yanl谋艧 beyan edersem, e臒itim durumuma dayal谋 olarak ba艧lang谋莽ta feragat edilen her t眉rl眉 眉creti 枚demeyi kabul ediyorum.',
-      },
-      title: '艦artlar ve Ko艧ullar',
-    },
-  },
-  toVerified: 'E臒itim Bilgilerinizi Do臒rulay谋n',
-  currentSigned: '艦U ANDA G陌R陌艦 YAPILDI臑I K陌艦陌',
-  submitError: 'Form g枚nderimi ba艧ar谋s谋z oldu. L眉tfen daha sonra tekrar deneyin.',
-  rejectTitle: 'Dify E臒itim Do臒rulaman谋z Rededildi',
-  emailLabel: '艦u anki e-posta adresin',
-  submit: 'G枚nder',
-  rejectContent: 'Maalesef, E臒itim Do臒rulama stat眉s眉ne uygun de臒ilsiniz ve bu nedenle bu e-posta adresini kullan谋yorsan谋z Dify Profesyonel Plan谋 i莽in 枚zel %100 kuponu alamazs谋n谋z.',
-  learn: 'E臒itim do臒rulamas谋n谋n nas谋l yap谋laca臒谋n谋 枚臒renin',
-  successContent: 'Hesab谋n谋za Dify Profesyonel plan谋 i莽in %100 indirim kuponu verdik. Kuponun ge莽erlilik s眉resi bir y谋ld谋r, l眉tfen bu s眉re i莽inde kullan谋n.',
-  successTitle: 'Dify E臒itim Onay谋n谋z Var',
-}
-
-export default translation
diff --git a/i18n/tr-TR/plugin-tags.ts b/i18n/tr-TR/plugin-tags.ts
deleted file mode 100644
index 3b95d46..0000000
--- a/i18n/tr-TR/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    finance: 'Maliye',
-    utilities: 'Yard谋mc谋 program',
-    design: 'Tasar谋m',
-    image: 'Resim',
-    videos: 'Video',
-    other: 'Di臒er',
-    education: 'E臒itim',
-    medical: 'T谋bbi',
-    social: 'Sosyal',
-    agent: 'Arac谋',
-    business: '陌艧',
-    weather: 'Hava',
-    travel: 'Seyahat',
-    productivity: 'Verimli -lik',
-    news: 'Haberler',
-    entertainment: 'E臒lence',
-    search: 'Aramak',
-  },
-  allTags: 'T眉m Etiketler',
-  searchTags: 'Arama Etiketleri',
-}
-
-export default translation
diff --git a/i18n/tr-TR/plugin.ts b/i18n/tr-TR/plugin.ts
deleted file mode 100644
index c434052..0000000
--- a/i18n/tr-TR/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    models: 'Model',
-    all: 'T眉m',
-    bundles: 'Paketler',
-    agents: 'Ajan Stratejileri',
-    tools: 'Ara莽lar谋',
-    extensions: 'Uzant谋 -lar谋',
-  },
-  categorySingle: {
-    tool: 'Alet',
-    bundle: 'Boh莽a',
-    extension: 'Uzant谋',
-    agent: 'Temsilci Stratejisi',
-    model: 'Model',
-  },
-  list: {
-    source: {
-      github: 'GitHub\'dan y眉kleyin',
-      marketplace: 'Marketten Y眉kleme',
-      local: 'Yerel Paket Dosyas谋ndan Y眉kle',
-    },
-    noInstalled: 'Y眉kl眉 eklenti yok',
-    notFound: 'Eklenti bulunamad谋',
-  },
-  source: {
-    github: 'GitHub (陌ngilizce)',
-    marketplace: 'Pazar',
-    local: 'Yerel Paket Dosyas谋',
-  },
-  detailPanel: {
-    categoryTip: {
-      marketplace: 'Marketplace\'ten y眉klendi',
-      local: 'Yerel Eklenti',
-      debugging: 'Hata Ay谋klama Eklentisi',
-      github: 'Github\'dan y眉klendi',
-    },
-    operation: {
-      install: 'Y眉klemek',
-      detail: '艦ey',
-      checkUpdate: 'G眉ncellemeyi Kontrol Et',
-      remove: 'Kald谋rmak',
-      info: 'Eklenti Bilgileri',
-      viewDetail: 'ayr谋nt谋lara bak谋n',
-      update: 'G眉ncelle艧tirmek',
-    },
-    toolSelector: {
-      uninstalledContent: 'Bu eklenti yerel/GitHub deposundan y眉klenir. L眉tfen kurulumdan sonra kullan谋n.',
-      uninstalledLink: 'Eklentilerde Y枚net',
-      descriptionLabel: 'Ara莽 a莽谋klamas谋',
-      auto: 'Otomatik',
-      settings: 'KULLANICI AYARLARI',
-      empty: 'Ara莽 eklemek i莽in \'+\' d眉臒mesini t谋klay谋n. Birden fazla ara莽 ekleyebilirsiniz.',
-      unsupportedContent: 'Y眉kl眉 eklenti s眉r眉m眉 bu eylemi sa臒lamaz.',
-      paramsTip1: 'LLM 莽谋kar谋m parametrelerini kontrol eder.',
-      descriptionPlaceholder: 'Aletin amac谋n谋n k谋sa a莽谋klamas谋, 枚rne臒in belirli bir konum i莽in s谋cakl谋臒谋 elde edin.',
-      toolLabel: 'Alet',
-      placeholder: 'Bir ara莽 se莽in...',
-      title: 'Ara莽 ekle',
-      uninstalledTitle: 'Ara莽 y眉kl眉 de臒il',
-      unsupportedContent2: 'S眉r眉m眉 de臒i艧tirmek i莽in t谋klay谋n.',
-      params: 'AKIL Y脺R脺TME YAPILANDIRMASI',
-      paramsTip2: '\'Otomatik\' kapal谋yken, varsay谋lan de臒er kullan谋l谋r.',
-      unsupportedTitle: 'Desteklenmeyen Eylem',
-    },
-    strategyNum: '{{say谋}} {{strateji}} DAH陌L',
-    switchVersion: 'S眉r眉m眉 De臒i艧tir',
-    endpointDisableContent: '{{name}} 枚臒esini devre d谋艧谋 b谋rakmak ister misiniz?',
-    endpointsDocLink: 'Belgeyi g枚r眉nt眉leyin',
-    endpointsEmpty: 'U莽 nokta eklemek i莽in \'+\' d眉臒mesini t谋klay谋n',
-    endpoints: 'Biti艧 noktas谋',
-    disabled: 'Sakat',
-    endpointModalTitle: 'U莽 noktay谋 ayarlama',
-    configureModel: 'Modeli yap谋land谋rma',
-    actionNum: '{{say谋}} {{eylem}} DAH陌L',
-    configureTool: 'Arac谋 yap谋land谋r',
-    endpointsTip: 'Bu eklenti, u莽 noktalar arac谋l谋臒谋yla belirli i艧levler sa臒lar ve ge莽erli 莽al谋艧ma alan谋 i莽in birden 莽ok u莽 nokta k眉mesi yap谋land谋rabilirsiniz.',
-    configureApp: 'Uygulamay谋 Yap谋land谋r',
-    endpointDeleteTip: 'U莽 Noktay谋 Kald谋r',
-    endpointDeleteContent: '{{name}} 枚臒esini kald谋rmak ister misiniz?',
-    endpointModalDesc: 'Yap谋land谋r谋ld谋ktan sonra, eklenti taraf谋ndan API u莽 noktalar谋 arac谋l谋臒谋yla sa臒lanan 枚zellikler kullan谋labilir.',
-    modelNum: '{{say谋}} DAH陌L OLAN MODELLER',
-    endpointDisableTip: 'U莽 Noktay谋 Devre D谋艧谋 B谋rak',
-    serviceOk: 'Servis Tamam',
-  },
-  debugInfo: {
-    title: 'Hata ay谋klama',
-    viewDocs: 'Belgeleri G枚r眉nt眉le',
-  },
-  privilege: {
-    admins: 'Y枚neticiler',
-    whoCanDebug: 'Eklentilerde kimler hata ay谋klayabilir?',
-    everyone: 'Herkes',
-    title: 'Eklenti Tercihleri',
-    noone: 'Hi莽 kimse',
-    whoCanInstall: 'Eklentileri kimler y眉kleyebilir ve y枚netebilir?',
-  },
-  pluginInfoModal: {
-    packageName: 'Paket',
-    repository: 'Depo',
-    release: 'Serbest b谋rakma',
-    title: 'Eklenti bilgisi',
-  },
-  action: {
-    checkForUpdates: 'G眉ncellemeleri kontrol et',
-    deleteContentLeft: 'Kald谋rmak ister misiniz',
-    usedInApps: 'Bu eklenti {{num}} uygulamalar谋nda kullan谋l谋yor.',
-    delete: 'Eklentiyi kald谋r',
-    pluginInfo: 'Eklenti bilgisi',
-    deleteContentRight: 'eklenti?',
-  },
-  installModal: {
-    labels: {
-      repository: 'Depo',
-      version: 'S眉r眉m',
-      package: 'Paket',
-    },
-    back: 'Geri',
-    installComplete: 'Kurulum tamamland谋',
-    installing: 'Y眉kleme...',
-    installedSuccessfully: 'Y眉kleme ba艧ar谋l谋',
-    installFailedDesc: 'Eklenti y眉klenemedi, ba艧ar谋s谋z oldu.',
-    fromTrustSource: 'L眉tfen eklentileri yaln谋zca <trustSource>g眉venilir bir kaynaktan</trustSource> y眉kledi臒inizden emin olun.',
-    uploadingPackage: '{{packageName}} y眉kleniyor...',
-    readyToInstall: 'A艧a臒谋daki eklentiyi y眉klemek 眉zere',
-    next: '脰n眉m眉zdeki',
-    pluginLoadError: 'Eklenti y眉kleme hatas谋',
-    install: 'Y眉klemek',
-    cancel: '陌ptal',
-    installedSuccessfullyDesc: 'Eklenti ba艧ar谋yla y眉klendi.',
-    close: 'Kapatmak',
-    uploadFailed: 'Kar艧谋ya y眉kleme ba艧ar谋s谋z oldu',
-    installFailed: 'Y眉kleme ba艧ar谋s谋z oldu',
-    pluginLoadErrorDesc: 'Bu eklenti y眉klenmeyecek',
-    readyToInstallPackage: 'A艧a臒谋daki eklentiyi y眉klemek 眉zere',
-    readyToInstallPackages: 'A艧a臒谋daki {{num}} eklentilerini y眉klemek 眉zereyim',
-    dropPluginToInstall: 'Y眉klemek i莽in eklenti paketini buraya b谋rak谋n',
-    installPlugin: 'Eklentiyi Y眉kle',
-  },
-  installFromGitHub: {
-    installedSuccessfully: 'Y眉kleme ba艧ar谋l谋',
-    installFailed: 'Y眉kleme ba艧ar谋s谋z oldu',
-    installNote: 'L眉tfen eklentileri yaln谋zca g眉venilir bir kaynaktan y眉kledi臒inizden emin olun.',
-    selectVersion: 'S眉r眉m眉 se莽in',
-    selectPackage: 'Paket se莽',
-    installPlugin: 'GitHub\'dan eklenti y眉kleyin',
-    selectPackagePlaceholder: 'L眉tfen bir paket se莽in',
-    uploadFailed: 'Kar艧谋ya y眉kleme ba艧ar谋s谋z oldu',
-    selectVersionPlaceholder: 'L眉tfen bir s眉r眉m se莽in',
-    gitHubRepo: 'GitHub deposu',
-    updatePlugin: 'GitHub\'dan eklentiyi g眉ncelleyin',
-  },
-  upgrade: {
-    usedInApps: '{{num}} uygulamalar谋nda kullan谋l谋r',
-    upgrade: 'Y眉klemek',
-    title: 'Eklentiyi Y眉kle',
-    successfulTitle: 'Y眉kleme ba艧ar谋l谋',
-    upgrading: 'Y眉kleme...',
-    close: 'Kapatmak',
-    description: 'A艧a臒谋daki eklentiyi y眉klemek 眉zere',
-  },
-  error: {
-    inValidGitHubUrl: 'Ge莽ersiz GitHub URL\'si. L眉tfen 艧u bi莽imde ge莽erli bir URL girin: https://github.com/owner/repo',
-    fetchReleasesError: 'S眉r眉mler al谋nam谋yor. L眉tfen daha sonra tekrar deneyin.',
-    noReleasesFound: 'Yay谋n bulunamad谋. L眉tfen GitHub deposunu veya giri艧 URL\'sini kontrol edin.',
-  },
-  marketplace: {
-    sortOption: {
-      newlyReleased: 'Yeni 脟谋kanlar',
-      mostPopular: 'En pop眉ler',
-      firstReleased: '陌lk 脟谋kanlar',
-      recentlyUpdated: 'Son G眉ncelleme',
-    },
-    and: 've',
-    empower: 'Yapay zeka geli艧tirmenizi g眉莽lendirin',
-    pluginsResult: '{{num}} sonu莽',
-    difyMarketplace: 'Dify Pazar Yeri',
-    sortBy: 'Kara 艧ehir',
-    moreFrom: 'Marketplace\'ten daha fazlas谋',
-    noPluginFound: 'Eklenti bulunamad谋',
-    viewMore: 'Daha fazla g枚ster',
-    discover: 'Ke艧fetmek',
-    verifiedTip: 'Dify taraf谋ndan do臒rulanm谋艧t谋r.',
-    partnerTip: 'Dify partner\'谋 taraf谋ndan do臒ruland谋',
-  },
-  task: {
-    installedError: '{{errorLength}} eklentileri y眉klenemedi',
-    clearAll: 'T眉m眉n眉 temizle',
-    installing: '{{installingLength}} eklentilerinin kurulumu, 0 bitti.',
-    installingWithSuccess: '{{installingLength}} eklentileri y眉kleniyor, {{successLength}} ba艧ar谋l谋.',
-    installError: '{{errorLength}} eklentileri y眉klenemedi, g枚r眉nt眉lemek i莽in t谋klay谋n',
-    installingWithError: '{{installingLength}} eklentileri y眉kleniyor, {{successLength}} ba艧ar谋l谋, {{errorLength}} ba艧ar谋s谋z oldu',
-  },
-  allCategories: 'T眉m Kategoriler',
-  installAction: 'Y眉klemek',
-  search: 'Aramak',
-  install: '{{num}} y眉kleme',
-  searchPlugins: 'Eklentileri ara',
-  submitPlugin: 'Eklenti g枚nder',
-  searchTools: 'Arama ara莽lar谋...',
-  fromMarketplace: 'Pazar Yerinden',
-  installPlugin: 'Eklentiyi y眉kle',
-  installFrom: '艦URADAN Y脺KLE',
-  from: 'Kaynak',
-  endpointsEnabled: '{{num}} u莽 nokta k眉mesi etkinle艧tirildi',
-  findMoreInMarketplace: 'Marketplace\'te daha fazla bilgi edinin',
-  searchCategories: 'Arama Kategorileri',
-  searchInMarketplace: 'Marketplace\'te arama yapma',
-  metadata: {
-    title: 'Eklentiler',
-  },
-  difyVersionNotCompatible: 'Mevcut Dify s眉r眉m眉 bu eklentiyle uyumlu de臒il, l眉tfen gerekli minimum s眉r眉me g眉ncelleyin: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/tr-TR/time.ts b/i18n/tr-TR/time.ts
deleted file mode 100644
index f4cded0..0000000
--- a/i18n/tr-TR/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Sat: 'Sat',
-    Thu: 'Per艧embe',
-    Tue: 'Sal谋',
-    Mon: 'Mon',
-    Sun: 'G眉ne艧',
-    Fri: 'Cuma',
-    Wed: '脟ar艧amba',
-  },
-  months: {
-    March: 'Mart',
-    December: 'Aral谋k',
-    October: 'Ekim',
-    September: 'Eyl眉l',
-    July: 'Temmuz',
-    August: 'A臒ustos',
-    June: 'Haziran',
-    November: 'Kas谋m',
-    February: '艦ubat',
-    April: 'Nisan',
-    May: 'May谋s',
-    January: 'Ocak',
-  },
-  operation: {
-    cancel: '陌ptal',
-    now: '艦imdi',
-    pickDate: 'Tarih Se莽',
-    ok: 'Tamam',
-  },
-  title: {
-    pickTime: 'Zaman谋 Se莽',
-  },
-  defaultPlaceholder: 'Bir zaman se莽...',
-}
-
-export default translation
diff --git a/i18n/uk-UA/education.ts b/i18n/uk-UA/education.ts
deleted file mode 100644
index 3cb4750..0000000
--- a/i18n/uk-UA/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    end: '写谢褟 锌褉芯褎械褋褨泄薪芯谐芯 锌谢邪薪褍 Dify.',
-    coupon: '械泻褋泻谢褞蟹懈胁薪懈泄 泻褍锌芯薪 100%',
-    front: '袙懈 褌械锌械褉 屑邪褦褌械 锌褉邪胁芯 薪邪 褋褌邪褌褍褋 锌械褉械胁褨褉械薪芯褩 芯褋胁褨褌懈. 袘褍写褜 谢邪褋泻邪, 胁胁械写褨褌褜 褋胁芯褞 褨薪褎芯褉屑邪褑褨褞 锌褉芯 芯褋胁褨褌褍 薪懈卸褔械, 褖芯斜 蟹邪胁械褉褕懈褌懈 锌褉芯褑械褋 褨 芯褌褉懈屑邪褌懈',
-  },
-  form: {
-    schoolName: {
-      title: '袙邪褕邪 薪邪蟹胁邪 褕泻芯谢懈',
-      placeholder: '袙胁械写褨褌褜 芯褎褨褑褨泄薪褍, 锌芯胁薪褍 薪邪蟹胁褍 胁邪褕芯褩 褕泻芯谢懈',
-    },
-    schoolRole: {
-      option: {
-        administrator: '楔泻褨谢褜薪懈泄 邪写屑褨薪褨褋褌褉邪褌芯褉',
-        teacher: '袙褔懈褌械谢褜',
-        student: '小褌褍写械薪褌',
-      },
-      title: '袙邪褕邪 褉芯谢褜 褍 褕泻芯谢褨',
-    },
-    terms: {
-      desc: {
-        and: '褨',
-        end: '. 袧邪写褋懈谢邪褞褔懈:',
-        privacyPolicy: '袩芯谢褨褌懈泻邪 泻芯薪褎褨写械薪褑褨泄薪芯褋褌褨',
-        termsOfService: '校屑芯胁懈 芯斜褋谢褍谐芯胁褍胁邪薪薪褟',
-        front: '袙邪褕邪 褨薪褎芯褉屑邪褑褨褟 褌邪 胁懈泻芯褉懈褋褌邪薪薪褟 褋褌邪褌褍褋褍 袩械褉械胁褨褉械薪芯 胁 芯褋胁褨褌褨 锌褨写谢褟谐邪褞褌褜 薪邪褕芯屑褍',
-      },
-      option: {
-        inSchool: '携 锌褨写褌胁械褉写卸褍褞, 褖芯 褟 蟹邪褉械褦褋褌褉芯胁邪薪懈泄 邪斜芯 锌褉邪褑褞褞 胁 蟹邪蟹薪邪褔械薪褨泄 褍褋褌邪薪芯胁褨. Dify 屑芯卸械 胁懈屑邪谐邪褌懈 锌褨写褌胁械褉写卸械薪薪褟 屑芯褦褩 褉械褦褋褌褉邪褑褨褩/褌褉褍写芯胁芯褩 蟹邪泄薪褟褌芯褋褌褨. 携泻褖芯 褟 薪械锌褉邪胁懈谢褜薪芯 锌褉械写褋褌邪胁谢褞 褋胁芯褞 泻胁邪谢褨褎褨泻邪褑褨褞, 褟 锌芯谐芯写卸褍褞褋褟 褋锌谢邪褌懈褌懈 斜褍写褜-褟泻褨 蟹斜芯褉懈, 褟泻褨 褋锌芯褔邪褌泻褍 斜褍谢懈 褋泻邪褋芯胁邪薪褨 薪邪 芯褋薪芯胁褨 屑芯谐芯 薪邪胁褔邪谢褜薪芯谐芯 褋褌邪褌褍褋褍.',
-        age: '携 锌褨写褌胁械褉写卸褍褞, 褖芯 屑械薪褨 褖芯薪邪泄屑械薪褕械 18 褉芯泻褨胁.',
-      },
-      title: '校屑芯胁懈 褌邪 褍谐芯写懈',
-    },
-  },
-  submitError: '袙褨写锌褉邪胁泻邪 褎芯褉屑懈 薪械 胁写邪谢邪褋褟. 袘褍写褜 谢邪褋泻邪, 褋锌褉芯斜褍泄褌械 褖械 褉邪蟹 锌褨蟹薪褨褕械.',
-  rejectTitle: '袙邪褕邪 锌械褉械胁褨褉泻邪 芯褋胁褨褌懈 Dify 斜褍谢邪 胁褨写褏懈谢械薪邪',
-  submit: '袧邪写褨褋谢邪褌懈',
-  successTitle: '袙懈 芯褌褉懈屑邪谢懈 锌械褉械胁褨褉械薪械 芯褋胁褨褌褍 Dify',
-  emailLabel: '袙邪褕 锌芯褌芯褔薪懈泄 械谢械泻褌褉芯薪薪懈泄 谢懈褋褌',
-  rejectContent: '袧邪 卸邪谢褜, 胁懈 薪械 胁褨写锌芯胁褨写邪褦褌械 胁懈屑芯谐邪屑 写谢褟 褋褌邪褌褍褋褍 Education Verified 褨 褌芯屑褍 薪械 屑芯卸械褌械 芯褌褉懈屑邪褌懈 械泻褋泻谢褞蟹懈胁薪懈泄 泻褍锌芯薪 薪邪 100% 写谢褟 锌褉芯褎械褋褨泄薪芯谐芯 锌谢邪薪褍 Dify, 褟泻褖芯 胁懈泻芯褉懈褋褌芯胁褍褦褌械 褑褞 械谢械泻褌褉芯薪薪褍 邪写褉械褋褍.',
-  toVerified: '袨褌褉懈屑邪泄褌械 锌褨写褌胁械褉写卸械薪薪褟 芯褋胁褨褌懈',
-  learn: '袛褨蟹薪邪泄褌械褋褟, 褟泻 锌械褉械胁褨褉懈褌懈 芯褋胁褨褌褍',
-  currentSigned: '袙 写邪薪懈泄 屑芯屑械薪褌 胁懈 锌褨写锌懈褋邪薪褨 褟泻',
-  successContent: '袦懈 胁懈写邪谢懈 泻褍锌芯薪 薪邪 100% 蟹薪懈卸泻褍 薪邪 锌褉芯褎械褋褨泄薪懈泄 锌谢邪薪 Dify 写谢褟 胁邪褕芯谐芯 邪泻邪褍薪褌褍. 袣褍锌芯薪 写褨泄褋薪懈泄 锌褉芯褌褟谐芯屑 芯写薪芯谐芯 褉芯泻褍, 斜褍写褜 谢邪褋泻邪, 褋泻芯褉懈褋褌邪泄褌械褋褟 薪懈屑 锌褉芯褌褟谐芯屑 褌械褉屑褨薪褍 写褨褩.',
-}
-
-export default translation
diff --git a/i18n/uk-UA/plugin-tags.ts b/i18n/uk-UA/plugin-tags.ts
deleted file mode 100644
index 2d622c4..0000000
--- a/i18n/uk-UA/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    other: '袉薪褕懈泄',
-    utilities: '校褌懈谢褨褌懈',
-    education: '袨褋胁褨褌邪',
-    social: '小芯褑褨邪谢褜薪懈泄',
-    videos: '袙褨写械芯',
-    business: '袘褨蟹薪械褋',
-    news: '袙褨褋褌褨',
-    design: '袩褉芯械泻褌',
-    search: '楔褍泻邪褌懈',
-    medical: '袦械写懈褔薪懈泄',
-    productivity: '袩褉芯写褍泻褌懈胁薪褨褋褌褜',
-    finance: '肖褨薪邪薪褋懈',
-    travel: '袩芯写芯褉芯卸褍胁邪褌懈',
-    image: '袨斜褉邪蟹',
-    agent: '袗谐械薪褌',
-    weather: '袩芯谐芯写邪',
-    entertainment: '袪芯蟹胁邪谐懈',
-  },
-  allTags: '袙褋褨 褌械谐懈',
-  searchTags: '袩芯褕褍泻芯胁褨 褌械谐懈',
-}
-
-export default translation
diff --git a/i18n/uk-UA/plugin.ts b/i18n/uk-UA/plugin.ts
deleted file mode 100644
index 465624f..0000000
--- a/i18n/uk-UA/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    tools: '袉薪褋褌褉褍屑械薪褌',
-    all: '校胁械褋褜',
-    bundles: '袩邪泻械褌懈',
-    models: '袦芯写械谢褨',
-    extensions: '袪芯蟹褕懈褉械薪薪褟',
-    agents: '小褌褉邪褌械谐褨褩 邪谐械薪褌褨胁',
-  },
-  categorySingle: {
-    agent: '小褌褉邪褌械谐褨褟 邪谐械薪褌邪',
-    bundle: '袣芯屑锌谢械泻褌邪褑褨褟',
-    tool: '袉薪褋褌褉褍屑械薪褌',
-    extension: '袟斜褨谢褜褕械薪薪褟',
-    model: '袦芯写械谢褜',
-  },
-  list: {
-    source: {
-      local: '袉薪褋褌邪谢褟褑褨褟 蟹 谢芯泻邪谢褜薪芯谐芯 褎邪泄谢褍 锌邪泻械褌邪',
-      marketplace: '袉薪褋褌邪谢褟褑褨褟 蟹 Marketplace',
-      github: '袙褋褌邪薪芯胁谢械薪薪褟 蟹 GitHub',
-    },
-    noInstalled: '袩谢邪谐褨薪懈 薪械 胁褋褌邪薪芯胁谢械薪芯',
-    notFound: '袩谢邪谐褨薪褨胁 薪械 蟹薪邪泄写械薪芯',
-  },
-  source: {
-    marketplace: '袪懈薪泻褍',
-    local: '肖邪泄谢 谢芯泻邪谢褜薪芯谐芯 锌邪泻械褌邪',
-    github: '袚褨褌褏邪斜',
-  },
-  detailPanel: {
-    categoryTip: {
-      github: '袙褋褌邪薪芯胁谢械薪芯 蟹 Github',
-      debugging: '袩谢邪谐褨薪 薪邪谢邪谐芯写卸械薪薪褟',
-      local: '袥芯泻邪谢褜薪懈泄 锌谢邪谐褨薪',
-      marketplace: '袉薪褋褌邪谢褜芯胁邪薪芯 蟹 Marketplace',
-    },
-    operation: {
-      viewDetail: '袩械褉械谐谢褟薪褍褌懈 写械褌邪谢褨',
-      detail: '袛械褌邪谢褨',
-      remove: '袙懈写邪谢懈褌懈',
-      install: '袉薪褋褌邪谢褞胁邪褌懈',
-      checkUpdate: '袩械褉械胁褨褉懈褌懈 袨薪芯胁谢械薪薪褟',
-      update: '袨薪芯胁谢褞胁邪褌懈',
-      info: '袉薪褎芯褉屑邪褑褨褟 锌褉芯 锌谢邪谐褨薪',
-    },
-    toolSelector: {
-      placeholder: '袙懈斜械褉褨褌褜 褨薪褋褌褉褍屑械薪褌...',
-      descriptionLabel: '袨锌懈褋 蟹邪褋芯斜褍',
-      paramsTip1: '袣芯薪褌褉芯谢褞褦 锌邪褉邪屑械褌褉懈 谢芯谐褨褔薪芯谐芯 胁懈褋薪芯胁泻褍 LLM.',
-      toolLabel: '袉薪褋褌褉褍屑械薪褌',
-      params: '袣袨袧肖袉袚校袪袗笑袉携 袦袉袪袣校袙袗袧鞋',
-      settings: '袧袗袥袗楔孝校袙袗袧袧携 袣袨袪袠小孝校袙袗效袗',
-      uninstalledLink: '袣械褉褍胁邪薪薪褟 胁 锌谢邪谐褨薪邪褏',
-      title: '袛芯写邪褌懈 褨薪褋褌褉褍屑械薪褌',
-      paramsTip2: '袣芯谢懈 锌邪褉邪屑械褌褉 "袗胁褌芯屑邪褌懈褔薪芯" 胁懈屑泻薪械薪芯, 胁懈泻芯褉懈褋褌芯胁褍褦褌褜褋褟 蟹薪邪褔械薪薪褟 蟹邪 蟹邪屑芯胁褔褍胁邪薪薪褟屑.',
-      empty: '袧邪褌懈褋薪褨褌褜 泻薪芯锌泻褍 芦+禄, 褖芯斜 写芯写邪褌懈 褨薪褋褌褉褍屑械薪褌懈. 袙懈 屑芯卸械褌械 写芯写邪褌懈 泻褨谢褜泻邪 褨薪褋褌褉褍屑械薪褌褨胁.',
-      uninstalledTitle: '袉薪褋褌褉褍屑械薪褌 薪械 胁褋褌邪薪芯胁谢械薪芯',
-      descriptionPlaceholder: '袣芯褉芯褌泻懈泄 芯锌懈褋 锌褉懈蟹薪邪褔械薪薪褟 褨薪褋褌褉褍屑械薪褌褍, 薪邪锌褉懈泻谢邪写, 芯褌褉懈屑邪薪薪褟 褌械屑锌械褉邪褌褍褉懈 写谢褟 泻芯薪泻褉械褌薪芯谐芯 屑褨褋褑褟.',
-      unsupportedTitle: '袧械锌褨写褌褉懈屑褍胁邪薪褨 写褨褩',
-      unsupportedContent2: '袧邪褌懈褋薪褨褌褜, 褖芯斜 蟹屑褨薪懈褌懈 胁械褉褋褨褞.',
-      auto: '袗胁褌芯屑邪褌懈褔薪懈泄',
-      uninstalledContent: '笑械泄 锌谢邪谐褨薪 胁褋褌邪薪芯胁谢褞褦褌褜褋褟 蟹 谢芯泻邪谢褜薪芯谐芯/GitHub 褉械锌芯蟹懈褌芯褉褨褞. 袘褍写褜 谢邪褋泻邪, 胁懈泻芯褉懈褋褌芯胁褍泄褌械 锌褨褋谢褟 胁褋褌邪薪芯胁谢械薪薪褟.',
-      unsupportedContent: '袙褋褌邪薪芯胁谢械薪邪 胁械褉褋褨褟 锌谢邪谐褨薪邪 薪械 锌械褉械写斜邪褔邪褦 褑褨褦褩 写褨褩.',
-    },
-    modelNum: '{{num}} 袦袨袛袝袥袉 袙 袣袨袦袩袥袝袣孝袉',
-    switchVersion: '袙械褉褋褨褟 锌械褉械屑懈泻邪褔邪',
-    configureApp: '袧邪谢邪褕褌褍泄褌械 写芯写邪褌芯泻',
-    endpointDeleteTip: '袙懈写邪谢懈褌懈 泻褨薪褑械胁褍 褌芯褔泻褍',
-    endpoints: '袣褨薪褑械胁褨 褌芯褔泻懈',
-    endpointsDocLink: '袩械褉械谐谢褟薪褍褌懈 写芯泻褍屑械薪褌',
-    configureModel: '袧邪谢邪褕褌褍胁邪薪薪褟 屑芯写械谢褨',
-    endpointDisableTip: '袙懈屑泻薪褨褌褜 泻褨薪褑械胁褍 褌芯褔泻褍',
-    endpointsEmpty: '袧邪褌懈褋薪褨褌褜 泻薪芯锌泻褍 芦+禄, 褖芯斜 写芯写邪褌懈 泻褨薪褑械胁褍 褌芯褔泻褍',
-    actionNum: '{{num}} {{写褨褟}} 袙袣袥挟效袝袧袉',
-    disabled: '袙懈屑泻薪褍褌芯',
-    endpointModalTitle: '袧邪谢邪褕褌褍胁邪薪薪褟 泻褨薪褑械胁芯褩 褌芯褔泻懈',
-    endpointDisableContent: '效懈 褏芯褌褨谢懈 斜 胁懈 胁懈屑泻薪褍褌懈 {{name}}?',
-    endpointDeleteContent: '效懈 褏芯褌褨谢懈 斜 胁懈 胁懈写邪谢懈褌懈 {{name}}?',
-    endpointsTip: '笑械泄 锌谢邪谐褨薪 薪邪写邪褦 泻芯薪泻褉械褌薪褨 褎褍薪泻褑褨褩 褔械褉械蟹 泻褨薪褑械胁褨 褌芯褔泻懈, 褨 胁懈 屑芯卸械褌械 薪邪谢邪褕褌褍胁邪褌懈 泻褨谢褜泻邪 薪邪斜芯褉褨胁 泻褨薪褑械胁懈褏 褌芯褔芯泻 写谢褟 锌芯褌芯褔薪芯谐芯 褉芯斜芯褔芯谐芯 锌褉芯褋褌芯褉褍.',
-    strategyNum: '{{num}} {{褋褌褉邪褌械谐褨褟}} 袙袣袥挟效袝袧袉',
-    endpointModalDesc: '袩褨褋谢褟 薪邪谢邪褕褌褍胁邪薪薪褟 屑芯卸薪邪 胁懈泻芯褉懈褋褌芯胁褍胁邪褌懈 褎褍薪泻褑褨褩, 褖芯 薪邪写邪褞褌褜褋褟 锌谢邪谐褨薪芯屑 褔械褉械蟹 泻褨薪褑械胁褨 褌芯褔泻懈 API.',
-    configureTool: '袉薪褋褌褉褍屑械薪褌 薪邪谢邪褕褌褍胁邪薪薪褟',
-    serviceOk: '小械褉胁褨褋 锌褉邪褑褞褦',
-  },
-  debugInfo: {
-    title: '袧邪谢邪谐芯写卸械薪薪褟',
-    viewDocs: '袩械褉械谐谢褟薪褍褌懈 写芯泻褍屑械薪褌懈',
-  },
-  privilege: {
-    whoCanDebug: '啸褌芯 屑芯卸械 薪邪谢邪谐芯写卸褍胁邪褌懈 锌谢邪谐褨薪懈?',
-    admins: '袗写屑褨薪懈',
-    noone: '袧褨褏褌芯',
-    whoCanInstall: '啸褌芯 屑芯卸械 胁褋褌邪薪芯胁谢褞胁邪褌懈 锌谢邪谐褨薪懈 褌邪 泻械褉褍胁邪褌懈 薪懈屑懈?',
-    everyone: '袣芯卸械薪',
-    title: '袧邪谢邪褕褌褍胁邪薪薪褟 锌谢邪谐褨薪邪',
-  },
-  pluginInfoModal: {
-    repository: '小褏芯胁懈褖械',
-    release: '袪械谢褨蟹',
-    title: '袉薪褎芯褉屑邪褑褨褟 锌褉芯 锌谢邪谐褨薪',
-    packageName: '袩邪泻褍薪芯泻',
-  },
-  action: {
-    deleteContentLeft: '效懈 褏芯褌褨谢懈 斜 胁懈 胁懈写邪谢懈褌懈',
-    usedInApps: '笑械泄 锌谢邪谐褨薪 胁懈泻芯褉懈褋褌芯胁褍褦褌褜褋褟 胁 写芯写邪褌泻邪褏 {{num}}.',
-    deleteContentRight: '锌谢邪谐褨薪?',
-    checkForUpdates: '袩械褉械胁褨褉褌械 薪邪褟胁薪褨褋褌褜 芯薪芯胁谢械薪褜',
-    delete: '袙懈写邪谢懈褌懈 锌谢邪谐褨薪',
-    pluginInfo: '袉薪褎芯褉屑邪褑褨褟 锌褉芯 锌谢邪谐褨薪',
-  },
-  installModal: {
-    labels: {
-      package: '袩邪泻褍薪芯泻',
-      repository: '小褏芯胁懈褖械',
-      version: '袙械褉褋褨褟',
-    },
-    uploadFailed: '袧械 胁写邪谢芯褋褟 蟹邪胁邪薪褌邪卸懈褌懈 褎邪泄谢',
-    close: '袟邪泻褉懈褌懈',
-    installedSuccessfullyDesc: '袩谢邪谐褨薪 褍褋锌褨褕薪芯 胁褋褌邪薪芯胁谢械薪芯.',
-    readyToInstallPackages: '袩褉芯 胁褋褌邪薪芯胁谢械薪薪褟 薪邪褋褌褍锌薪懈褏 锌谢邪谐褨薪褨胁 {{num}}',
-    install: '袉薪褋褌邪谢褞胁邪褌懈',
-    cancel: '小泻邪褋褍胁邪褌懈',
-    readyToInstall: '袩褉芯 胁褋褌邪薪芯胁谢械薪薪褟 薪邪褋褌褍锌薪芯谐芯 锌谢邪谐褨薪邪',
-    pluginLoadErrorDesc: '笑械泄 锌谢邪谐褨薪 薪械 斜褍写械 胁褋褌邪薪芯胁谢械薪芯',
-    installComplete: '袉薪褋褌邪谢褟褑褨褞 蟹邪胁械褉褕械薪芯',
-    installing: '校褋褌邪薪芯胁泻懈...',
-    installPlugin: '袙褋褌邪薪芯胁懈褌懈 锌谢邪谐褨薪',
-    dropPluginToInstall: '袩械褉械褌褟谐薪褨褌褜 锌邪泻械褌 锌谢邪谐褨薪邪 褋褞写懈, 褖芯斜 胁褋褌邪薪芯胁懈褌懈',
-    uploadingPackage: '袟邪胁邪薪褌邪卸械薪薪褟 {{packageName}}...',
-    readyToInstallPackage: '袩褉芯 胁褋褌邪薪芯胁谢械薪薪褟 薪邪褋褌褍锌薪芯谐芯 锌谢邪谐褨薪邪',
-    pluginLoadError: '袩芯屑懈谢泻邪 蟹邪胁邪薪褌邪卸械薪薪褟 锌谢邪谐褨薪邪',
-    fromTrustSource: '袘褍写褜 谢邪褋泻邪, 锌械褉械泻芯薪邪泄褌械褋褟, 褖芯 胁懈 胁褋褌邪薪芯胁谢褞褦褌械 锌谢邪谐褨薪懈 谢懈褕械 蟹 <trustSource>薪邪写褨泄薪芯谐芯 写卸械褉械谢邪</trustSource>.',
-    back: '袟邪写薪褨泄',
-    installFailedDesc: '袩谢邪谐褨薪 斜褍胁 胁褋褌邪薪芯胁谢械薪懈泄 薪械 胁写邪谢芯褋褟.',
-    installFailed: '袧械 胁写邪谢芯褋褟 胁褋褌邪薪芯胁懈褌懈',
-    installedSuccessfully: '袦芯薪褌邪卸 褍褋锌褨褕薪懈泄',
-    next: '袧邪褋褌褍锌薪懈泄',
-  },
-  installFromGitHub: {
-    selectVersionPlaceholder: '袘褍写褜 谢邪褋泻邪, 芯斜械褉褨褌褜 胁械褉褋褨褞',
-    uploadFailed: '袧械 胁写邪谢芯褋褟 蟹邪胁邪薪褌邪卸懈褌懈 褎邪泄谢',
-    selectVersion: '袨斜械褉褨褌褜 胁械褉褋褨褞',
-    installNote: '袘褍写褜 谢邪褋泻邪, 锌械褉械泻芯薪邪泄褌械褋褟, 褖芯 胁懈 胁褋褌邪薪芯胁谢褞褦褌械 锌谢邪谐褨薪懈 谢懈褕械 蟹 薪邪写褨泄薪芯谐芯 写卸械褉械谢邪.',
-    gitHubRepo: '袪械锌芯蟹懈褌芯褉褨泄 GitHub',
-    installFailed: '袧械 胁写邪谢芯褋褟 胁褋褌邪薪芯胁懈褌懈',
-    installPlugin: '袙褋褌邪薪芯胁懈褌懈 锌谢邪谐褨薪 蟹 GitHub',
-    updatePlugin: '袨薪芯胁懈褌懈 锌谢邪谐褨薪 蟹 GitHub',
-    installedSuccessfully: '袦芯薪褌邪卸 褍褋锌褨褕薪懈泄',
-    selectPackage: '袨斜械褉褨褌褜 锌邪泻械褌',
-    selectPackagePlaceholder: '袘褍写褜 谢邪褋泻邪, 芯斜械褉褨褌褜 锌邪泻械褌',
-  },
-  upgrade: {
-    description: '袩褉芯 胁褋褌邪薪芯胁谢械薪薪褟 薪邪褋褌褍锌薪芯谐芯 锌谢邪谐褨薪邪',
-    close: '袟邪泻褉懈褌懈',
-    successfulTitle: '校褋褌邪薪芯胁泻邪 褍褋锌褨褕薪邪',
-    upgrade: '袉薪褋褌邪谢褞胁邪褌懈',
-    usedInApps: '袙懈泻芯褉懈褋褌芯胁褍褦褌褜褋褟 胁 写芯写邪褌泻邪褏 {{num}}',
-    upgrading: '校褋褌邪薪芯胁泻懈...',
-    title: '袙褋褌邪薪芯胁懈褌懈 锌谢邪谐褨薪',
-  },
-  error: {
-    noReleasesFound: '袪械谢褨蟹褨胁 薪械 蟹薪邪泄写械薪芯. 袘褍写褜 谢邪褋泻邪, 锌械褉械胁褨褉褌械 褉械锌芯蟹懈褌芯褉褨泄 GitHub 邪斜芯 URL-邪写褉械褋褍 胁胁械写械薪薪褟.',
-    fetchReleasesError: '袧械 胁写邪褦褌褜褋褟 芯褌褉懈屑邪褌懈 蟹谐芯写懈. 袩芯胁褌芯褉褨褌褜 褋锌褉芯斜褍 锌褨蟹薪褨褕械.',
-    inValidGitHubUrl: '袧械胁褨褉薪邪 URL-邪写褉械褋邪 GitHub. 袘褍写褜 谢邪褋泻邪, 胁胁械写褨褌褜 写褨泄褋薪褍 URL-邪写褉械褋褍 褍 褎芯褉屑邪褌褨: https://github.com/owner/repo',
-  },
-  marketplace: {
-    sortOption: {
-      mostPopular: '袧邪泄锌芯锌褍谢褟褉薪褨褕懈褏',
-      newlyReleased: '袧芯胁懈泄 褉械谢褨蟹',
-      recentlyUpdated: '袧械褖芯写邪胁薪芯 芯薪芯胁谢械薪芯',
-      firstReleased: '袩械褉褕懈泄 褉械谢褨蟹',
-    },
-    and: '褨',
-    discover: '袙懈褟胁懈褌懈',
-    moreFrom: '袘褨谢褜褕械 胁褨写 Marketplace',
-    sortBy: '效芯褉薪械 屑褨褋褌芯',
-    pluginsResult: '袪械蟹褍谢褜褌邪褌懈 {{num}}',
-    empower: '袪芯蟹褕懈褉褞泄褌械 屑芯卸谢懈胁芯褋褌褨 褉芯蟹褉芯斜泻懈 褕褌褍褔薪芯谐芯 褨薪褌械谢械泻褌褍',
-    difyMarketplace: 'Dify Marketplace',
-    viewMore: '袛懈胁懈褌懈褋褜 斜褨谢褜褕械',
-    noPluginFound: '袩谢邪谐褨薪 薪械 蟹薪邪泄写械薪芯',
-    verifiedTip: '袩械褉械胁褨褉械薪芯 Dify',
-    partnerTip: '袩械褉械胁褨褉械薪芯 锌邪褉褌薪械褉芯屑 Dify',
-  },
-  task: {
-    installingWithError: '袧械 胁写邪谢芯褋褟 胁褋褌邪薪芯胁懈褌懈 锌谢邪谐褨薪懈 {{installingLength}}, 褍褋锌褨褏 {{successLength}}, {{errorLength}}',
-    clearAll: '袨褔懈褋褌懈褌懈 胁褋械',
-    installedError: '袩谢邪谐褨薪懈 {{errorLength}} 薪械 胁写邪谢芯褋褟 胁褋褌邪薪芯胁懈褌懈',
-    installError: '袩谢邪谐褨薪懈 {{errorLength}} 薪械 胁写邪谢芯褋褟 胁褋褌邪薪芯胁懈褌懈, 薪邪褌懈褋薪褨褌褜, 褖芯斜 锌械褉械谐谢褟薪褍褌懈',
-    installing: '袙褋褌邪薪芯胁谢械薪薪褟 锌谢邪谐褨薪褨胁 {{installingLength}}, 0 胁懈泻芯薪邪薪芯.',
-    installingWithSuccess: '袙褋褌邪薪芯胁谢械薪薪褟 锌谢邪谐褨薪褨胁 {{installingLength}}, 褍褋锌褨褏 {{successLength}}.',
-  },
-  submitPlugin: '袧邪写褨褋谢邪褌懈 锌谢邪谐褨薪',
-  from: '袙褨写',
-  searchInMarketplace: '袩芯褕褍泻 褍 Marketplace',
-  endpointsEnabled: '{{num}} 薪邪斜芯褉褨胁 泻褨薪褑械胁懈褏 褌芯褔芯泻 褍胁褨屑泻薪械薪芯',
-  installAction: '袉薪褋褌邪谢褞胁邪褌懈',
-  findMoreInMarketplace: '袛褨蟹薪邪泄褌械褋褟 斜褨谢褜褕械 胁 Marketplace',
-  installFrom: '袙小孝袗袧袨袙袠孝袠 袟',
-  install: '{{num}} 胁褋褌邪薪芯胁谢褞褦',
-  fromMarketplace: '袙褨写 Marketplace',
-  searchCategories: '袣邪褌械谐芯褉褨褩 锌芯褕褍泻褍',
-  installPlugin: '袙褋褌邪薪芯胁懈褌懈 锌谢邪谐褨薪',
-  searchTools: '袉薪褋褌褉褍屑械薪褌懈 锌芯褕褍泻褍...',
-  search: '楔褍泻邪褌懈',
-  searchPlugins: '袩谢邪谐褨薪懈 锌芯褕褍泻褍',
-  allCategories: '袙褋褨 泻邪褌械谐芯褉褨褩',
-  metadata: {
-    title: '袩谢邪谐褨薪懈',
-  },
-  difyVersionNotCompatible: '袩芯褌芯褔薪邪 胁械褉褋褨褟 Dify 薪械 褋褍屑褨褋薪邪 蟹 褑懈屑 锌谢邪谐褨薪芯屑, 斜褍写褜 谢邪褋泻邪, 芯薪芯胁褨褌褜 写芯 屑褨薪褨屑邪谢褜薪芯褩 胁械褉褋褨褩: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/uk-UA/time.ts b/i18n/uk-UA/time.ts
deleted file mode 100644
index 1ea08cb..0000000
--- a/i18n/uk-UA/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Thu: '效械褌胁械褉',
-    Fri: '袙褨谢褜薪懈泄',
-    Sun: '小芯薪褑械',
-    Tue: '袙褨胁褌芯褉芯泻',
-    Mon: '袦芯薪',
-    Sat: '小褍斜芯褌邪',
-    Wed: '小械褉械写邪',
-  },
-  months: {
-    August: '小械褉锌械薪褜',
-    January: '小褨褔械薪褜',
-    October: '袞芯胁褌械薪褜',
-    June: '效械褉胁械薪褜',
-    September: '袙械褉械褋械薪褜',
-    February: '袥褞褌懈泄',
-    November: '袥懈褋褌芯锌邪写',
-    July: '袥懈锌械薪褜',
-    May: '孝褉邪胁械薪褜',
-    December: '袚褉褍写械薪褜',
-    April: '袣胁褨褌械薪褜',
-    March: '袘械褉械蟹械薪褜',
-  },
-  operation: {
-    cancel: '小泻邪褋褍胁邪褌懈',
-    pickDate: '袙懈斜械褉褨褌褜 写邪褌褍',
-    now: '孝械锌械褉',
-    ok: '袛芯斜褉械',
-  },
-  title: {
-    pickTime: '袙懈斜械褉褨褌褜 褔邪褋',
-  },
-  defaultPlaceholder: '袙懈斜械褉褨褌褜 褔邪褋...',
-}
-
-export default translation
diff --git a/i18n/vi-VN/education.ts b/i18n/vi-VN/education.ts
deleted file mode 100644
index 3561493..0000000
--- a/i18n/vi-VN/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    coupon: 'm茫 gi岷 gi谩 膽峄檆 quy峄乶 100%',
-    front: 'B岷 hi峄噉 膽峄� 膽i峄乽 ki峄噉 膽峄� c贸 tr岷g th谩i X谩c minh Gi谩o d峄. Vui l貌ng nh岷璸 th么ng tin gi谩o d峄 c峄 b岷 b锚n d瓢峄沬 膽峄� ho脿n t岷 qu谩 tr矛nh v脿 nh岷璶 m峄檛',
-    end: 'cho K岷� ho岷h Chuy锚n nghi峄噋 Dify.',
-  },
-  form: {
-    schoolName: {
-      placeholder: 'Nh岷璸 t锚n ch铆nh th峄ヽ, kh么ng vi岷縯 t岷痶 c峄 tr瓢峄漬g b岷',
-      title: 'T锚n Tr瓢峄漬g C峄 B岷',
-    },
-    schoolRole: {
-      option: {
-        teacher: 'Gi谩o vi锚n',
-        student: 'H峄峜 sinh',
-        administrator: 'Qu岷 tr峄� vi锚n tr瓢峄漬g h峄峜',
-      },
-      title: 'Vai tr貌 c峄 b岷 峄� tr瓢峄漬g',
-    },
-    terms: {
-      desc: {
-        termsOfService: '膼i峄乽 kho岷 d峄媍h v峄�',
-        privacyPolicy: 'Ch铆nh s谩ch b岷 m岷璽',
-        and: 'v脿',
-        end: 'B岷眓g c谩ch g峄璱:',
-        front: 'Th么ng tin c峄 b岷 v脿 vi峄嘽 s峄� d峄g tr岷g th谩i 膼瓢峄 x谩c minh Gi谩o d峄 c峄 ch煤ng t么i thu峄檆 v峄� 膽i峄乽 ki峄噉 c峄 ch煤ng t么i',
-      },
-      option: {
-        age: 'T么i x谩c nh岷璶 r岷眓g t么i 铆t nh岷 18 tu峄昳',
-        inSchool: 'T么i x谩c nh岷璶 r岷眓g t么i 膽茫 膽膬ng k媒 ho岷穋 l脿m vi峄嘽 t岷 c啤 s峄� 膽茫 cung c岷. Dify c贸 th峄� y锚u c岷 ch峄﹏g minh v峄� vi峄嘽 膽膬ng k媒/l脿m vi峄嘽. N岷縰 t么i cung c岷 th么ng tin kh么ng ch铆nh x谩c v峄� 膽峄� 膽i峄乽 ki峄噉 c峄 m矛nh, t么i 膽峄搉g 媒 tr岷� b岷 k峄� kho岷 ph铆 n脿o ban 膽岷 膽瓢峄 mi峄卬 d峄盿 tr锚n t矛nh tr岷g gi谩o d峄 c峄 t么i.',
-      },
-      title: '膼i峄乽 kho岷 & Th峄廰 thu岷璶',
-    },
-  },
-  toVerified: 'X谩c th峄眂 gi谩o d峄',
-  successTitle: 'B岷 膽茫 膽瓢峄 x谩c minh gi谩o d峄 Dify',
-  submit: 'G峄璱',
-  rejectTitle: 'Y锚u c岷 x谩c minh gi谩o d峄 Dify c峄 b岷 膽茫 b峄� t峄� ch峄慽',
-  successContent: 'Ch煤ng t么i 膽茫 ph谩t h脿nh m峄檛 phi岷縰 gi岷 gi谩 100% cho g贸i Dify Professional v脿o t脿i kho岷 c峄 b岷. Phi岷縰 gi岷 gi谩 c贸 hi峄噓 l峄眂 trong m峄檛 n膬m, vui l貌ng s峄� d峄g n贸 trong th峄漣 gian hi峄噓 l峄眂.',
-  currentSigned: 'HI峄哊 膼ANG 膼膫NG NH岷琍 V脌O',
-  learn: 'H峄峜 c谩ch x谩c minh tr矛nh 膽峄� gi谩o d峄',
-  emailLabel: 'Email hi峄噉 t岷 c峄 b岷',
-  rejectContent: 'R岷 ti岷縞, b岷 kh么ng 膽峄� 膽i峄乽 ki峄噉 膽峄� nh岷璶 tr岷g th谩i X谩c minh Gi谩o d峄 v脿 do 膽贸 kh么ng th峄� nh岷璶 膽瓢峄 m茫 gi岷 gi谩 膽峄檆 quy峄乶 100% cho K岷� ho岷h Chuy锚n nghi峄噋 Dify n岷縰 b岷 s峄� d峄g 膽峄媋 ch峄� email n脿y.',
-  submitError: 'G峄璱 m岷玼 kh么ng th脿nh c么ng. Vui l貌ng th峄� l岷 sau.',
-}
-
-export default translation
diff --git a/i18n/vi-VN/plugin-tags.ts b/i18n/vi-VN/plugin-tags.ts
deleted file mode 100644
index 5bbebb5..0000000
--- a/i18n/vi-VN/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    education: 'Gi谩o d峄',
-    medical: 'Y',
-    business: 'Kinh doanh',
-    weather: 'Th峄漣 ti岷縯',
-    finance: 'T脿i ch铆nh',
-    productivity: 'N膬ng su岷',
-    design: 'Thi岷縯 k岷�',
-    videos: 'Video',
-    utilities: 'Ti峄噉 铆ch',
-    social: 'X茫 h峄檌',
-    search: 'T矛m ki岷縨',
-    news: 'Tin t峄ヽ',
-    image: '岷h',
-    agent: 'Ng瓢峄漣 膽岷 l媒',
-    other: 'Kh谩c',
-    travel: 'Du l峄媍h',
-    entertainment: 'Gi岷 tr铆',
-  },
-  searchTags: 'Th岷� t矛m ki岷縨',
-  allTags: 'T岷 c岷� th岷�',
-}
-
-export default translation
diff --git a/i18n/vi-VN/plugin.ts b/i18n/vi-VN/plugin.ts
deleted file mode 100644
index 5e5147c..0000000
--- a/i18n/vi-VN/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    all: 'T岷 c岷�',
-    bundles: 'B贸',
-    extensions: 'Ph岷 m峄� r峄檔g',
-    tools: 'C么ng c峄�',
-    agents: 'Chi岷縩 l瓢峄 膽岷 l媒',
-    models: 'M么 h矛nh',
-  },
-  categorySingle: {
-    agent: 'Chi岷縩 l瓢峄 膽岷 l媒',
-    tool: 'C么ng c峄�',
-    extension: 'Ph岷 m峄� r峄檔g',
-    model: 'M岷玼',
-    bundle: 'B贸',
-  },
-  list: {
-    source: {
-      marketplace: 'C脿i 膽岷穞 t峄� Marketplace',
-      local: 'C脿i 膽岷穞 t峄� t峄噋 g贸i c峄 b峄�',
-      github: 'C脿i 膽岷穞 t峄� GitHub',
-    },
-    noInstalled: 'Kh么ng c贸 plugin n脿o 膽瓢峄 c脿i 膽岷穞',
-    notFound: 'Kh么ng t矛m th岷 plugin',
-  },
-  source: {
-    marketplace: 'Ch峄�',
-    local: 'T峄噋 g贸i c峄 b峄�',
-    github: 'GitHub',
-  },
-  detailPanel: {
-    categoryTip: {
-      local: 'Plugin c峄 b峄�',
-      debugging: 'Plugin g峄� l峄梚',
-      marketplace: '膼瓢峄 c脿i 膽岷穞 t峄� Marketplace',
-      github: 'C脿i 膽岷穞 t峄� Github',
-    },
-    operation: {
-      detail: 'Chi ti岷縯',
-      update: 'C岷璸 nh岷璽',
-      viewDetail: 'xem chi ti岷縯',
-      info: 'Th么ng tin plugin',
-      remove: 'Tri峄噒',
-      install: 'C脿i 膽岷穞',
-      checkUpdate: 'Ki峄僲 tra c岷璸 nh岷璽',
-    },
-    toolSelector: {
-      descriptionPlaceholder: 'M么 t岷� ng岷痭 g峄峮 v峄� m峄 膽铆ch c峄 c么ng c峄�, v铆 d峄�: l岷 nhi峄噒 膽峄� cho m峄檛 v峄� tr铆 c峄� th峄�.',
-      params: 'C岷 H脤NH L脻 LU岷琋',
-      toolLabel: 'C么ng c峄�',
-      descriptionLabel: 'M么 t岷� c么ng c峄�',
-      unsupportedContent2: 'Nh岷 膽峄� chuy峄僴 膽峄昳 phi锚n b岷.',
-      auto: 'T峄� 膽峄檔g',
-      placeholder: 'Ch峄峮 m峄檛 c么ng c峄�...',
-      paramsTip1: 'Ki峄僲 so谩t c谩c tham s峄� suy lu岷璶 LLM.',
-      uninstalledTitle: 'C么ng c峄� ch瓢a 膽瓢峄 c脿i 膽岷穞',
-      unsupportedContent: 'Phi锚n b岷 plugin 膽茫 c脿i 膽岷穞 kh么ng cung c岷 h脿nh 膽峄檔g n脿y.',
-      uninstalledContent: 'Plugin n脿y 膽瓢峄 c脿i 膽岷穞 t峄� kho l瓢u tr峄� c峄 b峄� / GitHub. Vui l貌ng s峄� d峄g sau khi c脿i 膽岷穞.',
-      paramsTip2: 'Khi t岷痶 \'T峄� 膽峄檔g\', gi谩 tr峄� m岷穋 膽峄媙h s岷� 膽瓢峄 s峄� d峄g.',
-      uninstalledLink: 'Qu岷 l媒 trong Plugins',
-      title: 'Th锚m c么ng c峄�',
-      settings: 'C脌I 膼岷禩 NG漂峄淚 D脵NG',
-      empty: 'Nh岷 v脿o n煤t \'+\' 膽峄� th锚m c么ng c峄�. B岷 c贸 th峄� th锚m nhi峄乽 c么ng c峄�.',
-      unsupportedTitle: 'H脿nh 膽峄檔g kh么ng 膽瓢峄 h峄� tr峄�',
-    },
-    switchVersion: 'Chuy峄僴 膽峄昳 phi锚n b岷',
-    endpointDisableTip: 'T岷痶 膽i峄僲 cu峄慽',
-    endpointDeleteTip: 'X贸a 膽i峄僲 cu峄慽',
-    configureApp: '膼峄媙h c岷 h矛nh 峄﹏g d峄g',
-    configureModel: '膼峄媙h c岷 h矛nh m么 h矛nh',
-    endpointsTip: 'Plugin n脿y cung c岷 c谩c ch峄ヽ n膬ng c峄� th峄� th么ng qua c谩c 膽i峄僲 cu峄慽 v脿 b岷 c贸 th峄� 膽峄媙h c岷 h矛nh nhi峄乽 b峄� 膽i峄僲 cu峄慽 cho kh么ng gian l脿m vi峄嘽 hi峄噉 t岷.',
-    endpointDisableContent: 'B岷 c贸 mu峄憂 v么 hi峄噓 h贸a {{name}} kh么ng?',
-    strategyNum: '{{s峄憓} {{chi岷縩 l瓢峄}} BAO G峄扢',
-    endpoints: '膼i峄僲 cu峄慽',
-    actionNum: '{{s峄憓} {{h脿nh 膽峄檔g}} BAO G峄扢',
-    configureTool: 'C么ng c峄� 膽峄媙h c岷 h矛nh',
-    modelNum: '{{s峄憓} C脕C M脭 H脤NH BAO G峄扢',
-    serviceOk: 'D峄媍h v峄� OK',
-    endpointsDocLink: 'Xem t脿i li峄噓',
-    endpointsEmpty: 'Nh岷 v脿o n煤t \'+\' 膽峄� th锚m 膽i峄僲 cu峄慽',
-    endpointModalDesc: 'Sau khi 膽峄媙h c岷 h矛nh, c谩c t铆nh n膬ng do plugin cung c岷 th么ng qua 膽i峄僲 cu峄慽 API c贸 th峄� 膽瓢峄 s峄� d峄g.',
-    endpointDeleteContent: 'B岷 c贸 mu峄憂 x贸a {{name}} kh么ng?',
-    endpointModalTitle: '膼i峄僲 cu峄慽 thi岷縯 l岷璸',
-    disabled: 'T脿n t岷璽',
-  },
-  debugInfo: {
-    title: 'G峄� l峄梚',
-    viewDocs: 'Xem t脿i li峄噓',
-  },
-  privilege: {
-    whoCanInstall: 'Ai c贸 th峄� c脿i 膽岷穞 v脿 qu岷 l媒 plugin?',
-    everyone: 'Ai ai',
-    whoCanDebug: 'Ai c贸 th峄� g峄� l峄梚 plugin?',
-    title: 'T霉y ch峄峮 plugin',
-    admins: 'Qu岷 tr峄� vi锚n',
-    noone: 'Kh么ng ai',
-  },
-  pluginInfoModal: {
-    release: 'Ph谩t h脿nh',
-    repository: 'Kho',
-    title: 'Th么ng tin plugin',
-    packageName: 'G贸i',
-  },
-  action: {
-    delete: 'X贸a plugin',
-    deleteContentRight: 'plugin?',
-    usedInApps: 'Plugin n脿y 膽ang 膽瓢峄 s峄� d峄g trong c谩c 峄﹏g d峄g {{num}}.',
-    pluginInfo: 'Th么ng tin plugin',
-    checkForUpdates: 'Ki峄僲 tra th么ng tin c岷璸 nh岷璽',
-    deleteContentLeft: 'B岷 c贸 mu峄憂 x贸a',
-  },
-  installModal: {
-    labels: {
-      package: 'G贸i',
-      repository: 'Kho',
-      version: 'Phi锚n b岷',
-    },
-    close: '膼贸ng',
-    installFailedDesc: 'Plugin 膽茫 膽瓢峄 c脿i 膽岷穞 kh么ng th脿nh c么ng.',
-    cancel: 'H峄',
-    install: 'C脿i 膽岷穞',
-    dropPluginToInstall: 'Th岷� g贸i plugin v脿o 膽芒y 膽峄� c脿i 膽岷穞',
-    readyToInstallPackage: 'Gi峄沬 thi峄噓 c脿i 膽岷穞 plugin sau',
-    uploadingPackage: 'T岷 l锚n {{packageName}}...',
-    installing: 'C脿i 膽岷穞...',
-    installedSuccessfully: 'C脿i 膽岷穞 th脿nh c么ng',
-    readyToInstall: 'Gi峄沬 thi峄噓 c脿i 膽岷穞 plugin sau',
-    next: 'Sau',
-    readyToInstallPackages: 'Chu岷﹏ b峄� c脿i 膽岷穞 c谩c plugin {{num}} sau',
-    pluginLoadErrorDesc: 'Plugin n脿y s岷� kh么ng 膽瓢峄 c脿i 膽岷穞',
-    fromTrustSource: 'H茫y 膽岷 b岷 r岷眓g b岷 ch峄� c脿i 膽岷穞 c谩c plugin t峄� <trustSource>m峄檛 ngu峄搉 膽谩ng tin c岷瓂</trustSource>.',
-    installedSuccessfullyDesc: 'Plugin 膽茫 膽瓢峄 c脿i 膽岷穞 th脿nh c么ng.',
-    uploadFailed: 'T岷 l锚n kh么ng th脿nh c么ng',
-    installPlugin: 'C脿i 膽岷穞 Plugin',
-    installFailed: 'C脿i 膽岷穞 kh么ng th脿nh c么ng',
-    installComplete: 'C脿i 膽岷穞 ho脿n t岷',
-    back: 'L瓢ng',
-    pluginLoadError: 'L峄梚 t岷 plugin',
-  },
-  installFromGitHub: {
-    installFailed: 'C脿i 膽岷穞 kh么ng th脿nh c么ng',
-    updatePlugin: 'C岷璸 nh岷璽 plugin t峄� GitHub',
-    gitHubRepo: 'Kho l瓢u tr峄� GitHub',
-    selectPackage: 'Ch峄峮 g贸i',
-    selectVersionPlaceholder: 'Vui l貌ng ch峄峮 m峄檛 phi锚n b岷',
-    installedSuccessfully: 'C脿i 膽岷穞 th脿nh c么ng',
-    installPlugin: 'C脿i 膽岷穞 plugin t峄� GitHub',
-    uploadFailed: 'T岷 l锚n kh么ng th脿nh c么ng',
-    selectPackagePlaceholder: 'Vui l貌ng ch峄峮 m峄檛 g贸i',
-    selectVersion: 'Ch峄峮 phi锚n b岷',
-    installNote: 'H茫y 膽岷 b岷 r岷眓g b岷 ch峄� c脿i 膽岷穞 c谩c plugin t峄� m峄檛 ngu峄搉 膽谩ng tin c岷瓂.',
-  },
-  upgrade: {
-    upgrade: 'C脿i 膽岷穞',
-    upgrading: 'C脿i 膽岷穞...',
-    successfulTitle: 'C脿i 膽岷穞 th脿nh c么ng',
-    title: 'C脿i 膽岷穞 Plugin',
-    usedInApps: '膼瓢峄 s峄� d峄g trong c谩c 峄﹏g d峄g {{num}}',
-    description: 'Gi峄沬 thi峄噓 c脿i 膽岷穞 plugin sau',
-    close: '膼贸ng',
-  },
-  error: {
-    noReleasesFound: 'Kh么ng t矛m th岷 b岷 ph谩t h脿nh. Vui l貌ng ki峄僲 tra kho l瓢u tr峄� GitHub ho岷穋 URL 膽岷 v脿o.',
-    fetchReleasesError: 'Kh么ng th峄� truy xu岷 b岷 ph谩t h脿nh. Vui l貌ng th峄� l岷 sau.',
-    inValidGitHubUrl: 'URL GitHub kh么ng h峄 l峄�. Vui l貌ng nh岷璸 URL h峄 l峄� theo 膽峄媙h d岷g: https://github.com/owner/repo',
-  },
-  marketplace: {
-    sortOption: {
-      newlyReleased: 'M峄沬 ph谩t h脿nh',
-      mostPopular: 'Ph峄� bi岷縩 nh岷',
-      firstReleased: 'Ph谩t h脿nh l岷 膽岷 ti锚n',
-      recentlyUpdated: 'C岷璸 nh岷璽 g岷 膽芒y',
-    },
-    empower: 'H峄� tr峄� ph谩t tri峄僴 AI c峄 b岷',
-    viewMore: 'Xem th锚m',
-    difyMarketplace: 'Th峄� tr瓢峄漬g Dify',
-    discover: 'Kh谩m ph谩',
-    pluginsResult: '{{num}} k岷縯 qu岷�',
-    moreFrom: 'C谩c 峄﹏g d峄g kh谩c t峄� Marketplace',
-    sortBy: 'Th脿nh ph峄� 膽en',
-    noPluginFound: 'Kh么ng t矛m th岷 plugin n脿o',
-    and: 'v脿',
-    verifiedTip: '膼瓢峄 x谩c nh岷璶 b峄焛 Dify',
-    partnerTip: '膼瓢峄 x谩c nh岷璶 b峄焛 m峄檛 膽峄慽 t谩c c峄 Dify',
-  },
-  task: {
-    installingWithError: 'C脿i 膽岷穞 {{installingLength}} plugins, {{successLength}} th脿nh c么ng, {{errorLength}} kh么ng th脿nh c么ng',
-    installing: 'C脿i 膽岷穞 {{installingLength}} plugins, 0 xong.',
-    installingWithSuccess: 'C脿i 膽岷穞 {{installingLength}} plugins, {{successLength}} th脿nh c么ng.',
-    installError: '{{errorLength}} plugin kh么ng c脿i 膽岷穞 膽瓢峄, nh岷 膽峄� xem',
-    installedError: '{{errorLength}} plugin kh么ng c脿i 膽岷穞 膽瓢峄',
-    clearAll: 'X贸a t岷 c岷�',
-  },
-  from: 'T峄�',
-  installAction: 'C脿i 膽岷穞',
-  searchInMarketplace: 'T矛m ki岷縨 tr锚n Marketplace',
-  endpointsEnabled: '{{num}} b峄� 膽i峄僲 cu峄慽 膽瓢峄 k铆ch ho岷',
-  install: '{{num}} l瓢峄 c脿i 膽岷穞',
-  findMoreInMarketplace: 'T矛m th锚m trong Marketplace',
-  submitPlugin: 'G峄璱 plugin',
-  search: 'T矛m ki岷縨',
-  searchCategories: 'Danh m峄 t矛m ki岷縨',
-  installPlugin: 'C脿i 膽岷穞 plugin',
-  searchPlugins: 'T矛m ki岷縨 plugin',
-  fromMarketplace: 'T峄� Marketplace',
-  allCategories: 'T岷 c岷� c谩c danh m峄',
-  searchTools: 'C么ng c峄� t矛m ki岷縨...',
-  installFrom: 'C脌I 膼岷禩 T峄�',
-  metadata: {
-    title: 'Plugin',
-  },
-  difyVersionNotCompatible: 'Phi锚n b岷 Dify hi峄噉 t岷 kh么ng t瓢啤ng th铆ch v峄沬 plugin n脿y, vui l貌ng n芒ng c岷 l锚n phi锚n b岷 t峄慽 thi峄僽 c岷 thi岷縯: {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/vi-VN/time.ts b/i18n/vi-VN/time.ts
deleted file mode 100644
index 9c07ece..0000000
--- a/i18n/vi-VN/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Mon: 'M么n',
-    Sat: 'Ng峄搃',
-    Wed: 'Th峄� T瓢',
-    Sun: 'M岷穞 tr峄漣',
-    Tue: 'Th峄� Ba',
-    Fri: 'Th峄� S谩u',
-    Thu: 'Thu',
-  },
-  months: {
-    April: 'Th谩ng T瓢',
-    June: 'Th谩ng S谩u',
-    September: 'Th谩ng Ch铆n',
-    March: 'Th谩ng Ba',
-    February: 'Th谩ng Hai',
-    August: 'Th谩ng T谩m',
-    May: 'Th谩ng N膬m',
-    October: 'Th谩ng M瓢峄漣',
-    December: 'Th谩ng M瓢峄漣 Hai',
-    January: 'Th谩ng M峄檛',
-    July: 'Th谩ng B岷',
-    November: 'Th谩ng M瓢峄漣 M峄檛',
-  },
-  operation: {
-    ok: '膼瓢峄 r峄搃',
-    pickDate: 'Ch峄峮 Ng脿y',
-    now: 'B芒y gi峄�',
-    cancel: 'H峄 b峄�',
-  },
-  title: {
-    pickTime: 'Ch峄峮 Th峄漣 Gian',
-  },
-  defaultPlaceholder: 'Ch峄峮 m峄檛 th峄漣 gian...',
-}
-
-export default translation
diff --git a/i18n/zh-Hans/education.ts b/i18n/zh-Hans/education.ts
deleted file mode 100644
index 9d27698..0000000
--- a/i18n/zh-Hans/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerified: '鑾峰彇鏁欒偛鐗堣璇�',
-  toVerifiedTip: {
-    front: '鎮ㄧ幇鍦ㄧ鍚堟暀鑲茬増璁よ瘉鐨勮祫鏍笺�傝鍦ㄤ笅鏂硅緭鍏ユ偍鐨勬暀鑲蹭俊鎭紝浠ュ畬鎴愯璇佹祦绋嬶紝骞堕鍙� Dify  Professional 鐗堢殑',
-    coupon: '100% 鐙浼樻儬鍒�',
-    end: '銆�',
-  },
-  currentSigned: '鎮ㄥ綋鍓嶇櫥褰曠殑璐︽埛鏄�',
-  form: {
-    schoolName: {
-      title: '鎮ㄧ殑瀛︽牎鍚嶇О',
-      placeholder: '璇疯緭鍏ユ偍鐨勫鏍$殑瀹樻柟鍏ㄧО锛堜笉寰楃缉鍐欙級',
-    },
-    schoolRole: {
-      title: '鎮ㄥ湪瀛︽牎鐨勮韩浠�',
-      option: {
-        student: '瀛︾敓',
-        teacher: '鏁欏笀',
-        administrator: '瀛︽牎绠$悊鍛�',
-      },
-    },
-    terms: {
-      title: '鏉℃涓庡崗璁�',
-      desc: {
-        front: '鎮ㄧ殑淇℃伅鍜屾暀鑲茬増璁よ瘉璧勬牸鐨勪娇鐢ㄩ渶閬靛畧鎴戜滑鐨�',
-        and: '鍜�',
-        end: '銆傛彁浜ゅ嵆琛ㄧず锛�',
-        termsOfService: '鏈嶅姟鏉℃',
-        privacyPolicy: '闅愮鏀跨瓥',
-      },
-      option: {
-        age: '鎴戠‘璁ゆ垜宸插勾婊� 18 鍛ㄥ瞾銆�',
-        inSchool: '鎴戠‘璁ゆ垜鐩墠宸插湪鎻愪緵鐨勫鏍″叆瀛︽垨鍙楅泧銆侱ify 鍙兘浼氳姹傛彁渚涘叆瀛�/闆囦剑璇佹槑銆傚鎴戣櫄鎶ヨ祫鏍硷紝鎴戝悓鎰忔敮浠樺洜鏁欒偛鐗堣璇佽�岃鍑忓厤鐨勮垂鐢ㄣ��',
-      },
-    },
-  },
-  submit: '鎻愪氦',
-  submitError: '鎻愪氦琛ㄥ崟澶辫触锛岃绋嶅悗閲嶆柊鎻愪氦闂嵎銆�',
-  learn: '浜嗚В濡備綍鑾峰彇鏁欒偛鐗堣璇�',
-  successTitle: '鎮ㄥ凡鎴愬姛鑾峰緱 Dify 鏁欒偛鐗堣璇侊紒',
-  successContent: '鎴戜滑宸插悜鎮ㄧ殑璐︽埛鍙戞斁 Dify Professional 鐗� 100% 鎶樻墸浼樻儬鍒搞�傝浼樻儬鍒告湁鏁堟湡涓轰竴骞达紝璇峰湪鏈夋晥鏈熷唴浣跨敤銆�',
-  rejectTitle: '鎮ㄧ殑 Dify 鏁欒偛鐗堣璇佸凡琚嫆缁�',
-  rejectContent: '闈炲父閬楁喚锛屾偍鏃犳硶浣跨敤姝ょ數瀛愰偖浠朵互鑾峰緱鏁欒偛鐗堣璇佽祫鏍硷紝涔熸棤娉曢鍙� Dify Professional 鐗堢殑 100% 鐙浼樻儬鍒搞��',
-  emailLabel: '鎮ㄥ綋鍓嶇殑閭',
-}
-
-export default translation
diff --git a/i18n/zh-Hans/plugin-tags.ts b/i18n/zh-Hans/plugin-tags.ts
deleted file mode 100644
index c133992..0000000
--- a/i18n/zh-Hans/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  allTags: '鎵�鏈夋爣绛�',
-  searchTags: '鎼滅储鏍囩',
-  tags: {
-    agent: 'Agent',
-    search: '鎼滅储',
-    image: '鍥剧墖',
-    videos: '瑙嗛',
-    weather: '澶╂皵',
-    finance: '閲戣瀺',
-    design: '璁捐',
-    travel: '鏃呰',
-    social: '绀句氦',
-    news: '鏂伴椈',
-    medical: '鍖荤枟',
-    productivity: '鐢熶骇鍔�',
-    education: '鏁欒偛',
-    business: '鍟嗕笟',
-    entertainment: '濞变箰',
-    utilities: '宸ュ叿',
-    other: '鍏朵粬',
-  },
-}
-
-export default translation
diff --git a/i18n/zh-Hans/plugin.ts b/i18n/zh-Hans/plugin.ts
deleted file mode 100644
index e088557..0000000
--- a/i18n/zh-Hans/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  metadata: {
-    title: '鎻掍欢',
-  },
-  category: {
-    all: '鍏ㄩ儴',
-    models: '妯″瀷',
-    tools: '宸ュ叿',
-    agents: 'Agent 绛栫暐',
-    extensions: '鎵╁睍',
-    bundles: '鎻掍欢闆�',
-  },
-  categorySingle: {
-    model: '妯″瀷',
-    tool: '宸ュ叿',
-    agent: 'Agent 绛栫暐',
-    extension: '鎵╁睍',
-    bundle: '鎻掍欢闆�',
-  },
-  search: '鎼滅储',
-  allCategories: '鎵�鏈夌被鍒�',
-  searchCategories: '鎼滅储绫诲埆',
-  searchPlugins: '鎼滅储鎻掍欢',
-  from: '鏉ヨ嚜',
-  findMoreInMarketplace: '鍦� Marketplace 涓煡鎵炬洿澶�',
-  searchInMarketplace: '鍦� Marketplace 涓悳绱�',
-  fromMarketplace: '鏉ヨ嚜甯傚満',
-  endpointsEnabled: '{{num}} 缁勭鐐瑰凡鍚敤',
-  searchTools: '鎼滅储宸ュ叿...',
-  installPlugin: '瀹夎鎻掍欢',
-  installFrom: '瀹夎婧�',
-  list: {
-    noInstalled: '鏃犲凡瀹夎鐨勬彃浠�',
-    notFound: '鏈壘鍒版彃浠�',
-    source: {
-      marketplace: '浠� Marketplace 瀹夎',
-      github: '浠� GitHub 瀹夎',
-      local: '鏈湴鎻掍欢',
-    },
-  },
-  source: {
-    marketplace: 'Marketplace',
-    github: 'GitHub',
-    local: '鏈湴鎻掍欢',
-  },
-  detailPanel: {
-    switchVersion: '鍒囨崲鐗堟湰',
-    categoryTip: {
-      marketplace: '浠� Marketplace 瀹夎',
-      github: '浠� Github 瀹夎',
-      local: '鏈湴鎻掍欢',
-      debugging: '璋冭瘯鎻掍欢',
-    },
-    operation: {
-      install: '瀹夎',
-      detail: '璇︽儏',
-      update: '鏇存柊',
-      info: '鎻掍欢淇℃伅',
-      checkUpdate: '妫�鏌ユ洿鏂�',
-      viewDetail: '鏌ョ湅璇︽儏',
-      remove: '绉婚櫎',
-    },
-    actionNum: '鍖呭惈 {{num}} 涓� {{action}}',
-    strategyNum: '鍖呭惈 {{num}} 涓� {{strategy}}',
-    endpoints: 'API 绔偣',
-    endpointsTip: '姝ゆ彃浠堕�氳繃 API 绔偣鎻愪緵鐗瑰畾鍔熻兘锛屾偍鍙互涓哄綋鍓嶅伐浣滃尯閰嶇疆澶氫釜 API 绔偣闆嗐��',
-    endpointsDocLink: '鏌ョ湅鏂囨。',
-    endpointsEmpty: '鐐瑰嚮 \'+\' 鎸夐挳娣诲姞 API 绔偣',
-    endpointDisableTip: '鍋滅敤 API 绔偣',
-    endpointDisableContent: '鏄惁瑕佸仠鐢� {{name}} 鐨� API 绔偣 锛�',
-    endpointDeleteTip: '绉婚櫎 API 绔偣',
-    endpointDeleteContent: '鏄惁瑕佺Щ闄� {{name}} 锛�',
-    endpointModalTitle: '璁剧疆 API 绔偣',
-    endpointModalDesc: '瀹屾垚閰嶇疆鍚庡彲浣跨敤鎻掍欢 API 绔偣鎻愪緵鐨勫姛鑳�',
-    serviceOk: '鏈嶅姟姝e父',
-    disabled: '鍋滅敤',
-    modelNum: '{{num}} 妯″瀷宸插寘鍚�',
-    toolSelector: {
-      title: '娣诲姞宸ュ叿',
-      toolLabel: '宸ュ叿',
-      descriptionLabel: '宸ュ叿鎻忚堪',
-      descriptionPlaceholder: '绠�瑕佹弿杩板伐鍏风洰鐨勶紝渚嬪锛岃幏鍙栫壒瀹氫綅缃殑娓╁害銆�',
-      placeholder: '閫夋嫨宸ュ叿',
-      settings: '鐢ㄦ埛璁剧疆',
-      params: '鎺ㄧ悊閰嶇疆',
-      paramsTip1: '鎺у埗 LLM 鎺ㄧ悊鍙傛暟銆�',
-      paramsTip2: '褰撯�滆嚜鍔ㄢ�濆叧闂椂锛屼娇鐢ㄩ粯璁ゅ�笺��',
-      auto: '鑷姩',
-      empty: '鐐瑰嚮 "+" 鎸夐挳娣诲姞宸ュ叿銆傛偍鍙互娣诲姞澶氫釜宸ュ叿銆�',
-      uninstalledTitle: '宸ュ叿鏈畨瑁�',
-      uninstalledContent: '姝ゆ彃浠跺畨瑁呰嚜 鏈湴 / GitHub 浠撳簱锛岃瀹夎鍚庝娇鐢ㄣ��',
-      uninstalledLink: '鍦ㄦ彃浠朵腑绠$悊',
-      unsupportedTitle: '涓嶆敮鎸佺殑 Action',
-      unsupportedContent: '宸插畨瑁呯殑鎻掍欢鐗堟湰涓嶆彁渚涜繖涓� action銆�',
-      unsupportedContent2: '鐐瑰嚮鍒囨崲鐗堟湰',
-    },
-    configureApp: '搴旂敤璁剧疆',
-    configureModel: '妯″瀷璁剧疆',
-    configureTool: '宸ュ叿璁剧疆',
-  },
-  install: '{{num}} 娆″畨瑁�',
-  installAction: '瀹夎',
-  debugInfo: {
-    title: '璋冭瘯',
-    viewDocs: '鏌ョ湅鏂囨。',
-  },
-  privilege: {
-    title: '鎻掍欢鍋忓ソ',
-    whoCanInstall: '璋佸彲浠ュ畨瑁呭拰绠$悊鎻掍欢锛�',
-    whoCanDebug: '璋佸彲浠ヨ皟璇曟彃浠讹紵',
-    everyone: '鎵�鏈変汉',
-    admins: '绠$悊鍛�',
-    noone: '鏃犱汉',
-  },
-  pluginInfoModal: {
-    title: '鎻掍欢淇℃伅',
-    repository: '浠撳簱',
-    release: '鍙戝竷鐗堟湰',
-    packageName: '鍖�',
-  },
-  action: {
-    checkForUpdates: '妫�鏌ユ洿鏂�',
-    pluginInfo: '鎻掍欢淇℃伅',
-    delete: '绉婚櫎鎻掍欢',
-    deleteContentLeft: '鏄惁瑕佺Щ闄� ',
-    deleteContentRight: ' 鎻掍欢?',
-    usedInApps: '姝ゆ彃浠舵鍦� {{num}} 涓簲鐢ㄤ腑浣跨敤銆�',
-  },
-  installModal: {
-    installPlugin: '瀹夎鎻掍欢',
-    installComplete: '瀹夎瀹屾垚',
-    installedSuccessfully: '瀹夎鎴愬姛',
-    installedSuccessfullyDesc: '鎻掍欢宸叉垚鍔熷畨瑁呫��',
-    uploadFailed: '涓婁紶澶辫触',
-    installFailed: '瀹夎澶辫触',
-    installFailedDesc: '鎻掍欢瀹夎澶辫触銆�',
-    install: '瀹夎',
-    installing: '瀹夎涓�...',
-    uploadingPackage: '涓婁紶 {{packageName}} 涓�...',
-    readyToInstall: '鍗冲皢瀹夎浠ヤ笅鎻掍欢',
-    readyToInstallPackage: '鍗冲皢瀹夎浠ヤ笅鎻掍欢',
-    readyToInstallPackages: '鍗冲皢瀹夎浠ヤ笅 {{num}} 涓彃浠�',
-    fromTrustSource: '璇蜂繚璇佷粎浠�<trustSource>鍙俊婧�</trustSource>瀹夎鎻掍欢銆�',
-    dropPluginToInstall: '鎷栨斁鎻掍欢鍖呭埌姝ゅ瀹夎',
-    labels: {
-      repository: '浠撳簱',
-      version: '鐗堟湰',
-      package: '鍖�',
-    },
-    close: '鍏抽棴',
-    cancel: '鍙栨秷',
-    back: '杩斿洖',
-    next: '涓嬩竴姝�',
-    pluginLoadError: '鎻掍欢鍔犺浇閿欒',
-    pluginLoadErrorDesc: '姝ゆ彃浠跺皢涓嶄細琚畨瑁�',
-  },
-  installFromGitHub: {
-    installPlugin: '浠� GitHub 瀹夎鎻掍欢',
-    updatePlugin: '鏇存柊鏉ヨ嚜 GitHub 鐨勬彃浠�',
-    installedSuccessfully: '瀹夎鎴愬姛',
-    installFailed: '瀹夎澶辫触',
-    uploadFailed: '涓婁紶澶辫触',
-    gitHubRepo: 'GitHub 浠撳簱',
-    selectVersion: '閫夋嫨鐗堟湰',
-    selectVersionPlaceholder: '璇烽�夋嫨涓�涓増鏈�',
-    installNote: '璇风‘淇濆彧浠庡彲淇℃簮瀹夎鎻掍欢銆�',
-    selectPackage: '閫夋嫨鍖�',
-    selectPackagePlaceholder: '璇烽�夋嫨涓�涓寘',
-  },
-  upgrade: {
-    title: '瀹夎鎻掍欢',
-    successfulTitle: '瀹夎鎴愬姛',
-    description: '鍗冲皢瀹夎浠ヤ笅鎻掍欢',
-    usedInApps: '鍦� {{num}} 涓簲鐢ㄤ腑浣跨敤',
-    upgrade: '瀹夎',
-    upgrading: '瀹夎涓�...',
-    close: '鍏抽棴',
-  },
-  error: {
-    inValidGitHubUrl: '鏃犳晥鐨� GitHub URL銆傝杈撳叆鏍煎紡涓� https://github.com/owner/repo 鐨勬湁鏁� URL',
-    fetchReleasesError: '鏃犳硶鑾峰彇鍙戝竷鐗堟湰銆傝绋嶅悗鍐嶈瘯銆�',
-    noReleasesFound: '鏈壘鍒板彂甯冪増鏈�傝妫�鏌� GitHub 浠撳簱鎴栬緭鍏ョ殑 URL銆�',
-  },
-  marketplace: {
-    empower: '鍔╁姏鎮ㄧ殑 AI 寮�鍙�',
-    discover: '鎺㈢储',
-    and: '鍜�',
-    difyMarketplace: 'Dify 甯傚満',
-    moreFrom: '鏇村鏉ヨ嚜甯傚満',
-    noPluginFound: '鏈壘鍒版彃浠�',
-    pluginsResult: '{{num}} 涓彃浠剁粨鏋�',
-    sortBy: '鎺掑簭鏂瑰紡',
-    sortOption: {
-      mostPopular: '鏈�鍙楁杩�',
-      recentlyUpdated: '鏈�杩戞洿鏂�',
-      newlyReleased: '鏈�鏂板彂甯�',
-      firstReleased: '棣栨鍙戝竷',
-    },
-    viewMore: '鏌ョ湅鏇村',
-    verifiedTip: '姝ゆ彃浠剁敱 Dify 璁よ瘉',
-    partnerTip: '姝ゆ彃浠剁敱 Dify 鍚堜綔浼欎即璁よ瘉',
-  },
-  task: {
-    installing: '{{installingLength}} 涓彃浠跺畨瑁呬腑锛�0 宸插畬鎴�',
-    installingWithSuccess: '{{installingLength}} 涓彃浠跺畨瑁呬腑锛寋{successLength}} 瀹夎鎴愬姛',
-    installingWithError: '{{installingLength}} 涓彃浠跺畨瑁呬腑锛寋{successLength}} 瀹夎鎴愬姛锛寋{errorLength}} 瀹夎澶辫触',
-    installError: '{{errorLength}} 涓彃浠跺畨瑁呭け璐ワ紝鐐瑰嚮鏌ョ湅',
-    installedError: '{{errorLength}} 涓彃浠跺畨瑁呭け璐�',
-    clearAll: '娓呴櫎鎵�鏈�',
-  },
-  submitPlugin: '涓婁紶鎻掍欢',
-  difyVersionNotCompatible: '褰撳墠 Dify 鐗堟湰涓嶅吋瀹硅鎻掍欢锛屽叾鏈�浣庣増鏈姹備负 {{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/zh-Hans/time.ts b/i18n/zh-Hans/time.ts
deleted file mode 100644
index 5158a71..0000000
--- a/i18n/zh-Hans/time.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Sun: '鏃�',
-    Mon: '涓�',
-    Tue: '浜�',
-    Wed: '涓�',
-    Thu: '鍥�',
-    Fri: '浜�',
-    Sat: '鍏�',
-  },
-  months: {
-    January: '涓�鏈�',
-    February: '浜屾湀',
-    March: '涓夋湀',
-    April: '鍥涙湀',
-    May: '浜旀湀',
-    June: '鍏湀',
-    July: '涓冩湀',
-    August: '鍏湀',
-    September: '涔濇湀',
-    October: '鍗佹湀',
-    November: '鍗佷竴鏈�',
-    December: '鍗佷簩鏈�',
-  },
-  operation: {
-    now: '姝ゅ埢',
-    ok: '纭畾',
-    cancel: '鍙栨秷',
-    pickDate: '閫夋嫨鏃ユ湡',
-  },
-  title: {
-    pickTime: '閫夋嫨鏃堕棿',
-  },
-  pickDate: '閫夋嫨鏃ユ湡',
-  defaultPlaceholder: '璇烽�夋嫨鏃堕棿...',
-}
-
-export default translation
diff --git a/i18n/zh-Hant/education.ts b/i18n/zh-Hant/education.ts
deleted file mode 100644
index 9637324..0000000
--- a/i18n/zh-Hant/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-const translation = {
-  toVerifiedTip: {
-    end: '鐢ㄦ柤 Dify 灏堟キ瑷堝妰銆�',
-    coupon: '鐛ㄥ 100% 鍎儬鍒�',
-    front: '鎮ㄧ従鍦ㄧ鍚堟暀鑲查璀夌媭鎱嬬殑璩囨牸銆傝珛鍦ㄤ笅闈㈣几鍏ユ偍鐨勬暀鑲茶硣瑷婁互瀹屾垚姝ゆ祦绋嬩甫鐛插緱涓�鍊�',
-  },
-  form: {
-    schoolName: {
-      title: '浣犵殑瀛告牎鍚嶇ū',
-      placeholder: '璜嬭几鍏ユ偍瀛告牎鐨勬寮忓叏鍚�',
-    },
-    schoolRole: {
-      option: {
-        teacher: '鑰佸斧',
-        student: '瀛哥敓',
-        administrator: '鏍″湌琛屾斂浜哄摗',
-      },
-      title: '浣犵殑瀛告牎瑙掕壊',
-    },
-    terms: {
-      desc: {
-        and: '鍜�',
-        privacyPolicy: '闅辩鏀跨瓥',
-        termsOfService: '鏈嶅嫏姊濇',
-        front: '鎮ㄧ殑璩囪▕鍙婁娇鐢ㄦ暀鑲查璀夌媭鎱嬮渶閬靛惊鎴戝�戠殑',
-        end: '閫忛亷鎻愪氦锛�',
-      },
-      option: {
-        age: '鎴戠⒑瑾嶆垜鑷冲皯18姝�',
-        inSchool: '鎴戠⒑瑾嶆垜宸插湪鎵�鎻愪緵鐨勬妲嬭ɑ鍐婃垨鍙楀儽銆侱ify 鍙兘鏈冭姹傛彁渚涜ɑ鍐�/灏辨キ鐨勮瓑鏄庛�傚鏋滄垜閷琛ㄨ堪鎴戠殑璩囨牸锛屾垜鍚屾剰鏀粯鏍规摎鎴戠殑鏁欒偛鐙�娉佹渶鍒濆厤闄ょ殑浠讳綍璨荤敤銆�',
-      },
-      title: '姊濇鑸囧崝璀�',
-    },
-  },
-  rejectContent: '涓嶅垢鐨勬槸锛屾偍涓嶇鍚堟暀鑲查璀夌媭鎱嬶紝鍥犳濡傛灉鎮ㄤ娇鐢ㄦ闆诲瓙閮典欢鍦板潃锛屽皣鐒℃硶鐛插緱Dify灏堟キ瑷堝妰鐨�100%鐛ㄥ鍎儬鍒搞��',
-  successContent: '鎴戝�戝凡缍撳悜鎮ㄧ殑甯虫埗鐧兼斁浜咲ify灏堟キ瑷堝妰鐨�100%鎶樻墸鍎儬鍒搞�傝┎鍎儬鍒告湁鏁堟湡鐐轰竴骞达紝璜嬪湪鏈夋晥鏈熷収浣跨敤瀹冦��',
-  learn: '浜嗚В濡備綍閫茶鏁欒偛椹楄瓑',
-  rejectTitle: '鎮ㄧ殑 Dify 鏁欒偛椹楄瓑宸茶鎷掔禃',
-  submitError: '琛ㄥ柈鎻愪氦澶辨晽銆傝珛绋嶅緦鍐嶈│銆�',
-  currentSigned: '鐣跺墠浠ヤ互涓嬭韩浠界櫥鍏�',
-  emailLabel: '鎮ㄧ暥鍓嶇殑闆诲瓙閮典欢',
-  submit: '鎻愪氦',
-  successTitle: '鎮ㄥ凡鐛插緱 Dify 鏁欒偛瑾嶈瓑',
-  toVerified: '鐛插彇鏁欒偛璀夋槑',
-}
-
-export default translation
diff --git a/i18n/zh-Hant/plugin-tags.ts b/i18n/zh-Hant/plugin-tags.ts
deleted file mode 100644
index fe6a1ad..0000000
--- a/i18n/zh-Hant/plugin-tags.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-const translation = {
-  tags: {
-    productivity: '鐢熺敘鍔�',
-    business: '鍟�',
-    finance: '閲戣瀺',
-    weather: '澶╂埃',
-    news: '鏂拌仦',
-    design: '瑷▓',
-    utilities: '鍏敤浜嬫キ',
-    education: '鏁欒偛',
-    travel: '鏃呰',
-    other: '鍏朵粬',
-    social: '绀炬渻鐨�',
-    medical: '閱檪',
-    agent: '浠g悊',
-    videos: '瑕栭牷',
-    entertainment: '濞涙▊',
-    search: '鎼滅储',
-    image: '鍦栧儚',
-  },
-  searchTags: '鎼滅储妯欑堡',
-  allTags: '鎵�鏈夋绫�',
-}
-
-export default translation
diff --git a/i18n/zh-Hant/plugin.ts b/i18n/zh-Hant/plugin.ts
deleted file mode 100644
index 03f6ece..0000000
--- a/i18n/zh-Hant/plugin.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-const translation = {
-  category: {
-    tools: '宸ュ叿',
-    models: '妯″瀷',
-    extensions: '鎿村睍',
-    agents: '浠g悊绛栫暐',
-    all: '閮�',
-    bundles: '鏉�',
-  },
-  categorySingle: {
-    model: '鍨�',
-    extension: '澶栧欢',
-    agent: '浠g悊绛栫暐',
-    tool: '宸ュ叿',
-    bundle: '鎹�',
-  },
-  list: {
-    source: {
-      local: '寰炴湰鍦板寘妾斿畨瑁�',
-      github: '寰� GitHub 瀹夎',
-      marketplace: '寰� Marketplace 瀹夎',
-    },
-    noInstalled: '鏈畨瑁濆鎺涚▼寮�',
-    notFound: '鏈壘鍒板鎺涚▼寮�',
-  },
-  source: {
-    marketplace: '甯傚牬',
-    local: '鏈湴鍖呮獢',
-    github: 'GitHub鐨�',
-  },
-  detailPanel: {
-    categoryTip: {
-      marketplace: '寰� Marketplace 瀹夎',
-      debugging: '瑾胯│澶栨帥绋嬪紡',
-      github: '寰� Github 瀹夎',
-      local: '鏈湴澶栨帥绋嬪紡',
-    },
-    operation: {
-      info: '澶栨帥绋嬪紡璩囪▕',
-      detail: '瑭�',
-      remove: '鍒櫎',
-      install: '瀹夎',
-      viewDetail: '鏌ョ湅瑭虫儏',
-      update: '鏇存柊',
-      checkUpdate: '妾㈡煡鏇存柊',
-    },
-    toolSelector: {
-      uninstalledContent: '姝ゅ鎺涚▼寮忔槸寰瀕ocal/GitHub鍎插瓨搴畨瑁濈殑銆傝珛鍦ㄥ畨瑁濆緦浣跨敤銆�',
-      descriptionLabel: '宸ュ叿鎻忚堪',
-      params: '鎺ㄧ悊閰嶇疆',
-      paramsTip2: '鐣� \'Automatic\' 闂滈枆鏅傦紝浣跨敤闋愯ō鍊笺��',
-      descriptionPlaceholder: '宸ュ叿鐢ㄩ�旂殑绨¤鎻忚堪锛屼緥濡傦紝鐛插彇鐗瑰畾浣嶇疆鐨勬韩搴︺��',
-      toolLabel: '宸ュ叿',
-      unsupportedTitle: '涓嶆敮鎻寸殑浣�',
-      placeholder: '閬告搰宸ュ叿...',
-      uninstalledTitle: '鏈畨瑁濆伐鍏�',
-      auto: '鑷嫊',
-      title: '娣诲姞宸ュ叿',
-      unsupportedContent: '宸插畨瑁濈殑澶栨帥绋嬪紡鐗堟湰涓嶆彁渚涙浣溿��',
-      settings: '鐢ㄦ埗瑷疆',
-      uninstalledLink: '鍦ㄥ鎺涚▼寮忎腑绠$悊',
-      empty: '榛炴搳 銆�+銆� 鎸夐垥娣诲姞宸ュ叿銆傛偍鍙互鏂板澶氬�嬪伐鍏枫��',
-      unsupportedContent2: '鎸夊叐涓嬩互鍒囨彌鐗堟湰銆�',
-      paramsTip1: '鎺у埗 LLM 鎺ㄧ悊鍙冩暩銆�',
-    },
-    actionNum: '{{num}}{{浣渳}鍖呮嫭',
-    switchVersion: 'Switch 鐗堟湰',
-    strategyNum: '{{num}}{{绛栫暐}}鍖呮嫭',
-    endpoints: '绔粸',
-    endpointDisableTip: '绂佺敤绔粸',
-    endpointsTip: '姝ゅ鎺涚▼寮忛�氶亷绲傜绡�榛炴彁渚涚壒瀹氬姛鑳斤紝鎮ㄥ彲浠ョ偤鐣跺墠宸ヤ綔鍗�閰嶇疆澶氬�嬬祩绔瘈榛為泦銆�',
-    modelNum: '{{num}}鍖呭惈鐨勫瀷铏�',
-    endpointsEmpty: '鎸夊叐涓嬨��+銆嶆寜閳曟坊鍔犵榛�',
-    endpointDisableContent: '鎮ㄦ兂绂佺敤 {{name}} 鍡庯紵',
-    configureApp: '閰嶇疆 App',
-    endpointDeleteContent: '鎮ㄦ兂鍒櫎 {{name}} 鍡庯紵',
-    configureTool: '閰嶇疆宸ュ叿',
-    endpointModalDesc: '閰嶇疆鍚庯紝鍗冲彲浣跨敤澶栨帥绋嬪紡閫氶亷 API 绔粸鎻愪緵鐨勫姛鑳姐��',
-    disabled: '绂佺敤',
-    serviceOk: '鏈嶅嫏姝e父',
-    endpointDeleteTip: '鍒櫎绔粸',
-    configureModel: '閰嶇疆妯″瀷',
-    endpointModalTitle: '瑷疆绲傜绡�榛�',
-    endpointsDocLink: '鏌ョ湅鏂囦欢',
-  },
-  debugInfo: {
-    viewDocs: '鏌ョ湅鏂囦欢',
-    title: '瑾胯│',
-  },
-  privilege: {
-    whoCanDebug: '瑾板彲浠ヨ瑭﹀鎺涚▼寮忥紵',
-    whoCanInstall: '瑾板彲浠ュ畨瑁濆拰绠$悊澶栨帥绋嬪紡锛�',
-    noone: '娌掍汉',
-    title: '澶栨帥绋嬪紡棣栭伕闋�',
-    everyone: '姣忓�嬩汉 閮�',
-    admins: '绠$悊鍝�',
-  },
-  pluginInfoModal: {
-    repository: '瀛樺劜搴�',
-    release: '閲嬫斁',
-    title: '澶栨帥绋嬪紡璩囪▕',
-    packageName: '鍖�',
-  },
-  action: {
-    deleteContentRight: '澶栨帥绋嬪紡锛�',
-    deleteContentLeft: '鏄惁瑕佸埅闄�',
-    usedInApps: '姝ゅ鎺涚▼寮忔鍦� {{num}} 鍊嬫噳鐢ㄧ▼寮忎腑浣跨敤銆�',
-    pluginInfo: '澶栨帥绋嬪紡璩囪▕',
-    checkForUpdates: '妾㈡煡鏇存柊',
-    delete: '鍒櫎澶栨帥绋嬪紡',
-  },
-  installModal: {
-    labels: {
-      repository: '瀛樺劜搴�',
-      version: '鐗堟湰',
-      package: '鍖�',
-    },
-    readyToInstallPackage: '鍗冲皣瀹夎浠ヤ笅澶栨帥绋嬪紡',
-    back: '杩斿洖',
-    installFailed: '瀹夎澶辨晽',
-    readyToInstallPackages: '鍗冲皣瀹夎浠ヤ笅 {{num}} 鍊嬪鎺涚▼寮�',
-    next: '涓嬩竴鍊�',
-    dropPluginToInstall: '灏囧鎺涚▼寮忓寘鎷栨斁鍒版铏曢�茶瀹夎',
-    pluginLoadError: '澶栨帥绋嬪紡杓夊叆閷',
-    installedSuccessfully: '瀹夎鎴愬姛',
-    uploadFailed: '涓婂偝澶辨晽',
-    installFailedDesc: '澶栨帥绋嬪紡瀹夎澶辨晽銆�',
-    fromTrustSource: '璜嬬⒑淇濇偍鍙緸<trustSource>鍙椾俊浠荤殑渚嗘簮</trustSource>瀹夎澶栨帥绋嬪紡銆�',
-    pluginLoadErrorDesc: '姝ゅ鎺涚▼寮忓皣涓嶆渻琚畨瑁�',
-    installComplete: '瀹夎瀹屾垚',
-    install: '瀹夎',
-    installedSuccessfullyDesc: '澶栨帥绋嬪紡宸叉垚鍔熷畨瑁濄��',
-    close: '闂滈枆',
-    uploadingPackage: '姝e湪涓婂偝 {{packageName}}...',
-    readyToInstall: '鍗冲皣瀹夎浠ヤ笅澶栨帥绋嬪紡',
-    cancel: '鍙栨秷',
-    installPlugin: '瀹夎澶栨帥绋嬪紡',
-    installing: '瀹夎銆傘�傘��',
-  },
-  installFromGitHub: {
-    gitHubRepo: 'GitHub 鍎插瓨搴�',
-    selectPackagePlaceholder: '璜嬮伕鎿囦竴鍊嬪椁�',
-    installFailed: '瀹夎澶辨晽',
-    uploadFailed: '涓婂偝澶辨晽',
-    selectVersion: '閬告搰鐗堟湰',
-    selectVersionPlaceholder: '璜嬮伕鎿囦竴鍊嬬増鏈�',
-    updatePlugin: '寰� GitHub 鏇存柊澶栨帥绋嬪紡',
-    installPlugin: '寰� GitHub 瀹夎澶栨帥绋嬪紡',
-    installedSuccessfully: '瀹夎鎴愬姛',
-    selectPackage: '閬告搰濂楅',
-    installNote: '璜嬬⒑淇濇偍鍙緸鍙椾俊浠荤殑渚嗘簮瀹夎澶栨帥绋嬪紡銆�',
-  },
-  upgrade: {
-    close: '闂滈枆',
-    title: '瀹夎澶栨帥绋嬪紡',
-    upgrade: '瀹夎',
-    upgrading: '瀹夎銆傘�傘��',
-    description: '鍗冲皣瀹夎浠ヤ笅澶栨帥绋嬪紡',
-    usedInApps: '鐢ㄦ柤 {{num}} 鍊嬫噳鐢�',
-    successfulTitle: '瀹夎鎴愬姛',
-  },
-  error: {
-    noReleasesFound: '鏈壘鍒扮増鏈�傝珛妾㈡煡 GitHub 鍎插瓨搴垨杓稿叆 URL銆�',
-    fetchReleasesError: '鐒℃硶妾㈢储鐧艰鐗堛�傝珛绋嶅緦閲嶈│銆�',
-    inValidGitHubUrl: 'GitHub URL 鐒℃晥銆傝珛杓稿叆鏈夋晥鐨� URL锛屾牸寮忕偤锛歨ttps://github.com/owner/repo',
-  },
-  marketplace: {
-    sortOption: {
-      recentlyUpdated: '鏈�杩戞洿鏂�',
-      newlyReleased: '鏂扮櫦浣�',
-      firstReleased: '棣栨鐧间綀',
-      mostPopular: '鏈�鍙楁杩�',
-    },
-    discover: '鐧肩従',
-    noPluginFound: '鏈壘鍒板鎺涚▼寮�',
-    empower: '鐐烘偍鐨� AI 闁嬬櫦鎻愪緵鏀彺',
-    moreFrom: '渚嗚嚜 Marketplace 鐨勬洿澶氬収瀹�',
-    and: '鍜�',
-    sortBy: '榛戝煄',
-    viewMore: '鏌ョ湅鏇村',
-    difyMarketplace: 'Dify 甯傚牬',
-    pluginsResult: '{{num}} 鍊嬬祼鏋�',
-    verifiedTip: '鐢盌ify椹楄瓑',
-    partnerTip: '鐢� Dify 鍚堜綔澶ヤ即椹楄瓑',
-  },
-  task: {
-    installingWithError: '瀹夎 {{installingLength}} 鍊嬫彃浠讹紝{{successLength}} 鎴愬姛锛寋{errorLength}} 澶辨晽',
-    installedError: '{{errorLength}} 鍊嬪鎺涚▼寮忓畨瑁濆け鏁�',
-    installError: '{{errorLength}} 鍊嬪鎺涚▼寮忓畨瑁濆け鏁楋紝榛炴搳鏌ョ湅',
-    installingWithSuccess: '瀹夎 {{installingLength}} 鍊嬫彃浠讹紝{{successLength}} 鎴愬姛銆�',
-    clearAll: '鍏ㄩ儴娓呴櫎',
-    installing: '瀹夎 {{installingLength}} 鍊嬪鎺涚▼寮忥紝0 鍊嬪畬鎴愩��',
-  },
-  submitPlugin: '鎻愪氦澶栨帥绋嬪紡',
-  findMoreInMarketplace: '鍦� Marketplace 涓煡鎵炬洿澶氬収瀹�',
-  installPlugin: '瀹夎澶栨帥绋嬪紡',
-  search: '鎼滅储',
-  allCategories: '鍏ㄩ儴鍒嗛',
-  from: '寰�',
-  searchPlugins: '鎼滅储澶栨帥绋嬪紡',
-  searchTools: '鎼滃皨宸ュ叿...',
-  installAction: '瀹夎',
-  installFrom: '瀹夎璧峰浣嶇疆',
-  searchInMarketplace: '鍦� Marketplace 涓悳绱�',
-  install: '{{num}} 娆″畨瑁�',
-  endpointsEnabled: '{{num}} 绲勫凡鍟熺敤绔粸',
-  fromMarketplace: '寰� Marketplace',
-  searchCategories: '鎼滅储椤炲垾',
-  metadata: {
-    title: '鎻掍欢',
-  },
-  difyVersionNotCompatible: '鐣跺墠鐨� Dify 鐗堟湰鑸囨鎻掍欢涓嶅吋瀹癸紝璜嬪崌绱氳嚦鎵�闇�鐨勬渶浣庣増鏈細{{minimalDifyVersion}}',
-}
-
-export default translation
diff --git a/i18n/zh-Hant/time.ts b/i18n/zh-Hant/time.ts
deleted file mode 100644
index 3be2511..0000000
--- a/i18n/zh-Hant/time.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-const translation = {
-  daysInWeek: {
-    Tue: '鏄熸湡浜�',
-    Wed: '鏄熸湡涓�',
-    Fri: '鑷敱',
-    Mon: '鎳峰康',
-    Sun: '澶櫧',
-    Sat: '鏄熸湡鍏�',
-    Thu: '鏄熸湡鍥�',
-  },
-  months: {
-    January: '涓�鏈�',
-    June: '鍏湀',
-    March: '涓夋湀',
-    February: '浜屾湀',
-    August: '鍏湀',
-    April: '鍥涙湀',
-    May: '浜旀湀',
-    July: '涓冩湀',
-    November: '鍗佷竴鏈�',
-    December: '鍗佷簩鏈�',
-    September: '涔濇湀',
-    October: '鍗佹湀',
-  },
-  operation: {
-    cancel: '鍙栨秷',
-    now: '鐝惧湪',
-    ok: '濂�',
-    pickDate: '閬告搰鏃ユ湡',
-  },
-  title: {
-    pickTime: '閬告搰鏅傞枔',
-  },
-  defaultPlaceholder: '閬告搰涓�鍊嬫檪闁�...',
-}
-
-export default translation
diff --git a/jest.setup.ts b/jest.setup.ts
deleted file mode 100644
index ef9ede0..0000000
--- a/jest.setup.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-import { cleanup } from '@testing-library/react'
-
-afterEach(() => {
-  cleanup()
-})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
deleted file mode 100644
index fce3b65..0000000
--- a/pnpm-lock.yaml
+++ /dev/null
@@ -1,18718 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
-  autoInstallPeers: true
-  excludeLinksFromLockfile: false
-
-overrides:
-  '@types/react': ~18.2.0
-  '@types/react-dom': ~18.2.0
-  string-width: 4.2.3
-  esbuild@<0.25.0: 0.25.0
-
-importers:
-
-  .:
-    dependencies:
-      '@babel/runtime':
-        specifier: ^7.22.3
-        version: 7.27.0
-      '@dagrejs/dagre':
-        specifier: ^1.1.4
-        version: 1.1.4
-      '@emoji-mart/data':
-        specifier: ^1.2.1
-        version: 1.2.1
-      '@eslint/compat':
-        specifier: ^1.2.4
-        version: 1.2.8(eslint@9.24.0(jiti@1.21.7))
-      '@floating-ui/react':
-        specifier: ^0.26.25
-        version: 0.26.28(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@formatjs/intl-localematcher':
-        specifier: ^0.5.6
-        version: 0.5.10
-      '@headlessui/react':
-        specifier: ^2.2.0
-        version: 2.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@heroicons/react':
-        specifier: ^2.0.16
-        version: 2.2.0(react@19.0.0)
-      '@hookform/resolvers':
-        specifier: ^3.9.0
-        version: 3.10.0(react-hook-form@7.55.0(react@19.0.0))
-      '@lexical/code':
-        specifier: ^0.30.0
-        version: 0.30.0
-      '@lexical/link':
-        specifier: ^0.30.0
-        version: 0.30.0
-      '@lexical/list':
-        specifier: ^0.30.0
-        version: 0.30.0
-      '@lexical/react':
-        specifier: ^0.30.0
-        version: 0.30.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(yjs@13.6.24)
-      '@lexical/selection':
-        specifier: ^0.30.0
-        version: 0.30.0
-      '@lexical/text':
-        specifier: ^0.30.0
-        version: 0.30.0
-      '@lexical/utils':
-        specifier: ^0.30.0
-        version: 0.30.0
-      '@mdx-js/loader':
-        specifier: ^3.1.0
-        version: 3.1.0(acorn@8.14.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      '@mdx-js/react':
-        specifier: ^3.1.0
-        version: 3.1.0(@types/react@18.2.79)(react@19.0.0)
-      '@monaco-editor/react':
-        specifier: ^4.6.0
-        version: 4.7.0(monaco-editor@0.52.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@next/mdx':
-        specifier: 15.2.3
-        version: 15.2.3(@mdx-js/loader@3.1.0(acorn@8.14.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)))(@mdx-js/react@3.1.0(@types/react@18.2.79)(react@19.0.0))
-      '@octokit/core':
-        specifier: ^6.1.2
-        version: 6.1.5
-      '@octokit/request-error':
-        specifier: ^6.1.5
-        version: 6.1.8
-      '@remixicon/react':
-        specifier: ^4.5.0
-        version: 4.6.0(react@19.0.0)
-      '@sentry/react':
-        specifier: ^8.54.0
-        version: 8.55.0(react@19.0.0)
-      '@sentry/utils':
-        specifier: ^8.54.0
-        version: 8.55.0
-      '@svgdotjs/svg.js':
-        specifier: ^3.2.4
-        version: 3.2.4
-      '@tailwindcss/typography':
-        specifier: ^0.5.15
-        version: 0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)))
-      '@tanstack/react-form':
-        specifier: ^1.3.3
-        version: 1.3.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@tanstack/react-query':
-        specifier: ^5.60.5
-        version: 5.72.2(react@19.0.0)
-      '@tanstack/react-query-devtools':
-        specifier: ^5.60.5
-        version: 5.72.2(@tanstack/react-query@5.72.2(react@19.0.0))(react@19.0.0)
-      abcjs:
-        specifier: ^6.4.4
-        version: 6.4.4
-      ahooks:
-        specifier: ^3.8.4
-        version: 3.8.4(react@19.0.0)
-      class-variance-authority:
-        specifier: ^0.7.0
-        version: 0.7.1
-      classnames:
-        specifier: ^2.5.1
-        version: 2.5.1
-      clsx:
-        specifier: ^2.1.1
-        version: 2.1.1
-      copy-to-clipboard:
-        specifier: ^3.3.3
-        version: 3.3.3
-      crypto-js:
-        specifier: ^4.2.0
-        version: 4.2.0
-      dayjs:
-        specifier: ^1.11.13
-        version: 1.11.13
-      decimal.js:
-        specifier: ^10.4.3
-        version: 10.5.0
-      dompurify:
-        specifier: ^3.2.4
-        version: 3.2.5
-      echarts:
-        specifier: ^5.5.1
-        version: 5.6.0
-      echarts-for-react:
-        specifier: ^3.0.2
-        version: 3.0.2(echarts@5.6.0)(react@19.0.0)
-      elkjs:
-        specifier: ^0.9.3
-        version: 0.9.3
-      emoji-mart:
-        specifier: ^5.5.2
-        version: 5.6.0
-      fast-deep-equal:
-        specifier: ^3.1.3
-        version: 3.1.3
-      globals:
-        specifier: ^15.11.0
-        version: 15.15.0
-      html-to-image:
-        specifier: 1.11.11
-        version: 1.11.11
-      i18next:
-        specifier: ^23.16.4
-        version: 23.16.8
-      i18next-resources-to-backend:
-        specifier: ^1.2.1
-        version: 1.2.1
-      immer:
-        specifier: ^9.0.19
-        version: 9.0.21
-      js-audio-recorder:
-        specifier: ^1.0.7
-        version: 1.0.7
-      js-cookie:
-        specifier: ^3.0.5
-        version: 3.0.5
-      jsonschema:
-        specifier: ^1.5.0
-        version: 1.5.0
-      jwt-decode:
-        specifier: ^4.0.0
-        version: 4.0.0
-      katex:
-        specifier: ^0.16.21
-        version: 0.16.22
-      ky:
-        specifier: ^1.7.2
-        version: 1.8.0
-      lamejs:
-        specifier: ^1.2.1
-        version: 1.2.1
-      lexical:
-        specifier: ^0.30.0
-        version: 0.30.0
-      line-clamp:
-        specifier: ^1.0.0
-        version: 1.0.0
-      lodash-es:
-        specifier: ^4.17.21
-        version: 4.17.21
-      mermaid:
-        specifier: 11.4.1
-        version: 11.4.1
-      mime:
-        specifier: ^4.0.4
-        version: 4.0.7
-      mitt:
-        specifier: ^3.0.1
-        version: 3.0.1
-      negotiator:
-        specifier: ^0.6.3
-        version: 0.6.4
-      next:
-        specifier: 15.2.3
-        version: 15.2.3(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.86.3)
-      next-themes:
-        specifier: ^0.4.3
-        version: 0.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      pinyin-pro:
-        specifier: ^3.25.0
-        version: 3.26.0
-      qrcode.react:
-        specifier: ^4.2.0
-        version: 4.2.0(react@19.0.0)
-      qs:
-        specifier: ^6.13.0
-        version: 6.14.0
-      react:
-        specifier: 19.0.0
-        version: 19.0.0
-      react-18-input-autosize:
-        specifier: ^3.0.0
-        version: 3.0.0(react@19.0.0)
-      react-dom:
-        specifier: 19.0.0
-        version: 19.0.0(react@19.0.0)
-      react-easy-crop:
-        specifier: ^5.1.0
-        version: 5.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react-error-boundary:
-        specifier: ^4.1.2
-        version: 4.1.2(react@19.0.0)
-      react-headless-pagination:
-        specifier: ^1.1.6
-        version: 1.1.6(react@19.0.0)
-      react-hook-form:
-        specifier: ^7.53.1
-        version: 7.55.0(react@19.0.0)
-      react-hotkeys-hook:
-        specifier: ^4.6.1
-        version: 4.6.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react-i18next:
-        specifier: ^15.1.0
-        version: 15.4.1(i18next@23.16.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react-infinite-scroll-component:
-        specifier: ^6.1.0
-        version: 6.1.0(react@19.0.0)
-      react-markdown:
-        specifier: ^9.0.1
-        version: 9.1.0(@types/react@18.2.79)(react@19.0.0)
-      react-multi-email:
-        specifier: ^1.0.25
-        version: 1.0.25(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react-papaparse:
-        specifier: ^4.4.0
-        version: 4.4.0
-      react-pdf-highlighter:
-        specifier: ^8.0.0-rc.0
-        version: 8.0.0-rc.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react-slider:
-        specifier: ^2.0.6
-        version: 2.0.6(react@19.0.0)
-      react-sortablejs:
-        specifier: ^6.1.4
-        version: 6.1.4(@types/sortablejs@1.15.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sortablejs@1.15.6)
-      react-syntax-highlighter:
-        specifier: ^15.6.1
-        version: 15.6.1(react@19.0.0)
-      react-textarea-autosize:
-        specifier: ^8.5.8
-        version: 8.5.9(@types/react@18.2.79)(react@19.0.0)
-      react-tooltip:
-        specifier: 5.8.3
-        version: 5.8.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react-window:
-        specifier: ^1.8.10
-        version: 1.8.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react-window-infinite-loader:
-        specifier: ^1.0.9
-        version: 1.0.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      reactflow:
-        specifier: ^11.11.3
-        version: 11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      recordrtc:
-        specifier: ^5.6.2
-        version: 5.6.2
-      rehype-katex:
-        specifier: ^7.0.1
-        version: 7.0.1
-      rehype-raw:
-        specifier: ^7.0.0
-        version: 7.0.0
-      remark-breaks:
-        specifier: ^4.0.0
-        version: 4.0.0
-      remark-gfm:
-        specifier: ^4.0.0
-        version: 4.0.1
-      remark-math:
-        specifier: ^6.0.0
-        version: 6.0.0
-      scheduler:
-        specifier: ^0.23.0
-        version: 0.23.2
-      semver:
-        specifier: ^7.6.3
-        version: 7.7.1
-      server-only:
-        specifier: ^0.0.1
-        version: 0.0.1
-      sharp:
-        specifier: ^0.33.2
-        version: 0.33.5
-      shave:
-        specifier: ^5.0.4
-        version: 5.0.4
-      sortablejs:
-        specifier: ^1.15.0
-        version: 1.15.6
-      swr:
-        specifier: ^2.3.0
-        version: 2.3.3(react@19.0.0)
-      tailwind-merge:
-        specifier: ^2.5.4
-        version: 2.6.0
-      use-context-selector:
-        specifier: ^2.0.0
-        version: 2.0.0(react@19.0.0)(scheduler@0.23.2)
-      uuid:
-        specifier: ^10.0.0
-        version: 10.0.0
-      zod:
-        specifier: ^3.23.8
-        version: 3.24.2
-      zundo:
-        specifier: ^2.1.0
-        version: 2.3.0(zustand@4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0))
-      zustand:
-        specifier: ^4.5.2
-        version: 4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)
-    devDependencies:
-      '@antfu/eslint-config':
-        specifier: ^4.1.1
-        version: 4.12.0(@eslint-react/eslint-plugin@1.45.0(eslint@9.24.0(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@4.9.5))(typescript@4.9.5))(@typescript-eslint/utils@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(@vue/compiler-sfc@3.5.13)(eslint-plugin-react-hooks@5.2.0(eslint@9.24.0(jiti@1.21.7)))(eslint-plugin-react-refresh@0.4.19(eslint@9.24.0(jiti@1.21.7)))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@18.15.0)(happy-dom@17.4.4)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1))
-      '@chromatic-com/storybook':
-        specifier: ^3.1.0
-        version: 3.2.6(react@19.0.0)(storybook@8.5.0)
-      '@eslint-react/eslint-plugin':
-        specifier: ^1.15.0
-        version: 1.45.0(eslint@9.24.0(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@4.9.5))(typescript@4.9.5)
-      '@eslint/eslintrc':
-        specifier: ^3.1.0
-        version: 3.3.1
-      '@eslint/js':
-        specifier: ^9.20.0
-        version: 9.24.0
-      '@faker-js/faker':
-        specifier: ^9.0.3
-        version: 9.6.0
-      '@happy-dom/jest-environment':
-        specifier: ^17.4.4
-        version: 17.4.4
-      '@next/eslint-plugin-next':
-        specifier: ^15.2.3
-        version: 15.3.0
-      '@rgrove/parse-xml':
-        specifier: ^4.1.0
-        version: 4.2.0
-      '@storybook/addon-essentials':
-        specifier: 8.5.0
-        version: 8.5.0(@types/react@18.2.79)(storybook@8.5.0)
-      '@storybook/addon-interactions':
-        specifier: 8.5.0
-        version: 8.5.0(storybook@8.5.0)
-      '@storybook/addon-links':
-        specifier: 8.5.0
-        version: 8.5.0(react@19.0.0)(storybook@8.5.0)
-      '@storybook/addon-onboarding':
-        specifier: 8.5.0
-        version: 8.5.0(storybook@8.5.0)
-      '@storybook/addon-themes':
-        specifier: 8.5.0
-        version: 8.5.0(storybook@8.5.0)
-      '@storybook/blocks':
-        specifier: 8.5.0
-        version: 8.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)
-      '@storybook/nextjs':
-        specifier: 8.5.0
-        version: 8.5.0(esbuild@0.25.0)(next@15.2.3(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.86.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.86.3)(storybook@8.5.0)(type-fest@4.39.1)(typescript@4.9.5)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      '@storybook/react':
-        specifier: 8.5.0
-        version: 8.5.0(@storybook/test@8.5.0(storybook@8.5.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)(typescript@4.9.5)
-      '@storybook/test':
-        specifier: 8.5.0
-        version: 8.5.0(storybook@8.5.0)
-      '@testing-library/dom':
-        specifier: ^10.4.0
-        version: 10.4.0
-      '@testing-library/jest-dom':
-        specifier: ^6.6.2
-        version: 6.6.3
-      '@testing-library/react':
-        specifier: ^16.0.1
-        version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@types/crypto-js':
-        specifier: ^4.2.2
-        version: 4.2.2
-      '@types/dagre':
-        specifier: ^0.7.52
-        version: 0.7.52
-      '@types/jest':
-        specifier: ^29.5.13
-        version: 29.5.14
-      '@types/js-cookie':
-        specifier: ^3.0.6
-        version: 3.0.6
-      '@types/lodash-es':
-        specifier: ^4.17.12
-        version: 4.17.12
-      '@types/negotiator':
-        specifier: ^0.6.3
-        version: 0.6.3
-      '@types/node':
-        specifier: 18.15.0
-        version: 18.15.0
-      '@types/qs':
-        specifier: ^6.9.16
-        version: 6.9.18
-      '@types/react':
-        specifier: ~18.2.0
-        version: 18.2.79
-      '@types/react-dom':
-        specifier: ~18.2.0
-        version: 18.2.25
-      '@types/react-slider':
-        specifier: ^1.3.6
-        version: 1.3.6
-      '@types/react-syntax-highlighter':
-        specifier: ^15.5.13
-        version: 15.5.13
-      '@types/react-window':
-        specifier: ^1.8.8
-        version: 1.8.8
-      '@types/react-window-infinite-loader':
-        specifier: ^1.0.9
-        version: 1.0.9
-      '@types/recordrtc':
-        specifier: ^5.6.14
-        version: 5.6.14
-      '@types/semver':
-        specifier: ^7.5.8
-        version: 7.7.0
-      '@types/sortablejs':
-        specifier: ^1.15.1
-        version: 1.15.8
-      '@types/uuid':
-        specifier: ^10.0.0
-        version: 10.0.0
-      autoprefixer:
-        specifier: ^10.4.20
-        version: 10.4.21(postcss@8.5.3)
-      bing-translate-api:
-        specifier: ^4.0.2
-        version: 4.0.2
-      code-inspector-plugin:
-        specifier: ^0.18.1
-        version: 0.18.3
-      cross-env:
-        specifier: ^7.0.3
-        version: 7.0.3
-      eslint:
-        specifier: ^9.20.1
-        version: 9.24.0(jiti@1.21.7)
-      eslint-config-next:
-        specifier: ^15.0.0
-        version: 15.3.0(eslint-plugin-import-x@4.10.2(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-react-hooks:
-        specifier: ^5.1.0
-        version: 5.2.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-react-refresh:
-        specifier: ^0.4.19
-        version: 0.4.19(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-sonarjs:
-        specifier: ^3.0.2
-        version: 3.0.2(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-storybook:
-        specifier: ^0.11.2
-        version: 0.11.6(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-tailwindcss:
-        specifier: ^3.18.0
-        version: 3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)))
-      husky:
-        specifier: ^9.1.6
-        version: 9.1.7
-      jest:
-        specifier: ^29.7.0
-        version: 29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      lint-staged:
-        specifier: ^15.2.10
-        version: 15.5.0
-      lodash:
-        specifier: ^4.17.21
-        version: 4.17.21
-      magicast:
-        specifier: ^0.3.4
-        version: 0.3.5
-      postcss:
-        specifier: ^8.4.47
-        version: 8.5.3
-      sass:
-        specifier: ^1.80.3
-        version: 1.86.3
-      storybook:
-        specifier: 8.5.0
-        version: 8.5.0
-      tailwindcss:
-        specifier: ^3.4.14
-        version: 3.4.17(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      ts-node:
-        specifier: ^10.9.2
-        version: 10.9.2(@types/node@18.15.0)(typescript@4.9.5)
-      typescript:
-        specifier: 4.9.5
-        version: 4.9.5
-      typescript-eslint:
-        specifier: ^8.23.0
-        version: 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      uglify-js:
-        specifier: ^3.19.3
-        version: 3.19.3
-
-packages:
-
-  '@adobe/css-tools@4.4.2':
-    resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==}
-
-  '@alloc/quick-lru@5.2.0':
-    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'}
-
-  '@antfu/eslint-config@4.12.0':
-    resolution: {integrity: sha512-8NszLFXu9/cwOP/qliYS3heD+9ZCouGgOWQmsXgDHLNkjC9IjI1yXBOp6Xs4EvwTKsSAZp3SVw382M8naqMQUg==}
-    hasBin: true
-    peerDependencies:
-      '@eslint-react/eslint-plugin': ^1.38.4
-      '@prettier/plugin-xml': ^3.4.1
-      '@unocss/eslint-plugin': '>=0.50.0'
-      astro-eslint-parser: ^1.0.2
-      eslint: ^9.10.0
-      eslint-plugin-astro: ^1.2.0
-      eslint-plugin-format: '>=0.1.0'
-      eslint-plugin-react-hooks: ^5.2.0
-      eslint-plugin-react-refresh: ^0.4.19
-      eslint-plugin-solid: ^0.14.3
-      eslint-plugin-svelte: '>=2.35.1'
-      eslint-plugin-vuejs-accessibility: ^2.4.1
-      prettier-plugin-astro: ^0.14.0
-      prettier-plugin-slidev: ^1.0.5
-      svelte-eslint-parser: '>=0.37.0'
-    peerDependenciesMeta:
-      '@eslint-react/eslint-plugin':
-        optional: true
-      '@prettier/plugin-xml':
-        optional: true
-      '@unocss/eslint-plugin':
-        optional: true
-      astro-eslint-parser:
-        optional: true
-      eslint-plugin-astro:
-        optional: true
-      eslint-plugin-format:
-        optional: true
-      eslint-plugin-react-hooks:
-        optional: true
-      eslint-plugin-react-refresh:
-        optional: true
-      eslint-plugin-solid:
-        optional: true
-      eslint-plugin-svelte:
-        optional: true
-      eslint-plugin-vuejs-accessibility:
-        optional: true
-      prettier-plugin-astro:
-        optional: true
-      prettier-plugin-slidev:
-        optional: true
-      svelte-eslint-parser:
-        optional: true
-
-  '@antfu/install-pkg@1.0.0':
-    resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==}
-
-  '@antfu/utils@8.1.1':
-    resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
-
-  '@babel/code-frame@7.26.2':
-    resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/compat-data@7.26.8':
-    resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/core@7.26.10':
-    resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/generator@7.27.0':
-    resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-annotate-as-pure@7.25.9':
-    resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-compilation-targets@7.27.0':
-    resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-create-class-features-plugin@7.27.0':
-    resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-create-regexp-features-plugin@7.27.0':
-    resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-define-polyfill-provider@0.6.4':
-    resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
-  '@babel/helper-member-expression-to-functions@7.25.9':
-    resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-module-imports@7.25.9':
-    resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-module-transforms@7.26.0':
-    resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-optimise-call-expression@7.25.9':
-    resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-plugin-utils@7.26.5':
-    resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-remap-async-to-generator@7.25.9':
-    resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-replace-supers@7.26.5':
-    resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
-    resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-string-parser@7.25.9':
-    resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-validator-identifier@7.25.9':
-    resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-validator-option@7.25.9':
-    resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-wrap-function@7.25.9':
-    resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helpers@7.27.0':
-    resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/parser@7.27.0':
-    resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==}
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-
-  '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9':
-    resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9':
-    resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9':
-    resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9':
-    resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.13.0
-
-  '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9':
-    resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
-    resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-async-generators@7.8.4':
-    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-bigint@7.8.3':
-    resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-class-properties@7.12.13':
-    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-class-static-block@7.14.5':
-    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-dynamic-import@7.8.3':
-    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-import-assertions@7.26.0':
-    resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-import-attributes@7.26.0':
-    resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-import-meta@7.10.4':
-    resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-json-strings@7.8.3':
-    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-jsx@7.25.9':
-    resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
-    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
-    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-numeric-separator@7.10.4':
-    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-object-rest-spread@7.8.3':
-    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-optional-catch-binding@7.8.3':
-    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-optional-chaining@7.8.3':
-    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-private-property-in-object@7.14.5':
-    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-top-level-await@7.14.5':
-    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-typescript@7.25.9':
-    resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
-    resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-transform-arrow-functions@7.25.9':
-    resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-async-generator-functions@7.26.8':
-    resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-async-to-generator@7.25.9':
-    resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-block-scoped-functions@7.26.5':
-    resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-block-scoping@7.27.0':
-    resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-class-properties@7.25.9':
-    resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-class-static-block@7.26.0':
-    resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.12.0
-
-  '@babel/plugin-transform-classes@7.25.9':
-    resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-computed-properties@7.25.9':
-    resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-destructuring@7.25.9':
-    resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-dotall-regex@7.25.9':
-    resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-duplicate-keys@7.25.9':
-    resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9':
-    resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-transform-dynamic-import@7.25.9':
-    resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-exponentiation-operator@7.26.3':
-    resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-export-namespace-from@7.25.9':
-    resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-for-of@7.26.9':
-    resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-function-name@7.25.9':
-    resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-json-strings@7.25.9':
-    resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-literals@7.25.9':
-    resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-logical-assignment-operators@7.25.9':
-    resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-member-expression-literals@7.25.9':
-    resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-modules-amd@7.25.9':
-    resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-modules-commonjs@7.26.3':
-    resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-modules-systemjs@7.25.9':
-    resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-modules-umd@7.25.9':
-    resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-named-capturing-groups-regex@7.25.9':
-    resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-transform-new-target@7.25.9':
-    resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-nullish-coalescing-operator@7.26.6':
-    resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-numeric-separator@7.25.9':
-    resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-object-rest-spread@7.25.9':
-    resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-object-super@7.25.9':
-    resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-optional-catch-binding@7.25.9':
-    resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-optional-chaining@7.25.9':
-    resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-parameters@7.25.9':
-    resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-private-methods@7.25.9':
-    resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-private-property-in-object@7.25.9':
-    resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-property-literals@7.25.9':
-    resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-react-display-name@7.25.9':
-    resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-react-jsx-development@7.25.9':
-    resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-react-jsx@7.25.9':
-    resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-react-pure-annotations@7.25.9':
-    resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-regenerator@7.27.0':
-    resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-regexp-modifiers@7.26.0':
-    resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-transform-reserved-words@7.25.9':
-    resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-runtime@7.26.10':
-    resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-shorthand-properties@7.25.9':
-    resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-spread@7.25.9':
-    resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-sticky-regex@7.25.9':
-    resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-template-literals@7.26.8':
-    resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-typeof-symbol@7.27.0':
-    resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-typescript@7.27.0':
-    resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-unicode-escapes@7.25.9':
-    resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-unicode-property-regex@7.25.9':
-    resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-unicode-regex@7.25.9':
-    resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-unicode-sets-regex@7.25.9':
-    resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/preset-env@7.26.9':
-    resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/preset-modules@0.1.6-no-external-plugins':
-    resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
-
-  '@babel/preset-react@7.26.3':
-    resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/preset-typescript@7.27.0':
-    resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/runtime@7.27.0':
-    resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/template@7.27.0':
-    resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/traverse@7.27.0':
-    resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/types@7.27.0':
-    resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
-    engines: {node: '>=6.9.0'}
-
-  '@bcoe/v8-coverage@0.2.3':
-    resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
-
-  '@braintree/sanitize-url@7.1.1':
-    resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
-
-  '@chevrotain/cst-dts-gen@11.0.3':
-    resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
-
-  '@chevrotain/gast@11.0.3':
-    resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==}
-
-  '@chevrotain/regexp-to-ast@11.0.3':
-    resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==}
-
-  '@chevrotain/types@11.0.3':
-    resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==}
-
-  '@chevrotain/utils@11.0.3':
-    resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==}
-
-  '@chromatic-com/storybook@3.2.6':
-    resolution: {integrity: sha512-FDmn5Ry2DzQdik+eq2sp/kJMMT36Ewe7ONXUXM2Izd97c7r6R/QyGli8eyh/F0iyqVvbLveNYFyF0dBOJNwLqw==}
-    engines: {node: '>=16.0.0', yarn: '>=1.22.18'}
-    peerDependencies:
-      storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
-
-  '@clack/core@0.4.2':
-    resolution: {integrity: sha512-NYQfcEy8MWIxrT5Fj8nIVchfRFA26yYKJcvBS7WlUIlw2OmQOY9DhGGXMovyI5J5PpxrCPGkgUi207EBrjpBvg==}
-
-  '@clack/prompts@0.10.1':
-    resolution: {integrity: sha512-Q0T02vx8ZM9XSv9/Yde0jTmmBQufZhPJfYAg2XrrrxWWaZgq1rr8nU8Hv710BQ1dhoP8rtY7YUdpGej2Qza/cw==}
-
-  '@cspotcode/source-map-support@0.8.1':
-    resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
-    engines: {node: '>=12'}
-
-  '@dagrejs/dagre@1.1.4':
-    resolution: {integrity: sha512-QUTc54Cg/wvmlEUxB+uvoPVKFazM1H18kVHBQNmK2NbrDR5ihOCR6CXLnDSZzMcSQKJtabPUWridBOlJM3WkDg==}
-
-  '@dagrejs/graphlib@2.2.4':
-    resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==}
-    engines: {node: '>17.0.0'}
-
-  '@emnapi/core@1.4.0':
-    resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==}
-
-  '@emnapi/runtime@1.4.0':
-    resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==}
-
-  '@emnapi/wasi-threads@1.0.1':
-    resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==}
-
-  '@emoji-mart/data@1.2.1':
-    resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==}
-
-  '@es-joy/jsdoccomment@0.49.0':
-    resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==}
-    engines: {node: '>=16'}
-
-  '@es-joy/jsdoccomment@0.50.0':
-    resolution: {integrity: sha512-+zZymuVLH6zVwXPtCAtC+bDymxmEwEqDftdAK+f407IF1bnX49anIxvBhCA1AqUIfD6egj1jM1vUnSuijjNyYg==}
-    engines: {node: '>=18'}
-
-  '@esbuild/aix-ppc64@0.25.0':
-    resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==}
-    engines: {node: '>=18'}
-    cpu: [ppc64]
-    os: [aix]
-
-  '@esbuild/aix-ppc64@0.25.2':
-    resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==}
-    engines: {node: '>=18'}
-    cpu: [ppc64]
-    os: [aix]
-
-  '@esbuild/android-arm64@0.25.0':
-    resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [android]
-
-  '@esbuild/android-arm64@0.25.2':
-    resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [android]
-
-  '@esbuild/android-arm@0.25.0':
-    resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==}
-    engines: {node: '>=18'}
-    cpu: [arm]
-    os: [android]
-
-  '@esbuild/android-arm@0.25.2':
-    resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==}
-    engines: {node: '>=18'}
-    cpu: [arm]
-    os: [android]
-
-  '@esbuild/android-x64@0.25.0':
-    resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [android]
-
-  '@esbuild/android-x64@0.25.2':
-    resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [android]
-
-  '@esbuild/darwin-arm64@0.25.0':
-    resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@esbuild/darwin-arm64@0.25.2':
-    resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@esbuild/darwin-x64@0.25.0':
-    resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@esbuild/darwin-x64@0.25.2':
-    resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@esbuild/freebsd-arm64@0.25.0':
-    resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@esbuild/freebsd-arm64@0.25.2':
-    resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@esbuild/freebsd-x64@0.25.0':
-    resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@esbuild/freebsd-x64@0.25.2':
-    resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@esbuild/linux-arm64@0.25.0':
-    resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@esbuild/linux-arm64@0.25.2':
-    resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@esbuild/linux-arm@0.25.0':
-    resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==}
-    engines: {node: '>=18'}
-    cpu: [arm]
-    os: [linux]
-
-  '@esbuild/linux-arm@0.25.2':
-    resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==}
-    engines: {node: '>=18'}
-    cpu: [arm]
-    os: [linux]
-
-  '@esbuild/linux-ia32@0.25.0':
-    resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==}
-    engines: {node: '>=18'}
-    cpu: [ia32]
-    os: [linux]
-
-  '@esbuild/linux-ia32@0.25.2':
-    resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==}
-    engines: {node: '>=18'}
-    cpu: [ia32]
-    os: [linux]
-
-  '@esbuild/linux-loong64@0.25.0':
-    resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==}
-    engines: {node: '>=18'}
-    cpu: [loong64]
-    os: [linux]
-
-  '@esbuild/linux-loong64@0.25.2':
-    resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==}
-    engines: {node: '>=18'}
-    cpu: [loong64]
-    os: [linux]
-
-  '@esbuild/linux-mips64el@0.25.0':
-    resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==}
-    engines: {node: '>=18'}
-    cpu: [mips64el]
-    os: [linux]
-
-  '@esbuild/linux-mips64el@0.25.2':
-    resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==}
-    engines: {node: '>=18'}
-    cpu: [mips64el]
-    os: [linux]
-
-  '@esbuild/linux-ppc64@0.25.0':
-    resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==}
-    engines: {node: '>=18'}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@esbuild/linux-ppc64@0.25.2':
-    resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==}
-    engines: {node: '>=18'}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@esbuild/linux-riscv64@0.25.0':
-    resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==}
-    engines: {node: '>=18'}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@esbuild/linux-riscv64@0.25.2':
-    resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==}
-    engines: {node: '>=18'}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@esbuild/linux-s390x@0.25.0':
-    resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==}
-    engines: {node: '>=18'}
-    cpu: [s390x]
-    os: [linux]
-
-  '@esbuild/linux-s390x@0.25.2':
-    resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==}
-    engines: {node: '>=18'}
-    cpu: [s390x]
-    os: [linux]
-
-  '@esbuild/linux-x64@0.25.0':
-    resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [linux]
-
-  '@esbuild/linux-x64@0.25.2':
-    resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [linux]
-
-  '@esbuild/netbsd-arm64@0.25.0':
-    resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [netbsd]
-
-  '@esbuild/netbsd-arm64@0.25.2':
-    resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [netbsd]
-
-  '@esbuild/netbsd-x64@0.25.0':
-    resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [netbsd]
-
-  '@esbuild/netbsd-x64@0.25.2':
-    resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [netbsd]
-
-  '@esbuild/openbsd-arm64@0.25.0':
-    resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [openbsd]
-
-  '@esbuild/openbsd-arm64@0.25.2':
-    resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [openbsd]
-
-  '@esbuild/openbsd-x64@0.25.0':
-    resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [openbsd]
-
-  '@esbuild/openbsd-x64@0.25.2':
-    resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [openbsd]
-
-  '@esbuild/sunos-x64@0.25.0':
-    resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [sunos]
-
-  '@esbuild/sunos-x64@0.25.2':
-    resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [sunos]
-
-  '@esbuild/win32-arm64@0.25.0':
-    resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@esbuild/win32-arm64@0.25.2':
-    resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==}
-    engines: {node: '>=18'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@esbuild/win32-ia32@0.25.0':
-    resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==}
-    engines: {node: '>=18'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@esbuild/win32-ia32@0.25.2':
-    resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==}
-    engines: {node: '>=18'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@esbuild/win32-x64@0.25.0':
-    resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [win32]
-
-  '@esbuild/win32-x64@0.25.2':
-    resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==}
-    engines: {node: '>=18'}
-    cpu: [x64]
-    os: [win32]
-
-  '@eslint-community/eslint-plugin-eslint-comments@4.4.1':
-    resolution: {integrity: sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
-
-  '@eslint-community/eslint-utils@4.5.1':
-    resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
-  '@eslint-community/regexpp@4.12.1':
-    resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
-    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
-  '@eslint-react/ast@1.45.0':
-    resolution: {integrity: sha512-yqHzFu1IIbGGdzizWZ9J7mBorPjrs3abYMlwfc3CuD/XWpJ3dEtoDdtcHnyQ1ObpoZokPvzsCMJk3WWawIE45A==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-
-  '@eslint-react/core@1.45.0':
-    resolution: {integrity: sha512-pFLFMeJgXOxds8I5Ff5z8U+IRk+Um4f0OQUfFVCQhHiw2FoNqOqerFkQpdUy6r8nJCIrZNMGIsJkZ3AZFA5ajg==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-
-  '@eslint-react/eff@1.45.0':
-    resolution: {integrity: sha512-SB7kciR9JQTK6qQitD68ACUsQbfKDy+J5OLF2riYQa8qTQ7gfqBXdUU83jTgx3KTJwD7O/TgeIMeSrdvx08rJg==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-
-  '@eslint-react/eslint-plugin@1.45.0':
-    resolution: {integrity: sha512-HWtEbrmdxZrgasy01GuJ4TMsX35ytaHAD0/VS32ZhwypH7OG1R9OH/WRFx40DGKxSfWV5RNfRsj9fD8tq/BclQ==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: ^4.9.5 || ^5.3.3
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@eslint-react/jsx@1.45.0':
-    resolution: {integrity: sha512-uMOfy0uc71LLYw1RVmPrVIlS1FzbSY1zE0ybdnZS8qefqkVamIfPwwGQCniFhYApROTxZ5BrYceEWoT5O0Dy+g==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-
-  '@eslint-react/kit@1.45.0':
-    resolution: {integrity: sha512-F13yvQ19hnepNAUXFve9cQfKXNFzegOPjBwP0Iv9uZzCuF5bm+dROxdxRGOAyh2h2AGpj2s6SctTikG1Cm+mpQ==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-
-  '@eslint-react/shared@1.45.0':
-    resolution: {integrity: sha512-5G8zjmiKhTbBf2WKNpv6JYPbsRQcQ4XjNGR92X1JDCqrSBDEiNLCuBDEF015MX1JZ61LfD3xmS3TU7kXmGYkAw==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-
-  '@eslint-react/var@1.45.0':
-    resolution: {integrity: sha512-sTf7IuQjmQ1/jBeYU5VepX9wqdsmXFg1C8pVcxx0Xlxl3ykV2jfrIYoV4KJYURvVmhqmqWFaRJxKmNB24PuCOQ==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-
-  '@eslint/compat@1.2.8':
-    resolution: {integrity: sha512-LqCYHdWL/QqKIJuZ/ucMAv8d4luKGs4oCPgpt8mWztQAtPrHfXKQ/XAUc8ljCHAfJCn6SvkpTcGt5Tsh8saowA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^9.10.0
-    peerDependenciesMeta:
-      eslint:
-        optional: true
-
-  '@eslint/config-array@0.20.0':
-    resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/config-helpers@0.2.1':
-    resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/core@0.10.0':
-    resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/core@0.12.0':
-    resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/core@0.13.0':
-    resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/eslintrc@3.3.1':
-    resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/js@9.24.0':
-    resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/markdown@6.3.0':
-    resolution: {integrity: sha512-8rj7wmuP5hwXZ0HWoad+WL9nftpN373bCCQz9QL6sA+clZiz7et8Pk0yDAKeo//xLlPONKQ6wCpjkOHCLkbYUw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/object-schema@2.1.6':
-    resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@eslint/plugin-kit@0.2.8':
-    resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@faker-js/faker@9.6.0':
-    resolution: {integrity: sha512-3vm4by+B5lvsFPSyep3ELWmZfE3kicDtmemVpuwl1yH7tqtnHdsA6hG8fbXedMVdkzgtvzWoRgjSB4Q+FHnZiw==}
-    engines: {node: '>=18.0.0', npm: '>=9.0.0'}
-
-  '@floating-ui/core@1.6.9':
-    resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
-
-  '@floating-ui/dom@1.1.1':
-    resolution: {integrity: sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==}
-
-  '@floating-ui/dom@1.6.13':
-    resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==}
-
-  '@floating-ui/react-dom@2.1.2':
-    resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
-    peerDependencies:
-      react: '>=16.8.0'
-      react-dom: '>=16.8.0'
-
-  '@floating-ui/react@0.26.28':
-    resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==}
-    peerDependencies:
-      react: '>=16.8.0'
-      react-dom: '>=16.8.0'
-
-  '@floating-ui/utils@0.2.9':
-    resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
-
-  '@formatjs/intl-localematcher@0.5.10':
-    resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==}
-
-  '@happy-dom/jest-environment@17.4.4':
-    resolution: {integrity: sha512-5imA+SpP7ZcIwE1u2swWZq6UJhyZIWNtlE/gnqhVz+y91G6hgF+t9hVSsWH29Tfib+wg/zC9ryJPDDyAuqXfEg==}
-    engines: {node: '>=18.0.0'}
-
-  '@headlessui/react@2.2.1':
-    resolution: {integrity: sha512-daiUqVLae8CKVjEVT19P/izW0aGK0GNhMSAeMlrDebKmoVZHcRRwbxzgtnEadUVDXyBsWo9/UH4KHeniO+0tMg==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      react: ^18 || ^19 || ^19.0.0-rc
-      react-dom: ^18 || ^19 || ^19.0.0-rc
-
-  '@heroicons/react@2.2.0':
-    resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==}
-    peerDependencies:
-      react: '>= 16 || ^19.0.0-rc'
-
-  '@hookform/resolvers@3.10.0':
-    resolution: {integrity: sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==}
-    peerDependencies:
-      react-hook-form: ^7.0.0
-
-  '@humanfs/core@0.19.1':
-    resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
-    engines: {node: '>=18.18.0'}
-
-  '@humanfs/node@0.16.6':
-    resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
-    engines: {node: '>=18.18.0'}
-
-  '@humanwhocodes/module-importer@1.0.1':
-    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
-    engines: {node: '>=12.22'}
-
-  '@humanwhocodes/retry@0.3.1':
-    resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
-    engines: {node: '>=18.18'}
-
-  '@humanwhocodes/retry@0.4.2':
-    resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
-    engines: {node: '>=18.18'}
-
-  '@iconify/types@2.0.0':
-    resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
-
-  '@iconify/utils@2.3.0':
-    resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
-
-  '@img/sharp-darwin-arm64@0.33.5':
-    resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@img/sharp-darwin-x64@0.33.5':
-    resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [x64]
-    os: [darwin]
-
-  '@img/sharp-libvips-darwin-arm64@1.0.4':
-    resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@img/sharp-libvips-darwin-x64@1.0.4':
-    resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
-    cpu: [x64]
-    os: [darwin]
-
-  '@img/sharp-libvips-linux-arm64@1.0.4':
-    resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@img/sharp-libvips-linux-arm@1.0.5':
-    resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
-    cpu: [arm]
-    os: [linux]
-
-  '@img/sharp-libvips-linux-s390x@1.0.4':
-    resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
-    cpu: [s390x]
-    os: [linux]
-
-  '@img/sharp-libvips-linux-x64@1.0.4':
-    resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
-    cpu: [x64]
-    os: [linux]
-
-  '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
-    resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@img/sharp-libvips-linuxmusl-x64@1.0.4':
-    resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
-    cpu: [x64]
-    os: [linux]
-
-  '@img/sharp-linux-arm64@0.33.5':
-    resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm64]
-    os: [linux]
-
-  '@img/sharp-linux-arm@0.33.5':
-    resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm]
-    os: [linux]
-
-  '@img/sharp-linux-s390x@0.33.5':
-    resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [s390x]
-    os: [linux]
-
-  '@img/sharp-linux-x64@0.33.5':
-    resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [x64]
-    os: [linux]
-
-  '@img/sharp-linuxmusl-arm64@0.33.5':
-    resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [arm64]
-    os: [linux]
-
-  '@img/sharp-linuxmusl-x64@0.33.5':
-    resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [x64]
-    os: [linux]
-
-  '@img/sharp-wasm32@0.33.5':
-    resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [wasm32]
-
-  '@img/sharp-win32-ia32@0.33.5':
-    resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [ia32]
-    os: [win32]
-
-  '@img/sharp-win32-x64@0.33.5':
-    resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    cpu: [x64]
-    os: [win32]
-
-  '@isaacs/cliui@8.0.2':
-    resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
-    engines: {node: '>=12'}
-
-  '@istanbuljs/load-nyc-config@1.1.0':
-    resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
-    engines: {node: '>=8'}
-
-  '@istanbuljs/schema@0.1.3':
-    resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
-    engines: {node: '>=8'}
-
-  '@jest/console@29.7.0':
-    resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/core@29.7.0':
-    resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    peerDependencies:
-      node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
-
-  '@jest/environment@29.7.0':
-    resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/expect-utils@29.7.0':
-    resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/expect@29.7.0':
-    resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/fake-timers@29.7.0':
-    resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/globals@29.7.0':
-    resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/reporters@29.7.0':
-    resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    peerDependencies:
-      node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
-
-  '@jest/schemas@29.6.3':
-    resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/source-map@29.6.3':
-    resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/test-result@29.7.0':
-    resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/test-sequencer@29.7.0':
-    resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/transform@29.7.0':
-    resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jest/types@29.6.3':
-    resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  '@jridgewell/gen-mapping@0.3.8':
-    resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
-    engines: {node: '>=6.0.0'}
-
-  '@jridgewell/resolve-uri@3.1.2':
-    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
-    engines: {node: '>=6.0.0'}
-
-  '@jridgewell/set-array@1.2.1':
-    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
-    engines: {node: '>=6.0.0'}
-
-  '@jridgewell/source-map@0.3.6':
-    resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
-
-  '@jridgewell/sourcemap-codec@1.5.0':
-    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
-
-  '@jridgewell/trace-mapping@0.3.25':
-    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
-
-  '@jridgewell/trace-mapping@0.3.9':
-    resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
-
-  '@lexical/clipboard@0.30.0':
-    resolution: {integrity: sha512-taWQURtE6xF4Jy4I8teQw3+nVBVNO1r+9N9voXeivgwxSrAM40rjqQ/aZEKxWbwZtfkABDkCEArbVrqP0SkWcQ==}
-
-  '@lexical/code@0.30.0':
-    resolution: {integrity: sha512-OmA6Bmp3w9SMV25Hae1dLXtPNOdCgnzo1xy84K19U+dPP5iqXagwFq5oY/9PVOOI2wgaQHrz3C+7B4phDb9xaA==}
-
-  '@lexical/devtools-core@0.30.0':
-    resolution: {integrity: sha512-6vKEEIUym8pQ+tWt4VfRMOGE/dtfyPr9e1zPrAAV7Y/EdzK0AJYPPlw2Dt5Uqq9rposcIriqF4MkuFvy4UcZiQ==}
-    peerDependencies:
-      react: '>=17.x'
-      react-dom: '>=17.x'
-
-  '@lexical/dragon@0.30.0':
-    resolution: {integrity: sha512-eikVYw1pIcFIOojn2mGlps59YcyT9ATd6UMIx/ivuscakrZeU7SZM/F6c75QPJXNOu1b2koOo+4Bb1GT6jixGQ==}
-
-  '@lexical/hashtag@0.30.0':
-    resolution: {integrity: sha512-gB3DobSdAc0YZUhlTT7ZAUr+6RRREQ3UWVC1twdtFvXXw1vyTUXH2gWTDp/ParwBZ16Lnrg8mxET8Nu/qD1PSw==}
-
-  '@lexical/history@0.30.0':
-    resolution: {integrity: sha512-dxudthi94vSLQKXVq3LSwcOVkOmb2lvxoy7sCma513yJbrsn3fPLppR2Ynhl6aB9oPw675wSDrfsE6BG3U3+CA==}
-
-  '@lexical/html@0.30.0':
-    resolution: {integrity: sha512-GdegWO6RjJ7eE+yD3Z0X/OpT88SZjOs3DyQ0rgrZy3z7RPaFCbEEcq0M/NssJbKAB1XOFUsUFrnS7kZs1vJzGg==}
-
-  '@lexical/link@0.30.0':
-    resolution: {integrity: sha512-isD3PC0ywQIwbtekHYEvh7hDxcPz/cEr/AspYntYs08u5J0czhw3rpqnXWGauWaav5V9ExIkf1ZkGUFUI6bw5w==}
-
-  '@lexical/list@0.30.0':
-    resolution: {integrity: sha512-WKnwH+Cg+j2I0EbaEyPHo8MPNyrqQV3W1NmH5Mf/iRxCq42z7NJxemhmRUxbqv8vsugACwBkh2RlkhekRXmUQQ==}
-
-  '@lexical/mark@0.30.0':
-    resolution: {integrity: sha512-dLFH6tJ2WQUSdo1Y2Jp81vRT8j48FjF75K5YLRsKD/UFxWEy+RFgRXsd0H/BuFkx/jPTXt6xe8CaIrZvek8mLg==}
-
-  '@lexical/markdown@0.30.0':
-    resolution: {integrity: sha512-GGddZs63k0wb3/fdL7JyBjiy8L1AIHuRKT68riWbKAcNL7rfMl3Uy5VnMkgV/5bN/2eUQijkGjxG+VxsR8RWbw==}
-
-  '@lexical/offset@0.30.0':
-    resolution: {integrity: sha512-sZFbZt5dVdtrdoYk79i13xBDs8/MHXw6CqmZNht85L7UdwiuzVqA3KTyaMe60Vrg6mfsKIVjghbpMOhspcuCrw==}
-
-  '@lexical/overflow@0.30.0':
-    resolution: {integrity: sha512-fvjWnhtPZLMS3qJ6HC6tZTOMmcfNmeRUkgXTas9bvWT8Yul+WLJ/fWjzwvBcqpKlvPQjRFOcDcrW8T/Rp7KPrg==}
-
-  '@lexical/plain-text@0.30.0':
-    resolution: {integrity: sha512-jvxMMxFO3Yuj7evWsc33IGWfigU5A1KrJaIf6zv6GmYj0a7ZRkR1x6vJyc7AlgUM70sld+dozLdoynguQIlmrQ==}
-
-  '@lexical/react@0.30.0':
-    resolution: {integrity: sha512-fsb6voXzxHyP55lXdmnGhHMfxe6g/f+0NpmfPCkutOXYnY8UqKa86LLYl4Nrsi8HX8BRZfh1H0IjkzDG6EzVPw==}
-    peerDependencies:
-      react: '>=17.x'
-      react-dom: '>=17.x'
-
-  '@lexical/rich-text@0.30.0':
-    resolution: {integrity: sha512-oitOh5u68E5DBZt5VBZIaIeM/iNdt3mIDkGp2C259x81V/9KlSNB9c3rqdTKcs/A+Msw4j60FRhdmZcKQ9uYUA==}
-
-  '@lexical/selection@0.30.0':
-    resolution: {integrity: sha512-Ys2XfSmIV/Irg6Xo663YtR4jozIv/7sDemArkEGHT0fxZn2py5qftowPF5IBqFYxKTigAdv5vVPwusBvAnLIEg==}
-
-  '@lexical/table@0.30.0':
-    resolution: {integrity: sha512-XPCIMIGnZLKTa5/4cP16bXbmzvMndPR273HNl7ZaF35ky7UjZxdj42HBbE7q9zw2zbRPDiO77EyhYA0p20cbdw==}
-
-  '@lexical/text@0.30.0':
-    resolution: {integrity: sha512-P0ptriFwwP/hoDpz/MoBbzHxrFHqh0kCGzASWUdRZ1zrU0yPvJ9vV/UNMhyolH7xx+eAGI1Yl+m74NlpGmXqTg==}
-
-  '@lexical/utils@0.30.0':
-    resolution: {integrity: sha512-VJlAUhupCZmnbYYX3zMWovd4viu2guR01sAqKGbbOMbP+4rlaymixFbinvNPaRKDBloOARi+fpiveQFxnyr/Ew==}
-
-  '@lexical/yjs@0.30.0':
-    resolution: {integrity: sha512-mWGFAGpUPz4JoSV+Y0cZOzOZJoMLbVb/enldxEbV0xX71BBVzD0c0vjPxuaIJ9MtNkRZdK3eOubj+B45iOECtw==}
-    peerDependencies:
-      yjs: '>=13.5.22'
-
-  '@mapbox/node-pre-gyp@1.0.11':
-    resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
-    hasBin: true
-
-  '@mdx-js/loader@3.1.0':
-    resolution: {integrity: sha512-xU/lwKdOyfXtQGqn3VnJjlDrmKXEvMi1mgYxVmukEUtVycIz1nh7oQ40bKTd4cA7rLStqu0740pnhGYxGoqsCg==}
-    peerDependencies:
-      webpack: '>=5'
-    peerDependenciesMeta:
-      webpack:
-        optional: true
-
-  '@mdx-js/mdx@3.1.0':
-    resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==}
-
-  '@mdx-js/react@3.1.0':
-    resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==}
-    peerDependencies:
-      '@types/react': ~18.2.0
-      react: '>=16'
-
-  '@mermaid-js/parser@0.3.0':
-    resolution: {integrity: sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==}
-
-  '@monaco-editor/loader@1.5.0':
-    resolution: {integrity: sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==}
-
-  '@monaco-editor/react@4.7.0':
-    resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==}
-    peerDependencies:
-      monaco-editor: '>= 0.25.0 < 1'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  '@napi-rs/wasm-runtime@0.2.8':
-    resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==}
-
-  '@next/env@15.2.3':
-    resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==}
-
-  '@next/eslint-plugin-next@15.3.0':
-    resolution: {integrity: sha512-511UUcpWw5GWTyKfzW58U2F/bYJyjLE9e3SlnGK/zSXq7RqLlqFO8B9bitJjumLpj317fycC96KZ2RZsjGNfBw==}
-
-  '@next/mdx@15.2.3':
-    resolution: {integrity: sha512-rJAe5GvpTTA/i+9lQk/p321g0kXPLIuWJzUtRccW7w4l9vmOTGPPnXFjooEyYgyFcdbZxvJpSdjNq65VeQGKRQ==}
-    peerDependencies:
-      '@mdx-js/loader': '>=0.15.0'
-      '@mdx-js/react': '>=0.15.0'
-    peerDependenciesMeta:
-      '@mdx-js/loader':
-        optional: true
-      '@mdx-js/react':
-        optional: true
-
-  '@next/swc-darwin-arm64@15.2.3':
-    resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@next/swc-darwin-x64@15.2.3':
-    resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@next/swc-linux-arm64-gnu@15.2.3':
-    resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@next/swc-linux-arm64-musl@15.2.3':
-    resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@next/swc-linux-x64-gnu@15.2.3':
-    resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-
-  '@next/swc-linux-x64-musl@15.2.3':
-    resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-
-  '@next/swc-win32-arm64-msvc@15.2.3':
-    resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@next/swc-win32-x64-msvc@15.2.3':
-    resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [win32]
-
-  '@nodelib/fs.scandir@2.1.5':
-    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
-    engines: {node: '>= 8'}
-
-  '@nodelib/fs.stat@2.0.5':
-    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
-    engines: {node: '>= 8'}
-
-  '@nodelib/fs.walk@1.2.8':
-    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
-    engines: {node: '>= 8'}
-
-  '@nolyfill/is-core-module@1.0.39':
-    resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
-    engines: {node: '>=12.4.0'}
-
-  '@octokit/auth-token@5.1.2':
-    resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==}
-    engines: {node: '>= 18'}
-
-  '@octokit/core@6.1.5':
-    resolution: {integrity: sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg==}
-    engines: {node: '>= 18'}
-
-  '@octokit/endpoint@10.1.4':
-    resolution: {integrity: sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==}
-    engines: {node: '>= 18'}
-
-  '@octokit/graphql@8.2.2':
-    resolution: {integrity: sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==}
-    engines: {node: '>= 18'}
-
-  '@octokit/openapi-types@25.0.0':
-    resolution: {integrity: sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw==}
-
-  '@octokit/request-error@6.1.8':
-    resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==}
-    engines: {node: '>= 18'}
-
-  '@octokit/request@9.2.3':
-    resolution: {integrity: sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w==}
-    engines: {node: '>= 18'}
-
-  '@octokit/types@14.0.0':
-    resolution: {integrity: sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA==}
-
-  '@parcel/watcher-android-arm64@2.5.1':
-    resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [arm64]
-    os: [android]
-
-  '@parcel/watcher-darwin-arm64@2.5.1':
-    resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@parcel/watcher-darwin-x64@2.5.1':
-    resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@parcel/watcher-freebsd-x64@2.5.1':
-    resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@parcel/watcher-linux-arm-glibc@2.5.1':
-    resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [arm]
-    os: [linux]
-
-  '@parcel/watcher-linux-arm-musl@2.5.1':
-    resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [arm]
-    os: [linux]
-
-  '@parcel/watcher-linux-arm64-glibc@2.5.1':
-    resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@parcel/watcher-linux-arm64-musl@2.5.1':
-    resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@parcel/watcher-linux-x64-glibc@2.5.1':
-    resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [x64]
-    os: [linux]
-
-  '@parcel/watcher-linux-x64-musl@2.5.1':
-    resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [x64]
-    os: [linux]
-
-  '@parcel/watcher-win32-arm64@2.5.1':
-    resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@parcel/watcher-win32-ia32@2.5.1':
-    resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@parcel/watcher-win32-x64@2.5.1':
-    resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
-    engines: {node: '>= 10.0.0'}
-    cpu: [x64]
-    os: [win32]
-
-  '@parcel/watcher@2.5.1':
-    resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
-    engines: {node: '>= 10.0.0'}
-
-  '@pkgjs/parseargs@0.11.0':
-    resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
-    engines: {node: '>=14'}
-
-  '@pkgr/core@0.1.2':
-    resolution: {integrity: sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==}
-    engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
-
-  '@pkgr/core@0.2.2':
-    resolution: {integrity: sha512-25L86MyPvnlQoX2MTIV2OiUcb6vJ6aRbFa9pbwByn95INKD5mFH2smgjDhq+fwJoqAgvgbdJLj6Tz7V9X5CFAQ==}
-    engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
-
-  '@pmmmwh/react-refresh-webpack-plugin@0.5.16':
-    resolution: {integrity: sha512-kLQc9xz6QIqd2oIYyXRUiAp79kGpFBm3fEM9ahfG1HI0WI5gdZ2OVHWdmZYnwODt7ISck+QuQ6sBPrtvUBML7Q==}
-    engines: {node: '>= 10.13'}
-    peerDependencies:
-      '@types/webpack': 4.x || 5.x
-      react-refresh: '>=0.10.0 <1.0.0'
-      sockjs-client: ^1.4.0
-      type-fest: '>=0.17.0 <5.0.0'
-      webpack: '>=4.43.0 <6.0.0'
-      webpack-dev-server: 3.x || 4.x || 5.x
-      webpack-hot-middleware: 2.x
-      webpack-plugin-serve: 0.x || 1.x
-    peerDependenciesMeta:
-      '@types/webpack':
-        optional: true
-      sockjs-client:
-        optional: true
-      type-fest:
-        optional: true
-      webpack-dev-server:
-        optional: true
-      webpack-hot-middleware:
-        optional: true
-      webpack-plugin-serve:
-        optional: true
-
-  '@react-aria/focus@3.20.1':
-    resolution: {integrity: sha512-lgYs+sQ1TtBrAXnAdRBQrBo0/7o5H6IrfDxec1j+VRpcXL0xyk0xPq+m3lZp8typzIghqDgpnKkJ5Jf4OrzPIw==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-      react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-
-  '@react-aria/interactions@3.24.1':
-    resolution: {integrity: sha512-OWEcIC6UQfWq4Td5Ptuh4PZQ4LHLJr/JL2jGYvuNL6EgL3bWvzPrRYIF/R64YbfVxIC7FeZpPSkS07sZ93/NoA==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-      react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-
-  '@react-aria/ssr@3.9.7':
-    resolution: {integrity: sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==}
-    engines: {node: '>= 12'}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-
-  '@react-aria/utils@3.28.1':
-    resolution: {integrity: sha512-mnHFF4YOVu9BRFQ1SZSKfPhg3z+lBRYoW5mLcYTQihbKhz48+I1sqRkP7ahMITr8ANH3nb34YaMME4XWmK2Mgg==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-      react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-
-  '@react-stately/flags@3.1.0':
-    resolution: {integrity: sha512-KSHOCxTFpBtxhIRcKwsD1YDTaNxFtCYuAUb0KEihc16QwqZViq4hasgPBs2gYm7fHRbw7WYzWKf6ZSo/+YsFlg==}
-
-  '@react-stately/utils@3.10.5':
-    resolution: {integrity: sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-
-  '@react-types/shared@3.28.0':
-    resolution: {integrity: sha512-9oMEYIDc3sk0G5rysnYvdNrkSg7B04yTKl50HHSZVbokeHpnU0yRmsDaWb9B/5RprcKj8XszEk5guBO8Sa/Q+Q==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
-
-  '@reactflow/background@11.3.14':
-    resolution: {integrity: sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==}
-    peerDependencies:
-      react: '>=17'
-      react-dom: '>=17'
-
-  '@reactflow/controls@11.2.14':
-    resolution: {integrity: sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==}
-    peerDependencies:
-      react: '>=17'
-      react-dom: '>=17'
-
-  '@reactflow/core@11.11.4':
-    resolution: {integrity: sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==}
-    peerDependencies:
-      react: '>=17'
-      react-dom: '>=17'
-
-  '@reactflow/minimap@11.7.14':
-    resolution: {integrity: sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==}
-    peerDependencies:
-      react: '>=17'
-      react-dom: '>=17'
-
-  '@reactflow/node-resizer@2.2.14':
-    resolution: {integrity: sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==}
-    peerDependencies:
-      react: '>=17'
-      react-dom: '>=17'
-
-  '@reactflow/node-toolbar@1.3.14':
-    resolution: {integrity: sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==}
-    peerDependencies:
-      react: '>=17'
-      react-dom: '>=17'
-
-  '@remixicon/react@4.6.0':
-    resolution: {integrity: sha512-bY56maEgT5IYUSRotqy9h03IAKJC85vlKtWFg2FKzfs8JPrkdBAYSa9dxoUSKFwGzup8Ux6vjShs9Aec3jvr2w==}
-    peerDependencies:
-      react: '>=18.2.0'
-
-  '@rgrove/parse-xml@4.2.0':
-    resolution: {integrity: sha512-UuBOt7BOsKVOkFXRe4Ypd/lADuNIfqJXv8GvHqtXaTYXPPKkj2nS2zPllVsrtRjcomDhIJVBnZwfmlI222WH8g==}
-    engines: {node: '>=14.0.0'}
-
-  '@rollup/rollup-android-arm-eabi@4.39.0':
-    resolution: {integrity: sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==}
-    cpu: [arm]
-    os: [android]
-
-  '@rollup/rollup-android-arm64@4.39.0':
-    resolution: {integrity: sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==}
-    cpu: [arm64]
-    os: [android]
-
-  '@rollup/rollup-darwin-arm64@4.39.0':
-    resolution: {integrity: sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@rollup/rollup-darwin-x64@4.39.0':
-    resolution: {integrity: sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==}
-    cpu: [x64]
-    os: [darwin]
-
-  '@rollup/rollup-freebsd-arm64@4.39.0':
-    resolution: {integrity: sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@rollup/rollup-freebsd-x64@4.39.0':
-    resolution: {integrity: sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@rollup/rollup-linux-arm-gnueabihf@4.39.0':
-    resolution: {integrity: sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==}
-    cpu: [arm]
-    os: [linux]
-
-  '@rollup/rollup-linux-arm-musleabihf@4.39.0':
-    resolution: {integrity: sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==}
-    cpu: [arm]
-    os: [linux]
-
-  '@rollup/rollup-linux-arm64-gnu@4.39.0':
-    resolution: {integrity: sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@rollup/rollup-linux-arm64-musl@4.39.0':
-    resolution: {integrity: sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@rollup/rollup-linux-loongarch64-gnu@4.39.0':
-    resolution: {integrity: sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==}
-    cpu: [loong64]
-    os: [linux]
-
-  '@rollup/rollup-linux-powerpc64le-gnu@4.39.0':
-    resolution: {integrity: sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@rollup/rollup-linux-riscv64-gnu@4.39.0':
-    resolution: {integrity: sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@rollup/rollup-linux-riscv64-musl@4.39.0':
-    resolution: {integrity: sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@rollup/rollup-linux-s390x-gnu@4.39.0':
-    resolution: {integrity: sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==}
-    cpu: [s390x]
-    os: [linux]
-
-  '@rollup/rollup-linux-x64-gnu@4.39.0':
-    resolution: {integrity: sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==}
-    cpu: [x64]
-    os: [linux]
-
-  '@rollup/rollup-linux-x64-musl@4.39.0':
-    resolution: {integrity: sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==}
-    cpu: [x64]
-    os: [linux]
-
-  '@rollup/rollup-win32-arm64-msvc@4.39.0':
-    resolution: {integrity: sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==}
-    cpu: [arm64]
-    os: [win32]
-
-  '@rollup/rollup-win32-ia32-msvc@4.39.0':
-    resolution: {integrity: sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==}
-    cpu: [ia32]
-    os: [win32]
-
-  '@rollup/rollup-win32-x64-msvc@4.39.0':
-    resolution: {integrity: sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==}
-    cpu: [x64]
-    os: [win32]
-
-  '@rtsao/scc@1.1.0':
-    resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
-
-  '@rushstack/eslint-patch@1.11.0':
-    resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==}
-
-  '@sentry-internal/browser-utils@8.55.0':
-    resolution: {integrity: sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==}
-    engines: {node: '>=14.18'}
-
-  '@sentry-internal/feedback@8.55.0':
-    resolution: {integrity: sha512-cP3BD/Q6pquVQ+YL+rwCnorKuTXiS9KXW8HNKu4nmmBAyf7urjs+F6Hr1k9MXP5yQ8W3yK7jRWd09Yu6DHWOiw==}
-    engines: {node: '>=14.18'}
-
-  '@sentry-internal/replay-canvas@8.55.0':
-    resolution: {integrity: sha512-nIkfgRWk1091zHdu4NbocQsxZF1rv1f7bbp3tTIlZYbrH62XVZosx5iHAuZG0Zc48AETLE7K4AX9VGjvQj8i9w==}
-    engines: {node: '>=14.18'}
-
-  '@sentry-internal/replay@8.55.0':
-    resolution: {integrity: sha512-roCDEGkORwolxBn8xAKedybY+Jlefq3xYmgN2fr3BTnsXjSYOPC7D1/mYqINBat99nDtvgFvNfRcZPiwwZ1hSw==}
-    engines: {node: '>=14.18'}
-
-  '@sentry/browser@8.55.0':
-    resolution: {integrity: sha512-1A31mCEWCjaMxJt6qGUK+aDnLDcK6AwLAZnqpSchNysGni1pSn1RWSmk9TBF8qyTds5FH8B31H480uxMPUJ7Cw==}
-    engines: {node: '>=14.18'}
-
-  '@sentry/core@8.55.0':
-    resolution: {integrity: sha512-6g7jpbefjHYs821Z+EBJ8r4Z7LT5h80YSWRJaylGS4nW5W5Z2KXzpdnyFarv37O7QjauzVC2E+PABmpkw5/JGA==}
-    engines: {node: '>=14.18'}
-
-  '@sentry/react@8.55.0':
-    resolution: {integrity: sha512-/qNBvFLpvSa/Rmia0jpKfJdy16d4YZaAnH/TuKLAtm0BWlsPQzbXCU4h8C5Hsst0Do0zG613MEtEmWpWrVOqWA==}
-    engines: {node: '>=14.18'}
-    peerDependencies:
-      react: ^16.14.0 || 17.x || 18.x || 19.x
-
-  '@sentry/utils@8.55.0':
-    resolution: {integrity: sha512-cYcl39+xcOivBpN9d8ZKbALl+DxZKo/8H0nueJZ0PO4JA+MJGhSm6oHakXxLPaiMoNLTX7yor8ndnQIuFg+vmQ==}
-    engines: {node: '>=14.18'}
-
-  '@sinclair/typebox@0.27.8':
-    resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
-
-  '@sindresorhus/is@4.6.0':
-    resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
-    engines: {node: '>=10'}
-
-  '@sinonjs/commons@3.0.1':
-    resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
-
-  '@sinonjs/fake-timers@10.3.0':
-    resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
-
-  '@storybook/addon-actions@8.5.0':
-    resolution: {integrity: sha512-6CW9+17rk5eNx6I8EKqCxRKtsJFTR/lHL+xiJ6/iBWApIm8sg63vhXvUTJ58UixmIkT5oLh0+ESNPh+x10D8fw==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-backgrounds@8.5.0':
-    resolution: {integrity: sha512-lzyFLs7niNsqlhH5kdUrp7htLiMIcjY50VLWe0PaeJ6T6GZ7X9qhQzROAUV6cGqzyd8A6y/LzIUntDPMVEm/6g==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-controls@8.5.0':
-    resolution: {integrity: sha512-1fivx77A/ahObrPl0L66o9i9MUNfqXxsrpekne5gjMNXw9XJFIRNUe/ddL4CMmwu7SgVbj2QV+q5E5mlnZNTJw==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-docs@8.5.0':
-    resolution: {integrity: sha512-REwLSr1VgOVNJZwP3y3mldhOjBHlM5fqTvq/tC8NaYpAzx9O4rZdoUSZxW3tYtoNoYrHpB8kzRTeZl8WSdKllw==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-essentials@8.5.0':
-    resolution: {integrity: sha512-RrHRdaw2j3ugZiYQ6OHt3Ff08ID4hwAvipqULEsbEnEw3VlXOaW/MT5e2M7kW3MHskQ3iJ6XAD1Y1rNm432Pzw==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-highlight@8.5.0':
-    resolution: {integrity: sha512-/JxYzMK5aJSYs0K/0eAEFyER2dMoxqwM891MdnkNwLFdyrM58lzHee00F9oEX6zeQoRUNQPRepq0ui2PvbTMGw==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-interactions@8.5.0':
-    resolution: {integrity: sha512-vX1a8qS7o/W3kEzfL/CqOj/Rr6UlGLT/n0KXMpfIhx63tzxe1a1qGpFLL0h0zqAVPHZIOu9humWMKri5Iny6oA==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-links@8.5.0':
-    resolution: {integrity: sha512-Y11GIByAYqn0TibI/xsy0vCe+ZxJS9PVAAoHngLxkf9J4WodAXcJABr8ZPlWDNdaEhSS/FF7UQUmNag0UC2/pw==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
-      storybook: ^8.5.0
-    peerDependenciesMeta:
-      react:
-        optional: true
-
-  '@storybook/addon-measure@8.5.0':
-    resolution: {integrity: sha512-e8pJy2sICyj0Ff0W1PFc6HPE6PqcjnnHtfuDaO3M9uSKJLYkpTWJ8i1VSP178f8seq44r5/PdQCHqs5q5l3zgw==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-onboarding@8.5.0':
-    resolution: {integrity: sha512-77ebcHkKR744ciPbT4ZgqW4W7KrLv1uAdSb3mX3gWukSl4oxP9D/HjmNiX5fBDYWUC4wsf6q5barOs4Hqn8ivw==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-outline@8.5.0':
-    resolution: {integrity: sha512-r12sk1b38Ph6NroWAOTfjbJ/V+gDobm7tKQQlbSDf6fgX7cqyPHmKjfNDCOCQpXouZm/Jm+41zd758PW+Yt4ng==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-themes@8.5.0':
-    resolution: {integrity: sha512-pBNut4sLfcOeLBvWdNAJ3cxv/BfMSTmJcUtSzE4G+1pVNsBbGF+T2f/GM0IjaM0K8Ft03VDzeEAB64nluDS4RA==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-toolbars@8.5.0':
-    resolution: {integrity: sha512-q3yYYO2WX8K2DYNM++FzixGDjzYaeREincgsl2WXYXrcuGb5hkOoOgRiAQL8Nz9NQ1Eo+B/yZxrhG/5VoVhUUQ==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/addon-viewport@8.5.0':
-    resolution: {integrity: sha512-MlhVELImk9YzjEgGR2ciLC8d5tUSGcO7my4kWIClN0VyTRcvG4ZfwrsEC+jN3/l52nrgjLmKrDX5UAGZm6w5mQ==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/blocks@8.5.0':
-    resolution: {integrity: sha512-2sTOgjH/JFOgWnpqkKjpKVvKAgUaC9ZBjH1gnCoA5dne/SDafYaCAYfv6yZn7g2Xm1sTxWCAmMIUkYSALeWr+w==}
-    peerDependencies:
-      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: ^8.5.0
-    peerDependenciesMeta:
-      react:
-        optional: true
-      react-dom:
-        optional: true
-
-  '@storybook/builder-webpack5@8.5.0':
-    resolution: {integrity: sha512-MyCj11cktyN2HeK8NsLv+L0Km36qAz2UGqu6j1VKJUgPelgpCCi4StCW/KaSBeOFAwGD52xjAdNu+c1h/vfiMg==}
-    peerDependencies:
-      storybook: ^8.5.0
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@storybook/components@8.5.0':
-    resolution: {integrity: sha512-DhaHtwfEcfWYj3ih/5RBSDHe3Idxyf+oHw2/DmaLKJX6MluhdK3ZqigjRcTmA9Gj/SbR4CkHEEtDzAvBlW0BYw==}
-    peerDependencies:
-      storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
-
-  '@storybook/core-webpack@8.5.0':
-    resolution: {integrity: sha512-bJAcF9TwNO2qNa7Jef4h5U9ka4399HDiHiQec1AxdqUIy/2zfbetgV6+2Fr5mtejPqJgbs7kXNGErI+fFByLGg==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/core@8.5.0':
-    resolution: {integrity: sha512-apborO6ynns7SeydBSqE9o0zT6JSU+VY4gLFPJROGcconvSW4bS5xtJCsgjlulceyWVxepFHGXl4jEZw+SktXA==}
-    peerDependencies:
-      prettier: ^2 || ^3
-    peerDependenciesMeta:
-      prettier:
-        optional: true
-
-  '@storybook/csf-plugin@8.5.0':
-    resolution: {integrity: sha512-cs6ogviNyLG1h9J8Sb47U3DqIrQmn2EHm4ta3fpCeV3ABbrMgbzYyxtmybz4g/AwlDgjAZAt6PPcXkfCJ6p2CQ==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/csf@0.1.12':
-    resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==}
-
-  '@storybook/csf@0.1.13':
-    resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==}
-
-  '@storybook/global@5.0.0':
-    resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
-
-  '@storybook/icons@1.4.0':
-    resolution: {integrity: sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      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/instrumenter@8.5.0':
-    resolution: {integrity: sha512-eZ/UY6w4U2vay+wX7QVwKiRoyMzZscuv6v4k4r8BlmHPFWbhiZDO9S2GsG16UkyKnrQrYk432he70n7hn1Xvmg==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/manager-api@8.5.0':
-    resolution: {integrity: sha512-Ildriueo3eif4M+gMlMxu/mrBIbAnz8+oesmQJKdzZfe/U9eQTI9OUqJsxx/IVBmdzQ3ySsgNmzj5VweRkse4A==}
-    peerDependencies:
-      storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
-
-  '@storybook/nextjs@8.5.0':
-    resolution: {integrity: sha512-zUU0wQd4F2p006gZX0XC3+Zsj0tB4DOz+7FjSlnyGbzf5cDE6cD74l0Azj6aZluR4Q2say7gWDIpHu05YvIJsg==}
-    engines: {node: '>=18.0.0'}
-    peerDependencies:
-      next: ^13.5.0 || ^14.0.0 || ^15.0.0
-      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: ^8.5.0
-      typescript: '*'
-      webpack: ^5.0.0
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-      webpack:
-        optional: true
-
-  '@storybook/preset-react-webpack@8.5.0':
-    resolution: {integrity: sha512-KJwVcQVYQWuMT5QUF06be60UuBfazBIO+90erfoYoIx0UwOxKMVnQz0HfG2JMc4EIoNLIl0/cm5mb2k4BWyhbA==}
-    engines: {node: '>=18.0.0'}
-    peerDependencies:
-      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: ^8.5.0
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@storybook/preview-api@8.5.0':
-    resolution: {integrity: sha512-g0XbD54zMUkl6bpuA7qEBCE9rW1QV6KKmwkO4bkxMOJcMke3x9l00JTaYn7Un8wItjXiS3BIG15B6mnfBG7fng==}
-    peerDependencies:
-      storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
-
-  '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0':
-    resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==}
-    peerDependencies:
-      typescript: '>= 4.x'
-      webpack: '>= 4'
-
-  '@storybook/react-dom-shim@8.5.0':
-    resolution: {integrity: sha512-7P8xg4FiuFpM6kQOzZynno+0zyLVs8NgsmRK58t3JRZXbda1tzlxTXzvqx4hUevvbPJGjmrB0F3xTFH+8Otnvw==}
-    peerDependencies:
-      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: ^8.5.0
-
-  '@storybook/react@8.5.0':
-    resolution: {integrity: sha512-/jbkmGGc95N7KduIennL/k8grNTP5ye/YBnkcS4TbF7uDWBtKy3/Wqvx5BIlFXq3qeUnZJ8YtZc0lPIYeCY8XQ==}
-    engines: {node: '>=18.0.0'}
-    peerDependencies:
-      '@storybook/test': 8.5.0
-      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: ^8.5.0
-      typescript: '>= 4.2.x'
-    peerDependenciesMeta:
-      '@storybook/test':
-        optional: true
-      typescript:
-        optional: true
-
-  '@storybook/test@8.5.0':
-    resolution: {integrity: sha512-M/DdPlI6gwL7NGkK5o7GYjdEBp95AsFEUtW29zQfnVIAngYugzi3nIuM/XkQHunidVdAZCYjw2s2Yhhsx/m9sw==}
-    peerDependencies:
-      storybook: ^8.5.0
-
-  '@storybook/theming@8.5.0':
-    resolution: {integrity: sha512-591LbOj/HMmHYUfLgrMerxhF1A9mY61HWKxcRpB6xxalc1Xw1kRtQ49DcwuTXnUu9ktBB3nuOzPNPQPFSh/7PQ==}
-    peerDependencies:
-      storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0
-
-  '@stylistic/eslint-plugin@4.2.0':
-    resolution: {integrity: sha512-8hXezgz7jexGHdo5WN6JBEIPHCSFyyU4vgbxevu4YLVS5vl+sxqAAGyXSzfNDyR6xMNSH5H1x67nsXcYMOHtZA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: '>=9.0.0'
-
-  '@svgdotjs/svg.js@3.2.4':
-    resolution: {integrity: sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==}
-
-  '@swc/counter@0.1.3':
-    resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
-
-  '@swc/helpers@0.5.15':
-    resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
-
-  '@swc/helpers@0.5.17':
-    resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
-
-  '@szmarczak/http-timer@4.0.6':
-    resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
-    engines: {node: '>=10'}
-
-  '@tailwindcss/typography@0.5.16':
-    resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
-    peerDependencies:
-      tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
-
-  '@tanstack/form-core@1.3.2':
-    resolution: {integrity: sha512-hqRLw9EJ8bLJ5zvorGgTI4INcKh1hAtjPRTslwdB529soP8LpguzqWhn7yVV5/c2GcMSlqmpy5NZarkF5Mf54A==}
-
-  '@tanstack/query-core@5.72.2':
-    resolution: {integrity: sha512-fxl9/0yk3mD/FwTmVEf1/H6N5B975H0luT+icKyX566w6uJG0x6o+Yl+I38wJRCaogiMkstByt+seXfDbWDAcA==}
-
-  '@tanstack/query-devtools@5.72.2':
-    resolution: {integrity: sha512-mMKnGb+iOhVBcj6jaerCFRpg8pACStdG8hmUBHPtToeZzs4ctjBUL1FajqpVn2WaMxnq8Wya+P3Q5tPFNM9jQw==}
-
-  '@tanstack/react-form@1.3.3':
-    resolution: {integrity: sha512-rjZU6ufaQYbZU9I0uIXUJ1CPQ9M/LFyfpbsgA4oqpX/lLoiCFYsV7tZYVlWMMHkpSr1hhmAywp/8rmCFt14lnw==}
-    peerDependencies:
-      '@tanstack/react-start': ^1.112.0
-      react: ^17.0.0 || ^18.0.0 || ^19.0.0
-      vinxi: ^0.5.0
-    peerDependenciesMeta:
-      '@tanstack/react-start':
-        optional: true
-      vinxi:
-        optional: true
-
-  '@tanstack/react-query-devtools@5.72.2':
-    resolution: {integrity: sha512-n53qr9JdHCJTCUba6OvMhwiV2CcsckngOswKEE7nM5pQBa/fW9c43qw8omw1RPT2s+aC7MuwS8fHsWT8g+j6IQ==}
-    peerDependencies:
-      '@tanstack/react-query': ^5.72.2
-      react: ^18 || ^19
-
-  '@tanstack/react-query@5.72.2':
-    resolution: {integrity: sha512-SVNHzyBUYiis+XiCl+8yiPZmMYei2AKYY94wM/zpvB5l1jxqOo82FQTziSJ4pBi96jtYqvYrTMxWynmbQh3XKw==}
-    peerDependencies:
-      react: ^18 || ^19
-
-  '@tanstack/react-store@0.7.0':
-    resolution: {integrity: sha512-S/Rq17HaGOk+tQHV/yrePMnG1xbsKZIl/VsNWnNXt4XW+tTY8dTlvpJH2ZQ3GRALsusG5K6Q3unAGJ2pd9W/Ng==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  '@tanstack/react-virtual@3.13.6':
-    resolution: {integrity: sha512-WT7nWs8ximoQ0CDx/ngoFP7HbQF9Q2wQe4nh2NB+u2486eX3nZRE40P9g6ccCVq7ZfTSH5gFOuCoVH5DLNS/aA==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  '@tanstack/store@0.7.0':
-    resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==}
-
-  '@tanstack/virtual-core@3.13.6':
-    resolution: {integrity: sha512-cnQUeWnhNP8tJ4WsGcYiX24Gjkc9ALstLbHcBj1t3E7EimN6n6kHH+DPV4PpDnuw00NApQp+ViojMj1GRdwYQg==}
-
-  '@testing-library/dom@10.4.0':
-    resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
-    engines: {node: '>=18'}
-
-  '@testing-library/jest-dom@6.5.0':
-    resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==}
-    engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
-
-  '@testing-library/jest-dom@6.6.3':
-    resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==}
-    engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
-
-  '@testing-library/react@16.3.0':
-    resolution: {integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==}
-    engines: {node: '>=18'}
-    peerDependencies:
-      '@testing-library/dom': ^10.0.0
-      '@types/react': ~18.2.0
-      '@types/react-dom': ~18.2.0
-      react: ^18.0.0 || ^19.0.0
-      react-dom: ^18.0.0 || ^19.0.0
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      '@types/react-dom':
-        optional: true
-
-  '@testing-library/user-event@14.5.2':
-    resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==}
-    engines: {node: '>=12', npm: '>=6'}
-    peerDependencies:
-      '@testing-library/dom': '>=7.21.4'
-
-  '@tsconfig/node10@1.0.11':
-    resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
-
-  '@tsconfig/node12@1.0.11':
-    resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
-
-  '@tsconfig/node14@1.0.3':
-    resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
-
-  '@tsconfig/node16@1.0.4':
-    resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
-
-  '@tybys/wasm-util@0.9.0':
-    resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
-
-  '@types/aria-query@5.0.4':
-    resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
-
-  '@types/babel__core@7.20.5':
-    resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
-
-  '@types/babel__generator@7.27.0':
-    resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
-
-  '@types/babel__template@7.4.4':
-    resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
-
-  '@types/babel__traverse@7.20.7':
-    resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
-
-  '@types/cacheable-request@6.0.3':
-    resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
-
-  '@types/crypto-js@4.2.2':
-    resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==}
-
-  '@types/d3-array@3.2.1':
-    resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==}
-
-  '@types/d3-axis@3.0.6':
-    resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
-
-  '@types/d3-brush@3.0.6':
-    resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
-
-  '@types/d3-chord@3.0.6':
-    resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
-
-  '@types/d3-color@3.1.3':
-    resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
-
-  '@types/d3-contour@3.0.6':
-    resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
-
-  '@types/d3-delaunay@6.0.4':
-    resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
-
-  '@types/d3-dispatch@3.0.6':
-    resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==}
-
-  '@types/d3-drag@3.0.7':
-    resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
-
-  '@types/d3-dsv@3.0.7':
-    resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
-
-  '@types/d3-ease@3.0.2':
-    resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
-
-  '@types/d3-fetch@3.0.7':
-    resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
-
-  '@types/d3-force@3.0.10':
-    resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
-
-  '@types/d3-format@3.0.4':
-    resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
-
-  '@types/d3-geo@3.1.0':
-    resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
-
-  '@types/d3-hierarchy@3.1.7':
-    resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
-
-  '@types/d3-interpolate@3.0.4':
-    resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
-
-  '@types/d3-path@3.1.1':
-    resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
-
-  '@types/d3-polygon@3.0.2':
-    resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
-
-  '@types/d3-quadtree@3.0.6':
-    resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
-
-  '@types/d3-random@3.0.3':
-    resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
-
-  '@types/d3-scale-chromatic@3.1.0':
-    resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
-
-  '@types/d3-scale@4.0.9':
-    resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
-
-  '@types/d3-selection@3.0.11':
-    resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
-
-  '@types/d3-shape@3.1.7':
-    resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==}
-
-  '@types/d3-time-format@4.0.3':
-    resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
-
-  '@types/d3-time@3.0.4':
-    resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
-
-  '@types/d3-timer@3.0.2':
-    resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
-
-  '@types/d3-transition@3.0.9':
-    resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
-
-  '@types/d3-zoom@3.0.8':
-    resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
-
-  '@types/d3@7.4.3':
-    resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
-
-  '@types/dagre@0.7.52':
-    resolution: {integrity: sha512-XKJdy+OClLk3hketHi9Qg6gTfe1F3y+UFnHxKA2rn9Dw+oXa4Gb378Ztz9HlMgZKSxpPmn4BNVh9wgkpvrK1uw==}
-
-  '@types/debug@4.1.12':
-    resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
-
-  '@types/doctrine@0.0.9':
-    resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==}
-
-  '@types/eslint-scope@3.7.7':
-    resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
-
-  '@types/eslint@9.6.1':
-    resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
-
-  '@types/estree-jsx@1.0.5':
-    resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
-
-  '@types/estree@1.0.7':
-    resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
-
-  '@types/geojson@7946.0.16':
-    resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
-
-  '@types/graceful-fs@4.1.9':
-    resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
-
-  '@types/hast@2.3.10':
-    resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
-
-  '@types/hast@3.0.4':
-    resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
-
-  '@types/html-minifier-terser@6.1.0':
-    resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==}
-
-  '@types/http-cache-semantics@4.0.4':
-    resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
-
-  '@types/istanbul-lib-coverage@2.0.6':
-    resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
-
-  '@types/istanbul-lib-report@3.0.3':
-    resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
-
-  '@types/istanbul-reports@3.0.4':
-    resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
-
-  '@types/jest@29.5.14':
-    resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
-
-  '@types/js-cookie@3.0.6':
-    resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==}
-
-  '@types/json-schema@7.0.15':
-    resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
-  '@types/json5@0.0.29':
-    resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
-
-  '@types/katex@0.16.7':
-    resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
-
-  '@types/keyv@3.1.4':
-    resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
-
-  '@types/lodash-es@4.17.12':
-    resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
-
-  '@types/lodash@4.17.16':
-    resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==}
-
-  '@types/mdast@4.0.4':
-    resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
-
-  '@types/mdx@2.0.13':
-    resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
-
-  '@types/ms@2.1.0':
-    resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
-
-  '@types/negotiator@0.6.3':
-    resolution: {integrity: sha512-JkXTOdKs5MF086b/pt8C3+yVp3iDUwG635L7oCH6HvJvvr6lSUU5oe/gLXnPEfYRROHjJIPgCV6cuAg8gGkntQ==}
-
-  '@types/node@18.15.0':
-    resolution: {integrity: sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==}
-
-  '@types/normalize-package-data@2.4.4':
-    resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
-
-  '@types/papaparse@5.3.15':
-    resolution: {integrity: sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw==}
-
-  '@types/parse-json@4.0.2':
-    resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
-
-  '@types/prop-types@15.7.14':
-    resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
-
-  '@types/qs@6.9.18':
-    resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==}
-
-  '@types/react-dom@18.2.25':
-    resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==}
-
-  '@types/react-slider@1.3.6':
-    resolution: {integrity: sha512-RS8XN5O159YQ6tu3tGZIQz1/9StMLTg/FCIPxwqh2gwVixJnlfIodtVx+fpXVMZHe7A58lAX1Q4XTgAGOQaCQg==}
-
-  '@types/react-syntax-highlighter@15.5.13':
-    resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==}
-
-  '@types/react-window-infinite-loader@1.0.9':
-    resolution: {integrity: sha512-gEInTjQwURCnDOFyIEK2+fWB5gTjqwx30O62QfxA9stE5aiB6EWkGj4UMhc0axq7/FV++Gs/TGW8FtgEx0S6Tw==}
-
-  '@types/react-window@1.8.8':
-    resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==}
-
-  '@types/react@18.2.79':
-    resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==}
-
-  '@types/recordrtc@5.6.14':
-    resolution: {integrity: sha512-Reiy1sl11xP0r6w8DW3iQjc1BgXFyNC7aDuutysIjpFoqyftbQps9xPA2FoBkfVXpJM61betgYPNt+v65zvMhA==}
-
-  '@types/resolve@1.20.6':
-    resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
-
-  '@types/responselike@1.0.3':
-    resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
-
-  '@types/semver@7.7.0':
-    resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==}
-
-  '@types/sortablejs@1.15.8':
-    resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==}
-
-  '@types/stack-utils@2.0.3':
-    resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
-
-  '@types/trusted-types@2.0.7':
-    resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
-
-  '@types/unist@2.0.11':
-    resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
-
-  '@types/unist@3.0.3':
-    resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
-
-  '@types/uuid@10.0.0':
-    resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==}
-
-  '@types/uuid@9.0.8':
-    resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
-
-  '@types/yargs-parser@21.0.3':
-    resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
-
-  '@types/yargs@17.0.33':
-    resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
-
-  '@typescript-eslint/eslint-plugin@8.29.1':
-    resolution: {integrity: sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/parser@8.29.1':
-    resolution: {integrity: sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/scope-manager@8.29.1':
-    resolution: {integrity: sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/type-utils@8.29.1':
-    resolution: {integrity: sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/types@8.29.1':
-    resolution: {integrity: sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@typescript-eslint/typescript-estree@8.29.1':
-    resolution: {integrity: sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/utils@8.29.1':
-    resolution: {integrity: sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <5.9.0'
-
-  '@typescript-eslint/visitor-keys@8.29.1':
-    resolution: {integrity: sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  '@ungap/structured-clone@1.3.0':
-    resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
-
-  '@unrs/resolver-binding-darwin-arm64@1.4.1':
-    resolution: {integrity: sha512-8Tv+Bsd0BjGwfEedIyor4inw8atppRxM5BdUnIt+3mAm/QXUm7Dw74CHnXpfZKXkp07EXJGiA8hStqCINAWhdw==}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@unrs/resolver-binding-darwin-x64@1.4.1':
-    resolution: {integrity: sha512-X8c3PhWziEMKAzZz+YAYWfwawi5AEgzy/hmfizAB4C70gMHLKmInJcp1270yYAOs7z07YVFI220pp50z24Jk3A==}
-    cpu: [x64]
-    os: [darwin]
-
-  '@unrs/resolver-binding-freebsd-x64@1.4.1':
-    resolution: {integrity: sha512-UUr/nREy1UdtxXQnmLaaTXFGOcGxPwNIzeJdb3KXai3TKtC1UgNOB9s8KOA4TaxOUBR/qVgL5BvBwmUjD5yuVA==}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@unrs/resolver-binding-linux-arm-gnueabihf@1.4.1':
-    resolution: {integrity: sha512-e3pII53dEeS8inkX6A1ad2UXE0nuoWCqik4kOxaDnls0uJUq0ntdj5d9IYd+bv5TDwf9DSge/xPOvCmRYH+Tsw==}
-    cpu: [arm]
-    os: [linux]
-
-  '@unrs/resolver-binding-linux-arm-musleabihf@1.4.1':
-    resolution: {integrity: sha512-e/AKKd9gR+HNmVyDEPI/PIz2t0DrA3cyonHNhHVjrkxe8pMCiYiqhtn1+h+yIpHUtUlM6Y1FNIdivFa+r7wrEQ==}
-    cpu: [arm]
-    os: [linux]
-
-  '@unrs/resolver-binding-linux-arm64-gnu@1.4.1':
-    resolution: {integrity: sha512-vtIu34luF1jRktlHtiwm2mjuE8oJCsFiFr8hT5+tFQdqFKjPhbJXn83LswKsOhy0GxAEevpXDI4xxEwkjuXIPA==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@unrs/resolver-binding-linux-arm64-musl@1.4.1':
-    resolution: {integrity: sha512-H3PaOuGyhFXiyJd+09uPhGl4gocmhyi1BRzvsP8Lv5AQO3p3/ZY7WjV4t2NkBksm9tMjf3YbOVHyPWi2eWsNYw==}
-    cpu: [arm64]
-    os: [linux]
-
-  '@unrs/resolver-binding-linux-ppc64-gnu@1.4.1':
-    resolution: {integrity: sha512-4+GmJcaaFntCi1S01YByqp8wLMjV/FyQyHVGm0vedIhL1Vfx7uHkz/sZmKsidRwokBGuxi92GFmSzqT2O8KcNA==}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@unrs/resolver-binding-linux-s390x-gnu@1.4.1':
-    resolution: {integrity: sha512-6RDQVCmtFYTlhy89D5ixTqo9bTQqFhvNN0Ey1wJs5r+01Dq15gPHRXv2jF2bQATtMrOfYwv+R2ZR9ew1N1N3YQ==}
-    cpu: [s390x]
-    os: [linux]
-
-  '@unrs/resolver-binding-linux-x64-gnu@1.4.1':
-    resolution: {integrity: sha512-XpU9uzIkD86+19NjCXxlVPISMUrVXsXo5htxtuG+uJ59p5JauSRZsIxQxzzfKzkxEjdvANPM/lS1HFoX6A6QeA==}
-    cpu: [x64]
-    os: [linux]
-
-  '@unrs/resolver-binding-linux-x64-musl@1.4.1':
-    resolution: {integrity: sha512-3CDjG/spbTKCSHl66QP2ekHSD+H34i7utuDIM5gzoNBcZ1gTO0Op09Wx5cikXnhORRf9+HyDWzm37vU1PLSM1A==}
-    cpu: [x64]
-    os: [linux]
-
-  '@unrs/resolver-binding-wasm32-wasi@1.4.1':
-    resolution: {integrity: sha512-50tYhvbCTnuzMn7vmP8IV2UKF7ITo1oihygEYq9wW2DUb/Y+QMqBHJUSCABRngATjZ4shOK6f2+s0gQX6ElENQ==}
-    engines: {node: '>=14.0.0'}
-    cpu: [wasm32]
-
-  '@unrs/resolver-binding-win32-arm64-msvc@1.4.1':
-    resolution: {integrity: sha512-KyJiIne/AqV4IW0wyQO34wSMuJwy3VxVQOfIXIPyQ/Up6y/zi2P/WwXb78gHsLiGRUqCA9LOoCX+6dQZde0g1g==}
-    cpu: [arm64]
-    os: [win32]
-
-  '@unrs/resolver-binding-win32-ia32-msvc@1.4.1':
-    resolution: {integrity: sha512-y2NUD7pygrBolN2NoXUrwVqBpKPhF8DiSNE5oB5/iFO49r2DpoYqdj5HPb3F42fPBH5qNqj6Zg63+xCEzAD2hw==}
-    cpu: [ia32]
-    os: [win32]
-
-  '@unrs/resolver-binding-win32-x64-msvc@1.4.1':
-    resolution: {integrity: sha512-hVXaObGI2lGFmrtT77KSbPQ3I+zk9IU500wobjk0+oX59vg/0VqAzABNtt3YSQYgXTC2a/LYxekLfND/wlt0yQ==}
-    cpu: [x64]
-    os: [win32]
-
-  '@vitest/eslint-plugin@1.1.42':
-    resolution: {integrity: sha512-dTGNbh/angh+hoqp5L5A8YO/29mOXDXmDQ/1fzt/jiYzLvU6FvrMqJpGqMqh5g+Fz6MDoZi0AlxefnFUg93Q5A==}
-    peerDependencies:
-      '@typescript-eslint/utils': '>= 8.24.0'
-      eslint: '>= 8.57.0'
-      typescript: '>= 5.0.0'
-      vitest: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@vitest/expect@2.0.5':
-    resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==}
-
-  '@vitest/expect@3.1.1':
-    resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==}
-
-  '@vitest/mocker@3.1.1':
-    resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==}
-    peerDependencies:
-      msw: ^2.4.9
-      vite: ^5.0.0 || ^6.0.0
-    peerDependenciesMeta:
-      msw:
-        optional: true
-      vite:
-        optional: true
-
-  '@vitest/pretty-format@2.0.5':
-    resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
-
-  '@vitest/pretty-format@2.1.9':
-    resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
-
-  '@vitest/pretty-format@3.1.1':
-    resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==}
-
-  '@vitest/runner@3.1.1':
-    resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==}
-
-  '@vitest/snapshot@3.1.1':
-    resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==}
-
-  '@vitest/spy@2.0.5':
-    resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==}
-
-  '@vitest/spy@3.1.1':
-    resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==}
-
-  '@vitest/utils@2.0.5':
-    resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
-
-  '@vitest/utils@2.1.9':
-    resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
-
-  '@vitest/utils@3.1.1':
-    resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==}
-
-  '@vue/compiler-core@3.5.13':
-    resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
-
-  '@vue/compiler-dom@3.5.13':
-    resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
-
-  '@vue/compiler-sfc@3.5.13':
-    resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
-
-  '@vue/compiler-ssr@3.5.13':
-    resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
-
-  '@vue/shared@3.5.13':
-    resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
-
-  '@webassemblyjs/ast@1.14.1':
-    resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
-
-  '@webassemblyjs/floating-point-hex-parser@1.13.2':
-    resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
-
-  '@webassemblyjs/helper-api-error@1.13.2':
-    resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
-
-  '@webassemblyjs/helper-buffer@1.14.1':
-    resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
-
-  '@webassemblyjs/helper-numbers@1.13.2':
-    resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
-
-  '@webassemblyjs/helper-wasm-bytecode@1.13.2':
-    resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
-
-  '@webassemblyjs/helper-wasm-section@1.14.1':
-    resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
-
-  '@webassemblyjs/ieee754@1.13.2':
-    resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
-
-  '@webassemblyjs/leb128@1.13.2':
-    resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
-
-  '@webassemblyjs/utf8@1.13.2':
-    resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
-
-  '@webassemblyjs/wasm-edit@1.14.1':
-    resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
-
-  '@webassemblyjs/wasm-gen@1.14.1':
-    resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
-
-  '@webassemblyjs/wasm-opt@1.14.1':
-    resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
-
-  '@webassemblyjs/wasm-parser@1.14.1':
-    resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
-
-  '@webassemblyjs/wast-printer@1.14.1':
-    resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
-
-  '@xtuc/ieee754@1.2.0':
-    resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
-
-  '@xtuc/long@4.2.2':
-    resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
-
-  '@zod/core@0.1.0':
-    resolution: {integrity: sha512-hSXsufqjH7u8DiJPT0KY1rFWIhjkdXGM8MhMLwzaeOMhxMA4bzjWLQwSoAToJunUTVrpmfdo4dUFzNaU219+VQ==}
-
-  '@zod/mini@4.0.0-beta.0':
-    resolution: {integrity: sha512-ux1pJYQJO0S/uAldc0KGKiBFvqPpQqfC8vXbBJ3tDrcWCCa6/QBQPexZFn/cHscTxA/SnEJEAxa7qGTwPQC5Tg==}
-
-  abbrev@1.1.1:
-    resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
-
-  abcjs@6.4.4:
-    resolution: {integrity: sha512-dT3Z2vb8yihbiPMzSoup0JOcvO2je4qpFNlTD+kS5VBelE3AASAs18dS5qeMWkZeqCz7kI/hz62B2lpMDugWLA==}
-
-  abort-controller@3.0.0:
-    resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
-    engines: {node: '>=6.5'}
-
-  acorn-jsx@5.3.2:
-    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
-    peerDependencies:
-      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
-  acorn-walk@8.3.4:
-    resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
-    engines: {node: '>=0.4.0'}
-
-  acorn@8.14.1:
-    resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-
-  adjust-sourcemap-loader@4.0.0:
-    resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==}
-    engines: {node: '>=8.9'}
-
-  agent-base@6.0.2:
-    resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
-    engines: {node: '>= 6.0.0'}
-
-  ahooks@3.8.4:
-    resolution: {integrity: sha512-39wDEw2ZHvypaT14EpMMk4AzosHWt0z9bulY0BeDsvc9PqJEV+Kjh/4TZfftSsotBMq52iYIOFPd3PR56e0ZJg==}
-    engines: {node: '>=8.0.0'}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-
-  ajv-formats@2.1.1:
-    resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
-    peerDependencies:
-      ajv: ^8.0.0
-    peerDependenciesMeta:
-      ajv:
-        optional: true
-
-  ajv-keywords@3.5.2:
-    resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
-    peerDependencies:
-      ajv: ^6.9.1
-
-  ajv-keywords@5.1.0:
-    resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
-    peerDependencies:
-      ajv: ^8.8.2
-
-  ajv@6.12.6:
-    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
-  ajv@8.17.1:
-    resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
-
-  ansi-escapes@4.3.2:
-    resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
-    engines: {node: '>=8'}
-
-  ansi-escapes@7.0.0:
-    resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
-    engines: {node: '>=18'}
-
-  ansi-html-community@0.0.8:
-    resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
-    engines: {'0': node >= 0.8.0}
-    hasBin: true
-
-  ansi-html@0.0.9:
-    resolution: {integrity: sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==}
-    engines: {'0': node >= 0.8.0}
-    hasBin: true
-
-  ansi-regex@5.0.1:
-    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
-    engines: {node: '>=8'}
-
-  ansi-regex@6.1.0:
-    resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
-    engines: {node: '>=12'}
-
-  ansi-styles@4.3.0:
-    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
-    engines: {node: '>=8'}
-
-  ansi-styles@5.2.0:
-    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
-    engines: {node: '>=10'}
-
-  ansi-styles@6.2.1:
-    resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
-    engines: {node: '>=12'}
-
-  ansis@3.17.0:
-    resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==}
-    engines: {node: '>=14'}
-
-  any-promise@1.3.0:
-    resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-
-  anymatch@3.1.3:
-    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
-    engines: {node: '>= 8'}
-
-  aproba@2.0.0:
-    resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
-
-  are-docs-informative@0.0.2:
-    resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
-    engines: {node: '>=14'}
-
-  are-we-there-yet@2.0.0:
-    resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
-    engines: {node: '>=10'}
-    deprecated: This package is no longer supported.
-
-  arg@4.1.3:
-    resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
-
-  arg@5.0.2:
-    resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
-
-  argparse@1.0.10:
-    resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
-
-  argparse@2.0.1:
-    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
-  aria-query@5.3.0:
-    resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
-
-  aria-query@5.3.2:
-    resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
-    engines: {node: '>= 0.4'}
-
-  array-buffer-byte-length@1.0.2:
-    resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
-    engines: {node: '>= 0.4'}
-
-  array-includes@3.1.8:
-    resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
-    engines: {node: '>= 0.4'}
-
-  array.prototype.findlast@1.2.5:
-    resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
-    engines: {node: '>= 0.4'}
-
-  array.prototype.findlastindex@1.2.6:
-    resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
-    engines: {node: '>= 0.4'}
-
-  array.prototype.flat@1.3.3:
-    resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
-    engines: {node: '>= 0.4'}
-
-  array.prototype.flatmap@1.3.3:
-    resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
-    engines: {node: '>= 0.4'}
-
-  array.prototype.tosorted@1.1.4:
-    resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
-    engines: {node: '>= 0.4'}
-
-  arraybuffer.prototype.slice@1.0.4:
-    resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
-    engines: {node: '>= 0.4'}
-
-  asn1.js@4.10.1:
-    resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==}
-
-  assert@2.1.0:
-    resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
-
-  assertion-error@2.0.1:
-    resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
-    engines: {node: '>=12'}
-
-  ast-types-flow@0.0.8:
-    resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
-
-  ast-types@0.16.1:
-    resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
-    engines: {node: '>=4'}
-
-  astring@1.9.0:
-    resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
-    hasBin: true
-
-  async-function@1.0.0:
-    resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
-    engines: {node: '>= 0.4'}
-
-  async@3.2.6:
-    resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
-
-  autoprefixer@10.4.21:
-    resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
-    engines: {node: ^10 || ^12 || >=14}
-    hasBin: true
-    peerDependencies:
-      postcss: ^8.1.0
-
-  available-typed-arrays@1.0.7:
-    resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
-    engines: {node: '>= 0.4'}
-
-  axe-core@4.10.3:
-    resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==}
-    engines: {node: '>=4'}
-
-  axobject-query@4.1.0:
-    resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
-    engines: {node: '>= 0.4'}
-
-  babel-jest@29.7.0:
-    resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    peerDependencies:
-      '@babel/core': ^7.8.0
-
-  babel-loader@9.2.1:
-    resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==}
-    engines: {node: '>= 14.15.0'}
-    peerDependencies:
-      '@babel/core': ^7.12.0
-      webpack: '>=5'
-
-  babel-plugin-istanbul@6.1.1:
-    resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
-    engines: {node: '>=8'}
-
-  babel-plugin-jest-hoist@29.6.3:
-    resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  babel-plugin-polyfill-corejs2@0.4.13:
-    resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
-  babel-plugin-polyfill-corejs3@0.11.1:
-    resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
-  babel-plugin-polyfill-regenerator@0.6.4:
-    resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
-  babel-preset-current-node-syntax@1.1.0:
-    resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  babel-preset-jest@29.6.3:
-    resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  bail@2.0.2:
-    resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
-
-  balanced-match@1.0.2:
-    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
-  base64-js@1.5.1:
-    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
-  before-after-hook@3.0.2:
-    resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==}
-
-  better-opn@3.0.2:
-    resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
-    engines: {node: '>=12.0.0'}
-
-  big.js@5.2.2:
-    resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
-
-  binary-extensions@2.3.0:
-    resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
-    engines: {node: '>=8'}
-
-  bing-translate-api@4.0.2:
-    resolution: {integrity: sha512-JJ8XUehnxzOhHU91oy86xEtp8OOMjVEjCZJX042fKxoO19NNvxJ5omeCcxQNFoPbDqVpBJwqiGVquL0oPdQm1Q==}
-
-  birecord@0.1.1:
-    resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==}
-
-  bn.js@4.12.1:
-    resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==}
-
-  bn.js@5.2.1:
-    resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
-
-  boolbase@1.0.0:
-    resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
-
-  brace-expansion@1.1.11:
-    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-
-  brace-expansion@2.0.1:
-    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
-  braces@3.0.3:
-    resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
-    engines: {node: '>=8'}
-
-  brorand@1.1.0:
-    resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
-
-  browser-assert@1.2.1:
-    resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==}
-
-  browserify-aes@1.2.0:
-    resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
-
-  browserify-cipher@1.0.1:
-    resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
-
-  browserify-des@1.0.2:
-    resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
-
-  browserify-rsa@4.1.1:
-    resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==}
-    engines: {node: '>= 0.10'}
-
-  browserify-sign@4.2.3:
-    resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==}
-    engines: {node: '>= 0.12'}
-
-  browserify-zlib@0.2.0:
-    resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
-
-  browserslist@4.24.4:
-    resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
-
-  bser@2.1.1:
-    resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
-
-  buffer-from@1.1.2:
-    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-
-  buffer-xor@1.0.3:
-    resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
-
-  buffer@6.0.3:
-    resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
-  builtin-modules@3.3.0:
-    resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
-    engines: {node: '>=6'}
-
-  builtin-modules@5.0.0:
-    resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==}
-    engines: {node: '>=18.20'}
-
-  builtin-status-codes@3.0.0:
-    resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
-
-  busboy@1.6.0:
-    resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
-    engines: {node: '>=10.16.0'}
-
-  bytes@3.1.2:
-    resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
-    engines: {node: '>= 0.8'}
-
-  cac@6.7.14:
-    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
-    engines: {node: '>=8'}
-
-  cacheable-lookup@5.0.4:
-    resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
-    engines: {node: '>=10.6.0'}
-
-  cacheable-request@7.0.4:
-    resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==}
-    engines: {node: '>=8'}
-
-  call-bind-apply-helpers@1.0.2:
-    resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
-    engines: {node: '>= 0.4'}
-
-  call-bind@1.0.8:
-    resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
-    engines: {node: '>= 0.4'}
-
-  call-bound@1.0.4:
-    resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
-    engines: {node: '>= 0.4'}
-
-  callsites@3.1.0:
-    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
-    engines: {node: '>=6'}
-
-  camel-case@4.1.2:
-    resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
-
-  camelcase-css@2.0.1:
-    resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
-    engines: {node: '>= 6'}
-
-  camelcase@5.3.1:
-    resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
-    engines: {node: '>=6'}
-
-  camelcase@6.3.0:
-    resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
-    engines: {node: '>=10'}
-
-  caniuse-lite@1.0.30001713:
-    resolution: {integrity: sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==}
-
-  canvas@2.11.2:
-    resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==}
-    engines: {node: '>=6'}
-
-  case-sensitive-paths-webpack-plugin@2.4.0:
-    resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==}
-    engines: {node: '>=4'}
-
-  ccount@2.0.1:
-    resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
-
-  chai@5.2.0:
-    resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
-    engines: {node: '>=12'}
-
-  chalk@3.0.0:
-    resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
-    engines: {node: '>=8'}
-
-  chalk@4.1.1:
-    resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==}
-    engines: {node: '>=10'}
-
-  chalk@4.1.2:
-    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
-    engines: {node: '>=10'}
-
-  chalk@5.4.1:
-    resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
-    engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
-  char-regex@1.0.2:
-    resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
-    engines: {node: '>=10'}
-
-  character-entities-html4@2.1.0:
-    resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
-
-  character-entities-legacy@1.1.4:
-    resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
-
-  character-entities-legacy@3.0.0:
-    resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
-
-  character-entities@1.2.4:
-    resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
-
-  character-entities@2.0.2:
-    resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
-
-  character-reference-invalid@1.1.4:
-    resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
-
-  character-reference-invalid@2.0.1:
-    resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
-
-  check-error@2.1.1:
-    resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
-    engines: {node: '>= 16'}
-
-  chevrotain-allstar@0.3.1:
-    resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==}
-    peerDependencies:
-      chevrotain: ^11.0.0
-
-  chevrotain@11.0.3:
-    resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==}
-
-  chokidar@3.6.0:
-    resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
-    engines: {node: '>= 8.10.0'}
-
-  chokidar@4.0.3:
-    resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
-    engines: {node: '>= 14.16.0'}
-
-  chownr@2.0.0:
-    resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
-    engines: {node: '>=10'}
-
-  chromatic@11.28.0:
-    resolution: {integrity: sha512-Xy3907MXY5UP7LoMksmsT02xCUsoLZpcC6sRITjd+KiXBteOxPF7J+QsFqy/VzQCEN6fpt/R2bOIpE+PwPfcZA==}
-    hasBin: true
-    peerDependencies:
-      '@chromatic-com/cypress': ^0.*.* || ^1.0.0
-      '@chromatic-com/playwright': ^0.*.* || ^1.0.0
-    peerDependenciesMeta:
-      '@chromatic-com/cypress':
-        optional: true
-      '@chromatic-com/playwright':
-        optional: true
-
-  chrome-trace-event@1.0.4:
-    resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
-    engines: {node: '>=6.0'}
-
-  ci-info@3.9.0:
-    resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
-    engines: {node: '>=8'}
-
-  ci-info@4.2.0:
-    resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==}
-    engines: {node: '>=8'}
-
-  cipher-base@1.0.6:
-    resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==}
-    engines: {node: '>= 0.10'}
-
-  cjs-module-lexer@1.4.3:
-    resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
-
-  class-variance-authority@0.7.1:
-    resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
-
-  classcat@5.0.5:
-    resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==}
-
-  classnames@2.3.1:
-    resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==}
-
-  classnames@2.5.1:
-    resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
-
-  clean-css@5.3.3:
-    resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
-    engines: {node: '>= 10.0'}
-
-  clean-regexp@1.0.0:
-    resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
-    engines: {node: '>=4'}
-
-  cli-cursor@5.0.0:
-    resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
-    engines: {node: '>=18'}
-
-  cli-truncate@4.0.0:
-    resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
-    engines: {node: '>=18'}
-
-  client-only@0.0.1:
-    resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-
-  cliui@8.0.1:
-    resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
-    engines: {node: '>=12'}
-
-  clone-response@1.0.3:
-    resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
-
-  clsx@1.2.1:
-    resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==}
-    engines: {node: '>=6'}
-
-  clsx@2.1.1:
-    resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
-    engines: {node: '>=6'}
-
-  co@4.6.0:
-    resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
-    engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
-
-  code-inspector-core@0.18.3:
-    resolution: {integrity: sha512-60pT2cPoguMTUYdN1MMpjoPUnuF0ud/u7M2y+Vqit/bniLEit9dySEWAVxLU/Ukc5ILrDeLKEttc6fCMl9RUrA==}
-
-  code-inspector-plugin@0.18.3:
-    resolution: {integrity: sha512-d9oJXZUsnvfTaQDwFmDNA2F+AR/TXIxWg1rr8KGcEskltR2prbZsfuu1z70EAn4khpx0smfi/PvIIwNJQ7FAMw==}
-
-  collapse-white-space@2.1.0:
-    resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
-
-  collect-v8-coverage@1.0.2:
-    resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
-
-  color-convert@2.0.1:
-    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
-    engines: {node: '>=7.0.0'}
-
-  color-name@1.1.4:
-    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
-  color-string@1.9.1:
-    resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
-
-  color-support@1.1.3:
-    resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
-    hasBin: true
-
-  color@4.2.3:
-    resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
-    engines: {node: '>=12.5.0'}
-
-  colorette@2.0.20:
-    resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
-  comma-separated-tokens@1.0.8:
-    resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
-
-  comma-separated-tokens@2.0.3:
-    resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
-
-  commander@13.1.0:
-    resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
-    engines: {node: '>=18'}
-
-  commander@2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-
-  commander@4.1.1:
-    resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
-    engines: {node: '>= 6'}
-
-  commander@7.2.0:
-    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
-    engines: {node: '>= 10'}
-
-  commander@8.3.0:
-    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
-    engines: {node: '>= 12'}
-
-  comment-parser@1.4.1:
-    resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
-    engines: {node: '>= 12.0.0'}
-
-  common-path-prefix@3.0.0:
-    resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
-
-  commondir@1.0.1:
-    resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
-
-  compare-versions@6.1.1:
-    resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
-
-  concat-map@0.0.1:
-    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-
-  confbox@0.1.8:
-    resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
-  confbox@0.2.2:
-    resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
-
-  console-browserify@1.2.0:
-    resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
-
-  console-control-strings@1.1.0:
-    resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
-
-  constants-browserify@1.0.0:
-    resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
-
-  convert-source-map@1.9.0:
-    resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
-
-  convert-source-map@2.0.0:
-    resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
-  copy-to-clipboard@3.3.3:
-    resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
-
-  core-js-compat@3.41.0:
-    resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==}
-
-  core-js-pure@3.41.0:
-    resolution: {integrity: sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==}
-
-  core-util-is@1.0.3:
-    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-
-  cose-base@1.0.3:
-    resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
-
-  cose-base@2.2.0:
-    resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
-
-  cosmiconfig@7.1.0:
-    resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
-    engines: {node: '>=10'}
-
-  cosmiconfig@9.0.0:
-    resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
-    engines: {node: '>=14'}
-    peerDependencies:
-      typescript: '>=4.9.5'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  create-ecdh@4.0.4:
-    resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
-
-  create-hash@1.2.0:
-    resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
-
-  create-hmac@1.1.7:
-    resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
-
-  create-jest@29.7.0:
-    resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    hasBin: true
-
-  create-require@1.1.1:
-    resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
-
-  cross-env@7.0.3:
-    resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
-    engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
-    hasBin: true
-
-  cross-spawn@7.0.6:
-    resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
-    engines: {node: '>= 8'}
-
-  crypto-browserify@3.12.1:
-    resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==}
-    engines: {node: '>= 0.10'}
-
-  crypto-js@4.2.0:
-    resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
-
-  css-loader@6.11.0:
-    resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      '@rspack/core': 0.x || 1.x
-      webpack: ^5.0.0
-    peerDependenciesMeta:
-      '@rspack/core':
-        optional: true
-      webpack:
-        optional: true
-
-  css-select@4.3.0:
-    resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
-
-  css-what@6.1.0:
-    resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
-    engines: {node: '>= 6'}
-
-  css.escape@1.5.1:
-    resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
-
-  cssesc@3.0.0:
-    resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
-    engines: {node: '>=4'}
-    hasBin: true
-
-  csstype@3.1.3:
-    resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
-  cytoscape-cose-bilkent@4.1.0:
-    resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
-    peerDependencies:
-      cytoscape: ^3.2.0
-
-  cytoscape-fcose@2.2.0:
-    resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
-    peerDependencies:
-      cytoscape: ^3.2.0
-
-  cytoscape@3.31.2:
-    resolution: {integrity: sha512-/eOXg2uGdMdpGlEes5Sf6zE+jUG+05f3htFNQIxLxduOH/SsaUZiPBfAwP1btVIVzsnhiNOdi+hvDRLYfMZjGw==}
-    engines: {node: '>=0.10'}
-
-  d3-array@2.12.1:
-    resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
-
-  d3-array@3.2.4:
-    resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
-    engines: {node: '>=12'}
-
-  d3-axis@3.0.0:
-    resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
-    engines: {node: '>=12'}
-
-  d3-brush@3.0.0:
-    resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
-    engines: {node: '>=12'}
-
-  d3-chord@3.0.1:
-    resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
-    engines: {node: '>=12'}
-
-  d3-color@3.1.0:
-    resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
-    engines: {node: '>=12'}
-
-  d3-contour@4.0.2:
-    resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
-    engines: {node: '>=12'}
-
-  d3-delaunay@6.0.4:
-    resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
-    engines: {node: '>=12'}
-
-  d3-dispatch@3.0.1:
-    resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
-    engines: {node: '>=12'}
-
-  d3-drag@3.0.0:
-    resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
-    engines: {node: '>=12'}
-
-  d3-dsv@3.0.1:
-    resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  d3-ease@3.0.1:
-    resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
-    engines: {node: '>=12'}
-
-  d3-fetch@3.0.1:
-    resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
-    engines: {node: '>=12'}
-
-  d3-force@3.0.0:
-    resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
-    engines: {node: '>=12'}
-
-  d3-format@3.1.0:
-    resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==}
-    engines: {node: '>=12'}
-
-  d3-geo@3.1.1:
-    resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
-    engines: {node: '>=12'}
-
-  d3-hierarchy@3.1.2:
-    resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
-    engines: {node: '>=12'}
-
-  d3-interpolate@3.0.1:
-    resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
-    engines: {node: '>=12'}
-
-  d3-path@1.0.9:
-    resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
-
-  d3-path@3.1.0:
-    resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
-    engines: {node: '>=12'}
-
-  d3-polygon@3.0.1:
-    resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
-    engines: {node: '>=12'}
-
-  d3-quadtree@3.0.1:
-    resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
-    engines: {node: '>=12'}
-
-  d3-random@3.0.1:
-    resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
-    engines: {node: '>=12'}
-
-  d3-sankey@0.12.3:
-    resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
-
-  d3-scale-chromatic@3.1.0:
-    resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
-    engines: {node: '>=12'}
-
-  d3-scale@4.0.2:
-    resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
-    engines: {node: '>=12'}
-
-  d3-selection@3.0.0:
-    resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
-    engines: {node: '>=12'}
-
-  d3-shape@1.3.7:
-    resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
-
-  d3-shape@3.2.0:
-    resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
-    engines: {node: '>=12'}
-
-  d3-time-format@4.1.0:
-    resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
-    engines: {node: '>=12'}
-
-  d3-time@3.1.0:
-    resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
-    engines: {node: '>=12'}
-
-  d3-timer@3.0.1:
-    resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
-    engines: {node: '>=12'}
-
-  d3-transition@3.0.1:
-    resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      d3-selection: 2 - 3
-
-  d3-zoom@3.0.0:
-    resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
-    engines: {node: '>=12'}
-
-  d3@7.9.0:
-    resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
-    engines: {node: '>=12'}
-
-  dagre-d3-es@7.0.11:
-    resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==}
-
-  damerau-levenshtein@1.0.8:
-    resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
-
-  data-view-buffer@1.0.2:
-    resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
-    engines: {node: '>= 0.4'}
-
-  data-view-byte-length@1.0.2:
-    resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
-    engines: {node: '>= 0.4'}
-
-  data-view-byte-offset@1.0.1:
-    resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
-    engines: {node: '>= 0.4'}
-
-  dayjs@1.11.13:
-    resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
-
-  debug@3.2.7:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-
-  debug@4.4.0:
-    resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-
-  decimal.js@10.5.0:
-    resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
-
-  decode-formdata@0.9.0:
-    resolution: {integrity: sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw==}
-
-  decode-named-character-reference@1.1.0:
-    resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==}
-
-  decompress-response@4.2.1:
-    resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==}
-    engines: {node: '>=8'}
-
-  decompress-response@6.0.0:
-    resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
-    engines: {node: '>=10'}
-
-  dedent@0.7.0:
-    resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
-
-  dedent@1.5.3:
-    resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
-    peerDependencies:
-      babel-plugin-macros: ^3.1.0
-    peerDependenciesMeta:
-      babel-plugin-macros:
-        optional: true
-
-  deep-eql@5.0.2:
-    resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
-    engines: {node: '>=6'}
-
-  deep-is@0.1.4:
-    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-
-  deepmerge@4.3.1:
-    resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
-    engines: {node: '>=0.10.0'}
-
-  defer-to-connect@2.0.1:
-    resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
-    engines: {node: '>=10'}
-
-  define-data-property@1.1.4:
-    resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
-    engines: {node: '>= 0.4'}
-
-  define-lazy-prop@2.0.0:
-    resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
-    engines: {node: '>=8'}
-
-  define-properties@1.2.1:
-    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
-    engines: {node: '>= 0.4'}
-
-  delaunator@5.0.1:
-    resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
-
-  delegates@1.0.0:
-    resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
-
-  dequal@2.0.3:
-    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
-    engines: {node: '>=6'}
-
-  des.js@1.1.0:
-    resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==}
-
-  detect-libc@1.0.3:
-    resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
-    engines: {node: '>=0.10'}
-    hasBin: true
-
-  detect-libc@2.0.3:
-    resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
-    engines: {node: '>=8'}
-
-  detect-newline@3.1.0:
-    resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
-    engines: {node: '>=8'}
-
-  devalue@5.1.1:
-    resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
-
-  devlop@1.1.0:
-    resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
-
-  didyoumean@1.2.2:
-    resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
-
-  diff-sequences@29.6.3:
-    resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  diff@4.0.2:
-    resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
-    engines: {node: '>=0.3.1'}
-
-  diffie-hellman@5.0.3:
-    resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
-
-  dlv@1.1.3:
-    resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
-
-  doctrine@2.1.0:
-    resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
-    engines: {node: '>=0.10.0'}
-
-  doctrine@3.0.0:
-    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
-    engines: {node: '>=6.0.0'}
-
-  dom-accessibility-api@0.5.16:
-    resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
-
-  dom-accessibility-api@0.6.3:
-    resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
-
-  dom-converter@0.2.0:
-    resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
-
-  dom-serializer@1.4.1:
-    resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
-
-  domain-browser@4.23.0:
-    resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==}
-    engines: {node: '>=10'}
-
-  domelementtype@2.3.0:
-    resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
-
-  domhandler@4.3.1:
-    resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
-    engines: {node: '>= 4'}
-
-  dompurify@3.2.5:
-    resolution: {integrity: sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==}
-
-  domutils@2.8.0:
-    resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
-
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
-  dotenv@16.5.0:
-    resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
-    engines: {node: '>=12'}
-
-  dunder-proto@1.0.1:
-    resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
-    engines: {node: '>= 0.4'}
-
-  echarts-for-react@3.0.2:
-    resolution: {integrity: sha512-DRwIiTzx8JfwPOVgGttDytBqdp5VzCSyMRIxubgU/g2n9y3VLUmF2FK7Icmg/sNVkv4+rktmrLN9w22U2yy3fA==}
-    peerDependencies:
-      echarts: ^3.0.0 || ^4.0.0 || ^5.0.0
-      react: ^15.0.0 || >=16.0.0
-
-  echarts@5.6.0:
-    resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==}
-
-  electron-to-chromium@1.5.136:
-    resolution: {integrity: sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==}
-
-  elkjs@0.9.3:
-    resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==}
-
-  elliptic@6.6.1:
-    resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==}
-
-  emittery@0.13.1:
-    resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
-    engines: {node: '>=12'}
-
-  emoji-mart@5.6.0:
-    resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==}
-
-  emoji-regex@8.0.0:
-    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
-  emoji-regex@9.2.2:
-    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
-  emojis-list@3.0.0:
-    resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
-    engines: {node: '>= 4'}
-
-  end-of-stream@1.4.4:
-    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
-
-  endent@2.1.0:
-    resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==}
-
-  enhanced-resolve@5.18.1:
-    resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
-    engines: {node: '>=10.13.0'}
-
-  entities@2.2.0:
-    resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
-
-  entities@4.5.0:
-    resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
-    engines: {node: '>=0.12'}
-
-  env-paths@2.2.1:
-    resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
-    engines: {node: '>=6'}
-
-  environment@1.1.0:
-    resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
-    engines: {node: '>=18'}
-
-  error-ex@1.3.2:
-    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
-
-  error-stack-parser@2.1.4:
-    resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
-
-  es-abstract@1.23.9:
-    resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
-    engines: {node: '>= 0.4'}
-
-  es-define-property@1.0.1:
-    resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
-    engines: {node: '>= 0.4'}
-
-  es-errors@1.3.0:
-    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
-    engines: {node: '>= 0.4'}
-
-  es-iterator-helpers@1.2.1:
-    resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
-    engines: {node: '>= 0.4'}
-
-  es-module-lexer@1.6.0:
-    resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
-
-  es-object-atoms@1.1.1:
-    resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
-    engines: {node: '>= 0.4'}
-
-  es-set-tostringtag@2.1.0:
-    resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
-    engines: {node: '>= 0.4'}
-
-  es-shim-unscopables@1.1.0:
-    resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
-    engines: {node: '>= 0.4'}
-
-  es-to-primitive@1.3.0:
-    resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
-    engines: {node: '>= 0.4'}
-
-  esast-util-from-estree@2.0.0:
-    resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
-
-  esast-util-from-js@2.0.1:
-    resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
-
-  esbuild-code-inspector-plugin@0.18.3:
-    resolution: {integrity: sha512-FaPt5eFMtW1oXMWqAcqfAJByNagP1V/R9dwDDLQO29JmryMF35+frskTqy+G53whmTaVi19+TCrFqhNbMZH5ZQ==}
-
-  esbuild-register@3.6.0:
-    resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
-    peerDependencies:
-      esbuild: 0.25.0
-
-  esbuild@0.25.0:
-    resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==}
-    engines: {node: '>=18'}
-    hasBin: true
-
-  esbuild@0.25.2:
-    resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==}
-    engines: {node: '>=18'}
-    hasBin: true
-
-  escalade@3.2.0:
-    resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
-    engines: {node: '>=6'}
-
-  escape-string-regexp@1.0.5:
-    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
-    engines: {node: '>=0.8.0'}
-
-  escape-string-regexp@2.0.0:
-    resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
-    engines: {node: '>=8'}
-
-  escape-string-regexp@4.0.0:
-    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
-    engines: {node: '>=10'}
-
-  escape-string-regexp@5.0.0:
-    resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
-    engines: {node: '>=12'}
-
-  eslint-compat-utils@0.5.1:
-    resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      eslint: '>=6.0.0'
-
-  eslint-compat-utils@0.6.5:
-    resolution: {integrity: sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      eslint: '>=6.0.0'
-
-  eslint-config-flat-gitignore@2.1.0:
-    resolution: {integrity: sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==}
-    peerDependencies:
-      eslint: ^9.5.0
-
-  eslint-config-next@15.3.0:
-    resolution: {integrity: sha512-+Z3M1W9MnJjX3W4vI9CHfKlEyhTWOUHvc5dB89FyRnzPsUkJlLWZOi8+1pInuVcSztSM4MwBFB0hIHf4Rbwu4g==}
-    peerDependencies:
-      eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
-      typescript: '>=3.3.1'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  eslint-flat-config-utils@2.0.1:
-    resolution: {integrity: sha512-brf0eAgQ6JlKj3bKfOTuuI7VcCZvi8ZCD1MMTVoEvS/d38j8cByZViLFALH/36+eqB17ukmfmKq3bWzGvizejA==}
-
-  eslint-import-resolver-node@0.3.9:
-    resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
-
-  eslint-import-resolver-typescript@3.10.0:
-    resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '*'
-      eslint-plugin-import: '*'
-      eslint-plugin-import-x: '*'
-    peerDependenciesMeta:
-      eslint-plugin-import:
-        optional: true
-      eslint-plugin-import-x:
-        optional: true
-
-  eslint-json-compat-utils@0.2.1:
-    resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      '@eslint/json': '*'
-      eslint: '*'
-      jsonc-eslint-parser: ^2.4.0
-    peerDependenciesMeta:
-      '@eslint/json':
-        optional: true
-
-  eslint-merge-processors@2.0.0:
-    resolution: {integrity: sha512-sUuhSf3IrJdGooquEUB5TNpGNpBoQccbnaLHsb1XkBLUPPqCNivCpY05ZcpCOiV9uHwO2yxXEWVczVclzMxYlA==}
-    peerDependencies:
-      eslint: '*'
-
-  eslint-module-utils@2.12.0:
-    resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: '*'
-      eslint-import-resolver-node: '*'
-      eslint-import-resolver-typescript: '*'
-      eslint-import-resolver-webpack: '*'
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
-      eslint:
-        optional: true
-      eslint-import-resolver-node:
-        optional: true
-      eslint-import-resolver-typescript:
-        optional: true
-      eslint-import-resolver-webpack:
-        optional: true
-
-  eslint-plugin-antfu@3.1.1:
-    resolution: {integrity: sha512-7Q+NhwLfHJFvopI2HBZbSxWXngTwBLKxW1AGXLr2lEGxcEIK/AsDs8pn8fvIizl5aZjBbVbVK5ujmMpBe4Tvdg==}
-    peerDependencies:
-      eslint: '*'
-
-  eslint-plugin-command@3.2.0:
-    resolution: {integrity: sha512-PSDOB9k7Wd57pp4HD/l3C1D93pKX8/wQo0kWDI4q6/UpgrfMTyNsavklipgiZqbXl1+VBABY1buCcQE5LDpg5g==}
-    peerDependencies:
-      eslint: '*'
-
-  eslint-plugin-es-x@7.8.0:
-    resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '>=8'
-
-  eslint-plugin-import-x@4.10.2:
-    resolution: {integrity: sha512-jO3Y6+zBUyTX5MVbbLSzoz6fe65t+WEBaXStRLM4EBhZWbuSwAH3cLwARtM0Yp4zRtZGp9sL2zzK7G9JkHR8LA==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-
-  eslint-plugin-import@2.31.0:
-    resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
-
-  eslint-plugin-jsdoc@50.6.9:
-    resolution: {integrity: sha512-7/nHu3FWD4QRG8tCVqcv+BfFtctUtEDWc29oeDXB4bwmDM2/r1ndl14AG/2DUntdqH7qmpvdemJKwb3R97/QEw==}
-    engines: {node: '>=18'}
-    peerDependencies:
-      eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
-
-  eslint-plugin-jsonc@2.20.0:
-    resolution: {integrity: sha512-FRgCn9Hzk5eKboCbVMrr9QrhM0eO4G+WKH8IFXoaeqhM/2kuWzbStJn4kkr0VWL8J5H8RYZF+Aoam1vlBaZVkw==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '>=6.0.0'
-
-  eslint-plugin-jsx-a11y@6.10.2:
-    resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
-
-  eslint-plugin-n@17.17.0:
-    resolution: {integrity: sha512-2VvPK7Mo73z1rDFb6pTvkH6kFibAmnTubFq5l83vePxu0WiY1s0LOtj2WHb6Sa40R3w4mnh8GFYbHBQyMlotKw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: '>=8.23.0'
-
-  eslint-plugin-no-only-tests@3.3.0:
-    resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==}
-    engines: {node: '>=5.0.0'}
-
-  eslint-plugin-perfectionist@4.11.0:
-    resolution: {integrity: sha512-5s+ehXydnLPQpLDj5mJ0CnYj2fQe6v6gKA3tS+FZVBLzwMOh8skH+l+1Gni08rG0SdEcNhJyjQp/mEkDYK8czw==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-    peerDependencies:
-      eslint: '>=8.45.0'
-
-  eslint-plugin-pnpm@0.3.1:
-    resolution: {integrity: sha512-vi5iHoELIAlBbX4AW8ZGzU3tUnfxuXhC/NKo3qRcI5o9igbz6zJUqSlQ03bPeMqWIGTPatZnbWsNR1RnlNERNQ==}
-    peerDependencies:
-      eslint: ^9.0.0
-
-  eslint-plugin-react-debug@1.45.0:
-    resolution: {integrity: sha512-mHDc3lPjHmqsD5WhUD5hAbGiNaJ1WqjB8+1zkJzLLBUWoG7t1+qhJnyWX6e9g5kwjGnRzxevywf5jN+/OPpSNg==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: ^4.9.5 || ^5.3.3
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  eslint-plugin-react-dom@1.45.0:
-    resolution: {integrity: sha512-4EHuXVymURWLNEKbGc79iJb5lI3lUOlPt1R0E7VlJdi7WLNXHYwUoTHt3+3v6Ejo2K5PYUNy3QHQyQ5c3TeixA==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: ^4.9.5 || ^5.3.3
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  eslint-plugin-react-hooks-extra@1.45.0:
-    resolution: {integrity: sha512-2vnd1O+OMQJlLyOhHQhC6joj6qCmv4qsdWJ2KDluH13nhYpU5qdTrgELQB2LdJPAmxvjRmttyLwNtXyttvvFZA==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: ^4.9.5 || ^5.3.3
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  eslint-plugin-react-hooks@5.2.0:
-    resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
-
-  eslint-plugin-react-naming-convention@1.45.0:
-    resolution: {integrity: sha512-HXpBRWUZzUdWBAV1Zs2C5536GO2iT8vVrqlFw5YuHxdzhbeCmJ5/r/toCcVcyIBVA3m6V/NW7qOfMa2OzKW8HA==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: ^4.9.5 || ^5.3.3
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  eslint-plugin-react-refresh@0.4.19:
-    resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==}
-    peerDependencies:
-      eslint: '>=8.40'
-
-  eslint-plugin-react-web-api@1.45.0:
-    resolution: {integrity: sha512-DJExa0sjB7WfNC6t2xph3mQi3pFt05YoCD4J0/XkZHuNaUscLEXRo9fq3RbP/99h98PS21Q5xSEw3qtFs/BBFw==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: ^4.9.5 || ^5.3.3
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  eslint-plugin-react-x@1.45.0:
-    resolution: {integrity: sha512-pzt3zoNk5+y5ZKH0BaE1ntISu/S1ir4PJAEwSbqvkd6BJNy+4lbVMynhlMvsX5gllrhi0kt/FBl/zvtZrVBXaw==}
-    engines: {bun: '>=1.0.15', node: '>=18.18.0'}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      ts-api-utils: ^2.1.0
-      typescript: ^4.9.5 || ^5.3.3
-    peerDependenciesMeta:
-      ts-api-utils:
-        optional: true
-      typescript:
-        optional: true
-
-  eslint-plugin-react@7.37.5:
-    resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
-
-  eslint-plugin-regexp@2.7.0:
-    resolution: {integrity: sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==}
-    engines: {node: ^18 || >=20}
-    peerDependencies:
-      eslint: '>=8.44.0'
-
-  eslint-plugin-sonarjs@3.0.2:
-    resolution: {integrity: sha512-LxjbfwI7ypENeTmGyKmDyNux3COSkMi7H/6Cal5StSLQ6edf0naP45SZR43OclaNR7WfhVTZdhOn63q3/Y6puQ==}
-    peerDependencies:
-      eslint: ^8.0.0 || ^9.0.0
-
-  eslint-plugin-storybook@0.11.6:
-    resolution: {integrity: sha512-3WodYD6Bs9ACqnB+TP2TuLh774c/nacAjxSKOP9bHJ2c8rf+nrhocxjjeAWNmO9IPkFIzTKlcl0vNXI2yYpVOw==}
-    engines: {node: '>= 18'}
-    peerDependencies:
-      eslint: '>=8'
-
-  eslint-plugin-tailwindcss@3.18.0:
-    resolution: {integrity: sha512-PQDU4ZMzFH0eb2DrfHPpbgo87Zgg2EXSMOj1NSfzdZm+aJzpuwGerfowMIaVehSREEa0idbf/eoNYAOHSJoDAQ==}
-    engines: {node: '>=18.12.0'}
-    peerDependencies:
-      tailwindcss: ^3.4.0
-
-  eslint-plugin-toml@0.12.0:
-    resolution: {integrity: sha512-+/wVObA9DVhwZB1nG83D2OAQRrcQZXy+drqUnFJKymqnmbnbfg/UPmEMCKrJNcEboUGxUjYrJlgy+/Y930mURQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '>=6.0.0'
-
-  eslint-plugin-unicorn@58.0.0:
-    resolution: {integrity: sha512-fc3iaxCm9chBWOHPVjn+Czb/wHS0D2Mko7wkOdobqo9R2bbFObc4LyZaLTNy0mhZOP84nKkLhTUQxlLOZ7EjKw==}
-    engines: {node: ^18.20.0 || ^20.10.0 || >=21.0.0}
-    peerDependencies:
-      eslint: '>=9.22.0'
-
-  eslint-plugin-unused-imports@4.1.4:
-    resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==}
-    peerDependencies:
-      '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0
-      eslint: ^9.0.0 || ^8.0.0
-    peerDependenciesMeta:
-      '@typescript-eslint/eslint-plugin':
-        optional: true
-
-  eslint-plugin-vue@10.0.0:
-    resolution: {integrity: sha512-XKckedtajqwmaX6u1VnECmZ6xJt+YvlmMzBPZd+/sI3ub2lpYZyFnsyWo7c3nMOQKJQudeyk1lw/JxdgeKT64w==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      vue-eslint-parser: ^10.0.0
-
-  eslint-plugin-yml@1.17.0:
-    resolution: {integrity: sha512-Q3LXFRnNpGYAK/PM0BY1Xs0IY1xTLfM0kC986nNQkx1l8tOGz+YS50N6wXkAJkrBpeUN9OxEMB7QJ+9MTDAqIQ==}
-    engines: {node: ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '>=6.0.0'
-
-  eslint-processor-vue-blocks@2.0.0:
-    resolution: {integrity: sha512-u4W0CJwGoWY3bjXAuFpc/b6eK3NQEI8MoeW7ritKj3G3z/WtHrKjkqf+wk8mPEy5rlMGS+k6AZYOw2XBoN/02Q==}
-    peerDependencies:
-      '@vue/compiler-sfc': ^3.3.0
-      eslint: '>=9.0.0'
-
-  eslint-scope@5.1.1:
-    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
-    engines: {node: '>=8.0.0'}
-
-  eslint-scope@8.3.0:
-    resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  eslint-visitor-keys@3.4.3:
-    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  eslint-visitor-keys@4.2.0:
-    resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  eslint@9.24.0:
-    resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    hasBin: true
-    peerDependencies:
-      jiti: '*'
-    peerDependenciesMeta:
-      jiti:
-        optional: true
-
-  espree@10.3.0:
-    resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
-  espree@9.6.1:
-    resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  esprima@4.0.1:
-    resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
-    engines: {node: '>=4'}
-    hasBin: true
-
-  esquery@1.6.0:
-    resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
-    engines: {node: '>=0.10'}
-
-  esrecurse@4.3.0:
-    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
-    engines: {node: '>=4.0'}
-
-  estraverse@4.3.0:
-    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
-    engines: {node: '>=4.0'}
-
-  estraverse@5.3.0:
-    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
-    engines: {node: '>=4.0'}
-
-  estree-util-attach-comments@3.0.0:
-    resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
-
-  estree-util-build-jsx@3.0.1:
-    resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
-
-  estree-util-is-identifier-name@3.0.0:
-    resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
-
-  estree-util-scope@1.0.0:
-    resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
-
-  estree-util-to-js@2.0.0:
-    resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
-
-  estree-util-visit@2.0.0:
-    resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
-
-  estree-walker@2.0.2:
-    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-
-  estree-walker@3.0.3:
-    resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
-  esutils@2.0.3:
-    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
-    engines: {node: '>=0.10.0'}
-
-  event-target-shim@5.0.1:
-    resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
-    engines: {node: '>=6'}
-
-  eventemitter3@5.0.1:
-    resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
-
-  events@3.3.0:
-    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
-    engines: {node: '>=0.8.x'}
-
-  evp_bytestokey@1.0.3:
-    resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
-
-  execa@5.1.1:
-    resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
-    engines: {node: '>=10'}
-
-  execa@8.0.1:
-    resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
-    engines: {node: '>=16.17'}
-
-  exit@0.1.2:
-    resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
-    engines: {node: '>= 0.8.0'}
-
-  expect-type@1.2.1:
-    resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
-    engines: {node: '>=12.0.0'}
-
-  expect@29.7.0:
-    resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  exsolve@1.0.4:
-    resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
-
-  extend@3.0.2:
-    resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
-
-  fast-content-type-parse@2.0.1:
-    resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==}
-
-  fast-deep-equal@3.1.3:
-    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
-  fast-glob@3.3.1:
-    resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
-    engines: {node: '>=8.6.0'}
-
-  fast-glob@3.3.3:
-    resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
-    engines: {node: '>=8.6.0'}
-
-  fast-json-parse@1.0.3:
-    resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==}
-
-  fast-json-stable-stringify@2.1.0:
-    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
-  fast-levenshtein@2.0.6:
-    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-
-  fast-uri@3.0.6:
-    resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
-
-  fastq@1.19.1:
-    resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
-
-  fault@1.0.4:
-    resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
-
-  fb-watchman@2.0.2:
-    resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
-
-  fdir@6.4.3:
-    resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
-    peerDependencies:
-      picomatch: ^3 || ^4
-    peerDependenciesMeta:
-      picomatch:
-        optional: true
-
-  file-entry-cache@8.0.0:
-    resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
-    engines: {node: '>=16.0.0'}
-
-  filesize@10.1.6:
-    resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==}
-    engines: {node: '>= 10.4.0'}
-
-  fill-range@7.1.1:
-    resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
-    engines: {node: '>=8'}
-
-  filter-obj@2.0.2:
-    resolution: {integrity: sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==}
-    engines: {node: '>=8'}
-
-  find-cache-dir@3.3.2:
-    resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
-    engines: {node: '>=8'}
-
-  find-cache-dir@4.0.0:
-    resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==}
-    engines: {node: '>=14.16'}
-
-  find-up-simple@1.0.1:
-    resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
-    engines: {node: '>=18'}
-
-  find-up@4.1.0:
-    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
-    engines: {node: '>=8'}
-
-  find-up@5.0.0:
-    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
-    engines: {node: '>=10'}
-
-  find-up@6.3.0:
-    resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  flat-cache@3.2.0:
-    resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
-    engines: {node: ^10.12.0 || >=12.0.0}
-
-  flat-cache@4.0.1:
-    resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
-    engines: {node: '>=16'}
-
-  flatted@3.3.3:
-    resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
-
-  for-each@0.3.5:
-    resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
-    engines: {node: '>= 0.4'}
-
-  foreground-child@3.3.1:
-    resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
-    engines: {node: '>=14'}
-
-  fork-ts-checker-webpack-plugin@8.0.0:
-    resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==}
-    engines: {node: '>=12.13.0', yarn: '>=1.0.0'}
-    peerDependencies:
-      typescript: '>3.6.0'
-      webpack: ^5.11.0
-
-  format@0.2.2:
-    resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
-    engines: {node: '>=0.4.x'}
-
-  fraction.js@4.3.7:
-    resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
-
-  fs-extra@10.1.0:
-    resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
-    engines: {node: '>=12'}
-
-  fs-minipass@2.1.0:
-    resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
-    engines: {node: '>= 8'}
-
-  fs-monkey@1.0.6:
-    resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==}
-
-  fs.realpath@1.0.0:
-    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
-
-  fsevents@2.3.3:
-    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
-    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-    os: [darwin]
-
-  function-bind@1.1.2:
-    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
-  function.prototype.name@1.1.8:
-    resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
-    engines: {node: '>= 0.4'}
-
-  functional-red-black-tree@1.0.1:
-    resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
-
-  functions-have-names@1.2.3:
-    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-
-  gauge@3.0.2:
-    resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
-    engines: {node: '>=10'}
-    deprecated: This package is no longer supported.
-
-  gensync@1.0.0-beta.2:
-    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
-    engines: {node: '>=6.9.0'}
-
-  get-caller-file@2.0.5:
-    resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
-    engines: {node: 6.* || 8.* || >= 10.*}
-
-  get-east-asian-width@1.3.0:
-    resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
-    engines: {node: '>=18'}
-
-  get-intrinsic@1.3.0:
-    resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
-    engines: {node: '>= 0.4'}
-
-  get-package-type@0.1.0:
-    resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
-    engines: {node: '>=8.0.0'}
-
-  get-proto@1.0.1:
-    resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
-    engines: {node: '>= 0.4'}
-
-  get-stream@5.2.0:
-    resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
-    engines: {node: '>=8'}
-
-  get-stream@6.0.1:
-    resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
-    engines: {node: '>=10'}
-
-  get-stream@8.0.1:
-    resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
-    engines: {node: '>=16'}
-
-  get-symbol-description@1.1.0:
-    resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
-    engines: {node: '>= 0.4'}
-
-  get-tsconfig@4.10.0:
-    resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}
-
-  glob-parent@5.1.2:
-    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
-    engines: {node: '>= 6'}
-
-  glob-parent@6.0.2:
-    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
-    engines: {node: '>=10.13.0'}
-
-  glob-to-regexp@0.4.1:
-    resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
-
-  glob@10.4.5:
-    resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
-    hasBin: true
-
-  glob@7.2.3:
-    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
-    deprecated: Glob versions prior to v9 are no longer supported
-
-  globals@11.12.0:
-    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
-    engines: {node: '>=4'}
-
-  globals@14.0.0:
-    resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
-    engines: {node: '>=18'}
-
-  globals@15.15.0:
-    resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
-    engines: {node: '>=18'}
-
-  globals@16.0.0:
-    resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==}
-    engines: {node: '>=18'}
-
-  globalthis@1.0.4:
-    resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
-    engines: {node: '>= 0.4'}
-
-  gopd@1.2.0:
-    resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
-    engines: {node: '>= 0.4'}
-
-  got@11.8.6:
-    resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==}
-    engines: {node: '>=10.19.0'}
-
-  graceful-fs@4.2.11:
-    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
-  graphemer@1.4.0:
-    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
-  hachure-fill@0.5.2:
-    resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
-
-  happy-dom@17.4.4:
-    resolution: {integrity: sha512-/Pb0ctk3HTZ5xEL3BZ0hK1AqDSAUuRQitOmROPHhfUYEWpmTImwfD8vFDGADmMAX0JYgbcgxWoLFKtsWhcpuVA==}
-    engines: {node: '>=18.0.0'}
-
-  has-bigints@1.1.0:
-    resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
-    engines: {node: '>= 0.4'}
-
-  has-flag@4.0.0:
-    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
-    engines: {node: '>=8'}
-
-  has-property-descriptors@1.0.2:
-    resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
-
-  has-proto@1.2.0:
-    resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
-    engines: {node: '>= 0.4'}
-
-  has-symbols@1.1.0:
-    resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
-    engines: {node: '>= 0.4'}
-
-  has-tostringtag@1.0.2:
-    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
-    engines: {node: '>= 0.4'}
-
-  has-unicode@2.0.1:
-    resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
-
-  hash-base@3.0.5:
-    resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==}
-    engines: {node: '>= 0.10'}
-
-  hash.js@1.1.7:
-    resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
-
-  hasown@2.0.2:
-    resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
-    engines: {node: '>= 0.4'}
-
-  hast-util-from-dom@5.0.1:
-    resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==}
-
-  hast-util-from-html-isomorphic@2.0.0:
-    resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==}
-
-  hast-util-from-html@2.0.3:
-    resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
-
-  hast-util-from-parse5@8.0.3:
-    resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
-
-  hast-util-is-element@3.0.0:
-    resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
-
-  hast-util-parse-selector@2.2.5:
-    resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
-
-  hast-util-parse-selector@4.0.0:
-    resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
-
-  hast-util-raw@9.1.0:
-    resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==}
-
-  hast-util-to-estree@3.1.3:
-    resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
-
-  hast-util-to-jsx-runtime@2.3.6:
-    resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
-
-  hast-util-to-parse5@8.0.0:
-    resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
-
-  hast-util-to-text@4.0.2:
-    resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
-
-  hast-util-whitespace@3.0.0:
-    resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
-
-  hastscript@6.0.0:
-    resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
-
-  hastscript@9.0.1:
-    resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
-
-  he@1.2.0:
-    resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
-    hasBin: true
-
-  highlight.js@10.7.3:
-    resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
-
-  highlightjs-vue@1.0.0:
-    resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==}
-
-  hmac-drbg@1.0.1:
-    resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
-
-  hoist-non-react-statics@3.3.2:
-    resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
-
-  hosted-git-info@7.0.2:
-    resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-
-  html-entities@2.6.0:
-    resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
-
-  html-escaper@2.0.2:
-    resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
-
-  html-minifier-terser@6.1.0:
-    resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  html-parse-stringify@3.0.1:
-    resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
-
-  html-to-image@1.11.11:
-    resolution: {integrity: sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==}
-
-  html-url-attributes@3.0.1:
-    resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
-
-  html-void-elements@3.0.0:
-    resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
-
-  html-webpack-plugin@5.6.3:
-    resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==}
-    engines: {node: '>=10.13.0'}
-    peerDependencies:
-      '@rspack/core': 0.x || 1.x
-      webpack: ^5.20.0
-    peerDependenciesMeta:
-      '@rspack/core':
-        optional: true
-      webpack:
-        optional: true
-
-  htmlparser2@6.1.0:
-    resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
-
-  http-cache-semantics@4.1.1:
-    resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
-
-  http2-wrapper@1.0.3:
-    resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
-    engines: {node: '>=10.19.0'}
-
-  https-browserify@1.0.0:
-    resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==}
-
-  https-proxy-agent@5.0.1:
-    resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
-    engines: {node: '>= 6'}
-
-  human-signals@2.1.0:
-    resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
-    engines: {node: '>=10.17.0'}
-
-  human-signals@5.0.0:
-    resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
-    engines: {node: '>=16.17.0'}
-
-  husky@9.1.7:
-    resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
-    engines: {node: '>=18'}
-    hasBin: true
-
-  i18next-resources-to-backend@1.2.1:
-    resolution: {integrity: sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw==}
-
-  i18next@23.16.8:
-    resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==}
-
-  iconv-lite@0.6.3:
-    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
-    engines: {node: '>=0.10.0'}
-
-  icss-utils@5.1.0:
-    resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  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'}
-
-  image-size@1.2.1:
-    resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==}
-    engines: {node: '>=16.x'}
-    hasBin: true
-
-  immer@9.0.21:
-    resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
-
-  immutable@5.1.1:
-    resolution: {integrity: sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==}
-
-  import-fresh@3.3.1:
-    resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
-    engines: {node: '>=6'}
-
-  import-local@3.2.0:
-    resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
-    engines: {node: '>=8'}
-    hasBin: true
-
-  imurmurhash@0.1.4:
-    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
-    engines: {node: '>=0.8.19'}
-
-  indent-string@4.0.0:
-    resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
-    engines: {node: '>=8'}
-
-  indent-string@5.0.0:
-    resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
-    engines: {node: '>=12'}
-
-  index-to-position@1.1.0:
-    resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==}
-    engines: {node: '>=18'}
-
-  inflight@1.0.6:
-    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
-    deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
-
-  inherits@2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
-  inline-style-parser@0.2.4:
-    resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
-
-  internal-slot@1.1.0:
-    resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
-    engines: {node: '>= 0.4'}
-
-  internmap@1.0.1:
-    resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
-
-  internmap@2.0.3:
-    resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
-    engines: {node: '>=12'}
-
-  intersection-observer@0.12.2:
-    resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
-
-  is-alphabetical@1.0.4:
-    resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
-
-  is-alphabetical@2.0.1:
-    resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
-
-  is-alphanumerical@1.0.4:
-    resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
-
-  is-alphanumerical@2.0.1:
-    resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
-
-  is-arguments@1.2.0:
-    resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
-    engines: {node: '>= 0.4'}
-
-  is-array-buffer@3.0.5:
-    resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
-    engines: {node: '>= 0.4'}
-
-  is-arrayish@0.2.1:
-    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
-
-  is-arrayish@0.3.2:
-    resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
-
-  is-async-function@2.1.1:
-    resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
-    engines: {node: '>= 0.4'}
-
-  is-bigint@1.1.0:
-    resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
-    engines: {node: '>= 0.4'}
-
-  is-binary-path@2.1.0:
-    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
-    engines: {node: '>=8'}
-
-  is-boolean-object@1.2.2:
-    resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
-    engines: {node: '>= 0.4'}
-
-  is-builtin-module@5.0.0:
-    resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
-    engines: {node: '>=18.20'}
-
-  is-bun-module@2.0.0:
-    resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
-
-  is-callable@1.2.7:
-    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
-    engines: {node: '>= 0.4'}
-
-  is-core-module@2.16.1:
-    resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
-    engines: {node: '>= 0.4'}
-
-  is-data-view@1.0.2:
-    resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
-    engines: {node: '>= 0.4'}
-
-  is-date-object@1.1.0:
-    resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
-    engines: {node: '>= 0.4'}
-
-  is-decimal@1.0.4:
-    resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
-
-  is-decimal@2.0.1:
-    resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
-
-  is-docker@2.2.1:
-    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
-    engines: {node: '>=8'}
-    hasBin: true
-
-  is-extglob@2.1.1:
-    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
-    engines: {node: '>=0.10.0'}
-
-  is-finalizationregistry@1.1.1:
-    resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
-    engines: {node: '>= 0.4'}
-
-  is-fullwidth-code-point@3.0.0:
-    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
-    engines: {node: '>=8'}
-
-  is-fullwidth-code-point@4.0.0:
-    resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
-    engines: {node: '>=12'}
-
-  is-fullwidth-code-point@5.0.0:
-    resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
-    engines: {node: '>=18'}
-
-  is-generator-fn@2.1.0:
-    resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
-    engines: {node: '>=6'}
-
-  is-generator-function@1.1.0:
-    resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
-    engines: {node: '>= 0.4'}
-
-  is-glob@4.0.3:
-    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
-    engines: {node: '>=0.10.0'}
-
-  is-hexadecimal@1.0.4:
-    resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
-
-  is-hexadecimal@2.0.1:
-    resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
-
-  is-immutable-type@5.0.1:
-    resolution: {integrity: sha512-LkHEOGVZZXxGl8vDs+10k3DvP++SEoYEAJLRk6buTFi6kD7QekThV7xHS0j6gpnUCQ0zpud/gMDGiV4dQneLTg==}
-    peerDependencies:
-      eslint: '*'
-      typescript: '>=4.7.4'
-
-  is-map@2.0.3:
-    resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
-    engines: {node: '>= 0.4'}
-
-  is-nan@1.3.2:
-    resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
-    engines: {node: '>= 0.4'}
-
-  is-number-object@1.1.1:
-    resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
-    engines: {node: '>= 0.4'}
-
-  is-number@7.0.0:
-    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
-    engines: {node: '>=0.12.0'}
-
-  is-plain-obj@4.1.0:
-    resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
-    engines: {node: '>=12'}
-
-  is-regex@1.2.1:
-    resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
-    engines: {node: '>= 0.4'}
-
-  is-set@2.0.3:
-    resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
-    engines: {node: '>= 0.4'}
-
-  is-shared-array-buffer@1.0.4:
-    resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
-    engines: {node: '>= 0.4'}
-
-  is-stream@2.0.1:
-    resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
-    engines: {node: '>=8'}
-
-  is-stream@3.0.0:
-    resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  is-string@1.1.1:
-    resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
-    engines: {node: '>= 0.4'}
-
-  is-symbol@1.1.1:
-    resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
-    engines: {node: '>= 0.4'}
-
-  is-typed-array@1.1.15:
-    resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
-    engines: {node: '>= 0.4'}
-
-  is-weakmap@2.0.2:
-    resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
-    engines: {node: '>= 0.4'}
-
-  is-weakref@1.1.1:
-    resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
-    engines: {node: '>= 0.4'}
-
-  is-weakset@2.0.4:
-    resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
-    engines: {node: '>= 0.4'}
-
-  is-wsl@2.2.0:
-    resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
-    engines: {node: '>=8'}
-
-  isarray@1.0.0:
-    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-
-  isarray@2.0.5:
-    resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
-
-  isexe@2.0.0:
-    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
-  isomorphic.js@0.2.5:
-    resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==}
-
-  istanbul-lib-coverage@3.2.2:
-    resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
-    engines: {node: '>=8'}
-
-  istanbul-lib-instrument@5.2.1:
-    resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
-    engines: {node: '>=8'}
-
-  istanbul-lib-instrument@6.0.3:
-    resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
-    engines: {node: '>=10'}
-
-  istanbul-lib-report@3.0.1:
-    resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
-    engines: {node: '>=10'}
-
-  istanbul-lib-source-maps@4.0.1:
-    resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
-    engines: {node: '>=10'}
-
-  istanbul-reports@3.1.7:
-    resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
-    engines: {node: '>=8'}
-
-  iterator.prototype@1.1.5:
-    resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
-    engines: {node: '>= 0.4'}
-
-  jackspeak@3.4.3:
-    resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
-
-  jest-changed-files@29.7.0:
-    resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-circus@29.7.0:
-    resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-cli@29.7.0:
-    resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    hasBin: true
-    peerDependencies:
-      node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
-
-  jest-config@29.7.0:
-    resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    peerDependencies:
-      '@types/node': '*'
-      ts-node: '>=9.0.0'
-    peerDependenciesMeta:
-      '@types/node':
-        optional: true
-      ts-node:
-        optional: true
-
-  jest-diff@29.7.0:
-    resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-docblock@29.7.0:
-    resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-each@29.7.0:
-    resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-environment-node@29.7.0:
-    resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-get-type@29.6.3:
-    resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-haste-map@29.7.0:
-    resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-leak-detector@29.7.0:
-    resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-matcher-utils@29.7.0:
-    resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-message-util@29.7.0:
-    resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-mock@29.7.0:
-    resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-pnp-resolver@1.2.3:
-    resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
-    engines: {node: '>=6'}
-    peerDependencies:
-      jest-resolve: '*'
-    peerDependenciesMeta:
-      jest-resolve:
-        optional: true
-
-  jest-regex-util@29.6.3:
-    resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-resolve-dependencies@29.7.0:
-    resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-resolve@29.7.0:
-    resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-runner@29.7.0:
-    resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-runtime@29.7.0:
-    resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-snapshot@29.7.0:
-    resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-util@29.7.0:
-    resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-validate@29.7.0:
-    resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-watcher@29.7.0:
-    resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest-worker@27.5.1:
-    resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
-    engines: {node: '>= 10.13.0'}
-
-  jest-worker@29.7.0:
-    resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  jest@29.7.0:
-    resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    hasBin: true
-    peerDependencies:
-      node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
-
-  jiti@1.21.7:
-    resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
-    hasBin: true
-
-  js-audio-recorder@1.0.7:
-    resolution: {integrity: sha512-JiDODCElVHGrFyjGYwYyNi7zCbKk9va9C77w+zCPMmi4C6ix7zsX2h3ddHugmo4dOTOTCym9++b/wVW9nC0IaA==}
-
-  js-cookie@3.0.5:
-    resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
-    engines: {node: '>=14'}
-
-  js-tokens@4.0.0:
-    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
-  js-yaml@3.14.1:
-    resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
-    hasBin: true
-
-  js-yaml@4.1.0:
-    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
-    hasBin: true
-
-  jsdoc-type-pratt-parser@4.1.0:
-    resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==}
-    engines: {node: '>=12.0.0'}
-
-  jsesc@3.0.2:
-    resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
-    engines: {node: '>=6'}
-    hasBin: true
-
-  jsesc@3.1.0:
-    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
-    engines: {node: '>=6'}
-    hasBin: true
-
-  json-buffer@3.0.1:
-    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
-  json-parse-even-better-errors@2.3.1:
-    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-
-  json-schema-traverse@0.4.1:
-    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
-  json-schema-traverse@1.0.0:
-    resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-
-  json-stable-stringify-without-jsonify@1.0.1:
-    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
-  json5@1.0.2:
-    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
-    hasBin: true
-
-  json5@2.2.3:
-    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
-    engines: {node: '>=6'}
-    hasBin: true
-
-  jsonc-eslint-parser@2.4.0:
-    resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  jsonfile@6.1.0:
-    resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
-
-  jsonschema@1.5.0:
-    resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==}
-
-  jsx-ast-utils@3.3.5:
-    resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
-    engines: {node: '>=4.0'}
-
-  jwt-decode@4.0.0:
-    resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
-    engines: {node: '>=18'}
-
-  katex@0.16.22:
-    resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==}
-    hasBin: true
-
-  keyv@4.5.4:
-    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-
-  khroma@2.1.0:
-    resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
-
-  kleur@3.0.3:
-    resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
-    engines: {node: '>=6'}
-
-  kolorist@1.8.0:
-    resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
-  ky@1.8.0:
-    resolution: {integrity: sha512-DoKGmG27nT8t/1F9gV8vNzggJ3mLAyD49J8tTMWHeZvS8qLc7GlyTieicYtFzvDznMe/q2u38peOjkWc5/pjvw==}
-    engines: {node: '>=18'}
-
-  lamejs@1.2.1:
-    resolution: {integrity: sha512-s7bxvjvYthw6oPLCm5pFxvA84wUROODB8jEO2+CE1adhKgrIvVOlmMgY8zyugxGrvRaDHNJanOiS21/emty6dQ==}
-
-  langium@3.0.0:
-    resolution: {integrity: sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==}
-    engines: {node: '>=16.0.0'}
-
-  language-subtag-registry@0.3.23:
-    resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
-
-  language-tags@1.0.9:
-    resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
-    engines: {node: '>=0.10'}
-
-  launch-ide@1.0.1:
-    resolution: {integrity: sha512-U7qBxSNk774PxWq4XbmRe0ThiIstPoa4sMH/OGSYxrFVvg8x3biXcF1fsH6wasDpEmEXMdINUrQhBdwsSgKyMg==}
-
-  layout-base@1.0.2:
-    resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
-
-  layout-base@2.0.1:
-    resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
-
-  leven@3.1.0:
-    resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
-    engines: {node: '>=6'}
-
-  levn@0.4.1:
-    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
-    engines: {node: '>= 0.8.0'}
-
-  lexical@0.30.0:
-    resolution: {integrity: sha512-6gxYeXaJiAcreJD0whCofvO0MuJmnWoIgIl1w7L5FTigfhnEohuCx2SoI/oywzfzXE9gzZnyr3rVvZrMItPL8A==}
-
-  lib0@0.2.102:
-    resolution: {integrity: sha512-g70kydI0I1sZU0ChO8mBbhw0oUW/8U0GHzygpvEIx8k+jgOpqnTSb/E+70toYVqHxBhrERD21TwD5QcZJQ40ZQ==}
-    engines: {node: '>=16'}
-    hasBin: true
-
-  lilconfig@3.1.3:
-    resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
-    engines: {node: '>=14'}
-
-  line-clamp@1.0.0:
-    resolution: {integrity: sha512-dCDlvMj572RIRBQ3x9aIX0DTdt2St1bMdpi64jVTAi5vqBck7wf+J97//+J7+pS80rFJaYa8HiyXCTp0flpnBA==}
-
-  lines-and-columns@1.2.4:
-    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
-  lint-staged@15.5.0:
-    resolution: {integrity: sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==}
-    engines: {node: '>=18.12.0'}
-    hasBin: true
-
-  listr2@8.3.2:
-    resolution: {integrity: sha512-vsBzcU4oE+v0lj4FhVLzr9dBTv4/fHIa57l+GCwovP8MoFNZJTOhGU8PXd4v2VJCbECAaijBiHntiekFMLvo0g==}
-    engines: {node: '>=18.0.0'}
-
-  loader-runner@4.3.0:
-    resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
-    engines: {node: '>=6.11.5'}
-
-  loader-utils@2.0.4:
-    resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
-    engines: {node: '>=8.9.0'}
-
-  loader-utils@3.3.1:
-    resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
-    engines: {node: '>= 12.13.0'}
-
-  local-pkg@1.1.1:
-    resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
-    engines: {node: '>=14'}
-
-  locate-path@5.0.0:
-    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
-    engines: {node: '>=8'}
-
-  locate-path@6.0.0:
-    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
-    engines: {node: '>=10'}
-
-  locate-path@7.2.0:
-    resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  lodash-es@4.17.21:
-    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
-
-  lodash.castarray@4.4.0:
-    resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
-
-  lodash.debounce@4.0.8:
-    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
-
-  lodash.isplainobject@4.0.6:
-    resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
-
-  lodash.merge@4.6.2:
-    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
-  lodash@4.17.21:
-    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-
-  log-update@6.1.0:
-    resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
-    engines: {node: '>=18'}
-
-  longest-streak@3.1.0:
-    resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
-
-  loose-envify@1.4.0:
-    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
-    hasBin: true
-
-  loupe@3.1.3:
-    resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
-
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
-  lowercase-keys@2.0.0:
-    resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
-    engines: {node: '>=8'}
-
-  lowlight@1.20.0:
-    resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
-
-  lru-cache@10.4.3:
-    resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
-  lru-cache@5.1.1:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
-  lz-string@1.5.0:
-    resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
-    hasBin: true
-
-  magic-string@0.30.17:
-    resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
-
-  magicast@0.3.5:
-    resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
-
-  make-dir@3.1.0:
-    resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
-    engines: {node: '>=8'}
-
-  make-dir@4.0.0:
-    resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
-    engines: {node: '>=10'}
-
-  make-error@1.3.6:
-    resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
-
-  makeerror@1.0.12:
-    resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
-
-  map-or-similar@1.5.0:
-    resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==}
-
-  markdown-extensions@2.0.0:
-    resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
-    engines: {node: '>=16'}
-
-  markdown-table@3.0.4:
-    resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
-
-  marked@13.0.3:
-    resolution: {integrity: sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==}
-    engines: {node: '>= 18'}
-    hasBin: true
-
-  math-intrinsics@1.1.0:
-    resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
-    engines: {node: '>= 0.4'}
-
-  md5.js@1.3.5:
-    resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
-
-  mdast-util-find-and-replace@3.0.2:
-    resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
-
-  mdast-util-from-markdown@2.0.2:
-    resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
-
-  mdast-util-gfm-autolink-literal@2.0.1:
-    resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
-
-  mdast-util-gfm-footnote@2.1.0:
-    resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
-
-  mdast-util-gfm-strikethrough@2.0.0:
-    resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
-
-  mdast-util-gfm-table@2.0.0:
-    resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
-
-  mdast-util-gfm-task-list-item@2.0.0:
-    resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
-
-  mdast-util-gfm@3.1.0:
-    resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
-
-  mdast-util-math@3.0.0:
-    resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
-
-  mdast-util-mdx-expression@2.0.1:
-    resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
-
-  mdast-util-mdx-jsx@3.2.0:
-    resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
-
-  mdast-util-mdx@3.0.0:
-    resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
-
-  mdast-util-mdxjs-esm@2.0.1:
-    resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
-
-  mdast-util-newline-to-break@2.0.0:
-    resolution: {integrity: sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==}
-
-  mdast-util-phrasing@4.1.0:
-    resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
-
-  mdast-util-to-hast@13.2.0:
-    resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
-
-  mdast-util-to-markdown@2.1.2:
-    resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
-
-  mdast-util-to-string@4.0.0:
-    resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
-
-  memfs@3.5.3:
-    resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
-    engines: {node: '>= 4.0.0'}
-
-  memoize-one@5.2.1:
-    resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
-
-  memoizerific@1.11.3:
-    resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==}
-
-  merge-stream@2.0.0:
-    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-
-  merge2@1.4.1:
-    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
-    engines: {node: '>= 8'}
-
-  mermaid@11.4.1:
-    resolution: {integrity: sha512-Mb01JT/x6CKDWaxigwfZYuYmDZ6xtrNwNlidKZwkSrDaY9n90tdrJTV5Umk+wP1fZscGptmKFXHsXMDEVZ+Q6A==}
-
-  micromark-core-commonmark@2.0.3:
-    resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
-
-  micromark-extension-gfm-autolink-literal@2.1.0:
-    resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
-
-  micromark-extension-gfm-footnote@2.1.0:
-    resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
-
-  micromark-extension-gfm-strikethrough@2.1.0:
-    resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
-
-  micromark-extension-gfm-table@2.1.1:
-    resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
-
-  micromark-extension-gfm-tagfilter@2.0.0:
-    resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
-
-  micromark-extension-gfm-task-list-item@2.1.0:
-    resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
-
-  micromark-extension-gfm@3.0.0:
-    resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
-
-  micromark-extension-math@3.1.0:
-    resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==}
-
-  micromark-extension-mdx-expression@3.0.1:
-    resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
-
-  micromark-extension-mdx-jsx@3.0.2:
-    resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
-
-  micromark-extension-mdx-md@2.0.0:
-    resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
-
-  micromark-extension-mdxjs-esm@3.0.0:
-    resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
-
-  micromark-extension-mdxjs@3.0.0:
-    resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
-
-  micromark-factory-destination@2.0.1:
-    resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
-
-  micromark-factory-label@2.0.1:
-    resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
-
-  micromark-factory-mdx-expression@2.0.3:
-    resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
-
-  micromark-factory-space@2.0.1:
-    resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
-
-  micromark-factory-title@2.0.1:
-    resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
-
-  micromark-factory-whitespace@2.0.1:
-    resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
-
-  micromark-util-character@2.1.1:
-    resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
-
-  micromark-util-chunked@2.0.1:
-    resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
-
-  micromark-util-classify-character@2.0.1:
-    resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
-
-  micromark-util-combine-extensions@2.0.1:
-    resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
-
-  micromark-util-decode-numeric-character-reference@2.0.2:
-    resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
-
-  micromark-util-decode-string@2.0.1:
-    resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
-
-  micromark-util-encode@2.0.1:
-    resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
-
-  micromark-util-events-to-acorn@2.0.3:
-    resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
-
-  micromark-util-html-tag-name@2.0.1:
-    resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
-
-  micromark-util-normalize-identifier@2.0.1:
-    resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
-
-  micromark-util-resolve-all@2.0.1:
-    resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
-
-  micromark-util-sanitize-uri@2.0.1:
-    resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
-
-  micromark-util-subtokenize@2.1.0:
-    resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
-
-  micromark-util-symbol@2.0.1:
-    resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
-
-  micromark-util-types@2.0.2:
-    resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
-
-  micromark@4.0.2:
-    resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
-
-  micromatch@4.0.8:
-    resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
-    engines: {node: '>=8.6'}
-
-  miller-rabin@4.0.1:
-    resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
-    hasBin: true
-
-  mime-db@1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
-    engines: {node: '>= 0.6'}
-
-  mime-types@2.1.35:
-    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
-    engines: {node: '>= 0.6'}
-
-  mime@4.0.7:
-    resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==}
-    engines: {node: '>=16'}
-    hasBin: true
-
-  mimic-fn@2.1.0:
-    resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
-    engines: {node: '>=6'}
-
-  mimic-fn@4.0.0:
-    resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
-    engines: {node: '>=12'}
-
-  mimic-function@5.0.1:
-    resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
-    engines: {node: '>=18'}
-
-  mimic-response@1.0.1:
-    resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
-    engines: {node: '>=4'}
-
-  mimic-response@2.1.0:
-    resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==}
-    engines: {node: '>=8'}
-
-  mimic-response@3.1.0:
-    resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
-    engines: {node: '>=10'}
-
-  min-indent@1.0.1:
-    resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
-    engines: {node: '>=4'}
-
-  minimalistic-assert@1.0.1:
-    resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
-
-  minimalistic-crypto-utils@1.0.1:
-    resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
-
-  minimatch@10.0.1:
-    resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
-    engines: {node: 20 || >=22}
-
-  minimatch@3.1.2:
-    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
-
-  minimatch@9.0.5:
-    resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
-    engines: {node: '>=16 || 14 >=14.17'}
-
-  minimist@1.2.8:
-    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
-  minipass@3.3.6:
-    resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
-    engines: {node: '>=8'}
-
-  minipass@5.0.0:
-    resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
-    engines: {node: '>=8'}
-
-  minipass@7.1.2:
-    resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
-    engines: {node: '>=16 || 14 >=14.17'}
-
-  minizlib@2.1.2:
-    resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
-    engines: {node: '>= 8'}
-
-  mitt@3.0.1:
-    resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
-
-  mkdirp@1.0.4:
-    resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  mlly@1.7.4:
-    resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
-
-  monaco-editor@0.52.2:
-    resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==}
-
-  ms@2.1.3:
-    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
-  mz@2.7.0:
-    resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
-
-  nan@2.22.2:
-    resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==}
-
-  nanoid@3.3.11:
-    resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
-  natural-compare@1.4.0:
-    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-
-  natural-orderby@5.0.0:
-    resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==}
-    engines: {node: '>=18'}
-
-  negotiator@0.6.4:
-    resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
-    engines: {node: '>= 0.6'}
-
-  neo-async@2.6.2:
-    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
-
-  next-themes@0.4.6:
-    resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
-    peerDependencies:
-      react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
-      react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
-
-  next@15.2.3:
-    resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==}
-    engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
-    hasBin: true
-    peerDependencies:
-      '@opentelemetry/api': ^1.1.0
-      '@playwright/test': ^1.41.2
-      babel-plugin-react-compiler: '*'
-      react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
-      react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
-      sass: ^1.3.0
-    peerDependenciesMeta:
-      '@opentelemetry/api':
-        optional: true
-      '@playwright/test':
-        optional: true
-      babel-plugin-react-compiler:
-        optional: true
-      sass:
-        optional: true
-
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
-  node-abort-controller@3.1.1:
-    resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
-
-  node-addon-api@7.1.1:
-    resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
-
-  node-fetch@2.7.0:
-    resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
-    engines: {node: 4.x || >=6.0.0}
-    peerDependencies:
-      encoding: ^0.1.0
-    peerDependenciesMeta:
-      encoding:
-        optional: true
-
-  node-int64@0.4.0:
-    resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
-
-  node-polyfill-webpack-plugin@2.0.1:
-    resolution: {integrity: sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      webpack: '>=5'
-
-  node-releases@2.0.19:
-    resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
-
-  nopt@5.0.0:
-    resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
-    engines: {node: '>=6'}
-    hasBin: true
-
-  normalize-package-data@6.0.2:
-    resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-
-  normalize-path@3.0.0:
-    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
-    engines: {node: '>=0.10.0'}
-
-  normalize-range@0.1.2:
-    resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
-    engines: {node: '>=0.10.0'}
-
-  normalize-url@6.1.0:
-    resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
-    engines: {node: '>=10'}
-
-  normalize-wheel@1.0.1:
-    resolution: {integrity: sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==}
-
-  npm-run-path@4.0.1:
-    resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
-    engines: {node: '>=8'}
-
-  npm-run-path@5.3.0:
-    resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  npmlog@5.0.1:
-    resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
-    deprecated: This package is no longer supported.
-
-  nth-check@2.1.1:
-    resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
-
-  object-assign@4.1.1:
-    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
-    engines: {node: '>=0.10.0'}
-
-  object-hash@3.0.0:
-    resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
-    engines: {node: '>= 6'}
-
-  object-inspect@1.13.4:
-    resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
-    engines: {node: '>= 0.4'}
-
-  object-is@1.1.6:
-    resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
-    engines: {node: '>= 0.4'}
-
-  object-keys@1.1.1:
-    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
-    engines: {node: '>= 0.4'}
-
-  object.assign@4.1.7:
-    resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
-    engines: {node: '>= 0.4'}
-
-  object.entries@1.1.9:
-    resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
-    engines: {node: '>= 0.4'}
-
-  object.fromentries@2.0.8:
-    resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
-    engines: {node: '>= 0.4'}
-
-  object.groupby@1.0.3:
-    resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
-    engines: {node: '>= 0.4'}
-
-  object.values@1.2.1:
-    resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
-    engines: {node: '>= 0.4'}
-
-  objectorarray@1.0.5:
-    resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==}
-
-  once@1.4.0:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
-  onetime@5.1.2:
-    resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
-    engines: {node: '>=6'}
-
-  onetime@6.0.0:
-    resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
-    engines: {node: '>=12'}
-
-  onetime@7.0.0:
-    resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
-    engines: {node: '>=18'}
-
-  open@8.4.2:
-    resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
-    engines: {node: '>=12'}
-
-  optionator@0.9.4:
-    resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
-    engines: {node: '>= 0.8.0'}
-
-  os-browserify@0.3.0:
-    resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
-
-  own-keys@1.0.1:
-    resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
-    engines: {node: '>= 0.4'}
-
-  p-cancelable@2.1.1:
-    resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
-    engines: {node: '>=8'}
-
-  p-limit@2.3.0:
-    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
-    engines: {node: '>=6'}
-
-  p-limit@3.1.0:
-    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
-    engines: {node: '>=10'}
-
-  p-limit@4.0.0:
-    resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  p-locate@4.1.0:
-    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
-    engines: {node: '>=8'}
-
-  p-locate@5.0.0:
-    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
-    engines: {node: '>=10'}
-
-  p-locate@6.0.0:
-    resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  p-try@2.2.0:
-    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
-    engines: {node: '>=6'}
-
-  package-json-from-dist@1.0.1:
-    resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
-
-  package-manager-detector@0.2.11:
-    resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
-
-  pako@1.0.11:
-    resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
-
-  papaparse@5.5.2:
-    resolution: {integrity: sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA==}
-
-  param-case@3.0.4:
-    resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
-
-  parent-module@1.0.1:
-    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
-    engines: {node: '>=6'}
-
-  parse-asn1@5.1.7:
-    resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==}
-    engines: {node: '>= 0.10'}
-
-  parse-entities@2.0.0:
-    resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
-
-  parse-entities@4.0.2:
-    resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
-
-  parse-gitignore@2.0.0:
-    resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==}
-    engines: {node: '>=14'}
-
-  parse-imports@2.2.1:
-    resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==}
-    engines: {node: '>= 18'}
-
-  parse-json@5.2.0:
-    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
-    engines: {node: '>=8'}
-
-  parse-json@8.3.0:
-    resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==}
-    engines: {node: '>=18'}
-
-  parse5@7.2.1:
-    resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
-
-  pascal-case@3.1.2:
-    resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
-
-  path-browserify@1.0.1:
-    resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
-
-  path-data-parser@0.1.0:
-    resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
-
-  path-exists@4.0.0:
-    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
-    engines: {node: '>=8'}
-
-  path-exists@5.0.0:
-    resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  path-is-absolute@1.0.1:
-    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
-    engines: {node: '>=0.10.0'}
-
-  path-key@3.1.1:
-    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
-    engines: {node: '>=8'}
-
-  path-key@4.0.0:
-    resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
-    engines: {node: '>=12'}
-
-  path-parse@1.0.7:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
-  path-scurry@1.11.1:
-    resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
-    engines: {node: '>=16 || 14 >=14.18'}
-
-  path-type@4.0.0:
-    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-    engines: {node: '>=8'}
-
-  path2d@0.2.2:
-    resolution: {integrity: sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==}
-    engines: {node: '>=6'}
-
-  pathe@2.0.3:
-    resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
-
-  pathval@2.0.0:
-    resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
-    engines: {node: '>= 14.16'}
-
-  pbkdf2@3.1.2:
-    resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
-    engines: {node: '>=0.12'}
-
-  pdfjs-dist@4.4.168:
-    resolution: {integrity: sha512-MbkAjpwka/dMHaCfQ75RY1FXX3IewBVu6NGZOcxerRFlaBiIkZmUoR0jotX5VUzYZEXAGzSFtknWs5xRKliXPA==}
-    engines: {node: '>=18'}
-
-  picocolors@1.1.1:
-    resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
-  picomatch@2.3.1:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-    engines: {node: '>=8.6'}
-
-  picomatch@4.0.2:
-    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
-    engines: {node: '>=12'}
-
-  pidtree@0.6.0:
-    resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
-    engines: {node: '>=0.10'}
-    hasBin: true
-
-  pify@2.3.0:
-    resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
-    engines: {node: '>=0.10.0'}
-
-  pinyin-pro@3.26.0:
-    resolution: {integrity: sha512-HcBZZb0pvm0/JkPhZHWA5Hqp2cWHXrrW/WrV+OtaYYM+kf35ffvZppIUuGmyuQ7gDr1JDJKMkbEE+GN0wfMoGg==}
-
-  pirates@4.0.7:
-    resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
-    engines: {node: '>= 6'}
-
-  pkg-dir@4.2.0:
-    resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
-    engines: {node: '>=8'}
-
-  pkg-dir@7.0.0:
-    resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
-    engines: {node: '>=14.16'}
-
-  pkg-types@1.3.1:
-    resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
-
-  pkg-types@2.1.0:
-    resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
-
-  pluralize@8.0.0:
-    resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
-    engines: {node: '>=4'}
-
-  pnp-webpack-plugin@1.7.0:
-    resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==}
-    engines: {node: '>=6'}
-
-  pnpm-workspace-yaml@0.3.1:
-    resolution: {integrity: sha512-3nW5RLmREmZ8Pm8MbPsO2RM+99RRjYd25ynj3NV0cFsN7CcEl4sDFzgoFmSyduFwxFQ2Qbu3y2UdCh6HlyUOeA==}
-
-  points-on-curve@0.2.0:
-    resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
-
-  points-on-path@0.2.1:
-    resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
-
-  polished@4.3.1:
-    resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==}
-    engines: {node: '>=10'}
-
-  portfinder@1.0.35:
-    resolution: {integrity: sha512-73JaFg4NwYNAufDtS5FsFu/PdM49ahJrO1i44aCRsDWju1z5wuGDaqyFUQWR6aJoK2JPDWlaYYAGFNIGTSUHSw==}
-    engines: {node: '>= 10.12'}
-
-  possible-typed-array-names@1.1.0:
-    resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
-    engines: {node: '>= 0.4'}
-
-  postcss-import@15.1.0:
-    resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      postcss: ^8.0.0
-
-  postcss-js@4.0.1:
-    resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
-    engines: {node: ^12 || ^14 || >= 16}
-    peerDependencies:
-      postcss: ^8.4.21
-
-  postcss-load-config@4.0.2:
-    resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
-    engines: {node: '>= 14'}
-    peerDependencies:
-      postcss: '>=8.0.9'
-      ts-node: '>=9.0.0'
-    peerDependenciesMeta:
-      postcss:
-        optional: true
-      ts-node:
-        optional: true
-
-  postcss-loader@8.1.1:
-    resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==}
-    engines: {node: '>= 18.12.0'}
-    peerDependencies:
-      '@rspack/core': 0.x || 1.x
-      postcss: ^7.0.0 || ^8.0.1
-      webpack: ^5.0.0
-    peerDependenciesMeta:
-      '@rspack/core':
-        optional: true
-      webpack:
-        optional: true
-
-  postcss-modules-extract-imports@3.1.0:
-    resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-modules-local-by-default@4.2.0:
-    resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-modules-scope@3.2.1:
-    resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-modules-values@4.0.0:
-    resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-nested@6.2.0:
-    resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
-    engines: {node: '>=12.0'}
-    peerDependencies:
-      postcss: ^8.2.14
-
-  postcss-selector-parser@6.0.10:
-    resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
-    engines: {node: '>=4'}
-
-  postcss-selector-parser@6.1.2:
-    resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
-    engines: {node: '>=4'}
-
-  postcss-selector-parser@7.1.0:
-    resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
-    engines: {node: '>=4'}
-
-  postcss-value-parser@4.2.0:
-    resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-
-  postcss@8.4.31:
-    resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
-    engines: {node: ^10 || ^12 || >=14}
-
-  postcss@8.5.3:
-    resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
-    engines: {node: ^10 || ^12 || >=14}
-
-  prelude-ls@1.2.1:
-    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
-    engines: {node: '>= 0.8.0'}
-
-  pretty-error@4.0.0:
-    resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==}
-
-  pretty-format@27.5.1:
-    resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
-    engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
-
-  pretty-format@29.7.0:
-    resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
-  prismjs@1.27.0:
-    resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==}
-    engines: {node: '>=6'}
-
-  prismjs@1.30.0:
-    resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
-    engines: {node: '>=6'}
-
-  process-nextick-args@2.0.1:
-    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-
-  process@0.11.10:
-    resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
-    engines: {node: '>= 0.6.0'}
-
-  prompts@2.4.2:
-    resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
-    engines: {node: '>= 6'}
-
-  prop-types@15.8.1:
-    resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
-
-  property-information@5.6.0:
-    resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==}
-
-  property-information@6.5.0:
-    resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
-
-  property-information@7.0.0:
-    resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
-
-  public-encrypt@4.0.3:
-    resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
-
-  pump@3.0.2:
-    resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
-
-  punycode@1.4.1:
-    resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
-
-  punycode@2.3.1:
-    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
-    engines: {node: '>=6'}
-
-  pure-rand@6.1.0:
-    resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
-
-  qrcode.react@4.2.0:
-    resolution: {integrity: sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  qs@6.14.0:
-    resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
-    engines: {node: '>=0.6'}
-
-  quansync@0.2.10:
-    resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
-
-  querystring-es3@0.2.1:
-    resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==}
-    engines: {node: '>=0.4.x'}
-
-  queue-microtask@1.2.3:
-    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
-  queue@6.0.2:
-    resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
-
-  quick-lru@5.1.1:
-    resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
-    engines: {node: '>=10'}
-
-  randombytes@2.1.0:
-    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
-
-  randomfill@1.0.4:
-    resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
-
-  range-parser@1.2.1:
-    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
-    engines: {node: '>= 0.6'}
-
-  re-resizable@6.11.2:
-    resolution: {integrity: sha512-2xI2P3OHs5qw7K0Ud1aLILK6MQxW50TcO+DetD9eIV58j84TqYeHoZcL9H4GXFXXIh7afhH8mv5iUCXII7OW7A==}
-    peerDependencies:
-      react: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  react-18-input-autosize@3.0.0:
-    resolution: {integrity: sha512-7tsUc9PJWg6Vsp8qYuzlKKBf7hbCoTBdNfjYZSprEPbxf3meuhjklg9QPBe9rIyoR3uDAzmG7NpoJ1+kP5ns+w==}
-    peerDependencies:
-      react: ^16.3.0 || ^17.0.0 || ^18.0.0
-
-  react-confetti@6.4.0:
-    resolution: {integrity: sha512-5MdGUcqxrTU26I2EU7ltkWPwxvucQTuqMm8dUz72z2YMqTD6s9vMcDUysk7n9jnC+lXuCPeJJ7Knf98VEYE9Rg==}
-    engines: {node: '>=16'}
-    peerDependencies:
-      react: ^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0
-
-  react-docgen-typescript@2.2.2:
-    resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==}
-    peerDependencies:
-      typescript: '>= 4.3.x'
-
-  react-docgen@7.1.1:
-    resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==}
-    engines: {node: '>=16.14.0'}
-
-  react-dom@18.3.1:
-    resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
-    peerDependencies:
-      react: ^18.3.1
-
-  react-dom@19.0.0:
-    resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
-    peerDependencies:
-      react: ^19.0.0
-
-  react-draggable@4.4.6:
-    resolution: {integrity: sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw==}
-    peerDependencies:
-      react: '>= 16.3.0'
-      react-dom: '>= 16.3.0'
-
-  react-easy-crop@5.4.1:
-    resolution: {integrity: sha512-Djtsi7bWO75vkKYkVxNRrJWY69pXLahIAkUN0mmt9cXNnaq2tpG59ctSY6P7ipJgBc7COJDRMRuwb2lYwtACNQ==}
-    peerDependencies:
-      react: '>=16.4.0'
-      react-dom: '>=16.4.0'
-
-  react-error-boundary@3.1.4:
-    resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==}
-    engines: {node: '>=10', npm: '>=6'}
-    peerDependencies:
-      react: '>=16.13.1'
-
-  react-error-boundary@4.1.2:
-    resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==}
-    peerDependencies:
-      react: '>=16.13.1'
-
-  react-fast-compare@3.2.2:
-    resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
-
-  react-headless-pagination@1.1.6:
-    resolution: {integrity: sha512-t7L/Q4xpyZszw8iC8ALERs/G2644JESmssahUkRp65WFWvw2k9HXVmfI6VbXvTXrqy+a8fbKT6BQ6SgS2ULNOA==}
-    engines: {node: '>=18.13'}
-    peerDependencies:
-      react: '>=16'
-
-  react-hook-form@7.55.0:
-    resolution: {integrity: sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog==}
-    engines: {node: '>=18.0.0'}
-    peerDependencies:
-      react: ^16.8.0 || ^17 || ^18 || ^19
-
-  react-hotkeys-hook@4.6.2:
-    resolution: {integrity: sha512-FmP+ZriY3EG59Ug/lxNfrObCnW9xQShgk7Nb83+CkpfkcCpfS95ydv+E9JuXA5cp8KtskU7LGlIARpkc92X22Q==}
-    peerDependencies:
-      react: '>=16.8.1'
-      react-dom: '>=16.8.1'
-
-  react-i18next@15.4.1:
-    resolution: {integrity: sha512-ahGab+IaSgZmNPYXdV1n+OYky95TGpFwnKRflX/16dY04DsYYKHtVLjeny7sBSCREEcoMbAgSkFiGLF5g5Oofw==}
-    peerDependencies:
-      i18next: '>= 23.2.3'
-      react: '>= 16.8.0'
-      react-dom: '*'
-      react-native: '*'
-    peerDependenciesMeta:
-      react-dom:
-        optional: true
-      react-native:
-        optional: true
-
-  react-infinite-scroll-component@6.1.0:
-    resolution: {integrity: sha512-SQu5nCqy8DxQWpnUVLx7V7b7LcA37aM7tvoWjTLZp1dk6EJibM5/4EJKzOnl07/BsM1Y40sKLuqjCwwH/xV0TQ==}
-    peerDependencies:
-      react: '>=16.0.0'
-
-  react-is@16.13.1:
-    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
-
-  react-is@17.0.2:
-    resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
-
-  react-is@18.3.1:
-    resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
-
-  react-markdown@9.1.0:
-    resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==}
-    peerDependencies:
-      '@types/react': ~18.2.0
-      react: '>=18'
-
-  react-multi-email@1.0.25:
-    resolution: {integrity: sha512-Wmv28FvIk4nWgdpHzlIPonY4iSs7bPV35+fAiWYzSBhTo+vhXfglEhjY1WnjHQINW/Pibu2xlb/q1heVuytQHQ==}
-    peerDependencies:
-      react: ^18.2.0
-      react-dom: ^18.2.0
-
-  react-papaparse@4.4.0:
-    resolution: {integrity: sha512-xTEwHZYJ+1dh9mQDQjjwJXmWyX20DdZ52u+ddw75V+Xm5qsjXSvWmC7c8K82vRwMjKAOH2S9uFyGpHEyEztkUQ==}
-    engines: {node: '>=8', npm: '>=5'}
-
-  react-pdf-highlighter@8.0.0-rc.0:
-    resolution: {integrity: sha512-zYHDq5XxsXA02UbFUoMdo7Cex1l42vHJxszywXmct2kUMZm6TmU3b/a5zOS6ssXWqdjEx5Vpq6/gW+Mek9rDTQ==}
-    peerDependencies:
-      react: '>=18.0.0'
-      react-dom: '>=18.0.0'
-
-  react-refresh@0.14.2:
-    resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
-    engines: {node: '>=0.10.0'}
-
-  react-rnd@10.5.2:
-    resolution: {integrity: sha512-0Tm4x7k7pfHf2snewJA8x7Nwgt3LV+58MVEWOVsFjk51eYruFEa6Wy7BNdxt4/lH0wIRsu7Gm3KjSXY2w7YaNw==}
-    peerDependencies:
-      react: '>=16.3.0'
-      react-dom: '>=16.3.0'
-
-  react-slider@2.0.6:
-    resolution: {integrity: sha512-gJxG1HwmuMTJ+oWIRCmVWvgwotNCbByTwRkFZC6U4MBsHqJBmxwbYRJUmxy4Tke1ef8r9jfXjgkmY/uHOCEvbA==}
-    peerDependencies:
-      react: ^16 || ^17 || ^18
-
-  react-sortablejs@6.1.4:
-    resolution: {integrity: sha512-fc7cBosfhnbh53Mbm6a45W+F735jwZ1UFIYSrIqcO/gRIFoDyZeMtgKlpV4DdyQfbCzdh5LoALLTDRxhMpTyXQ==}
-    peerDependencies:
-      '@types/sortablejs': '1'
-      react: '>=16.9.0'
-      react-dom: '>=16.9.0'
-      sortablejs: '1'
-
-  react-syntax-highlighter@15.6.1:
-    resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==}
-    peerDependencies:
-      react: '>= 0.14.0'
-
-  react-textarea-autosize@8.5.9:
-    resolution: {integrity: sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  react-tooltip@5.8.3:
-    resolution: {integrity: sha512-h7maAlm2Xeymc14gWKhhrzsENeB83N65EzZ+AcQIGrOpNE0yefVRJIHhNcWHEJ0FEtf7VZXxtsj5glVXKxEtvA==}
-    peerDependencies:
-      react: '>=16.14.0'
-      react-dom: '>=16.14.0'
-
-  react-window-infinite-loader@1.0.10:
-    resolution: {integrity: sha512-NO/csdHlxjWqA2RJZfzQgagAjGHspbO2ik9GtWZb0BY1Nnapq0auG8ErI+OhGCzpjYJsCYerqUlK6hkq9dfAAA==}
-    engines: {node: '>8.0.0'}
-    peerDependencies:
-      react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  react-window@1.8.11:
-    resolution: {integrity: sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==}
-    engines: {node: '>8.0.0'}
-    peerDependencies:
-      react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-      react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  react@18.3.1:
-    resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
-    engines: {node: '>=0.10.0'}
-
-  react@19.0.0:
-    resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
-    engines: {node: '>=0.10.0'}
-
-  reactflow@11.11.4:
-    resolution: {integrity: sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==}
-    peerDependencies:
-      react: '>=17'
-      react-dom: '>=17'
-
-  read-cache@1.0.0:
-    resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
-
-  read-package-up@11.0.0:
-    resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==}
-    engines: {node: '>=18'}
-
-  read-pkg@9.0.1:
-    resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==}
-    engines: {node: '>=18'}
-
-  readable-stream@2.3.8:
-    resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
-
-  readable-stream@3.6.2:
-    resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
-    engines: {node: '>= 6'}
-
-  readable-stream@4.7.0:
-    resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  readdirp@3.6.0:
-    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
-    engines: {node: '>=8.10.0'}
-
-  readdirp@4.1.2:
-    resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
-    engines: {node: '>= 14.18.0'}
-
-  recast@0.23.11:
-    resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
-    engines: {node: '>= 4'}
-
-  recma-build-jsx@1.0.0:
-    resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
-
-  recma-jsx@1.0.0:
-    resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==}
-
-  recma-parse@1.0.0:
-    resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
-
-  recma-stringify@1.0.0:
-    resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
-
-  recordrtc@5.6.2:
-    resolution: {integrity: sha512-1QNKKNtl7+KcwD1lyOgP3ZlbiJ1d0HtXnypUy7yq49xEERxk31PHvE9RCciDrulPCY7WJ+oz0R9hpNxgsIurGQ==}
-
-  redent@3.0.0:
-    resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
-    engines: {node: '>=8'}
-
-  refa@0.12.1:
-    resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==}
-    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
-  reflect.getprototypeof@1.0.10:
-    resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
-    engines: {node: '>= 0.4'}
-
-  refractor@3.6.0:
-    resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}
-
-  regenerate-unicode-properties@10.2.0:
-    resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==}
-    engines: {node: '>=4'}
-
-  regenerate@1.4.2:
-    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
-
-  regenerator-runtime@0.14.1:
-    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
-
-  regenerator-transform@0.15.2:
-    resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
-
-  regex-parser@2.3.1:
-    resolution: {integrity: sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==}
-
-  regexp-ast-analysis@0.7.1:
-    resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==}
-    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
-  regexp-tree@0.1.27:
-    resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
-    hasBin: true
-
-  regexp.prototype.flags@1.5.4:
-    resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
-    engines: {node: '>= 0.4'}
-
-  regexpu-core@6.2.0:
-    resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==}
-    engines: {node: '>=4'}
-
-  regjsgen@0.8.0:
-    resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
-
-  regjsparser@0.12.0:
-    resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==}
-    hasBin: true
-
-  rehype-katex@7.0.1:
-    resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==}
-
-  rehype-raw@7.0.0:
-    resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
-
-  rehype-recma@1.0.0:
-    resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
-
-  relateurl@0.2.7:
-    resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
-    engines: {node: '>= 0.10'}
-
-  remark-breaks@4.0.0:
-    resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==}
-
-  remark-gfm@4.0.1:
-    resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
-
-  remark-math@6.0.0:
-    resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==}
-
-  remark-mdx@3.1.0:
-    resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==}
-
-  remark-parse@11.0.0:
-    resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
-
-  remark-rehype@11.1.2:
-    resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
-
-  remark-stringify@11.0.0:
-    resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
-
-  renderkid@3.0.0:
-    resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==}
-
-  require-directory@2.1.1:
-    resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
-    engines: {node: '>=0.10.0'}
-
-  require-from-string@2.0.2:
-    resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
-    engines: {node: '>=0.10.0'}
-
-  resize-observer-polyfill@1.5.1:
-    resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
-
-  resolve-alpn@1.2.1:
-    resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
-
-  resolve-cwd@3.0.0:
-    resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
-    engines: {node: '>=8'}
-
-  resolve-from@4.0.0:
-    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
-    engines: {node: '>=4'}
-
-  resolve-from@5.0.0:
-    resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
-    engines: {node: '>=8'}
-
-  resolve-pkg-maps@1.0.0:
-    resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-
-  resolve-url-loader@5.0.0:
-    resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==}
-    engines: {node: '>=12'}
-
-  resolve.exports@2.0.3:
-    resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
-    engines: {node: '>=10'}
-
-  resolve@1.22.10:
-    resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
-    engines: {node: '>= 0.4'}
-    hasBin: true
-
-  resolve@2.0.0-next.5:
-    resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
-    hasBin: true
-
-  responselike@2.0.1:
-    resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
-
-  restore-cursor@5.1.0:
-    resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
-    engines: {node: '>=18'}
-
-  reusify@1.1.0:
-    resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
-    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
-  rfdc@1.4.1:
-    resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
-
-  rimraf@3.0.2:
-    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
-    deprecated: Rimraf versions prior to v4 are no longer supported
-    hasBin: true
-
-  ripemd160@2.0.2:
-    resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
-
-  robust-predicates@3.0.2:
-    resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
-
-  rollup@4.39.0:
-    resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==}
-    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
-    hasBin: true
-
-  roughjs@4.6.6:
-    resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
-
-  run-parallel@1.2.0:
-    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
-  rw@1.3.3:
-    resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
-
-  safe-array-concat@1.1.3:
-    resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
-    engines: {node: '>=0.4'}
-
-  safe-buffer@5.1.2:
-    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-
-  safe-buffer@5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
-  safe-push-apply@1.0.0:
-    resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
-    engines: {node: '>= 0.4'}
-
-  safe-regex-test@1.1.0:
-    resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
-    engines: {node: '>= 0.4'}
-
-  safer-buffer@2.1.2:
-    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
-  sass-loader@14.2.1:
-    resolution: {integrity: sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==}
-    engines: {node: '>= 18.12.0'}
-    peerDependencies:
-      '@rspack/core': 0.x || 1.x
-      node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
-      sass: ^1.3.0
-      sass-embedded: '*'
-      webpack: ^5.0.0
-    peerDependenciesMeta:
-      '@rspack/core':
-        optional: true
-      node-sass:
-        optional: true
-      sass:
-        optional: true
-      sass-embedded:
-        optional: true
-      webpack:
-        optional: true
-
-  sass@1.86.3:
-    resolution: {integrity: sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==}
-    engines: {node: '>=14.0.0'}
-    hasBin: true
-
-  scheduler@0.23.2:
-    resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
-
-  scheduler@0.25.0:
-    resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
-
-  schema-utils@3.3.0:
-    resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
-    engines: {node: '>= 10.13.0'}
-
-  schema-utils@4.3.0:
-    resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==}
-    engines: {node: '>= 10.13.0'}
-
-  screenfull@5.2.0:
-    resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==}
-    engines: {node: '>=0.10.0'}
-
-  scslre@0.3.0:
-    resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
-    engines: {node: ^14.0.0 || >=16.0.0}
-
-  semver@6.3.1:
-    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
-    hasBin: true
-
-  semver@7.7.1:
-    resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  serialize-javascript@6.0.2:
-    resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
-
-  server-only@0.0.1:
-    resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
-
-  set-blocking@2.0.0:
-    resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
-
-  set-function-length@1.2.2:
-    resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
-    engines: {node: '>= 0.4'}
-
-  set-function-name@2.0.2:
-    resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
-    engines: {node: '>= 0.4'}
-
-  set-proto@1.0.0:
-    resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
-    engines: {node: '>= 0.4'}
-
-  setimmediate@1.0.5:
-    resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
-
-  sha.js@2.4.11:
-    resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
-    hasBin: true
-
-  sharp@0.33.5:
-    resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-
-  shave@5.0.4:
-    resolution: {integrity: sha512-AnvEI1wM2rQmrwCl364LVLLhzCzSHJ7DQmdd+fHJTnNzbD2mjsUAOcxWLLYKam7Q63skwyQf2CB2TCdJ2O5c8w==}
-
-  shebang-command@2.0.0:
-    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
-    engines: {node: '>=8'}
-
-  shebang-regex@3.0.0:
-    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
-    engines: {node: '>=8'}
-
-  side-channel-list@1.0.0:
-    resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
-    engines: {node: '>= 0.4'}
-
-  side-channel-map@1.0.1:
-    resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
-    engines: {node: '>= 0.4'}
-
-  side-channel-weakmap@1.0.2:
-    resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
-    engines: {node: '>= 0.4'}
-
-  side-channel@1.1.0:
-    resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
-    engines: {node: '>= 0.4'}
-
-  siginfo@2.0.0:
-    resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
-
-  signal-exit@3.0.7:
-    resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
-
-  signal-exit@4.1.0:
-    resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
-    engines: {node: '>=14'}
-
-  simple-concat@1.0.1:
-    resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
-
-  simple-get@3.1.1:
-    resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==}
-
-  simple-swizzle@0.2.2:
-    resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
-
-  sisteransi@1.0.5:
-    resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
-
-  size-sensor@1.0.2:
-    resolution: {integrity: sha512-2NCmWxY7A9pYKGXNBfteo4hy14gWu47rg5692peVMst6lQLPKrVjhY+UTEsPI5ceFRJSl3gVgMYaUi/hKuaiKw==}
-
-  slash@3.0.0:
-    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-    engines: {node: '>=8'}
-
-  slashes@3.0.12:
-    resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==}
-
-  slice-ansi@5.0.0:
-    resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
-    engines: {node: '>=12'}
-
-  slice-ansi@7.1.0:
-    resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
-    engines: {node: '>=18'}
-
-  sortablejs@1.15.6:
-    resolution: {integrity: sha512-aNfiuwMEpfBM/CN6LY0ibyhxPfPbyFeBTYJKCvzkJ2GkUpazIt3H+QIPAMHwqQ7tMKaHz1Qj+rJJCqljnf4p3A==}
-
-  source-map-js@1.2.1:
-    resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
-    engines: {node: '>=0.10.0'}
-
-  source-map-support@0.5.13:
-    resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
-
-  source-map-support@0.5.21:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
-
-  source-map@0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
-    engines: {node: '>=0.10.0'}
-
-  source-map@0.7.4:
-    resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
-    engines: {node: '>= 8'}
-
-  space-separated-tokens@1.1.5:
-    resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
-
-  space-separated-tokens@2.0.2:
-    resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
-
-  spdx-correct@3.2.0:
-    resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
-
-  spdx-exceptions@2.5.0:
-    resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
-
-  spdx-expression-parse@3.0.1:
-    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
-
-  spdx-expression-parse@4.0.0:
-    resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
-
-  spdx-license-ids@3.0.21:
-    resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
-
-  sprintf-js@1.0.3:
-    resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
-
-  stable-hash@0.0.5:
-    resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
-
-  stack-utils@2.0.6:
-    resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
-    engines: {node: '>=10'}
-
-  stackback@0.0.2:
-    resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
-
-  stackframe@1.3.4:
-    resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
-
-  state-local@1.0.7:
-    resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==}
-
-  std-env@3.9.0:
-    resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
-
-  storybook@8.5.0:
-    resolution: {integrity: sha512-cEx42OlCetManF+cONVJVYP7SYsnI2K922DfWKmZhebP0it0n6TUof4y5/XzJ8YUruwPgyclGLdX8TvdRuNSfw==}
-    hasBin: true
-    peerDependencies:
-      prettier: ^2 || ^3
-    peerDependenciesMeta:
-      prettier:
-        optional: true
-
-  stream-browserify@3.0.0:
-    resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
-
-  stream-http@3.2.0:
-    resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==}
-
-  streamsearch@1.1.0:
-    resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
-    engines: {node: '>=10.0.0'}
-
-  string-argv@0.3.2:
-    resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
-    engines: {node: '>=0.6.19'}
-
-  string-length@4.0.2:
-    resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
-    engines: {node: '>=10'}
-
-  string-ts@2.2.1:
-    resolution: {integrity: sha512-Q2u0gko67PLLhbte5HmPfdOjNvUKbKQM+mCNQae6jE91DmoFHY6HH9GcdqCeNx87DZ2KKjiFxmA0R/42OneGWw==}
-
-  string-width@4.2.3:
-    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
-    engines: {node: '>=8'}
-
-  string.prototype.includes@2.0.1:
-    resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
-    engines: {node: '>= 0.4'}
-
-  string.prototype.matchall@4.0.12:
-    resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
-    engines: {node: '>= 0.4'}
-
-  string.prototype.repeat@1.0.0:
-    resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
-
-  string.prototype.trim@1.2.10:
-    resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
-    engines: {node: '>= 0.4'}
-
-  string.prototype.trimend@1.0.9:
-    resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
-    engines: {node: '>= 0.4'}
-
-  string.prototype.trimstart@1.0.8:
-    resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
-    engines: {node: '>= 0.4'}
-
-  string_decoder@1.1.1:
-    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
-
-  string_decoder@1.3.0:
-    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
-  stringify-entities@4.0.4:
-    resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
-
-  strip-ansi@6.0.1:
-    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
-    engines: {node: '>=8'}
-
-  strip-ansi@7.1.0:
-    resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
-    engines: {node: '>=12'}
-
-  strip-bom@3.0.0:
-    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
-    engines: {node: '>=4'}
-
-  strip-bom@4.0.0:
-    resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
-    engines: {node: '>=8'}
-
-  strip-final-newline@2.0.0:
-    resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
-    engines: {node: '>=6'}
-
-  strip-final-newline@3.0.0:
-    resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
-    engines: {node: '>=12'}
-
-  strip-indent@3.0.0:
-    resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
-    engines: {node: '>=8'}
-
-  strip-indent@4.0.0:
-    resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==}
-    engines: {node: '>=12'}
-
-  strip-json-comments@3.1.1:
-    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
-    engines: {node: '>=8'}
-
-  style-loader@3.3.4:
-    resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      webpack: ^5.0.0
-
-  style-to-js@1.1.16:
-    resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==}
-
-  style-to-object@1.0.8:
-    resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
-
-  styled-jsx@5.1.6:
-    resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
-    engines: {node: '>= 12.0.0'}
-    peerDependencies:
-      '@babel/core': '*'
-      babel-plugin-macros: '*'
-      react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
-    peerDependenciesMeta:
-      '@babel/core':
-        optional: true
-      babel-plugin-macros:
-        optional: true
-
-  stylis@4.3.6:
-    resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
-
-  sucrase@3.35.0:
-    resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    hasBin: true
-
-  supports-color@7.2.0:
-    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
-    engines: {node: '>=8'}
-
-  supports-color@8.1.1:
-    resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
-    engines: {node: '>=10'}
-
-  supports-preserve-symlinks-flag@1.0.0:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
-    engines: {node: '>= 0.4'}
-
-  swr@2.3.3:
-    resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==}
-    peerDependencies:
-      react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  synckit@0.10.3:
-    resolution: {integrity: sha512-R1urvuyiTaWfeCggqEvpDJwAlDVdsT9NM+IP//Tk2x7qHCkSvBk/fwFgw/TLAHzZlrAnnazMcRw0ZD8HlYFTEQ==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-
-  synckit@0.9.2:
-    resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-
-  tabbable@6.2.0:
-    resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
-
-  tailwind-merge@2.6.0:
-    resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
-
-  tailwindcss@3.4.17:
-    resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
-    engines: {node: '>=14.0.0'}
-    hasBin: true
-
-  tapable@2.2.1:
-    resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
-    engines: {node: '>=6'}
-
-  tar@6.2.1:
-    resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
-    engines: {node: '>=10'}
-
-  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.1.0
-    peerDependenciesMeta:
-      '@swc/core':
-        optional: true
-      esbuild:
-        optional: true
-      uglify-js:
-        optional: true
-
-  terser@5.39.0:
-    resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  test-exclude@6.0.0:
-    resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
-    engines: {node: '>=8'}
-
-  thenify-all@1.6.0:
-    resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
-    engines: {node: '>=0.8'}
-
-  thenify@3.3.1:
-    resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
-
-  throttle-debounce@2.3.0:
-    resolution: {integrity: sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==}
-    engines: {node: '>=8'}
-
-  timers-browserify@2.0.12:
-    resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==}
-    engines: {node: '>=0.6.0'}
-
-  tiny-invariant@1.2.0:
-    resolution: {integrity: sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==}
-
-  tiny-invariant@1.3.3:
-    resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
-
-  tinybench@2.9.0:
-    resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
-
-  tinyexec@0.3.2:
-    resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
-
-  tinyglobby@0.2.12:
-    resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
-    engines: {node: '>=12.0.0'}
-
-  tinypool@1.0.2:
-    resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-
-  tinyrainbow@1.2.0:
-    resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
-    engines: {node: '>=14.0.0'}
-
-  tinyrainbow@2.0.0:
-    resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
-    engines: {node: '>=14.0.0'}
-
-  tinyspy@3.0.2:
-    resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
-    engines: {node: '>=14.0.0'}
-
-  tmpl@1.0.5:
-    resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
-
-  to-regex-range@5.0.1:
-    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
-    engines: {node: '>=8.0'}
-
-  toggle-selection@1.0.6:
-    resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
-
-  toml-eslint-parser@0.10.0:
-    resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  tr46@0.0.3:
-    resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
-
-  trim-lines@3.0.1:
-    resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
-
-  trough@2.2.0:
-    resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
-
-  ts-api-utils@2.1.0:
-    resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
-    engines: {node: '>=18.12'}
-    peerDependencies:
-      typescript: '>=4.8.4'
-
-  ts-debounce@4.0.0:
-    resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==}
-
-  ts-declaration-location@1.0.7:
-    resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==}
-    peerDependencies:
-      typescript: '>=4.0.0'
-
-  ts-dedent@2.2.0:
-    resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
-    engines: {node: '>=6.10'}
-
-  ts-interface-checker@0.1.13:
-    resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
-
-  ts-node@10.9.2:
-    resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
-    hasBin: true
-    peerDependencies:
-      '@swc/core': '>=1.2.50'
-      '@swc/wasm': '>=1.2.50'
-      '@types/node': '*'
-      typescript: '>=2.7'
-    peerDependenciesMeta:
-      '@swc/core':
-        optional: true
-      '@swc/wasm':
-        optional: true
-
-  ts-pattern@5.7.0:
-    resolution: {integrity: sha512-0/FvIG4g3kNkYgbNwBBW5pZBkfpeYQnH+2AA3xmjkCAit/DSDPKmgwC3fKof4oYUq6gupClVOJlFl+939VRBMg==}
-
-  ts-pnp@1.2.0:
-    resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==}
-    engines: {node: '>=6'}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  tsconfig-paths-webpack-plugin@4.2.0:
-    resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==}
-    engines: {node: '>=10.13.0'}
-
-  tsconfig-paths@3.15.0:
-    resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
-
-  tsconfig-paths@4.2.0:
-    resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
-    engines: {node: '>=6'}
-
-  tslib@2.3.0:
-    resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
-
-  tslib@2.6.2:
-    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
-
-  tslib@2.8.1:
-    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
-
-  tty-browserify@0.0.1:
-    resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==}
-
-  tween-functions@1.2.0:
-    resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==}
-
-  type-check@0.4.0:
-    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
-    engines: {node: '>= 0.8.0'}
-
-  type-detect@4.0.8:
-    resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
-    engines: {node: '>=4'}
-
-  type-fest@0.21.3:
-    resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
-    engines: {node: '>=10'}
-
-  type-fest@2.19.0:
-    resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
-    engines: {node: '>=12.20'}
-
-  type-fest@4.39.1:
-    resolution: {integrity: sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==}
-    engines: {node: '>=16'}
-
-  typed-array-buffer@1.0.3:
-    resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
-    engines: {node: '>= 0.4'}
-
-  typed-array-byte-length@1.0.3:
-    resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
-    engines: {node: '>= 0.4'}
-
-  typed-array-byte-offset@1.0.4:
-    resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
-    engines: {node: '>= 0.4'}
-
-  typed-array-length@1.0.7:
-    resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
-    engines: {node: '>= 0.4'}
-
-  typescript-eslint@8.29.1:
-    resolution: {integrity: sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-      typescript: '>=4.8.4 <5.9.0'
-
-  typescript@4.9.5:
-    resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
-    engines: {node: '>=4.2.0'}
-    hasBin: true
-
-  typescript@5.8.3:
-    resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
-    engines: {node: '>=14.17'}
-    hasBin: true
-
-  ufo@1.6.1:
-    resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
-
-  uglify-js@3.19.3:
-    resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
-    engines: {node: '>=0.8.0'}
-    hasBin: true
-
-  unbox-primitive@1.1.0:
-    resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
-    engines: {node: '>= 0.4'}
-
-  unicode-canonical-property-names-ecmascript@2.0.1:
-    resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
-    engines: {node: '>=4'}
-
-  unicode-match-property-ecmascript@2.0.0:
-    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
-    engines: {node: '>=4'}
-
-  unicode-match-property-value-ecmascript@2.2.0:
-    resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==}
-    engines: {node: '>=4'}
-
-  unicode-property-aliases-ecmascript@2.1.0:
-    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
-    engines: {node: '>=4'}
-
-  unicorn-magic@0.1.0:
-    resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
-    engines: {node: '>=18'}
-
-  unified@11.0.5:
-    resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
-
-  unist-util-find-after@5.0.0:
-    resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
-
-  unist-util-is@6.0.0:
-    resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
-
-  unist-util-position-from-estree@2.0.0:
-    resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
-
-  unist-util-position@5.0.0:
-    resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
-
-  unist-util-remove-position@5.0.0:
-    resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
-
-  unist-util-stringify-position@4.0.0:
-    resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
-
-  unist-util-visit-parents@6.0.1:
-    resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
-
-  unist-util-visit@5.0.0:
-    resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
-
-  universal-user-agent@7.0.2:
-    resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==}
-
-  universalify@2.0.1:
-    resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
-    engines: {node: '>= 10.0.0'}
-
-  unplugin@1.16.1:
-    resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
-    engines: {node: '>=14.0.0'}
-
-  unrs-resolver@1.4.1:
-    resolution: {integrity: sha512-MhPB3wBI5BR8TGieTb08XuYlE8oFVEXdSAgat3psdlRyejl8ojQ8iqPcjh094qCZ1r+TnkxzP6BeCd/umfHckQ==}
-
-  update-browserslist-db@1.1.3:
-    resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
-
-  uri-js@4.4.1:
-    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
-  url@0.11.4:
-    resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==}
-    engines: {node: '>= 0.4'}
-
-  use-composed-ref@1.4.0:
-    resolution: {integrity: sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  use-context-selector@2.0.0:
-    resolution: {integrity: sha512-owfuSmUNd3eNp3J9CdDl0kMgfidV+MkDvHPpvthN5ThqM+ibMccNE0k+Iq7TWC6JPFvGZqanqiGCuQx6DyV24g==}
-    peerDependencies:
-      react: '>=18.0.0'
-      scheduler: '>=0.19.0'
-
-  use-isomorphic-layout-effect@1.2.0:
-    resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  use-latest@1.3.0:
-    resolution: {integrity: sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==}
-    peerDependencies:
-      '@types/react': '*'
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
-  use-strict@1.0.1:
-    resolution: {integrity: sha512-IeiWvvEXfW5ltKVMkxq6FvNf2LojMKvB2OCeja6+ct24S1XOmQw2dGr2JyndwACWAGJva9B7yPHwAmeA9QCqAQ==}
-
-  use-sync-external-store@1.5.0:
-    resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
-
-  util-deprecate@1.0.2:
-    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
-  util@0.12.5:
-    resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
-
-  utila@0.4.0:
-    resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
-
-  uuid@10.0.0:
-    resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
-    hasBin: true
-
-  uuid@9.0.1:
-    resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
-    hasBin: true
-
-  v8-compile-cache-lib@3.0.1:
-    resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
-
-  v8-to-istanbul@9.3.0:
-    resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
-    engines: {node: '>=10.12.0'}
-
-  valibot@1.0.0:
-    resolution: {integrity: sha512-1Hc0ihzWxBar6NGeZv7fPLY0QuxFMyxwYR2sF1Blu7Wq7EnremwY2W02tit2ij2VJT8HcSkHAQqmFfl77f73Yw==}
-    peerDependencies:
-      typescript: '>=5'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  validate-npm-package-license@3.0.4:
-    resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
-
-  vfile-location@5.0.3:
-    resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
-
-  vfile-message@4.0.2:
-    resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
-
-  vfile@6.0.3:
-    resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
-
-  vite-code-inspector-plugin@0.18.3:
-    resolution: {integrity: sha512-178H73vbDUHE+JpvfAfioUHlUr7qXCYIEa2YNXtzenFQGOjtae59P1jjcxGfa6pPHEnOoaitb13K+0qxwhi/WA==}
-
-  vite-node@3.1.1:
-    resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==}
-    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
-    hasBin: true
-
-  vite@6.2.6:
-    resolution: {integrity: sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==}
-    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
-    hasBin: true
-    peerDependencies:
-      '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
-      jiti: '>=1.21.0'
-      less: '*'
-      lightningcss: ^1.21.0
-      sass: '*'
-      sass-embedded: '*'
-      stylus: '*'
-      sugarss: '*'
-      terser: ^5.16.0
-      tsx: ^4.8.1
-      yaml: ^2.4.2
-    peerDependenciesMeta:
-      '@types/node':
-        optional: true
-      jiti:
-        optional: true
-      less:
-        optional: true
-      lightningcss:
-        optional: true
-      sass:
-        optional: true
-      sass-embedded:
-        optional: true
-      stylus:
-        optional: true
-      sugarss:
-        optional: true
-      terser:
-        optional: true
-      tsx:
-        optional: true
-      yaml:
-        optional: true
-
-  vitest@3.1.1:
-    resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==}
-    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
-    hasBin: true
-    peerDependencies:
-      '@edge-runtime/vm': '*'
-      '@types/debug': ^4.1.12
-      '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
-      '@vitest/browser': 3.1.1
-      '@vitest/ui': 3.1.1
-      happy-dom: '*'
-      jsdom: '*'
-    peerDependenciesMeta:
-      '@edge-runtime/vm':
-        optional: true
-      '@types/debug':
-        optional: true
-      '@types/node':
-        optional: true
-      '@vitest/browser':
-        optional: true
-      '@vitest/ui':
-        optional: true
-      happy-dom:
-        optional: true
-      jsdom:
-        optional: true
-
-  vm-browserify@1.1.2:
-    resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
-
-  void-elements@3.1.0:
-    resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
-    engines: {node: '>=0.10.0'}
-
-  vscode-jsonrpc@8.2.0:
-    resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
-    engines: {node: '>=14.0.0'}
-
-  vscode-languageserver-protocol@3.17.5:
-    resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==}
-
-  vscode-languageserver-textdocument@1.0.12:
-    resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==}
-
-  vscode-languageserver-types@3.17.5:
-    resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
-
-  vscode-languageserver@9.0.1:
-    resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==}
-    hasBin: true
-
-  vscode-uri@3.0.8:
-    resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
-
-  vue-eslint-parser@10.1.3:
-    resolution: {integrity: sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==}
-    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-    peerDependencies:
-      eslint: ^8.57.0 || ^9.0.0
-
-  walker@1.0.8:
-    resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
-
-  watchpack@2.4.2:
-    resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==}
-    engines: {node: '>=10.13.0'}
-
-  web-namespaces@2.0.1:
-    resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
-
-  webidl-conversions@3.0.1:
-    resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
-
-  webidl-conversions@7.0.0:
-    resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
-    engines: {node: '>=12'}
-
-  webpack-code-inspector-plugin@0.18.3:
-    resolution: {integrity: sha512-3782rsJhBnRiw0IpR6EqnyGDQoiSq0CcGeLJ52rZXlszYCe8igXtcujq7OhI0byaivWQ1LW7sXKyMEoVpBhq0w==}
-
-  webpack-dev-middleware@6.1.3:
-    resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==}
-    engines: {node: '>= 14.15.0'}
-    peerDependencies:
-      webpack: ^5.0.0
-    peerDependenciesMeta:
-      webpack:
-        optional: true
-
-  webpack-hot-middleware@2.26.1:
-    resolution: {integrity: sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==}
-
-  webpack-sources@3.2.3:
-    resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
-    engines: {node: '>=10.13.0'}
-
-  webpack-virtual-modules@0.6.2:
-    resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
-
-  webpack@5.99.5:
-    resolution: {integrity: sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==}
-    engines: {node: '>=10.13.0'}
-    hasBin: true
-    peerDependencies:
-      webpack-cli: '*'
-    peerDependenciesMeta:
-      webpack-cli:
-        optional: true
-
-  whatwg-mimetype@3.0.0:
-    resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
-    engines: {node: '>=12'}
-
-  whatwg-url@5.0.0:
-    resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
-
-  which-boxed-primitive@1.1.1:
-    resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
-    engines: {node: '>= 0.4'}
-
-  which-builtin-type@1.2.1:
-    resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
-    engines: {node: '>= 0.4'}
-
-  which-collection@1.0.2:
-    resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
-    engines: {node: '>= 0.4'}
-
-  which-typed-array@1.1.19:
-    resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
-    engines: {node: '>= 0.4'}
-
-  which@2.0.2:
-    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
-    engines: {node: '>= 8'}
-    hasBin: true
-
-  why-is-node-running@2.3.0:
-    resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
-    engines: {node: '>=8'}
-    hasBin: true
-
-  wide-align@1.1.5:
-    resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
-
-  word-wrap@1.2.5:
-    resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
-    engines: {node: '>=0.10.0'}
-
-  wrap-ansi@7.0.0:
-    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
-    engines: {node: '>=10'}
-
-  wrap-ansi@8.1.0:
-    resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
-    engines: {node: '>=12'}
-
-  wrap-ansi@9.0.0:
-    resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
-    engines: {node: '>=18'}
-
-  wrappy@1.0.2:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
-  write-file-atomic@4.0.2:
-    resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-
-  ws@8.18.1:
-    resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
-    engines: {node: '>=10.0.0'}
-    peerDependencies:
-      bufferutil: ^4.0.1
-      utf-8-validate: '>=5.0.2'
-    peerDependenciesMeta:
-      bufferutil:
-        optional: true
-      utf-8-validate:
-        optional: true
-
-  xml-name-validator@4.0.0:
-    resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
-    engines: {node: '>=12'}
-
-  xtend@4.0.2:
-    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
-    engines: {node: '>=0.4'}
-
-  y18n@5.0.8:
-    resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
-    engines: {node: '>=10'}
-
-  yallist@3.1.1:
-    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
-  yallist@4.0.0:
-    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-
-  yaml-eslint-parser@1.3.0:
-    resolution: {integrity: sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==}
-    engines: {node: ^14.17.0 || >=16.0.0}
-
-  yaml@1.10.2:
-    resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
-    engines: {node: '>= 6'}
-
-  yaml@2.7.1:
-    resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==}
-    engines: {node: '>= 14'}
-    hasBin: true
-
-  yargs-parser@21.1.1:
-    resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
-    engines: {node: '>=12'}
-
-  yargs@17.7.2:
-    resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
-    engines: {node: '>=12'}
-
-  yjs@13.6.24:
-    resolution: {integrity: sha512-xn/pYLTZa3uD1uDG8lpxfLRo5SR/rp0frdASOl2a71aYNvUXdWcLtVL91s2y7j+Q8ppmjZ9H3jsGVgoFMbT2VA==}
-    engines: {node: '>=16.0.0', npm: '>=8.0.0'}
-
-  yn@3.1.1:
-    resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
-    engines: {node: '>=6'}
-
-  yocto-queue@0.1.0:
-    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
-    engines: {node: '>=10'}
-
-  yocto-queue@1.2.1:
-    resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
-    engines: {node: '>=12.20'}
-
-  zod@3.24.2:
-    resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==}
-
-  zrender@5.6.1:
-    resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==}
-
-  zundo@2.3.0:
-    resolution: {integrity: sha512-4GXYxXA17SIKYhVbWHdSEU04P697IMyVGXrC2TnzoyohEAWytFNOKqOp5gTGvaW93F/PM5Y0evbGtOPF0PWQwQ==}
-    peerDependencies:
-      zustand: ^4.3.0 || ^5.0.0
-
-  zustand@4.5.6:
-    resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==}
-    engines: {node: '>=12.7.0'}
-    peerDependencies:
-      '@types/react': ~18.2.0
-      immer: '>=9.0.6'
-      react: '>=16.8'
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-      immer:
-        optional: true
-      react:
-        optional: true
-
-  zwitch@2.0.4:
-    resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
-
-snapshots:
-
-  '@adobe/css-tools@4.4.2': {}
-
-  '@alloc/quick-lru@5.2.0': {}
-
-  '@ampproject/remapping@2.3.0':
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.8
-      '@jridgewell/trace-mapping': 0.3.25
-
-  '@antfu/eslint-config@4.12.0(@eslint-react/eslint-plugin@1.45.0(eslint@9.24.0(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@4.9.5))(typescript@4.9.5))(@typescript-eslint/utils@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(@vue/compiler-sfc@3.5.13)(eslint-plugin-react-hooks@5.2.0(eslint@9.24.0(jiti@1.21.7)))(eslint-plugin-react-refresh@0.4.19(eslint@9.24.0(jiti@1.21.7)))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@18.15.0)(happy-dom@17.4.4)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1))':
-    dependencies:
-      '@antfu/install-pkg': 1.0.0
-      '@clack/prompts': 0.10.1
-      '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.24.0(jiti@1.21.7))
-      '@eslint/markdown': 6.3.0
-      '@stylistic/eslint-plugin': 4.2.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@vitest/eslint-plugin': 1.1.42(@typescript-eslint/utils@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@18.15.0)(happy-dom@17.4.4)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1))
-      ansis: 3.17.0
-      cac: 6.7.14
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-config-flat-gitignore: 2.1.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-flat-config-utils: 2.0.1
-      eslint-merge-processors: 2.0.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-antfu: 3.1.1(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-command: 3.2.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-import-x: 4.10.2(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-jsdoc: 50.6.9(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-jsonc: 2.20.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-n: 17.17.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-no-only-tests: 3.3.0
-      eslint-plugin-perfectionist: 4.11.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-pnpm: 0.3.1(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-regexp: 2.7.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-toml: 0.12.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-unicorn: 58.0.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-vue: 10.0.0(eslint@9.24.0(jiti@1.21.7))(vue-eslint-parser@10.1.3(eslint@9.24.0(jiti@1.21.7)))
-      eslint-plugin-yml: 1.17.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.13)(eslint@9.24.0(jiti@1.21.7))
-      globals: 16.0.0
-      jsonc-eslint-parser: 2.4.0
-      local-pkg: 1.1.1
-      parse-gitignore: 2.0.0
-      toml-eslint-parser: 0.10.0
-      vue-eslint-parser: 10.1.3(eslint@9.24.0(jiti@1.21.7))
-      yaml-eslint-parser: 1.3.0
-    optionalDependencies:
-      '@eslint-react/eslint-plugin': 1.45.0(eslint@9.24.0(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@4.9.5))(typescript@4.9.5)
-      eslint-plugin-react-hooks: 5.2.0(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-react-refresh: 0.4.19(eslint@9.24.0(jiti@1.21.7))
-    transitivePeerDependencies:
-      - '@eslint/json'
-      - '@typescript-eslint/utils'
-      - '@vue/compiler-sfc'
-      - supports-color
-      - typescript
-      - vitest
-
-  '@antfu/install-pkg@1.0.0':
-    dependencies:
-      package-manager-detector: 0.2.11
-      tinyexec: 0.3.2
-
-  '@antfu/utils@8.1.1': {}
-
-  '@babel/code-frame@7.26.2':
-    dependencies:
-      '@babel/helper-validator-identifier': 7.25.9
-      js-tokens: 4.0.0
-      picocolors: 1.1.1
-
-  '@babel/compat-data@7.26.8': {}
-
-  '@babel/core@7.26.10':
-    dependencies:
-      '@ampproject/remapping': 2.3.0
-      '@babel/code-frame': 7.26.2
-      '@babel/generator': 7.27.0
-      '@babel/helper-compilation-targets': 7.27.0
-      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
-      '@babel/helpers': 7.27.0
-      '@babel/parser': 7.27.0
-      '@babel/template': 7.27.0
-      '@babel/traverse': 7.27.0
-      '@babel/types': 7.27.0
-      convert-source-map: 2.0.0
-      debug: 4.4.0
-      gensync: 1.0.0-beta.2
-      json5: 2.2.3
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/generator@7.27.0':
-    dependencies:
-      '@babel/parser': 7.27.0
-      '@babel/types': 7.27.0
-      '@jridgewell/gen-mapping': 0.3.8
-      '@jridgewell/trace-mapping': 0.3.25
-      jsesc: 3.1.0
-
-  '@babel/helper-annotate-as-pure@7.25.9':
-    dependencies:
-      '@babel/types': 7.27.0
-
-  '@babel/helper-compilation-targets@7.27.0':
-    dependencies:
-      '@babel/compat-data': 7.26.8
-      '@babel/helper-validator-option': 7.25.9
-      browserslist: 4.24.4
-      lru-cache: 5.1.1
-      semver: 6.3.1
-
-  '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-annotate-as-pure': 7.25.9
-      '@babel/helper-member-expression-to-functions': 7.25.9
-      '@babel/helper-optimise-call-expression': 7.25.9
-      '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
-      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
-      '@babel/traverse': 7.27.0
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-annotate-as-pure': 7.25.9
-      regexpu-core: 6.2.0
-      semver: 6.3.1
-
-  '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-compilation-targets': 7.27.0
-      '@babel/helper-plugin-utils': 7.26.5
-      debug: 4.4.0
-      lodash.debounce: 4.0.8
-      resolve: 1.22.10
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-member-expression-to-functions@7.25.9':
-    dependencies:
-      '@babel/traverse': 7.27.0
-      '@babel/types': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-module-imports@7.25.9':
-    dependencies:
-      '@babel/traverse': 7.27.0
-      '@babel/types': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-module-imports': 7.25.9
-      '@babel/helper-validator-identifier': 7.25.9
-      '@babel/traverse': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-optimise-call-expression@7.25.9':
-    dependencies:
-      '@babel/types': 7.27.0
-
-  '@babel/helper-plugin-utils@7.26.5': {}
-
-  '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-annotate-as-pure': 7.25.9
-      '@babel/helper-wrap-function': 7.25.9
-      '@babel/traverse': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-member-expression-to-functions': 7.25.9
-      '@babel/helper-optimise-call-expression': 7.25.9
-      '@babel/traverse': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
-    dependencies:
-      '@babel/traverse': 7.27.0
-      '@babel/types': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-string-parser@7.25.9': {}
-
-  '@babel/helper-validator-identifier@7.25.9': {}
-
-  '@babel/helper-validator-option@7.25.9': {}
-
-  '@babel/helper-wrap-function@7.25.9':
-    dependencies:
-      '@babel/template': 7.27.0
-      '@babel/traverse': 7.27.0
-      '@babel/types': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helpers@7.27.0':
-    dependencies:
-      '@babel/template': 7.27.0
-      '@babel/types': 7.27.0
-
-  '@babel/parser@7.27.0':
-    dependencies:
-      '@babel/types': 7.27.0
-
-  '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/traverse': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
-      '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/traverse': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-
-  '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10)
-      '@babel/traverse': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-module-imports': 7.25.9
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-annotate-as-pure': 7.25.9
-      '@babel/helper-compilation-targets': 7.27.0
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
-      '@babel/traverse': 7.27.0
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/template': 7.27.0
-
-  '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-compilation-targets': 7.27.0
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/traverse': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-validator-identifier': 7.25.9
-      '@babel/traverse': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-compilation-targets': 7.27.0
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10)
-
-  '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-annotate-as-pure': 7.25.9
-      '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-annotate-as-pure': 7.25.9
-      '@babel/helper-module-imports': 7.25.9
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10)
-      '@babel/types': 7.27.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-annotate-as-pure': 7.25.9
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      regenerator-transform: 0.15.2
-
-  '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-module-imports': 7.25.9
-      '@babel/helper-plugin-utils': 7.26.5
-      babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10)
-      babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10)
-      babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10)
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-annotate-as-pure': 7.25.9
-      '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
-      '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10)
-      '@babel/helper-plugin-utils': 7.26.5
-
-  '@babel/preset-env@7.26.9(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/compat-data': 7.26.8
-      '@babel/core': 7.26.10
-      '@babel/helper-compilation-targets': 7.27.0
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-validator-option': 7.25.9
-      '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)
-      '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10)
-      '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10)
-      '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10)
-      '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10)
-      '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10)
-      '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10)
-      '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10)
-      '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10)
-      '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10)
-      '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10)
-      '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10)
-      '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10)
-      '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10)
-      '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10)
-      '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10)
-      '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10)
-      babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10)
-      babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10)
-      babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10)
-      core-js-compat: 3.41.0
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/types': 7.27.0
-      esutils: 2.0.3
-
-  '@babel/preset-react@7.26.3(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-validator-option': 7.25.9
-      '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.10)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/preset-typescript@7.27.0(@babel/core@7.26.10)':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-plugin-utils': 7.26.5
-      '@babel/helper-validator-option': 7.25.9
-      '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10)
-      '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/runtime@7.27.0':
-    dependencies:
-      regenerator-runtime: 0.14.1
-
-  '@babel/template@7.27.0':
-    dependencies:
-      '@babel/code-frame': 7.26.2
-      '@babel/parser': 7.27.0
-      '@babel/types': 7.27.0
-
-  '@babel/traverse@7.27.0':
-    dependencies:
-      '@babel/code-frame': 7.26.2
-      '@babel/generator': 7.27.0
-      '@babel/parser': 7.27.0
-      '@babel/template': 7.27.0
-      '@babel/types': 7.27.0
-      debug: 4.4.0
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/types@7.27.0':
-    dependencies:
-      '@babel/helper-string-parser': 7.25.9
-      '@babel/helper-validator-identifier': 7.25.9
-
-  '@bcoe/v8-coverage@0.2.3': {}
-
-  '@braintree/sanitize-url@7.1.1': {}
-
-  '@chevrotain/cst-dts-gen@11.0.3':
-    dependencies:
-      '@chevrotain/gast': 11.0.3
-      '@chevrotain/types': 11.0.3
-      lodash-es: 4.17.21
-
-  '@chevrotain/gast@11.0.3':
-    dependencies:
-      '@chevrotain/types': 11.0.3
-      lodash-es: 4.17.21
-
-  '@chevrotain/regexp-to-ast@11.0.3': {}
-
-  '@chevrotain/types@11.0.3': {}
-
-  '@chevrotain/utils@11.0.3': {}
-
-  '@chromatic-com/storybook@3.2.6(react@19.0.0)(storybook@8.5.0)':
-    dependencies:
-      chromatic: 11.28.0
-      filesize: 10.1.6
-      jsonfile: 6.1.0
-      react-confetti: 6.4.0(react@19.0.0)
-      storybook: 8.5.0
-      strip-ansi: 7.1.0
-    transitivePeerDependencies:
-      - '@chromatic-com/cypress'
-      - '@chromatic-com/playwright'
-      - react
-
-  '@clack/core@0.4.2':
-    dependencies:
-      picocolors: 1.1.1
-      sisteransi: 1.0.5
-
-  '@clack/prompts@0.10.1':
-    dependencies:
-      '@clack/core': 0.4.2
-      picocolors: 1.1.1
-      sisteransi: 1.0.5
-
-  '@cspotcode/source-map-support@0.8.1':
-    dependencies:
-      '@jridgewell/trace-mapping': 0.3.9
-
-  '@dagrejs/dagre@1.1.4':
-    dependencies:
-      '@dagrejs/graphlib': 2.2.4
-
-  '@dagrejs/graphlib@2.2.4': {}
-
-  '@emnapi/core@1.4.0':
-    dependencies:
-      '@emnapi/wasi-threads': 1.0.1
-      tslib: 2.8.1
-    optional: true
-
-  '@emnapi/runtime@1.4.0':
-    dependencies:
-      tslib: 2.8.1
-    optional: true
-
-  '@emnapi/wasi-threads@1.0.1':
-    dependencies:
-      tslib: 2.8.1
-    optional: true
-
-  '@emoji-mart/data@1.2.1': {}
-
-  '@es-joy/jsdoccomment@0.49.0':
-    dependencies:
-      comment-parser: 1.4.1
-      esquery: 1.6.0
-      jsdoc-type-pratt-parser: 4.1.0
-
-  '@es-joy/jsdoccomment@0.50.0':
-    dependencies:
-      '@types/eslint': 9.6.1
-      '@types/estree': 1.0.7
-      '@typescript-eslint/types': 8.29.1
-      comment-parser: 1.4.1
-      esquery: 1.6.0
-      jsdoc-type-pratt-parser: 4.1.0
-
-  '@esbuild/aix-ppc64@0.25.0':
-    optional: true
-
-  '@esbuild/aix-ppc64@0.25.2':
-    optional: true
-
-  '@esbuild/android-arm64@0.25.0':
-    optional: true
-
-  '@esbuild/android-arm64@0.25.2':
-    optional: true
-
-  '@esbuild/android-arm@0.25.0':
-    optional: true
-
-  '@esbuild/android-arm@0.25.2':
-    optional: true
-
-  '@esbuild/android-x64@0.25.0':
-    optional: true
-
-  '@esbuild/android-x64@0.25.2':
-    optional: true
-
-  '@esbuild/darwin-arm64@0.25.0':
-    optional: true
-
-  '@esbuild/darwin-arm64@0.25.2':
-    optional: true
-
-  '@esbuild/darwin-x64@0.25.0':
-    optional: true
-
-  '@esbuild/darwin-x64@0.25.2':
-    optional: true
-
-  '@esbuild/freebsd-arm64@0.25.0':
-    optional: true
-
-  '@esbuild/freebsd-arm64@0.25.2':
-    optional: true
-
-  '@esbuild/freebsd-x64@0.25.0':
-    optional: true
-
-  '@esbuild/freebsd-x64@0.25.2':
-    optional: true
-
-  '@esbuild/linux-arm64@0.25.0':
-    optional: true
-
-  '@esbuild/linux-arm64@0.25.2':
-    optional: true
-
-  '@esbuild/linux-arm@0.25.0':
-    optional: true
-
-  '@esbuild/linux-arm@0.25.2':
-    optional: true
-
-  '@esbuild/linux-ia32@0.25.0':
-    optional: true
-
-  '@esbuild/linux-ia32@0.25.2':
-    optional: true
-
-  '@esbuild/linux-loong64@0.25.0':
-    optional: true
-
-  '@esbuild/linux-loong64@0.25.2':
-    optional: true
-
-  '@esbuild/linux-mips64el@0.25.0':
-    optional: true
-
-  '@esbuild/linux-mips64el@0.25.2':
-    optional: true
-
-  '@esbuild/linux-ppc64@0.25.0':
-    optional: true
-
-  '@esbuild/linux-ppc64@0.25.2':
-    optional: true
-
-  '@esbuild/linux-riscv64@0.25.0':
-    optional: true
-
-  '@esbuild/linux-riscv64@0.25.2':
-    optional: true
-
-  '@esbuild/linux-s390x@0.25.0':
-    optional: true
-
-  '@esbuild/linux-s390x@0.25.2':
-    optional: true
-
-  '@esbuild/linux-x64@0.25.0':
-    optional: true
-
-  '@esbuild/linux-x64@0.25.2':
-    optional: true
-
-  '@esbuild/netbsd-arm64@0.25.0':
-    optional: true
-
-  '@esbuild/netbsd-arm64@0.25.2':
-    optional: true
-
-  '@esbuild/netbsd-x64@0.25.0':
-    optional: true
-
-  '@esbuild/netbsd-x64@0.25.2':
-    optional: true
-
-  '@esbuild/openbsd-arm64@0.25.0':
-    optional: true
-
-  '@esbuild/openbsd-arm64@0.25.2':
-    optional: true
-
-  '@esbuild/openbsd-x64@0.25.0':
-    optional: true
-
-  '@esbuild/openbsd-x64@0.25.2':
-    optional: true
-
-  '@esbuild/sunos-x64@0.25.0':
-    optional: true
-
-  '@esbuild/sunos-x64@0.25.2':
-    optional: true
-
-  '@esbuild/win32-arm64@0.25.0':
-    optional: true
-
-  '@esbuild/win32-arm64@0.25.2':
-    optional: true
-
-  '@esbuild/win32-ia32@0.25.0':
-    optional: true
-
-  '@esbuild/win32-ia32@0.25.2':
-    optional: true
-
-  '@esbuild/win32-x64@0.25.0':
-    optional: true
-
-  '@esbuild/win32-x64@0.25.2':
-    optional: true
-
-  '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.24.0(jiti@1.21.7))':
-    dependencies:
-      escape-string-regexp: 4.0.0
-      eslint: 9.24.0(jiti@1.21.7)
-      ignore: 5.3.2
-
-  '@eslint-community/eslint-utils@4.5.1(eslint@9.24.0(jiti@1.21.7))':
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-visitor-keys: 3.4.3
-
-  '@eslint-community/regexpp@4.12.1': {}
-
-  '@eslint-react/ast@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-react/eff': 1.45.0
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/typescript-estree': 8.29.1(typescript@4.9.5)
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      string-ts: 2.2.1
-      ts-pattern: 5.7.0
-    transitivePeerDependencies:
-      - eslint
-      - supports-color
-      - typescript
-
-  '@eslint-react/core@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/jsx': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/shared': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/var': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      birecord: 0.1.1
-      ts-pattern: 5.7.0
-    transitivePeerDependencies:
-      - eslint
-      - supports-color
-      - typescript
-
-  '@eslint-react/eff@1.45.0': {}
-
-  '@eslint-react/eslint-plugin@1.45.0(eslint@9.24.0(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@4.9.5))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/shared': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-plugin-react-debug: 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-react-dom: 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-react-hooks-extra: 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-react-naming-convention: 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-react-web-api: 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint-plugin-react-x: 1.45.0(eslint@9.24.0(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@4.9.5))(typescript@4.9.5)
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-      - ts-api-utils
-
-  '@eslint-react/jsx@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/var': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      ts-pattern: 5.7.0
-    transitivePeerDependencies:
-      - eslint
-      - supports-color
-      - typescript
-
-  '@eslint-react/kit@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-react/eff': 1.45.0
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      ts-pattern: 5.7.0
-      valibot: 1.0.0(typescript@4.9.5)
-    transitivePeerDependencies:
-      - eslint
-      - supports-color
-      - typescript
-
-  '@eslint-react/shared@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@zod/mini': 4.0.0-beta.0
-      picomatch: 4.0.2
-      ts-pattern: 5.7.0
-    transitivePeerDependencies:
-      - eslint
-      - supports-color
-      - typescript
-
-  '@eslint-react/var@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      string-ts: 2.2.1
-      ts-pattern: 5.7.0
-    transitivePeerDependencies:
-      - eslint
-      - supports-color
-      - typescript
-
-  '@eslint/compat@1.2.8(eslint@9.24.0(jiti@1.21.7))':
-    optionalDependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-
-  '@eslint/config-array@0.20.0':
-    dependencies:
-      '@eslint/object-schema': 2.1.6
-      debug: 4.4.0
-      minimatch: 3.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@eslint/config-helpers@0.2.1': {}
-
-  '@eslint/core@0.10.0':
-    dependencies:
-      '@types/json-schema': 7.0.15
-
-  '@eslint/core@0.12.0':
-    dependencies:
-      '@types/json-schema': 7.0.15
-
-  '@eslint/core@0.13.0':
-    dependencies:
-      '@types/json-schema': 7.0.15
-
-  '@eslint/eslintrc@3.3.1':
-    dependencies:
-      ajv: 6.12.6
-      debug: 4.4.0
-      espree: 10.3.0
-      globals: 14.0.0
-      ignore: 5.3.2
-      import-fresh: 3.3.1
-      js-yaml: 4.1.0
-      minimatch: 3.1.2
-      strip-json-comments: 3.1.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@eslint/js@9.24.0': {}
-
-  '@eslint/markdown@6.3.0':
-    dependencies:
-      '@eslint/core': 0.10.0
-      '@eslint/plugin-kit': 0.2.8
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-gfm: 3.1.0
-      micromark-extension-gfm: 3.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@eslint/object-schema@2.1.6': {}
-
-  '@eslint/plugin-kit@0.2.8':
-    dependencies:
-      '@eslint/core': 0.13.0
-      levn: 0.4.1
-
-  '@faker-js/faker@9.6.0': {}
-
-  '@floating-ui/core@1.6.9':
-    dependencies:
-      '@floating-ui/utils': 0.2.9
-
-  '@floating-ui/dom@1.1.1':
-    dependencies:
-      '@floating-ui/core': 1.6.9
-
-  '@floating-ui/dom@1.6.13':
-    dependencies:
-      '@floating-ui/core': 1.6.9
-      '@floating-ui/utils': 0.2.9
-
-  '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@floating-ui/dom': 1.6.13
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@floating-ui/react@0.26.28(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@floating-ui/utils': 0.2.9
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      tabbable: 6.2.0
-
-  '@floating-ui/utils@0.2.9': {}
-
-  '@formatjs/intl-localematcher@0.5.10':
-    dependencies:
-      tslib: 2.8.1
-
-  '@happy-dom/jest-environment@17.4.4':
-    dependencies:
-      '@jest/environment': 29.7.0
-      '@jest/fake-timers': 29.7.0
-      '@jest/types': 29.6.3
-      happy-dom: 17.4.4
-      jest-mock: 29.7.0
-      jest-util: 29.7.0
-
-  '@headlessui/react@2.2.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@floating-ui/react': 0.26.28(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@react-aria/focus': 3.20.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@react-aria/interactions': 3.24.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@tanstack/react-virtual': 3.13.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@heroicons/react@2.2.0(react@19.0.0)':
-    dependencies:
-      react: 19.0.0
-
-  '@hookform/resolvers@3.10.0(react-hook-form@7.55.0(react@19.0.0))':
-    dependencies:
-      react-hook-form: 7.55.0(react@19.0.0)
-
-  '@humanfs/core@0.19.1': {}
-
-  '@humanfs/node@0.16.6':
-    dependencies:
-      '@humanfs/core': 0.19.1
-      '@humanwhocodes/retry': 0.3.1
-
-  '@humanwhocodes/module-importer@1.0.1': {}
-
-  '@humanwhocodes/retry@0.3.1': {}
-
-  '@humanwhocodes/retry@0.4.2': {}
-
-  '@iconify/types@2.0.0': {}
-
-  '@iconify/utils@2.3.0':
-    dependencies:
-      '@antfu/install-pkg': 1.0.0
-      '@antfu/utils': 8.1.1
-      '@iconify/types': 2.0.0
-      debug: 4.4.0
-      globals: 15.15.0
-      kolorist: 1.8.0
-      local-pkg: 1.1.1
-      mlly: 1.7.4
-    transitivePeerDependencies:
-      - supports-color
-
-  '@img/sharp-darwin-arm64@0.33.5':
-    optionalDependencies:
-      '@img/sharp-libvips-darwin-arm64': 1.0.4
-    optional: true
-
-  '@img/sharp-darwin-x64@0.33.5':
-    optionalDependencies:
-      '@img/sharp-libvips-darwin-x64': 1.0.4
-    optional: true
-
-  '@img/sharp-libvips-darwin-arm64@1.0.4':
-    optional: true
-
-  '@img/sharp-libvips-darwin-x64@1.0.4':
-    optional: true
-
-  '@img/sharp-libvips-linux-arm64@1.0.4':
-    optional: true
-
-  '@img/sharp-libvips-linux-arm@1.0.5':
-    optional: true
-
-  '@img/sharp-libvips-linux-s390x@1.0.4':
-    optional: true
-
-  '@img/sharp-libvips-linux-x64@1.0.4':
-    optional: true
-
-  '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
-    optional: true
-
-  '@img/sharp-libvips-linuxmusl-x64@1.0.4':
-    optional: true
-
-  '@img/sharp-linux-arm64@0.33.5':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-arm64': 1.0.4
-    optional: true
-
-  '@img/sharp-linux-arm@0.33.5':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-arm': 1.0.5
-    optional: true
-
-  '@img/sharp-linux-s390x@0.33.5':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-s390x': 1.0.4
-    optional: true
-
-  '@img/sharp-linux-x64@0.33.5':
-    optionalDependencies:
-      '@img/sharp-libvips-linux-x64': 1.0.4
-    optional: true
-
-  '@img/sharp-linuxmusl-arm64@0.33.5':
-    optionalDependencies:
-      '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
-    optional: true
-
-  '@img/sharp-linuxmusl-x64@0.33.5':
-    optionalDependencies:
-      '@img/sharp-libvips-linuxmusl-x64': 1.0.4
-    optional: true
-
-  '@img/sharp-wasm32@0.33.5':
-    dependencies:
-      '@emnapi/runtime': 1.4.0
-    optional: true
-
-  '@img/sharp-win32-ia32@0.33.5':
-    optional: true
-
-  '@img/sharp-win32-x64@0.33.5':
-    optional: true
-
-  '@isaacs/cliui@8.0.2':
-    dependencies:
-      string-width: 4.2.3
-      string-width-cjs: string-width@4.2.3
-      strip-ansi: 7.1.0
-      strip-ansi-cjs: strip-ansi@6.0.1
-      wrap-ansi: 8.1.0
-      wrap-ansi-cjs: wrap-ansi@7.0.0
-
-  '@istanbuljs/load-nyc-config@1.1.0':
-    dependencies:
-      camelcase: 5.3.1
-      find-up: 4.1.0
-      get-package-type: 0.1.0
-      js-yaml: 3.14.1
-      resolve-from: 5.0.0
-
-  '@istanbuljs/schema@0.1.3': {}
-
-  '@jest/console@29.7.0':
-    dependencies:
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      chalk: 4.1.2
-      jest-message-util: 29.7.0
-      jest-util: 29.7.0
-      slash: 3.0.0
-
-  '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))':
-    dependencies:
-      '@jest/console': 29.7.0
-      '@jest/reporters': 29.7.0
-      '@jest/test-result': 29.7.0
-      '@jest/transform': 29.7.0
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      ansi-escapes: 4.3.2
-      chalk: 4.1.2
-      ci-info: 3.9.0
-      exit: 0.1.2
-      graceful-fs: 4.2.11
-      jest-changed-files: 29.7.0
-      jest-config: 29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      jest-haste-map: 29.7.0
-      jest-message-util: 29.7.0
-      jest-regex-util: 29.6.3
-      jest-resolve: 29.7.0
-      jest-resolve-dependencies: 29.7.0
-      jest-runner: 29.7.0
-      jest-runtime: 29.7.0
-      jest-snapshot: 29.7.0
-      jest-util: 29.7.0
-      jest-validate: 29.7.0
-      jest-watcher: 29.7.0
-      micromatch: 4.0.8
-      pretty-format: 29.7.0
-      slash: 3.0.0
-      strip-ansi: 6.0.1
-    transitivePeerDependencies:
-      - babel-plugin-macros
-      - supports-color
-      - ts-node
-
-  '@jest/environment@29.7.0':
-    dependencies:
-      '@jest/fake-timers': 29.7.0
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      jest-mock: 29.7.0
-
-  '@jest/expect-utils@29.7.0':
-    dependencies:
-      jest-get-type: 29.6.3
-
-  '@jest/expect@29.7.0':
-    dependencies:
-      expect: 29.7.0
-      jest-snapshot: 29.7.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@jest/fake-timers@29.7.0':
-    dependencies:
-      '@jest/types': 29.6.3
-      '@sinonjs/fake-timers': 10.3.0
-      '@types/node': 18.15.0
-      jest-message-util: 29.7.0
-      jest-mock: 29.7.0
-      jest-util: 29.7.0
-
-  '@jest/globals@29.7.0':
-    dependencies:
-      '@jest/environment': 29.7.0
-      '@jest/expect': 29.7.0
-      '@jest/types': 29.6.3
-      jest-mock: 29.7.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@jest/reporters@29.7.0':
-    dependencies:
-      '@bcoe/v8-coverage': 0.2.3
-      '@jest/console': 29.7.0
-      '@jest/test-result': 29.7.0
-      '@jest/transform': 29.7.0
-      '@jest/types': 29.6.3
-      '@jridgewell/trace-mapping': 0.3.25
-      '@types/node': 18.15.0
-      chalk: 4.1.2
-      collect-v8-coverage: 1.0.2
-      exit: 0.1.2
-      glob: 7.2.3
-      graceful-fs: 4.2.11
-      istanbul-lib-coverage: 3.2.2
-      istanbul-lib-instrument: 6.0.3
-      istanbul-lib-report: 3.0.1
-      istanbul-lib-source-maps: 4.0.1
-      istanbul-reports: 3.1.7
-      jest-message-util: 29.7.0
-      jest-util: 29.7.0
-      jest-worker: 29.7.0
-      slash: 3.0.0
-      string-length: 4.0.2
-      strip-ansi: 6.0.1
-      v8-to-istanbul: 9.3.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@jest/schemas@29.6.3':
-    dependencies:
-      '@sinclair/typebox': 0.27.8
-
-  '@jest/source-map@29.6.3':
-    dependencies:
-      '@jridgewell/trace-mapping': 0.3.25
-      callsites: 3.1.0
-      graceful-fs: 4.2.11
-
-  '@jest/test-result@29.7.0':
-    dependencies:
-      '@jest/console': 29.7.0
-      '@jest/types': 29.6.3
-      '@types/istanbul-lib-coverage': 2.0.6
-      collect-v8-coverage: 1.0.2
-
-  '@jest/test-sequencer@29.7.0':
-    dependencies:
-      '@jest/test-result': 29.7.0
-      graceful-fs: 4.2.11
-      jest-haste-map: 29.7.0
-      slash: 3.0.0
-
-  '@jest/transform@29.7.0':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@jest/types': 29.6.3
-      '@jridgewell/trace-mapping': 0.3.25
-      babel-plugin-istanbul: 6.1.1
-      chalk: 4.1.2
-      convert-source-map: 2.0.0
-      fast-json-stable-stringify: 2.1.0
-      graceful-fs: 4.2.11
-      jest-haste-map: 29.7.0
-      jest-regex-util: 29.6.3
-      jest-util: 29.7.0
-      micromatch: 4.0.8
-      pirates: 4.0.7
-      slash: 3.0.0
-      write-file-atomic: 4.0.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@jest/types@29.6.3':
-    dependencies:
-      '@jest/schemas': 29.6.3
-      '@types/istanbul-lib-coverage': 2.0.6
-      '@types/istanbul-reports': 3.0.4
-      '@types/node': 18.15.0
-      '@types/yargs': 17.0.33
-      chalk: 4.1.2
-
-  '@jridgewell/gen-mapping@0.3.8':
-    dependencies:
-      '@jridgewell/set-array': 1.2.1
-      '@jridgewell/sourcemap-codec': 1.5.0
-      '@jridgewell/trace-mapping': 0.3.25
-
-  '@jridgewell/resolve-uri@3.1.2': {}
-
-  '@jridgewell/set-array@1.2.1': {}
-
-  '@jridgewell/source-map@0.3.6':
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.8
-      '@jridgewell/trace-mapping': 0.3.25
-
-  '@jridgewell/sourcemap-codec@1.5.0': {}
-
-  '@jridgewell/trace-mapping@0.3.25':
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.2
-      '@jridgewell/sourcemap-codec': 1.5.0
-
-  '@jridgewell/trace-mapping@0.3.9':
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.2
-      '@jridgewell/sourcemap-codec': 1.5.0
-
-  '@lexical/clipboard@0.30.0':
-    dependencies:
-      '@lexical/html': 0.30.0
-      '@lexical/list': 0.30.0
-      '@lexical/selection': 0.30.0
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/code@0.30.0':
-    dependencies:
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-      prismjs: 1.30.0
-
-  '@lexical/devtools-core@0.30.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@lexical/html': 0.30.0
-      '@lexical/link': 0.30.0
-      '@lexical/mark': 0.30.0
-      '@lexical/table': 0.30.0
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@lexical/dragon@0.30.0':
-    dependencies:
-      lexical: 0.30.0
-
-  '@lexical/hashtag@0.30.0':
-    dependencies:
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/history@0.30.0':
-    dependencies:
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/html@0.30.0':
-    dependencies:
-      '@lexical/selection': 0.30.0
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/link@0.30.0':
-    dependencies:
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/list@0.30.0':
-    dependencies:
-      '@lexical/selection': 0.30.0
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/mark@0.30.0':
-    dependencies:
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/markdown@0.30.0':
-    dependencies:
-      '@lexical/code': 0.30.0
-      '@lexical/link': 0.30.0
-      '@lexical/list': 0.30.0
-      '@lexical/rich-text': 0.30.0
-      '@lexical/text': 0.30.0
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/offset@0.30.0':
-    dependencies:
-      lexical: 0.30.0
-
-  '@lexical/overflow@0.30.0':
-    dependencies:
-      lexical: 0.30.0
-
-  '@lexical/plain-text@0.30.0':
-    dependencies:
-      '@lexical/clipboard': 0.30.0
-      '@lexical/selection': 0.30.0
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/react@0.30.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(yjs@13.6.24)':
-    dependencies:
-      '@lexical/devtools-core': 0.30.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@lexical/dragon': 0.30.0
-      '@lexical/hashtag': 0.30.0
-      '@lexical/history': 0.30.0
-      '@lexical/link': 0.30.0
-      '@lexical/list': 0.30.0
-      '@lexical/mark': 0.30.0
-      '@lexical/markdown': 0.30.0
-      '@lexical/overflow': 0.30.0
-      '@lexical/plain-text': 0.30.0
-      '@lexical/rich-text': 0.30.0
-      '@lexical/table': 0.30.0
-      '@lexical/text': 0.30.0
-      '@lexical/utils': 0.30.0
-      '@lexical/yjs': 0.30.0(yjs@13.6.24)
-      lexical: 0.30.0
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      react-error-boundary: 3.1.4(react@19.0.0)
-    transitivePeerDependencies:
-      - yjs
-
-  '@lexical/rich-text@0.30.0':
-    dependencies:
-      '@lexical/clipboard': 0.30.0
-      '@lexical/selection': 0.30.0
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/selection@0.30.0':
-    dependencies:
-      lexical: 0.30.0
-
-  '@lexical/table@0.30.0':
-    dependencies:
-      '@lexical/clipboard': 0.30.0
-      '@lexical/utils': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/text@0.30.0':
-    dependencies:
-      lexical: 0.30.0
-
-  '@lexical/utils@0.30.0':
-    dependencies:
-      '@lexical/list': 0.30.0
-      '@lexical/selection': 0.30.0
-      '@lexical/table': 0.30.0
-      lexical: 0.30.0
-
-  '@lexical/yjs@0.30.0(yjs@13.6.24)':
-    dependencies:
-      '@lexical/offset': 0.30.0
-      '@lexical/selection': 0.30.0
-      lexical: 0.30.0
-      yjs: 13.6.24
-
-  '@mapbox/node-pre-gyp@1.0.11':
-    dependencies:
-      detect-libc: 2.0.3
-      https-proxy-agent: 5.0.1
-      make-dir: 3.1.0
-      node-fetch: 2.7.0
-      nopt: 5.0.0
-      npmlog: 5.0.1
-      rimraf: 3.0.2
-      semver: 7.7.1
-      tar: 6.2.1
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-    optional: true
-
-  '@mdx-js/loader@3.1.0(acorn@8.14.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))':
-    dependencies:
-      '@mdx-js/mdx': 3.1.0(acorn@8.14.1)
-      source-map: 0.7.4
-    optionalDependencies:
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-    transitivePeerDependencies:
-      - acorn
-      - supports-color
-
-  '@mdx-js/mdx@3.1.0(acorn@8.14.1)':
-    dependencies:
-      '@types/estree': 1.0.7
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      '@types/mdx': 2.0.13
-      collapse-white-space: 2.1.0
-      devlop: 1.1.0
-      estree-util-is-identifier-name: 3.0.0
-      estree-util-scope: 1.0.0
-      estree-walker: 3.0.3
-      hast-util-to-jsx-runtime: 2.3.6
-      markdown-extensions: 2.0.0
-      recma-build-jsx: 1.0.0
-      recma-jsx: 1.0.0(acorn@8.14.1)
-      recma-stringify: 1.0.0
-      rehype-recma: 1.0.0
-      remark-mdx: 3.1.0
-      remark-parse: 11.0.0
-      remark-rehype: 11.1.2
-      source-map: 0.7.4
-      unified: 11.0.5
-      unist-util-position-from-estree: 2.0.0
-      unist-util-stringify-position: 4.0.0
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-    transitivePeerDependencies:
-      - acorn
-      - supports-color
-
-  '@mdx-js/react@3.1.0(@types/react@18.2.79)(react@18.3.1)':
-    dependencies:
-      '@types/mdx': 2.0.13
-      '@types/react': 18.2.79
-      react: 18.3.1
-
-  '@mdx-js/react@3.1.0(@types/react@18.2.79)(react@19.0.0)':
-    dependencies:
-      '@types/mdx': 2.0.13
-      '@types/react': 18.2.79
-      react: 19.0.0
-
-  '@mermaid-js/parser@0.3.0':
-    dependencies:
-      langium: 3.0.0
-
-  '@monaco-editor/loader@1.5.0':
-    dependencies:
-      state-local: 1.0.7
-
-  '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@monaco-editor/loader': 1.5.0
-      monaco-editor: 0.52.2
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@napi-rs/wasm-runtime@0.2.8':
-    dependencies:
-      '@emnapi/core': 1.4.0
-      '@emnapi/runtime': 1.4.0
-      '@tybys/wasm-util': 0.9.0
-    optional: true
-
-  '@next/env@15.2.3': {}
-
-  '@next/eslint-plugin-next@15.3.0':
-    dependencies:
-      fast-glob: 3.3.1
-
-  '@next/mdx@15.2.3(@mdx-js/loader@3.1.0(acorn@8.14.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)))(@mdx-js/react@3.1.0(@types/react@18.2.79)(react@19.0.0))':
-    dependencies:
-      source-map: 0.7.4
-    optionalDependencies:
-      '@mdx-js/loader': 3.1.0(acorn@8.14.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      '@mdx-js/react': 3.1.0(@types/react@18.2.79)(react@19.0.0)
-
-  '@next/swc-darwin-arm64@15.2.3':
-    optional: true
-
-  '@next/swc-darwin-x64@15.2.3':
-    optional: true
-
-  '@next/swc-linux-arm64-gnu@15.2.3':
-    optional: true
-
-  '@next/swc-linux-arm64-musl@15.2.3':
-    optional: true
-
-  '@next/swc-linux-x64-gnu@15.2.3':
-    optional: true
-
-  '@next/swc-linux-x64-musl@15.2.3':
-    optional: true
-
-  '@next/swc-win32-arm64-msvc@15.2.3':
-    optional: true
-
-  '@next/swc-win32-x64-msvc@15.2.3':
-    optional: true
-
-  '@nodelib/fs.scandir@2.1.5':
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      run-parallel: 1.2.0
-
-  '@nodelib/fs.stat@2.0.5': {}
-
-  '@nodelib/fs.walk@1.2.8':
-    dependencies:
-      '@nodelib/fs.scandir': 2.1.5
-      fastq: 1.19.1
-
-  '@nolyfill/is-core-module@1.0.39': {}
-
-  '@octokit/auth-token@5.1.2': {}
-
-  '@octokit/core@6.1.5':
-    dependencies:
-      '@octokit/auth-token': 5.1.2
-      '@octokit/graphql': 8.2.2
-      '@octokit/request': 9.2.3
-      '@octokit/request-error': 6.1.8
-      '@octokit/types': 14.0.0
-      before-after-hook: 3.0.2
-      universal-user-agent: 7.0.2
-
-  '@octokit/endpoint@10.1.4':
-    dependencies:
-      '@octokit/types': 14.0.0
-      universal-user-agent: 7.0.2
-
-  '@octokit/graphql@8.2.2':
-    dependencies:
-      '@octokit/request': 9.2.3
-      '@octokit/types': 14.0.0
-      universal-user-agent: 7.0.2
-
-  '@octokit/openapi-types@25.0.0': {}
-
-  '@octokit/request-error@6.1.8':
-    dependencies:
-      '@octokit/types': 14.0.0
-
-  '@octokit/request@9.2.3':
-    dependencies:
-      '@octokit/endpoint': 10.1.4
-      '@octokit/request-error': 6.1.8
-      '@octokit/types': 14.0.0
-      fast-content-type-parse: 2.0.1
-      universal-user-agent: 7.0.2
-
-  '@octokit/types@14.0.0':
-    dependencies:
-      '@octokit/openapi-types': 25.0.0
-
-  '@parcel/watcher-android-arm64@2.5.1':
-    optional: true
-
-  '@parcel/watcher-darwin-arm64@2.5.1':
-    optional: true
-
-  '@parcel/watcher-darwin-x64@2.5.1':
-    optional: true
-
-  '@parcel/watcher-freebsd-x64@2.5.1':
-    optional: true
-
-  '@parcel/watcher-linux-arm-glibc@2.5.1':
-    optional: true
-
-  '@parcel/watcher-linux-arm-musl@2.5.1':
-    optional: true
-
-  '@parcel/watcher-linux-arm64-glibc@2.5.1':
-    optional: true
-
-  '@parcel/watcher-linux-arm64-musl@2.5.1':
-    optional: true
-
-  '@parcel/watcher-linux-x64-glibc@2.5.1':
-    optional: true
-
-  '@parcel/watcher-linux-x64-musl@2.5.1':
-    optional: true
-
-  '@parcel/watcher-win32-arm64@2.5.1':
-    optional: true
-
-  '@parcel/watcher-win32-ia32@2.5.1':
-    optional: true
-
-  '@parcel/watcher-win32-x64@2.5.1':
-    optional: true
-
-  '@parcel/watcher@2.5.1':
-    dependencies:
-      detect-libc: 1.0.3
-      is-glob: 4.0.3
-      micromatch: 4.0.8
-      node-addon-api: 7.1.1
-    optionalDependencies:
-      '@parcel/watcher-android-arm64': 2.5.1
-      '@parcel/watcher-darwin-arm64': 2.5.1
-      '@parcel/watcher-darwin-x64': 2.5.1
-      '@parcel/watcher-freebsd-x64': 2.5.1
-      '@parcel/watcher-linux-arm-glibc': 2.5.1
-      '@parcel/watcher-linux-arm-musl': 2.5.1
-      '@parcel/watcher-linux-arm64-glibc': 2.5.1
-      '@parcel/watcher-linux-arm64-musl': 2.5.1
-      '@parcel/watcher-linux-x64-glibc': 2.5.1
-      '@parcel/watcher-linux-x64-musl': 2.5.1
-      '@parcel/watcher-win32-arm64': 2.5.1
-      '@parcel/watcher-win32-ia32': 2.5.1
-      '@parcel/watcher-win32-x64': 2.5.1
-    optional: true
-
-  '@pkgjs/parseargs@0.11.0':
-    optional: true
-
-  '@pkgr/core@0.1.2': {}
-
-  '@pkgr/core@0.2.2': {}
-
-  '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@4.39.1)(webpack-hot-middleware@2.26.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))':
-    dependencies:
-      ansi-html: 0.0.9
-      core-js-pure: 3.41.0
-      error-stack-parser: 2.1.4
-      html-entities: 2.6.0
-      loader-utils: 2.0.4
-      react-refresh: 0.14.2
-      schema-utils: 4.3.0
-      source-map: 0.7.4
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-    optionalDependencies:
-      type-fest: 4.39.1
-      webpack-hot-middleware: 2.26.1
-
-  '@react-aria/focus@3.20.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@react-aria/interactions': 3.24.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@react-aria/utils': 3.28.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@react-types/shared': 3.28.0(react@19.0.0)
-      '@swc/helpers': 0.5.17
-      clsx: 2.1.1
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@react-aria/interactions@3.24.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@react-aria/ssr': 3.9.7(react@19.0.0)
-      '@react-aria/utils': 3.28.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@react-stately/flags': 3.1.0
-      '@react-types/shared': 3.28.0(react@19.0.0)
-      '@swc/helpers': 0.5.17
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@react-aria/ssr@3.9.7(react@19.0.0)':
-    dependencies:
-      '@swc/helpers': 0.5.17
-      react: 19.0.0
-
-  '@react-aria/utils@3.28.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@react-aria/ssr': 3.9.7(react@19.0.0)
-      '@react-stately/flags': 3.1.0
-      '@react-stately/utils': 3.10.5(react@19.0.0)
-      '@react-types/shared': 3.28.0(react@19.0.0)
-      '@swc/helpers': 0.5.17
-      clsx: 2.1.1
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@react-stately/flags@3.1.0':
-    dependencies:
-      '@swc/helpers': 0.5.17
-
-  '@react-stately/utils@3.10.5(react@19.0.0)':
-    dependencies:
-      '@swc/helpers': 0.5.17
-      react: 19.0.0
-
-  '@react-types/shared@3.28.0(react@19.0.0)':
-    dependencies:
-      react: 19.0.0
-
-  '@reactflow/background@11.3.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@reactflow/core': 11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      classcat: 5.0.5
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      zustand: 4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-      - immer
-
-  '@reactflow/controls@11.2.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@reactflow/core': 11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      classcat: 5.0.5
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      zustand: 4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-      - immer
-
-  '@reactflow/core@11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@types/d3': 7.4.3
-      '@types/d3-drag': 3.0.7
-      '@types/d3-selection': 3.0.11
-      '@types/d3-zoom': 3.0.8
-      classcat: 5.0.5
-      d3-drag: 3.0.0
-      d3-selection: 3.0.0
-      d3-zoom: 3.0.0
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      zustand: 4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-      - immer
-
-  '@reactflow/minimap@11.7.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@reactflow/core': 11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@types/d3-selection': 3.0.11
-      '@types/d3-zoom': 3.0.8
-      classcat: 5.0.5
-      d3-selection: 3.0.0
-      d3-zoom: 3.0.0
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      zustand: 4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-      - immer
-
-  '@reactflow/node-resizer@2.2.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@reactflow/core': 11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      classcat: 5.0.5
-      d3-drag: 3.0.0
-      d3-selection: 3.0.0
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      zustand: 4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-      - immer
-
-  '@reactflow/node-toolbar@1.3.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@reactflow/core': 11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      classcat: 5.0.5
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      zustand: 4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-      - immer
-
-  '@remixicon/react@4.6.0(react@19.0.0)':
-    dependencies:
-      react: 19.0.0
-
-  '@rgrove/parse-xml@4.2.0': {}
-
-  '@rollup/rollup-android-arm-eabi@4.39.0':
-    optional: true
-
-  '@rollup/rollup-android-arm64@4.39.0':
-    optional: true
-
-  '@rollup/rollup-darwin-arm64@4.39.0':
-    optional: true
-
-  '@rollup/rollup-darwin-x64@4.39.0':
-    optional: true
-
-  '@rollup/rollup-freebsd-arm64@4.39.0':
-    optional: true
-
-  '@rollup/rollup-freebsd-x64@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-arm-gnueabihf@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-arm-musleabihf@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-arm64-gnu@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-arm64-musl@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-loongarch64-gnu@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-powerpc64le-gnu@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-riscv64-gnu@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-riscv64-musl@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-s390x-gnu@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-x64-gnu@4.39.0':
-    optional: true
-
-  '@rollup/rollup-linux-x64-musl@4.39.0':
-    optional: true
-
-  '@rollup/rollup-win32-arm64-msvc@4.39.0':
-    optional: true
-
-  '@rollup/rollup-win32-ia32-msvc@4.39.0':
-    optional: true
-
-  '@rollup/rollup-win32-x64-msvc@4.39.0':
-    optional: true
-
-  '@rtsao/scc@1.1.0': {}
-
-  '@rushstack/eslint-patch@1.11.0': {}
-
-  '@sentry-internal/browser-utils@8.55.0':
-    dependencies:
-      '@sentry/core': 8.55.0
-
-  '@sentry-internal/feedback@8.55.0':
-    dependencies:
-      '@sentry/core': 8.55.0
-
-  '@sentry-internal/replay-canvas@8.55.0':
-    dependencies:
-      '@sentry-internal/replay': 8.55.0
-      '@sentry/core': 8.55.0
-
-  '@sentry-internal/replay@8.55.0':
-    dependencies:
-      '@sentry-internal/browser-utils': 8.55.0
-      '@sentry/core': 8.55.0
-
-  '@sentry/browser@8.55.0':
-    dependencies:
-      '@sentry-internal/browser-utils': 8.55.0
-      '@sentry-internal/feedback': 8.55.0
-      '@sentry-internal/replay': 8.55.0
-      '@sentry-internal/replay-canvas': 8.55.0
-      '@sentry/core': 8.55.0
-
-  '@sentry/core@8.55.0': {}
-
-  '@sentry/react@8.55.0(react@19.0.0)':
-    dependencies:
-      '@sentry/browser': 8.55.0
-      '@sentry/core': 8.55.0
-      hoist-non-react-statics: 3.3.2
-      react: 19.0.0
-
-  '@sentry/utils@8.55.0':
-    dependencies:
-      '@sentry/core': 8.55.0
-
-  '@sinclair/typebox@0.27.8': {}
-
-  '@sindresorhus/is@4.6.0': {}
-
-  '@sinonjs/commons@3.0.1':
-    dependencies:
-      type-detect: 4.0.8
-
-  '@sinonjs/fake-timers@10.3.0':
-    dependencies:
-      '@sinonjs/commons': 3.0.1
-
-  '@storybook/addon-actions@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/global': 5.0.0
-      '@types/uuid': 9.0.8
-      dequal: 2.0.3
-      polished: 4.3.1
-      storybook: 8.5.0
-      uuid: 9.0.1
-
-  '@storybook/addon-backgrounds@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/global': 5.0.0
-      memoizerific: 1.11.3
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-
-  '@storybook/addon-controls@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/global': 5.0.0
-      dequal: 2.0.3
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-
-  '@storybook/addon-docs@8.5.0(@types/react@18.2.79)(storybook@8.5.0)':
-    dependencies:
-      '@mdx-js/react': 3.1.0(@types/react@18.2.79)(react@18.3.1)
-      '@storybook/blocks': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)
-      '@storybook/csf-plugin': 8.5.0(storybook@8.5.0)
-      '@storybook/react-dom-shim': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-    transitivePeerDependencies:
-      - '@types/react'
-
-  '@storybook/addon-essentials@8.5.0(@types/react@18.2.79)(storybook@8.5.0)':
-    dependencies:
-      '@storybook/addon-actions': 8.5.0(storybook@8.5.0)
-      '@storybook/addon-backgrounds': 8.5.0(storybook@8.5.0)
-      '@storybook/addon-controls': 8.5.0(storybook@8.5.0)
-      '@storybook/addon-docs': 8.5.0(@types/react@18.2.79)(storybook@8.5.0)
-      '@storybook/addon-highlight': 8.5.0(storybook@8.5.0)
-      '@storybook/addon-measure': 8.5.0(storybook@8.5.0)
-      '@storybook/addon-outline': 8.5.0(storybook@8.5.0)
-      '@storybook/addon-toolbars': 8.5.0(storybook@8.5.0)
-      '@storybook/addon-viewport': 8.5.0(storybook@8.5.0)
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-    transitivePeerDependencies:
-      - '@types/react'
-
-  '@storybook/addon-highlight@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/global': 5.0.0
-      storybook: 8.5.0
-
-  '@storybook/addon-interactions@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/global': 5.0.0
-      '@storybook/instrumenter': 8.5.0(storybook@8.5.0)
-      '@storybook/test': 8.5.0(storybook@8.5.0)
-      polished: 4.3.1
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-
-  '@storybook/addon-links@8.5.0(react@19.0.0)(storybook@8.5.0)':
-    dependencies:
-      '@storybook/csf': 0.1.12
-      '@storybook/global': 5.0.0
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-    optionalDependencies:
-      react: 19.0.0
-
-  '@storybook/addon-measure@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/global': 5.0.0
-      storybook: 8.5.0
-      tiny-invariant: 1.3.3
-
-  '@storybook/addon-onboarding@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-
-  '@storybook/addon-outline@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/global': 5.0.0
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-
-  '@storybook/addon-themes@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-
-  '@storybook/addon-toolbars@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-
-  '@storybook/addon-viewport@8.5.0(storybook@8.5.0)':
-    dependencies:
-      memoizerific: 1.11.3
-      storybook: 8.5.0
-
-  '@storybook/blocks@8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)':
-    dependencies:
-      '@storybook/csf': 0.1.12
-      '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-    optionalDependencies:
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-
-  '@storybook/blocks@8.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)':
-    dependencies:
-      '@storybook/csf': 0.1.12
-      '@storybook/icons': 1.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-    optionalDependencies:
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@storybook/builder-webpack5@8.5.0(esbuild@0.25.0)(storybook@8.5.0)(typescript@4.9.5)(uglify-js@3.19.3)':
-    dependencies:
-      '@storybook/core-webpack': 8.5.0(storybook@8.5.0)
-      '@types/semver': 7.7.0
-      browser-assert: 1.2.1
-      case-sensitive-paths-webpack-plugin: 2.4.0
-      cjs-module-lexer: 1.4.3
-      constants-browserify: 1.0.0
-      css-loader: 6.11.0(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      es-module-lexer: 1.6.0
-      fork-ts-checker-webpack-plugin: 8.0.0(typescript@4.9.5)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      html-webpack-plugin: 5.6.3(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      magic-string: 0.30.17
-      path-browserify: 1.0.1
-      process: 0.11.10
-      semver: 7.7.1
-      storybook: 8.5.0
-      style-loader: 3.3.4(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      terser-webpack-plugin: 5.3.14(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      ts-dedent: 2.2.0
-      url: 0.11.4
-      util: 0.12.5
-      util-deprecate: 1.0.2
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-      webpack-dev-middleware: 6.1.3(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      webpack-hot-middleware: 2.26.1
-      webpack-virtual-modules: 0.6.2
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - '@rspack/core'
-      - '@swc/core'
-      - esbuild
-      - uglify-js
-      - webpack-cli
-
-  '@storybook/components@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-
-  '@storybook/core-webpack@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-      ts-dedent: 2.2.0
-
-  '@storybook/core@8.5.0':
-    dependencies:
-      '@storybook/csf': 0.1.12
-      better-opn: 3.0.2
-      browser-assert: 1.2.1
-      esbuild: 0.25.0
-      esbuild-register: 3.6.0(esbuild@0.25.0)
-      jsdoc-type-pratt-parser: 4.1.0
-      process: 0.11.10
-      recast: 0.23.11
-      semver: 7.7.1
-      util: 0.12.5
-      ws: 8.18.1
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-
-  '@storybook/csf-plugin@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-      unplugin: 1.16.1
-
-  '@storybook/csf@0.1.12':
-    dependencies:
-      type-fest: 2.19.0
-
-  '@storybook/csf@0.1.13':
-    dependencies:
-      type-fest: 2.19.0
-
-  '@storybook/global@5.0.0': {}
-
-  '@storybook/icons@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
-    dependencies:
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-
-  '@storybook/icons@1.4.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@storybook/instrumenter@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/global': 5.0.0
-      '@vitest/utils': 2.1.9
-      storybook: 8.5.0
-
-  '@storybook/manager-api@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-
-  '@storybook/nextjs@8.5.0(esbuild@0.25.0)(next@15.2.3(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.86.3))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.86.3)(storybook@8.5.0)(type-fest@4.39.1)(typescript@4.9.5)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))':
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10)
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.10)
-      '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10)
-      '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.26.10)
-      '@babel/preset-env': 7.26.9(@babel/core@7.26.10)
-      '@babel/preset-react': 7.26.3(@babel/core@7.26.10)
-      '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10)
-      '@babel/runtime': 7.27.0
-      '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@4.39.1)(webpack-hot-middleware@2.26.1)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      '@storybook/builder-webpack5': 8.5.0(esbuild@0.25.0)(storybook@8.5.0)(typescript@4.9.5)(uglify-js@3.19.3)
-      '@storybook/preset-react-webpack': 8.5.0(@storybook/test@8.5.0(storybook@8.5.0))(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)(typescript@4.9.5)(uglify-js@3.19.3)
-      '@storybook/react': 8.5.0(@storybook/test@8.5.0(storybook@8.5.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)(typescript@4.9.5)
-      '@storybook/test': 8.5.0(storybook@8.5.0)
-      '@types/semver': 7.7.0
-      babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      css-loader: 6.11.0(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      find-up: 5.0.0
-      image-size: 1.2.1
-      loader-utils: 3.3.1
-      next: 15.2.3(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.86.3)
-      node-polyfill-webpack-plugin: 2.0.1(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      pnp-webpack-plugin: 1.7.0(typescript@4.9.5)
-      postcss: 8.5.3
-      postcss-loader: 8.1.1(postcss@8.5.3)(typescript@4.9.5)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      react-refresh: 0.14.2
-      resolve-url-loader: 5.0.0
-      sass-loader: 14.2.1(sass@1.86.3)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      semver: 7.7.1
-      storybook: 8.5.0
-      style-loader: 3.3.4(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0)
-      ts-dedent: 2.2.0
-      tsconfig-paths: 4.2.0
-      tsconfig-paths-webpack-plugin: 4.2.0
-    optionalDependencies:
-      sharp: 0.33.5
-      typescript: 4.9.5
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-    transitivePeerDependencies:
-      - '@rspack/core'
-      - '@swc/core'
-      - '@types/webpack'
-      - babel-plugin-macros
-      - esbuild
-      - node-sass
-      - sass
-      - sass-embedded
-      - sockjs-client
-      - supports-color
-      - type-fest
-      - uglify-js
-      - webpack-cli
-      - webpack-dev-server
-      - webpack-hot-middleware
-      - webpack-plugin-serve
-
-  '@storybook/preset-react-webpack@8.5.0(@storybook/test@8.5.0(storybook@8.5.0))(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)(typescript@4.9.5)(uglify-js@3.19.3)':
-    dependencies:
-      '@storybook/core-webpack': 8.5.0(storybook@8.5.0)
-      '@storybook/react': 8.5.0(@storybook/test@8.5.0(storybook@8.5.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)(typescript@4.9.5)
-      '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@4.9.5)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      '@types/semver': 7.7.0
-      find-up: 5.0.0
-      magic-string: 0.30.17
-      react: 19.0.0
-      react-docgen: 7.1.1
-      react-dom: 19.0.0(react@19.0.0)
-      resolve: 1.22.10
-      semver: 7.7.1
-      storybook: 8.5.0
-      tsconfig-paths: 4.2.0
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - '@storybook/test'
-      - '@swc/core'
-      - esbuild
-      - supports-color
-      - uglify-js
-      - webpack-cli
-
-  '@storybook/preview-api@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-
-  '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@4.9.5)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))':
-    dependencies:
-      debug: 4.4.0
-      endent: 2.1.0
-      find-cache-dir: 3.3.2
-      flat-cache: 3.2.0
-      micromatch: 4.0.8
-      react-docgen-typescript: 2.2.2(typescript@4.9.5)
-      tslib: 2.8.1
-      typescript: 4.9.5
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@storybook/react-dom-shim@8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0)':
-    dependencies:
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      storybook: 8.5.0
-
-  '@storybook/react-dom-shim@8.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)':
-    dependencies:
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      storybook: 8.5.0
-
-  '@storybook/react@8.5.0(@storybook/test@8.5.0(storybook@8.5.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)(typescript@4.9.5)':
-    dependencies:
-      '@storybook/components': 8.5.0(storybook@8.5.0)
-      '@storybook/global': 5.0.0
-      '@storybook/manager-api': 8.5.0(storybook@8.5.0)
-      '@storybook/preview-api': 8.5.0(storybook@8.5.0)
-      '@storybook/react-dom-shim': 8.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.0)
-      '@storybook/theming': 8.5.0(storybook@8.5.0)
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      storybook: 8.5.0
-    optionalDependencies:
-      '@storybook/test': 8.5.0(storybook@8.5.0)
-      typescript: 4.9.5
-
-  '@storybook/test@8.5.0(storybook@8.5.0)':
-    dependencies:
-      '@storybook/csf': 0.1.12
-      '@storybook/global': 5.0.0
-      '@storybook/instrumenter': 8.5.0(storybook@8.5.0)
-      '@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: 8.5.0
-
-  '@storybook/theming@8.5.0(storybook@8.5.0)':
-    dependencies:
-      storybook: 8.5.0
-
-  '@stylistic/eslint-plugin@4.2.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-visitor-keys: 4.2.0
-      espree: 10.3.0
-      estraverse: 5.3.0
-      picomatch: 4.0.2
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-
-  '@svgdotjs/svg.js@3.2.4': {}
-
-  '@swc/counter@0.1.3': {}
-
-  '@swc/helpers@0.5.15':
-    dependencies:
-      tslib: 2.8.1
-
-  '@swc/helpers@0.5.17':
-    dependencies:
-      tslib: 2.8.1
-
-  '@szmarczak/http-timer@4.0.6':
-    dependencies:
-      defer-to-connect: 2.0.1
-
-  '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)))':
-    dependencies:
-      lodash.castarray: 4.4.0
-      lodash.isplainobject: 4.0.6
-      lodash.merge: 4.6.2
-      postcss-selector-parser: 6.0.10
-      tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-
-  '@tanstack/form-core@1.3.2':
-    dependencies:
-      '@tanstack/store': 0.7.0
-
-  '@tanstack/query-core@5.72.2': {}
-
-  '@tanstack/query-devtools@5.72.2': {}
-
-  '@tanstack/react-form@1.3.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@tanstack/form-core': 1.3.2
-      '@tanstack/react-store': 0.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      decode-formdata: 0.9.0
-      devalue: 5.1.1
-      react: 19.0.0
-    transitivePeerDependencies:
-      - react-dom
-
-  '@tanstack/react-query-devtools@5.72.2(@tanstack/react-query@5.72.2(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@tanstack/query-devtools': 5.72.2
-      '@tanstack/react-query': 5.72.2(react@19.0.0)
-      react: 19.0.0
-
-  '@tanstack/react-query@5.72.2(react@19.0.0)':
-    dependencies:
-      '@tanstack/query-core': 5.72.2
-      react: 19.0.0
-
-  '@tanstack/react-store@0.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@tanstack/store': 0.7.0
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      use-sync-external-store: 1.5.0(react@19.0.0)
-
-  '@tanstack/react-virtual@3.13.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@tanstack/virtual-core': 3.13.6
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  '@tanstack/store@0.7.0': {}
-
-  '@tanstack/virtual-core@3.13.6': {}
-
-  '@testing-library/dom@10.4.0':
-    dependencies:
-      '@babel/code-frame': 7.26.2
-      '@babel/runtime': 7.27.0
-      '@types/aria-query': 5.0.4
-      aria-query: 5.3.0
-      chalk: 4.1.2
-      dom-accessibility-api: 0.5.16
-      lz-string: 1.5.0
-      pretty-format: 27.5.1
-
-  '@testing-library/jest-dom@6.5.0':
-    dependencies:
-      '@adobe/css-tools': 4.4.2
-      aria-query: 5.3.2
-      chalk: 3.0.0
-      css.escape: 1.5.1
-      dom-accessibility-api: 0.6.3
-      lodash: 4.17.21
-      redent: 3.0.0
-
-  '@testing-library/jest-dom@6.6.3':
-    dependencies:
-      '@adobe/css-tools': 4.4.2
-      aria-query: 5.3.2
-      chalk: 3.0.0
-      css.escape: 1.5.1
-      dom-accessibility-api: 0.6.3
-      lodash: 4.17.21
-      redent: 3.0.0
-
-  '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@babel/runtime': 7.27.0
-      '@testing-library/dom': 10.4.0
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-    optionalDependencies:
-      '@types/react': 18.2.79
-      '@types/react-dom': 18.2.25
-
-  '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)':
-    dependencies:
-      '@testing-library/dom': 10.4.0
-
-  '@tsconfig/node10@1.0.11': {}
-
-  '@tsconfig/node12@1.0.11': {}
-
-  '@tsconfig/node14@1.0.3': {}
-
-  '@tsconfig/node16@1.0.4': {}
-
-  '@tybys/wasm-util@0.9.0':
-    dependencies:
-      tslib: 2.8.1
-    optional: true
-
-  '@types/aria-query@5.0.4': {}
-
-  '@types/babel__core@7.20.5':
-    dependencies:
-      '@babel/parser': 7.27.0
-      '@babel/types': 7.27.0
-      '@types/babel__generator': 7.27.0
-      '@types/babel__template': 7.4.4
-      '@types/babel__traverse': 7.20.7
-
-  '@types/babel__generator@7.27.0':
-    dependencies:
-      '@babel/types': 7.27.0
-
-  '@types/babel__template@7.4.4':
-    dependencies:
-      '@babel/parser': 7.27.0
-      '@babel/types': 7.27.0
-
-  '@types/babel__traverse@7.20.7':
-    dependencies:
-      '@babel/types': 7.27.0
-
-  '@types/cacheable-request@6.0.3':
-    dependencies:
-      '@types/http-cache-semantics': 4.0.4
-      '@types/keyv': 3.1.4
-      '@types/node': 18.15.0
-      '@types/responselike': 1.0.3
-
-  '@types/crypto-js@4.2.2': {}
-
-  '@types/d3-array@3.2.1': {}
-
-  '@types/d3-axis@3.0.6':
-    dependencies:
-      '@types/d3-selection': 3.0.11
-
-  '@types/d3-brush@3.0.6':
-    dependencies:
-      '@types/d3-selection': 3.0.11
-
-  '@types/d3-chord@3.0.6': {}
-
-  '@types/d3-color@3.1.3': {}
-
-  '@types/d3-contour@3.0.6':
-    dependencies:
-      '@types/d3-array': 3.2.1
-      '@types/geojson': 7946.0.16
-
-  '@types/d3-delaunay@6.0.4': {}
-
-  '@types/d3-dispatch@3.0.6': {}
-
-  '@types/d3-drag@3.0.7':
-    dependencies:
-      '@types/d3-selection': 3.0.11
-
-  '@types/d3-dsv@3.0.7': {}
-
-  '@types/d3-ease@3.0.2': {}
-
-  '@types/d3-fetch@3.0.7':
-    dependencies:
-      '@types/d3-dsv': 3.0.7
-
-  '@types/d3-force@3.0.10': {}
-
-  '@types/d3-format@3.0.4': {}
-
-  '@types/d3-geo@3.1.0':
-    dependencies:
-      '@types/geojson': 7946.0.16
-
-  '@types/d3-hierarchy@3.1.7': {}
-
-  '@types/d3-interpolate@3.0.4':
-    dependencies:
-      '@types/d3-color': 3.1.3
-
-  '@types/d3-path@3.1.1': {}
-
-  '@types/d3-polygon@3.0.2': {}
-
-  '@types/d3-quadtree@3.0.6': {}
-
-  '@types/d3-random@3.0.3': {}
-
-  '@types/d3-scale-chromatic@3.1.0': {}
-
-  '@types/d3-scale@4.0.9':
-    dependencies:
-      '@types/d3-time': 3.0.4
-
-  '@types/d3-selection@3.0.11': {}
-
-  '@types/d3-shape@3.1.7':
-    dependencies:
-      '@types/d3-path': 3.1.1
-
-  '@types/d3-time-format@4.0.3': {}
-
-  '@types/d3-time@3.0.4': {}
-
-  '@types/d3-timer@3.0.2': {}
-
-  '@types/d3-transition@3.0.9':
-    dependencies:
-      '@types/d3-selection': 3.0.11
-
-  '@types/d3-zoom@3.0.8':
-    dependencies:
-      '@types/d3-interpolate': 3.0.4
-      '@types/d3-selection': 3.0.11
-
-  '@types/d3@7.4.3':
-    dependencies:
-      '@types/d3-array': 3.2.1
-      '@types/d3-axis': 3.0.6
-      '@types/d3-brush': 3.0.6
-      '@types/d3-chord': 3.0.6
-      '@types/d3-color': 3.1.3
-      '@types/d3-contour': 3.0.6
-      '@types/d3-delaunay': 6.0.4
-      '@types/d3-dispatch': 3.0.6
-      '@types/d3-drag': 3.0.7
-      '@types/d3-dsv': 3.0.7
-      '@types/d3-ease': 3.0.2
-      '@types/d3-fetch': 3.0.7
-      '@types/d3-force': 3.0.10
-      '@types/d3-format': 3.0.4
-      '@types/d3-geo': 3.1.0
-      '@types/d3-hierarchy': 3.1.7
-      '@types/d3-interpolate': 3.0.4
-      '@types/d3-path': 3.1.1
-      '@types/d3-polygon': 3.0.2
-      '@types/d3-quadtree': 3.0.6
-      '@types/d3-random': 3.0.3
-      '@types/d3-scale': 4.0.9
-      '@types/d3-scale-chromatic': 3.1.0
-      '@types/d3-selection': 3.0.11
-      '@types/d3-shape': 3.1.7
-      '@types/d3-time': 3.0.4
-      '@types/d3-time-format': 4.0.3
-      '@types/d3-timer': 3.0.2
-      '@types/d3-transition': 3.0.9
-      '@types/d3-zoom': 3.0.8
-
-  '@types/dagre@0.7.52': {}
-
-  '@types/debug@4.1.12':
-    dependencies:
-      '@types/ms': 2.1.0
-
-  '@types/doctrine@0.0.9': {}
-
-  '@types/eslint-scope@3.7.7':
-    dependencies:
-      '@types/eslint': 9.6.1
-      '@types/estree': 1.0.7
-
-  '@types/eslint@9.6.1':
-    dependencies:
-      '@types/estree': 1.0.7
-      '@types/json-schema': 7.0.15
-
-  '@types/estree-jsx@1.0.5':
-    dependencies:
-      '@types/estree': 1.0.7
-
-  '@types/estree@1.0.7': {}
-
-  '@types/geojson@7946.0.16': {}
-
-  '@types/graceful-fs@4.1.9':
-    dependencies:
-      '@types/node': 18.15.0
-
-  '@types/hast@2.3.10':
-    dependencies:
-      '@types/unist': 2.0.11
-
-  '@types/hast@3.0.4':
-    dependencies:
-      '@types/unist': 3.0.3
-
-  '@types/html-minifier-terser@6.1.0': {}
-
-  '@types/http-cache-semantics@4.0.4': {}
-
-  '@types/istanbul-lib-coverage@2.0.6': {}
-
-  '@types/istanbul-lib-report@3.0.3':
-    dependencies:
-      '@types/istanbul-lib-coverage': 2.0.6
-
-  '@types/istanbul-reports@3.0.4':
-    dependencies:
-      '@types/istanbul-lib-report': 3.0.3
-
-  '@types/jest@29.5.14':
-    dependencies:
-      expect: 29.7.0
-      pretty-format: 29.7.0
-
-  '@types/js-cookie@3.0.6': {}
-
-  '@types/json-schema@7.0.15': {}
-
-  '@types/json5@0.0.29': {}
-
-  '@types/katex@0.16.7': {}
-
-  '@types/keyv@3.1.4':
-    dependencies:
-      '@types/node': 18.15.0
-
-  '@types/lodash-es@4.17.12':
-    dependencies:
-      '@types/lodash': 4.17.16
-
-  '@types/lodash@4.17.16': {}
-
-  '@types/mdast@4.0.4':
-    dependencies:
-      '@types/unist': 3.0.3
-
-  '@types/mdx@2.0.13': {}
-
-  '@types/ms@2.1.0': {}
-
-  '@types/negotiator@0.6.3': {}
-
-  '@types/node@18.15.0': {}
-
-  '@types/normalize-package-data@2.4.4': {}
-
-  '@types/papaparse@5.3.15':
-    dependencies:
-      '@types/node': 18.15.0
-
-  '@types/parse-json@4.0.2': {}
-
-  '@types/prop-types@15.7.14': {}
-
-  '@types/qs@6.9.18': {}
-
-  '@types/react-dom@18.2.25':
-    dependencies:
-      '@types/react': 18.2.79
-
-  '@types/react-slider@1.3.6':
-    dependencies:
-      '@types/react': 18.2.79
-
-  '@types/react-syntax-highlighter@15.5.13':
-    dependencies:
-      '@types/react': 18.2.79
-
-  '@types/react-window-infinite-loader@1.0.9':
-    dependencies:
-      '@types/react': 18.2.79
-      '@types/react-window': 1.8.8
-
-  '@types/react-window@1.8.8':
-    dependencies:
-      '@types/react': 18.2.79
-
-  '@types/react@18.2.79':
-    dependencies:
-      '@types/prop-types': 15.7.14
-      csstype: 3.1.3
-
-  '@types/recordrtc@5.6.14': {}
-
-  '@types/resolve@1.20.6': {}
-
-  '@types/responselike@1.0.3':
-    dependencies:
-      '@types/node': 18.15.0
-
-  '@types/semver@7.7.0': {}
-
-  '@types/sortablejs@1.15.8': {}
-
-  '@types/stack-utils@2.0.3': {}
-
-  '@types/trusted-types@2.0.7':
-    optional: true
-
-  '@types/unist@2.0.11': {}
-
-  '@types/unist@3.0.3': {}
-
-  '@types/uuid@10.0.0': {}
-
-  '@types/uuid@9.0.8': {}
-
-  '@types/yargs-parser@21.0.3': {}
-
-  '@types/yargs@17.0.33':
-    dependencies:
-      '@types/yargs-parser': 21.0.3
-
-  '@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/visitor-keys': 8.29.1
-      eslint: 9.24.0(jiti@1.21.7)
-      graphemer: 1.4.0
-      ignore: 5.3.2
-      natural-compare: 1.4.0
-      ts-api-utils: 2.1.0(typescript@4.9.5)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/typescript-estree': 8.29.1(typescript@4.9.5)
-      '@typescript-eslint/visitor-keys': 8.29.1
-      debug: 4.4.0
-      eslint: 9.24.0(jiti@1.21.7)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/scope-manager@8.29.1':
-    dependencies:
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/visitor-keys': 8.29.1
-
-  '@typescript-eslint/type-utils@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@typescript-eslint/typescript-estree': 8.29.1(typescript@4.9.5)
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      debug: 4.4.0
-      eslint: 9.24.0(jiti@1.21.7)
-      ts-api-utils: 2.1.0(typescript@4.9.5)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/types@8.29.1': {}
-
-  '@typescript-eslint/typescript-estree@8.29.1(typescript@4.9.5)':
-    dependencies:
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/visitor-keys': 8.29.1
-      debug: 4.4.0
-      fast-glob: 3.3.3
-      is-glob: 4.0.3
-      minimatch: 9.0.5
-      semver: 7.7.1
-      ts-api-utils: 2.1.0(typescript@4.9.5)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/utils@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)':
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@1.21.7))
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/typescript-estree': 8.29.1(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/visitor-keys@8.29.1':
-    dependencies:
-      '@typescript-eslint/types': 8.29.1
-      eslint-visitor-keys: 4.2.0
-
-  '@ungap/structured-clone@1.3.0': {}
-
-  '@unrs/resolver-binding-darwin-arm64@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-darwin-x64@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-freebsd-x64@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-linux-arm-gnueabihf@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-linux-arm-musleabihf@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-linux-arm64-gnu@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-linux-arm64-musl@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-linux-ppc64-gnu@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-linux-s390x-gnu@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-linux-x64-gnu@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-linux-x64-musl@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-wasm32-wasi@1.4.1':
-    dependencies:
-      '@napi-rs/wasm-runtime': 0.2.8
-    optional: true
-
-  '@unrs/resolver-binding-win32-arm64-msvc@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-win32-ia32-msvc@1.4.1':
-    optional: true
-
-  '@unrs/resolver-binding-win32-x64-msvc@1.4.1':
-    optional: true
-
-  '@vitest/eslint-plugin@1.1.42(@typescript-eslint/utils@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@18.15.0)(happy-dom@17.4.4)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1))':
-    dependencies:
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      vitest: 3.1.1(@types/debug@4.1.12)(@types/node@18.15.0)(happy-dom@17.4.4)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1)
-    optionalDependencies:
-      typescript: 4.9.5
-
-  '@vitest/expect@2.0.5':
-    dependencies:
-      '@vitest/spy': 2.0.5
-      '@vitest/utils': 2.0.5
-      chai: 5.2.0
-      tinyrainbow: 1.2.0
-
-  '@vitest/expect@3.1.1':
-    dependencies:
-      '@vitest/spy': 3.1.1
-      '@vitest/utils': 3.1.1
-      chai: 5.2.0
-      tinyrainbow: 2.0.0
-
-  '@vitest/mocker@3.1.1(vite@6.2.6(@types/node@18.15.0)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1))':
-    dependencies:
-      '@vitest/spy': 3.1.1
-      estree-walker: 3.0.3
-      magic-string: 0.30.17
-    optionalDependencies:
-      vite: 6.2.6(@types/node@18.15.0)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1)
-
-  '@vitest/pretty-format@2.0.5':
-    dependencies:
-      tinyrainbow: 1.2.0
-
-  '@vitest/pretty-format@2.1.9':
-    dependencies:
-      tinyrainbow: 1.2.0
-
-  '@vitest/pretty-format@3.1.1':
-    dependencies:
-      tinyrainbow: 2.0.0
-
-  '@vitest/runner@3.1.1':
-    dependencies:
-      '@vitest/utils': 3.1.1
-      pathe: 2.0.3
-
-  '@vitest/snapshot@3.1.1':
-    dependencies:
-      '@vitest/pretty-format': 3.1.1
-      magic-string: 0.30.17
-      pathe: 2.0.3
-
-  '@vitest/spy@2.0.5':
-    dependencies:
-      tinyspy: 3.0.2
-
-  '@vitest/spy@3.1.1':
-    dependencies:
-      tinyspy: 3.0.2
-
-  '@vitest/utils@2.0.5':
-    dependencies:
-      '@vitest/pretty-format': 2.0.5
-      estree-walker: 3.0.3
-      loupe: 3.1.3
-      tinyrainbow: 1.2.0
-
-  '@vitest/utils@2.1.9':
-    dependencies:
-      '@vitest/pretty-format': 2.1.9
-      loupe: 3.1.3
-      tinyrainbow: 1.2.0
-
-  '@vitest/utils@3.1.1':
-    dependencies:
-      '@vitest/pretty-format': 3.1.1
-      loupe: 3.1.3
-      tinyrainbow: 2.0.0
-
-  '@vue/compiler-core@3.5.13':
-    dependencies:
-      '@babel/parser': 7.27.0
-      '@vue/shared': 3.5.13
-      entities: 4.5.0
-      estree-walker: 2.0.2
-      source-map-js: 1.2.1
-
-  '@vue/compiler-dom@3.5.13':
-    dependencies:
-      '@vue/compiler-core': 3.5.13
-      '@vue/shared': 3.5.13
-
-  '@vue/compiler-sfc@3.5.13':
-    dependencies:
-      '@babel/parser': 7.27.0
-      '@vue/compiler-core': 3.5.13
-      '@vue/compiler-dom': 3.5.13
-      '@vue/compiler-ssr': 3.5.13
-      '@vue/shared': 3.5.13
-      estree-walker: 2.0.2
-      magic-string: 0.30.17
-      postcss: 8.5.3
-      source-map-js: 1.2.1
-
-  '@vue/compiler-ssr@3.5.13':
-    dependencies:
-      '@vue/compiler-dom': 3.5.13
-      '@vue/shared': 3.5.13
-
-  '@vue/shared@3.5.13': {}
-
-  '@webassemblyjs/ast@1.14.1':
-    dependencies:
-      '@webassemblyjs/helper-numbers': 1.13.2
-      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
-
-  '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
-
-  '@webassemblyjs/helper-api-error@1.13.2': {}
-
-  '@webassemblyjs/helper-buffer@1.14.1': {}
-
-  '@webassemblyjs/helper-numbers@1.13.2':
-    dependencies:
-      '@webassemblyjs/floating-point-hex-parser': 1.13.2
-      '@webassemblyjs/helper-api-error': 1.13.2
-      '@xtuc/long': 4.2.2
-
-  '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
-
-  '@webassemblyjs/helper-wasm-section@1.14.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.14.1
-      '@webassemblyjs/helper-buffer': 1.14.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
-      '@webassemblyjs/wasm-gen': 1.14.1
-
-  '@webassemblyjs/ieee754@1.13.2':
-    dependencies:
-      '@xtuc/ieee754': 1.2.0
-
-  '@webassemblyjs/leb128@1.13.2':
-    dependencies:
-      '@xtuc/long': 4.2.2
-
-  '@webassemblyjs/utf8@1.13.2': {}
-
-  '@webassemblyjs/wasm-edit@1.14.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.14.1
-      '@webassemblyjs/helper-buffer': 1.14.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
-      '@webassemblyjs/helper-wasm-section': 1.14.1
-      '@webassemblyjs/wasm-gen': 1.14.1
-      '@webassemblyjs/wasm-opt': 1.14.1
-      '@webassemblyjs/wasm-parser': 1.14.1
-      '@webassemblyjs/wast-printer': 1.14.1
-
-  '@webassemblyjs/wasm-gen@1.14.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.14.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
-      '@webassemblyjs/ieee754': 1.13.2
-      '@webassemblyjs/leb128': 1.13.2
-      '@webassemblyjs/utf8': 1.13.2
-
-  '@webassemblyjs/wasm-opt@1.14.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.14.1
-      '@webassemblyjs/helper-buffer': 1.14.1
-      '@webassemblyjs/wasm-gen': 1.14.1
-      '@webassemblyjs/wasm-parser': 1.14.1
-
-  '@webassemblyjs/wasm-parser@1.14.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.14.1
-      '@webassemblyjs/helper-api-error': 1.13.2
-      '@webassemblyjs/helper-wasm-bytecode': 1.13.2
-      '@webassemblyjs/ieee754': 1.13.2
-      '@webassemblyjs/leb128': 1.13.2
-      '@webassemblyjs/utf8': 1.13.2
-
-  '@webassemblyjs/wast-printer@1.14.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.14.1
-      '@xtuc/long': 4.2.2
-
-  '@xtuc/ieee754@1.2.0': {}
-
-  '@xtuc/long@4.2.2': {}
-
-  '@zod/core@0.1.0': {}
-
-  '@zod/mini@4.0.0-beta.0':
-    dependencies:
-      '@zod/core': 0.1.0
-
-  abbrev@1.1.1:
-    optional: true
-
-  abcjs@6.4.4: {}
-
-  abort-controller@3.0.0:
-    dependencies:
-      event-target-shim: 5.0.1
-
-  acorn-jsx@5.3.2(acorn@8.14.1):
-    dependencies:
-      acorn: 8.14.1
-
-  acorn-walk@8.3.4:
-    dependencies:
-      acorn: 8.14.1
-
-  acorn@8.14.1: {}
-
-  adjust-sourcemap-loader@4.0.0:
-    dependencies:
-      loader-utils: 2.0.4
-      regex-parser: 2.3.1
-
-  agent-base@6.0.2:
-    dependencies:
-      debug: 4.4.0
-    transitivePeerDependencies:
-      - supports-color
-    optional: true
-
-  ahooks@3.8.4(react@19.0.0):
-    dependencies:
-      '@babel/runtime': 7.27.0
-      dayjs: 1.11.13
-      intersection-observer: 0.12.2
-      js-cookie: 3.0.5
-      lodash: 4.17.21
-      react: 19.0.0
-      react-fast-compare: 3.2.2
-      resize-observer-polyfill: 1.5.1
-      screenfull: 5.2.0
-      tslib: 2.8.1
-
-  ajv-formats@2.1.1(ajv@8.17.1):
-    optionalDependencies:
-      ajv: 8.17.1
-
-  ajv-keywords@3.5.2(ajv@6.12.6):
-    dependencies:
-      ajv: 6.12.6
-
-  ajv-keywords@5.1.0(ajv@8.17.1):
-    dependencies:
-      ajv: 8.17.1
-      fast-deep-equal: 3.1.3
-
-  ajv@6.12.6:
-    dependencies:
-      fast-deep-equal: 3.1.3
-      fast-json-stable-stringify: 2.1.0
-      json-schema-traverse: 0.4.1
-      uri-js: 4.4.1
-
-  ajv@8.17.1:
-    dependencies:
-      fast-deep-equal: 3.1.3
-      fast-uri: 3.0.6
-      json-schema-traverse: 1.0.0
-      require-from-string: 2.0.2
-
-  ansi-escapes@4.3.2:
-    dependencies:
-      type-fest: 0.21.3
-
-  ansi-escapes@7.0.0:
-    dependencies:
-      environment: 1.1.0
-
-  ansi-html-community@0.0.8: {}
-
-  ansi-html@0.0.9: {}
-
-  ansi-regex@5.0.1: {}
-
-  ansi-regex@6.1.0: {}
-
-  ansi-styles@4.3.0:
-    dependencies:
-      color-convert: 2.0.1
-
-  ansi-styles@5.2.0: {}
-
-  ansi-styles@6.2.1: {}
-
-  ansis@3.17.0: {}
-
-  any-promise@1.3.0: {}
-
-  anymatch@3.1.3:
-    dependencies:
-      normalize-path: 3.0.0
-      picomatch: 2.3.1
-
-  aproba@2.0.0:
-    optional: true
-
-  are-docs-informative@0.0.2: {}
-
-  are-we-there-yet@2.0.0:
-    dependencies:
-      delegates: 1.0.0
-      readable-stream: 3.6.2
-    optional: true
-
-  arg@4.1.3: {}
-
-  arg@5.0.2: {}
-
-  argparse@1.0.10:
-    dependencies:
-      sprintf-js: 1.0.3
-
-  argparse@2.0.1: {}
-
-  aria-query@5.3.0:
-    dependencies:
-      dequal: 2.0.3
-
-  aria-query@5.3.2: {}
-
-  array-buffer-byte-length@1.0.2:
-    dependencies:
-      call-bound: 1.0.4
-      is-array-buffer: 3.0.5
-
-  array-includes@3.1.8:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-object-atoms: 1.1.1
-      get-intrinsic: 1.3.0
-      is-string: 1.1.1
-
-  array.prototype.findlast@1.2.5:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      es-shim-unscopables: 1.1.0
-
-  array.prototype.findlastindex@1.2.6:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      es-shim-unscopables: 1.1.0
-
-  array.prototype.flat@1.3.3:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-shim-unscopables: 1.1.0
-
-  array.prototype.flatmap@1.3.3:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-shim-unscopables: 1.1.0
-
-  array.prototype.tosorted@1.1.4:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-errors: 1.3.0
-      es-shim-unscopables: 1.1.0
-
-  arraybuffer.prototype.slice@1.0.4:
-    dependencies:
-      array-buffer-byte-length: 1.0.2
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      is-array-buffer: 3.0.5
-
-  asn1.js@4.10.1:
-    dependencies:
-      bn.js: 4.12.1
-      inherits: 2.0.4
-      minimalistic-assert: 1.0.1
-
-  assert@2.1.0:
-    dependencies:
-      call-bind: 1.0.8
-      is-nan: 1.3.2
-      object-is: 1.1.6
-      object.assign: 4.1.7
-      util: 0.12.5
-
-  assertion-error@2.0.1: {}
-
-  ast-types-flow@0.0.8: {}
-
-  ast-types@0.16.1:
-    dependencies:
-      tslib: 2.8.1
-
-  astring@1.9.0: {}
-
-  async-function@1.0.0: {}
-
-  async@3.2.6: {}
-
-  autoprefixer@10.4.21(postcss@8.5.3):
-    dependencies:
-      browserslist: 4.24.4
-      caniuse-lite: 1.0.30001713
-      fraction.js: 4.3.7
-      normalize-range: 0.1.2
-      picocolors: 1.1.1
-      postcss: 8.5.3
-      postcss-value-parser: 4.2.0
-
-  available-typed-arrays@1.0.7:
-    dependencies:
-      possible-typed-array-names: 1.1.0
-
-  axe-core@4.10.3: {}
-
-  axobject-query@4.1.0: {}
-
-  babel-jest@29.7.0(@babel/core@7.26.10):
-    dependencies:
-      '@babel/core': 7.26.10
-      '@jest/transform': 29.7.0
-      '@types/babel__core': 7.20.5
-      babel-plugin-istanbul: 6.1.1
-      babel-preset-jest: 29.6.3(@babel/core@7.26.10)
-      chalk: 4.1.2
-      graceful-fs: 4.2.11
-      slash: 3.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      '@babel/core': 7.26.10
-      find-cache-dir: 4.0.0
-      schema-utils: 4.3.0
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-
-  babel-plugin-istanbul@6.1.1:
-    dependencies:
-      '@babel/helper-plugin-utils': 7.26.5
-      '@istanbuljs/load-nyc-config': 1.1.0
-      '@istanbuljs/schema': 0.1.3
-      istanbul-lib-instrument: 5.2.1
-      test-exclude: 6.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  babel-plugin-jest-hoist@29.6.3:
-    dependencies:
-      '@babel/template': 7.27.0
-      '@babel/types': 7.27.0
-      '@types/babel__core': 7.20.5
-      '@types/babel__traverse': 7.20.7
-
-  babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10):
-    dependencies:
-      '@babel/compat-data': 7.26.8
-      '@babel/core': 7.26.10
-      '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10):
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
-      core-js-compat: 3.41.0
-    transitivePeerDependencies:
-      - supports-color
-
-  babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10):
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10)
-    transitivePeerDependencies:
-      - supports-color
-
-  babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10):
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10)
-      '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10)
-      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10)
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10)
-      '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10)
-      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10)
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10)
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10)
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10)
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10)
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10)
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10)
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10)
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10)
-      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10)
-
-  babel-preset-jest@29.6.3(@babel/core@7.26.10):
-    dependencies:
-      '@babel/core': 7.26.10
-      babel-plugin-jest-hoist: 29.6.3
-      babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10)
-
-  bail@2.0.2: {}
-
-  balanced-match@1.0.2: {}
-
-  base64-js@1.5.1: {}
-
-  before-after-hook@3.0.2: {}
-
-  better-opn@3.0.2:
-    dependencies:
-      open: 8.4.2
-
-  big.js@5.2.2: {}
-
-  binary-extensions@2.3.0: {}
-
-  bing-translate-api@4.0.2:
-    dependencies:
-      got: 11.8.6
-
-  birecord@0.1.1: {}
-
-  bn.js@4.12.1: {}
-
-  bn.js@5.2.1: {}
-
-  boolbase@1.0.0: {}
-
-  brace-expansion@1.1.11:
-    dependencies:
-      balanced-match: 1.0.2
-      concat-map: 0.0.1
-
-  brace-expansion@2.0.1:
-    dependencies:
-      balanced-match: 1.0.2
-
-  braces@3.0.3:
-    dependencies:
-      fill-range: 7.1.1
-
-  brorand@1.1.0: {}
-
-  browser-assert@1.2.1: {}
-
-  browserify-aes@1.2.0:
-    dependencies:
-      buffer-xor: 1.0.3
-      cipher-base: 1.0.6
-      create-hash: 1.2.0
-      evp_bytestokey: 1.0.3
-      inherits: 2.0.4
-      safe-buffer: 5.2.1
-
-  browserify-cipher@1.0.1:
-    dependencies:
-      browserify-aes: 1.2.0
-      browserify-des: 1.0.2
-      evp_bytestokey: 1.0.3
-
-  browserify-des@1.0.2:
-    dependencies:
-      cipher-base: 1.0.6
-      des.js: 1.1.0
-      inherits: 2.0.4
-      safe-buffer: 5.2.1
-
-  browserify-rsa@4.1.1:
-    dependencies:
-      bn.js: 5.2.1
-      randombytes: 2.1.0
-      safe-buffer: 5.2.1
-
-  browserify-sign@4.2.3:
-    dependencies:
-      bn.js: 5.2.1
-      browserify-rsa: 4.1.1
-      create-hash: 1.2.0
-      create-hmac: 1.1.7
-      elliptic: 6.6.1
-      hash-base: 3.0.5
-      inherits: 2.0.4
-      parse-asn1: 5.1.7
-      readable-stream: 2.3.8
-      safe-buffer: 5.2.1
-
-  browserify-zlib@0.2.0:
-    dependencies:
-      pako: 1.0.11
-
-  browserslist@4.24.4:
-    dependencies:
-      caniuse-lite: 1.0.30001713
-      electron-to-chromium: 1.5.136
-      node-releases: 2.0.19
-      update-browserslist-db: 1.1.3(browserslist@4.24.4)
-
-  bser@2.1.1:
-    dependencies:
-      node-int64: 0.4.0
-
-  buffer-from@1.1.2: {}
-
-  buffer-xor@1.0.3: {}
-
-  buffer@6.0.3:
-    dependencies:
-      base64-js: 1.5.1
-      ieee754: 1.2.1
-
-  builtin-modules@3.3.0: {}
-
-  builtin-modules@5.0.0: {}
-
-  builtin-status-codes@3.0.0: {}
-
-  busboy@1.6.0:
-    dependencies:
-      streamsearch: 1.1.0
-
-  bytes@3.1.2: {}
-
-  cac@6.7.14: {}
-
-  cacheable-lookup@5.0.4: {}
-
-  cacheable-request@7.0.4:
-    dependencies:
-      clone-response: 1.0.3
-      get-stream: 5.2.0
-      http-cache-semantics: 4.1.1
-      keyv: 4.5.4
-      lowercase-keys: 2.0.0
-      normalize-url: 6.1.0
-      responselike: 2.0.1
-
-  call-bind-apply-helpers@1.0.2:
-    dependencies:
-      es-errors: 1.3.0
-      function-bind: 1.1.2
-
-  call-bind@1.0.8:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-define-property: 1.0.1
-      get-intrinsic: 1.3.0
-      set-function-length: 1.2.2
-
-  call-bound@1.0.4:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      get-intrinsic: 1.3.0
-
-  callsites@3.1.0: {}
-
-  camel-case@4.1.2:
-    dependencies:
-      pascal-case: 3.1.2
-      tslib: 2.8.1
-
-  camelcase-css@2.0.1: {}
-
-  camelcase@5.3.1: {}
-
-  camelcase@6.3.0: {}
-
-  caniuse-lite@1.0.30001713: {}
-
-  canvas@2.11.2:
-    dependencies:
-      '@mapbox/node-pre-gyp': 1.0.11
-      nan: 2.22.2
-      simple-get: 3.1.1
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-    optional: true
-
-  case-sensitive-paths-webpack-plugin@2.4.0: {}
-
-  ccount@2.0.1: {}
-
-  chai@5.2.0:
-    dependencies:
-      assertion-error: 2.0.1
-      check-error: 2.1.1
-      deep-eql: 5.0.2
-      loupe: 3.1.3
-      pathval: 2.0.0
-
-  chalk@3.0.0:
-    dependencies:
-      ansi-styles: 4.3.0
-      supports-color: 7.2.0
-
-  chalk@4.1.1:
-    dependencies:
-      ansi-styles: 4.3.0
-      supports-color: 7.2.0
-
-  chalk@4.1.2:
-    dependencies:
-      ansi-styles: 4.3.0
-      supports-color: 7.2.0
-
-  chalk@5.4.1: {}
-
-  char-regex@1.0.2: {}
-
-  character-entities-html4@2.1.0: {}
-
-  character-entities-legacy@1.1.4: {}
-
-  character-entities-legacy@3.0.0: {}
-
-  character-entities@1.2.4: {}
-
-  character-entities@2.0.2: {}
-
-  character-reference-invalid@1.1.4: {}
-
-  character-reference-invalid@2.0.1: {}
-
-  check-error@2.1.1: {}
-
-  chevrotain-allstar@0.3.1(chevrotain@11.0.3):
-    dependencies:
-      chevrotain: 11.0.3
-      lodash-es: 4.17.21
-
-  chevrotain@11.0.3:
-    dependencies:
-      '@chevrotain/cst-dts-gen': 11.0.3
-      '@chevrotain/gast': 11.0.3
-      '@chevrotain/regexp-to-ast': 11.0.3
-      '@chevrotain/types': 11.0.3
-      '@chevrotain/utils': 11.0.3
-      lodash-es: 4.17.21
-
-  chokidar@3.6.0:
-    dependencies:
-      anymatch: 3.1.3
-      braces: 3.0.3
-      glob-parent: 5.1.2
-      is-binary-path: 2.1.0
-      is-glob: 4.0.3
-      normalize-path: 3.0.0
-      readdirp: 3.6.0
-    optionalDependencies:
-      fsevents: 2.3.3
-
-  chokidar@4.0.3:
-    dependencies:
-      readdirp: 4.1.2
-
-  chownr@2.0.0:
-    optional: true
-
-  chromatic@11.28.0: {}
-
-  chrome-trace-event@1.0.4: {}
-
-  ci-info@3.9.0: {}
-
-  ci-info@4.2.0: {}
-
-  cipher-base@1.0.6:
-    dependencies:
-      inherits: 2.0.4
-      safe-buffer: 5.2.1
-
-  cjs-module-lexer@1.4.3: {}
-
-  class-variance-authority@0.7.1:
-    dependencies:
-      clsx: 2.1.1
-
-  classcat@5.0.5: {}
-
-  classnames@2.3.1: {}
-
-  classnames@2.5.1: {}
-
-  clean-css@5.3.3:
-    dependencies:
-      source-map: 0.6.1
-
-  clean-regexp@1.0.0:
-    dependencies:
-      escape-string-regexp: 1.0.5
-
-  cli-cursor@5.0.0:
-    dependencies:
-      restore-cursor: 5.1.0
-
-  cli-truncate@4.0.0:
-    dependencies:
-      slice-ansi: 5.0.0
-      string-width: 4.2.3
-
-  client-only@0.0.1: {}
-
-  cliui@8.0.1:
-    dependencies:
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      wrap-ansi: 7.0.0
-
-  clone-response@1.0.3:
-    dependencies:
-      mimic-response: 1.0.1
-
-  clsx@1.2.1: {}
-
-  clsx@2.1.1: {}
-
-  co@4.6.0: {}
-
-  code-inspector-core@0.18.3:
-    dependencies:
-      '@vue/compiler-dom': 3.5.13
-      chalk: 4.1.1
-      dotenv: 16.5.0
-      launch-ide: 1.0.1
-      portfinder: 1.0.35
-    transitivePeerDependencies:
-      - supports-color
-
-  code-inspector-plugin@0.18.3:
-    dependencies:
-      chalk: 4.1.1
-      code-inspector-core: 0.18.3
-      dotenv: 16.5.0
-      esbuild-code-inspector-plugin: 0.18.3
-      vite-code-inspector-plugin: 0.18.3
-      webpack-code-inspector-plugin: 0.18.3
-    transitivePeerDependencies:
-      - supports-color
-
-  collapse-white-space@2.1.0: {}
-
-  collect-v8-coverage@1.0.2: {}
-
-  color-convert@2.0.1:
-    dependencies:
-      color-name: 1.1.4
-
-  color-name@1.1.4: {}
-
-  color-string@1.9.1:
-    dependencies:
-      color-name: 1.1.4
-      simple-swizzle: 0.2.2
-
-  color-support@1.1.3:
-    optional: true
-
-  color@4.2.3:
-    dependencies:
-      color-convert: 2.0.1
-      color-string: 1.9.1
-
-  colorette@2.0.20: {}
-
-  comma-separated-tokens@1.0.8: {}
-
-  comma-separated-tokens@2.0.3: {}
-
-  commander@13.1.0: {}
-
-  commander@2.20.3: {}
-
-  commander@4.1.1: {}
-
-  commander@7.2.0: {}
-
-  commander@8.3.0: {}
-
-  comment-parser@1.4.1: {}
-
-  common-path-prefix@3.0.0: {}
-
-  commondir@1.0.1: {}
-
-  compare-versions@6.1.1: {}
-
-  concat-map@0.0.1: {}
-
-  confbox@0.1.8: {}
-
-  confbox@0.2.2: {}
-
-  console-browserify@1.2.0: {}
-
-  console-control-strings@1.1.0:
-    optional: true
-
-  constants-browserify@1.0.0: {}
-
-  convert-source-map@1.9.0: {}
-
-  convert-source-map@2.0.0: {}
-
-  copy-to-clipboard@3.3.3:
-    dependencies:
-      toggle-selection: 1.0.6
-
-  core-js-compat@3.41.0:
-    dependencies:
-      browserslist: 4.24.4
-
-  core-js-pure@3.41.0: {}
-
-  core-util-is@1.0.3: {}
-
-  cose-base@1.0.3:
-    dependencies:
-      layout-base: 1.0.2
-
-  cose-base@2.2.0:
-    dependencies:
-      layout-base: 2.0.1
-
-  cosmiconfig@7.1.0:
-    dependencies:
-      '@types/parse-json': 4.0.2
-      import-fresh: 3.3.1
-      parse-json: 5.2.0
-      path-type: 4.0.0
-      yaml: 1.10.2
-
-  cosmiconfig@9.0.0(typescript@4.9.5):
-    dependencies:
-      env-paths: 2.2.1
-      import-fresh: 3.3.1
-      js-yaml: 4.1.0
-      parse-json: 5.2.0
-    optionalDependencies:
-      typescript: 4.9.5
-
-  create-ecdh@4.0.4:
-    dependencies:
-      bn.js: 4.12.1
-      elliptic: 6.6.1
-
-  create-hash@1.2.0:
-    dependencies:
-      cipher-base: 1.0.6
-      inherits: 2.0.4
-      md5.js: 1.3.5
-      ripemd160: 2.0.2
-      sha.js: 2.4.11
-
-  create-hmac@1.1.7:
-    dependencies:
-      cipher-base: 1.0.6
-      create-hash: 1.2.0
-      inherits: 2.0.4
-      ripemd160: 2.0.2
-      safe-buffer: 5.2.1
-      sha.js: 2.4.11
-
-  create-jest@29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)):
-    dependencies:
-      '@jest/types': 29.6.3
-      chalk: 4.1.2
-      exit: 0.1.2
-      graceful-fs: 4.2.11
-      jest-config: 29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      jest-util: 29.7.0
-      prompts: 2.4.2
-    transitivePeerDependencies:
-      - '@types/node'
-      - babel-plugin-macros
-      - supports-color
-      - ts-node
-
-  create-require@1.1.1: {}
-
-  cross-env@7.0.3:
-    dependencies:
-      cross-spawn: 7.0.6
-
-  cross-spawn@7.0.6:
-    dependencies:
-      path-key: 3.1.1
-      shebang-command: 2.0.0
-      which: 2.0.2
-
-  crypto-browserify@3.12.1:
-    dependencies:
-      browserify-cipher: 1.0.1
-      browserify-sign: 4.2.3
-      create-ecdh: 4.0.4
-      create-hash: 1.2.0
-      create-hmac: 1.1.7
-      diffie-hellman: 5.0.3
-      hash-base: 3.0.5
-      inherits: 2.0.4
-      pbkdf2: 3.1.2
-      public-encrypt: 4.0.3
-      randombytes: 2.1.0
-      randomfill: 1.0.4
-
-  crypto-js@4.2.0: {}
-
-  css-loader@6.11.0(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      icss-utils: 5.1.0(postcss@8.5.3)
-      postcss: 8.5.3
-      postcss-modules-extract-imports: 3.1.0(postcss@8.5.3)
-      postcss-modules-local-by-default: 4.2.0(postcss@8.5.3)
-      postcss-modules-scope: 3.2.1(postcss@8.5.3)
-      postcss-modules-values: 4.0.0(postcss@8.5.3)
-      postcss-value-parser: 4.2.0
-      semver: 7.7.1
-    optionalDependencies:
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-
-  css-select@4.3.0:
-    dependencies:
-      boolbase: 1.0.0
-      css-what: 6.1.0
-      domhandler: 4.3.1
-      domutils: 2.8.0
-      nth-check: 2.1.1
-
-  css-what@6.1.0: {}
-
-  css.escape@1.5.1: {}
-
-  cssesc@3.0.0: {}
-
-  csstype@3.1.3: {}
-
-  cytoscape-cose-bilkent@4.1.0(cytoscape@3.31.2):
-    dependencies:
-      cose-base: 1.0.3
-      cytoscape: 3.31.2
-
-  cytoscape-fcose@2.2.0(cytoscape@3.31.2):
-    dependencies:
-      cose-base: 2.2.0
-      cytoscape: 3.31.2
-
-  cytoscape@3.31.2: {}
-
-  d3-array@2.12.1:
-    dependencies:
-      internmap: 1.0.1
-
-  d3-array@3.2.4:
-    dependencies:
-      internmap: 2.0.3
-
-  d3-axis@3.0.0: {}
-
-  d3-brush@3.0.0:
-    dependencies:
-      d3-dispatch: 3.0.1
-      d3-drag: 3.0.0
-      d3-interpolate: 3.0.1
-      d3-selection: 3.0.0
-      d3-transition: 3.0.1(d3-selection@3.0.0)
-
-  d3-chord@3.0.1:
-    dependencies:
-      d3-path: 3.1.0
-
-  d3-color@3.1.0: {}
-
-  d3-contour@4.0.2:
-    dependencies:
-      d3-array: 3.2.4
-
-  d3-delaunay@6.0.4:
-    dependencies:
-      delaunator: 5.0.1
-
-  d3-dispatch@3.0.1: {}
-
-  d3-drag@3.0.0:
-    dependencies:
-      d3-dispatch: 3.0.1
-      d3-selection: 3.0.0
-
-  d3-dsv@3.0.1:
-    dependencies:
-      commander: 7.2.0
-      iconv-lite: 0.6.3
-      rw: 1.3.3
-
-  d3-ease@3.0.1: {}
-
-  d3-fetch@3.0.1:
-    dependencies:
-      d3-dsv: 3.0.1
-
-  d3-force@3.0.0:
-    dependencies:
-      d3-dispatch: 3.0.1
-      d3-quadtree: 3.0.1
-      d3-timer: 3.0.1
-
-  d3-format@3.1.0: {}
-
-  d3-geo@3.1.1:
-    dependencies:
-      d3-array: 3.2.4
-
-  d3-hierarchy@3.1.2: {}
-
-  d3-interpolate@3.0.1:
-    dependencies:
-      d3-color: 3.1.0
-
-  d3-path@1.0.9: {}
-
-  d3-path@3.1.0: {}
-
-  d3-polygon@3.0.1: {}
-
-  d3-quadtree@3.0.1: {}
-
-  d3-random@3.0.1: {}
-
-  d3-sankey@0.12.3:
-    dependencies:
-      d3-array: 2.12.1
-      d3-shape: 1.3.7
-
-  d3-scale-chromatic@3.1.0:
-    dependencies:
-      d3-color: 3.1.0
-      d3-interpolate: 3.0.1
-
-  d3-scale@4.0.2:
-    dependencies:
-      d3-array: 3.2.4
-      d3-format: 3.1.0
-      d3-interpolate: 3.0.1
-      d3-time: 3.1.0
-      d3-time-format: 4.1.0
-
-  d3-selection@3.0.0: {}
-
-  d3-shape@1.3.7:
-    dependencies:
-      d3-path: 1.0.9
-
-  d3-shape@3.2.0:
-    dependencies:
-      d3-path: 3.1.0
-
-  d3-time-format@4.1.0:
-    dependencies:
-      d3-time: 3.1.0
-
-  d3-time@3.1.0:
-    dependencies:
-      d3-array: 3.2.4
-
-  d3-timer@3.0.1: {}
-
-  d3-transition@3.0.1(d3-selection@3.0.0):
-    dependencies:
-      d3-color: 3.1.0
-      d3-dispatch: 3.0.1
-      d3-ease: 3.0.1
-      d3-interpolate: 3.0.1
-      d3-selection: 3.0.0
-      d3-timer: 3.0.1
-
-  d3-zoom@3.0.0:
-    dependencies:
-      d3-dispatch: 3.0.1
-      d3-drag: 3.0.0
-      d3-interpolate: 3.0.1
-      d3-selection: 3.0.0
-      d3-transition: 3.0.1(d3-selection@3.0.0)
-
-  d3@7.9.0:
-    dependencies:
-      d3-array: 3.2.4
-      d3-axis: 3.0.0
-      d3-brush: 3.0.0
-      d3-chord: 3.0.1
-      d3-color: 3.1.0
-      d3-contour: 4.0.2
-      d3-delaunay: 6.0.4
-      d3-dispatch: 3.0.1
-      d3-drag: 3.0.0
-      d3-dsv: 3.0.1
-      d3-ease: 3.0.1
-      d3-fetch: 3.0.1
-      d3-force: 3.0.0
-      d3-format: 3.1.0
-      d3-geo: 3.1.1
-      d3-hierarchy: 3.1.2
-      d3-interpolate: 3.0.1
-      d3-path: 3.1.0
-      d3-polygon: 3.0.1
-      d3-quadtree: 3.0.1
-      d3-random: 3.0.1
-      d3-scale: 4.0.2
-      d3-scale-chromatic: 3.1.0
-      d3-selection: 3.0.0
-      d3-shape: 3.2.0
-      d3-time: 3.1.0
-      d3-time-format: 4.1.0
-      d3-timer: 3.0.1
-      d3-transition: 3.0.1(d3-selection@3.0.0)
-      d3-zoom: 3.0.0
-
-  dagre-d3-es@7.0.11:
-    dependencies:
-      d3: 7.9.0
-      lodash-es: 4.17.21
-
-  damerau-levenshtein@1.0.8: {}
-
-  data-view-buffer@1.0.2:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-data-view: 1.0.2
-
-  data-view-byte-length@1.0.2:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-data-view: 1.0.2
-
-  data-view-byte-offset@1.0.1:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-data-view: 1.0.2
-
-  dayjs@1.11.13: {}
-
-  debug@3.2.7:
-    dependencies:
-      ms: 2.1.3
-
-  debug@4.4.0:
-    dependencies:
-      ms: 2.1.3
-
-  decimal.js@10.5.0: {}
-
-  decode-formdata@0.9.0: {}
-
-  decode-named-character-reference@1.1.0:
-    dependencies:
-      character-entities: 2.0.2
-
-  decompress-response@4.2.1:
-    dependencies:
-      mimic-response: 2.1.0
-    optional: true
-
-  decompress-response@6.0.0:
-    dependencies:
-      mimic-response: 3.1.0
-
-  dedent@0.7.0: {}
-
-  dedent@1.5.3: {}
-
-  deep-eql@5.0.2: {}
-
-  deep-is@0.1.4: {}
-
-  deepmerge@4.3.1: {}
-
-  defer-to-connect@2.0.1: {}
-
-  define-data-property@1.1.4:
-    dependencies:
-      es-define-property: 1.0.1
-      es-errors: 1.3.0
-      gopd: 1.2.0
-
-  define-lazy-prop@2.0.0: {}
-
-  define-properties@1.2.1:
-    dependencies:
-      define-data-property: 1.1.4
-      has-property-descriptors: 1.0.2
-      object-keys: 1.1.1
-
-  delaunator@5.0.1:
-    dependencies:
-      robust-predicates: 3.0.2
-
-  delegates@1.0.0:
-    optional: true
-
-  dequal@2.0.3: {}
-
-  des.js@1.1.0:
-    dependencies:
-      inherits: 2.0.4
-      minimalistic-assert: 1.0.1
-
-  detect-libc@1.0.3:
-    optional: true
-
-  detect-libc@2.0.3: {}
-
-  detect-newline@3.1.0: {}
-
-  devalue@5.1.1: {}
-
-  devlop@1.1.0:
-    dependencies:
-      dequal: 2.0.3
-
-  didyoumean@1.2.2: {}
-
-  diff-sequences@29.6.3: {}
-
-  diff@4.0.2: {}
-
-  diffie-hellman@5.0.3:
-    dependencies:
-      bn.js: 4.12.1
-      miller-rabin: 4.0.1
-      randombytes: 2.1.0
-
-  dlv@1.1.3: {}
-
-  doctrine@2.1.0:
-    dependencies:
-      esutils: 2.0.3
-
-  doctrine@3.0.0:
-    dependencies:
-      esutils: 2.0.3
-
-  dom-accessibility-api@0.5.16: {}
-
-  dom-accessibility-api@0.6.3: {}
-
-  dom-converter@0.2.0:
-    dependencies:
-      utila: 0.4.0
-
-  dom-serializer@1.4.1:
-    dependencies:
-      domelementtype: 2.3.0
-      domhandler: 4.3.1
-      entities: 2.2.0
-
-  domain-browser@4.23.0: {}
-
-  domelementtype@2.3.0: {}
-
-  domhandler@4.3.1:
-    dependencies:
-      domelementtype: 2.3.0
-
-  dompurify@3.2.5:
-    optionalDependencies:
-      '@types/trusted-types': 2.0.7
-
-  domutils@2.8.0:
-    dependencies:
-      dom-serializer: 1.4.1
-      domelementtype: 2.3.0
-      domhandler: 4.3.1
-
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.8.1
-
-  dotenv@16.5.0: {}
-
-  dunder-proto@1.0.1:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-errors: 1.3.0
-      gopd: 1.2.0
-
-  echarts-for-react@3.0.2(echarts@5.6.0)(react@19.0.0):
-    dependencies:
-      echarts: 5.6.0
-      fast-deep-equal: 3.1.3
-      react: 19.0.0
-      size-sensor: 1.0.2
-
-  echarts@5.6.0:
-    dependencies:
-      tslib: 2.3.0
-      zrender: 5.6.1
-
-  electron-to-chromium@1.5.136: {}
-
-  elkjs@0.9.3: {}
-
-  elliptic@6.6.1:
-    dependencies:
-      bn.js: 4.12.1
-      brorand: 1.1.0
-      hash.js: 1.1.7
-      hmac-drbg: 1.0.1
-      inherits: 2.0.4
-      minimalistic-assert: 1.0.1
-      minimalistic-crypto-utils: 1.0.1
-
-  emittery@0.13.1: {}
-
-  emoji-mart@5.6.0: {}
-
-  emoji-regex@8.0.0: {}
-
-  emoji-regex@9.2.2: {}
-
-  emojis-list@3.0.0: {}
-
-  end-of-stream@1.4.4:
-    dependencies:
-      once: 1.4.0
-
-  endent@2.1.0:
-    dependencies:
-      dedent: 0.7.0
-      fast-json-parse: 1.0.3
-      objectorarray: 1.0.5
-
-  enhanced-resolve@5.18.1:
-    dependencies:
-      graceful-fs: 4.2.11
-      tapable: 2.2.1
-
-  entities@2.2.0: {}
-
-  entities@4.5.0: {}
-
-  env-paths@2.2.1: {}
-
-  environment@1.1.0: {}
-
-  error-ex@1.3.2:
-    dependencies:
-      is-arrayish: 0.2.1
-
-  error-stack-parser@2.1.4:
-    dependencies:
-      stackframe: 1.3.4
-
-  es-abstract@1.23.9:
-    dependencies:
-      array-buffer-byte-length: 1.0.2
-      arraybuffer.prototype.slice: 1.0.4
-      available-typed-arrays: 1.0.7
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      data-view-buffer: 1.0.2
-      data-view-byte-length: 1.0.2
-      data-view-byte-offset: 1.0.1
-      es-define-property: 1.0.1
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      es-set-tostringtag: 2.1.0
-      es-to-primitive: 1.3.0
-      function.prototype.name: 1.1.8
-      get-intrinsic: 1.3.0
-      get-proto: 1.0.1
-      get-symbol-description: 1.1.0
-      globalthis: 1.0.4
-      gopd: 1.2.0
-      has-property-descriptors: 1.0.2
-      has-proto: 1.2.0
-      has-symbols: 1.1.0
-      hasown: 2.0.2
-      internal-slot: 1.1.0
-      is-array-buffer: 3.0.5
-      is-callable: 1.2.7
-      is-data-view: 1.0.2
-      is-regex: 1.2.1
-      is-shared-array-buffer: 1.0.4
-      is-string: 1.1.1
-      is-typed-array: 1.1.15
-      is-weakref: 1.1.1
-      math-intrinsics: 1.1.0
-      object-inspect: 1.13.4
-      object-keys: 1.1.1
-      object.assign: 4.1.7
-      own-keys: 1.0.1
-      regexp.prototype.flags: 1.5.4
-      safe-array-concat: 1.1.3
-      safe-push-apply: 1.0.0
-      safe-regex-test: 1.1.0
-      set-proto: 1.0.0
-      string.prototype.trim: 1.2.10
-      string.prototype.trimend: 1.0.9
-      string.prototype.trimstart: 1.0.8
-      typed-array-buffer: 1.0.3
-      typed-array-byte-length: 1.0.3
-      typed-array-byte-offset: 1.0.4
-      typed-array-length: 1.0.7
-      unbox-primitive: 1.1.0
-      which-typed-array: 1.1.19
-
-  es-define-property@1.0.1: {}
-
-  es-errors@1.3.0: {}
-
-  es-iterator-helpers@1.2.1:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-errors: 1.3.0
-      es-set-tostringtag: 2.1.0
-      function-bind: 1.1.2
-      get-intrinsic: 1.3.0
-      globalthis: 1.0.4
-      gopd: 1.2.0
-      has-property-descriptors: 1.0.2
-      has-proto: 1.2.0
-      has-symbols: 1.1.0
-      internal-slot: 1.1.0
-      iterator.prototype: 1.1.5
-      safe-array-concat: 1.1.3
-
-  es-module-lexer@1.6.0: {}
-
-  es-object-atoms@1.1.1:
-    dependencies:
-      es-errors: 1.3.0
-
-  es-set-tostringtag@2.1.0:
-    dependencies:
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      has-tostringtag: 1.0.2
-      hasown: 2.0.2
-
-  es-shim-unscopables@1.1.0:
-    dependencies:
-      hasown: 2.0.2
-
-  es-to-primitive@1.3.0:
-    dependencies:
-      is-callable: 1.2.7
-      is-date-object: 1.1.0
-      is-symbol: 1.1.1
-
-  esast-util-from-estree@2.0.0:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      devlop: 1.1.0
-      estree-util-visit: 2.0.0
-      unist-util-position-from-estree: 2.0.0
-
-  esast-util-from-js@2.0.1:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      acorn: 8.14.1
-      esast-util-from-estree: 2.0.0
-      vfile-message: 4.0.2
-
-  esbuild-code-inspector-plugin@0.18.3:
-    dependencies:
-      code-inspector-core: 0.18.3
-    transitivePeerDependencies:
-      - supports-color
-
-  esbuild-register@3.6.0(esbuild@0.25.0):
-    dependencies:
-      debug: 4.4.0
-      esbuild: 0.25.0
-    transitivePeerDependencies:
-      - supports-color
-
-  esbuild@0.25.0:
-    optionalDependencies:
-      '@esbuild/aix-ppc64': 0.25.0
-      '@esbuild/android-arm': 0.25.0
-      '@esbuild/android-arm64': 0.25.0
-      '@esbuild/android-x64': 0.25.0
-      '@esbuild/darwin-arm64': 0.25.0
-      '@esbuild/darwin-x64': 0.25.0
-      '@esbuild/freebsd-arm64': 0.25.0
-      '@esbuild/freebsd-x64': 0.25.0
-      '@esbuild/linux-arm': 0.25.0
-      '@esbuild/linux-arm64': 0.25.0
-      '@esbuild/linux-ia32': 0.25.0
-      '@esbuild/linux-loong64': 0.25.0
-      '@esbuild/linux-mips64el': 0.25.0
-      '@esbuild/linux-ppc64': 0.25.0
-      '@esbuild/linux-riscv64': 0.25.0
-      '@esbuild/linux-s390x': 0.25.0
-      '@esbuild/linux-x64': 0.25.0
-      '@esbuild/netbsd-arm64': 0.25.0
-      '@esbuild/netbsd-x64': 0.25.0
-      '@esbuild/openbsd-arm64': 0.25.0
-      '@esbuild/openbsd-x64': 0.25.0
-      '@esbuild/sunos-x64': 0.25.0
-      '@esbuild/win32-arm64': 0.25.0
-      '@esbuild/win32-ia32': 0.25.0
-      '@esbuild/win32-x64': 0.25.0
-
-  esbuild@0.25.2:
-    optionalDependencies:
-      '@esbuild/aix-ppc64': 0.25.2
-      '@esbuild/android-arm': 0.25.2
-      '@esbuild/android-arm64': 0.25.2
-      '@esbuild/android-x64': 0.25.2
-      '@esbuild/darwin-arm64': 0.25.2
-      '@esbuild/darwin-x64': 0.25.2
-      '@esbuild/freebsd-arm64': 0.25.2
-      '@esbuild/freebsd-x64': 0.25.2
-      '@esbuild/linux-arm': 0.25.2
-      '@esbuild/linux-arm64': 0.25.2
-      '@esbuild/linux-ia32': 0.25.2
-      '@esbuild/linux-loong64': 0.25.2
-      '@esbuild/linux-mips64el': 0.25.2
-      '@esbuild/linux-ppc64': 0.25.2
-      '@esbuild/linux-riscv64': 0.25.2
-      '@esbuild/linux-s390x': 0.25.2
-      '@esbuild/linux-x64': 0.25.2
-      '@esbuild/netbsd-arm64': 0.25.2
-      '@esbuild/netbsd-x64': 0.25.2
-      '@esbuild/openbsd-arm64': 0.25.2
-      '@esbuild/openbsd-x64': 0.25.2
-      '@esbuild/sunos-x64': 0.25.2
-      '@esbuild/win32-arm64': 0.25.2
-      '@esbuild/win32-ia32': 0.25.2
-      '@esbuild/win32-x64': 0.25.2
-
-  escalade@3.2.0: {}
-
-  escape-string-regexp@1.0.5: {}
-
-  escape-string-regexp@2.0.0: {}
-
-  escape-string-regexp@4.0.0: {}
-
-  escape-string-regexp@5.0.0: {}
-
-  eslint-compat-utils@0.5.1(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-      semver: 7.7.1
-
-  eslint-compat-utils@0.6.5(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-      semver: 7.7.1
-
-  eslint-config-flat-gitignore@2.1.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@eslint/compat': 1.2.8(eslint@9.24.0(jiti@1.21.7))
-      eslint: 9.24.0(jiti@1.21.7)
-
-  eslint-config-next@15.3.0(eslint-plugin-import-x@4.10.2(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@next/eslint-plugin-next': 15.3.0
-      '@rushstack/eslint-patch': 1.11.0
-      '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import-x@4.10.2(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-jsx-a11y: 6.10.2(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-react: 7.37.5(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-react-hooks: 5.2.0(eslint@9.24.0(jiti@1.21.7))
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - eslint-import-resolver-webpack
-      - eslint-plugin-import-x
-      - supports-color
-
-  eslint-flat-config-utils@2.0.1:
-    dependencies:
-      pathe: 2.0.3
-
-  eslint-import-resolver-node@0.3.9:
-    dependencies:
-      debug: 3.2.7
-      is-core-module: 2.16.1
-      resolve: 1.22.10
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-import-resolver-typescript@3.10.0(eslint-plugin-import-x@4.10.2(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@nolyfill/is-core-module': 1.0.39
-      debug: 4.4.0
-      eslint: 9.24.0(jiti@1.21.7)
-      get-tsconfig: 4.10.0
-      is-bun-module: 2.0.0
-      stable-hash: 0.0.5
-      tinyglobby: 0.2.12
-      unrs-resolver: 1.4.1
-    optionalDependencies:
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@1.21.7))
-      eslint-plugin-import-x: 4.10.2(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-json-compat-utils@0.2.1(eslint@9.24.0(jiti@1.21.7))(jsonc-eslint-parser@2.4.0):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-      esquery: 1.6.0
-      jsonc-eslint-parser: 2.4.0
-
-  eslint-merge-processors@2.0.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-
-  eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      debug: 3.2.7
-    optionalDependencies:
-      '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import-x@4.10.2(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@1.21.7))
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-antfu@3.1.1(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-
-  eslint-plugin-command@3.2.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@es-joy/jsdoccomment': 0.50.0
-      eslint: 9.24.0(jiti@1.21.7)
-
-  eslint-plugin-es-x@7.8.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@1.21.7))
-      '@eslint-community/regexpp': 4.12.1
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-compat-utils: 0.5.1(eslint@9.24.0(jiti@1.21.7))
-
-  eslint-plugin-import-x@4.10.2(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@pkgr/core': 0.2.2
-      '@types/doctrine': 0.0.9
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      debug: 4.4.0
-      doctrine: 3.0.0
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-import-resolver-node: 0.3.9
-      get-tsconfig: 4.10.0
-      is-glob: 4.0.3
-      minimatch: 10.0.1
-      semver: 7.7.1
-      stable-hash: 0.0.5
-      tslib: 2.8.1
-      unrs-resolver: 1.4.1
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-
-  eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@rtsao/scc': 1.1.0
-      array-includes: 3.1.8
-      array.prototype.findlastindex: 1.2.6
-      array.prototype.flat: 1.3.3
-      array.prototype.flatmap: 1.3.3
-      debug: 3.2.7
-      doctrine: 2.1.0
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.24.0(jiti@1.21.7))
-      hasown: 2.0.2
-      is-core-module: 2.16.1
-      is-glob: 4.0.3
-      minimatch: 3.1.2
-      object.fromentries: 2.0.8
-      object.groupby: 1.0.3
-      object.values: 1.2.1
-      semver: 6.3.1
-      string.prototype.trimend: 1.0.9
-      tsconfig-paths: 3.15.0
-    optionalDependencies:
-      '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-    transitivePeerDependencies:
-      - eslint-import-resolver-typescript
-      - eslint-import-resolver-webpack
-      - supports-color
-
-  eslint-plugin-jsdoc@50.6.9(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@es-joy/jsdoccomment': 0.49.0
-      are-docs-informative: 0.0.2
-      comment-parser: 1.4.1
-      debug: 4.4.0
-      escape-string-regexp: 4.0.0
-      eslint: 9.24.0(jiti@1.21.7)
-      espree: 10.3.0
-      esquery: 1.6.0
-      parse-imports: 2.2.1
-      semver: 7.7.1
-      spdx-expression-parse: 4.0.0
-      synckit: 0.9.2
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-jsonc@2.20.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@1.21.7))
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-compat-utils: 0.6.5(eslint@9.24.0(jiti@1.21.7))
-      eslint-json-compat-utils: 0.2.1(eslint@9.24.0(jiti@1.21.7))(jsonc-eslint-parser@2.4.0)
-      espree: 10.3.0
-      graphemer: 1.4.0
-      jsonc-eslint-parser: 2.4.0
-      natural-compare: 1.4.0
-      synckit: 0.10.3
-    transitivePeerDependencies:
-      - '@eslint/json'
-
-  eslint-plugin-jsx-a11y@6.10.2(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      aria-query: 5.3.2
-      array-includes: 3.1.8
-      array.prototype.flatmap: 1.3.3
-      ast-types-flow: 0.0.8
-      axe-core: 4.10.3
-      axobject-query: 4.1.0
-      damerau-levenshtein: 1.0.8
-      emoji-regex: 9.2.2
-      eslint: 9.24.0(jiti@1.21.7)
-      hasown: 2.0.2
-      jsx-ast-utils: 3.3.5
-      language-tags: 1.0.9
-      minimatch: 3.1.2
-      object.fromentries: 2.0.8
-      safe-regex-test: 1.1.0
-      string.prototype.includes: 2.0.1
-
-  eslint-plugin-n@17.17.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@1.21.7))
-      enhanced-resolve: 5.18.1
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-plugin-es-x: 7.8.0(eslint@9.24.0(jiti@1.21.7))
-      get-tsconfig: 4.10.0
-      globals: 15.15.0
-      ignore: 5.3.2
-      minimatch: 9.0.5
-      semver: 7.7.1
-
-  eslint-plugin-no-only-tests@3.3.0: {}
-
-  eslint-plugin-perfectionist@4.11.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      natural-orderby: 5.0.0
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-
-  eslint-plugin-pnpm@0.3.1(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-      find-up-simple: 1.0.1
-      jsonc-eslint-parser: 2.4.0
-      pathe: 2.0.3
-      pnpm-workspace-yaml: 0.3.1
-      tinyglobby: 0.2.12
-      yaml-eslint-parser: 1.3.0
-
-  eslint-plugin-react-debug@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/core': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/jsx': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/shared': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/var': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      string-ts: 2.2.1
-      ts-pattern: 5.7.0
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-react-dom@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/core': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/jsx': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/shared': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/var': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      compare-versions: 6.1.1
-      eslint: 9.24.0(jiti@1.21.7)
-      string-ts: 2.2.1
-      ts-pattern: 5.7.0
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-react-hooks-extra@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/core': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/jsx': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/shared': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/var': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      string-ts: 2.2.1
-      ts-pattern: 5.7.0
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-react-hooks@5.2.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-
-  eslint-plugin-react-naming-convention@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/core': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/jsx': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/shared': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/var': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      string-ts: 2.2.1
-      ts-pattern: 5.7.0
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-react-refresh@0.4.19(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-
-  eslint-plugin-react-web-api@1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/core': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/jsx': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/shared': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/var': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      string-ts: 2.2.1
-      ts-pattern: 5.7.0
-    optionalDependencies:
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-react-x@1.45.0(eslint@9.24.0(jiti@1.21.7))(ts-api-utils@2.1.0(typescript@4.9.5))(typescript@4.9.5):
-    dependencies:
-      '@eslint-react/ast': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/core': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/eff': 1.45.0
-      '@eslint-react/jsx': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/kit': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/shared': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@eslint-react/var': 1.45.0(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/scope-manager': 8.29.1
-      '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/types': 8.29.1
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      compare-versions: 6.1.1
-      eslint: 9.24.0(jiti@1.21.7)
-      is-immutable-type: 5.0.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      string-ts: 2.2.1
-      ts-pattern: 5.7.0
-    optionalDependencies:
-      ts-api-utils: 2.1.0(typescript@4.9.5)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-react@7.37.5(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      array-includes: 3.1.8
-      array.prototype.findlast: 1.2.5
-      array.prototype.flatmap: 1.3.3
-      array.prototype.tosorted: 1.1.4
-      doctrine: 2.1.0
-      es-iterator-helpers: 1.2.1
-      eslint: 9.24.0(jiti@1.21.7)
-      estraverse: 5.3.0
-      hasown: 2.0.2
-      jsx-ast-utils: 3.3.5
-      minimatch: 3.1.2
-      object.entries: 1.1.9
-      object.fromentries: 2.0.8
-      object.values: 1.2.1
-      prop-types: 15.8.1
-      resolve: 2.0.0-next.5
-      semver: 6.3.1
-      string.prototype.matchall: 4.0.12
-      string.prototype.repeat: 1.0.0
-
-  eslint-plugin-regexp@2.7.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@1.21.7))
-      '@eslint-community/regexpp': 4.12.1
-      comment-parser: 1.4.1
-      eslint: 9.24.0(jiti@1.21.7)
-      jsdoc-type-pratt-parser: 4.1.0
-      refa: 0.12.1
-      regexp-ast-analysis: 0.7.1
-      scslre: 0.3.0
-
-  eslint-plugin-sonarjs@3.0.2(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@eslint-community/regexpp': 4.12.1
-      builtin-modules: 3.3.0
-      bytes: 3.1.2
-      eslint: 9.24.0(jiti@1.21.7)
-      functional-red-black-tree: 1.0.1
-      jsx-ast-utils: 3.3.5
-      minimatch: 9.0.5
-      scslre: 0.3.0
-      semver: 7.7.1
-      typescript: 5.8.3
-
-  eslint-plugin-storybook@0.11.6(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@storybook/csf': 0.1.13
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      ts-dedent: 2.2.0
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-
-  eslint-plugin-tailwindcss@3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))):
-    dependencies:
-      fast-glob: 3.3.3
-      postcss: 8.5.3
-      tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-
-  eslint-plugin-toml@0.12.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      debug: 4.4.0
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-compat-utils: 0.6.5(eslint@9.24.0(jiti@1.21.7))
-      lodash: 4.17.21
-      toml-eslint-parser: 0.10.0
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-unicorn@58.0.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@babel/helper-validator-identifier': 7.25.9
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@1.21.7))
-      '@eslint/plugin-kit': 0.2.8
-      ci-info: 4.2.0
-      clean-regexp: 1.0.0
-      core-js-compat: 3.41.0
-      eslint: 9.24.0(jiti@1.21.7)
-      esquery: 1.6.0
-      globals: 16.0.0
-      indent-string: 5.0.0
-      is-builtin-module: 5.0.0
-      jsesc: 3.1.0
-      pluralize: 8.0.0
-      read-package-up: 11.0.0
-      regexp-tree: 0.1.27
-      regjsparser: 0.12.0
-      semver: 7.7.1
-      strip-indent: 4.0.0
-
-  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      eslint: 9.24.0(jiti@1.21.7)
-    optionalDependencies:
-      '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-
-  eslint-plugin-vue@10.0.0(eslint@9.24.0(jiti@1.21.7))(vue-eslint-parser@10.1.3(eslint@9.24.0(jiti@1.21.7))):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@1.21.7))
-      eslint: 9.24.0(jiti@1.21.7)
-      natural-compare: 1.4.0
-      nth-check: 2.1.1
-      postcss-selector-parser: 6.1.2
-      semver: 7.7.1
-      vue-eslint-parser: 10.1.3(eslint@9.24.0(jiti@1.21.7))
-      xml-name-validator: 4.0.0
-
-  eslint-plugin-yml@1.17.0(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      debug: 4.4.0
-      escape-string-regexp: 4.0.0
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-compat-utils: 0.6.5(eslint@9.24.0(jiti@1.21.7))
-      natural-compare: 1.4.0
-      yaml-eslint-parser: 1.3.0
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.13)(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      '@vue/compiler-sfc': 3.5.13
-      eslint: 9.24.0(jiti@1.21.7)
-
-  eslint-scope@5.1.1:
-    dependencies:
-      esrecurse: 4.3.0
-      estraverse: 4.3.0
-
-  eslint-scope@8.3.0:
-    dependencies:
-      esrecurse: 4.3.0
-      estraverse: 5.3.0
-
-  eslint-visitor-keys@3.4.3: {}
-
-  eslint-visitor-keys@4.2.0: {}
-
-  eslint@9.24.0(jiti@1.21.7):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@1.21.7))
-      '@eslint-community/regexpp': 4.12.1
-      '@eslint/config-array': 0.20.0
-      '@eslint/config-helpers': 0.2.1
-      '@eslint/core': 0.12.0
-      '@eslint/eslintrc': 3.3.1
-      '@eslint/js': 9.24.0
-      '@eslint/plugin-kit': 0.2.8
-      '@humanfs/node': 0.16.6
-      '@humanwhocodes/module-importer': 1.0.1
-      '@humanwhocodes/retry': 0.4.2
-      '@types/estree': 1.0.7
-      '@types/json-schema': 7.0.15
-      ajv: 6.12.6
-      chalk: 4.1.2
-      cross-spawn: 7.0.6
-      debug: 4.4.0
-      escape-string-regexp: 4.0.0
-      eslint-scope: 8.3.0
-      eslint-visitor-keys: 4.2.0
-      espree: 10.3.0
-      esquery: 1.6.0
-      esutils: 2.0.3
-      fast-deep-equal: 3.1.3
-      file-entry-cache: 8.0.0
-      find-up: 5.0.0
-      glob-parent: 6.0.2
-      ignore: 5.3.2
-      imurmurhash: 0.1.4
-      is-glob: 4.0.3
-      json-stable-stringify-without-jsonify: 1.0.1
-      lodash.merge: 4.6.2
-      minimatch: 3.1.2
-      natural-compare: 1.4.0
-      optionator: 0.9.4
-    optionalDependencies:
-      jiti: 1.21.7
-    transitivePeerDependencies:
-      - supports-color
-
-  espree@10.3.0:
-    dependencies:
-      acorn: 8.14.1
-      acorn-jsx: 5.3.2(acorn@8.14.1)
-      eslint-visitor-keys: 4.2.0
-
-  espree@9.6.1:
-    dependencies:
-      acorn: 8.14.1
-      acorn-jsx: 5.3.2(acorn@8.14.1)
-      eslint-visitor-keys: 3.4.3
-
-  esprima@4.0.1: {}
-
-  esquery@1.6.0:
-    dependencies:
-      estraverse: 5.3.0
-
-  esrecurse@4.3.0:
-    dependencies:
-      estraverse: 5.3.0
-
-  estraverse@4.3.0: {}
-
-  estraverse@5.3.0: {}
-
-  estree-util-attach-comments@3.0.0:
-    dependencies:
-      '@types/estree': 1.0.7
-
-  estree-util-build-jsx@3.0.1:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      devlop: 1.1.0
-      estree-util-is-identifier-name: 3.0.0
-      estree-walker: 3.0.3
-
-  estree-util-is-identifier-name@3.0.0: {}
-
-  estree-util-scope@1.0.0:
-    dependencies:
-      '@types/estree': 1.0.7
-      devlop: 1.1.0
-
-  estree-util-to-js@2.0.0:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      astring: 1.9.0
-      source-map: 0.7.4
-
-  estree-util-visit@2.0.0:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      '@types/unist': 3.0.3
-
-  estree-walker@2.0.2: {}
-
-  estree-walker@3.0.3:
-    dependencies:
-      '@types/estree': 1.0.7
-
-  esutils@2.0.3: {}
-
-  event-target-shim@5.0.1: {}
-
-  eventemitter3@5.0.1: {}
-
-  events@3.3.0: {}
-
-  evp_bytestokey@1.0.3:
-    dependencies:
-      md5.js: 1.3.5
-      safe-buffer: 5.2.1
-
-  execa@5.1.1:
-    dependencies:
-      cross-spawn: 7.0.6
-      get-stream: 6.0.1
-      human-signals: 2.1.0
-      is-stream: 2.0.1
-      merge-stream: 2.0.0
-      npm-run-path: 4.0.1
-      onetime: 5.1.2
-      signal-exit: 3.0.7
-      strip-final-newline: 2.0.0
-
-  execa@8.0.1:
-    dependencies:
-      cross-spawn: 7.0.6
-      get-stream: 8.0.1
-      human-signals: 5.0.0
-      is-stream: 3.0.0
-      merge-stream: 2.0.0
-      npm-run-path: 5.3.0
-      onetime: 6.0.0
-      signal-exit: 4.1.0
-      strip-final-newline: 3.0.0
-
-  exit@0.1.2: {}
-
-  expect-type@1.2.1: {}
-
-  expect@29.7.0:
-    dependencies:
-      '@jest/expect-utils': 29.7.0
-      jest-get-type: 29.6.3
-      jest-matcher-utils: 29.7.0
-      jest-message-util: 29.7.0
-      jest-util: 29.7.0
-
-  exsolve@1.0.4: {}
-
-  extend@3.0.2: {}
-
-  fast-content-type-parse@2.0.1: {}
-
-  fast-deep-equal@3.1.3: {}
-
-  fast-glob@3.3.1:
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      '@nodelib/fs.walk': 1.2.8
-      glob-parent: 5.1.2
-      merge2: 1.4.1
-      micromatch: 4.0.8
-
-  fast-glob@3.3.3:
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      '@nodelib/fs.walk': 1.2.8
-      glob-parent: 5.1.2
-      merge2: 1.4.1
-      micromatch: 4.0.8
-
-  fast-json-parse@1.0.3: {}
-
-  fast-json-stable-stringify@2.1.0: {}
-
-  fast-levenshtein@2.0.6: {}
-
-  fast-uri@3.0.6: {}
-
-  fastq@1.19.1:
-    dependencies:
-      reusify: 1.1.0
-
-  fault@1.0.4:
-    dependencies:
-      format: 0.2.2
-
-  fb-watchman@2.0.2:
-    dependencies:
-      bser: 2.1.1
-
-  fdir@6.4.3(picomatch@4.0.2):
-    optionalDependencies:
-      picomatch: 4.0.2
-
-  file-entry-cache@8.0.0:
-    dependencies:
-      flat-cache: 4.0.1
-
-  filesize@10.1.6: {}
-
-  fill-range@7.1.1:
-    dependencies:
-      to-regex-range: 5.0.1
-
-  filter-obj@2.0.2: {}
-
-  find-cache-dir@3.3.2:
-    dependencies:
-      commondir: 1.0.1
-      make-dir: 3.1.0
-      pkg-dir: 4.2.0
-
-  find-cache-dir@4.0.0:
-    dependencies:
-      common-path-prefix: 3.0.0
-      pkg-dir: 7.0.0
-
-  find-up-simple@1.0.1: {}
-
-  find-up@4.1.0:
-    dependencies:
-      locate-path: 5.0.0
-      path-exists: 4.0.0
-
-  find-up@5.0.0:
-    dependencies:
-      locate-path: 6.0.0
-      path-exists: 4.0.0
-
-  find-up@6.3.0:
-    dependencies:
-      locate-path: 7.2.0
-      path-exists: 5.0.0
-
-  flat-cache@3.2.0:
-    dependencies:
-      flatted: 3.3.3
-      keyv: 4.5.4
-      rimraf: 3.0.2
-
-  flat-cache@4.0.1:
-    dependencies:
-      flatted: 3.3.3
-      keyv: 4.5.4
-
-  flatted@3.3.3: {}
-
-  for-each@0.3.5:
-    dependencies:
-      is-callable: 1.2.7
-
-  foreground-child@3.3.1:
-    dependencies:
-      cross-spawn: 7.0.6
-      signal-exit: 4.1.0
-
-  fork-ts-checker-webpack-plugin@8.0.0(typescript@4.9.5)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      '@babel/code-frame': 7.26.2
-      chalk: 4.1.2
-      chokidar: 3.6.0
-      cosmiconfig: 7.1.0
-      deepmerge: 4.3.1
-      fs-extra: 10.1.0
-      memfs: 3.5.3
-      minimatch: 3.1.2
-      node-abort-controller: 3.1.1
-      schema-utils: 3.3.0
-      semver: 7.7.1
-      tapable: 2.2.1
-      typescript: 4.9.5
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-
-  format@0.2.2: {}
-
-  fraction.js@4.3.7: {}
-
-  fs-extra@10.1.0:
-    dependencies:
-      graceful-fs: 4.2.11
-      jsonfile: 6.1.0
-      universalify: 2.0.1
-
-  fs-minipass@2.1.0:
-    dependencies:
-      minipass: 3.3.6
-    optional: true
-
-  fs-monkey@1.0.6: {}
-
-  fs.realpath@1.0.0: {}
-
-  fsevents@2.3.3:
-    optional: true
-
-  function-bind@1.1.2: {}
-
-  function.prototype.name@1.1.8:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      functions-have-names: 1.2.3
-      hasown: 2.0.2
-      is-callable: 1.2.7
-
-  functional-red-black-tree@1.0.1: {}
-
-  functions-have-names@1.2.3: {}
-
-  gauge@3.0.2:
-    dependencies:
-      aproba: 2.0.0
-      color-support: 1.1.3
-      console-control-strings: 1.1.0
-      has-unicode: 2.0.1
-      object-assign: 4.1.1
-      signal-exit: 3.0.7
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      wide-align: 1.1.5
-    optional: true
-
-  gensync@1.0.0-beta.2: {}
-
-  get-caller-file@2.0.5: {}
-
-  get-east-asian-width@1.3.0: {}
-
-  get-intrinsic@1.3.0:
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-define-property: 1.0.1
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      function-bind: 1.1.2
-      get-proto: 1.0.1
-      gopd: 1.2.0
-      has-symbols: 1.1.0
-      hasown: 2.0.2
-      math-intrinsics: 1.1.0
-
-  get-package-type@0.1.0: {}
-
-  get-proto@1.0.1:
-    dependencies:
-      dunder-proto: 1.0.1
-      es-object-atoms: 1.1.1
-
-  get-stream@5.2.0:
-    dependencies:
-      pump: 3.0.2
-
-  get-stream@6.0.1: {}
-
-  get-stream@8.0.1: {}
-
-  get-symbol-description@1.1.0:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-
-  get-tsconfig@4.10.0:
-    dependencies:
-      resolve-pkg-maps: 1.0.0
-
-  glob-parent@5.1.2:
-    dependencies:
-      is-glob: 4.0.3
-
-  glob-parent@6.0.2:
-    dependencies:
-      is-glob: 4.0.3
-
-  glob-to-regexp@0.4.1: {}
-
-  glob@10.4.5:
-    dependencies:
-      foreground-child: 3.3.1
-      jackspeak: 3.4.3
-      minimatch: 9.0.5
-      minipass: 7.1.2
-      package-json-from-dist: 1.0.1
-      path-scurry: 1.11.1
-
-  glob@7.2.3:
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.4
-      minimatch: 3.1.2
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-
-  globals@11.12.0: {}
-
-  globals@14.0.0: {}
-
-  globals@15.15.0: {}
-
-  globals@16.0.0: {}
-
-  globalthis@1.0.4:
-    dependencies:
-      define-properties: 1.2.1
-      gopd: 1.2.0
-
-  gopd@1.2.0: {}
-
-  got@11.8.6:
-    dependencies:
-      '@sindresorhus/is': 4.6.0
-      '@szmarczak/http-timer': 4.0.6
-      '@types/cacheable-request': 6.0.3
-      '@types/responselike': 1.0.3
-      cacheable-lookup: 5.0.4
-      cacheable-request: 7.0.4
-      decompress-response: 6.0.0
-      http2-wrapper: 1.0.3
-      lowercase-keys: 2.0.0
-      p-cancelable: 2.1.1
-      responselike: 2.0.1
-
-  graceful-fs@4.2.11: {}
-
-  graphemer@1.4.0: {}
-
-  hachure-fill@0.5.2: {}
-
-  happy-dom@17.4.4:
-    dependencies:
-      webidl-conversions: 7.0.0
-      whatwg-mimetype: 3.0.0
-
-  has-bigints@1.1.0: {}
-
-  has-flag@4.0.0: {}
-
-  has-property-descriptors@1.0.2:
-    dependencies:
-      es-define-property: 1.0.1
-
-  has-proto@1.2.0:
-    dependencies:
-      dunder-proto: 1.0.1
-
-  has-symbols@1.1.0: {}
-
-  has-tostringtag@1.0.2:
-    dependencies:
-      has-symbols: 1.1.0
-
-  has-unicode@2.0.1:
-    optional: true
-
-  hash-base@3.0.5:
-    dependencies:
-      inherits: 2.0.4
-      safe-buffer: 5.2.1
-
-  hash.js@1.1.7:
-    dependencies:
-      inherits: 2.0.4
-      minimalistic-assert: 1.0.1
-
-  hasown@2.0.2:
-    dependencies:
-      function-bind: 1.1.2
-
-  hast-util-from-dom@5.0.1:
-    dependencies:
-      '@types/hast': 3.0.4
-      hastscript: 9.0.1
-      web-namespaces: 2.0.1
-
-  hast-util-from-html-isomorphic@2.0.0:
-    dependencies:
-      '@types/hast': 3.0.4
-      hast-util-from-dom: 5.0.1
-      hast-util-from-html: 2.0.3
-      unist-util-remove-position: 5.0.0
-
-  hast-util-from-html@2.0.3:
-    dependencies:
-      '@types/hast': 3.0.4
-      devlop: 1.1.0
-      hast-util-from-parse5: 8.0.3
-      parse5: 7.2.1
-      vfile: 6.0.3
-      vfile-message: 4.0.2
-
-  hast-util-from-parse5@8.0.3:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      devlop: 1.1.0
-      hastscript: 9.0.1
-      property-information: 7.0.0
-      vfile: 6.0.3
-      vfile-location: 5.0.3
-      web-namespaces: 2.0.1
-
-  hast-util-is-element@3.0.0:
-    dependencies:
-      '@types/hast': 3.0.4
-
-  hast-util-parse-selector@2.2.5: {}
-
-  hast-util-parse-selector@4.0.0:
-    dependencies:
-      '@types/hast': 3.0.4
-
-  hast-util-raw@9.1.0:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      '@ungap/structured-clone': 1.3.0
-      hast-util-from-parse5: 8.0.3
-      hast-util-to-parse5: 8.0.0
-      html-void-elements: 3.0.0
-      mdast-util-to-hast: 13.2.0
-      parse5: 7.2.1
-      unist-util-position: 5.0.0
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-      web-namespaces: 2.0.1
-      zwitch: 2.0.4
-
-  hast-util-to-estree@3.1.3:
-    dependencies:
-      '@types/estree': 1.0.7
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      comma-separated-tokens: 2.0.3
-      devlop: 1.1.0
-      estree-util-attach-comments: 3.0.0
-      estree-util-is-identifier-name: 3.0.0
-      hast-util-whitespace: 3.0.0
-      mdast-util-mdx-expression: 2.0.1
-      mdast-util-mdx-jsx: 3.2.0
-      mdast-util-mdxjs-esm: 2.0.1
-      property-information: 7.0.0
-      space-separated-tokens: 2.0.2
-      style-to-js: 1.1.16
-      unist-util-position: 5.0.0
-      zwitch: 2.0.4
-    transitivePeerDependencies:
-      - supports-color
-
-  hast-util-to-jsx-runtime@2.3.6:
-    dependencies:
-      '@types/estree': 1.0.7
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      comma-separated-tokens: 2.0.3
-      devlop: 1.1.0
-      estree-util-is-identifier-name: 3.0.0
-      hast-util-whitespace: 3.0.0
-      mdast-util-mdx-expression: 2.0.1
-      mdast-util-mdx-jsx: 3.2.0
-      mdast-util-mdxjs-esm: 2.0.1
-      property-information: 7.0.0
-      space-separated-tokens: 2.0.2
-      style-to-js: 1.1.16
-      unist-util-position: 5.0.0
-      vfile-message: 4.0.2
-    transitivePeerDependencies:
-      - supports-color
-
-  hast-util-to-parse5@8.0.0:
-    dependencies:
-      '@types/hast': 3.0.4
-      comma-separated-tokens: 2.0.3
-      devlop: 1.1.0
-      property-information: 6.5.0
-      space-separated-tokens: 2.0.2
-      web-namespaces: 2.0.1
-      zwitch: 2.0.4
-
-  hast-util-to-text@4.0.2:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/unist': 3.0.3
-      hast-util-is-element: 3.0.0
-      unist-util-find-after: 5.0.0
-
-  hast-util-whitespace@3.0.0:
-    dependencies:
-      '@types/hast': 3.0.4
-
-  hastscript@6.0.0:
-    dependencies:
-      '@types/hast': 2.3.10
-      comma-separated-tokens: 1.0.8
-      hast-util-parse-selector: 2.2.5
-      property-information: 5.6.0
-      space-separated-tokens: 1.1.5
-
-  hastscript@9.0.1:
-    dependencies:
-      '@types/hast': 3.0.4
-      comma-separated-tokens: 2.0.3
-      hast-util-parse-selector: 4.0.0
-      property-information: 7.0.0
-      space-separated-tokens: 2.0.2
-
-  he@1.2.0: {}
-
-  highlight.js@10.7.3: {}
-
-  highlightjs-vue@1.0.0: {}
-
-  hmac-drbg@1.0.1:
-    dependencies:
-      hash.js: 1.1.7
-      minimalistic-assert: 1.0.1
-      minimalistic-crypto-utils: 1.0.1
-
-  hoist-non-react-statics@3.3.2:
-    dependencies:
-      react-is: 16.13.1
-
-  hosted-git-info@7.0.2:
-    dependencies:
-      lru-cache: 10.4.3
-
-  html-entities@2.6.0: {}
-
-  html-escaper@2.0.2: {}
-
-  html-minifier-terser@6.1.0:
-    dependencies:
-      camel-case: 4.1.2
-      clean-css: 5.3.3
-      commander: 8.3.0
-      he: 1.2.0
-      param-case: 3.0.4
-      relateurl: 0.2.7
-      terser: 5.39.0
-
-  html-parse-stringify@3.0.1:
-    dependencies:
-      void-elements: 3.1.0
-
-  html-to-image@1.11.11: {}
-
-  html-url-attributes@3.0.1: {}
-
-  html-void-elements@3.0.0: {}
-
-  html-webpack-plugin@5.6.3(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      '@types/html-minifier-terser': 6.1.0
-      html-minifier-terser: 6.1.0
-      lodash: 4.17.21
-      pretty-error: 4.0.0
-      tapable: 2.2.1
-    optionalDependencies:
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-
-  htmlparser2@6.1.0:
-    dependencies:
-      domelementtype: 2.3.0
-      domhandler: 4.3.1
-      domutils: 2.8.0
-      entities: 2.2.0
-
-  http-cache-semantics@4.1.1: {}
-
-  http2-wrapper@1.0.3:
-    dependencies:
-      quick-lru: 5.1.1
-      resolve-alpn: 1.2.1
-
-  https-browserify@1.0.0: {}
-
-  https-proxy-agent@5.0.1:
-    dependencies:
-      agent-base: 6.0.2
-      debug: 4.4.0
-    transitivePeerDependencies:
-      - supports-color
-    optional: true
-
-  human-signals@2.1.0: {}
-
-  human-signals@5.0.0: {}
-
-  husky@9.1.7: {}
-
-  i18next-resources-to-backend@1.2.1:
-    dependencies:
-      '@babel/runtime': 7.27.0
-
-  i18next@23.16.8:
-    dependencies:
-      '@babel/runtime': 7.27.0
-
-  iconv-lite@0.6.3:
-    dependencies:
-      safer-buffer: 2.1.2
-
-  icss-utils@5.1.0(postcss@8.5.3):
-    dependencies:
-      postcss: 8.5.3
-
-  ieee754@1.2.1: {}
-
-  ignore@5.3.2: {}
-
-  image-size@1.2.1:
-    dependencies:
-      queue: 6.0.2
-
-  immer@9.0.21: {}
-
-  immutable@5.1.1: {}
-
-  import-fresh@3.3.1:
-    dependencies:
-      parent-module: 1.0.1
-      resolve-from: 4.0.0
-
-  import-local@3.2.0:
-    dependencies:
-      pkg-dir: 4.2.0
-      resolve-cwd: 3.0.0
-
-  imurmurhash@0.1.4: {}
-
-  indent-string@4.0.0: {}
-
-  indent-string@5.0.0: {}
-
-  index-to-position@1.1.0: {}
-
-  inflight@1.0.6:
-    dependencies:
-      once: 1.4.0
-      wrappy: 1.0.2
-
-  inherits@2.0.4: {}
-
-  inline-style-parser@0.2.4: {}
-
-  internal-slot@1.1.0:
-    dependencies:
-      es-errors: 1.3.0
-      hasown: 2.0.2
-      side-channel: 1.1.0
-
-  internmap@1.0.1: {}
-
-  internmap@2.0.3: {}
-
-  intersection-observer@0.12.2: {}
-
-  is-alphabetical@1.0.4: {}
-
-  is-alphabetical@2.0.1: {}
-
-  is-alphanumerical@1.0.4:
-    dependencies:
-      is-alphabetical: 1.0.4
-      is-decimal: 1.0.4
-
-  is-alphanumerical@2.0.1:
-    dependencies:
-      is-alphabetical: 2.0.1
-      is-decimal: 2.0.1
-
-  is-arguments@1.2.0:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  is-array-buffer@3.0.5:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      get-intrinsic: 1.3.0
-
-  is-arrayish@0.2.1: {}
-
-  is-arrayish@0.3.2: {}
-
-  is-async-function@2.1.1:
-    dependencies:
-      async-function: 1.0.0
-      call-bound: 1.0.4
-      get-proto: 1.0.1
-      has-tostringtag: 1.0.2
-      safe-regex-test: 1.1.0
-
-  is-bigint@1.1.0:
-    dependencies:
-      has-bigints: 1.1.0
-
-  is-binary-path@2.1.0:
-    dependencies:
-      binary-extensions: 2.3.0
-
-  is-boolean-object@1.2.2:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  is-builtin-module@5.0.0:
-    dependencies:
-      builtin-modules: 5.0.0
-
-  is-bun-module@2.0.0:
-    dependencies:
-      semver: 7.7.1
-
-  is-callable@1.2.7: {}
-
-  is-core-module@2.16.1:
-    dependencies:
-      hasown: 2.0.2
-
-  is-data-view@1.0.2:
-    dependencies:
-      call-bound: 1.0.4
-      get-intrinsic: 1.3.0
-      is-typed-array: 1.1.15
-
-  is-date-object@1.1.0:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  is-decimal@1.0.4: {}
-
-  is-decimal@2.0.1: {}
-
-  is-docker@2.2.1: {}
-
-  is-extglob@2.1.1: {}
-
-  is-finalizationregistry@1.1.1:
-    dependencies:
-      call-bound: 1.0.4
-
-  is-fullwidth-code-point@3.0.0: {}
-
-  is-fullwidth-code-point@4.0.0: {}
-
-  is-fullwidth-code-point@5.0.0:
-    dependencies:
-      get-east-asian-width: 1.3.0
-
-  is-generator-fn@2.1.0: {}
-
-  is-generator-function@1.1.0:
-    dependencies:
-      call-bound: 1.0.4
-      get-proto: 1.0.1
-      has-tostringtag: 1.0.2
-      safe-regex-test: 1.1.0
-
-  is-glob@4.0.3:
-    dependencies:
-      is-extglob: 2.1.1
-
-  is-hexadecimal@1.0.4: {}
-
-  is-hexadecimal@2.0.1: {}
-
-  is-immutable-type@5.0.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      ts-api-utils: 2.1.0(typescript@4.9.5)
-      ts-declaration-location: 1.0.7(typescript@4.9.5)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  is-map@2.0.3: {}
-
-  is-nan@1.3.2:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-
-  is-number-object@1.1.1:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  is-number@7.0.0: {}
-
-  is-plain-obj@4.1.0: {}
-
-  is-regex@1.2.1:
-    dependencies:
-      call-bound: 1.0.4
-      gopd: 1.2.0
-      has-tostringtag: 1.0.2
-      hasown: 2.0.2
-
-  is-set@2.0.3: {}
-
-  is-shared-array-buffer@1.0.4:
-    dependencies:
-      call-bound: 1.0.4
-
-  is-stream@2.0.1: {}
-
-  is-stream@3.0.0: {}
-
-  is-string@1.1.1:
-    dependencies:
-      call-bound: 1.0.4
-      has-tostringtag: 1.0.2
-
-  is-symbol@1.1.1:
-    dependencies:
-      call-bound: 1.0.4
-      has-symbols: 1.1.0
-      safe-regex-test: 1.1.0
-
-  is-typed-array@1.1.15:
-    dependencies:
-      which-typed-array: 1.1.19
-
-  is-weakmap@2.0.2: {}
-
-  is-weakref@1.1.1:
-    dependencies:
-      call-bound: 1.0.4
-
-  is-weakset@2.0.4:
-    dependencies:
-      call-bound: 1.0.4
-      get-intrinsic: 1.3.0
-
-  is-wsl@2.2.0:
-    dependencies:
-      is-docker: 2.2.1
-
-  isarray@1.0.0: {}
-
-  isarray@2.0.5: {}
-
-  isexe@2.0.0: {}
-
-  isomorphic.js@0.2.5: {}
-
-  istanbul-lib-coverage@3.2.2: {}
-
-  istanbul-lib-instrument@5.2.1:
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/parser': 7.27.0
-      '@istanbuljs/schema': 0.1.3
-      istanbul-lib-coverage: 3.2.2
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  istanbul-lib-instrument@6.0.3:
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/parser': 7.27.0
-      '@istanbuljs/schema': 0.1.3
-      istanbul-lib-coverage: 3.2.2
-      semver: 7.7.1
-    transitivePeerDependencies:
-      - supports-color
-
-  istanbul-lib-report@3.0.1:
-    dependencies:
-      istanbul-lib-coverage: 3.2.2
-      make-dir: 4.0.0
-      supports-color: 7.2.0
-
-  istanbul-lib-source-maps@4.0.1:
-    dependencies:
-      debug: 4.4.0
-      istanbul-lib-coverage: 3.2.2
-      source-map: 0.6.1
-    transitivePeerDependencies:
-      - supports-color
-
-  istanbul-reports@3.1.7:
-    dependencies:
-      html-escaper: 2.0.2
-      istanbul-lib-report: 3.0.1
-
-  iterator.prototype@1.1.5:
-    dependencies:
-      define-data-property: 1.1.4
-      es-object-atoms: 1.1.1
-      get-intrinsic: 1.3.0
-      get-proto: 1.0.1
-      has-symbols: 1.1.0
-      set-function-name: 2.0.2
-
-  jackspeak@3.4.3:
-    dependencies:
-      '@isaacs/cliui': 8.0.2
-    optionalDependencies:
-      '@pkgjs/parseargs': 0.11.0
-
-  jest-changed-files@29.7.0:
-    dependencies:
-      execa: 5.1.1
-      jest-util: 29.7.0
-      p-limit: 3.1.0
-
-  jest-circus@29.7.0:
-    dependencies:
-      '@jest/environment': 29.7.0
-      '@jest/expect': 29.7.0
-      '@jest/test-result': 29.7.0
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      chalk: 4.1.2
-      co: 4.6.0
-      dedent: 1.5.3
-      is-generator-fn: 2.1.0
-      jest-each: 29.7.0
-      jest-matcher-utils: 29.7.0
-      jest-message-util: 29.7.0
-      jest-runtime: 29.7.0
-      jest-snapshot: 29.7.0
-      jest-util: 29.7.0
-      p-limit: 3.1.0
-      pretty-format: 29.7.0
-      pure-rand: 6.1.0
-      slash: 3.0.0
-      stack-utils: 2.0.6
-    transitivePeerDependencies:
-      - babel-plugin-macros
-      - supports-color
-
-  jest-cli@29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)):
-    dependencies:
-      '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      '@jest/test-result': 29.7.0
-      '@jest/types': 29.6.3
-      chalk: 4.1.2
-      create-jest: 29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      exit: 0.1.2
-      import-local: 3.2.0
-      jest-config: 29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      jest-util: 29.7.0
-      jest-validate: 29.7.0
-      yargs: 17.7.2
-    transitivePeerDependencies:
-      - '@types/node'
-      - babel-plugin-macros
-      - supports-color
-      - ts-node
-
-  jest-config@29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)):
-    dependencies:
-      '@babel/core': 7.26.10
-      '@jest/test-sequencer': 29.7.0
-      '@jest/types': 29.6.3
-      babel-jest: 29.7.0(@babel/core@7.26.10)
-      chalk: 4.1.2
-      ci-info: 3.9.0
-      deepmerge: 4.3.1
-      glob: 7.2.3
-      graceful-fs: 4.2.11
-      jest-circus: 29.7.0
-      jest-environment-node: 29.7.0
-      jest-get-type: 29.6.3
-      jest-regex-util: 29.6.3
-      jest-resolve: 29.7.0
-      jest-runner: 29.7.0
-      jest-util: 29.7.0
-      jest-validate: 29.7.0
-      micromatch: 4.0.8
-      parse-json: 5.2.0
-      pretty-format: 29.7.0
-      slash: 3.0.0
-      strip-json-comments: 3.1.1
-    optionalDependencies:
-      '@types/node': 18.15.0
-      ts-node: 10.9.2(@types/node@18.15.0)(typescript@4.9.5)
-    transitivePeerDependencies:
-      - babel-plugin-macros
-      - supports-color
-
-  jest-diff@29.7.0:
-    dependencies:
-      chalk: 4.1.2
-      diff-sequences: 29.6.3
-      jest-get-type: 29.6.3
-      pretty-format: 29.7.0
-
-  jest-docblock@29.7.0:
-    dependencies:
-      detect-newline: 3.1.0
-
-  jest-each@29.7.0:
-    dependencies:
-      '@jest/types': 29.6.3
-      chalk: 4.1.2
-      jest-get-type: 29.6.3
-      jest-util: 29.7.0
-      pretty-format: 29.7.0
-
-  jest-environment-node@29.7.0:
-    dependencies:
-      '@jest/environment': 29.7.0
-      '@jest/fake-timers': 29.7.0
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      jest-mock: 29.7.0
-      jest-util: 29.7.0
-
-  jest-get-type@29.6.3: {}
-
-  jest-haste-map@29.7.0:
-    dependencies:
-      '@jest/types': 29.6.3
-      '@types/graceful-fs': 4.1.9
-      '@types/node': 18.15.0
-      anymatch: 3.1.3
-      fb-watchman: 2.0.2
-      graceful-fs: 4.2.11
-      jest-regex-util: 29.6.3
-      jest-util: 29.7.0
-      jest-worker: 29.7.0
-      micromatch: 4.0.8
-      walker: 1.0.8
-    optionalDependencies:
-      fsevents: 2.3.3
-
-  jest-leak-detector@29.7.0:
-    dependencies:
-      jest-get-type: 29.6.3
-      pretty-format: 29.7.0
-
-  jest-matcher-utils@29.7.0:
-    dependencies:
-      chalk: 4.1.2
-      jest-diff: 29.7.0
-      jest-get-type: 29.6.3
-      pretty-format: 29.7.0
-
-  jest-message-util@29.7.0:
-    dependencies:
-      '@babel/code-frame': 7.26.2
-      '@jest/types': 29.6.3
-      '@types/stack-utils': 2.0.3
-      chalk: 4.1.2
-      graceful-fs: 4.2.11
-      micromatch: 4.0.8
-      pretty-format: 29.7.0
-      slash: 3.0.0
-      stack-utils: 2.0.6
-
-  jest-mock@29.7.0:
-    dependencies:
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      jest-util: 29.7.0
-
-  jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
-    optionalDependencies:
-      jest-resolve: 29.7.0
-
-  jest-regex-util@29.6.3: {}
-
-  jest-resolve-dependencies@29.7.0:
-    dependencies:
-      jest-regex-util: 29.6.3
-      jest-snapshot: 29.7.0
-    transitivePeerDependencies:
-      - supports-color
-
-  jest-resolve@29.7.0:
-    dependencies:
-      chalk: 4.1.2
-      graceful-fs: 4.2.11
-      jest-haste-map: 29.7.0
-      jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
-      jest-util: 29.7.0
-      jest-validate: 29.7.0
-      resolve: 1.22.10
-      resolve.exports: 2.0.3
-      slash: 3.0.0
-
-  jest-runner@29.7.0:
-    dependencies:
-      '@jest/console': 29.7.0
-      '@jest/environment': 29.7.0
-      '@jest/test-result': 29.7.0
-      '@jest/transform': 29.7.0
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      chalk: 4.1.2
-      emittery: 0.13.1
-      graceful-fs: 4.2.11
-      jest-docblock: 29.7.0
-      jest-environment-node: 29.7.0
-      jest-haste-map: 29.7.0
-      jest-leak-detector: 29.7.0
-      jest-message-util: 29.7.0
-      jest-resolve: 29.7.0
-      jest-runtime: 29.7.0
-      jest-util: 29.7.0
-      jest-watcher: 29.7.0
-      jest-worker: 29.7.0
-      p-limit: 3.1.0
-      source-map-support: 0.5.13
-    transitivePeerDependencies:
-      - supports-color
-
-  jest-runtime@29.7.0:
-    dependencies:
-      '@jest/environment': 29.7.0
-      '@jest/fake-timers': 29.7.0
-      '@jest/globals': 29.7.0
-      '@jest/source-map': 29.6.3
-      '@jest/test-result': 29.7.0
-      '@jest/transform': 29.7.0
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      chalk: 4.1.2
-      cjs-module-lexer: 1.4.3
-      collect-v8-coverage: 1.0.2
-      glob: 7.2.3
-      graceful-fs: 4.2.11
-      jest-haste-map: 29.7.0
-      jest-message-util: 29.7.0
-      jest-mock: 29.7.0
-      jest-regex-util: 29.6.3
-      jest-resolve: 29.7.0
-      jest-snapshot: 29.7.0
-      jest-util: 29.7.0
-      slash: 3.0.0
-      strip-bom: 4.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  jest-snapshot@29.7.0:
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/generator': 7.27.0
-      '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10)
-      '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
-      '@babel/types': 7.27.0
-      '@jest/expect-utils': 29.7.0
-      '@jest/transform': 29.7.0
-      '@jest/types': 29.6.3
-      babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10)
-      chalk: 4.1.2
-      expect: 29.7.0
-      graceful-fs: 4.2.11
-      jest-diff: 29.7.0
-      jest-get-type: 29.6.3
-      jest-matcher-utils: 29.7.0
-      jest-message-util: 29.7.0
-      jest-util: 29.7.0
-      natural-compare: 1.4.0
-      pretty-format: 29.7.0
-      semver: 7.7.1
-    transitivePeerDependencies:
-      - supports-color
-
-  jest-util@29.7.0:
-    dependencies:
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      chalk: 4.1.2
-      ci-info: 3.9.0
-      graceful-fs: 4.2.11
-      picomatch: 2.3.1
-
-  jest-validate@29.7.0:
-    dependencies:
-      '@jest/types': 29.6.3
-      camelcase: 6.3.0
-      chalk: 4.1.2
-      jest-get-type: 29.6.3
-      leven: 3.1.0
-      pretty-format: 29.7.0
-
-  jest-watcher@29.7.0:
-    dependencies:
-      '@jest/test-result': 29.7.0
-      '@jest/types': 29.6.3
-      '@types/node': 18.15.0
-      ansi-escapes: 4.3.2
-      chalk: 4.1.2
-      emittery: 0.13.1
-      jest-util: 29.7.0
-      string-length: 4.0.2
-
-  jest-worker@27.5.1:
-    dependencies:
-      '@types/node': 18.15.0
-      merge-stream: 2.0.0
-      supports-color: 8.1.1
-
-  jest-worker@29.7.0:
-    dependencies:
-      '@types/node': 18.15.0
-      jest-util: 29.7.0
-      merge-stream: 2.0.0
-      supports-color: 8.1.1
-
-  jest@29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)):
-    dependencies:
-      '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      '@jest/types': 29.6.3
-      import-local: 3.2.0
-      jest-cli: 29.7.0(@types/node@18.15.0)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-    transitivePeerDependencies:
-      - '@types/node'
-      - babel-plugin-macros
-      - supports-color
-      - ts-node
-
-  jiti@1.21.7: {}
-
-  js-audio-recorder@1.0.7: {}
-
-  js-cookie@3.0.5: {}
-
-  js-tokens@4.0.0: {}
-
-  js-yaml@3.14.1:
-    dependencies:
-      argparse: 1.0.10
-      esprima: 4.0.1
-
-  js-yaml@4.1.0:
-    dependencies:
-      argparse: 2.0.1
-
-  jsdoc-type-pratt-parser@4.1.0: {}
-
-  jsesc@3.0.2: {}
-
-  jsesc@3.1.0: {}
-
-  json-buffer@3.0.1: {}
-
-  json-parse-even-better-errors@2.3.1: {}
-
-  json-schema-traverse@0.4.1: {}
-
-  json-schema-traverse@1.0.0: {}
-
-  json-stable-stringify-without-jsonify@1.0.1: {}
-
-  json5@1.0.2:
-    dependencies:
-      minimist: 1.2.8
-
-  json5@2.2.3: {}
-
-  jsonc-eslint-parser@2.4.0:
-    dependencies:
-      acorn: 8.14.1
-      eslint-visitor-keys: 3.4.3
-      espree: 9.6.1
-      semver: 7.7.1
-
-  jsonfile@6.1.0:
-    dependencies:
-      universalify: 2.0.1
-    optionalDependencies:
-      graceful-fs: 4.2.11
-
-  jsonschema@1.5.0: {}
-
-  jsx-ast-utils@3.3.5:
-    dependencies:
-      array-includes: 3.1.8
-      array.prototype.flat: 1.3.3
-      object.assign: 4.1.7
-      object.values: 1.2.1
-
-  jwt-decode@4.0.0: {}
-
-  katex@0.16.22:
-    dependencies:
-      commander: 8.3.0
-
-  keyv@4.5.4:
-    dependencies:
-      json-buffer: 3.0.1
-
-  khroma@2.1.0: {}
-
-  kleur@3.0.3: {}
-
-  kolorist@1.8.0: {}
-
-  ky@1.8.0: {}
-
-  lamejs@1.2.1:
-    dependencies:
-      use-strict: 1.0.1
-
-  langium@3.0.0:
-    dependencies:
-      chevrotain: 11.0.3
-      chevrotain-allstar: 0.3.1(chevrotain@11.0.3)
-      vscode-languageserver: 9.0.1
-      vscode-languageserver-textdocument: 1.0.12
-      vscode-uri: 3.0.8
-
-  language-subtag-registry@0.3.23: {}
-
-  language-tags@1.0.9:
-    dependencies:
-      language-subtag-registry: 0.3.23
-
-  launch-ide@1.0.1:
-    dependencies:
-      chalk: 4.1.1
-      dotenv: 16.5.0
-
-  layout-base@1.0.2: {}
-
-  layout-base@2.0.1: {}
-
-  leven@3.1.0: {}
-
-  levn@0.4.1:
-    dependencies:
-      prelude-ls: 1.2.1
-      type-check: 0.4.0
-
-  lexical@0.30.0: {}
-
-  lib0@0.2.102:
-    dependencies:
-      isomorphic.js: 0.2.5
-
-  lilconfig@3.1.3: {}
-
-  line-clamp@1.0.0: {}
-
-  lines-and-columns@1.2.4: {}
-
-  lint-staged@15.5.0:
-    dependencies:
-      chalk: 5.4.1
-      commander: 13.1.0
-      debug: 4.4.0
-      execa: 8.0.1
-      lilconfig: 3.1.3
-      listr2: 8.3.2
-      micromatch: 4.0.8
-      pidtree: 0.6.0
-      string-argv: 0.3.2
-      yaml: 2.7.1
-    transitivePeerDependencies:
-      - supports-color
-
-  listr2@8.3.2:
-    dependencies:
-      cli-truncate: 4.0.0
-      colorette: 2.0.20
-      eventemitter3: 5.0.1
-      log-update: 6.1.0
-      rfdc: 1.4.1
-      wrap-ansi: 9.0.0
-
-  loader-runner@4.3.0: {}
-
-  loader-utils@2.0.4:
-    dependencies:
-      big.js: 5.2.2
-      emojis-list: 3.0.0
-      json5: 2.2.3
-
-  loader-utils@3.3.1: {}
-
-  local-pkg@1.1.1:
-    dependencies:
-      mlly: 1.7.4
-      pkg-types: 2.1.0
-      quansync: 0.2.10
-
-  locate-path@5.0.0:
-    dependencies:
-      p-locate: 4.1.0
-
-  locate-path@6.0.0:
-    dependencies:
-      p-locate: 5.0.0
-
-  locate-path@7.2.0:
-    dependencies:
-      p-locate: 6.0.0
-
-  lodash-es@4.17.21: {}
-
-  lodash.castarray@4.4.0: {}
-
-  lodash.debounce@4.0.8: {}
-
-  lodash.isplainobject@4.0.6: {}
-
-  lodash.merge@4.6.2: {}
-
-  lodash@4.17.21: {}
-
-  log-update@6.1.0:
-    dependencies:
-      ansi-escapes: 7.0.0
-      cli-cursor: 5.0.0
-      slice-ansi: 7.1.0
-      strip-ansi: 7.1.0
-      wrap-ansi: 9.0.0
-
-  longest-streak@3.1.0: {}
-
-  loose-envify@1.4.0:
-    dependencies:
-      js-tokens: 4.0.0
-
-  loupe@3.1.3: {}
-
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.8.1
-
-  lowercase-keys@2.0.0: {}
-
-  lowlight@1.20.0:
-    dependencies:
-      fault: 1.0.4
-      highlight.js: 10.7.3
-
-  lru-cache@10.4.3: {}
-
-  lru-cache@5.1.1:
-    dependencies:
-      yallist: 3.1.1
-
-  lz-string@1.5.0: {}
-
-  magic-string@0.30.17:
-    dependencies:
-      '@jridgewell/sourcemap-codec': 1.5.0
-
-  magicast@0.3.5:
-    dependencies:
-      '@babel/parser': 7.27.0
-      '@babel/types': 7.27.0
-      source-map-js: 1.2.1
-
-  make-dir@3.1.0:
-    dependencies:
-      semver: 6.3.1
-
-  make-dir@4.0.0:
-    dependencies:
-      semver: 7.7.1
-
-  make-error@1.3.6: {}
-
-  makeerror@1.0.12:
-    dependencies:
-      tmpl: 1.0.5
-
-  map-or-similar@1.5.0: {}
-
-  markdown-extensions@2.0.0: {}
-
-  markdown-table@3.0.4: {}
-
-  marked@13.0.3: {}
-
-  math-intrinsics@1.1.0: {}
-
-  md5.js@1.3.5:
-    dependencies:
-      hash-base: 3.0.5
-      inherits: 2.0.4
-      safe-buffer: 5.2.1
-
-  mdast-util-find-and-replace@3.0.2:
-    dependencies:
-      '@types/mdast': 4.0.4
-      escape-string-regexp: 5.0.0
-      unist-util-is: 6.0.0
-      unist-util-visit-parents: 6.0.1
-
-  mdast-util-from-markdown@2.0.2:
-    dependencies:
-      '@types/mdast': 4.0.4
-      '@types/unist': 3.0.3
-      decode-named-character-reference: 1.1.0
-      devlop: 1.1.0
-      mdast-util-to-string: 4.0.0
-      micromark: 4.0.2
-      micromark-util-decode-numeric-character-reference: 2.0.2
-      micromark-util-decode-string: 2.0.1
-      micromark-util-normalize-identifier: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      unist-util-stringify-position: 4.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-gfm-autolink-literal@2.0.1:
-    dependencies:
-      '@types/mdast': 4.0.4
-      ccount: 2.0.1
-      devlop: 1.1.0
-      mdast-util-find-and-replace: 3.0.2
-      micromark-util-character: 2.1.1
-
-  mdast-util-gfm-footnote@2.1.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-      micromark-util-normalize-identifier: 2.0.1
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-gfm-strikethrough@2.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-gfm-table@2.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      markdown-table: 3.0.4
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-gfm-task-list-item@2.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-gfm@3.1.0:
-    dependencies:
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-gfm-autolink-literal: 2.0.1
-      mdast-util-gfm-footnote: 2.1.0
-      mdast-util-gfm-strikethrough: 2.0.0
-      mdast-util-gfm-table: 2.0.0
-      mdast-util-gfm-task-list-item: 2.0.0
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-math@3.0.0:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      longest-streak: 3.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-      unist-util-remove-position: 5.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-mdx-expression@2.0.1:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-mdx-jsx@3.2.0:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      '@types/unist': 3.0.3
-      ccount: 2.0.1
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-      parse-entities: 4.0.2
-      stringify-entities: 4.0.4
-      unist-util-stringify-position: 4.0.0
-      vfile-message: 4.0.2
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-mdx@3.0.0:
-    dependencies:
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-mdx-expression: 2.0.1
-      mdast-util-mdx-jsx: 3.2.0
-      mdast-util-mdxjs-esm: 2.0.1
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-mdxjs-esm@2.0.1:
-    dependencies:
-      '@types/estree-jsx': 1.0.5
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.2
-      mdast-util-to-markdown: 2.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  mdast-util-newline-to-break@2.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-find-and-replace: 3.0.2
-
-  mdast-util-phrasing@4.1.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      unist-util-is: 6.0.0
-
-  mdast-util-to-hast@13.2.0:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      '@ungap/structured-clone': 1.3.0
-      devlop: 1.1.0
-      micromark-util-sanitize-uri: 2.0.1
-      trim-lines: 3.0.1
-      unist-util-position: 5.0.0
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-
-  mdast-util-to-markdown@2.1.2:
-    dependencies:
-      '@types/mdast': 4.0.4
-      '@types/unist': 3.0.3
-      longest-streak: 3.1.0
-      mdast-util-phrasing: 4.1.0
-      mdast-util-to-string: 4.0.0
-      micromark-util-classify-character: 2.0.1
-      micromark-util-decode-string: 2.0.1
-      unist-util-visit: 5.0.0
-      zwitch: 2.0.4
-
-  mdast-util-to-string@4.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-
-  memfs@3.5.3:
-    dependencies:
-      fs-monkey: 1.0.6
-
-  memoize-one@5.2.1: {}
-
-  memoizerific@1.11.3:
-    dependencies:
-      map-or-similar: 1.5.0
-
-  merge-stream@2.0.0: {}
-
-  merge2@1.4.1: {}
-
-  mermaid@11.4.1:
-    dependencies:
-      '@braintree/sanitize-url': 7.1.1
-      '@iconify/utils': 2.3.0
-      '@mermaid-js/parser': 0.3.0
-      '@types/d3': 7.4.3
-      cytoscape: 3.31.2
-      cytoscape-cose-bilkent: 4.1.0(cytoscape@3.31.2)
-      cytoscape-fcose: 2.2.0(cytoscape@3.31.2)
-      d3: 7.9.0
-      d3-sankey: 0.12.3
-      dagre-d3-es: 7.0.11
-      dayjs: 1.11.13
-      dompurify: 3.2.5
-      katex: 0.16.22
-      khroma: 2.1.0
-      lodash-es: 4.17.21
-      marked: 13.0.3
-      roughjs: 4.6.6
-      stylis: 4.3.6
-      ts-dedent: 2.2.0
-      uuid: 9.0.1
-    transitivePeerDependencies:
-      - supports-color
-
-  micromark-core-commonmark@2.0.3:
-    dependencies:
-      decode-named-character-reference: 1.1.0
-      devlop: 1.1.0
-      micromark-factory-destination: 2.0.1
-      micromark-factory-label: 2.0.1
-      micromark-factory-space: 2.0.1
-      micromark-factory-title: 2.0.1
-      micromark-factory-whitespace: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-chunked: 2.0.1
-      micromark-util-classify-character: 2.0.1
-      micromark-util-html-tag-name: 2.0.1
-      micromark-util-normalize-identifier: 2.0.1
-      micromark-util-resolve-all: 2.0.1
-      micromark-util-subtokenize: 2.1.0
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-gfm-autolink-literal@2.1.0:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-sanitize-uri: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-gfm-footnote@2.1.0:
-    dependencies:
-      devlop: 1.1.0
-      micromark-core-commonmark: 2.0.3
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-normalize-identifier: 2.0.1
-      micromark-util-sanitize-uri: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-gfm-strikethrough@2.1.0:
-    dependencies:
-      devlop: 1.1.0
-      micromark-util-chunked: 2.0.1
-      micromark-util-classify-character: 2.0.1
-      micromark-util-resolve-all: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-gfm-table@2.1.1:
-    dependencies:
-      devlop: 1.1.0
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-gfm-tagfilter@2.0.0:
-    dependencies:
-      micromark-util-types: 2.0.2
-
-  micromark-extension-gfm-task-list-item@2.1.0:
-    dependencies:
-      devlop: 1.1.0
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-gfm@3.0.0:
-    dependencies:
-      micromark-extension-gfm-autolink-literal: 2.1.0
-      micromark-extension-gfm-footnote: 2.1.0
-      micromark-extension-gfm-strikethrough: 2.1.0
-      micromark-extension-gfm-table: 2.1.1
-      micromark-extension-gfm-tagfilter: 2.0.0
-      micromark-extension-gfm-task-list-item: 2.1.0
-      micromark-util-combine-extensions: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-math@3.1.0:
-    dependencies:
-      '@types/katex': 0.16.7
-      devlop: 1.1.0
-      katex: 0.16.22
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-mdx-expression@3.0.1:
-    dependencies:
-      '@types/estree': 1.0.7
-      devlop: 1.1.0
-      micromark-factory-mdx-expression: 2.0.3
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-events-to-acorn: 2.0.3
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-extension-mdx-jsx@3.0.2:
-    dependencies:
-      '@types/estree': 1.0.7
-      devlop: 1.1.0
-      estree-util-is-identifier-name: 3.0.0
-      micromark-factory-mdx-expression: 2.0.3
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-events-to-acorn: 2.0.3
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      vfile-message: 4.0.2
-
-  micromark-extension-mdx-md@2.0.0:
-    dependencies:
-      micromark-util-types: 2.0.2
-
-  micromark-extension-mdxjs-esm@3.0.0:
-    dependencies:
-      '@types/estree': 1.0.7
-      devlop: 1.1.0
-      micromark-core-commonmark: 2.0.3
-      micromark-util-character: 2.1.1
-      micromark-util-events-to-acorn: 2.0.3
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      unist-util-position-from-estree: 2.0.0
-      vfile-message: 4.0.2
-
-  micromark-extension-mdxjs@3.0.0:
-    dependencies:
-      acorn: 8.14.1
-      acorn-jsx: 5.3.2(acorn@8.14.1)
-      micromark-extension-mdx-expression: 3.0.1
-      micromark-extension-mdx-jsx: 3.0.2
-      micromark-extension-mdx-md: 2.0.0
-      micromark-extension-mdxjs-esm: 3.0.0
-      micromark-util-combine-extensions: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-factory-destination@2.0.1:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-factory-label@2.0.1:
-    dependencies:
-      devlop: 1.1.0
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-factory-mdx-expression@2.0.3:
-    dependencies:
-      '@types/estree': 1.0.7
-      devlop: 1.1.0
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-events-to-acorn: 2.0.3
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      unist-util-position-from-estree: 2.0.0
-      vfile-message: 4.0.2
-
-  micromark-factory-space@2.0.1:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-types: 2.0.2
-
-  micromark-factory-title@2.0.1:
-    dependencies:
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-factory-whitespace@2.0.1:
-    dependencies:
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-util-character@2.1.1:
-    dependencies:
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-util-chunked@2.0.1:
-    dependencies:
-      micromark-util-symbol: 2.0.1
-
-  micromark-util-classify-character@2.0.1:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-util-combine-extensions@2.0.1:
-    dependencies:
-      micromark-util-chunked: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-util-decode-numeric-character-reference@2.0.2:
-    dependencies:
-      micromark-util-symbol: 2.0.1
-
-  micromark-util-decode-string@2.0.1:
-    dependencies:
-      decode-named-character-reference: 1.1.0
-      micromark-util-character: 2.1.1
-      micromark-util-decode-numeric-character-reference: 2.0.2
-      micromark-util-symbol: 2.0.1
-
-  micromark-util-encode@2.0.1: {}
-
-  micromark-util-events-to-acorn@2.0.3:
-    dependencies:
-      '@types/estree': 1.0.7
-      '@types/unist': 3.0.3
-      devlop: 1.1.0
-      estree-util-visit: 2.0.0
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-      vfile-message: 4.0.2
-
-  micromark-util-html-tag-name@2.0.1: {}
-
-  micromark-util-normalize-identifier@2.0.1:
-    dependencies:
-      micromark-util-symbol: 2.0.1
-
-  micromark-util-resolve-all@2.0.1:
-    dependencies:
-      micromark-util-types: 2.0.2
-
-  micromark-util-sanitize-uri@2.0.1:
-    dependencies:
-      micromark-util-character: 2.1.1
-      micromark-util-encode: 2.0.1
-      micromark-util-symbol: 2.0.1
-
-  micromark-util-subtokenize@2.1.0:
-    dependencies:
-      devlop: 1.1.0
-      micromark-util-chunked: 2.0.1
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-
-  micromark-util-symbol@2.0.1: {}
-
-  micromark-util-types@2.0.2: {}
-
-  micromark@4.0.2:
-    dependencies:
-      '@types/debug': 4.1.12
-      debug: 4.4.0
-      decode-named-character-reference: 1.1.0
-      devlop: 1.1.0
-      micromark-core-commonmark: 2.0.3
-      micromark-factory-space: 2.0.1
-      micromark-util-character: 2.1.1
-      micromark-util-chunked: 2.0.1
-      micromark-util-combine-extensions: 2.0.1
-      micromark-util-decode-numeric-character-reference: 2.0.2
-      micromark-util-encode: 2.0.1
-      micromark-util-normalize-identifier: 2.0.1
-      micromark-util-resolve-all: 2.0.1
-      micromark-util-sanitize-uri: 2.0.1
-      micromark-util-subtokenize: 2.1.0
-      micromark-util-symbol: 2.0.1
-      micromark-util-types: 2.0.2
-    transitivePeerDependencies:
-      - supports-color
-
-  micromatch@4.0.8:
-    dependencies:
-      braces: 3.0.3
-      picomatch: 2.3.1
-
-  miller-rabin@4.0.1:
-    dependencies:
-      bn.js: 4.12.1
-      brorand: 1.1.0
-
-  mime-db@1.52.0: {}
-
-  mime-types@2.1.35:
-    dependencies:
-      mime-db: 1.52.0
-
-  mime@4.0.7: {}
-
-  mimic-fn@2.1.0: {}
-
-  mimic-fn@4.0.0: {}
-
-  mimic-function@5.0.1: {}
-
-  mimic-response@1.0.1: {}
-
-  mimic-response@2.1.0:
-    optional: true
-
-  mimic-response@3.1.0: {}
-
-  min-indent@1.0.1: {}
-
-  minimalistic-assert@1.0.1: {}
-
-  minimalistic-crypto-utils@1.0.1: {}
-
-  minimatch@10.0.1:
-    dependencies:
-      brace-expansion: 2.0.1
-
-  minimatch@3.1.2:
-    dependencies:
-      brace-expansion: 1.1.11
-
-  minimatch@9.0.5:
-    dependencies:
-      brace-expansion: 2.0.1
-
-  minimist@1.2.8: {}
-
-  minipass@3.3.6:
-    dependencies:
-      yallist: 4.0.0
-    optional: true
-
-  minipass@5.0.0:
-    optional: true
-
-  minipass@7.1.2: {}
-
-  minizlib@2.1.2:
-    dependencies:
-      minipass: 3.3.6
-      yallist: 4.0.0
-    optional: true
-
-  mitt@3.0.1: {}
-
-  mkdirp@1.0.4:
-    optional: true
-
-  mlly@1.7.4:
-    dependencies:
-      acorn: 8.14.1
-      pathe: 2.0.3
-      pkg-types: 1.3.1
-      ufo: 1.6.1
-
-  monaco-editor@0.52.2: {}
-
-  ms@2.1.3: {}
-
-  mz@2.7.0:
-    dependencies:
-      any-promise: 1.3.0
-      object-assign: 4.1.1
-      thenify-all: 1.6.0
-
-  nan@2.22.2:
-    optional: true
-
-  nanoid@3.3.11: {}
-
-  natural-compare@1.4.0: {}
-
-  natural-orderby@5.0.0: {}
-
-  negotiator@0.6.4: {}
-
-  neo-async@2.6.2: {}
-
-  next-themes@0.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  next@15.2.3(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.86.3):
-    dependencies:
-      '@next/env': 15.2.3
-      '@swc/counter': 0.1.3
-      '@swc/helpers': 0.5.15
-      busboy: 1.6.0
-      caniuse-lite: 1.0.30001713
-      postcss: 8.4.31
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0)
-    optionalDependencies:
-      '@next/swc-darwin-arm64': 15.2.3
-      '@next/swc-darwin-x64': 15.2.3
-      '@next/swc-linux-arm64-gnu': 15.2.3
-      '@next/swc-linux-arm64-musl': 15.2.3
-      '@next/swc-linux-x64-gnu': 15.2.3
-      '@next/swc-linux-x64-musl': 15.2.3
-      '@next/swc-win32-arm64-msvc': 15.2.3
-      '@next/swc-win32-x64-msvc': 15.2.3
-      sass: 1.86.3
-      sharp: 0.33.5
-    transitivePeerDependencies:
-      - '@babel/core'
-      - babel-plugin-macros
-
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.8.1
-
-  node-abort-controller@3.1.1: {}
-
-  node-addon-api@7.1.1:
-    optional: true
-
-  node-fetch@2.7.0:
-    dependencies:
-      whatwg-url: 5.0.0
-    optional: true
-
-  node-int64@0.4.0: {}
-
-  node-polyfill-webpack-plugin@2.0.1(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      assert: 2.1.0
-      browserify-zlib: 0.2.0
-      buffer: 6.0.3
-      console-browserify: 1.2.0
-      constants-browserify: 1.0.0
-      crypto-browserify: 3.12.1
-      domain-browser: 4.23.0
-      events: 3.3.0
-      filter-obj: 2.0.2
-      https-browserify: 1.0.0
-      os-browserify: 0.3.0
-      path-browserify: 1.0.1
-      process: 0.11.10
-      punycode: 2.3.1
-      querystring-es3: 0.2.1
-      readable-stream: 4.7.0
-      stream-browserify: 3.0.0
-      stream-http: 3.2.0
-      string_decoder: 1.3.0
-      timers-browserify: 2.0.12
-      tty-browserify: 0.0.1
-      type-fest: 2.19.0
-      url: 0.11.4
-      util: 0.12.5
-      vm-browserify: 1.1.2
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-
-  node-releases@2.0.19: {}
-
-  nopt@5.0.0:
-    dependencies:
-      abbrev: 1.1.1
-    optional: true
-
-  normalize-package-data@6.0.2:
-    dependencies:
-      hosted-git-info: 7.0.2
-      semver: 7.7.1
-      validate-npm-package-license: 3.0.4
-
-  normalize-path@3.0.0: {}
-
-  normalize-range@0.1.2: {}
-
-  normalize-url@6.1.0: {}
-
-  normalize-wheel@1.0.1: {}
-
-  npm-run-path@4.0.1:
-    dependencies:
-      path-key: 3.1.1
-
-  npm-run-path@5.3.0:
-    dependencies:
-      path-key: 4.0.0
-
-  npmlog@5.0.1:
-    dependencies:
-      are-we-there-yet: 2.0.0
-      console-control-strings: 1.1.0
-      gauge: 3.0.2
-      set-blocking: 2.0.0
-    optional: true
-
-  nth-check@2.1.1:
-    dependencies:
-      boolbase: 1.0.0
-
-  object-assign@4.1.1: {}
-
-  object-hash@3.0.0: {}
-
-  object-inspect@1.13.4: {}
-
-  object-is@1.1.6:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-
-  object-keys@1.1.1: {}
-
-  object.assign@4.1.7:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-      has-symbols: 1.1.0
-      object-keys: 1.1.1
-
-  object.entries@1.1.9:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-
-  object.fromentries@2.0.8:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-object-atoms: 1.1.1
-
-  object.groupby@1.0.3:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-
-  object.values@1.2.1:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-
-  objectorarray@1.0.5: {}
-
-  once@1.4.0:
-    dependencies:
-      wrappy: 1.0.2
-
-  onetime@5.1.2:
-    dependencies:
-      mimic-fn: 2.1.0
-
-  onetime@6.0.0:
-    dependencies:
-      mimic-fn: 4.0.0
-
-  onetime@7.0.0:
-    dependencies:
-      mimic-function: 5.0.1
-
-  open@8.4.2:
-    dependencies:
-      define-lazy-prop: 2.0.0
-      is-docker: 2.2.1
-      is-wsl: 2.2.0
-
-  optionator@0.9.4:
-    dependencies:
-      deep-is: 0.1.4
-      fast-levenshtein: 2.0.6
-      levn: 0.4.1
-      prelude-ls: 1.2.1
-      type-check: 0.4.0
-      word-wrap: 1.2.5
-
-  os-browserify@0.3.0: {}
-
-  own-keys@1.0.1:
-    dependencies:
-      get-intrinsic: 1.3.0
-      object-keys: 1.1.1
-      safe-push-apply: 1.0.0
-
-  p-cancelable@2.1.1: {}
-
-  p-limit@2.3.0:
-    dependencies:
-      p-try: 2.2.0
-
-  p-limit@3.1.0:
-    dependencies:
-      yocto-queue: 0.1.0
-
-  p-limit@4.0.0:
-    dependencies:
-      yocto-queue: 1.2.1
-
-  p-locate@4.1.0:
-    dependencies:
-      p-limit: 2.3.0
-
-  p-locate@5.0.0:
-    dependencies:
-      p-limit: 3.1.0
-
-  p-locate@6.0.0:
-    dependencies:
-      p-limit: 4.0.0
-
-  p-try@2.2.0: {}
-
-  package-json-from-dist@1.0.1: {}
-
-  package-manager-detector@0.2.11:
-    dependencies:
-      quansync: 0.2.10
-
-  pako@1.0.11: {}
-
-  papaparse@5.5.2: {}
-
-  param-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.8.1
-
-  parent-module@1.0.1:
-    dependencies:
-      callsites: 3.1.0
-
-  parse-asn1@5.1.7:
-    dependencies:
-      asn1.js: 4.10.1
-      browserify-aes: 1.2.0
-      evp_bytestokey: 1.0.3
-      hash-base: 3.0.5
-      pbkdf2: 3.1.2
-      safe-buffer: 5.2.1
-
-  parse-entities@2.0.0:
-    dependencies:
-      character-entities: 1.2.4
-      character-entities-legacy: 1.1.4
-      character-reference-invalid: 1.1.4
-      is-alphanumerical: 1.0.4
-      is-decimal: 1.0.4
-      is-hexadecimal: 1.0.4
-
-  parse-entities@4.0.2:
-    dependencies:
-      '@types/unist': 2.0.11
-      character-entities-legacy: 3.0.0
-      character-reference-invalid: 2.0.1
-      decode-named-character-reference: 1.1.0
-      is-alphanumerical: 2.0.1
-      is-decimal: 2.0.1
-      is-hexadecimal: 2.0.1
-
-  parse-gitignore@2.0.0: {}
-
-  parse-imports@2.2.1:
-    dependencies:
-      es-module-lexer: 1.6.0
-      slashes: 3.0.12
-
-  parse-json@5.2.0:
-    dependencies:
-      '@babel/code-frame': 7.26.2
-      error-ex: 1.3.2
-      json-parse-even-better-errors: 2.3.1
-      lines-and-columns: 1.2.4
-
-  parse-json@8.3.0:
-    dependencies:
-      '@babel/code-frame': 7.26.2
-      index-to-position: 1.1.0
-      type-fest: 4.39.1
-
-  parse5@7.2.1:
-    dependencies:
-      entities: 4.5.0
-
-  pascal-case@3.1.2:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.8.1
-
-  path-browserify@1.0.1: {}
-
-  path-data-parser@0.1.0: {}
-
-  path-exists@4.0.0: {}
-
-  path-exists@5.0.0: {}
-
-  path-is-absolute@1.0.1: {}
-
-  path-key@3.1.1: {}
-
-  path-key@4.0.0: {}
-
-  path-parse@1.0.7: {}
-
-  path-scurry@1.11.1:
-    dependencies:
-      lru-cache: 10.4.3
-      minipass: 7.1.2
-
-  path-type@4.0.0: {}
-
-  path2d@0.2.2:
-    optional: true
-
-  pathe@2.0.3: {}
-
-  pathval@2.0.0: {}
-
-  pbkdf2@3.1.2:
-    dependencies:
-      create-hash: 1.2.0
-      create-hmac: 1.1.7
-      ripemd160: 2.0.2
-      safe-buffer: 5.2.1
-      sha.js: 2.4.11
-
-  pdfjs-dist@4.4.168:
-    optionalDependencies:
-      canvas: 2.11.2
-      path2d: 0.2.2
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-
-  picocolors@1.1.1: {}
-
-  picomatch@2.3.1: {}
-
-  picomatch@4.0.2: {}
-
-  pidtree@0.6.0: {}
-
-  pify@2.3.0: {}
-
-  pinyin-pro@3.26.0: {}
-
-  pirates@4.0.7: {}
-
-  pkg-dir@4.2.0:
-    dependencies:
-      find-up: 4.1.0
-
-  pkg-dir@7.0.0:
-    dependencies:
-      find-up: 6.3.0
-
-  pkg-types@1.3.1:
-    dependencies:
-      confbox: 0.1.8
-      mlly: 1.7.4
-      pathe: 2.0.3
-
-  pkg-types@2.1.0:
-    dependencies:
-      confbox: 0.2.2
-      exsolve: 1.0.4
-      pathe: 2.0.3
-
-  pluralize@8.0.0: {}
-
-  pnp-webpack-plugin@1.7.0(typescript@4.9.5):
-    dependencies:
-      ts-pnp: 1.2.0(typescript@4.9.5)
-    transitivePeerDependencies:
-      - typescript
-
-  pnpm-workspace-yaml@0.3.1:
-    dependencies:
-      yaml: 2.7.1
-
-  points-on-curve@0.2.0: {}
-
-  points-on-path@0.2.1:
-    dependencies:
-      path-data-parser: 0.1.0
-      points-on-curve: 0.2.0
-
-  polished@4.3.1:
-    dependencies:
-      '@babel/runtime': 7.27.0
-
-  portfinder@1.0.35:
-    dependencies:
-      async: 3.2.6
-      debug: 4.4.0
-    transitivePeerDependencies:
-      - supports-color
-
-  possible-typed-array-names@1.1.0: {}
-
-  postcss-import@15.1.0(postcss@8.5.3):
-    dependencies:
-      postcss: 8.5.3
-      postcss-value-parser: 4.2.0
-      read-cache: 1.0.0
-      resolve: 1.22.10
-
-  postcss-js@4.0.1(postcss@8.5.3):
-    dependencies:
-      camelcase-css: 2.0.1
-      postcss: 8.5.3
-
-  postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)):
-    dependencies:
-      lilconfig: 3.1.3
-      yaml: 2.7.1
-    optionalDependencies:
-      postcss: 8.5.3
-      ts-node: 10.9.2(@types/node@18.15.0)(typescript@4.9.5)
-
-  postcss-loader@8.1.1(postcss@8.5.3)(typescript@4.9.5)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      cosmiconfig: 9.0.0(typescript@4.9.5)
-      jiti: 1.21.7
-      postcss: 8.5.3
-      semver: 7.7.1
-    optionalDependencies:
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-    transitivePeerDependencies:
-      - typescript
-
-  postcss-modules-extract-imports@3.1.0(postcss@8.5.3):
-    dependencies:
-      postcss: 8.5.3
-
-  postcss-modules-local-by-default@4.2.0(postcss@8.5.3):
-    dependencies:
-      icss-utils: 5.1.0(postcss@8.5.3)
-      postcss: 8.5.3
-      postcss-selector-parser: 7.1.0
-      postcss-value-parser: 4.2.0
-
-  postcss-modules-scope@3.2.1(postcss@8.5.3):
-    dependencies:
-      postcss: 8.5.3
-      postcss-selector-parser: 7.1.0
-
-  postcss-modules-values@4.0.0(postcss@8.5.3):
-    dependencies:
-      icss-utils: 5.1.0(postcss@8.5.3)
-      postcss: 8.5.3
-
-  postcss-nested@6.2.0(postcss@8.5.3):
-    dependencies:
-      postcss: 8.5.3
-      postcss-selector-parser: 6.1.2
-
-  postcss-selector-parser@6.0.10:
-    dependencies:
-      cssesc: 3.0.0
-      util-deprecate: 1.0.2
-
-  postcss-selector-parser@6.1.2:
-    dependencies:
-      cssesc: 3.0.0
-      util-deprecate: 1.0.2
-
-  postcss-selector-parser@7.1.0:
-    dependencies:
-      cssesc: 3.0.0
-      util-deprecate: 1.0.2
-
-  postcss-value-parser@4.2.0: {}
-
-  postcss@8.4.31:
-    dependencies:
-      nanoid: 3.3.11
-      picocolors: 1.1.1
-      source-map-js: 1.2.1
-
-  postcss@8.5.3:
-    dependencies:
-      nanoid: 3.3.11
-      picocolors: 1.1.1
-      source-map-js: 1.2.1
-
-  prelude-ls@1.2.1: {}
-
-  pretty-error@4.0.0:
-    dependencies:
-      lodash: 4.17.21
-      renderkid: 3.0.0
-
-  pretty-format@27.5.1:
-    dependencies:
-      ansi-regex: 5.0.1
-      ansi-styles: 5.2.0
-      react-is: 17.0.2
-
-  pretty-format@29.7.0:
-    dependencies:
-      '@jest/schemas': 29.6.3
-      ansi-styles: 5.2.0
-      react-is: 18.3.1
-
-  prismjs@1.27.0: {}
-
-  prismjs@1.30.0: {}
-
-  process-nextick-args@2.0.1: {}
-
-  process@0.11.10: {}
-
-  prompts@2.4.2:
-    dependencies:
-      kleur: 3.0.3
-      sisteransi: 1.0.5
-
-  prop-types@15.8.1:
-    dependencies:
-      loose-envify: 1.4.0
-      object-assign: 4.1.1
-      react-is: 16.13.1
-
-  property-information@5.6.0:
-    dependencies:
-      xtend: 4.0.2
-
-  property-information@6.5.0: {}
-
-  property-information@7.0.0: {}
-
-  public-encrypt@4.0.3:
-    dependencies:
-      bn.js: 4.12.1
-      browserify-rsa: 4.1.1
-      create-hash: 1.2.0
-      parse-asn1: 5.1.7
-      randombytes: 2.1.0
-      safe-buffer: 5.2.1
-
-  pump@3.0.2:
-    dependencies:
-      end-of-stream: 1.4.4
-      once: 1.4.0
-
-  punycode@1.4.1: {}
-
-  punycode@2.3.1: {}
-
-  pure-rand@6.1.0: {}
-
-  qrcode.react@4.2.0(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-
-  qs@6.14.0:
-    dependencies:
-      side-channel: 1.1.0
-
-  quansync@0.2.10: {}
-
-  querystring-es3@0.2.1: {}
-
-  queue-microtask@1.2.3: {}
-
-  queue@6.0.2:
-    dependencies:
-      inherits: 2.0.4
-
-  quick-lru@5.1.1: {}
-
-  randombytes@2.1.0:
-    dependencies:
-      safe-buffer: 5.2.1
-
-  randomfill@1.0.4:
-    dependencies:
-      randombytes: 2.1.0
-      safe-buffer: 5.2.1
-
-  range-parser@1.2.1: {}
-
-  re-resizable@6.11.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  react-18-input-autosize@3.0.0(react@19.0.0):
-    dependencies:
-      prop-types: 15.8.1
-      react: 19.0.0
-
-  react-confetti@6.4.0(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      tween-functions: 1.2.0
-
-  react-docgen-typescript@2.2.2(typescript@4.9.5):
-    dependencies:
-      typescript: 4.9.5
-
-  react-docgen@7.1.1:
-    dependencies:
-      '@babel/core': 7.26.10
-      '@babel/traverse': 7.27.0
-      '@babel/types': 7.27.0
-      '@types/babel__core': 7.20.5
-      '@types/babel__traverse': 7.20.7
-      '@types/doctrine': 0.0.9
-      '@types/resolve': 1.20.6
-      doctrine: 3.0.0
-      resolve: 1.22.10
-      strip-indent: 4.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  react-dom@18.3.1(react@18.3.1):
-    dependencies:
-      loose-envify: 1.4.0
-      react: 18.3.1
-      scheduler: 0.23.2
-
-  react-dom@19.0.0(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      scheduler: 0.25.0
-
-  react-draggable@4.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      clsx: 1.2.1
-      prop-types: 15.8.1
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  react-easy-crop@5.4.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      normalize-wheel: 1.0.1
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      tslib: 2.8.1
-
-  react-error-boundary@3.1.4(react@19.0.0):
-    dependencies:
-      '@babel/runtime': 7.27.0
-      react: 19.0.0
-
-  react-error-boundary@4.1.2(react@19.0.0):
-    dependencies:
-      '@babel/runtime': 7.27.0
-      react: 19.0.0
-
-  react-fast-compare@3.2.2: {}
-
-  react-headless-pagination@1.1.6(react@19.0.0):
-    dependencies:
-      clsx: 2.1.1
-      react: 19.0.0
-
-  react-hook-form@7.55.0(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-
-  react-hotkeys-hook@4.6.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  react-i18next@15.4.1(i18next@23.16.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      '@babel/runtime': 7.27.0
-      html-parse-stringify: 3.0.1
-      i18next: 23.16.8
-      react: 19.0.0
-    optionalDependencies:
-      react-dom: 19.0.0(react@19.0.0)
-
-  react-infinite-scroll-component@6.1.0(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      throttle-debounce: 2.3.0
-
-  react-is@16.13.1: {}
-
-  react-is@17.0.2: {}
-
-  react-is@18.3.1: {}
-
-  react-markdown@9.1.0(@types/react@18.2.79)(react@19.0.0):
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      '@types/react': 18.2.79
-      devlop: 1.1.0
-      hast-util-to-jsx-runtime: 2.3.6
-      html-url-attributes: 3.0.1
-      mdast-util-to-hast: 13.2.0
-      react: 19.0.0
-      remark-parse: 11.0.0
-      remark-rehype: 11.1.2
-      unified: 11.0.5
-      unist-util-visit: 5.0.0
-      vfile: 6.0.3
-    transitivePeerDependencies:
-      - supports-color
-
-  react-multi-email@1.0.25(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  react-papaparse@4.4.0:
-    dependencies:
-      '@types/papaparse': 5.3.15
-      papaparse: 5.5.2
-
-  react-pdf-highlighter@8.0.0-rc.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      pdfjs-dist: 4.4.168
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      react-rnd: 10.5.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      ts-debounce: 4.0.0
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-
-  react-refresh@0.14.2: {}
-
-  react-rnd@10.5.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      re-resizable: 6.11.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      react-draggable: 4.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      tslib: 2.6.2
-
-  react-slider@2.0.6(react@19.0.0):
-    dependencies:
-      prop-types: 15.8.1
-      react: 19.0.0
-
-  react-sortablejs@6.1.4(@types/sortablejs@1.15.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sortablejs@1.15.6):
-    dependencies:
-      '@types/sortablejs': 1.15.8
-      classnames: 2.3.1
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      sortablejs: 1.15.6
-      tiny-invariant: 1.2.0
-
-  react-syntax-highlighter@15.6.1(react@19.0.0):
-    dependencies:
-      '@babel/runtime': 7.27.0
-      highlight.js: 10.7.3
-      highlightjs-vue: 1.0.0
-      lowlight: 1.20.0
-      prismjs: 1.30.0
-      react: 19.0.0
-      refractor: 3.6.0
-
-  react-textarea-autosize@8.5.9(@types/react@18.2.79)(react@19.0.0):
-    dependencies:
-      '@babel/runtime': 7.27.0
-      react: 19.0.0
-      use-composed-ref: 1.4.0(@types/react@18.2.79)(react@19.0.0)
-      use-latest: 1.3.0(@types/react@18.2.79)(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-
-  react-tooltip@5.8.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      '@floating-ui/dom': 1.1.1
-      classnames: 2.5.1
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  react-window-infinite-loader@1.0.10(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  react-window@1.8.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      '@babel/runtime': 7.27.0
-      memoize-one: 5.2.1
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-
-  react@18.3.1:
-    dependencies:
-      loose-envify: 1.4.0
-
-  react@19.0.0: {}
-
-  reactflow@11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      '@reactflow/background': 11.3.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@reactflow/controls': 11.2.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@reactflow/core': 11.11.4(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@reactflow/minimap': 11.7.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@reactflow/node-resizer': 2.2.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@reactflow/node-toolbar': 1.3.14(@types/react@18.2.79)(immer@9.0.21)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-      - immer
-
-  read-cache@1.0.0:
-    dependencies:
-      pify: 2.3.0
-
-  read-package-up@11.0.0:
-    dependencies:
-      find-up-simple: 1.0.1
-      read-pkg: 9.0.1
-      type-fest: 4.39.1
-
-  read-pkg@9.0.1:
-    dependencies:
-      '@types/normalize-package-data': 2.4.4
-      normalize-package-data: 6.0.2
-      parse-json: 8.3.0
-      type-fest: 4.39.1
-      unicorn-magic: 0.1.0
-
-  readable-stream@2.3.8:
-    dependencies:
-      core-util-is: 1.0.3
-      inherits: 2.0.4
-      isarray: 1.0.0
-      process-nextick-args: 2.0.1
-      safe-buffer: 5.1.2
-      string_decoder: 1.1.1
-      util-deprecate: 1.0.2
-
-  readable-stream@3.6.2:
-    dependencies:
-      inherits: 2.0.4
-      string_decoder: 1.3.0
-      util-deprecate: 1.0.2
-
-  readable-stream@4.7.0:
-    dependencies:
-      abort-controller: 3.0.0
-      buffer: 6.0.3
-      events: 3.3.0
-      process: 0.11.10
-      string_decoder: 1.3.0
-
-  readdirp@3.6.0:
-    dependencies:
-      picomatch: 2.3.1
-
-  readdirp@4.1.2: {}
-
-  recast@0.23.11:
-    dependencies:
-      ast-types: 0.16.1
-      esprima: 4.0.1
-      source-map: 0.6.1
-      tiny-invariant: 1.3.3
-      tslib: 2.8.1
-
-  recma-build-jsx@1.0.0:
-    dependencies:
-      '@types/estree': 1.0.7
-      estree-util-build-jsx: 3.0.1
-      vfile: 6.0.3
-
-  recma-jsx@1.0.0(acorn@8.14.1):
-    dependencies:
-      acorn-jsx: 5.3.2(acorn@8.14.1)
-      estree-util-to-js: 2.0.0
-      recma-parse: 1.0.0
-      recma-stringify: 1.0.0
-      unified: 11.0.5
-    transitivePeerDependencies:
-      - acorn
-
-  recma-parse@1.0.0:
-    dependencies:
-      '@types/estree': 1.0.7
-      esast-util-from-js: 2.0.1
-      unified: 11.0.5
-      vfile: 6.0.3
-
-  recma-stringify@1.0.0:
-    dependencies:
-      '@types/estree': 1.0.7
-      estree-util-to-js: 2.0.0
-      unified: 11.0.5
-      vfile: 6.0.3
-
-  recordrtc@5.6.2: {}
-
-  redent@3.0.0:
-    dependencies:
-      indent-string: 4.0.0
-      strip-indent: 3.0.0
-
-  refa@0.12.1:
-    dependencies:
-      '@eslint-community/regexpp': 4.12.1
-
-  reflect.getprototypeof@1.0.10:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      get-intrinsic: 1.3.0
-      get-proto: 1.0.1
-      which-builtin-type: 1.2.1
-
-  refractor@3.6.0:
-    dependencies:
-      hastscript: 6.0.0
-      parse-entities: 2.0.0
-      prismjs: 1.27.0
-
-  regenerate-unicode-properties@10.2.0:
-    dependencies:
-      regenerate: 1.4.2
-
-  regenerate@1.4.2: {}
-
-  regenerator-runtime@0.14.1: {}
-
-  regenerator-transform@0.15.2:
-    dependencies:
-      '@babel/runtime': 7.27.0
-
-  regex-parser@2.3.1: {}
-
-  regexp-ast-analysis@0.7.1:
-    dependencies:
-      '@eslint-community/regexpp': 4.12.1
-      refa: 0.12.1
-
-  regexp-tree@0.1.27: {}
-
-  regexp.prototype.flags@1.5.4:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-errors: 1.3.0
-      get-proto: 1.0.1
-      gopd: 1.2.0
-      set-function-name: 2.0.2
-
-  regexpu-core@6.2.0:
-    dependencies:
-      regenerate: 1.4.2
-      regenerate-unicode-properties: 10.2.0
-      regjsgen: 0.8.0
-      regjsparser: 0.12.0
-      unicode-match-property-ecmascript: 2.0.0
-      unicode-match-property-value-ecmascript: 2.2.0
-
-  regjsgen@0.8.0: {}
-
-  regjsparser@0.12.0:
-    dependencies:
-      jsesc: 3.0.2
-
-  rehype-katex@7.0.1:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/katex': 0.16.7
-      hast-util-from-html-isomorphic: 2.0.0
-      hast-util-to-text: 4.0.2
-      katex: 0.16.22
-      unist-util-visit-parents: 6.0.1
-      vfile: 6.0.3
-
-  rehype-raw@7.0.0:
-    dependencies:
-      '@types/hast': 3.0.4
-      hast-util-raw: 9.1.0
-      vfile: 6.0.3
-
-  rehype-recma@1.0.0:
-    dependencies:
-      '@types/estree': 1.0.7
-      '@types/hast': 3.0.4
-      hast-util-to-estree: 3.1.3
-    transitivePeerDependencies:
-      - supports-color
-
-  relateurl@0.2.7: {}
-
-  remark-breaks@4.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-newline-to-break: 2.0.0
-      unified: 11.0.5
-
-  remark-gfm@4.0.1:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-gfm: 3.1.0
-      micromark-extension-gfm: 3.0.0
-      remark-parse: 11.0.0
-      remark-stringify: 11.0.0
-      unified: 11.0.5
-    transitivePeerDependencies:
-      - supports-color
-
-  remark-math@6.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-math: 3.0.0
-      micromark-extension-math: 3.1.0
-      unified: 11.0.5
-    transitivePeerDependencies:
-      - supports-color
-
-  remark-mdx@3.1.0:
-    dependencies:
-      mdast-util-mdx: 3.0.0
-      micromark-extension-mdxjs: 3.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  remark-parse@11.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-from-markdown: 2.0.2
-      micromark-util-types: 2.0.2
-      unified: 11.0.5
-    transitivePeerDependencies:
-      - supports-color
-
-  remark-rehype@11.1.2:
-    dependencies:
-      '@types/hast': 3.0.4
-      '@types/mdast': 4.0.4
-      mdast-util-to-hast: 13.2.0
-      unified: 11.0.5
-      vfile: 6.0.3
-
-  remark-stringify@11.0.0:
-    dependencies:
-      '@types/mdast': 4.0.4
-      mdast-util-to-markdown: 2.1.2
-      unified: 11.0.5
-
-  renderkid@3.0.0:
-    dependencies:
-      css-select: 4.3.0
-      dom-converter: 0.2.0
-      htmlparser2: 6.1.0
-      lodash: 4.17.21
-      strip-ansi: 6.0.1
-
-  require-directory@2.1.1: {}
-
-  require-from-string@2.0.2: {}
-
-  resize-observer-polyfill@1.5.1: {}
-
-  resolve-alpn@1.2.1: {}
-
-  resolve-cwd@3.0.0:
-    dependencies:
-      resolve-from: 5.0.0
-
-  resolve-from@4.0.0: {}
-
-  resolve-from@5.0.0: {}
-
-  resolve-pkg-maps@1.0.0: {}
-
-  resolve-url-loader@5.0.0:
-    dependencies:
-      adjust-sourcemap-loader: 4.0.0
-      convert-source-map: 1.9.0
-      loader-utils: 2.0.4
-      postcss: 8.5.3
-      source-map: 0.6.1
-
-  resolve.exports@2.0.3: {}
-
-  resolve@1.22.10:
-    dependencies:
-      is-core-module: 2.16.1
-      path-parse: 1.0.7
-      supports-preserve-symlinks-flag: 1.0.0
-
-  resolve@2.0.0-next.5:
-    dependencies:
-      is-core-module: 2.16.1
-      path-parse: 1.0.7
-      supports-preserve-symlinks-flag: 1.0.0
-
-  responselike@2.0.1:
-    dependencies:
-      lowercase-keys: 2.0.0
-
-  restore-cursor@5.1.0:
-    dependencies:
-      onetime: 7.0.0
-      signal-exit: 4.1.0
-
-  reusify@1.1.0: {}
-
-  rfdc@1.4.1: {}
-
-  rimraf@3.0.2:
-    dependencies:
-      glob: 7.2.3
-
-  ripemd160@2.0.2:
-    dependencies:
-      hash-base: 3.0.5
-      inherits: 2.0.4
-
-  robust-predicates@3.0.2: {}
-
-  rollup@4.39.0:
-    dependencies:
-      '@types/estree': 1.0.7
-    optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.39.0
-      '@rollup/rollup-android-arm64': 4.39.0
-      '@rollup/rollup-darwin-arm64': 4.39.0
-      '@rollup/rollup-darwin-x64': 4.39.0
-      '@rollup/rollup-freebsd-arm64': 4.39.0
-      '@rollup/rollup-freebsd-x64': 4.39.0
-      '@rollup/rollup-linux-arm-gnueabihf': 4.39.0
-      '@rollup/rollup-linux-arm-musleabihf': 4.39.0
-      '@rollup/rollup-linux-arm64-gnu': 4.39.0
-      '@rollup/rollup-linux-arm64-musl': 4.39.0
-      '@rollup/rollup-linux-loongarch64-gnu': 4.39.0
-      '@rollup/rollup-linux-powerpc64le-gnu': 4.39.0
-      '@rollup/rollup-linux-riscv64-gnu': 4.39.0
-      '@rollup/rollup-linux-riscv64-musl': 4.39.0
-      '@rollup/rollup-linux-s390x-gnu': 4.39.0
-      '@rollup/rollup-linux-x64-gnu': 4.39.0
-      '@rollup/rollup-linux-x64-musl': 4.39.0
-      '@rollup/rollup-win32-arm64-msvc': 4.39.0
-      '@rollup/rollup-win32-ia32-msvc': 4.39.0
-      '@rollup/rollup-win32-x64-msvc': 4.39.0
-      fsevents: 2.3.3
-
-  roughjs@4.6.6:
-    dependencies:
-      hachure-fill: 0.5.2
-      path-data-parser: 0.1.0
-      points-on-curve: 0.2.0
-      points-on-path: 0.2.1
-
-  run-parallel@1.2.0:
-    dependencies:
-      queue-microtask: 1.2.3
-
-  rw@1.3.3: {}
-
-  safe-array-concat@1.1.3:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      get-intrinsic: 1.3.0
-      has-symbols: 1.1.0
-      isarray: 2.0.5
-
-  safe-buffer@5.1.2: {}
-
-  safe-buffer@5.2.1: {}
-
-  safe-push-apply@1.0.0:
-    dependencies:
-      es-errors: 1.3.0
-      isarray: 2.0.5
-
-  safe-regex-test@1.1.0:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-regex: 1.2.1
-
-  safer-buffer@2.1.2: {}
-
-  sass-loader@14.2.1(sass@1.86.3)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      neo-async: 2.6.2
-    optionalDependencies:
-      sass: 1.86.3
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-
-  sass@1.86.3:
-    dependencies:
-      chokidar: 4.0.3
-      immutable: 5.1.1
-      source-map-js: 1.2.1
-    optionalDependencies:
-      '@parcel/watcher': 2.5.1
-
-  scheduler@0.23.2:
-    dependencies:
-      loose-envify: 1.4.0
-
-  scheduler@0.25.0: {}
-
-  schema-utils@3.3.0:
-    dependencies:
-      '@types/json-schema': 7.0.15
-      ajv: 6.12.6
-      ajv-keywords: 3.5.2(ajv@6.12.6)
-
-  schema-utils@4.3.0:
-    dependencies:
-      '@types/json-schema': 7.0.15
-      ajv: 8.17.1
-      ajv-formats: 2.1.1(ajv@8.17.1)
-      ajv-keywords: 5.1.0(ajv@8.17.1)
-
-  screenfull@5.2.0: {}
-
-  scslre@0.3.0:
-    dependencies:
-      '@eslint-community/regexpp': 4.12.1
-      refa: 0.12.1
-      regexp-ast-analysis: 0.7.1
-
-  semver@6.3.1: {}
-
-  semver@7.7.1: {}
-
-  serialize-javascript@6.0.2:
-    dependencies:
-      randombytes: 2.1.0
-
-  server-only@0.0.1: {}
-
-  set-blocking@2.0.0:
-    optional: true
-
-  set-function-length@1.2.2:
-    dependencies:
-      define-data-property: 1.1.4
-      es-errors: 1.3.0
-      function-bind: 1.1.2
-      get-intrinsic: 1.3.0
-      gopd: 1.2.0
-      has-property-descriptors: 1.0.2
-
-  set-function-name@2.0.2:
-    dependencies:
-      define-data-property: 1.1.4
-      es-errors: 1.3.0
-      functions-have-names: 1.2.3
-      has-property-descriptors: 1.0.2
-
-  set-proto@1.0.0:
-    dependencies:
-      dunder-proto: 1.0.1
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-
-  setimmediate@1.0.5: {}
-
-  sha.js@2.4.11:
-    dependencies:
-      inherits: 2.0.4
-      safe-buffer: 5.2.1
-
-  sharp@0.33.5:
-    dependencies:
-      color: 4.2.3
-      detect-libc: 2.0.3
-      semver: 7.7.1
-    optionalDependencies:
-      '@img/sharp-darwin-arm64': 0.33.5
-      '@img/sharp-darwin-x64': 0.33.5
-      '@img/sharp-libvips-darwin-arm64': 1.0.4
-      '@img/sharp-libvips-darwin-x64': 1.0.4
-      '@img/sharp-libvips-linux-arm': 1.0.5
-      '@img/sharp-libvips-linux-arm64': 1.0.4
-      '@img/sharp-libvips-linux-s390x': 1.0.4
-      '@img/sharp-libvips-linux-x64': 1.0.4
-      '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
-      '@img/sharp-libvips-linuxmusl-x64': 1.0.4
-      '@img/sharp-linux-arm': 0.33.5
-      '@img/sharp-linux-arm64': 0.33.5
-      '@img/sharp-linux-s390x': 0.33.5
-      '@img/sharp-linux-x64': 0.33.5
-      '@img/sharp-linuxmusl-arm64': 0.33.5
-      '@img/sharp-linuxmusl-x64': 0.33.5
-      '@img/sharp-wasm32': 0.33.5
-      '@img/sharp-win32-ia32': 0.33.5
-      '@img/sharp-win32-x64': 0.33.5
-
-  shave@5.0.4: {}
-
-  shebang-command@2.0.0:
-    dependencies:
-      shebang-regex: 3.0.0
-
-  shebang-regex@3.0.0: {}
-
-  side-channel-list@1.0.0:
-    dependencies:
-      es-errors: 1.3.0
-      object-inspect: 1.13.4
-
-  side-channel-map@1.0.1:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      object-inspect: 1.13.4
-
-  side-channel-weakmap@1.0.2:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      object-inspect: 1.13.4
-      side-channel-map: 1.0.1
-
-  side-channel@1.1.0:
-    dependencies:
-      es-errors: 1.3.0
-      object-inspect: 1.13.4
-      side-channel-list: 1.0.0
-      side-channel-map: 1.0.1
-      side-channel-weakmap: 1.0.2
-
-  siginfo@2.0.0: {}
-
-  signal-exit@3.0.7: {}
-
-  signal-exit@4.1.0: {}
-
-  simple-concat@1.0.1:
-    optional: true
-
-  simple-get@3.1.1:
-    dependencies:
-      decompress-response: 4.2.1
-      once: 1.4.0
-      simple-concat: 1.0.1
-    optional: true
-
-  simple-swizzle@0.2.2:
-    dependencies:
-      is-arrayish: 0.3.2
-
-  sisteransi@1.0.5: {}
-
-  size-sensor@1.0.2: {}
-
-  slash@3.0.0: {}
-
-  slashes@3.0.12: {}
-
-  slice-ansi@5.0.0:
-    dependencies:
-      ansi-styles: 6.2.1
-      is-fullwidth-code-point: 4.0.0
-
-  slice-ansi@7.1.0:
-    dependencies:
-      ansi-styles: 6.2.1
-      is-fullwidth-code-point: 5.0.0
-
-  sortablejs@1.15.6: {}
-
-  source-map-js@1.2.1: {}
-
-  source-map-support@0.5.13:
-    dependencies:
-      buffer-from: 1.1.2
-      source-map: 0.6.1
-
-  source-map-support@0.5.21:
-    dependencies:
-      buffer-from: 1.1.2
-      source-map: 0.6.1
-
-  source-map@0.6.1: {}
-
-  source-map@0.7.4: {}
-
-  space-separated-tokens@1.1.5: {}
-
-  space-separated-tokens@2.0.2: {}
-
-  spdx-correct@3.2.0:
-    dependencies:
-      spdx-expression-parse: 3.0.1
-      spdx-license-ids: 3.0.21
-
-  spdx-exceptions@2.5.0: {}
-
-  spdx-expression-parse@3.0.1:
-    dependencies:
-      spdx-exceptions: 2.5.0
-      spdx-license-ids: 3.0.21
-
-  spdx-expression-parse@4.0.0:
-    dependencies:
-      spdx-exceptions: 2.5.0
-      spdx-license-ids: 3.0.21
-
-  spdx-license-ids@3.0.21: {}
-
-  sprintf-js@1.0.3: {}
-
-  stable-hash@0.0.5: {}
-
-  stack-utils@2.0.6:
-    dependencies:
-      escape-string-regexp: 2.0.0
-
-  stackback@0.0.2: {}
-
-  stackframe@1.3.4: {}
-
-  state-local@1.0.7: {}
-
-  std-env@3.9.0: {}
-
-  storybook@8.5.0:
-    dependencies:
-      '@storybook/core': 8.5.0
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-
-  stream-browserify@3.0.0:
-    dependencies:
-      inherits: 2.0.4
-      readable-stream: 3.6.2
-
-  stream-http@3.2.0:
-    dependencies:
-      builtin-status-codes: 3.0.0
-      inherits: 2.0.4
-      readable-stream: 3.6.2
-      xtend: 4.0.2
-
-  streamsearch@1.1.0: {}
-
-  string-argv@0.3.2: {}
-
-  string-length@4.0.2:
-    dependencies:
-      char-regex: 1.0.2
-      strip-ansi: 6.0.1
-
-  string-ts@2.2.1: {}
-
-  string-width@4.2.3:
-    dependencies:
-      emoji-regex: 8.0.0
-      is-fullwidth-code-point: 3.0.0
-      strip-ansi: 6.0.1
-
-  string.prototype.includes@2.0.1:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-
-  string.prototype.matchall@4.0.12:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      get-intrinsic: 1.3.0
-      gopd: 1.2.0
-      has-symbols: 1.1.0
-      internal-slot: 1.1.0
-      regexp.prototype.flags: 1.5.4
-      set-function-name: 2.0.2
-      side-channel: 1.1.0
-
-  string.prototype.repeat@1.0.0:
-    dependencies:
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-
-  string.prototype.trim@1.2.10:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-data-property: 1.1.4
-      define-properties: 1.2.1
-      es-abstract: 1.23.9
-      es-object-atoms: 1.1.1
-      has-property-descriptors: 1.0.2
-
-  string.prototype.trimend@1.0.9:
-    dependencies:
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-
-  string.prototype.trimstart@1.0.8:
-    dependencies:
-      call-bind: 1.0.8
-      define-properties: 1.2.1
-      es-object-atoms: 1.1.1
-
-  string_decoder@1.1.1:
-    dependencies:
-      safe-buffer: 5.1.2
-
-  string_decoder@1.3.0:
-    dependencies:
-      safe-buffer: 5.2.1
-
-  stringify-entities@4.0.4:
-    dependencies:
-      character-entities-html4: 2.1.0
-      character-entities-legacy: 3.0.0
-
-  strip-ansi@6.0.1:
-    dependencies:
-      ansi-regex: 5.0.1
-
-  strip-ansi@7.1.0:
-    dependencies:
-      ansi-regex: 6.1.0
-
-  strip-bom@3.0.0: {}
-
-  strip-bom@4.0.0: {}
-
-  strip-final-newline@2.0.0: {}
-
-  strip-final-newline@3.0.0: {}
-
-  strip-indent@3.0.0:
-    dependencies:
-      min-indent: 1.0.1
-
-  strip-indent@4.0.0:
-    dependencies:
-      min-indent: 1.0.1
-
-  strip-json-comments@3.1.1: {}
-
-  style-loader@3.3.4(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-
-  style-to-js@1.1.16:
-    dependencies:
-      style-to-object: 1.0.8
-
-  style-to-object@1.0.8:
-    dependencies:
-      inline-style-parser: 0.2.4
-
-  styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.0.0):
-    dependencies:
-      client-only: 0.0.1
-      react: 19.0.0
-    optionalDependencies:
-      '@babel/core': 7.26.10
-
-  stylis@4.3.6: {}
-
-  sucrase@3.35.0:
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.8
-      commander: 4.1.1
-      glob: 10.4.5
-      lines-and-columns: 1.2.4
-      mz: 2.7.0
-      pirates: 4.0.7
-      ts-interface-checker: 0.1.13
-
-  supports-color@7.2.0:
-    dependencies:
-      has-flag: 4.0.0
-
-  supports-color@8.1.1:
-    dependencies:
-      has-flag: 4.0.0
-
-  supports-preserve-symlinks-flag@1.0.0: {}
-
-  swr@2.3.3(react@19.0.0):
-    dependencies:
-      dequal: 2.0.3
-      react: 19.0.0
-      use-sync-external-store: 1.5.0(react@19.0.0)
-
-  synckit@0.10.3:
-    dependencies:
-      '@pkgr/core': 0.2.2
-      tslib: 2.8.1
-
-  synckit@0.9.2:
-    dependencies:
-      '@pkgr/core': 0.1.2
-      tslib: 2.8.1
-
-  tabbable@6.2.0: {}
-
-  tailwind-merge@2.6.0: {}
-
-  tailwindcss@3.4.17(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5)):
-    dependencies:
-      '@alloc/quick-lru': 5.2.0
-      arg: 5.0.2
-      chokidar: 3.6.0
-      didyoumean: 1.2.2
-      dlv: 1.1.3
-      fast-glob: 3.3.3
-      glob-parent: 6.0.2
-      is-glob: 4.0.3
-      jiti: 1.21.7
-      lilconfig: 3.1.3
-      micromatch: 4.0.8
-      normalize-path: 3.0.0
-      object-hash: 3.0.0
-      picocolors: 1.1.1
-      postcss: 8.5.3
-      postcss-import: 15.1.0(postcss@8.5.3)
-      postcss-js: 4.0.1(postcss@8.5.3)
-      postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5))
-      postcss-nested: 6.2.0(postcss@8.5.3)
-      postcss-selector-parser: 6.1.2
-      resolve: 1.22.10
-      sucrase: 3.35.0
-    transitivePeerDependencies:
-      - ts-node
-
-  tapable@2.2.1: {}
-
-  tar@6.2.1:
-    dependencies:
-      chownr: 2.0.0
-      fs-minipass: 2.1.0
-      minipass: 5.0.0
-      minizlib: 2.1.2
-      mkdirp: 1.0.4
-      yallist: 4.0.0
-    optional: true
-
-  terser-webpack-plugin@5.3.14(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      '@jridgewell/trace-mapping': 0.3.25
-      jest-worker: 27.5.1
-      schema-utils: 4.3.0
-      serialize-javascript: 6.0.2
-      terser: 5.39.0
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-    optionalDependencies:
-      esbuild: 0.25.0
-      uglify-js: 3.19.3
-
-  terser@5.39.0:
-    dependencies:
-      '@jridgewell/source-map': 0.3.6
-      acorn: 8.14.1
-      commander: 2.20.3
-      source-map-support: 0.5.21
-
-  test-exclude@6.0.0:
-    dependencies:
-      '@istanbuljs/schema': 0.1.3
-      glob: 7.2.3
-      minimatch: 3.1.2
-
-  thenify-all@1.6.0:
-    dependencies:
-      thenify: 3.3.1
-
-  thenify@3.3.1:
-    dependencies:
-      any-promise: 1.3.0
-
-  throttle-debounce@2.3.0: {}
-
-  timers-browserify@2.0.12:
-    dependencies:
-      setimmediate: 1.0.5
-
-  tiny-invariant@1.2.0: {}
-
-  tiny-invariant@1.3.3: {}
-
-  tinybench@2.9.0: {}
-
-  tinyexec@0.3.2: {}
-
-  tinyglobby@0.2.12:
-    dependencies:
-      fdir: 6.4.3(picomatch@4.0.2)
-      picomatch: 4.0.2
-
-  tinypool@1.0.2: {}
-
-  tinyrainbow@1.2.0: {}
-
-  tinyrainbow@2.0.0: {}
-
-  tinyspy@3.0.2: {}
-
-  tmpl@1.0.5: {}
-
-  to-regex-range@5.0.1:
-    dependencies:
-      is-number: 7.0.0
-
-  toggle-selection@1.0.6: {}
-
-  toml-eslint-parser@0.10.0:
-    dependencies:
-      eslint-visitor-keys: 3.4.3
-
-  tr46@0.0.3:
-    optional: true
-
-  trim-lines@3.0.1: {}
-
-  trough@2.2.0: {}
-
-  ts-api-utils@2.1.0(typescript@4.9.5):
-    dependencies:
-      typescript: 4.9.5
-
-  ts-debounce@4.0.0: {}
-
-  ts-declaration-location@1.0.7(typescript@4.9.5):
-    dependencies:
-      picomatch: 4.0.2
-      typescript: 4.9.5
-
-  ts-dedent@2.2.0: {}
-
-  ts-interface-checker@0.1.13: {}
-
-  ts-node@10.9.2(@types/node@18.15.0)(typescript@4.9.5):
-    dependencies:
-      '@cspotcode/source-map-support': 0.8.1
-      '@tsconfig/node10': 1.0.11
-      '@tsconfig/node12': 1.0.11
-      '@tsconfig/node14': 1.0.3
-      '@tsconfig/node16': 1.0.4
-      '@types/node': 18.15.0
-      acorn: 8.14.1
-      acorn-walk: 8.3.4
-      arg: 4.1.3
-      create-require: 1.1.1
-      diff: 4.0.2
-      make-error: 1.3.6
-      typescript: 4.9.5
-      v8-compile-cache-lib: 3.0.1
-      yn: 3.1.1
-
-  ts-pattern@5.7.0: {}
-
-  ts-pnp@1.2.0(typescript@4.9.5):
-    optionalDependencies:
-      typescript: 4.9.5
-
-  tsconfig-paths-webpack-plugin@4.2.0:
-    dependencies:
-      chalk: 4.1.2
-      enhanced-resolve: 5.18.1
-      tapable: 2.2.1
-      tsconfig-paths: 4.2.0
-
-  tsconfig-paths@3.15.0:
-    dependencies:
-      '@types/json5': 0.0.29
-      json5: 1.0.2
-      minimist: 1.2.8
-      strip-bom: 3.0.0
-
-  tsconfig-paths@4.2.0:
-    dependencies:
-      json5: 2.2.3
-      minimist: 1.2.8
-      strip-bom: 3.0.0
-
-  tslib@2.3.0: {}
-
-  tslib@2.6.2: {}
-
-  tslib@2.8.1: {}
-
-  tty-browserify@0.0.1: {}
-
-  tween-functions@1.2.0: {}
-
-  type-check@0.4.0:
-    dependencies:
-      prelude-ls: 1.2.1
-
-  type-detect@4.0.8: {}
-
-  type-fest@0.21.3: {}
-
-  type-fest@2.19.0: {}
-
-  type-fest@4.39.1: {}
-
-  typed-array-buffer@1.0.3:
-    dependencies:
-      call-bound: 1.0.4
-      es-errors: 1.3.0
-      is-typed-array: 1.1.15
-
-  typed-array-byte-length@1.0.3:
-    dependencies:
-      call-bind: 1.0.8
-      for-each: 0.3.5
-      gopd: 1.2.0
-      has-proto: 1.2.0
-      is-typed-array: 1.1.15
-
-  typed-array-byte-offset@1.0.4:
-    dependencies:
-      available-typed-arrays: 1.0.7
-      call-bind: 1.0.8
-      for-each: 0.3.5
-      gopd: 1.2.0
-      has-proto: 1.2.0
-      is-typed-array: 1.1.15
-      reflect.getprototypeof: 1.0.10
-
-  typed-array-length@1.0.7:
-    dependencies:
-      call-bind: 1.0.8
-      for-each: 0.3.5
-      gopd: 1.2.0
-      is-typed-array: 1.1.15
-      possible-typed-array-names: 1.1.0
-      reflect.getprototypeof: 1.0.10
-
-  typescript-eslint@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5):
-    dependencies:
-      '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@1.21.7))(typescript@4.9.5)
-      eslint: 9.24.0(jiti@1.21.7)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - supports-color
-
-  typescript@4.9.5: {}
-
-  typescript@5.8.3: {}
-
-  ufo@1.6.1: {}
-
-  uglify-js@3.19.3: {}
-
-  unbox-primitive@1.1.0:
-    dependencies:
-      call-bound: 1.0.4
-      has-bigints: 1.1.0
-      has-symbols: 1.1.0
-      which-boxed-primitive: 1.1.1
-
-  unicode-canonical-property-names-ecmascript@2.0.1: {}
-
-  unicode-match-property-ecmascript@2.0.0:
-    dependencies:
-      unicode-canonical-property-names-ecmascript: 2.0.1
-      unicode-property-aliases-ecmascript: 2.1.0
-
-  unicode-match-property-value-ecmascript@2.2.0: {}
-
-  unicode-property-aliases-ecmascript@2.1.0: {}
-
-  unicorn-magic@0.1.0: {}
-
-  unified@11.0.5:
-    dependencies:
-      '@types/unist': 3.0.3
-      bail: 2.0.2
-      devlop: 1.1.0
-      extend: 3.0.2
-      is-plain-obj: 4.1.0
-      trough: 2.2.0
-      vfile: 6.0.3
-
-  unist-util-find-after@5.0.0:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-is: 6.0.0
-
-  unist-util-is@6.0.0:
-    dependencies:
-      '@types/unist': 3.0.3
-
-  unist-util-position-from-estree@2.0.0:
-    dependencies:
-      '@types/unist': 3.0.3
-
-  unist-util-position@5.0.0:
-    dependencies:
-      '@types/unist': 3.0.3
-
-  unist-util-remove-position@5.0.0:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-visit: 5.0.0
-
-  unist-util-stringify-position@4.0.0:
-    dependencies:
-      '@types/unist': 3.0.3
-
-  unist-util-visit-parents@6.0.1:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-is: 6.0.0
-
-  unist-util-visit@5.0.0:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-is: 6.0.0
-      unist-util-visit-parents: 6.0.1
-
-  universal-user-agent@7.0.2: {}
-
-  universalify@2.0.1: {}
-
-  unplugin@1.16.1:
-    dependencies:
-      acorn: 8.14.1
-      webpack-virtual-modules: 0.6.2
-
-  unrs-resolver@1.4.1:
-    optionalDependencies:
-      '@unrs/resolver-binding-darwin-arm64': 1.4.1
-      '@unrs/resolver-binding-darwin-x64': 1.4.1
-      '@unrs/resolver-binding-freebsd-x64': 1.4.1
-      '@unrs/resolver-binding-linux-arm-gnueabihf': 1.4.1
-      '@unrs/resolver-binding-linux-arm-musleabihf': 1.4.1
-      '@unrs/resolver-binding-linux-arm64-gnu': 1.4.1
-      '@unrs/resolver-binding-linux-arm64-musl': 1.4.1
-      '@unrs/resolver-binding-linux-ppc64-gnu': 1.4.1
-      '@unrs/resolver-binding-linux-s390x-gnu': 1.4.1
-      '@unrs/resolver-binding-linux-x64-gnu': 1.4.1
-      '@unrs/resolver-binding-linux-x64-musl': 1.4.1
-      '@unrs/resolver-binding-wasm32-wasi': 1.4.1
-      '@unrs/resolver-binding-win32-arm64-msvc': 1.4.1
-      '@unrs/resolver-binding-win32-ia32-msvc': 1.4.1
-      '@unrs/resolver-binding-win32-x64-msvc': 1.4.1
-
-  update-browserslist-db@1.1.3(browserslist@4.24.4):
-    dependencies:
-      browserslist: 4.24.4
-      escalade: 3.2.0
-      picocolors: 1.1.1
-
-  uri-js@4.4.1:
-    dependencies:
-      punycode: 2.3.1
-
-  url@0.11.4:
-    dependencies:
-      punycode: 1.4.1
-      qs: 6.14.0
-
-  use-composed-ref@1.4.0(@types/react@18.2.79)(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-    optionalDependencies:
-      '@types/react': 18.2.79
-
-  use-context-selector@2.0.0(react@19.0.0)(scheduler@0.23.2):
-    dependencies:
-      react: 19.0.0
-      scheduler: 0.23.2
-
-  use-isomorphic-layout-effect@1.2.0(@types/react@18.2.79)(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-    optionalDependencies:
-      '@types/react': 18.2.79
-
-  use-latest@1.3.0(@types/react@18.2.79)(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-      use-isomorphic-layout-effect: 1.2.0(@types/react@18.2.79)(react@19.0.0)
-    optionalDependencies:
-      '@types/react': 18.2.79
-
-  use-strict@1.0.1: {}
-
-  use-sync-external-store@1.5.0(react@19.0.0):
-    dependencies:
-      react: 19.0.0
-
-  util-deprecate@1.0.2: {}
-
-  util@0.12.5:
-    dependencies:
-      inherits: 2.0.4
-      is-arguments: 1.2.0
-      is-generator-function: 1.1.0
-      is-typed-array: 1.1.15
-      which-typed-array: 1.1.19
-
-  utila@0.4.0: {}
-
-  uuid@10.0.0: {}
-
-  uuid@9.0.1: {}
-
-  v8-compile-cache-lib@3.0.1: {}
-
-  v8-to-istanbul@9.3.0:
-    dependencies:
-      '@jridgewell/trace-mapping': 0.3.25
-      '@types/istanbul-lib-coverage': 2.0.6
-      convert-source-map: 2.0.0
-
-  valibot@1.0.0(typescript@4.9.5):
-    optionalDependencies:
-      typescript: 4.9.5
-
-  validate-npm-package-license@3.0.4:
-    dependencies:
-      spdx-correct: 3.2.0
-      spdx-expression-parse: 3.0.1
-
-  vfile-location@5.0.3:
-    dependencies:
-      '@types/unist': 3.0.3
-      vfile: 6.0.3
-
-  vfile-message@4.0.2:
-    dependencies:
-      '@types/unist': 3.0.3
-      unist-util-stringify-position: 4.0.0
-
-  vfile@6.0.3:
-    dependencies:
-      '@types/unist': 3.0.3
-      vfile-message: 4.0.2
-
-  vite-code-inspector-plugin@0.18.3:
-    dependencies:
-      code-inspector-core: 0.18.3
-    transitivePeerDependencies:
-      - supports-color
-
-  vite-node@3.1.1(@types/node@18.15.0)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1):
-    dependencies:
-      cac: 6.7.14
-      debug: 4.4.0
-      es-module-lexer: 1.6.0
-      pathe: 2.0.3
-      vite: 6.2.6(@types/node@18.15.0)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1)
-    transitivePeerDependencies:
-      - '@types/node'
-      - jiti
-      - less
-      - lightningcss
-      - sass
-      - sass-embedded
-      - stylus
-      - sugarss
-      - supports-color
-      - terser
-      - tsx
-      - yaml
-
-  vite@6.2.6(@types/node@18.15.0)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1):
-    dependencies:
-      esbuild: 0.25.2
-      postcss: 8.5.3
-      rollup: 4.39.0
-    optionalDependencies:
-      '@types/node': 18.15.0
-      fsevents: 2.3.3
-      jiti: 1.21.7
-      sass: 1.86.3
-      terser: 5.39.0
-      yaml: 2.7.1
-
-  vitest@3.1.1(@types/debug@4.1.12)(@types/node@18.15.0)(happy-dom@17.4.4)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1):
-    dependencies:
-      '@vitest/expect': 3.1.1
-      '@vitest/mocker': 3.1.1(vite@6.2.6(@types/node@18.15.0)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1))
-      '@vitest/pretty-format': 3.1.1
-      '@vitest/runner': 3.1.1
-      '@vitest/snapshot': 3.1.1
-      '@vitest/spy': 3.1.1
-      '@vitest/utils': 3.1.1
-      chai: 5.2.0
-      debug: 4.4.0
-      expect-type: 1.2.1
-      magic-string: 0.30.17
-      pathe: 2.0.3
-      std-env: 3.9.0
-      tinybench: 2.9.0
-      tinyexec: 0.3.2
-      tinypool: 1.0.2
-      tinyrainbow: 2.0.0
-      vite: 6.2.6(@types/node@18.15.0)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1)
-      vite-node: 3.1.1(@types/node@18.15.0)(jiti@1.21.7)(sass@1.86.3)(terser@5.39.0)(yaml@2.7.1)
-      why-is-node-running: 2.3.0
-    optionalDependencies:
-      '@types/debug': 4.1.12
-      '@types/node': 18.15.0
-      happy-dom: 17.4.4
-    transitivePeerDependencies:
-      - jiti
-      - less
-      - lightningcss
-      - msw
-      - sass
-      - sass-embedded
-      - stylus
-      - sugarss
-      - supports-color
-      - terser
-      - tsx
-      - yaml
-
-  vm-browserify@1.1.2: {}
-
-  void-elements@3.1.0: {}
-
-  vscode-jsonrpc@8.2.0: {}
-
-  vscode-languageserver-protocol@3.17.5:
-    dependencies:
-      vscode-jsonrpc: 8.2.0
-      vscode-languageserver-types: 3.17.5
-
-  vscode-languageserver-textdocument@1.0.12: {}
-
-  vscode-languageserver-types@3.17.5: {}
-
-  vscode-languageserver@9.0.1:
-    dependencies:
-      vscode-languageserver-protocol: 3.17.5
-
-  vscode-uri@3.0.8: {}
-
-  vue-eslint-parser@10.1.3(eslint@9.24.0(jiti@1.21.7)):
-    dependencies:
-      debug: 4.4.0
-      eslint: 9.24.0(jiti@1.21.7)
-      eslint-scope: 8.3.0
-      eslint-visitor-keys: 4.2.0
-      espree: 10.3.0
-      esquery: 1.6.0
-      lodash: 4.17.21
-      semver: 7.7.1
-    transitivePeerDependencies:
-      - supports-color
-
-  walker@1.0.8:
-    dependencies:
-      makeerror: 1.0.12
-
-  watchpack@2.4.2:
-    dependencies:
-      glob-to-regexp: 0.4.1
-      graceful-fs: 4.2.11
-
-  web-namespaces@2.0.1: {}
-
-  webidl-conversions@3.0.1:
-    optional: true
-
-  webidl-conversions@7.0.0: {}
-
-  webpack-code-inspector-plugin@0.18.3:
-    dependencies:
-      code-inspector-core: 0.18.3
-    transitivePeerDependencies:
-      - supports-color
-
-  webpack-dev-middleware@6.1.3(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)):
-    dependencies:
-      colorette: 2.0.20
-      memfs: 3.5.3
-      mime-types: 2.1.35
-      range-parser: 1.2.1
-      schema-utils: 4.3.0
-    optionalDependencies:
-      webpack: 5.99.5(esbuild@0.25.0)(uglify-js@3.19.3)
-
-  webpack-hot-middleware@2.26.1:
-    dependencies:
-      ansi-html-community: 0.0.8
-      html-entities: 2.6.0
-      strip-ansi: 6.0.1
-
-  webpack-sources@3.2.3: {}
-
-  webpack-virtual-modules@0.6.2: {}
-
-  webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3):
-    dependencies:
-      '@types/eslint-scope': 3.7.7
-      '@types/estree': 1.0.7
-      '@webassemblyjs/ast': 1.14.1
-      '@webassemblyjs/wasm-edit': 1.14.1
-      '@webassemblyjs/wasm-parser': 1.14.1
-      acorn: 8.14.1
-      browserslist: 4.24.4
-      chrome-trace-event: 1.0.4
-      enhanced-resolve: 5.18.1
-      es-module-lexer: 1.6.0
-      eslint-scope: 5.1.1
-      events: 3.3.0
-      glob-to-regexp: 0.4.1
-      graceful-fs: 4.2.11
-      json-parse-even-better-errors: 2.3.1
-      loader-runner: 4.3.0
-      mime-types: 2.1.35
-      neo-async: 2.6.2
-      schema-utils: 4.3.0
-      tapable: 2.2.1
-      terser-webpack-plugin: 5.3.14(esbuild@0.25.0)(uglify-js@3.19.3)(webpack@5.99.5(esbuild@0.25.0)(uglify-js@3.19.3))
-      watchpack: 2.4.2
-      webpack-sources: 3.2.3
-    transitivePeerDependencies:
-      - '@swc/core'
-      - esbuild
-      - uglify-js
-
-  whatwg-mimetype@3.0.0: {}
-
-  whatwg-url@5.0.0:
-    dependencies:
-      tr46: 0.0.3
-      webidl-conversions: 3.0.1
-    optional: true
-
-  which-boxed-primitive@1.1.1:
-    dependencies:
-      is-bigint: 1.1.0
-      is-boolean-object: 1.2.2
-      is-number-object: 1.1.1
-      is-string: 1.1.1
-      is-symbol: 1.1.1
-
-  which-builtin-type@1.2.1:
-    dependencies:
-      call-bound: 1.0.4
-      function.prototype.name: 1.1.8
-      has-tostringtag: 1.0.2
-      is-async-function: 2.1.1
-      is-date-object: 1.1.0
-      is-finalizationregistry: 1.1.1
-      is-generator-function: 1.1.0
-      is-regex: 1.2.1
-      is-weakref: 1.1.1
-      isarray: 2.0.5
-      which-boxed-primitive: 1.1.1
-      which-collection: 1.0.2
-      which-typed-array: 1.1.19
-
-  which-collection@1.0.2:
-    dependencies:
-      is-map: 2.0.3
-      is-set: 2.0.3
-      is-weakmap: 2.0.2
-      is-weakset: 2.0.4
-
-  which-typed-array@1.1.19:
-    dependencies:
-      available-typed-arrays: 1.0.7
-      call-bind: 1.0.8
-      call-bound: 1.0.4
-      for-each: 0.3.5
-      get-proto: 1.0.1
-      gopd: 1.2.0
-      has-tostringtag: 1.0.2
-
-  which@2.0.2:
-    dependencies:
-      isexe: 2.0.0
-
-  why-is-node-running@2.3.0:
-    dependencies:
-      siginfo: 2.0.0
-      stackback: 0.0.2
-
-  wide-align@1.1.5:
-    dependencies:
-      string-width: 4.2.3
-    optional: true
-
-  word-wrap@1.2.5: {}
-
-  wrap-ansi@7.0.0:
-    dependencies:
-      ansi-styles: 4.3.0
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-
-  wrap-ansi@8.1.0:
-    dependencies:
-      ansi-styles: 6.2.1
-      string-width: 4.2.3
-      strip-ansi: 7.1.0
-
-  wrap-ansi@9.0.0:
-    dependencies:
-      ansi-styles: 6.2.1
-      string-width: 4.2.3
-      strip-ansi: 7.1.0
-
-  wrappy@1.0.2: {}
-
-  write-file-atomic@4.0.2:
-    dependencies:
-      imurmurhash: 0.1.4
-      signal-exit: 3.0.7
-
-  ws@8.18.1: {}
-
-  xml-name-validator@4.0.0: {}
-
-  xtend@4.0.2: {}
-
-  y18n@5.0.8: {}
-
-  yallist@3.1.1: {}
-
-  yallist@4.0.0:
-    optional: true
-
-  yaml-eslint-parser@1.3.0:
-    dependencies:
-      eslint-visitor-keys: 3.4.3
-      yaml: 2.7.1
-
-  yaml@1.10.2: {}
-
-  yaml@2.7.1: {}
-
-  yargs-parser@21.1.1: {}
-
-  yargs@17.7.2:
-    dependencies:
-      cliui: 8.0.1
-      escalade: 3.2.0
-      get-caller-file: 2.0.5
-      require-directory: 2.1.1
-      string-width: 4.2.3
-      y18n: 5.0.8
-      yargs-parser: 21.1.1
-
-  yjs@13.6.24:
-    dependencies:
-      lib0: 0.2.102
-
-  yn@3.1.1: {}
-
-  yocto-queue@0.1.0: {}
-
-  yocto-queue@1.2.1: {}
-
-  zod@3.24.2: {}
-
-  zrender@5.6.1:
-    dependencies:
-      tslib: 2.3.0
-
-  zundo@2.3.0(zustand@4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)):
-    dependencies:
-      zustand: 4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0)
-
-  zustand@4.5.6(@types/react@18.2.79)(immer@9.0.21)(react@19.0.0):
-    dependencies:
-      use-sync-external-store: 1.5.0(react@19.0.0)
-    optionalDependencies:
-      '@types/react': 18.2.79
-      immer: 9.0.21
-      react: 19.0.0
-
-  zwitch@2.0.4: {}
diff --git a/public/education/bg.png b/public/education/bg.png
deleted file mode 100644
index 0c2e503..0000000
--- a/public/education/bg.png
+++ /dev/null
Binary files differ
diff --git a/public/logo/logo-embedded-chat-header@2x.png b/public/logo/logo-embedded-chat-header@2x.png
deleted file mode 100644
index 9e11947..0000000
--- a/public/logo/logo-embedded-chat-header@2x.png
+++ /dev/null
Binary files differ
diff --git a/public/logo/logo-embedded-chat-header@3x.png b/public/logo/logo-embedded-chat-header@3x.png
deleted file mode 100644
index 5285ed6..0000000
--- a/public/logo/logo-embedded-chat-header@3x.png
+++ /dev/null
Binary files differ
diff --git a/public/logo/logo-monochrome-white.svg b/public/logo/logo-monochrome-white.svg
deleted file mode 100644
index 9a166ba..0000000
--- a/public/logo/logo-monochrome-white.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<svg width="48" height="22" viewBox="0 0 48 22" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="White=True">
-<g id="if">
-<path d="M21.2002 4.0695C22.5633 4.0695 23.0666 3.23413 23.0666 2.20309C23.0666 1.17204 22.5623 0.33667 21.2002 0.33667C19.838 0.33667 19.3337 1.17204 19.3337 2.20309C19.3337 3.23413 19.838 4.0695 21.2002 4.0695Z" fill="white"/>
-<path d="M27.7336 4.46931V5.66969H24.6668V8.33667H27.7336V15.0037H22.6668V5.67063H15.9998V8.33761H19.7336V15.0046H15.3337V17.6716H35.3337V15.0046H30.6668V8.33761H35.3337V5.67063H30.6668V3.00365H35.3337V0.33667H31.8671C29.5877 0.33667 27.7336 2.19086 27.7336 4.47025V4.46931Z" fill="white"/>
-</g>
-<g id="Dy">
-<path d="M5.66698 0.335902H0V17.6689H5.66698C12.667 17.6689 14.667 13.6689 14.667 9.00194C14.667 4.33496 12.667 0.334961 5.66698 0.334961V0.335902ZM5.73377 15.0029H3.20038V3.00288H5.73377C9.75823 3.00288 11.4666 4.97842 11.4666 9.00288C11.4666 13.0273 9.75823 15.0029 5.73377 15.0029Z" fill="white"/>
-<path d="M44.8335 5.66986L42.1665 14.3368L39.4995 5.66986H36.333L40.2013 16.8815C40.604 18.049 39.9229 19.0029 38.6886 19.0029H37.333V21.6699H39.3255C41.063 21.6699 42.6265 20.5711 43.2145 18.9361L48 5.66986H44.8335Z" fill="white"/>
-</g>
-</g>
-</svg>
diff --git a/public/logo/logo.svg b/public/logo/logo.svg
deleted file mode 100644
index 52ed710..0000000
--- a/public/logo/logo.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<svg width="48" height="22" viewBox="0 0 48 22" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g id="White=False">
-<g id="if">
-<path d="M21.2002 3.73454C22.5633 3.73454 23.0666 2.89917 23.0666 1.86812C23.0666 0.837081 22.5623 0.00170898 21.2002 0.00170898C19.838 0.00170898 19.3337 0.837081 19.3337 1.86812C19.3337 2.89917 19.838 3.73454 21.2002 3.73454Z" fill="#0033FF"/>
-<path d="M27.7336 4.13435V5.33473H24.6668V8.00171H27.7336V14.6687H22.6668V5.33567H15.9998V8.00265H19.7336V14.6696H15.3337V17.3366H35.3337V14.6696H30.6668V8.00265H35.3337V5.33567H30.6668V2.66869H35.3337V0.00170898H31.8671C29.5877 0.00170898 27.7336 1.8559 27.7336 4.13529V4.13435Z" fill="#0033FF"/>
-</g>
-<g id="Dy">
-<path d="M5.66698 0.000940576H0V17.334H5.66698C12.667 17.334 14.667 13.334 14.667 8.66698C14.667 4 12.667 0 5.66698 0V0.000940576ZM5.73377 14.6679H3.20038V2.66792H5.73377C9.75823 2.66792 11.4666 4.64346 11.4666 8.66792C11.4666 12.6924 9.75823 14.6679 5.73377 14.6679Z" fill="black"/>
-<path d="M44.8335 5.3349L42.1665 14.0019L39.4995 5.3349H36.333L40.2013 16.5466C40.604 17.714 39.9229 18.6679 38.6886 18.6679H37.333V21.3349H39.3255C41.063 21.3349 42.6265 20.2361 43.2145 18.6011L48 5.3349H44.8335Z" fill="black"/>
-</g>
-</g>
-</svg>
diff --git a/service/_tools_util.spec.ts b/service/_tools_util.spec.ts
deleted file mode 100644
index f06e5a1..0000000
--- a/service/_tools_util.spec.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { buildProviderQuery } from './_tools_util'
-
-describe('makeProviderQuery', () => {
-  test('collectionName without special chars', () => {
-    expect(buildProviderQuery('ABC')).toBe('provider=ABC')
-  })
-  test('should escape &', () => {
-    expect(buildProviderQuery('ABC&DEF')).toBe('provider=ABC%26DEF')
-  })
-  test('should escape /', () => {
-    expect(buildProviderQuery('ABC/DEF')).toBe('provider=ABC%2FDEF')
-  })
-  test('should escape ?', () => {
-    expect(buildProviderQuery('ABC?DEF')).toBe('provider=ABC%3FDEF')
-  })
-})
diff --git a/service/_tools_util.ts b/service/_tools_util.ts
deleted file mode 100644
index 89dede8..0000000
--- a/service/_tools_util.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export const buildProviderQuery = (collectionName: string): string => {
-  const query = new URLSearchParams()
-  query.set('provider', collectionName)
-  return query.toString()
-}
diff --git a/service/fetch.ts b/service/fetch.ts
deleted file mode 100644
index 05d39c6..0000000
--- a/service/fetch.ts
+++ /dev/null
@@ -1,208 +0,0 @@
-import type { AfterResponseHook, BeforeErrorHook, BeforeRequestHook, Hooks } from 'ky'
-import ky from 'ky'
-import type { IOtherOptions } from './base'
-import Toast from '@/app/components/base/toast'
-import { API_PREFIX, MARKETPLACE_API_PREFIX, PUBLIC_API_PREFIX, WEB_PREFIX } from '@/config'
-import { getInitialTokenV2, isTokenV1 } from '@/app/components/share/utils'
-import { getProcessedSystemVariablesFromUrlParams } from '@/app/components/base/chat/utils'
-
-const TIME_OUT = 100000
-
-export const ContentType = {
-  json: 'application/json',
-  stream: 'text/event-stream',
-  audio: 'audio/mpeg',
-  form: 'application/x-www-form-urlencoded; charset=UTF-8',
-  download: 'application/octet-stream', // for download
-  downloadZip: 'application/zip', // for download
-  upload: 'multipart/form-data', // for upload
-}
-
-export type FetchOptionType = Omit<RequestInit, 'body'> & {
-  params?: Record<string, any>
-  body?: BodyInit | Record<string, any> | null
-}
-
-const afterResponse204: AfterResponseHook = async (_request, _options, response) => {
-  if (response.status === 204) return Response.json({ result: 'success' })
-}
-
-export type ResponseError = {
-  code: string
-  message: string
-  status: number
-}
-
-const afterResponseErrorCode = (otherOptions: IOtherOptions): AfterResponseHook => {
-  return async (_request, _options, response) => {
-    const clonedResponse = response.clone()
-    if (!/^([23])\d{2}$/.test(String(clonedResponse.status))) {
-      const bodyJson = clonedResponse.json() as Promise<ResponseError>
-      switch (clonedResponse.status) {
-        case 403:
-          bodyJson.then((data: ResponseError) => {
-            if (!otherOptions.silent)
-              Toast.notify({ type: 'error', message: data.message })
-            if (data.code === 'already_setup')
-              globalThis.location.href = `${WEB_PREFIX}/signin`
-          })
-          break
-        case 401:
-          return Promise.reject(response)
-        // fall through
-        default:
-          bodyJson.then((data: ResponseError) => {
-            if (!otherOptions.silent)
-              Toast.notify({ type: 'error', message: data.message })
-          })
-          return Promise.reject(response)
-      }
-    }
-  }
-}
-
-const beforeErrorToast = (otherOptions: IOtherOptions): BeforeErrorHook => {
-  return (error) => {
-    if (!otherOptions.silent)
-      Toast.notify({ type: 'error', message: error.message })
-    return error
-  }
-}
-
-export async function getAccessToken(isPublicAPI?: boolean) {
-  if (isPublicAPI) {
-    const sharedToken = globalThis.location.pathname.split('/').slice(-1)[0]
-    const userId = (await getProcessedSystemVariablesFromUrlParams()).user_id
-    const accessToken = localStorage.getItem('token') || JSON.stringify({ version: 2 })
-    let accessTokenJson: Record<string, any> = { version: 2 }
-    try {
-      accessTokenJson = JSON.parse(accessToken)
-      if (isTokenV1(accessTokenJson))
-        accessTokenJson = getInitialTokenV2()
-    }
-    catch {
-
-    }
-    return accessTokenJson[sharedToken]?.[userId || 'DEFAULT']
-  }
-  else {
-    return localStorage.getItem('console_token') || ''
-  }
-}
-
-const beforeRequestPublicAuthorization: BeforeRequestHook = async (request) => {
-  const token = await getAccessToken(true)
-  request.headers.set('Authorization', `Bearer ${token}`)
-}
-
-const beforeRequestAuthorization: BeforeRequestHook = async (request) => {
-  const accessToken = await getAccessToken()
-  request.headers.set('Authorization', `Bearer ${accessToken}`)
-}
-
-const baseHooks: Hooks = {
-  afterResponse: [
-    afterResponse204,
-  ],
-}
-
-const baseClient = ky.create({
-  hooks: baseHooks,
-  timeout: TIME_OUT,
-})
-
-export const baseOptions: RequestInit = {
-  method: 'GET',
-  mode: 'cors',
-  credentials: 'include', // always send cookies銆丠TTP Basic authentication.
-  headers: new Headers({
-    'Content-Type': ContentType.json,
-  }),
-  redirect: 'follow',
-}
-
-async function base<T>(url: string, options: FetchOptionType = {}, otherOptions: IOtherOptions = {}): Promise<T> {
-  const { params, body, headers, ...init } = Object.assign({}, baseOptions, options)
-  const {
-    isPublicAPI = false,
-    isMarketplaceAPI = false,
-    bodyStringify = true,
-    needAllResponseContent,
-    deleteContentType,
-    getAbortController,
-  } = otherOptions
-
-  let base: string
-  if (isMarketplaceAPI)
-    base = MARKETPLACE_API_PREFIX
-   else if (isPublicAPI)
-    base = PUBLIC_API_PREFIX
-   else
-    base = API_PREFIX
-
-  if (getAbortController) {
-    const abortController = new AbortController()
-    getAbortController(abortController)
-    options.signal = abortController.signal
-  }
-
-  const fetchPathname = base + (url.startsWith('/') ? url : `/${url}`)
-
-  if (deleteContentType)
-    (headers as any).delete('Content-Type')
-
-  const client = baseClient.extend({
-    hooks: {
-      ...baseHooks,
-      beforeError: [
-        ...baseHooks.beforeError || [],
-        beforeErrorToast(otherOptions),
-      ],
-      beforeRequest: [
-        ...baseHooks.beforeRequest || [],
-        isPublicAPI && beforeRequestPublicAuthorization,
-        !isPublicAPI && !isMarketplaceAPI && beforeRequestAuthorization,
-      ].filter(Boolean),
-      afterResponse: [
-        ...baseHooks.afterResponse || [],
-        afterResponseErrorCode(otherOptions),
-      ],
-    },
-  })
-
-  const res = await client(fetchPathname, {
-    ...init,
-    headers,
-    credentials: isMarketplaceAPI
-      ? 'omit'
-      : (options.credentials || 'include'),
-    retry: {
-      methods: [],
-    },
-    ...(bodyStringify ? { json: body } : { body: body as BodyInit }),
-    searchParams: params,
-    fetch(resource: RequestInfo | URL, options?: RequestInit) {
-      if (resource instanceof Request && options) {
-        const mergedHeaders = new Headers(options.headers || {})
-        resource.headers.forEach((value, key) => {
-          mergedHeaders.append(key, value)
-        })
-        options.headers = mergedHeaders
-      }
-      return globalThis.fetch(resource, options)
-    },
-  })
-
-  if (needAllResponseContent)
-    return res as T
-  const contentType = res.headers.get('content-type')
-  if (
-    contentType
-    && [ContentType.download, ContentType.audio, ContentType.downloadZip].includes(contentType)
-  )
-    return await res.blob() as T
-
-  return await res.json() as T
-}
-
-export { base }
diff --git a/service/knowledge/use-metadata.ts b/service/knowledge/use-metadata.ts
deleted file mode 100644
index 5e9186f..0000000
--- a/service/knowledge/use-metadata.ts
+++ /dev/null
@@ -1,146 +0,0 @@
-import type { BuiltInMetadataItem, MetadataBatchEditToServer, MetadataItemWithValueLength } from '@/app/components/datasets/metadata/types'
-import { del, get, patch, post } from '../base'
-import { useDocumentListKey, useInvalidDocumentList } from './use-document'
-import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
-import { useInvalid } from '../use-base'
-import type { DocumentDetailResponse } from '@/models/datasets'
-
-const NAME_SPACE = 'dataset-metadata'
-
-export const useDatasetMetaData = (datasetId: string) => {
-  return useQuery<{ doc_metadata: MetadataItemWithValueLength[], built_in_field_enabled: boolean }>({
-    queryKey: [NAME_SPACE, 'dataset', datasetId],
-    queryFn: () => {
-      return get<{ doc_metadata: MetadataItemWithValueLength[], built_in_field_enabled: boolean }>(`/datasets/${datasetId}/metadata`)
-    },
-  })
-}
-
-export const useInvalidDatasetMetaData = (datasetId: string) => {
-  return useInvalid([NAME_SPACE, 'dataset', datasetId])
-}
-
-export const useCreateMetaData = (datasetId: string) => {
-  const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)
-  return useMutation({
-    mutationFn: async (payload: BuiltInMetadataItem) => {
-      await post(`/datasets/${datasetId}/metadata`, {
-        body: payload,
-      })
-      await invalidDatasetMetaData()
-      return Promise.resolve(true)
-    },
-  })
-}
-export const useInvalidAllDocumentMetaData = (datasetId: string) => {
-  const queryClient = useQueryClient()
-  return () => {
-    queryClient.invalidateQueries({
-      queryKey: [NAME_SPACE, 'document', datasetId],
-      exact: false, // invalidate all document metadata: [NAME_SPACE, 'document', datasetId, documentId]
-    })
-  }
-}
-
-const useInvalidAllMetaData = (datasetId: string) => {
-  const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)
-  const invalidDocumentList = useInvalidDocumentList(datasetId)
-  const invalidateAllDocumentMetaData = useInvalidAllDocumentMetaData(datasetId)
-
-  return async () => {
-    // meta data in dataset
-    await invalidDatasetMetaData()
-    // meta data in document list
-    invalidDocumentList()
-    // meta data in single document
-    await invalidateAllDocumentMetaData() // meta data in document
-  }
-}
-
-export const useRenameMeta = (datasetId: string) => {
-  const invalidateAllMetaData = useInvalidAllMetaData(datasetId)
-  return useMutation({
-    mutationFn: async (payload: MetadataItemWithValueLength) => {
-      await patch(`/datasets/${datasetId}/metadata/${payload.id}`, {
-        body: {
-          name: payload.name,
-        },
-      })
-      await invalidateAllMetaData()
-    },
-  })
-}
-
-export const useDeleteMetaData = (datasetId: string) => {
-  const invalidateAllMetaData = useInvalidAllMetaData(datasetId)
-  return useMutation({
-    mutationFn: async (metaDataId: string) => {
-      // datasetMetaData = datasetMetaData.filter(item => item.id !== metaDataId)
-      await del(`/datasets/${datasetId}/metadata/${metaDataId}`)
-      await invalidateAllMetaData()
-    },
-  })
-}
-
-export const useBuiltInMetaDataFields = () => {
-  return useQuery<{ fields: BuiltInMetadataItem[] }>({
-    queryKey: [NAME_SPACE, 'built-in'],
-    queryFn: () => {
-      return get('/datasets/metadata/built-in')
-    },
-  })
-}
-
-export const useDocumentMetaData = ({ datasetId, documentId }: { datasetId: string, documentId: string }) => {
-  return useQuery<DocumentDetailResponse>({
-    queryKey: [NAME_SPACE, 'document', datasetId, documentId],
-    queryFn: () => {
-      return get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params: { metadata: 'only' } })
-    },
-  })
-}
-
-export const useBatchUpdateDocMetadata = () => {
-  const queryClient = useQueryClient()
-  return useMutation({
-    mutationFn: async (payload: {
-      dataset_id: string
-      metadata_list: MetadataBatchEditToServer
-    }) => {
-      const documentIds = payload.metadata_list.map(item => item.document_id)
-      await post(`/datasets/${payload.dataset_id}/documents/metadata`, {
-        body: {
-          operation_data: payload.metadata_list,
-        },
-      })
-      // meta data in dataset
-      await queryClient.invalidateQueries({
-        queryKey: [NAME_SPACE, 'dataset', payload.dataset_id],
-      })
-      // meta data in document list
-      await queryClient.invalidateQueries({
-        queryKey: [NAME_SPACE, 'dataset', payload.dataset_id],
-      })
-      await queryClient.invalidateQueries({
-        queryKey: [...useDocumentListKey, payload.dataset_id],
-      })
-
-      // meta data in single document
-      await Promise.all(documentIds.map(documentId => queryClient.invalidateQueries(
-        {
-          queryKey: [NAME_SPACE, 'document', payload.dataset_id, documentId],
-        },
-      )))
-    },
-  })
-}
-
-export const useUpdateBuiltInStatus = (datasetId: string) => {
-  const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)
-  return useMutation({
-    mutationFn: async (enabled: boolean) => {
-      await post(`/datasets/${datasetId}/metadata/built-in/${enabled ? 'enable' : 'disable'}`)
-      invalidDatasetMetaData()
-    },
-  })
-}
diff --git a/service/plugins.ts b/service/plugins.ts
deleted file mode 100644
index 0a880b8..0000000
--- a/service/plugins.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-import type { Fetcher } from 'swr'
-import { get, getMarketplace, post, upload } from './base'
-import type {
-  Dependency,
-  InstallPackageResponse,
-  Permissions,
-  PluginDeclaration,
-  PluginInfoFromMarketPlace,
-  PluginManifestInMarket,
-  PluginTasksResponse,
-  TaskStatusResponse,
-  UninstallPluginResponse,
-  updatePackageResponse,
-  uploadGitHubResponse,
-} from '@/app/components/plugins/types'
-import type {
-  MarketplaceCollectionPluginsResponse,
-  MarketplaceCollectionsResponse,
-} from '@/app/components/plugins/marketplace/types'
-
-export const uploadFile = async (file: File, isBundle: boolean) => {
-  const formData = new FormData()
-  formData.append(isBundle ? 'bundle' : 'pkg', file)
-  return upload({
-    xhr: new XMLHttpRequest(),
-    data: formData,
-  }, false, `/workspaces/current/plugin/upload/${isBundle ? 'bundle' : 'pkg'}`)
-}
-
-export const updateFromMarketPlace = async (body: Record<string, string>) => {
-  return post<InstallPackageResponse>('/workspaces/current/plugin/upgrade/marketplace', {
-    body,
-  })
-}
-
-export const updateFromGitHub = async (repoUrl: string, selectedVersion: string, selectedPackage: string,
-  originalPlugin: string, newPlugin: string) => {
-  return post<updatePackageResponse>('/workspaces/current/plugin/upgrade/github', {
-    body: {
-      repo: repoUrl,
-      version: selectedVersion,
-      package: selectedPackage,
-      original_plugin_unique_identifier: originalPlugin,
-      new_plugin_unique_identifier: newPlugin,
-    },
-  })
-}
-
-export const uploadGitHub = async (repoUrl: string, selectedVersion: string, selectedPackage: string) => {
-  return post<uploadGitHubResponse>('/workspaces/current/plugin/upload/github', {
-    body: {
-      repo: repoUrl,
-      version: selectedVersion,
-      package: selectedPackage,
-    },
-  })
-}
-
-export const fetchIcon = (tenantId: string, fileName: string) => {
-  return get(`workspaces/current/plugin/icon?tenant_id=${tenantId}&filename=${fileName}`)
-}
-
-export const fetchManifest = async (uniqueIdentifier: string) => {
-  return get<PluginDeclaration>(`/workspaces/current/plugin/fetch-manifest?plugin_unique_identifier=${uniqueIdentifier}`)
-}
-
-export const fetchManifestFromMarketPlace = async (uniqueIdentifier: string) => {
-  return getMarketplace<{ data: { plugin: PluginManifestInMarket, version: { version: string } } }>(`/plugins/identifier?unique_identifier=${uniqueIdentifier}`)
-}
-
-export const fetchBundleInfoFromMarketPlace = async ({
-  org,
-  name,
-  version,
-}: Record<string, string>) => {
-  return getMarketplace<{ data: { version: { dependencies: Dependency[] } } }>(`/bundles/${org}/${name}/${version}`)
-}
-
-export const fetchPluginInfoFromMarketPlace = async ({
-  org,
-  name,
-}: Record<string, string>) => {
-  return getMarketplace<{ data: { plugin: PluginInfoFromMarketPlace, version: { version: string } } }>(`/plugins/${org}/${name}`)
-}
-
-export const fetchMarketplaceCollections: Fetcher<MarketplaceCollectionsResponse, { url: string; }> = ({ url }) => {
-  return get<MarketplaceCollectionsResponse>(url)
-}
-
-export const fetchMarketplaceCollectionPlugins: Fetcher<MarketplaceCollectionPluginsResponse, { url: string }> = ({ url }) => {
-  return get<MarketplaceCollectionPluginsResponse>(url)
-}
-
-export const fetchPluginTasks = async () => {
-  return get<PluginTasksResponse>('/workspaces/current/plugin/tasks?page=1&page_size=255')
-}
-
-export const checkTaskStatus = async (taskId: string) => {
-  return get<TaskStatusResponse>(`/workspaces/current/plugin/tasks/${taskId}`)
-}
-
-export const updatePermission = async (permissions: Permissions) => {
-  return post('/workspaces/current/plugin/permission/change', { body: permissions })
-}
-
-export const uninstallPlugin = async (pluginId: string) => {
-  return post<UninstallPluginResponse>('/workspaces/current/plugin/uninstall', { body: { plugin_installation_id: pluginId } })
-}
diff --git a/service/strategy.ts b/service/strategy.ts
deleted file mode 100644
index bb032ba..0000000
--- a/service/strategy.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { StrategyPluginDetail } from '@/app/components/plugins/types'
-import { get } from './base'
-
-export const fetchStrategyList = () => {
-  return get<StrategyPluginDetail[]>('/workspaces/current/agent-providers')
-}
-
-export const fetchStrategyDetail = (agentProvider: string) => {
-  return get<StrategyPluginDetail>(`/workspaces/current/agent-provider/${agentProvider}`)
-}
diff --git a/service/use-apps.ts b/service/use-apps.ts
deleted file mode 100644
index 1a3e9ce..0000000
--- a/service/use-apps.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { get } from './base'
-import type { App } from '@/types/app'
-import type { AppListResponse } from '@/models/app'
-import { useInvalid } from './use-base'
-import { useQuery } from '@tanstack/react-query'
-
-const NAME_SPACE = 'apps'
-
-// TODO paging for list
-const useAppFullListKey = [NAME_SPACE, 'full-list']
-export const useAppFullList = () => {
-  return useQuery<AppListResponse>({
-    queryKey: useAppFullListKey,
-    queryFn: () => get<AppListResponse>('/apps', { params: { page: 1, limit: 100 } }),
-  })
-}
-
-export const useInvalidateAppFullList = () => {
-  return useInvalid(useAppFullListKey)
-}
-
-export const useAppDetail = (appID: string) => {
-  return useQuery<App>({
-    queryKey: [NAME_SPACE, 'detail', appID],
-    queryFn: () => get<App>(`/apps/${appID}`),
-  })
-}
diff --git a/service/use-common.ts b/service/use-common.ts
deleted file mode 100644
index d49f380..0000000
--- a/service/use-common.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { get, post } from './base'
-import type {
-  FileUploadConfigResponse,
-  StructuredOutputRulesRequestBody,
-  StructuredOutputRulesResponse,
-} from '@/models/common'
-import { useMutation, useQuery } from '@tanstack/react-query'
-
-const NAME_SPACE = 'common'
-
-export const useFileUploadConfig = () => {
-  return useQuery<FileUploadConfigResponse>({
-    queryKey: [NAME_SPACE, 'file-upload-config'],
-    queryFn: () => get<FileUploadConfigResponse>('/files/upload'),
-  })
-}
-
-export const useGenerateStructuredOutputRules = () => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'generate-structured-output-rules'],
-    mutationFn: (body: StructuredOutputRulesRequestBody) => {
-      return post<StructuredOutputRulesResponse>(
-        '/rule-structured-output-generate',
-        { body },
-      )
-    },
-  })
-}
diff --git a/service/use-education.ts b/service/use-education.ts
deleted file mode 100644
index 4405db7..0000000
--- a/service/use-education.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { get, post } from './base'
-import {
-  useMutation,
-  useQuery,
-} from '@tanstack/react-query'
-import { useInvalid } from './use-base'
-import type { EducationAddParams } from '@/app/education-apply/types'
-
-const NAME_SPACE = 'education'
-
-export const useEducationVerify = () => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'education-verify'],
-    mutationFn: () => {
-      return get<{ token: string }>('/account/education/verify', {}, { silent: true })
-    },
-  })
-}
-
-export const useEducationAdd = ({
-  onSuccess,
-}: {
-  onSuccess?: () => void
-}) => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'education-add'],
-    mutationFn: (params: EducationAddParams) => {
-      return post<{ message: string }>('/account/education', {
-        body: params,
-      })
-    },
-    onSuccess,
-  })
-}
-
-type SearchParams = {
-  keywords?: string
-  page?: number
-  limit?: number
-}
-export const useEducationAutocomplete = () => {
-  return useMutation({
-    mutationFn: (searchParams: SearchParams) => {
-      const {
-        keywords = '',
-        page = 0,
-        limit = 40,
-      } = searchParams
-      return get<{ data: string[]; has_next: boolean; curr_page: number }>(`/account/education/autocomplete?keywords=${keywords}&page=${page}&limit=${limit}`)
-    },
-  })
-}
-
-export const useEducationStatus = (disable?: boolean) => {
-  return useQuery({
-    enabled: !disable,
-    queryKey: [NAME_SPACE, 'education-status'],
-    queryFn: () => {
-      return get<{ result: boolean }>('/account/education')
-    },
-    retry: false,
-  })
-}
-
-export const useInvalidateEducationStatus = () => {
-  return useInvalid([NAME_SPACE, 'education-status'])
-}
diff --git a/service/use-endpoints.ts b/service/use-endpoints.ts
deleted file mode 100644
index 43a8248..0000000
--- a/service/use-endpoints.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import { get, post } from './base'
-import type {
-  EndpointsResponse,
-} from '@/app/components/plugins/types'
-import {
-  useMutation,
-  useQuery,
-  useQueryClient,
-} from '@tanstack/react-query'
-
-const NAME_SPACE = 'endpoints'
-
-export const useEndpointList = (pluginID: string) => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'list', pluginID],
-    queryFn: () => get<EndpointsResponse>('/workspaces/current/endpoints/list/plugin', {
-      params: {
-        plugin_id: pluginID,
-        page: 1,
-        page_size: 100,
-      },
-    }),
-  })
-}
-
-export const useInvalidateEndpointList = () => {
-  const queryClient = useQueryClient()
-  return (pluginID: string) => {
-    queryClient.invalidateQueries(
-      {
-        queryKey: [NAME_SPACE, 'list', pluginID],
-      })
-  }
-}
-
-export const useCreateEndpoint = ({
-  onSuccess,
-  onError,
-}: {
-  onSuccess?: () => void
-  onError?: (error: any) => void
-}) => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'create'],
-    mutationFn: (payload: { pluginUniqueID: string, state: Record<string, any> }) => {
-      const { pluginUniqueID, state } = payload
-      const newName = state.name
-      delete state.name
-      return post('/workspaces/current/endpoints/create', {
-        body: {
-          plugin_unique_identifier: pluginUniqueID,
-          settings: state,
-          name: newName,
-        },
-      })
-    },
-    onSuccess,
-    onError,
-  })
-}
-
-export const useUpdateEndpoint = ({
-  onSuccess,
-  onError,
-}: {
-  onSuccess?: () => void
-  onError?: (error: any) => void
-}) => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'update'],
-    mutationFn: (payload: { endpointID: string, state: Record<string, any> }) => {
-      const { endpointID, state } = payload
-      const newName = state.name
-      delete state.name
-      return post('/workspaces/current/endpoints/update', {
-        body: {
-          endpoint_id: endpointID,
-          settings: state,
-          name: newName,
-        },
-      })
-    },
-    onSuccess,
-    onError,
-  })
-}
-
-export const useDeleteEndpoint = ({
-  onSuccess,
-  onError,
-}: {
-  onSuccess?: () => void
-  onError?: (error: any) => void
-}) => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'delete'],
-    mutationFn: (endpointID: string) => {
-      return post('/workspaces/current/endpoints/delete', {
-        body: {
-          endpoint_id: endpointID,
-        },
-      })
-    },
-    onSuccess,
-    onError,
-  })
-}
-
-export const useEnableEndpoint = ({
-  onSuccess,
-  onError,
-}: {
-  onSuccess?: () => void
-  onError?: (error: any) => void
-}) => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'enable'],
-    mutationFn: (endpointID: string) => {
-      return post('/workspaces/current/endpoints/enable', {
-        body: {
-          endpoint_id: endpointID,
-        },
-      })
-    },
-    onSuccess,
-    onError,
-  })
-}
-
-export const useDisableEndpoint = ({
-  onSuccess,
-  onError,
-}: {
-  onSuccess?: () => void
-  onError?: (error: any) => void
-}) => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'disable'],
-    mutationFn: (endpointID: string) => {
-      return post('/workspaces/current/endpoints/disable', {
-        body: {
-          endpoint_id: endpointID,
-        },
-      })
-    },
-    onSuccess,
-    onError,
-  })
-}
diff --git a/service/use-models.ts b/service/use-models.ts
deleted file mode 100644
index 84122cd..0000000
--- a/service/use-models.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { get } from './base'
-import type {
-  ModelItem,
-} from '@/app/components/header/account-setting/model-provider-page/declarations'
-import {
-  useQuery,
-  // useQueryClient,
-} from '@tanstack/react-query'
-
-const NAME_SPACE = 'models'
-
-export const useModelProviderModelList = (provider: string) => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'model-list', provider],
-    queryFn: () => get<{ data: ModelItem[] }>(`/workspaces/current/model-providers/${provider}/models`),
-  })
-}
diff --git a/service/use-plugins.ts b/service/use-plugins.ts
deleted file mode 100644
index 13a494b..0000000
--- a/service/use-plugins.ts
+++ /dev/null
@@ -1,529 +0,0 @@
-import { useCallback, useEffect } from 'react'
-import type {
-  ModelProvider,
-} from '@/app/components/header/account-setting/model-provider-page/declarations'
-import { fetchModelProviderModelList } from '@/service/common'
-import { fetchPluginInfoFromMarketPlace } from '@/service/plugins'
-import type {
-  DebugInfo as DebugInfoTypes,
-  Dependency,
-  GitHubItemAndMarketPlaceDependency,
-  InstallPackageResponse,
-  InstalledLatestVersionResponse,
-  InstalledPluginListResponse,
-  PackageDependency,
-  Permissions,
-  Plugin,
-  PluginDeclaration,
-  PluginDetail,
-  PluginInfoFromMarketPlace,
-  PluginTask,
-  PluginType,
-  PluginsFromMarketplaceByInfoResponse,
-  PluginsFromMarketplaceResponse,
-  VersionInfo,
-  VersionListResponse,
-  uploadGitHubResponse,
-} from '@/app/components/plugins/types'
-import { TaskStatus } from '@/app/components/plugins/types'
-import { PluginType as PluginTypeEnum } from '@/app/components/plugins/types'
-import type {
-  PluginsSearchParams,
-} from '@/app/components/plugins/marketplace/types'
-import { get, getMarketplace, post, postMarketplace } from './base'
-import type { MutateOptions, QueryOptions } from '@tanstack/react-query'
-import {
-  useMutation,
-  useQuery,
-  useQueryClient,
-} from '@tanstack/react-query'
-import { useInvalidateAllBuiltInTools } from './use-tools'
-import usePermission from '@/app/components/plugins/plugin-page/use-permission'
-import { uninstallPlugin } from '@/service/plugins'
-import useRefreshPluginList from '@/app/components/plugins/install-plugin/hooks/use-refresh-plugin-list'
-import { cloneDeep } from 'lodash-es'
-
-const NAME_SPACE = 'plugins'
-
-const useInstalledPluginListKey = [NAME_SPACE, 'installedPluginList']
-export const useCheckInstalled = ({
-  pluginIds,
-  enabled,
-}: {
-  pluginIds: string[],
-  enabled: boolean
-}) => {
-  return useQuery<{ plugins: PluginDetail[] }>({
-    queryKey: [NAME_SPACE, 'checkInstalled', pluginIds],
-    queryFn: () => post<{ plugins: PluginDetail[] }>('/workspaces/current/plugin/list/installations/ids', {
-      body: {
-        plugin_ids: pluginIds,
-      },
-    }),
-    enabled,
-    staleTime: 0, // always fresh
-  })
-}
-
-export const useInstalledPluginList = (disable?: boolean) => {
-  return useQuery<InstalledPluginListResponse>({
-    queryKey: useInstalledPluginListKey,
-    queryFn: () => get<InstalledPluginListResponse>('/workspaces/current/plugin/list'),
-    enabled: !disable,
-    initialData: !disable ? undefined : { plugins: [] },
-  })
-}
-
-export const useInstalledLatestVersion = (pluginIds: string[]) => {
-  return useQuery<InstalledLatestVersionResponse>({
-    queryKey: [NAME_SPACE, 'installedLatestVersion', pluginIds],
-    queryFn: () => post<InstalledLatestVersionResponse>('/workspaces/current/plugin/list/latest-versions', {
-      body: {
-        plugin_ids: pluginIds,
-      },
-    }),
-    enabled: !!pluginIds.length,
-    initialData: pluginIds.length ? undefined : { versions: {} },
-  })
-}
-
-export const useInvalidateInstalledPluginList = () => {
-  const queryClient = useQueryClient()
-  const invalidateAllBuiltInTools = useInvalidateAllBuiltInTools()
-  return () => {
-    queryClient.invalidateQueries(
-      {
-        queryKey: useInstalledPluginListKey,
-      })
-    invalidateAllBuiltInTools()
-  }
-}
-
-export const useInstallPackageFromMarketPlace = (options?: MutateOptions<InstallPackageResponse, Error, string>) => {
-  return useMutation({
-    ...options,
-    mutationFn: (uniqueIdentifier: string) => {
-      return post<InstallPackageResponse>('/workspaces/current/plugin/install/marketplace', { body: { plugin_unique_identifiers: [uniqueIdentifier] } })
-    },
-  })
-}
-
-export const useUpdatePackageFromMarketPlace = (options?: MutateOptions<InstallPackageResponse, Error, object>) => {
-  return useMutation({
-    ...options,
-    mutationFn: (body: object) => {
-      return post<InstallPackageResponse>('/workspaces/current/plugin/upgrade/marketplace', {
-        body,
-      })
-    },
-  })
-}
-
-export const usePluginDeclarationFromMarketPlace = (pluginUniqueIdentifier: string) => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'pluginDeclaration', pluginUniqueIdentifier],
-    queryFn: () => get<{ manifest: PluginDeclaration }>('/workspaces/current/plugin/marketplace/pkg', { params: { plugin_unique_identifier: pluginUniqueIdentifier } }),
-    enabled: !!pluginUniqueIdentifier,
-  })
-}
-
-export const useVersionListOfPlugin = (pluginID: string) => {
-  return useQuery<{ data: VersionListResponse }>({
-    enabled: !!pluginID,
-    queryKey: [NAME_SPACE, 'versions', pluginID],
-    queryFn: () => getMarketplace<{ data: VersionListResponse }>(`/plugins/${pluginID}/versions`, { params: { page: 1, page_size: 100 } }),
-  })
-}
-export const useInvalidateVersionListOfPlugin = () => {
-  const queryClient = useQueryClient()
-  return (pluginID: string) => {
-    queryClient.invalidateQueries({ queryKey: [NAME_SPACE, 'versions', pluginID] })
-  }
-}
-
-export const useInstallPackageFromLocal = () => {
-  return useMutation({
-    mutationFn: (uniqueIdentifier: string) => {
-      return post<InstallPackageResponse>('/workspaces/current/plugin/install/pkg', {
-        body: { plugin_unique_identifiers: [uniqueIdentifier] },
-      })
-    },
-  })
-}
-
-export const useInstallPackageFromGitHub = () => {
-  return useMutation({
-    mutationFn: ({ repoUrl, selectedVersion, selectedPackage, uniqueIdentifier }: {
-      repoUrl: string
-      selectedVersion: string
-      selectedPackage: string
-      uniqueIdentifier: string
-    }) => {
-      return post<InstallPackageResponse>('/workspaces/current/plugin/install/github', {
-        body: {
-          repo: repoUrl,
-          version: selectedVersion,
-          package: selectedPackage,
-          plugin_unique_identifier: uniqueIdentifier,
-        },
-      })
-    },
-  })
-}
-
-export const useUploadGitHub = (payload: {
-  repo: string
-  version: string
-  package: string
-}) => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'uploadGitHub', payload],
-    queryFn: () => post<uploadGitHubResponse>('/workspaces/current/plugin/upload/github', {
-      body: payload,
-    }),
-    retry: 0,
-  })
-}
-
-export const useInstallOrUpdate = ({
-  onSuccess,
-}: {
-  onSuccess?: (res: { success: boolean }[]) => void
-}) => {
-  const { mutateAsync: updatePackageFromMarketPlace } = useUpdatePackageFromMarketPlace()
-
-  return useMutation({
-    mutationFn: (data: {
-      payload: Dependency[],
-      plugin: Plugin[],
-      installedInfo: Record<string, VersionInfo>
-    }) => {
-      const { payload, plugin, installedInfo } = data
-
-      return Promise.all(payload.map(async (item, i) => {
-        try {
-          const orgAndName = `${plugin[i]?.org || plugin[i]?.author}/${plugin[i]?.name}`
-          const installedPayload = installedInfo[orgAndName]
-          const isInstalled = !!installedPayload
-          let uniqueIdentifier = ''
-
-          if (item.type === 'github') {
-            const data = item as GitHubItemAndMarketPlaceDependency
-            // From local bundle don't have data.value.github_plugin_unique_identifier
-            uniqueIdentifier = data.value.github_plugin_unique_identifier!
-            if (!uniqueIdentifier) {
-              const { unique_identifier } = await post<uploadGitHubResponse>('/workspaces/current/plugin/upload/github', {
-                body: {
-                  repo: data.value.repo!,
-                  version: data.value.release! || data.value.version!,
-                  package: data.value.packages! || data.value.package!,
-                },
-              })
-              uniqueIdentifier = data.value.github_plugin_unique_identifier! || unique_identifier
-              // has the same version, but not installed
-              if (uniqueIdentifier === installedPayload?.uniqueIdentifier) {
-                return {
-                  success: true,
-                }
-              }
-            }
-            if (!isInstalled) {
-              await post<InstallPackageResponse>('/workspaces/current/plugin/install/github', {
-                body: {
-                  repo: data.value.repo!,
-                  version: data.value.release! || data.value.version!,
-                  package: data.value.packages! || data.value.package!,
-                  plugin_unique_identifier: uniqueIdentifier,
-                },
-              })
-            }
-          }
-          if (item.type === 'marketplace') {
-            const data = item as GitHubItemAndMarketPlaceDependency
-            uniqueIdentifier = data.value.marketplace_plugin_unique_identifier! || plugin[i]?.plugin_id
-            if (uniqueIdentifier === installedPayload?.uniqueIdentifier) {
-              return {
-                success: true,
-              }
-            }
-            if (!isInstalled) {
-              await post<InstallPackageResponse>('/workspaces/current/plugin/install/marketplace', {
-                body: {
-                  plugin_unique_identifiers: [uniqueIdentifier],
-                },
-              })
-            }
-          }
-          if (item.type === 'package') {
-            const data = item as PackageDependency
-            uniqueIdentifier = data.value.unique_identifier
-            if (uniqueIdentifier === installedPayload?.uniqueIdentifier) {
-              return {
-                success: true,
-              }
-            }
-            if (!isInstalled) {
-              await post<InstallPackageResponse>('/workspaces/current/plugin/install/pkg', {
-                body: {
-                  plugin_unique_identifiers: [uniqueIdentifier],
-                },
-              })
-            }
-          }
-          if (isInstalled) {
-            if (item.type === 'package') {
-              await uninstallPlugin(installedPayload.installedId)
-              await post<InstallPackageResponse>('/workspaces/current/plugin/install/pkg', {
-                body: {
-                  plugin_unique_identifiers: [uniqueIdentifier],
-                },
-              })
-            }
-            else {
-              await updatePackageFromMarketPlace({
-                original_plugin_unique_identifier: installedPayload?.uniqueIdentifier,
-                new_plugin_unique_identifier: uniqueIdentifier,
-              })
-            }
-          }
-          return ({ success: true })
-        }
-        // eslint-disable-next-line unused-imports/no-unused-vars
-        catch (e) {
-          return Promise.resolve({ success: false })
-        }
-      }))
-    },
-    onSuccess,
-  })
-}
-
-export const useDebugKey = () => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'debugKey'],
-    queryFn: () => get<DebugInfoTypes>('/workspaces/current/plugin/debugging-key'),
-  })
-}
-
-const usePermissionsKey = [NAME_SPACE, 'permissions']
-export const usePermissions = () => {
-  return useQuery({
-    queryKey: usePermissionsKey,
-    queryFn: () => get<Permissions>('/workspaces/current/plugin/permission/fetch'),
-  })
-}
-
-export const useInvalidatePermissions = () => {
-  const queryClient = useQueryClient()
-  return () => {
-    queryClient.invalidateQueries(
-      {
-        queryKey: usePermissionsKey,
-      })
-  }
-}
-
-export const useMutationPermissions = ({
-  onSuccess,
-}: {
-  onSuccess?: () => void
-}) => {
-  return useMutation({
-    mutationFn: (payload: Permissions) => {
-      return post('/workspaces/current/plugin/permission/change', { body: payload })
-    },
-    onSuccess,
-  })
-}
-
-export const useMutationPluginsFromMarketplace = () => {
-  return useMutation({
-    mutationFn: (pluginsSearchParams: PluginsSearchParams) => {
-      const {
-        query,
-        sortBy,
-        sortOrder,
-        category,
-        tags,
-        exclude,
-        type,
-        page = 1,
-        pageSize = 40,
-      } = pluginsSearchParams
-      const pluginOrBundle = type === 'bundle' ? 'bundles' : 'plugins'
-      return postMarketplace<{ data: PluginsFromMarketplaceResponse }>(`/${pluginOrBundle}/search/advanced`, {
-        body: {
-          page,
-          page_size: pageSize,
-          query,
-          sort_by: sortBy,
-          sort_order: sortOrder,
-          category: category !== 'all' ? category : '',
-          tags,
-          exclude,
-          type,
-        },
-      })
-    },
-  })
-}
-
-export const useFetchPluginsInMarketPlaceByIds = (unique_identifiers: string[], options?: QueryOptions<{ data: PluginsFromMarketplaceResponse }>) => {
-  return useQuery({
-    ...options,
-    queryKey: [NAME_SPACE, 'fetchPluginsInMarketPlaceByIds', unique_identifiers],
-    queryFn: () => postMarketplace<{ data: PluginsFromMarketplaceResponse }>('/plugins/identifier/batch', {
-      body: {
-        unique_identifiers,
-      },
-    }),
-    enabled: unique_identifiers?.filter(i => !!i).length > 0,
-    retry: 0,
-  })
-}
-
-export const useFetchPluginsInMarketPlaceByInfo = (infos: Record<string, any>[]) => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'fetchPluginsInMarketPlaceByInfo', infos],
-    queryFn: () => postMarketplace<{ data: PluginsFromMarketplaceByInfoResponse }>('/plugins/versions/batch', {
-      body: {
-        plugin_tuples: infos.map(info => ({
-          org: info.organization,
-          name: info.plugin,
-          version: info.version,
-        })),
-      },
-    }),
-    enabled: infos?.filter(i => !!i).length > 0,
-    retry: 0,
-  })
-}
-
-const usePluginTaskListKey = [NAME_SPACE, 'pluginTaskList']
-export const usePluginTaskList = (category?: PluginType) => {
-  const {
-    canManagement,
-  } = usePermission()
-  const { refreshPluginList } = useRefreshPluginList()
-  const {
-    data,
-    isFetched,
-    isRefetching,
-    refetch,
-    ...rest
-  } = useQuery({
-    enabled: canManagement,
-    queryKey: usePluginTaskListKey,
-    queryFn: () => get<{ tasks: PluginTask[] }>('/workspaces/current/plugin/tasks?page=1&page_size=100'),
-    refetchInterval: (lastQuery) => {
-      const lastData = lastQuery.state.data
-      const taskDone = lastData?.tasks.every(task => task.status === TaskStatus.success || task.status === TaskStatus.failed)
-      return taskDone ? false : 5000
-    },
-  })
-
-  useEffect(() => {
-    // After first fetch, refresh plugin list each time all tasks are done
-    if (!isRefetching) {
-      const lastData = cloneDeep(data)
-      const taskDone = lastData?.tasks.every(task => task.status === TaskStatus.success || task.status === TaskStatus.failed)
-      const taskAllFailed = lastData?.tasks.every(task => task.status === TaskStatus.failed)
-      if (taskDone) {
-        if (lastData?.tasks.length && !taskAllFailed)
-          refreshPluginList(category ? { category } as any : undefined, !category)
-      }
-    }
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [isRefetching])
-
-  const handleRefetch = useCallback(() => {
-    refetch()
-  }, [refetch])
-
-  return {
-    data,
-    pluginTasks: data?.tasks || [],
-    isFetched,
-    handleRefetch,
-    ...rest,
-  }
-}
-
-export const useMutationClearTaskPlugin = () => {
-  return useMutation({
-    mutationFn: ({ taskId, pluginId }: { taskId: string; pluginId: string }) => {
-      return post<{ success: boolean }>(`/workspaces/current/plugin/tasks/${taskId}/delete/${pluginId}`)
-    },
-  })
-}
-
-export const useMutationClearAllTaskPlugin = () => {
-  return useMutation({
-    mutationFn: () => {
-      return post<{ success: boolean }>('/workspaces/current/plugin/tasks/delete_all')
-    },
-  })
-}
-
-export const usePluginManifestInfo = (pluginUID: string) => {
-  return useQuery({
-    enabled: !!pluginUID,
-    queryKey: [[NAME_SPACE, 'manifest', pluginUID]],
-    queryFn: () => getMarketplace<{ data: { plugin: PluginInfoFromMarketPlace, version: { version: string } } }>(`/plugins/${pluginUID}`),
-    retry: 0,
-  })
-}
-
-export const useDownloadPlugin = (info: { organization: string; pluginName: string; version: string }, needDownload: boolean) => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'downloadPlugin', info],
-    queryFn: () => getMarketplace<Blob>(`/plugins/${info.organization}/${info.pluginName}/${info.version}/download`),
-    enabled: needDownload,
-    retry: 0,
-  })
-}
-
-export const useMutationCheckDependencies = () => {
-  return useMutation({
-    mutationFn: (appId: string) => {
-      return get<{ leaked_dependencies: Dependency[] }>(`/apps/imports/${appId}/check-dependencies`)
-    },
-  })
-}
-
-export const useModelInList = (currentProvider?: ModelProvider, modelId?: string) => {
-  return useQuery({
-    queryKey: ['modelInList', currentProvider?.provider, modelId],
-    queryFn: async () => {
-      if (!modelId || !currentProvider) return false
-      try {
-        const modelsData = await fetchModelProviderModelList(`/workspaces/current/model-providers/${currentProvider?.provider}/models`)
-        return !!modelId && !!modelsData.data.find(item => item.model === modelId)
-      }
-      catch {
-        return false
-      }
-    },
-    enabled: !!modelId && !!currentProvider,
-  })
-}
-
-export const usePluginInfo = (providerName?: string) => {
-  return useQuery({
-    queryKey: ['pluginInfo', providerName],
-    queryFn: async () => {
-      if (!providerName) return null
-      const parts = providerName.split('/')
-      const org = parts[0]
-      const name = parts[1]
-      try {
-        const response = await fetchPluginInfoFromMarketPlace({ org, name })
-        return response.data.plugin.category === PluginTypeEnum.model ? response.data.plugin : null
-      }
-      catch {
-        return null
-      }
-    },
-    enabled: !!providerName,
-  })
-}
diff --git a/service/use-strategy.ts b/service/use-strategy.ts
deleted file mode 100644
index af591ac..0000000
--- a/service/use-strategy.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import type {
-  StrategyPluginDetail,
-} from '@/app/components/plugins/types'
-import { useInvalid } from './use-base'
-import type { QueryOptions } from '@tanstack/react-query'
-import {
-  useQuery,
-} from '@tanstack/react-query'
-import { fetchStrategyDetail, fetchStrategyList } from './strategy'
-
-const NAME_SPACE = 'agent_strategy'
-
-const useStrategyListKey = [NAME_SPACE, 'strategyList']
-export const useStrategyProviders = () => {
-  return useQuery<StrategyPluginDetail[]>({
-    queryKey: useStrategyListKey,
-    queryFn: fetchStrategyList,
-  })
-}
-
-export const useInvalidateStrategyProviders = () => {
-  return useInvalid(useStrategyListKey)
-}
-
-export const useStrategyProviderDetail = (agentProvider: string, options?: QueryOptions<StrategyPluginDetail>) => {
-  return useQuery<StrategyPluginDetail>({
-    ...options,
-    queryKey: [NAME_SPACE, 'detail', agentProvider],
-    queryFn: () => fetchStrategyDetail(agentProvider),
-    enabled: !!agentProvider,
-  })
-}
-
-export const useInvalidateStrategyProviderDetail = (agentProvider: string) => {
-  return useInvalid([NAME_SPACE, 'detail', agentProvider])
-}
diff --git a/service/use-tools.ts b/service/use-tools.ts
deleted file mode 100644
index ceaa4b1..0000000
--- a/service/use-tools.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-import { get, post } from './base'
-import type {
-  Collection,
-  Tool,
-} from '@/app/components/tools/types'
-import type { ToolWithProvider } from '@/app/components/workflow/types'
-import { useInvalid } from './use-base'
-import {
-  useMutation,
-  useQuery,
-  useQueryClient,
-} from '@tanstack/react-query'
-
-const NAME_SPACE = 'tools'
-
-const useAllToolProvidersKey = [NAME_SPACE, 'allToolProviders']
-export const useAllToolProviders = () => {
-  return useQuery<Collection[]>({
-    queryKey: useAllToolProvidersKey,
-    queryFn: () => get<Collection[]>('/workspaces/current/tool-providers'),
-  })
-}
-
-export const useInvalidateAllToolProviders = () => {
-  return useInvalid(useAllToolProvidersKey)
-}
-
-const useAllBuiltInToolsKey = [NAME_SPACE, 'builtIn']
-export const useAllBuiltInTools = () => {
-  return useQuery<ToolWithProvider[]>({
-    queryKey: useAllBuiltInToolsKey,
-    queryFn: () => get<ToolWithProvider[]>('/workspaces/current/tools/builtin'),
-  })
-}
-
-export const useInvalidateAllBuiltInTools = () => {
-  return useInvalid(useAllBuiltInToolsKey)
-}
-
-const useAllCustomToolsKey = [NAME_SPACE, 'customTools']
-export const useAllCustomTools = () => {
-  return useQuery<ToolWithProvider[]>({
-    queryKey: useAllCustomToolsKey,
-    queryFn: () => get<ToolWithProvider[]>('/workspaces/current/tools/api'),
-  })
-}
-
-export const useInvalidateAllCustomTools = () => {
-  return useInvalid(useAllCustomToolsKey)
-}
-
-const useAllWorkflowToolsKey = [NAME_SPACE, 'workflowTools']
-export const useAllWorkflowTools = () => {
-  return useQuery<ToolWithProvider[]>({
-    queryKey: useAllWorkflowToolsKey,
-    queryFn: () => get<ToolWithProvider[]>('/workspaces/current/tools/workflow'),
-  })
-}
-
-export const useInvalidateAllWorkflowTools = () => {
-  return useInvalid(useAllWorkflowToolsKey)
-}
-
-export const useBuiltinProviderInfo = (providerName: string) => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'builtin-provider-info', providerName],
-    queryFn: () => get<Collection>(`/workspaces/current/tool-provider/builtin/${providerName}/info`),
-  })
-}
-
-export const useInvalidateBuiltinProviderInfo = () => {
-  const queryClient = useQueryClient()
-  return (providerName: string) => {
-    queryClient.invalidateQueries(
-      {
-        queryKey: [NAME_SPACE, 'builtin-provider-info', providerName],
-      })
-  }
-}
-
-export const useBuiltinTools = (providerName: string) => {
-  return useQuery({
-    queryKey: [NAME_SPACE, 'builtin-provider-tools', providerName],
-    queryFn: () => get<Tool[]>(`/workspaces/current/tool-provider/builtin/${providerName}/tools`),
-  })
-}
-
-export const useUpdateProviderCredentials = ({
-  onSuccess,
-}: {
-  onSuccess?: () => void
-}) => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'update-provider-credentials'],
-    mutationFn: (payload: { providerName: string, credentials: Record<string, any> }) => {
-      const { providerName, credentials } = payload
-      return post(`/workspaces/current/tool-provider/builtin/${providerName}/update`, {
-        body: {
-          credentials,
-        },
-      })
-    },
-    onSuccess,
-  })
-}
-
-export const useRemoveProviderCredentials = ({
-  onSuccess,
-}: {
-  onSuccess?: () => void
-}) => {
-  return useMutation({
-    mutationKey: [NAME_SPACE, 'remove-provider-credentials'],
-    mutationFn: (providerName: string) => {
-      return post(`/workspaces/current/tool-provider/builtin/${providerName}/delete`, {
-        body: {},
-      })
-    },
-    onSuccess,
-  })
-}
diff --git a/tailwind-common-config.ts b/tailwind-common-config.ts
deleted file mode 100644
index 3f64afc..0000000
--- a/tailwind-common-config.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-import tailwindThemeVarDefine from './themes/tailwind-theme-var-define'
-
-const config = {
-  theme: {
-    typography: require('./typography'),
-    extend: {
-      colors: {
-        gray: {
-          25: '#fcfcfd',
-          50: '#f9fafb',
-          100: '#f2f4f7',
-          200: '#eaecf0',
-          300: '#d0d5dd',
-          400: '#98a2b3',
-          500: '#667085',
-          700: '#475467',
-          600: '#344054',
-          800: '#1d2939',
-          900: '#101828',
-        },
-        primary: {
-          25: '#f5f8ff',
-          50: '#eff4ff',
-          100: '#d1e0ff',
-          200: '#b2ccff',
-          300: '#84adff',
-          400: '#528bff',
-          500: '#2970ff',
-          600: '#155eef',
-          700: '#004eeb',
-          800: '#0040c1',
-          900: '#00359e',
-        },
-        blue: {
-          500: '#E1EFFE',
-        },
-        green: {
-          50: '#F3FAF7',
-          100: '#DEF7EC',
-          800: '#03543F',
-
-        },
-        yellow: {
-          100: '#FDF6B2',
-          800: '#723B13',
-        },
-        purple: {
-          50: '#F6F5FF',
-          200: '#DCD7FE',
-        },
-        indigo: {
-          25: '#F5F8FF',
-          50: '#EEF4FF',
-          100: '#E0EAFF',
-          300: '#A4BCFD',
-          400: '#8098F9',
-          600: '#444CE7',
-          800: '#2D31A6',
-        },
-        ...tailwindThemeVarDefine,
-      },
-      screens: {
-        'mobile': '100px',
-        // => @media (min-width: 100px) { ... }
-        'tablet': '640px', // 391
-        // => @media (min-width: 600px) { ... }
-        'pc': '769px',
-        // => @media (min-width: 769px) { ... }
-        '2k': '2560px',
-      },
-      boxShadow: {
-        'xs': '0px 1px 2px 0px rgba(16, 24, 40, 0.05)',
-        'sm': '0px 1px 2px 0px rgba(16, 24, 40, 0.06), 0px 1px 3px 0px rgba(16, 24, 40, 0.10)',
-        'md': '0px 2px 4px -2px rgba(16, 24, 40, 0.06), 0px 4px 8px -2px rgba(16, 24, 40, 0.10)',
-        'lg': '0px 4px 6px -2px rgba(16, 24, 40, 0.03), 0px 12px 16px -4px rgba(16, 24, 40, 0.08)',
-        'xl': '0px 8px 8px -4px rgba(16, 24, 40, 0.03), 0px 20px 24px -4px rgba(16, 24, 40, 0.08)',
-        '2xl': '0px 24px 48px -12px rgba(16, 24, 40, 0.18)',
-        '3xl': '0px 32px 64px -12px rgba(16, 24, 40, 0.14)',
-        'status-indicator-green-shadow': '0px 2px 6px 0px var(--color-components-badge-status-light-success-halo), 0px 0px 0px 1px var(--color-components-badge-status-light-border-outer)',
-        'status-indicator-warning-shadow': '0px 2px 6px 0px var(--color-components-badge-status-light-warning-halo), 0px 0px 0px 1px var(--color-components-badge-status-light-border-outer)',
-        'status-indicator-red-shadow': '0px 2px 6px 0px var(--color-components-badge-status-light-error-halo), 0px 0px 0px 1px var(--color-components-badge-status-light-border-outer)',
-        'status-indicator-blue-shadow': '0px 2px 6px 0px var(--color-components-badge-status-light-normal-halo), 0px 0px 0px 1px var(--color-components-badge-status-light-border-outer)',
-        'status-indicator-gray-shadow': '0px 1px 2px 0px var(--color-components-badge-status-light-disabled-halo), 0px 0px 0px 1px var(--color-components-badge-status-light-border-outer)',
-      },
-      opacity: {
-        2: '0.02',
-        8: '0.08',
-      },
-      fontSize: {
-        '2xs': '0.625rem',
-      },
-      backgroundImage: {
-        'chatbot-bg': 'var(--color-chatbot-bg)',
-        'chat-bubble-bg': 'var(--color-chat-bubble-bg)',
-        'chat-input-mask': 'var(--color-chat-input-mask)',
-        'workflow-process-bg': 'var(--color-workflow-process-bg)',
-        'workflow-run-failed-bg': 'var(--color-workflow-run-failed-bg)',
-        'workflow-batch-failed-bg': 'var(--color-workflow-batch-failed-bg)',
-        'mask-top2bottom-gray-50-to-transparent': 'var(--mask-top2bottom-gray-50-to-transparent)',
-        'marketplace-divider-bg': 'var(--color-marketplace-divider-bg)',
-        'marketplace-plugin-empty': 'var(--color-marketplace-plugin-empty)',
-        'toast-success-bg': 'var(--color-toast-success-bg)',
-        'toast-warning-bg': 'var(--color-toast-warning-bg)',
-        'toast-error-bg': 'var(--color-toast-error-bg)',
-        'toast-info-bg': 'var(--color-toast-info-bg)',
-        'app-detail-bg': 'var(--color-app-detail-bg)',
-        'app-detail-overlay-bg': 'var(--color-app-detail-overlay-bg)',
-        'dataset-chunk-process-success-bg': 'var(--color-dataset-chunk-process-success-bg)',
-        'dataset-chunk-process-error-bg': 'var(--color-dataset-chunk-process-error-bg)',
-        'dataset-chunk-detail-card-hover-bg': 'var(--color-dataset-chunk-detail-card-hover-bg)',
-        'dataset-child-chunk-expand-btn-bg': 'var(--color-dataset-child-chunk-expand-btn-bg)',
-        'dataset-option-card-blue-gradient': 'var(--color-dataset-option-card-blue-gradient)',
-        'dataset-option-card-purple-gradient': 'var(--color-dataset-option-card-purple-gradient)',
-        'dataset-option-card-orange-gradient': 'var(--color-dataset-option-card-orange-gradient)',
-        'dataset-chunk-list-mask-bg': 'var(--color-dataset-chunk-list-mask-bg)',
-        'line-divider-bg': 'var(--color-line-divider-bg)',
-        'dataset-warning-message-bg': 'var(--color-dataset-warning-message-bg)',
-        'price-premium-badge-background': 'var(--color-premium-badge-background)',
-        'premium-yearly-tip-text-background': 'var(--color-premium-yearly-tip-text-background)',
-        'price-premium-text-background': 'var(--color-premium-text-background)',
-        'price-enterprise-background': 'var(--color-price-enterprise-background)',
-        'grid-mask-background': 'var(--color-grid-mask-background)',
-      },
-      animation: {
-        'spin-slow': 'spin 2s linear infinite',
-      },
-    },
-  },
-  plugins: [
-    require('@tailwindcss/typography'),
-  ],
-  // https://github.com/tailwindlabs/tailwindcss/discussions/5969
-  corePlugins: {
-    preflight: false,
-  },
-}
-
-export default config
diff --git a/themes/markdown-dark.css b/themes/markdown-dark.css
deleted file mode 100644
index 3dc4728..0000000
--- a/themes/markdown-dark.css
+++ /dev/null
@@ -1,44 +0,0 @@
-html[data-theme="dark"] {
-    --color-prettylights-syntax-comment: #6e7781;
-    --color-prettylights-syntax-constant: #0550ae;
-    --color-prettylights-syntax-entity: #8250df;
-    --color-prettylights-syntax-storage-modifier-import: #24292f;
-    --color-prettylights-syntax-entity-tag: #116329;
-    --color-prettylights-syntax-keyword: #cf222e;
-    --color-prettylights-syntax-string: #0a3069;
-    --color-prettylights-syntax-variable: #953800;
-    --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
-    --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
-    --color-prettylights-syntax-invalid-illegal-bg: #82071e;
-    --color-prettylights-syntax-carriage-return-text: #f6f8fa;
-    --color-prettylights-syntax-carriage-return-bg: #cf222e;
-    --color-prettylights-syntax-string-regexp: #116329;
-    --color-prettylights-syntax-markup-list: #3b2300;
-    --color-prettylights-syntax-markup-heading: #0550ae;
-    --color-prettylights-syntax-markup-italic: #24292f;
-    --color-prettylights-syntax-markup-bold: #24292f;
-    --color-prettylights-syntax-markup-deleted-text: #82071e;
-    --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
-    --color-prettylights-syntax-markup-inserted-text: #116329;
-    --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
-    --color-prettylights-syntax-markup-changed-text: #953800;
-    --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
-    --color-prettylights-syntax-markup-ignored-text: #eaeef2;
-    --color-prettylights-syntax-markup-ignored-bg: #0550ae;
-    --color-prettylights-syntax-meta-diff-range: #8250df;
-    --color-prettylights-syntax-brackethighlighter-angle: #57606a;
-    --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
-    --color-prettylights-syntax-constant-other-reference-link: #0a3069;
-    --color-fg-default: #24292f;
-    --color-fg-muted: #57606a;
-    --color-fg-subtle: #6e7781;
-    --color-canvas-default: transparent;
-    --color-canvas-subtle: #f6f8fa;
-    --color-border-default: #d0d7de;
-    --color-border-muted: hsla(210, 18%, 87%, 1);
-    --color-neutral-muted: rgba(175, 184, 193, 0.2);
-    --color-accent-fg: #0969da;
-    --color-accent-emphasis: #0969da;
-    --color-attention-subtle: #fff8c5;
-    --color-danger-fg: #cf222e;
-  }
diff --git a/themes/markdown-light.css b/themes/markdown-light.css
deleted file mode 100644
index 7399325..0000000
--- a/themes/markdown-light.css
+++ /dev/null
@@ -1,44 +0,0 @@
-html[data-theme="light"] {
-    --color-prettylights-syntax-comment: #6e7781;
-    --color-prettylights-syntax-constant: #0550ae;
-    --color-prettylights-syntax-entity: #8250df;
-    --color-prettylights-syntax-storage-modifier-import: #24292f;
-    --color-prettylights-syntax-entity-tag: #116329;
-    --color-prettylights-syntax-keyword: #cf222e;
-    --color-prettylights-syntax-string: #0a3069;
-    --color-prettylights-syntax-variable: #953800;
-    --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
-    --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
-    --color-prettylights-syntax-invalid-illegal-bg: #82071e;
-    --color-prettylights-syntax-carriage-return-text: #f6f8fa;
-    --color-prettylights-syntax-carriage-return-bg: #cf222e;
-    --color-prettylights-syntax-string-regexp: #116329;
-    --color-prettylights-syntax-markup-list: #3b2300;
-    --color-prettylights-syntax-markup-heading: #0550ae;
-    --color-prettylights-syntax-markup-italic: #24292f;
-    --color-prettylights-syntax-markup-bold: #24292f;
-    --color-prettylights-syntax-markup-deleted-text: #82071e;
-    --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
-    --color-prettylights-syntax-markup-inserted-text: #116329;
-    --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
-    --color-prettylights-syntax-markup-changed-text: #953800;
-    --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
-    --color-prettylights-syntax-markup-ignored-text: #eaeef2;
-    --color-prettylights-syntax-markup-ignored-bg: #0550ae;
-    --color-prettylights-syntax-meta-diff-range: #8250df;
-    --color-prettylights-syntax-brackethighlighter-angle: #57606a;
-    --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
-    --color-prettylights-syntax-constant-other-reference-link: #0a3069;
-    --color-fg-default: #24292f;
-    --color-fg-muted: #57606a;
-    --color-fg-subtle: #6e7781;
-    --color-canvas-default: transparent;
-    --color-canvas-subtle: #f6f8fa;
-    --color-border-default: #d0d7de;
-    --color-border-muted: hsla(210, 18%, 87%, 1);
-    --color-neutral-muted: rgba(175, 184, 193, 0.2);
-    --color-accent-fg: #0969da;
-    --color-accent-emphasis: #0969da;
-    --color-attention-subtle: #fff8c5;
-    --color-danger-fg: #cf222e;
-  }
diff --git a/utils/get-icon.ts b/utils/get-icon.ts
deleted file mode 100644
index f2ed116..0000000
--- a/utils/get-icon.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { MARKETPLACE_API_PREFIX } from '@/config'
-
-export const getIconFromMarketPlace = (plugin_id: string) => {
-  return `${MARKETPLACE_API_PREFIX}/plugins/${plugin_id}/icon`
-}
diff --git a/utils/index.spec.ts b/utils/index.spec.ts
deleted file mode 100644
index 21a0d80..0000000
--- a/utils/index.spec.ts
+++ /dev/null
@@ -1,295 +0,0 @@
-import {
-  asyncRunSafe,
-  canFindTool,
-  correctModelProvider,
-  correctToolProvider,
-  fetchWithRetry,
-  getPurifyHref,
-  getTextWidthWithCanvas,
-  randomString,
-  removeSpecificQueryParam,
-  sleep,
-} from './index'
-
-describe('sleep', () => {
-  it('should wait for the specified time', async () => {
-    const timeVariance = 10
-    const sleepTime = 100
-    const start = Date.now()
-    await sleep(sleepTime)
-    const elapsed = Date.now() - start
-    expect(elapsed).toBeGreaterThanOrEqual(sleepTime - timeVariance)
-  })
-})
-
-describe('asyncRunSafe', () => {
-  it('should return [null, result] when promise resolves', async () => {
-    const result = await asyncRunSafe(Promise.resolve('success'))
-    expect(result).toEqual([null, 'success'])
-  })
-
-  it('should return [error] when promise rejects', async () => {
-    const error = new Error('test error')
-    const result = await asyncRunSafe(Promise.reject(error))
-    expect(result).toEqual([error])
-  })
-
-  it('should return [Error] when promise rejects with undefined', async () => {
-    // eslint-disable-next-line prefer-promise-reject-errors
-    const result = await asyncRunSafe(Promise.reject())
-    expect(result[0]).toBeInstanceOf(Error)
-    expect(result[0]?.message).toBe('unknown error')
-  })
-})
-
-describe('getTextWidthWithCanvas', () => {
-  let originalCreateElement: typeof document.createElement
-
-  beforeEach(() => {
-    // Store original implementation
-    originalCreateElement = document.createElement
-
-    // Mock canvas and context
-    const measureTextMock = jest.fn().mockReturnValue({ width: 100 })
-    const getContextMock = jest.fn().mockReturnValue({
-      measureText: measureTextMock,
-      font: '',
-    })
-
-    document.createElement = jest.fn().mockReturnValue({
-      getContext: getContextMock,
-    })
-  })
-
-  afterEach(() => {
-    // Restore original implementation
-    document.createElement = originalCreateElement
-  })
-
-  it('should return the width of text', () => {
-    const width = getTextWidthWithCanvas('test text')
-    expect(width).toBe(100)
-  })
-
-  it('should return 0 if context is not available', () => {
-    // Override mock for this test
-    document.createElement = jest.fn().mockReturnValue({
-      getContext: () => null,
-    })
-
-    const width = getTextWidthWithCanvas('test text')
-    expect(width).toBe(0)
-  })
-})
-
-describe('randomString', () => {
-  it('should generate string of specified length', () => {
-    const result = randomString(10)
-    expect(result.length).toBe(10)
-  })
-
-  it('should only contain valid characters', () => {
-    const result = randomString(100)
-    const validChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_'
-    for (const char of result)
-      expect(validChars).toContain(char)
-  })
-
-  it('should generate different strings on consecutive calls', () => {
-    const result1 = randomString(20)
-    const result2 = randomString(20)
-    expect(result1).not.toEqual(result2)
-  })
-})
-
-describe('getPurifyHref', () => {
-  it('should return empty string for falsy input', () => {
-    expect(getPurifyHref('')).toBe('')
-    expect(getPurifyHref(undefined as any)).toBe('')
-  })
-
-  it('should escape HTML characters', () => {
-    expect(getPurifyHref('<script>alert("xss")</script>')).not.toContain('<script>')
-  })
-})
-
-describe('fetchWithRetry', () => {
-  it('should return successfully on first try', async () => {
-    const successData = { status: 'success' }
-    const promise = Promise.resolve(successData)
-
-    const result = await fetchWithRetry(promise)
-
-    expect(result).toEqual([null, successData])
-  })
-
-  // it('should retry and succeed on second attempt', async () => {
-  //   let attemptCount = 0
-  //   const mockFn = new Promise((resolve, reject) => {
-  //     attemptCount++
-  //     if (attemptCount === 1)
-  //       reject(new Error('First attempt failed'))
-  //     else
-  //       resolve('success')
-  //   })
-
-  //   const result = await fetchWithRetry(mockFn)
-
-  //   expect(result).toEqual([null, 'success'])
-  //   expect(attemptCount).toBe(2)
-  // })
-
-  // it('should stop after max retries and return last error', async () => {
-  //   const testError = new Error('Test error')
-  //   const promise = Promise.reject(testError)
-
-  //   const result = await fetchWithRetry(promise, 2)
-
-  //   expect(result).toEqual([testError])
-  // })
-
-  // it('should handle non-Error rejection with custom error', async () => {
-  //   const stringError = 'string error message'
-  //   const promise = Promise.reject(stringError)
-
-  //   const result = await fetchWithRetry(promise, 0)
-
-  //   expect(result[0]).toBeInstanceOf(Error)
-  //   expect(result[0]?.message).toBe('unknown error')
-  // })
-
-  // it('should use default 3 retries when retries parameter is not provided', async () => {
-  //   let attempts = 0
-  //   const mockFn = () => new Promise((resolve, reject) => {
-  //     attempts++
-  //     reject(new Error(`Attempt ${attempts} failed`))
-  //   })
-
-  //   await fetchWithRetry(mockFn())
-
-  //   expect(attempts).toBe(4) // Initial attempt + 3 retries
-  // })
-})
-
-describe('correctModelProvider', () => {
-  it('should return empty string for falsy input', () => {
-    expect(correctModelProvider('')).toBe('')
-  })
-
-  it('should return the provider if it already contains a slash', () => {
-    expect(correctModelProvider('company/model')).toBe('company/model')
-  })
-
-  it('should format google provider correctly', () => {
-    expect(correctModelProvider('google')).toBe('langgenius/gemini/google')
-  })
-
-  it('should format standard providers correctly', () => {
-    expect(correctModelProvider('openai')).toBe('langgenius/openai/openai')
-  })
-})
-
-describe('correctToolProvider', () => {
-  it('should return empty string for falsy input', () => {
-    expect(correctToolProvider('')).toBe('')
-  })
-
-  it('should return the provider if toolInCollectionList is true', () => {
-    expect(correctToolProvider('any-provider', true)).toBe('any-provider')
-  })
-
-  it('should return the provider if it already contains a slash', () => {
-    expect(correctToolProvider('company/tool')).toBe('company/tool')
-  })
-
-  it('should format special tool providers correctly', () => {
-    expect(correctToolProvider('stepfun')).toBe('langgenius/stepfun_tool/stepfun')
-    expect(correctToolProvider('jina')).toBe('langgenius/jina_tool/jina')
-  })
-
-  it('should format standard tool providers correctly', () => {
-    expect(correctToolProvider('standard')).toBe('langgenius/standard/standard')
-  })
-})
-
-describe('canFindTool', () => {
-  it('should match when IDs are identical', () => {
-    expect(canFindTool('tool-id', 'tool-id')).toBe(true)
-  })
-
-  it('should match when provider ID is formatted with standard pattern', () => {
-    expect(canFindTool('langgenius/tool-id/tool-id', 'tool-id')).toBe(true)
-  })
-
-  it('should match when provider ID is formatted with tool pattern', () => {
-    expect(canFindTool('langgenius/tool-id_tool/tool-id', 'tool-id')).toBe(true)
-  })
-
-  it('should not match when IDs are completely different', () => {
-    expect(canFindTool('provider-a', 'tool-b')).toBe(false)
-  })
-})
-
-describe('removeSpecificQueryParam', () => {
-  let originalLocation: Location
-  let originalReplaceState: typeof window.history.replaceState
-
-  beforeEach(() => {
-    originalLocation = window.location
-    originalReplaceState = window.history.replaceState
-
-    const mockUrl = new URL('https://example.com?param1=value1&param2=value2&param3=value3')
-
-    // Mock window.location using defineProperty to handle URL properly
-    delete (window as any).location
-    Object.defineProperty(window, 'location', {
-      writable: true,
-      value: {
-        ...originalLocation,
-        href: mockUrl.href,
-        search: mockUrl.search,
-        toString: () => mockUrl.toString(),
-      },
-    })
-
-    window.history.replaceState = jest.fn()
-  })
-
-  afterEach(() => {
-    Object.defineProperty(window, 'location', {
-      writable: true,
-      value: originalLocation,
-    })
-    window.history.replaceState = originalReplaceState
-  })
-
-  it('should remove a single query parameter', () => {
-    removeSpecificQueryParam('param2')
-    expect(window.history.replaceState).toHaveBeenCalledTimes(1)
-    const replaceStateCall = (window.history.replaceState as jest.Mock).mock.calls[0]
-    expect(replaceStateCall[0]).toBe(null)
-    expect(replaceStateCall[1]).toBe('')
-    expect(replaceStateCall[2]).toMatch(/param1=value1/)
-    expect(replaceStateCall[2]).toMatch(/param3=value3/)
-    expect(replaceStateCall[2]).not.toMatch(/param2=value2/)
-  })
-
-  it('should remove multiple query parameters', () => {
-    removeSpecificQueryParam(['param1', 'param3'])
-    expect(window.history.replaceState).toHaveBeenCalledTimes(1)
-    const replaceStateCall = (window.history.replaceState as jest.Mock).mock.calls[0]
-    expect(replaceStateCall[2]).toMatch(/param2=value2/)
-    expect(replaceStateCall[2]).not.toMatch(/param1=value1/)
-    expect(replaceStateCall[2]).not.toMatch(/param3=value3/)
-  })
-
-  it('should handle non-existent parameters gracefully', () => {
-    removeSpecificQueryParam('nonexistent')
-
-    expect(window.history.replaceState).toHaveBeenCalledTimes(1)
-    const replaceStateCall = (window.history.replaceState as jest.Mock).mock.calls[0]
-    expect(replaceStateCall[2]).toMatch(/param1=value1/)
-    expect(replaceStateCall[2]).toMatch(/param2=value2/)
-    expect(replaceStateCall[2]).toMatch(/param3=value3/)
-  })
-})
diff --git a/utils/semver.ts b/utils/semver.ts
deleted file mode 100644
index f1b9eb8..0000000
--- a/utils/semver.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import semver from 'semver'
-
-export const getLatestVersion = (versionList: string[]) => {
-  return semver.rsort(versionList)[0]
-}
-
-export const compareVersion = (v1: string, v2: string) => {
-  return semver.compare(v1, v2)
-}
diff --git a/utils/tool-call.ts b/utils/tool-call.ts
deleted file mode 100644
index 8735cc5..0000000
--- a/utils/tool-call.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { ModelFeatureEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
-
-export const supportFunctionCall = (features: ModelFeatureEnum[] = []): boolean => {
-  if (!features || !features.length) return false
-  return features.some(feature => [ModelFeatureEnum.toolCall, ModelFeatureEnum.multiToolCall, ModelFeatureEnum.streamToolCall].includes(feature))
-}
diff --git a/utils/var-basePath.js b/utils/var-basePath.js
deleted file mode 100644
index 07b7f75..0000000
--- a/utils/var-basePath.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// export basePath to next.config.js
-// same as the one exported from var.ts
-module.exports = {
-  basePath: '',
-  assetPrefix: '',
-}
diff --git a/utils/zod.spec.ts b/utils/zod.spec.ts
deleted file mode 100644
index 4dc711c..0000000
--- a/utils/zod.spec.ts
+++ /dev/null
@@ -1,173 +0,0 @@
-import { ZodError, z } from 'zod'
-
-describe('Zod Features', () => {
-  it('should support string', () => {
-    const stringSchema = z.string()
-    const numberLikeStringSchema = z.coerce.string() // 12 would be converted to '12'
-    const stringSchemaWithError = z.string({
-      required_error: 'Name is required',
-      invalid_type_error: 'Invalid name type, expected string',
-    })
-
-    const urlSchema = z.string().url()
-    const uuidSchema = z.string().uuid()
-
-    expect(stringSchema.parse('hello')).toBe('hello')
-    expect(() => stringSchema.parse(12)).toThrow()
-    expect(numberLikeStringSchema.parse('12')).toBe('12')
-    expect(numberLikeStringSchema.parse(12)).toBe('12')
-    expect(() => stringSchemaWithError.parse(undefined)).toThrow('Name is required')
-    expect(() => stringSchemaWithError.parse(12)).toThrow('Invalid name type, expected string')
-
-    expect(urlSchema.parse('https://dify.ai')).toBe('https://dify.ai')
-    expect(uuidSchema.parse('123e4567-e89b-12d3-a456-426614174000')).toBe('123e4567-e89b-12d3-a456-426614174000')
-  })
-
-  it('should support enum', () => {
-    enum JobStatus {
-      waiting = 'waiting',
-      processing = 'processing',
-      completed = 'completed',
-    }
-    expect(z.nativeEnum(JobStatus).parse(JobStatus.waiting)).toBe(JobStatus.waiting)
-    expect(z.nativeEnum(JobStatus).parse('completed')).toBe('completed')
-    expect(() => z.nativeEnum(JobStatus).parse('invalid')).toThrow()
-  })
-
-  it('should support number', () => {
-    const numberSchema = z.number()
-    const numberWithMin = z.number().gt(0) // alias min
-    const numberWithMinEqual = z.number().gte(0)
-    const numberWithMax = z.number().lt(100) // alias max
-
-    expect(numberSchema.parse(123)).toBe(123)
-    expect(numberWithMin.parse(50)).toBe(50)
-    expect(numberWithMinEqual.parse(0)).toBe(0)
-    expect(() => numberWithMin.parse(-1)).toThrow()
-    expect(numberWithMax.parse(50)).toBe(50)
-    expect(() => numberWithMax.parse(101)).toThrow()
-  })
-
-  it('should support boolean', () => {
-    const booleanSchema = z.boolean()
-    expect(booleanSchema.parse(true)).toBe(true)
-    expect(booleanSchema.parse(false)).toBe(false)
-    expect(() => booleanSchema.parse('true')).toThrow()
-  })
-
-  it('should support date', () => {
-    const dateSchema = z.date()
-    expect(dateSchema.parse(new Date('2023-01-01'))).toEqual(new Date('2023-01-01'))
-  })
-
-  it('should support object', () => {
-    const userSchema = z.object({
-      id: z.union([z.string(), z.number()]),
-      name: z.string(),
-      email: z.string().email(),
-      age: z.number().min(0).max(120).optional(),
-    })
-
-    type User = z.infer<typeof userSchema>
-
-    const validUser: User = {
-      id: 1,
-      name: 'John',
-      email: 'john@example.com',
-      age: 30,
-    }
-
-    expect(userSchema.parse(validUser)).toEqual(validUser)
-  })
-
-  it('should support object optional field', () => {
-    const userSchema = z.object({
-      name: z.string(),
-      optionalField: z.optional(z.string()),
-    })
-    type User = z.infer<typeof userSchema>
-
-    const user: User = {
-      name: 'John',
-    }
-    const userWithOptionalField: User = {
-      name: 'John',
-      optionalField: 'optional',
-    }
-    expect(userSchema.safeParse(user).success).toEqual(true)
-    expect(userSchema.safeParse(userWithOptionalField).success).toEqual(true)
-  })
-
-  it('should support object intersection', () => {
-    const Person = z.object({
-      name: z.string(),
-    })
-
-    const Employee = z.object({
-      role: z.string(),
-    })
-
-    const EmployedPerson = z.intersection(Person, Employee)
-    const validEmployedPerson = {
-      name: 'John',
-      role: 'Developer',
-    }
-    expect(EmployedPerson.parse(validEmployedPerson)).toEqual(validEmployedPerson)
-  })
-
-  it('should support record', () => {
-    const recordSchema = z.record(z.string(), z.number())
-    const validRecord = {
-      a: 1,
-      b: 2,
-    }
-    expect(recordSchema.parse(validRecord)).toEqual(validRecord)
-  })
-
-  it('should support array', () => {
-    const numbersSchema = z.array(z.number())
-    const stringArraySchema = z.string().array()
-
-    expect(numbersSchema.parse([1, 2, 3])).toEqual([1, 2, 3])
-    expect(stringArraySchema.parse(['a', 'b', 'c'])).toEqual(['a', 'b', 'c'])
-  })
-
-  it('should support promise', () => {
-    const promiseSchema = z.promise(z.string())
-    const validPromise = Promise.resolve('success')
-
-    expect(promiseSchema.parse(validPromise)).resolves.toBe('success')
-  })
-
-  it('should support unions', () => {
-    const unionSchema = z.union([z.string(), z.number()])
-
-    expect(unionSchema.parse('success')).toBe('success')
-    expect(unionSchema.parse(404)).toBe(404)
-  })
-
-  it('should support functions', () => {
-    const functionSchema = z.function().args(z.string(), z.number(), z.optional(z.string())).returns(z.number())
-    const validFunction = (name: string, age: number, _optional?: string): number => {
-      return age
-    }
-    expect(functionSchema.safeParse(validFunction).success).toEqual(true)
-  })
-
-  it('should support undefined, null, any, and void', () => {
-    const undefinedSchema = z.undefined()
-    const nullSchema = z.null()
-    const anySchema = z.any()
-
-    expect(undefinedSchema.parse(undefined)).toBeUndefined()
-    expect(nullSchema.parse(null)).toBeNull()
-    expect(anySchema.parse('anything')).toBe('anything')
-    expect(anySchema.parse(3)).toBe(3)
-  })
-
-  it('should safeParse would not throw', () => {
-    expect(z.string().safeParse('abc').success).toBe(true)
-    expect(z.string().safeParse(123).success).toBe(false)
-    expect(z.string().safeParse(123).error).toBeInstanceOf(ZodError)
-  })
-})

--
Gitblit v1.8.0