45个文件已修改
11个文件已添加
2个文件已删除
3082 ■■■■ 已修改文件
apps/taro/config/dev.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/config/prod.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/config/staging.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/packages/components/assets/icon-back-top.png 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/packages/components/assets/icon-free-dian.png 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/app.config.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/app.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/constants/router.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/hooks/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/hooks/lifepay.ts 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/hooks/user.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/pages/mine/index.vue 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/stores/modules/user.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/login/loginByForm/verificationCodeLoginForm.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/my/dashboard/InnerPage.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/my/dashboard/dashboard.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/my/dashboard/dashboard.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/my/shareQrcode/InnerPage.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/my/shareQrcode/shareQrcode.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/my/shareQrcode/shareQrcode.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/recharge/gasBillRecharge/InnerPage.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/utils/blLifeRecharge.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/package.json 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/components/Card/OrderCard.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/index.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/styles/index.scss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/styles/mine.scss 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/GasBillRecharge/GasBillRecharge.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/GasBillRecharge/GasBillRechargeBaseForm.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/GasBillRecharge/GasBillRechargeStep3.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/GasBillRecharge/context.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/Mine/Dashboard.vue 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/Mine/ShareQrcodeView.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/Order/components/ElectricOrder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/Order/components/GasOrder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/Order/components/PhoneOrder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/electricBillRecharge/ElectricBillRechargeBaseForm.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep2.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/electricBillRecharge/context.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/electricBillRecharge/electricBillRecharge.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/userAccount/EditElectricUserAccount.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/userAccount/EditGasUserAccount.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/types/global.d.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/vite.config.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core-vue/src/plugin.ts 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRecharge.ts 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRechargeAccountModel.ts 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRechargeConstants.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRechargeServices.ts 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/listener.ts 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/api/Account.ts 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/api/LifePay.ts 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/api/UserRole.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/api/WxPayNotify.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/api/typings.d.ts 417 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pnpm-lock.yaml 1568 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/config/dev.js
@@ -10,6 +10,7 @@
  },
  defineConstants: {
    OSS_URL: '"https://waterdroptest2.oss-cn-hangzhou.aliyuncs.com/"',
    CLIENT_ORIGIN: '"http://192.168.10.88:10086"',
  },
  mini: {},
  h5: {},
apps/taro/config/prod.js
@@ -12,6 +12,7 @@
  },
  defineConstants: {
    OSS_URL: '"https://parkmanagement.oss-cn-hangzhou.aliyuncs.com"',
    CLIENT_ORIGIN: '"https://jf.81812333.com"',
  },
  mini: {},
  h5: {
apps/taro/config/staging.js
@@ -14,6 +14,7 @@
  },
  defineConstants: {
    OSS_URL: '"https://waterdroptest2.oss-cn-hangzhou.aliyuncs.com/"',
    CLIENT_ORIGIN: '"https://jftest.81812333.com"',
  },
  h5: {
    output: {
apps/taro/package.json
@@ -74,6 +74,7 @@
    "js-base64": "^3.7.5",
    "lodash": "^4.17.21",
    "pinia": "^2.1.6",
    "qrcode.vue": "^3.6.0",
    "qs": "^6.11.1",
    "senin-mini": "^1.0.10",
    "senior-request": "^1.0.3",
apps/taro/packages/components/assets/icon-back-top.png
Binary files differ
apps/taro/packages/components/assets/icon-free-dian.png
Binary files differ
apps/taro/src/app.config.ts
@@ -109,6 +109,10 @@
        'editElectricUserAccount/editElectricUserAccount',
      ],
    },
    {
      root: 'subpackages/my',
      pages: ['shareQrcode/shareQrcode', 'dashboard/dashboard'],
    },
  ],
  // preloadRule: {
  //   'pages/mine/index': {
apps/taro/src/app.ts
@@ -11,7 +11,7 @@
import { VueQueryPlugin, VueQueryPluginOptions } from '@tanstack/vue-query';
import { myClient } from '@/constants/query';
import { VueLifeRechargePlugin } from '@life-payment/core-vue';
import { blLifeRecharge } from '@/utils/blLifeRecharge';
import { blLifeRecharge, LifeRechargeOptions } from '@/utils/blLifeRecharge';
import { isWeChat } from '@/utils/env';
window.uni = Taro;
@@ -93,6 +93,7 @@
App.use(VueLifeRechargePlugin, {
  blLifeRecharge,
  // options: LifeRechargeOptions,
});
export default App;
apps/taro/src/constants/router.ts
@@ -23,4 +23,6 @@
  editGasUserAccount = '/subpackages/userAccount/editGasUserAccount/editGasUserAccount',
  editPhoneUserAccount = '/subpackages/userAccount/editPhoneUserAccount/editPhoneUserAccount',
  editElectricUserAccount = '/subpackages/userAccount/editElectricUserAccount/editElectricUserAccount',
  shareQrcode = '/subpackages/my/shareQrcode/shareQrcode',
  dashboard = '/subpackages/my/dashboard/dashboard',
}
apps/taro/src/hooks/index.ts
@@ -3,3 +3,4 @@
export * from './access';
export * from './login';
export * from './infiniteLoading';
export * from './lifepay';
apps/taro/src/hooks/lifepay.ts
New file
@@ -0,0 +1,62 @@
import { useQuery } from '@tanstack/vue-query';
import { useLifeRechargeContext, CreateEditPayChannelsInput } from '@life-payment/core-vue';
import { MaybeRef } from 'vue';
export function useOnlineService() {
  const { blLifeRecharge } = useLifeRechargeContext();
  const { data } = useQuery({
    queryKey: ['blLifeRecharge/getOnlineService'],
    queryFn: async () => {
      return await blLifeRecharge.services.getOnlineService({
        showLoading: false,
      });
    },
    placeholderData: () => '',
  });
  return {
    onlineServiceLink: data,
  };
}
type UseLifePayChannlesAllListOptions = {
  params?: MaybeRef<API.QueryLifePayChannlesInput>;
  onSuccess?: (data: API.CreateEditPayChannelsInput[]) => any;
};
export function useLifePayChannlesAllList(options: UseLifePayChannlesAllListOptions = {}) {
  const { onSuccess, params = {} } = options;
  const { blLifeRecharge } = useLifeRechargeContext();
  const {
    data: allChannlesList,
    isLoading,
    refetch,
  } = useQuery({
    queryKey: ['blLifeRecharge/getLifePayChannlesAllList', params],
    queryFn: async () => {
      return await blLifeRecharge.services.getLifePayChannlesAllList(unref(params), {
        showLoading: false,
      });
    },
    placeholderData: () => [] as CreateEditPayChannelsInput[],
    onSuccess: (data) => {
      onSuccess?.(data);
    },
  });
  function getChannlesNameByNum(channlesNum: string) {
    return (
      allChannlesList.value.find((item) => item.channlesNum === channlesNum)?.channlesName ?? ''
    );
  }
  return {
    allChannlesList,
    isLoading,
    refetch,
    getChannlesNameByNum,
  };
}
apps/taro/src/hooks/user.ts
@@ -10,8 +10,32 @@
  useLifeRechargeContext,
  APIgetLifePayWxIndentityParams,
  WxMiniAppIndentityInfo,
  LifePayPhoneMesssageCodeLoginOutput,
} from '@life-payment/core-vue';
import { isInWeChat } from '@/utils/env';
export function useVirtualUserInfo() {
  const { blLifeRecharge } = useLifeRechargeContext();
  const { data: virtualUserInfo } = useQuery({
    queryKey: ['blLifeRecharge/lifePayUserMesssageByIduser', blLifeRecharge.accountModel.userId],
    queryFn: async () => {
      return await blLifeRecharge.services.lifePayUserMesssageByIduser(
        {
          id: blLifeRecharge.accountModel.userId,
        },
        {
          showLoading: false,
        }
      );
    },
    placeholderData: () => ({} as LifePayPhoneMesssageCodeLoginOutput),
    enabled: computed(() => !!blLifeRecharge.accountModel.userId),
    staleTime: Infinity,
  });
  return { virtualUserInfo };
}
export function useUser() {
  const userStore = useUserStore();
@@ -30,6 +54,11 @@
    return userStore.getCurrentUserInfo();
  }
  const { blLifeRecharge } = useLifeRechargeContext();
  // const { virtualUserInfo } = useVirtualUserInfo();
  const isChannelAccount = computed(() => blLifeRecharge.accountModel.isBackClientUser);
  return {
    user: userInfo,
    userDetail: userDetail,
@@ -39,6 +68,8 @@
    virtualPhoneNumber,
    wxCode,
    wxOpenId,
    isChannelAccount,
    // virtualUserInfo,
  };
}
apps/taro/src/pages/mine/index.vue
@@ -13,7 +13,9 @@
    <div class="mine-page-top-view" @click="goLogin">
      <img class="mine-avatar" :src="DefaultAvatar" alt="" />
      <div class="user-info">
        <div class="user-info-name" v-if="isLogin">{{ hiddenPhoneNumber(virtualPhoneNumber) }}</div>
        <div class="user-info-name" v-if="isLogin">
          {{ hiddenPhoneNumber(virtualPhoneNumber) }}
        </div>
        <div class="mine-go-login" v-else>登录</div>
      </div>
    </div>
@@ -21,6 +23,11 @@
      <List class="mine-list-wrapper">
        <ListItem title="订单管理" @click="goOrderManage"></ListItem>
        <ListItem title="户号管理" @click="goUserAccountList"></ListItem>
        <template v-if="isChannelAccount">
          <ListItem title="数据看板" @click="goDashboard"></ListItem>
          <ListItem title="推广二维码" @click="goShareQrcode"></ListItem>
        </template>
        <ListItem v-if="isWeb && !isInAlipay" title="在线客服" @click="handleChat"></ListItem>
        <ListItem v-if="isLogin" title="退出登录" @click="goLogout"></ListItem>
      </List>
    </ContentScrollView>
@@ -29,7 +36,7 @@
<script setup lang="ts">
import { TransparentNavigationBar, List, ListItem } from '@/components';
import { useUser, useIsLogin, useGoLogin, useAccessLogin } from '@/hooks';
import { useUser, useIsLogin, useGoLogin, useAccessLogin, useOnlineService } from '@/hooks';
import Taro from '@tarojs/taro';
import { RouterPath, OssAssets } from '@/constants';
import DefaultAvatar from '@/assets/components/icon-default-avatar.png';
@@ -37,10 +44,12 @@
import PageLayoutWithBg from '@/components/Layout/PageLayoutWithBg.vue';
import { useUserStore } from '@/stores/modules/user';
import { Message } from '@/utils';
import { isWeb, isInAlipay } from '@/utils/env';
import { useLifeRechargeContext } from '@life-payment/core-vue';
import { hiddenPhoneNumber } from '@life-payment/utils';
const { userDetail, virtualPhoneNumber } = useUser();
const { userDetail, virtualPhoneNumber, isChannelAccount } = useUser();
const isLogin = useIsLogin();
const systemStore = useSystemStore();
const userStore = useUserStore();
@@ -64,16 +73,18 @@
// Taro.showShareMenu({
//   showShareItems: ['shareAppMessage'],
// });
Taro.useShareAppMessage((res) => {
  return {
    title: `${userDetail.value?.contacter}名片`,
    // path: `${RouterPath.userHomePage}?userId=${userDetail.value?.userId}`,
    imageUrl: userDetail.value?.avatarUrl,
  };
});
// Taro.useShareAppMessage((res) => {
//   return {
//     title: `${userDetail.value?.contacter}名片`,
//     // path: `${RouterPath.userHomePage}?userId=${userDetail.value?.userId}`,
//     imageUrl: userDetail.value?.avatarUrl,
//   };
// });
const goOrderManage = useAccessLogin(() => goPage(RouterPath.order));
const goUserAccountList = useAccessLogin(() => goPage(RouterPath.userAccountList));
const goShareQrcode = useAccessLogin(() => goPage(RouterPath.shareQrcode));
const goDashboard = useAccessLogin(() => goPage(RouterPath.dashboard));
async function goLogout() {
  try {
@@ -84,6 +95,18 @@
    blLifeRecharge.loginout();
  } catch (error) {}
}
const { onlineServiceLink } = useOnlineService();
function handleChat() {
  if (isWeb && onlineServiceLink.value) {
    if (isInAlipay) {
      Message.warning('请在微信中打开使用该功能');
    } else {
      window.open(onlineServiceLink.value, '_blank');
    }
  }
}
</script>
<style lang="scss">
apps/taro/src/stores/modules/user.ts
@@ -21,6 +21,8 @@
import { getAccountInfoFromAccessToken, AccountInfo, setOSSLink } from '@life-payment/utils';
import DefaultAvatar from '@/assets/components/icon-default-avatar.png';
import { myClient } from '@/constants/query';
import { blLifeRecharge } from '@/utils/blLifeRecharge';
import { LifePayPhoneMesssageCodeLoginOutput } from '@life-payment/core-vue';
interface UserState {
  userInfo?: Nullable<API.IdentityModelTokenCacheItem>;
@@ -38,6 +40,8 @@
  wxCode?: string;
  wxOpenId?: string;
  virtualUserInfo?: LifePayPhoneMesssageCodeLoginOutput;
}
const goAuthorization = debounce(
@@ -140,7 +144,7 @@
      if (res) {
        this.loginVirtualSuccess({
          virtualUserId: res,
          virtualUserId: res.userId,
          virtualPhoneNumber: data.phoneNumber,
        });
      }
@@ -174,6 +178,7 @@
    async loginVirtualSuccess(virtualUserRes: LoginVirtualRes) {
      try {
        this.setVirtualUserId(virtualUserRes);
        this.getCurrentUserInfo();
      } catch (error) {}
    },
@@ -218,11 +223,10 @@
    async getCurrentUserInfo() {
      try {
        // let res = await userServices.getUserInfo({ showLoading: false });
        // let res = await blLifeRecharge.accountModel.getUserInfo(this.virtualUserId);
        // if (res) {
        //   res.originalAvatarUrl = res.avatarUrl;
        //   res.avatarUrl = res.avatarUrl ? setOSSLink(res.avatarUrl) : DefaultAvatar;
        //   this.setUserDetail(res);
        //   // this.setUserDetail(res);
        //   this.virtualUserInfo = res;
        //   this.firstGetUserDetail = false;
        // }
      } catch (error) {}
apps/taro/src/subpackages/login/loginByForm/verificationCodeLoginForm.vue
@@ -104,7 +104,7 @@
        );
        userStore.loginVirtualSuccess({
          virtualPhoneNumber: form.phoneNumber,
          virtualUserId: res,
          virtualUserId: res.userId,
        });
        jump();
      }
apps/taro/src/subpackages/my/dashboard/InnerPage.vue
New file
@@ -0,0 +1,12 @@
<template>
  <ContentScrollView has-padding-top style="background-color: #fff">
    <Dashboard />
  </ContentScrollView>
</template>
<script setup lang="ts">
import { Dashboard } from '@life-payment/components';
defineOptions({
  name: 'InnerPage',
});
</script>
apps/taro/src/subpackages/my/dashboard/dashboard.config.ts
New file
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/taro/src/subpackages/my/dashboard/dashboard.vue
New file
@@ -0,0 +1,14 @@
<template>
  <PageLayout title="数据看板" class="dashboard-page-wrapper" hasBorder>
    <InnerPage />
  </PageLayout>
</template>
<script setup lang="ts">
import { PageLayout } from '@/components';
import InnerPage from './InnerPage.vue';
defineOptions({
  name: 'dashboard',
});
</script>
apps/taro/src/subpackages/my/shareQrcode/InnerPage.vue
New file
@@ -0,0 +1,37 @@
<template>
  <ProTabs v-model="channlesType" name="user-home-tabs" class="user-home-tabs" flexTitle fullHeight>
    <ProTabPane
      :title="item.name"
      :pane-key="item.channlesNum"
      v-for="item in userChannles"
      :key="item.channlesNum"
    >
      <ShareQrcodeView :channles-num="item.channlesNum" />
    </ProTabPane>
  </ProTabs>
</template>
<script setup lang="ts">
import { ShareQrcodeView } from '@life-payment/components';
import { useLifeRechargeContext } from '@life-payment/core-vue';
import { useUser } from '@/hooks';
defineOptions({
  name: 'InnerPage',
});
// const { virtualUserInfo } = useUser();
const { blLifeRecharge } = useLifeRechargeContext();
const userChannles = computed(() =>
  (blLifeRecharge.accountModel.userChannles ?? []).filter(
    (x) => x.switchType !== blLifeRecharge.constants.LifePaySwitchTypeEnum.微信小程序
  )
);
const channlesType = ref(userChannles.value[0]?.channlesNum ?? '');
watch(userChannles, (val) => {
  channlesType.value = val?.[0]?.channlesNum ?? '';
});
</script>
apps/taro/src/subpackages/my/shareQrcode/shareQrcode.config.ts
New file
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/taro/src/subpackages/my/shareQrcode/shareQrcode.vue
New file
@@ -0,0 +1,14 @@
<template>
  <PageLayout title="推广二维码" class="shareQrcode-page-wrapper" hasBorder>
    <InnerPage />
  </PageLayout>
</template>
<script setup lang="ts">
import { PageLayout } from '@/components';
import InnerPage from './InnerPage.vue';
defineOptions({
  name: 'shareQrcode',
});
</script>
apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue
@@ -12,6 +12,7 @@
      :isFocus="isFocus"
      :showAliPay="!isInWeChat"
      :showWeixinPay="isInWeChat"
      @missName="handleMissName"
    />
  </ContentScrollView>
</template>
@@ -23,6 +24,7 @@
import { isInAlipay, isInWeChat, isH5, isWeb } from '@/utils/env';
import { useUser, useFocus, useEnsureOpenId } from '@/hooks';
import { WXPayAppId } from '@/constants';
import { Message } from '@/utils';
defineOptions({
  name: 'InnerPage',
@@ -45,4 +47,13 @@
    url: `${RouterPath.rechargeResult}?orderNo=${orderNo}&lifePayOrderType=${BlLifeRecharge.constants.LifePayOrderTypeEnum.电费订单}`,
  });
}
async function handleMissName(userAccountId: string) {
  try {
    await Message.confirm({ message: '请先完善手机号所属机主姓名' });
    RouteHelper.navigateTo({
      url: `${RouterPath.editElectricUserAccount}?id=${userAccountId}`,
    });
  } catch (error) {}
}
</script>
apps/taro/src/subpackages/recharge/gasBillRecharge/InnerPage.vue
@@ -12,6 +12,7 @@
      :isFocus="isFocus"
      :showAliPay="!isInWeChat"
      :showWeixinPay="isInWeChat"
      @missName="handleMissName"
    />
  </ContentScrollView>
</template>
@@ -23,6 +24,7 @@
import { isInAlipay, isInWeChat, isH5, isWeb } from '@/utils/env';
import { useUser, useFocus, useEnsureOpenId } from '@/hooks';
import { WXPayAppId } from '@/constants';
import { Message } from '@/utils';
defineOptions({
  name: 'InnerPage',
@@ -45,4 +47,13 @@
    url: `${RouterPath.rechargeResult}?orderNo=${orderNo}&lifePayOrderType=${BlLifeRecharge.constants.LifePayOrderTypeEnum.燃气订单}`,
  });
}
async function handleMissName(userAccountId: string) {
  try {
    await Message.confirm({ message: '请先完善手机号所属机主姓名' });
    RouteHelper.navigateTo({
      url: `${RouterPath.editGasUserAccount}?id=${userAccountId}`,
    });
  } catch (error) {}
}
</script>
apps/taro/src/utils/blLifeRecharge.ts
@@ -9,3 +9,10 @@
  phoneNumber: getStorageVirtualUserId()?.virtualPhoneNumber ?? '',
  channlesNum: '818',
});
export const LifeRechargeOptions = {
  axiosConfig: config,
  userId: getStorageVirtualUserId()?.virtualUserId ?? '',
  phoneNumber: getStorageVirtualUserId()?.virtualPhoneNumber ?? '',
  channlesNum: '818',
};
packages/components/package.json
@@ -50,6 +50,7 @@
    "@tarojs/taro": "3.6.20",
    "@vitejs/plugin-vue": "^5.1.4",
    "@vitejs/plugin-vue-jsx": "^4.0.1",
    "qrcode.vue": "^3.6.0",
    "vite": "5.4.3",
    "vite-plugin-dts": "^4.5.3",
    "vite-plugin-static-copy": "^0.12.0",
@@ -61,6 +62,7 @@
    "@tanstack/vue-query": "4.35.3",
    "@tarojs/components": "*",
    "@tarojs/taro": "*",
    "qrcode.vue": "^3.6.0",
    "vue": "*"
  }
}
packages/components/src/components/Card/OrderCard.vue
@@ -4,7 +4,7 @@
      <div class="order-card-title-top">
        <div class="order-card-title-text">{{ title }}</div>
        <div class="order-card-title-status">
          {{ LifeRechargeConstants.LifePayOrderFrontStatusEnumText[status] }}
          {{ LifeRechargeConstants.LifePayOrderStatusEnumText[status] }}
        </div>
      </div>
      <div class="order-card-title-ordernum-wrapper">
@@ -14,14 +14,14 @@
        <slot name="actions">
          <div
            class="order-card-action"
            v-if="status === LifeRechargeConstants.LifePayOrderFrontStatusEnum.支付成功"
            v-if="status === LifeRechargeConstants.LifePayOrderStatusEnum.充值中"
            @click="emit('goApplyRefund', id)"
          >
            申请退款
          </div>
          <div
            class="order-card-action"
            v-if="status === LifeRechargeConstants.LifePayOrderFrontStatusEnum.退款失败"
            v-if="status === LifeRechargeConstants.LifePayOrderStatusEnum.退款失败"
            @click="emit('goRefundDetail', orderNo)"
          >
            详情
@@ -44,7 +44,7 @@
type Props = {
  title: string;
  status?: LifeRechargeConstants.LifePayOrderFrontStatusEnum;
  status?: LifeRechargeConstants.LifePayOrderStatusEnum;
  orderNo: string;
  id: string;
};
packages/components/src/index.ts
@@ -13,4 +13,6 @@
export { default as EditPhoneUserAccount } from './views/userAccount/EditPhoneUserAccount.vue';
export { default as EditElectricUserAccount } from './views/userAccount/EditElectricUserAccount.vue';
export { default as EditGasUserAccount } from './views/userAccount/EditGasUserAccount.vue';
export { default as ShareQrcodeView } from './views/Mine/ShareQrcodeView.vue';
export { default as Dashboard } from './views/Mine/Dashboard.vue';
export * from './utils';
packages/components/src/styles/index.scss
@@ -4,6 +4,7 @@
@use './orderCard.scss' as *;
@use './card.scss' as *;
@use './gas.scss' as *;
@use './mine.scss' as *;
@use './nut.scss' as *;
@use './layout.scss' as *;
@use './rechargeGrid.scss' as *;
packages/components/src/styles/mine.scss
New file
@@ -0,0 +1,26 @@
@use './common.scss' as *;
.share-qrcode-view {
  padding-top: 140px;
  display: flex;
  justify-content: center;
}
.dashboard-view {
  padding-top: 40px;
  .pro-statistics-wrapper {
    text-align: center;
    // display: flex;
    // flex-direction: column;
    // justify-content: space-between;
    .pro-statistics-title {
      font-size: 32px;
      margin-bottom: 24px;
    }
    .pro-statistics-content {
      font-size: 28px;
    }
  }
}
packages/components/src/views/GasBillRecharge/GasBillRecharge.vue
@@ -6,6 +6,7 @@
    v-bind="props"
    @go-pay="emit('goPay', $event)"
    @paySuccess="emit('paySuccess', $event)"
    @missName="emit('missName', $event)"
  />
</template>
@@ -33,6 +34,7 @@
const emit = defineEmits<{
  (e: 'goPay', orderNo: string): void;
  (e: 'paySuccess', orderNo: string): void;
  (e: 'missName', userAccountId: string): void;
}>();
const preSetForm = reactive({
@@ -42,6 +44,7 @@
  gasAccount: '',
  remark: '',
  areaList: [] as string[],
  name: '',
});
provide(GasBillRechargeContextKey, {
packages/components/src/views/GasBillRecharge/GasBillRechargeBaseForm.vue
@@ -23,6 +23,14 @@
        max-length="13"
      />
    </NutFormItem>
    <NutFormItem label="户主姓名" class="bole-form-item" prop="name" required>
      <NutInput
        v-model.trim="form.name"
        class="bole-input-text"
        placeholder="请填写户主姓名"
        type="text"
      />
    </NutFormItem>
    <slot></slot>
  </NutForm>
</template>
@@ -46,6 +54,7 @@
  // city: string;
  gasAccount: string;
  areaList: string[];
  name: string;
}>('form');
const rules = reactive<FormRules>({
@@ -56,6 +65,7 @@
  areaList: [
    { required: true, message: '请选择所在城市', validator: FormValidator.validatorArray },
  ],
  name: [{ required: true, message: '请填写户主姓名' }],
});
const formRef = ref<any>(null);
packages/components/src/views/GasBillRecharge/GasBillRechargeStep3.vue
@@ -136,6 +136,7 @@
const emit = defineEmits<{
  (e: 'goPay', orderNo: string): void;
  (e: 'paySuccess', orderNo: string): void;
  (e: 'missName', userAccountId: string): void;
}>();
const { goTo } = useGasBillRechargeContext();
@@ -155,6 +156,7 @@
  remark: '',
  areaList: [] as string[],
  lifePayType: initLifePayType(props.isInWeChat, props.isInAlipay),
  name: '',
});
const { userAccountAllList, handleUserAccountChange } = useSetUserAccountBySelect({
@@ -169,6 +171,7 @@
    form.gasOrgType = currentUserAccount.operators;
    form.remark = currentUserAccount.remark;
    form.name = currentUserAccountExtraProperties.name ?? '';
    const gasParValueItem = gasParValueList.value.find((x) => x.gasOrgCode === form.gasOrgType);
    if (gasParValueItem && gasParValueItem.parValue.every((x) => Number(x) !== form.parValue)) {
      form.parValue = 0;
@@ -208,6 +211,10 @@
  if (!formRef.value) return;
  formRef.value.validate().then(({ valid, errors }: any) => {
    if (valid) {
      if (!form.name) {
        emit('missName', form.currentUserAccountId);
        return;
      }
      recharge();
    }
  });
@@ -239,6 +246,7 @@
        gasAccount: form.gasAccount,
        province: form.areaList?.[0] ?? '',
        city: form.areaList?.[1] ?? '',
        // name: form.name,
      },
    };
    let res = await blLifeRecharge.services.createLifePayGasOrder(params);
packages/components/src/views/GasBillRecharge/context.ts
@@ -26,4 +26,5 @@
  gasAccount: string;
  remark: string;
  areaList: string[];
  name: string;
};
packages/components/src/views/Mine/Dashboard.vue
New file
@@ -0,0 +1,88 @@
<template>
  <NutGrid :gutter="10" :column-num="3" square class="dashboard-view">
    <NutGridItem>
      <div class="pro-statistics-wrapper">
        <div class="pro-statistics-title">累计收款</div>
        <div class="pro-statistics-content">
          {{ toThousand(topStatistics?.accumulatedReceipts ?? 0) }}
        </div>
      </div>
    </NutGridItem>
    <NutGridItem>
      <div class="pro-statistics-wrapper">
        <div class="pro-statistics-title">昨日收款</div>
        <div class="pro-statistics-content">
          {{ toThousand(topStatistics?.receiptsYesterday ?? 0) }}
        </div>
      </div>
    </NutGridItem>
    <NutGridItem>
      <div class="pro-statistics-wrapper">
        <div class="pro-statistics-title">累计收益</div>
        <div class="pro-statistics-content">
          {{ toThousand(topStatistics?.accumulatedIncome ?? 0) }}
        </div>
      </div>
    </NutGridItem>
    <NutGridItem>
      <div class="pro-statistics-wrapper">
        <div class="pro-statistics-title">累计下单</div>
        <div class="pro-statistics-content">{{ topStatistics?.accumulatedOrders ?? 0 }}</div>
      </div>
    </NutGridItem>
    <NutGridItem>
      <div class="pro-statistics-wrapper">
        <div class="pro-statistics-title">昨日下单</div>
        <div class="pro-statistics-content">{{ topStatistics?.ordersNumYesterday ?? 0 }}</div>
      </div>
    </NutGridItem>
    <NutGridItem>
      <div class="pro-statistics-wrapper">
        <div class="pro-statistics-title">昨日成功</div>
        <div class="pro-statistics-content">{{ topStatistics?.yesterdaySuccess ?? 0 }}</div>
      </div>
    </NutGridItem>
    <NutGridItem>
      <div class="pro-statistics-wrapper">
        <div class="pro-statistics-title">累计用户</div>
        <div class="pro-statistics-content">{{ topStatistics?.accumulatedUsers ?? 0 }}</div>
      </div>
    </NutGridItem>
    <NutGridItem>
      <div class="pro-statistics-wrapper">
        <div class="pro-statistics-title">昨日活跃</div>
        <div class="pro-statistics-content">{{ topStatistics?.yesterdayActiveUsers ?? 0 }}</div>
      </div>
    </NutGridItem>
  </NutGrid>
</template>
<script setup lang="ts">
import { Grid as NutGrid, GridItem as NutGridItem } from '@nutui/nutui-taro';
import { toThousand } from '../../utils';
import { useQuery } from '@tanstack/vue-query';
import { useLifeRechargeContext, TopStatisticsOutput } from '@life-payment/core-vue';
import { computed } from 'vue';
defineOptions({
  name: 'Dashboard',
});
const { blLifeRecharge } = useLifeRechargeContext();
const { data: topStatistics } = useQuery({
  queryKey: ['lifePayServices/getTopStatistics', blLifeRecharge.accountModel.userChannles],
  queryFn: async () => {
    return await blLifeRecharge.services.getTopStatistics(
      {
        channleList: blLifeRecharge.accountModel.userChannles.map((x) => x.channlesNum),
      },
      {
        showLoading: false,
      }
    );
  },
  placeholderData: () => ({} as TopStatisticsOutput),
  enabled: computed(() => blLifeRecharge.accountModel.isBackClientUser),
});
</script>
packages/components/src/views/Mine/ShareQrcodeView.vue
New file
@@ -0,0 +1,25 @@
<template>
  <div class="share-qrcode-view">
    <qrcode-vue :value="link" :size="200"></qrcode-vue>
  </div>
</template>
<script setup lang="ts">
import QrcodeVue from 'qrcode.vue';
import { useLifeRechargeContext } from '@life-payment/core-vue';
import { computed } from 'vue';
defineOptions({
  name: 'ShareQrcodeView',
});
type Props = {
  channlesNum?: string;
};
const props = withDefaults(defineProps<Props>(), {});
const { blLifeRecharge } = useLifeRechargeContext();
const link = computed(() => `${CLIENT_ORIGIN}?channelId=${props.channlesNum}`);
</script>
packages/components/src/views/Order/components/ElectricOrder.vue
@@ -6,7 +6,7 @@
    <template #renderItem="{ item }">
      <OrderCard
        title="电费充值"
        :status="item?.frontStatus"
        :status="item?.lifePayOrderStatus"
        :order-no="item?.orderNo"
        :id="item?.id"
        @goApplyRefund="emit('goApplyRefund', $event)"
packages/components/src/views/Order/components/GasOrder.vue
@@ -6,7 +6,7 @@
    <template #renderItem="{ item }">
      <OrderCard
        title="燃气充值"
        :status="item?.frontStatus"
        :status="item?.lifePayOrderStatus"
        :order-no="item?.orderNo"
        :id="item?.id"
        @goApplyRefund="emit('goApplyRefund', $event)"
packages/components/src/views/Order/components/PhoneOrder.vue
@@ -6,7 +6,7 @@
    <template #renderItem="{ item }">
      <OrderCard
        title="话费充值"
        :status="item?.frontStatus"
        :status="item?.lifePayOrderStatus"
        :order-no="item?.orderNo"
        :id="item?.id"
        @goApplyRefund="emit('goApplyRefund', $event)"
packages/components/src/views/electricBillRecharge/ElectricBillRechargeBaseForm.vue
@@ -61,6 +61,14 @@
        max-length="6"
      />
    </NutFormItem>
    <NutFormItem label="户主姓名" class="bole-form-item" prop="name" required>
      <NutInput
        v-model.trim="form.name"
        class="bole-input-text"
        placeholder="请填写户主姓名"
        type="text"
      />
    </NutFormItem>
    <slot />
  </NutForm>
</template>
@@ -85,6 +93,7 @@
  province: string;
  city: string;
  sixID: string;
  name: string;
}>('form');
const { electricParValueList } = useGetElectricParValue();
@@ -118,6 +127,7 @@
      validator: FormValidator.validatorIDNumberSix,
    },
  ],
  name: [{ required: true, message: '请填写户主姓名' }],
});
const formRef = ref<any>(null);
packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep2.vue
@@ -138,6 +138,7 @@
const emit = defineEmits<{
  (e: 'goPay', orderNo: string): void;
  (e: 'paySuccess', orderNo: string): void;
  (e: 'missName', userAccountId: string): void;
}>();
const { goTo } = useElectricBillRechargeContext();
@@ -153,6 +154,7 @@
  currentUserAccountId: '',
  remark: '',
  lifePayType: initLifePayType(props.isInWeChat, props.isInAlipay),
  name: '',
});
const { userAccountAllList, handleUserAccountChange } = useSetUserAccountBySelect({
@@ -170,6 +172,7 @@
    form.electricAccountType = currentUserAccountExtraProperties.electricAccountType;
    form.sixID = currentUserAccountExtraProperties.sixID;
    form.remark = currentUserAccount.remark;
    form.name = currentUserAccountExtraProperties.name ?? '';
    const electricParValueItem = electricParValueList.value.find(
      (x) => x.cityName === form.province
    );
@@ -216,6 +219,10 @@
  if (!formRef.value) return;
  formRef.value.validate().then(({ valid, errors }: any) => {
    if (valid) {
      if (!form.name) {
        emit('missName', form.currentUserAccountId);
        return;
      }
      recharge();
    }
  });
@@ -249,6 +256,7 @@
        province: form.province,
        city: form.city,
        sixID: form.sixID,
        // name: form.name,
      },
    };
    let res = await blLifeRecharge.services.createLifePayElectricOrder(params);
packages/components/src/views/electricBillRecharge/context.ts
@@ -34,4 +34,5 @@
  city: string;
  sixID: string;
  remark: string;
  name: string;
};
packages/components/src/views/electricBillRecharge/electricBillRecharge.vue
@@ -5,6 +5,7 @@
    v-bind="props"
    @go-pay="emit('goPay', $event)"
    @paySuccess="emit('paySuccess', $event)"
    @missName="emit('missName', $event)"
  />
</template>
@@ -27,6 +28,7 @@
const emit = defineEmits<{
  (e: 'goPay', orderNo: string): void;
  (e: 'paySuccess', orderNo: string): void;
  (e: 'missName', userAccountId: string): void;
}>();
const stepperInfo = useStepper(['step1', 'step2'], 'step2');
packages/components/src/views/userAccount/EditElectricUserAccount.vue
@@ -75,6 +75,7 @@
    form.electricType = currentUserAccountExtraProperties.electricType;
    form.electricAccountType = currentUserAccountExtraProperties.electricAccountType;
    form.sixID = currentUserAccountExtraProperties.sixID;
    form.name = currentUserAccountExtraProperties.name ?? '';
    form.remark = data.remark;
  },
  enabled: computed(() => !!props.id),
@@ -88,6 +89,7 @@
  city: '',
  sixID: '',
  remark: '',
  name: '',
});
const formRef = ref<any>(null);
packages/components/src/views/userAccount/EditGasUserAccount.vue
@@ -87,6 +87,7 @@
    form.gasOrgType = data.operators as any;
    form.remark = data.remark;
    form.name = currentUserAccountExtraProperties.name ?? '';
  },
  enabled: computed(() => !!props.id),
});
@@ -98,6 +99,7 @@
  gasAccount: '',
  remark: '',
  areaList: [] as string[],
  name: '',
});
const formRef = ref<any>(null);
packages/components/types/global.d.ts
@@ -20,4 +20,5 @@
declare const OSS_URL: string
declare const WeixinJSBridge: any
declare const WeixinJSBridge: any
declare const CLIENT_ORIGIN: string
packages/components/vite.config.ts
@@ -22,6 +22,7 @@
  },
  define: {
    OSS_URL: '"https://parkmanagement.oss-cn-hangzhou.aliyuncs.com"',
    CLIENT_ORIGIN: '"https://jf.81812333.com"',
  },
  plugins: [
    vue(),
packages/core-vue/src/plugin.ts
@@ -1,5 +1,5 @@
import { BlLifeRecharge } from '@life-payment/core';
import { inject, shallowReactive } from 'vue';
import { BlLifeRecharge, BlLifeRechargeOptions } from '@life-payment/core';
import { inject, reactive, provide, ref } from 'vue';
import type { InjectionKey, UnwrapNestedRefs, Ref } from 'vue';
export type LifeRechargeContext = {
@@ -12,10 +12,25 @@
  blLifeRecharge: BlLifeRecharge;
};
function updateState(state: Record<string, unknown>, update: Record<string, any>): void {
  Object.keys(state).forEach((key) => {
    state[key] = update[key];
  });
}
export const VueLifeRechargePlugin = {
  install: (app: any, { blLifeRecharge }: VueLifeRechargePluginOptions) => {
    const _blLifeRecharge = reactive(blLifeRecharge);
    _blLifeRecharge.init();
    // blLifeRecharge.listener.addListener({
    //   update: (state) => {
    //     updateState(_blLifeRecharge, state);
    //   },
    // });
    app.provide(clientKey, {
      blLifeRecharge: shallowReactive(blLifeRecharge),
      blLifeRecharge: _blLifeRecharge,
    });
  },
};
packages/core/src/lifeRecharge.ts
@@ -2,31 +2,42 @@
  BlLifeRechargeServices,
  PhoneMesssageCodeLoginInput,
  RequestConfig,
  ChannelOutput,
} from './lifeRechargeServices';
import { BlLifeRechargeOptions } from './types';
import { LifeRechargeConstants } from './lifeRechargeConstants';
import { BlLifeRechargeAccountModel } from './lifeRechargeAccountModel';
import { LifeRechargeListener } from './listener';
export class BlLifeRecharge<TResponse = any, TRequestOptions = any> {
  services: BlLifeRechargeServices<TResponse, TRequestOptions>;
  accountModel: BlLifeRechargeAccountModel;
  listener: LifeRechargeListener;
  static constants = LifeRechargeConstants;
  constants = LifeRechargeConstants;
  constructor(options: BlLifeRechargeOptions<TResponse, TRequestOptions>) {
    this.listener = new LifeRechargeListener();
    this.services = new BlLifeRechargeServices(this, options);
    this.accountModel = new BlLifeRechargeAccountModel({
    this.accountModel = new BlLifeRechargeAccountModel(this, {
      userId: options.userId,
      phoneNumber: options.phoneNumber,
      channlesNum: options.channlesNum,
    });
  }
  init() {
    if (this.accountModel.userId) {
      this.accountModel.getUserInfo();
    }
  }
  async login(body: PhoneMesssageCodeLoginInput, options?: RequestConfig) {
    try {
      let res = await this.services.lifePayPhoneMesssageCodeLogin(body, options);
      this.accountModel.setUserId(res);
      this.accountModel.setUserId(res.userId);
      this.accountModel.getUserInfo();
      this.accountModel.setPhoneNumber(body.phoneNumber);
      return res;
    } catch (error) {
@@ -37,6 +48,8 @@
  loginout() {
    this.accountModel.setUserId('');
    this.accountModel.setPhoneNumber('');
    this.accountModel.setUserChannles([]);
    this.accountModel.isBackClientUser = false;
  }
  isLogin() {
packages/core/src/lifeRechargeAccountModel.ts
@@ -1,12 +1,24 @@
import { BlLifeRechargeAccountModelOptions } from './types';
import { ChannelOutput } from './lifeRechargeServices';
import { BlLifeRecharge } from './lifeRecharge';
export class BlLifeRechargeAccountModel {
export class BlLifeRechargeAccountModel<TResponse = any, TRequestOptions = any> {
  ctx: BlLifeRecharge<TResponse, TRequestOptions>;
  userId = '';
  phoneNumber = '';
  channlesNum = '';
  constructor(options: BlLifeRechargeAccountModelOptions = {}) {
  /**用户所有的渠道 */
  userChannles = [] as ChannelOutput[];
  isBackClientUser: boolean;
  constructor(
    ctx: BlLifeRecharge<TResponse, TRequestOptions>,
    options: BlLifeRechargeAccountModelOptions = {}
  ) {
    const { userId = '', phoneNumber = '', channlesNum } = options;
    this.ctx = ctx;
    this.setUserId(userId);
    this.setPhoneNumber(phoneNumber);
    this.setChannlesNum(channlesNum);
@@ -14,12 +26,42 @@
  setUserId(userId: string) {
    this.userId = userId;
    this.ctx.listener.fireEvent('update', this.ctx);
    // if (userId) {
    //   this.getUserInfo(userId);
    // }
  }
  async getUserInfo(userId?: string) {
    try {
      let res = await this.ctx.services.lifePayUserMesssageByIduser(
        {
          id: userId || this.userId,
        },
        {
          showLoading: false,
        }
      );
      this.isBackClientUser = res.isBackClientUser;
      if (res && res.isBackClientUser) {
        this.setUserChannles(res.channlesNum ?? []);
      }
      return res;
    } catch (error) {
      console.log('error: ', error);
    }
  }
  setPhoneNumber(phoneNumber: string) {
    this.phoneNumber = phoneNumber;
    this.ctx.listener.fireEvent('update', this.ctx);
  }
  setChannlesNum(channlesNum: string) {
    this.channlesNum = channlesNum;
    this.ctx.listener.fireEvent('update', this.ctx);
  }
  setUserChannles(userChannles: ChannelOutput[]) {
    this.userChannles = userChannles;
    this.ctx.listener.fireEvent('update', this.ctx);
  }
}
packages/core/src/lifeRechargeConstants.ts
@@ -42,7 +42,10 @@
  export enum LifePayOrderStatusEnum {
    充值中 = 10,
    // 已失败 = 20,
    /**
     * @deprecated 仅作为老数据兼容判断
     */
    已失败 = 20,
    已完成 = 30,
@@ -56,7 +59,7 @@
  export const LifePayOrderStatusEnumText = {
    [LifePayOrderStatusEnum.充值中]: '充值中',
    // [LifePayOrderStatusEnum.已失败]: '已失败',
    [LifePayOrderStatusEnum.已失败]: '已失败',
    [LifePayOrderStatusEnum.已完成]: '已完成',
    [LifePayOrderStatusEnum.待退款]: '待退款',
    [LifePayOrderStatusEnum.已退款]: '已退款',
@@ -183,4 +186,17 @@
    充值失败 = 50,
    已退款 = 60,
  }
  export enum LifePaySwitchTypeEnum {
    H5 = 10,
    微信小程序 = 20,
    微信公众号 = 30,
  }
  export enum LifePayChannelsStatsEnum {
    启用 = 10,
    禁用 = 20,
  }
}
packages/core/src/lifeRechargeServices.ts
@@ -42,14 +42,17 @@
  }
  async lifePayPhoneMesssageCodeLogin(body: PhoneMesssageCodeLoginInput, options?: RequestConfig) {
    return this.request<string>('/api/Account/LifePayPhoneMesssageCodeLogin', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    });
    return this.request<LifePayPhoneMesssageCodeLoginOutput>(
      '/api/Account/LifePayPhoneMesssageCodeLogin',
      {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        data: body,
        ...(options || {}),
      }
    );
  }
  /** 获取折扣 GET /api/LifePay/GetRate */
@@ -330,6 +333,60 @@
  /** 获取渠道折扣 GET /api/LifePay/GetChannelRate */
  async getChannelRate(body: ChannelsBaseInput, options?: RequestConfig) {
    return this.request<ChannelRateOutput>('/api/LifePay/GetChannelRate', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    });
  }
  /** 获取在线客服 GET /api/LifePay/GetOnlineService */
  async getOnlineService(options?: RequestConfig) {
    return this.request<string>('/api/LifePay/GetOnlineService', {
      method: 'GET',
      ...(options || {}),
    });
  }
  /** 获取全部缴费渠道 GET /api/LifePay/GetLifePayChannlesAllList */
  async getLifePayChannlesAllList(body: QueryLifePayChannlesInput, options?: RequestConfig) {
    return this.request<CreateEditPayChannelsInput[]>('/api/LifePay/GetLifePayChannlesAllList', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    });
  }
  /** 根据用户ID获取用户是否为后台管理员 POST /api/Account/LifePayUserMesssageByIduser */
  async lifePayUserMesssageByIduser(
    body: LifePayUserMesssageByIduserInput,
    options?: RequestConfig
  ) {
    return this.request<LifePayPhoneMesssageCodeLoginOutput>(
      '/api/Account/LifePayUserMesssageByIduser',
      {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        data: body,
        ...(options || {}),
      }
    );
  }
  /** 获取顶部统计数据 GET /api/LifePay/GetTopStatistics */
  async getTopStatistics(
    // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
    body: TopStatisticsInput,
    options?: RequestConfig
  ) {
    return this.request<TopStatisticsOutput>('/api/LifePay/GetTopStatistics', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
@@ -775,3 +832,67 @@
export interface ChannelRateOutput {
  channlesRate?: number;
}
export interface CreateEditPayChannelsInput {
  id?: string;
  channlesName?: string;
  channlesNum?: string;
  channlesRate?: number;
  channlesRakeRate?: number;
}
export interface LifePayPhoneMesssageCodeLoginOutput {
  /** 用户Id */
  userId?: string;
  /** 是否是后台用户 */
  isBackClientUser?: boolean;
  /** 渠道号 */
  channlesNum?: ChannelOutput[];
}
export interface ChannelOutput {
  name?: string;
  channlesNum?: string;
  channlesId?: string;
  switchType?: LifeRechargeConstants.LifePaySwitchTypeEnum;
}
export interface LifePayUserMesssageByIduserInput {
  pageModel?: Pagination;
  checkChannelId?: string;
  /** 用户编号 */
  id?: string;
}
export interface TopStatisticsInput {
  channleList?: string[];
}
export interface TopStatisticsOutput {
  /** 创建时间 */
  creationTime?: string;
  /** 账户余额 */
  amount?: number;
  /** 累计收款 */
  accumulatedReceipts?: number;
  /** 昨日收款 */
  receiptsYesterday?: number;
  /** 累计收入 */
  accumulatedIncome?: number;
  /** 累计下单 */
  accumulatedOrders?: number;
  /** 昨日下单 */
  ordersNumYesterday?: number;
  /** 昨日成功 */
  yesterdaySuccess?: number;
  /** 昨日失败 */
  yesterdayFail?: number;
  /** 累计用户 */
  accumulatedUsers?: number;
  /** 昨日活跃用户 */
  yesterdayActiveUsers?: number;
}
export interface QueryLifePayChannlesInput {
  status?: LifeRechargeConstants.LifePayChannelsStatsEnum;
}
packages/core/src/listener.ts
New file
@@ -0,0 +1,36 @@
class BaseListener<ListenerMap extends { [key: string]: any }> {
  listenerList: ListenerMap[] = [];
  fireEvent(eventName: keyof ListenerMap, ...data: any[]) {
    this.listenerList.forEach((listener) => {
      var callback = listener[eventName];
      callback && callback(...data);
    });
  }
}
type LifeRechargeListenerMap = {
  update: (store: any) => any;
};
export class LifeRechargeListener extends BaseListener<LifeRechargeListenerMap> {
  addListener(listener: LifeRechargeListenerMap) {
    this.listenerList.push(listener);
  }
  removeListener(listener?: LifeRechargeListenerMap) {
    if (listener) {
      var index = -1;
      for (var i = 0, len = this.listenerList.length; i < len; i++) {
        if (listener == this.listenerList[i]) {
          index = i;
        }
      }
      if (index > -1) {
        this.listenerList.splice(index, 1);
      }
    } else {
      this.listenerList = [];
    }
  }
}
packages/services/api/Account.ts
@@ -42,14 +42,35 @@
  body: API.LifePayPhoneMesssageCodeLoginInput,
  options?: API.RequestConfig
) {
  return request<string>('/api/Account/LifePayPhoneMesssageCodeLogin', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
  return request<API.LifePayPhoneMesssageCodeLoginOutput>(
    '/api/Account/LifePayPhoneMesssageCodeLogin',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 根据用户ID获取用户是否为后台管理员 POST /api/Account/LifePayUserMesssageByIduser */
export async function lifePayUserMesssageByIduser(
  body: API.LifePayUserMesssageByIduserInput,
  options?: API.RequestConfig
) {
  return request<API.LifePayPhoneMesssageCodeLoginOutput>(
    '/api/Account/LifePayUserMesssageByIduser',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 此处后端没有提供注释 GET /api/accountAuth/GetCode */
packages/services/api/LifePay.ts
@@ -14,6 +14,21 @@
  });
}
/** 上传充值流水 POST /api/LifePay/AddUpdatePayRechargeReceipts */
export async function addUpdatePayRechargeReceipts(
  body: API.AddUpdatePayRechargeReceiptsInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/LifePay/AddUpdatePayRechargeReceipts', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 添加或修改我的户号 POST /api/LifePay/AddUpdateUserAccount */
export async function addUpdateUserAccount(
  body: API.AddUpdateUserAccountInput,
@@ -161,6 +176,30 @@
  });
}
/** 同步订单分佣信息 GET /api/LifePay/GetAllChannlesRake */
export async function getAllChannlesRake(options?: API.RequestConfig) {
  return request<any>('/api/LifePay/GetAllChannlesRake', {
    method: 'GET',
    ...(options || {}),
  });
}
/** 统计交易流水 GET /api/LifePay/GetAllLifePayConsumption */
export async function getAllLifePayConsumption(options?: API.RequestConfig) {
  return request<any>('/api/LifePay/GetAllLifePayConsumption', {
    method: 'GET',
    ...(options || {}),
  });
}
/** 同步订单收支信息 GET /api/LifePay/GetAllLifePayExpensesReceipts */
export async function getAllLifePayExpensesReceipts(options?: API.RequestConfig) {
  return request<any>('/api/LifePay/GetAllLifePayExpensesReceipts', {
    method: 'GET',
    ...(options || {}),
  });
}
/** 此处后端没有提供注释 GET /api/LifePay/GetBillErceiptExport */
export async function getBillErceiptExport(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
@@ -176,9 +215,39 @@
  });
}
/** 渠道数据 POST /api/LifePay/GetChannelDataList */
export async function getChannelDataList(
  body: API.TopStatisticsInput,
  options?: API.RequestConfig
) {
  return request<API.ChannelDataListOutPut>('/api/LifePay/GetChannelDataList', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 获取渠道折扣 POST /api/LifePay/GetChannelRate */
export async function getChannelRate(body: API.ChannelsBaseInput, options?: API.RequestConfig) {
  return request<API.ChannelRateOutput>('/api/LifePay/GetChannelRate', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 30日佣金列表 POST /api/LifePay/GetChannlesRakeList */
export async function getChannlesRakeList(
  body: API.TopStatisticsInput,
  options?: API.RequestConfig
) {
  return request<API.ChannlesRakeListOutPut>('/api/LifePay/GetChannlesRakeList', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
@@ -257,10 +326,17 @@
  });
}
/** 获取全部缴费渠道 GET /api/LifePay/GetLifePayChannlesAllList */
export async function getLifePayChannlesAllList(options?: API.RequestConfig) {
/** 获取全部缴费渠道 POST /api/LifePay/GetLifePayChannlesAllList */
export async function getLifePayChannlesAllList(
  body: API.QueryLifePayChannlesInput,
  options?: API.RequestConfig
) {
  return request<API.CreateEditPayChannelsInput[]>('/api/LifePay/GetLifePayChannlesAllList', {
    method: 'GET',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
@@ -290,6 +366,75 @@
    data: body,
    ...(options || {}),
  });
}
/** 获取渠道分佣分页列表 POST /api/LifePay/GetLifePayChannlesRakePage */
export async function getLifePayChannlesRakePage(
  body: API.LifePayChannlesRakePageInput,
  options?: API.RequestConfig
) {
  return request<API.LifePayChannlesRakeListOutputPageOutput>(
    '/api/LifePay/GetLifePayChannlesRakePage',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 导出渠道分佣Excel POST /api/LifePay/GetLifePayChannlesRakePageExport */
export async function getLifePayChannlesRakePageExport(
  body: API.LifePayChannlesRakePageInput,
  options?: API.RequestConfig
) {
  return request<any>('/api/LifePay/GetLifePayChannlesRakePageExport', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 获取消费流水分页数据 POST /api/LifePay/GetLifePayConsumptionPage */
export async function getLifePayConsumptionPage(
  body: API.LifePayConsumptionPageInput,
  options?: API.RequestConfig
) {
  return request<API.LifePayConsumptionListOutputPageOutput>(
    '/api/LifePay/GetLifePayConsumptionPage',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 获取收支流水分页数据 POST /api/LifePay/GetLifePayExpensesReceiptsPage */
export async function getLifePayExpensesReceiptsPage(
  body: API.LifePayExpensesReceiptsPageInput,
  options?: API.RequestConfig
) {
  return request<API.LifePayExpensesReceiptsListOutputPageOutput>(
    '/api/LifePay/GetLifePayExpensesReceiptsPage',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 获取订单详情 GET /api/LifePay/GetLifePayOrderDetail */
@@ -337,6 +482,24 @@
  });
}
/** 获取充值流水分页数据 POST /api/LifePay/GetLifePayRechargeReceiptsPage */
export async function getLifePayRechargeReceiptsPage(
  body: API.LifePayRechargeReceiptsPageInput,
  options?: API.RequestConfig
) {
  return request<API.LifePayRechargeReceiptsListOutputPageOutput>(
    '/api/LifePay/GetLifePayRechargeReceiptsPage',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 导出退款订单Excel POST /api/LifePay/GetLifePayRefudOrderPageExport */
export async function getLifePayRefudOrderPageExport(
  body: API.QueryLifePayRefundOrderListInput,
@@ -378,6 +541,14 @@
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 获取在线客服 GET /api/LifePay/GetOnlineService */
export async function getOnlineService(options?: API.RequestConfig) {
  return request<string>('/api/LifePay/GetOnlineService', {
    method: 'GET',
    ...(options || {}),
  });
}
@@ -440,10 +611,26 @@
  });
}
/** 获取顶部统计数据 GET /api/LifePay/GetTopStatistics */
export async function getTopStatistics(options?: API.RequestConfig) {
/** 获取30日收款统计 POST /api/LifePay/GetReceiptsList */
export async function getReceiptsList(body: API.TopStatisticsInput, options?: API.RequestConfig) {
  return request<API.ReceiptsListOutPut>('/api/LifePay/GetReceiptsList', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 获取顶部统计数据 POST /api/LifePay/GetTopStatistics */
export async function getTopStatistics(body: API.TopStatisticsInput, options?: API.RequestConfig) {
  return request<API.TopStatisticsOutput>('/api/LifePay/GetTopStatistics', {
    method: 'GET',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
@@ -550,6 +737,33 @@
  });
}
/** 查询支付宝支付订单信息 POST /api/LifePay/QueryAlipayTrade */
export async function queryAlipayTrade(body: API.OrderInQuiryInput, options?: API.RequestConfig) {
  return request<API.AlipayTradeQueryResponse>('/api/LifePay/QueryAlipayTrade', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 查询支付宝退款订单信息 POST /api/LifePay/QueryAlipayTradeRefund */
export async function queryAlipayTradeRefund(
  body: API.OrderInQuiryInput,
  options?: API.RequestConfig
) {
  return request<API.AlipayTradeFastpayRefundQueryResponse>('/api/LifePay/QueryAlipayTradeRefund', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 退款生活缴费订单 POST /api/LifePay/RefundLifePayOrder */
export async function refundLifePayOrder(
  body: API.RefundLifePayOrderInput,
@@ -624,3 +838,63 @@
    ...(options || {}),
  });
}
/** 修改实际到账金额 POST /api/LifePay/UpdateLifePayOrderActualReceivedAmount */
export async function updateLifePayOrderActualReceivedAmount(
  body: API.UpdateLifePayOrderInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/LifePay/UpdateLifePayOrderActualReceivedAmount', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 在线客服配置 POST /api/LifePay/UpdateOnlineService */
export async function updateOnlineService(
  body: API.OnlineServiceInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/LifePay/UpdateOnlineService', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 查询微信退款信息 GET /api/LifePay/WxPayDomesticRefundsQuery */
export async function wxPayDomesticRefundsQuery(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIwxPayDomesticRefundsQueryParams,
  options?: API.RequestConfig
) {
  return request<API.WxPayDomesticRefundsQueryReponse>('/api/LifePay/WxPayDomesticRefundsQuery', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 查询微信订单信息 GET /api/LifePay/WxPayTradeQuery */
export async function wxPayTradeQuery(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIwxPayTradeQueryParams,
  options?: API.RequestConfig
) {
  return request<API.WxPayTradeQueryReponse>('/api/LifePay/WxPayTradeQuery', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
packages/services/api/UserRole.ts
@@ -59,6 +59,14 @@
  });
}
/** 获取用户账号详情 GET /api/UserRole/GetBackClientUserInfo */
export async function getBackClientUserInfo(options?: API.RequestConfig) {
  return request<API.BackClientUserInfoOutput>('/api/UserRole/GetBackClientUserInfo', {
    method: 'GET',
    ...(options || {}),
  });
}
/** 后台管理账户列表 POST /api/UserRole/GetBackClientUsers */
export async function getBackClientUsers(
  body: API.GetBackClientUsersInput,
packages/services/api/WxPayNotify.ts
@@ -2,7 +2,7 @@
// @ts-ignore
import { request } from '@/utils/request';
/** 此处后端没有提供注释 POST /api/WxPayNotify/WxPayDomesticRefundsNotify */
/** 微信退款通知回调 POST /api/WxPayNotify/WxPayDomesticRefundsNotify */
export async function wxPayDomesticRefundsNotify(
  body: API.WxRechargeNotifyInput,
  options?: API.RequestConfig
packages/services/api/typings.d.ts
@@ -30,6 +30,19 @@
    implementFrom?: string;
  }
  interface AddUpdatePayRechargeReceiptsInput {
    /** 编号 */
    id?: string;
    /** 业务订单号 */
    orderNo?: string;
    /** 充值金额 */
    rechargeAmount?: number;
    /** 备注 */
    remark?: string;
    /** 充值凭证 */
    voucher?: string;
  }
  interface AddUpdateUserAccountInput {
    pageModel?: Pagination;
    checkChannelId?: string;
@@ -49,6 +62,75 @@
    extraProperties?: string;
    /** 备注 */
    remark?: string;
  }
  interface AlipayTradeFastpayRefundQueryResponse {
    httpBody?: string;
    code?: string;
    msg?: string;
    subCode?: string;
    subMsg?: string;
    errorCode?: string;
    gmtRefundPay?: string;
    industrySepcDetail?: string;
    outRequestNo?: string;
    outTradeNo?: string;
    presentRefundBuyerAmount?: string;
    presentRefundDiscountAmount?: string;
    presentRefundMdiscountAmount?: string;
    refundAmount?: string;
    refundChargeAmount?: string;
    refundDetailItemList?: TradeFundBill[];
    refundReason?: string;
    refundRoyaltys?: RefundRoyaltyResult[];
    refundSettlementId?: string;
    refundStatus?: string;
    sendBackFee?: string;
    totalAmount?: string;
    tradeNo?: string;
  }
  interface AlipayTradeQueryResponse {
    httpBody?: string;
    code?: string;
    msg?: string;
    subCode?: string;
    subMsg?: string;
    tradeNo?: string;
    outTradeNo?: string;
    buyerLogonId?: string;
    tradeStatus?: string;
    totalAmount?: string;
    transCurrency?: string;
    settleCurrency?: string;
    settleAmount?: string;
    payCurrency?: string;
    payAmount?: string;
    settleTransRate?: string;
    transPayRate?: string;
    buyerPayAmount?: string;
    pointAmount?: string;
    invoiceAmount?: string;
    sendPayDate?: string;
    receiptAmount?: string;
    storeId?: string;
    terminalId?: string;
    fundBillList?: TradeFundBill[];
    storeName?: string;
    buyerUserId?: string;
    chargeAmount?: string;
    chargeFlags?: string;
    settlementId?: string;
    tradeSettleInfo?: TradeSettleInfo[];
    authTradePayMode?: string;
    buyerUserType?: string;
    mdiscountAmount?: string;
    discountAmount?: string;
    buyerUserName?: string;
    subject?: string;
    body?: string;
    alipaySubMerchantId?: string;
    extInfos?: string;
  }
  interface AllSubModule {
@@ -332,6 +414,14 @@
    id?: string;
  }
  interface APIwxPayDomesticRefundsQueryParams {
    outTradeNo?: string;
  }
  interface APIwxPayTradeQueryParams {
    outTradeNo?: string;
  }
  interface ApplicationApiDescriptionModel {
    modules?: Record<string, any>;
    types?: Record<string, any>;
@@ -399,6 +489,14 @@
    quickQuery?: string;
  }
  interface BackClientUserInfoOutput {
    /** 是否是后台用户 */
    isBackClientUser?: boolean;
    isSystem?: boolean;
    /** 渠道号 */
    channleList?: ChannelOutput[];
  }
  interface BaseAuthorizeDto {
    moduleType?: number;
    moduleId?: string;
@@ -426,6 +524,36 @@
    type?: number;
  }
  interface ChannelDataListOutPut {
    /** Top5渠道收款 */
    receiveList?: ChannelDataReceive[];
    /** Top5渠道用户 */
    userNumberList?: ChannelDataUserNumber[];
  }
  interface ChannelDataReceive {
    /** 渠道名称 */
    channelName?: string;
    /** 收款 */
    receivePrice?: number;
    /** 佣金 */
    channlesRakePrice?: number;
  }
  interface ChannelDataUserNumber {
    /** 渠道名称 */
    channelName?: string;
    /** 用户数量 */
    number?: number;
  }
  interface ChannelOutput {
    name?: string;
    channlesNum?: string;
    channlesId?: string;
    switchType?: LifePaySwitchTypeEnum;
  }
  interface ChannelRateOutput {
    channlesRate?: number;
  }
@@ -433,6 +561,11 @@
  interface ChannelsBaseInput {
    pageModel?: Pagination;
    checkChannelId?: string;
  }
  interface ChannlesRakeListOutPut {
    /** 30天佣金 */
    channlesRakeList?: ReceiptsDetail[];
  }
  interface CheckLoginVerificationCodeInput {
@@ -444,6 +577,10 @@
  interface ClockDto {
    kind?: string;
  }
  type ConsumptionFlowEnum = 10 | 20;
  type ConsumptionFrozenStatusEnum = 10 | 20;
  interface ControllerApiDescriptionModel {
    controllerName?: string;
@@ -630,6 +767,8 @@
    properties?: Record<string, any>;
    configuration?: Record<string, any>;
  }
  type ExpensesReceiptsTypeEnum = 10 | 20;
  interface ExtensionEnumDto {
    fields?: ExtensionEnumFieldDto[];
@@ -995,6 +1134,8 @@
    city?: string;
    /** 客户身份证后6位,南网必传。 */
    sixID?: string;
    /** 户主姓名 */
    name?: string;
  }
  interface LifeElectricDataCreateLifePayOrderInput {
@@ -1030,7 +1171,123 @@
  type LifePayChannelsStatsEnum = 10 | 20;
  interface LifePayChannlesRakeListOutput {
    /** 编号 */
    id?: string;
    /** 平台订单号 */
    orderNo?: string;
    /** 成交金额 */
    payAmount?: number;
    /** 渠道佣金比例 */
    channlesRakeRate?: number;
    /** 佣金 */
    channlesRakePrice?: number;
    /** 结算时间 */
    finishTime?: string;
    /** 下单时间 */
    creationTime?: string;
    /** 拓展属性 */
    extraProperties?: string;
    /** 下单渠道 */
    channelId?: string;
  }
  interface LifePayChannlesRakeListOutputPageOutput {
    pageModel?: Pagination;
    objectData?: any;
    data?: LifePayChannlesRakeListOutput[];
  }
  interface LifePayChannlesRakePageInput {
    pageModel?: Pagination;
    checkChannelId?: string;
    /** 查询条件 */
    keyWord?: string;
    /** 渠道号 */
    channelId?: string;
    /** 起始下单时间 */
    creationTimeBegin?: string;
    /** 结束下单时间 */
    creationTimeEnd?: string;
    /** 起始结算时间 */
    finishTimeBegin?: string;
    /** 终止结算时间 */
    finishTimeEnd?: string;
  }
  type LifePayChannlesTypeEnum = 10 | 20;
  interface LifePayConsumptionListOutput {
    /** 编号 */
    id?: string;
    /** 平台订单号 */
    orderNo?: string;
    /** 外部订单号 */
    acoolyOrderNo?: string;
    /** 交易金额 */
    amount?: number;
    acoolyStatus?: ACOOLYStatusEnum;
    /** 记账时间 */
    finishTime?: string;
    frozenStatus?: ConsumptionFrozenStatusEnum;
    flow?: ConsumptionFlowEnum;
    /** 扣款金额 */
    deductionAmount?: number;
    /** 冻结金额 */
    frozenAmount?: number;
  }
  interface LifePayConsumptionListOutputPageOutput {
    pageModel?: Pagination;
    objectData?: any;
    data?: LifePayConsumptionListOutput[];
  }
  interface LifePayConsumptionPageInput {
    pageModel?: Pagination;
    checkChannelId?: string;
    /** 查询条件 */
    keyWord?: string;
    flow?: ConsumptionFlowEnum;
    /** 记账开始时间 */
    timeBegin?: string;
    /** 记账结束时间 */
    timeEnd?: string;
  }
  interface LifePayExpensesReceiptsListOutput {
    /** 编号 */
    id?: string;
    /** 平台订单号 */
    orderNo?: string;
    /** 渠道流水号 */
    outOrderNo?: string;
    lifePayType?: LifePayTypeEnum;
    expensesReceiptsType?: ExpensesReceiptsTypeEnum;
    /** 交易金额 */
    amount?: number;
    /** 交易时间 */
    finishTime?: string;
  }
  interface LifePayExpensesReceiptsListOutputPageOutput {
    pageModel?: Pagination;
    objectData?: any;
    data?: LifePayExpensesReceiptsListOutput[];
  }
  interface LifePayExpensesReceiptsPageInput {
    pageModel?: Pagination;
    checkChannelId?: string;
    /** 查询条件 */
    keyWord?: string;
    lifePayType?: LifePayTypeEnum;
    expensesReceiptsType?: ExpensesReceiptsTypeEnum;
    /** 交易开始时间 */
    timeBegin?: string;
    /** 交易结束时间 */
    timeEnd?: string;
  }
  interface LifePayIntroInfoDetail {
    type?: IntroInfoTypeEnum;
@@ -1203,6 +1460,15 @@
    phoneNumber: string;
  }
  interface LifePayPhoneMesssageCodeLoginOutput {
    /** 用户Id */
    userId?: string;
    /** 是否是后台用户 */
    isBackClientUser?: boolean;
    /** 渠道号 */
    channlesNum?: ChannelOutput[];
  }
  interface LifePayPremiumInput {
    premiumType?: LifePayTypeEnum;
    rate?: number;
@@ -1228,6 +1494,38 @@
  }
  type LifePayRateTypeEnum = 10 | 20 | 30 | 40;
  interface LifePayRechargeReceiptsListOutput {
    /** 编号 */
    id?: string;
    /** 业务订单号 */
    orderNo?: string;
    /** 充值金额 */
    rechargeAmount?: number;
    /** 备注 */
    remark?: string;
    /** 凭证 */
    voucher?: string;
    /** 记账时间 */
    creationTime?: string;
  }
  interface LifePayRechargeReceiptsListOutputPageOutput {
    pageModel?: Pagination;
    objectData?: any;
    data?: LifePayRechargeReceiptsListOutput[];
  }
  interface LifePayRechargeReceiptsPageInput {
    pageModel?: Pagination;
    checkChannelId?: string;
    /** 查询条件 */
    keyWord?: string;
    /** 记账开始时间 */
    creationTimeBegin?: string;
    /** 记账结束时间 */
    creationTimeEnd?: string;
  }
  interface LifePayRefundOrderOutput {
    id?: string;
@@ -1292,6 +1590,13 @@
  type LifePayTypeEnum = 10 | 20;
  interface LifePayUserMesssageByIduserInput {
    pageModel?: Pagination;
    checkChannelId?: string;
    /** 用户编号 */
    id?: string;
  }
  interface LifePhoneData {
    /** 运营商编码,例如:"yidong", "dianxin", "liantong"。 */
    ispCode: string;
@@ -1338,6 +1643,12 @@
    timestamp?: string;
    timeExpire?: string;
    message?: string;
  }
  interface ModelWxPayDomesticRefundsAmount {
    refund?: number;
    total?: number;
    currency?: string;
  }
  interface ModuleApiDescriptionModel {
@@ -1435,6 +1746,11 @@
    enums?: Record<string, any>;
  }
  interface OnlineServiceInput {
    /** 在线客服链接 */
    link?: string;
  }
  interface OperateHistoryDto {
    /** 关联关系ID */
    relationId?: string;
@@ -1489,6 +1805,11 @@
  interface OrderInput {
    property?: string;
    order?: OrderTypeEnum;
  }
  interface OrderInQuiryInput {
    outTradeNo?: string;
    outRefundNo?: string;
  }
  type OrderTypeEnum = 0 | 1;
@@ -1601,6 +1922,10 @@
    providerKey?: string;
  }
  interface QueryLifePayChannlesInput {
    status?: LifePayChannelsStatsEnum;
  }
  interface QueryLifePayOrderListInput {
    pageModel?: Pagination;
    checkChannelId?: string;
@@ -1677,9 +2002,28 @@
    checkChannelId?: string;
    /** 手机号/用户名 */
    queryCondition?: string;
    /** 注册时间 */
    /** 注册开始时间 */
    creationTimeBegin?: string;
    /** 注册结束时间 */
    creationTimeEnd?: string;
    /** 登录开始时间 */
    loginTimeBegin?: string;
    /** 登录结束时间 */
    loginTimeEnd?: string;
  }
  interface ReceiptsDetail {
    /** 创建时间 */
    creationTime?: string;
    /** 金额 */
    amount?: number;
  }
  interface ReceiptsListOutPut {
    /** 30天收款 */
    receiveList?: ReceiptsDetail[];
    /** 30天收入 */
    incomeList?: ReceiptsDetail[];
  }
  interface RefundLifePayOrderInput {
@@ -1691,6 +2035,16 @@
    lifePayRefundType?: LifePayRefundTypeEnum;
    /** 退款金额 */
    refundPrice?: number;
  }
  interface RefundRoyaltyResult {
    refundAmount?: string;
    royaltyType?: string;
    resultCode?: string;
    transOut?: string;
    transOutEmail?: string;
    transIn?: string;
    transInEmail?: string;
  }
  interface RefundUserLifePayOrderInput {
@@ -1867,6 +2221,10 @@
    timeZone?: TimeZone;
  }
  interface TopStatisticsInput {
    channleList?: string[];
  }
  interface TopStatisticsOutput {
    /** 创建时间 */
    creationTime?: string;
@@ -1890,6 +2248,27 @@
    accumulatedUsers?: number;
    /** 昨日活跃用户 */
    yesterdayActiveUsers?: number;
  }
  interface TradeFundBill {
    fundChannel?: string;
    bankCode?: string;
    amount?: string;
    realAmount?: string;
    fundType?: string;
  }
  interface TradeSettleDetail {
    operationType?: string;
    operationSerial_no?: string;
    operationDt?: string;
    transOut?: string;
    transIn?: string;
    amount?: string;
  }
  interface TradeSettleInfo {
    tradeSettleDetailList?: TradeSettleDetail[];
  }
  interface TypeApiDescriptionModel {
@@ -1930,6 +2309,12 @@
  interface UpdateFeaturesDto {
    features?: UpdateFeatureDto[];
  }
  interface UpdateLifePayOrderInput {
    id?: string;
    /** 实际到账金额 */
    actualReceivedAmount?: number;
  }
  interface UpdatePassWordInput {
@@ -1990,6 +2375,8 @@
  interface UserChannleDto {
    /** 渠道Id */
    id?: string;
    /** 渠道num */
    channlesNum?: string;
    /** 渠道名 */
    name?: string;
  }
@@ -2171,6 +2558,34 @@
    unionId?: string;
  }
  interface WxPayDomesticRefundsQueryReponse {
    code?: string;
    message?: string;
    refundId?: string;
    refundStatus?: string;
    downloadUrl?: string;
    transactionId?: string;
    outTradeNo?: string;
    channel?: string;
    userReceivedAccount?: string;
    successTime?: string;
    createTime?: string;
    status?: string;
    amount?: ModelWxPayDomesticRefundsAmount;
  }
  interface WxPayTradeQueryReponse {
    code?: string;
    message?: string;
    outTradeNo?: string;
    transactionId?: string;
    tradeType?: string;
    tradeState?: string;
    tradeStateDesc?: string;
    successTime?: string;
    amount?: ModelWxPayDomesticRefundsAmount;
  }
  interface WxRechargeNotifyInput {
    id: string;
    createTime: string;
pnpm-lock.yaml
@@ -157,13 +157,13 @@
        version: 4.37.1(vue@3.5.12)
      '@tencentcloud/call-uikit-vue':
        specifier: ^3.1.5
        version: 3.3.9(react-native@0.78.0)(react@19.0.0)
        version: 3.3.9
      '@tencentcloud/chat-uikit-vue':
        specifier: ^2.0.0
        version: 2.4.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12)
        version: 2.4.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core':
        specifier: ^2.0.0
        version: 2.4.0(react-native@0.78.0)(react@19.0.0)
        version: 2.4.0
      '@videojs-player/vue':
        specifier: ^1.0.0
        version: 1.0.0(@types/video.js@7.3.58)(video.js@7.21.6)(vue@3.5.12)
@@ -591,6 +591,9 @@
      pinia:
        specifier: ^2.1.6
        version: 2.3.1(typescript@5.8.2)(vue@3.5.12)
      qrcode.vue:
        specifier: ^3.6.0
        version: 3.6.0(vue@3.5.12)
      qs:
        specifier: ^6.11.1
        version: 6.14.0
@@ -766,6 +769,9 @@
      '@vitejs/plugin-vue-jsx':
        specifier: ^4.0.1
        version: 4.1.1(vite@5.4.3)(vue@3.5.12)
      qrcode.vue:
        specifier: ^3.6.0
        version: 3.6.0(vue@3.5.12)
      vite:
        specifier: 5.4.3
        version: 5.4.3(@types/node@20.5.1)
@@ -1801,6 +1807,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.4):
    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
@@ -2070,6 +2077,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.4):
    resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
@@ -2080,15 +2088,6 @@
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.9):
    resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.4):
    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
    peerDependencies:
@@ -2097,15 +2096,6 @@
      '@babel/core': 7.21.4
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.9):
    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.4):
    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
@@ -2116,16 +2106,6 @@
      '@babel/core': 7.21.4
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.9):
    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
    engines: {node: '>=6.9.0'}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-decorators@7.22.10(@babel/core@7.21.4):
    resolution: {integrity: sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==}
@@ -2182,6 +2162,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-export-default-from@7.22.5(@babel/core@7.21.4):
    resolution: {integrity: sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ==}
@@ -2211,6 +2192,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.4):
    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
@@ -2229,6 +2211,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-function-bind@7.22.5(@babel/core@7.21.4):
    resolution: {integrity: sha512-Sjy7XIhHF9L++0Mk/3Y4H4439cjI//wc/jE8Ly3+qGPkTUYYEhe4rzMv/JnyZpekfOBL22X6DAq42I7GM/3KzA==}
@@ -2297,15 +2280,6 @@
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9):
    resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.4):
    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
    peerDependencies:
@@ -2314,15 +2288,6 @@
      '@babel/core': 7.21.4
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.9):
    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9):
    resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
@@ -2342,15 +2307,6 @@
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.9):
    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.4):
    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
    peerDependencies:
@@ -2367,6 +2323,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.4):
    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
@@ -2376,15 +2333,6 @@
      '@babel/core': 7.21.4
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.9):
    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.4):
    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
@@ -2419,6 +2367,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.4):
    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
@@ -2436,6 +2385,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-pipeline-operator@7.22.5(@babel/core@7.21.4):
    resolution: {integrity: sha512-7yuGXd+h8gpR14FnPDTTCd5TfC/1B9njNZJT29GJ7UFF/WVbzkZy7728DynrENqgImqj5xyPTQAo8si9n3QVJQ==}
@@ -2457,16 +2407,6 @@
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.9):
    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
    engines: {node: '>=6.9.0'}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-throw-expressions@7.22.5(@babel/core@7.21.4):
    resolution: {integrity: sha512-oCyfA7rDVcQIydA7ZOmnHCQTzz5JvG9arY++Z+ASL/q5q+mJLblaRNHoK6ggV54X2c14wCK/lQi7z1DujmEmZA==}
    engines: {node: '>=6.9.0'}
@@ -2486,16 +2426,6 @@
      '@babel/core': 7.21.4
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.9):
    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
    engines: {node: '>=6.9.0'}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: false
  /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.21.4):
    resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
@@ -2943,6 +2873,7 @@
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
      '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.9)
    dev: true
  /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.21.4):
    resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==}
@@ -3540,6 +3471,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.9):
    resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==}
@@ -3549,6 +3481,7 @@
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
    dev: true
  /@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.9):
    resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==}
@@ -4109,18 +4042,6 @@
    transitivePeerDependencies:
      - supports-color
  /@babel/preset-flow@7.25.9(@babel/core@7.26.9):
    resolution: {integrity: sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==}
    engines: {node: '>=6.9.0'}
    peerDependencies:
      '@babel/core': ^7.0.0-0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/helper-plugin-utils': 7.26.5
      '@babel/helper-validator-option': 7.25.9
      '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.9)
    dev: false
  /@babel/preset-modules@0.1.6(@babel/core@7.21.4):
    resolution: {integrity: sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==}
    peerDependencies:
@@ -4292,7 +4213,7 @@
      lodash: '*'
      vue: 3.5.12
    dependencies:
      '@tencentcloud/chat-uikit-engine': 2.4.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat-uikit-engine': 2.4.2
      lodash: 4.17.21
      vue: 3.5.12(typescript@4.9.5)
    dev: false
@@ -6650,86 +6571,6 @@
      wrap-ansi-cjs: /wrap-ansi@7.0.0
    dev: true
  /@isaacs/ttlcache@1.4.1:
    resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==}
    engines: {node: '>=12'}
    dev: false
  /@istanbuljs/load-nyc-config@1.1.0:
    resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
    engines: {node: '>=8'}
    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
    dev: false
  /@istanbuljs/schema@0.1.3:
    resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
    engines: {node: '>=8'}
    dev: false
  /@jest/create-cache-key-function@29.7.0:
    resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@jest/types': 29.6.3
    dev: false
  /@jest/environment@29.7.0:
    resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@jest/fake-timers': 29.7.0
      '@jest/types': 29.6.3
      '@types/node': 18.7.18
      jest-mock: 29.7.0
    dev: false
  /@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}
    dependencies:
      '@jest/types': 29.6.3
      '@sinonjs/fake-timers': 10.3.0
      '@types/node': 18.7.18
      jest-message-util: 29.7.0
      jest-mock: 29.7.0
      jest-util: 29.7.0
    dev: false
  /@jest/schemas@29.6.3:
    resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@sinclair/typebox': 0.27.8
    dev: false
  /@jest/transform@29.7.0:
    resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@babel/core': 7.26.9
      '@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.6
      slash: 3.0.0
      write-file-atomic: 4.0.2
    transitivePeerDependencies:
      - supports-color
    dev: false
  /@jest/types@26.6.2:
    resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==}
    engines: {node: '>= 10.14.2'}
@@ -6740,18 +6581,6 @@
      '@types/yargs': 15.0.19
      chalk: 4.1.2
    dev: true
  /@jest/types@29.6.3:
    resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@jest/schemas': 29.6.3
      '@types/istanbul-lib-coverage': 2.0.6
      '@types/istanbul-reports': 3.0.4
      '@types/node': 18.7.18
      '@types/yargs': 17.0.33
      chalk: 4.1.2
    dev: false
  /@jimp/bmp@0.22.12(@jimp/custom@0.22.12):
    resolution: {integrity: sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g==}
@@ -7536,6 +7365,7 @@
    dependencies:
      '@jridgewell/gen-mapping': 0.3.8
      '@jridgewell/trace-mapping': 0.3.25
    dev: true
  /@jridgewell/sourcemap-codec@1.5.0:
    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
@@ -8229,196 +8059,6 @@
    resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
    dev: true
  /@react-native/assets-registry@0.78.0:
    resolution: {integrity: sha512-PPHlTRuP9litTYkbFNkwveQFto3I94QRWPBBARU0cH/4ks4EkfCfb/Pdb3AHgtJi58QthSHKFvKTQnAWyHPs7w==}
    engines: {node: '>=18'}
    dev: false
  /@react-native/babel-plugin-codegen@0.78.0(@babel/preset-env@7.26.9):
    resolution: {integrity: sha512-+Sy9Uine0QAbQRxMl6kBlkzKW0qHQk8hghCoKswRWt1ZfxaMA3rezobD5mtSwt/Yhadds9cGbMFWfFJM3Tynsg==}
    engines: {node: '>=18'}
    dependencies:
      '@babel/traverse': 7.26.9
      '@react-native/codegen': 0.78.0(@babel/preset-env@7.26.9)
    transitivePeerDependencies:
      - '@babel/preset-env'
      - supports-color
    dev: false
  /@react-native/babel-preset@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9):
    resolution: {integrity: sha512-q44ZbR0JXdPvNrjNw75VmiVXXoJhZIx8dTUBVgnZx/UHBQuhPu0e8pAuo56E2mZVkF7FK0s087/Zji8n5OSxbQ==}
    engines: {node: '>=18'}
    peerDependencies:
      '@babel/core': '*'
    dependencies:
      '@babel/core': 7.26.9
      '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.9)
      '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.9)
      '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.9)
      '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.9)
      '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.9)
      '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-runtime': 7.26.9(@babel/core@7.26.9)
      '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9)
      '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.9)
      '@babel/template': 7.26.9
      '@react-native/babel-plugin-codegen': 0.78.0(@babel/preset-env@7.26.9)
      babel-plugin-syntax-hermes-parser: 0.25.1
      babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.9)
      react-refresh: 0.14.2
    transitivePeerDependencies:
      - '@babel/preset-env'
      - supports-color
    dev: false
  /@react-native/codegen@0.78.0(@babel/preset-env@7.26.9):
    resolution: {integrity: sha512-8iVT2VYhkalLFUWoQRGSluZZHEG93StfwQGwQ+wk1vOUlOfoT/Xqglt6DvGXIyM9gaMCr6fJBFQVrU+FrXEFYA==}
    engines: {node: '>=18'}
    peerDependencies:
      '@babel/preset-env': ^7.1.6
    dependencies:
      '@babel/parser': 7.26.9
      '@babel/preset-env': 7.26.9(@babel/core@7.26.9)
      glob: 7.2.3
      hermes-parser: 0.25.1
      invariant: 2.2.4
      jscodeshift: 17.1.2(@babel/preset-env@7.26.9)
      nullthrows: 1.1.1
      yargs: 17.7.2
    transitivePeerDependencies:
      - supports-color
    dev: false
  /@react-native/community-cli-plugin@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9):
    resolution: {integrity: sha512-LpfEU+F1hZGcxIf07aBrjlImA0hh8v76V4wTJOgxxqGDUjjQ/X6h9V+bMXne60G9gwccTtvs1G0xiKWNUPI0VQ==}
    engines: {node: '>=18'}
    peerDependencies:
      '@react-native-community/cli-server-api': '*'
    peerDependenciesMeta:
      '@react-native-community/cli-server-api':
        optional: true
    dependencies:
      '@react-native/dev-middleware': 0.78.0
      '@react-native/metro-babel-transformer': 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9)
      chalk: 4.1.2
      debug: 2.6.9
      invariant: 2.2.4
      metro: 0.81.3
      metro-config: 0.81.3
      metro-core: 0.81.3
      readline: 1.3.0
      semver: 7.7.1
    transitivePeerDependencies:
      - '@babel/core'
      - '@babel/preset-env'
      - bufferutil
      - supports-color
      - utf-8-validate
    dev: false
  /@react-native/debugger-frontend@0.78.0:
    resolution: {integrity: sha512-KQYD9QlxES/VdmXh9EEvtZCJK1KAemLlszQq4dpLU1stnue5N8dnCY6A7PpStMf5UtAMk7tiniQhaicw0uVHgQ==}
    engines: {node: '>=18'}
    dev: false
  /@react-native/dev-middleware@0.78.0:
    resolution: {integrity: sha512-zEafAZdOz4s37Jh5Xcv4hJE5qZ6uNxgrTLcpjDOJnQG6dO34/BoZeXvDrjomQFNn6ogdysR51mKJStaQ3ixp5A==}
    engines: {node: '>=18'}
    dependencies:
      '@isaacs/ttlcache': 1.4.1
      '@react-native/debugger-frontend': 0.78.0
      chrome-launcher: 0.15.2
      chromium-edge-launcher: 0.2.0
      connect: 3.7.0
      debug: 2.6.9
      invariant: 2.2.4
      nullthrows: 1.1.1
      open: 7.4.2
      selfsigned: 2.4.1
      serve-static: 1.16.2
      ws: 6.2.3
    transitivePeerDependencies:
      - bufferutil
      - supports-color
      - utf-8-validate
    dev: false
  /@react-native/gradle-plugin@0.78.0:
    resolution: {integrity: sha512-WvwgfmVs1QfFl1FOL514kz2Fs5Nkg2BGgpE8V0ild8b/UT6jCD8qh2dTI5kL0xdT0d2Xd2BxfuFN0xCLkMC+SA==}
    engines: {node: '>=18'}
    dev: false
  /@react-native/js-polyfills@0.78.0:
    resolution: {integrity: sha512-YZ9XtS77s/df7548B6dszX89ReehnA7hiab/axc30j/Mgk7Wv2woOjBKnAA4+rZ0ITLtxNwyJIMaRAc9kGznXw==}
    engines: {node: '>=18'}
    dev: false
  /@react-native/metro-babel-transformer@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9):
    resolution: {integrity: sha512-Hy/dl+zytLCRD9dp32ukcRS1Bn0gZH0h0i3AbriS6OGYgUgjAUFhXOKzZ15/G1SEq2sng91MNo/hMvo4uXoc5A==}
    engines: {node: '>=18'}
    peerDependencies:
      '@babel/core': '*'
    dependencies:
      '@babel/core': 7.26.9
      '@react-native/babel-preset': 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9)
      hermes-parser: 0.25.1
      nullthrows: 1.1.1
    transitivePeerDependencies:
      - '@babel/preset-env'
      - supports-color
    dev: false
  /@react-native/normalize-colors@0.78.0:
    resolution: {integrity: sha512-FkeLvLLaMYlGsSntixTUvlNtc1OHij4TYRtymMNPWqBKFAMXJB/qe45VxXNzWP+jD0Ok6yXineQFtktKcHk9PA==}
    dev: false
  /@react-native/virtualized-lists@0.78.0(react-native@0.78.0)(react@19.0.0):
    resolution: {integrity: sha512-ibETs3AwpkkRcORRANvZeEFjzvN41W02X882sBzoxC5XdHiZ2DucXo4fjKF7i86MhYCFLfNSIYbwupx1D1iFmg==}
    engines: {node: '>=18'}
    peerDependencies:
      '@types/react': ^19.0.0
      react: '*'
      react-native: '*'
    peerDependenciesMeta:
      '@types/react':
        optional: true
    dependencies:
      invariant: 2.2.4
      nullthrows: 1.1.1
      react: 19.0.0
      react-native: 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9)(react@19.0.0)
    dev: false
  /@release-it/conventional-changelog@8.0.2(release-it@17.11.0):
    resolution: {integrity: sha512-WpnWWRr7O0JeLoiejLrPEWnnwFhCscBn1wBTAXeitiz2/Ifaol0s+t8otf/HYq/OiQOri2iH8d0CnVb72tBdIQ==}
    engines: {node: ^18.18.0 || ^20.9.0 || ^22.0.0}
@@ -8696,10 +8336,6 @@
  /@sideway/pinpoint@2.0.0:
    resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
  /@sinclair/typebox@0.27.8:
    resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
    dev: false
  /@sindresorhus/is@0.14.0:
    resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==}
    engines: {node: '>=6'}
@@ -8713,18 +8349,6 @@
  /@sindresorhus/merge-streams@2.3.0:
    resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
    engines: {node: '>=18'}
  /@sinonjs/commons@3.0.1:
    resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
    dependencies:
      type-detect: 4.0.8
    dev: false
  /@sinonjs/fake-timers@10.3.0:
    resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
    dependencies:
      '@sinonjs/commons': 3.0.1
    dev: false
  /@stencil/core@2.22.3:
    resolution: {integrity: sha512-kmVA0M/HojwsfkeHsifvHVIYe4l5tin7J5+DLgtl8h6WWfiMClND5K3ifCXXI2ETDNKiEk21p6jql3Fx9o2rng==}
@@ -8947,7 +8571,7 @@
      '@tanstack/match-sorter-utils': 8.19.4
      '@tanstack/query-core': 4.36.1
      '@vue/devtools-api': 6.6.4
      vue: 3.5.12(typescript@4.9.5)
      vue: 3.5.12(typescript@5.8.2)
      vue-demi: 0.13.11(vue@3.5.12)
    dev: false
@@ -9896,113 +9520,88 @@
      - whiskers
    dev: true
  /@tencentcloud/call-engine-js@2.9.3(react-native@0.78.0)(react@19.0.0):
  /@tencentcloud/call-engine-js@2.9.3:
    resolution: {integrity: sha512-UtE3K7yIS9ECuvSscm6GA6aCpuaN06A3gfzmzXmhBEVjNTkiP5eCug7hHSMIYmR0sa5ILask4+Tki2NLq+A8Cw==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      core-js: 3.41.0
      eventemitter3: 4.0.7
      rtc-detect: 0.0.5
      trtc-cloud-js-sdk: 2.8.7
      tuikit-logger: 0.0.4-beta.1
    transitivePeerDependencies:
      - react
      - react-native
    dev: false
  /@tencentcloud/call-uikit-vue2.6@3.3.9(react-native@0.78.0)(react@19.0.0)(vue@3.5.12):
  /@tencentcloud/call-uikit-vue2.6@3.3.9(vue@3.5.12):
    resolution: {integrity: sha512-EWXc+wqGXlWSmkR/ucKdwPpe+tOXwtYDL2wUD3C/XW4pmKldtxRIIWIzDzo9upPTeojZMfIIoOC/che7wwE9KQ==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      '@tencentcloud/tui-core': 2.4.0
      '@vue/composition-api': 1.7.2(vue@3.5.12)
      tuicall-engine-webrtc: 3.1.6(react-native@0.78.0)(react@19.0.0)
      tuicall-engine-webrtc: 3.1.6
    transitivePeerDependencies:
      - react
      - react-native
      - vue
    dev: false
  /@tencentcloud/call-uikit-vue2.6@4.0.2(react-native@0.78.0)(react@19.0.0)(vue@3.5.12):
    resolution: {integrity: sha512-v6F8jFGsqY5aCZh+ML1xFVUGARhsi4c5jOJ/gk1+kmwfrc6NnvMFAAfBnpW+Wcqqd17v2gOgNHi/MkPUBk8LbA==}
  /@tencentcloud/call-uikit-vue2.6@4.0.3(vue@3.5.12):
    resolution: {integrity: sha512-DgsqCK4biGp/SVgbTjxKP9rQrxzEsN6x4qSjonLjiiT7BVT9pLlx8Mwxzv+MchPE9CGSqu440Lm/98uRkVlhRQ==}
    dependencies:
      '@tencentcloud/call-engine-js': 2.9.3(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-engine-js': 2.9.3
      '@tencentcloud/chat': 3.5.3
      '@tencentcloud/tui-core': 2.4.0
      '@vue/composition-api': 1.7.2(vue@3.5.12)
    transitivePeerDependencies:
      - react
      - react-native
      - vue
    dev: false
  /@tencentcloud/call-uikit-vue2@3.3.9(react-native@0.78.0)(react@19.0.0):
  /@tencentcloud/call-uikit-vue2@3.3.9:
    resolution: {integrity: sha512-xAa1eQGoYj6PKoaSLxNXHPXTO5A/ld8A5Oy9Ps3qjEQWaOIkei8cqJfRX5tUJiQSeNJAxME/GrqLueIARshnTg==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      tuicall-engine-webrtc: 3.1.6(react-native@0.78.0)(react@19.0.0)
    transitivePeerDependencies:
      - react
      - react-native
      '@tencentcloud/chat': 3.5.3
      '@tencentcloud/tui-core': 2.4.0
      tuicall-engine-webrtc: 3.1.6
    dev: false
  /@tencentcloud/call-uikit-vue2@4.0.2(react-native@0.78.0)(react@19.0.0):
    resolution: {integrity: sha512-LabzsWQ38ob0Y56jl9+okOzkYc8pqqvIC9AxRd0E4L/ZLpMuCuGtRSc7ZEOb/sY0EA2yE7oM/L4rlug2q1UerQ==}
  /@tencentcloud/call-uikit-vue2@4.0.3:
    resolution: {integrity: sha512-xfPoIW/XEl8EGo/mOYA4z8BDgz+dmH5K+BjKGdFzLNuNZ8n5YxFuwDqrJTCVAl9ydijeJ+DhO68F5jQgsdDMkw==}
    dependencies:
      '@tencentcloud/call-engine-js': 2.9.3(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
    transitivePeerDependencies:
      - react
      - react-native
      '@tencentcloud/call-engine-js': 2.9.3
      '@tencentcloud/chat': 3.5.3
      '@tencentcloud/tui-core': 2.4.0
    dev: false
  /@tencentcloud/call-uikit-vue@3.3.9(react-native@0.78.0)(react@19.0.0):
  /@tencentcloud/call-uikit-vue@3.3.9:
    resolution: {integrity: sha512-fFwQSAU+PVqantxbabRZa268BBBcv+hIX265Ag3ogYcrKq/hEo8XyH7nkjZL8wkQ2hFvnkwUgMMLXVeAgyMsng==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      tuicall-engine-webrtc: 3.1.6(react-native@0.78.0)(react@19.0.0)
    transitivePeerDependencies:
      - react
      - react-native
      '@tencentcloud/chat': 3.5.3
      '@tencentcloud/tui-core': 2.4.0
      tuicall-engine-webrtc: 3.1.6
    dev: false
  /@tencentcloud/call-uikit-vue@4.0.2(react-native@0.78.0)(react@19.0.0):
    resolution: {integrity: sha512-VkVkB2Ug0T4/3fZoqf8aCE8b1Vwif9VNWITmvq/q2PT2bp4KsCaYLa7MuvaB9WBuxkuzIiRamGqS7bGoi7FWwA==}
  /@tencentcloud/call-uikit-vue@4.0.3:
    resolution: {integrity: sha512-EeZ0Q3x8igY5Ny5ghSD0T6seBiE3eDf0NagThASdGnD8+k6/GwBgD5HEBH8DrLpkC65rAMxf0ylE8JZPYilPQw==}
    dependencies:
      '@tencentcloud/call-engine-js': 2.9.3(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
    transitivePeerDependencies:
      - react
      - react-native
      '@tencentcloud/call-engine-js': 2.9.3
      '@tencentcloud/chat': 3.5.3
      '@tencentcloud/tui-core': 2.4.0
    dev: false
  /@tencentcloud/chat-uikit-engine@2.3.3(react-native@0.78.0)(react@19.0.0):
  /@tencentcloud/chat-uikit-engine@2.3.3:
    resolution: {integrity: sha512-DHORxHgcyLstIYqMt09RzPjxAZ5N5p4fK7BYBDMEWsIQSXpcQJQKeGEu4eOZIaHtc9ih28EcPAdoZuvJoQiWlA==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      tim-profanity-filter-plugin: 1.1.0
      tim-upload-plugin: 1.4.2
    transitivePeerDependencies:
      - react
      - react-native
    dev: false
  /@tencentcloud/chat-uikit-engine@2.4.2(react-native@0.78.0)(react@19.0.0):
  /@tencentcloud/chat-uikit-engine@2.4.2:
    resolution: {integrity: sha512-L5rr1mO98S1Uz5IndJ2QdGv++5zbSUTnGSz4x3rKx5lWXlcJzSo1RY9DxYcWTKQKos9bG2d4JIIeg4DlfGb+Pg==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      tim-profanity-filter-plugin: 1.1.0
      tim-upload-plugin: 1.4.2
    transitivePeerDependencies:
      - react
      - react-native
    dev: false
  /@tencentcloud/chat-uikit-vue@2.3.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12):
  /@tencentcloud/chat-uikit-vue@2.3.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12):
    resolution: {integrity: sha512-m5p9D03YGiVGvvNO7cxGi+fvD4xiZNmDqPtuUt7/wd61uvir5xNXx6OU7unkIxA8lr9tfp6NlJhinGqGhwzXVg==}
    peerDependencies:
      '@tiptap/core': ^2.0.0-beta.220
@@ -10015,14 +9614,14 @@
      '@tiptap/pm': ^2.0.0-beta.220
      '@tiptap/suggestion': ^2.0.0-beta.220
    dependencies:
      '@tencentcloud/call-uikit-vue': 4.0.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-uikit-vue2': 4.0.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-uikit-vue2.6': 4.0.2(react-native@0.78.0)(react@19.0.0)(vue@3.5.12)
      '@tencentcloud/chat-uikit-engine': 2.4.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/roomkit-web-vue3': 2.9.1(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-uikit-vue': 4.0.3
      '@tencentcloud/call-uikit-vue2': 4.0.3
      '@tencentcloud/call-uikit-vue2.6': 4.0.3(vue@3.5.12)
      '@tencentcloud/chat-uikit-engine': 2.4.2
      '@tencentcloud/roomkit-web-vue3': 2.9.1(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core': 2.4.0
      '@tencentcloud/tui-customer-service-plugin': 2.2.6(@tencentcloud/tui-core@2.4.0)(vue@3.5.12)
      '@tencentcloud/tui-emoji-plugin': 2.4.3(react-native@0.78.0)(react@19.0.0)(vue@3.5.12)
      '@tencentcloud/tui-emoji-plugin': 2.4.3(vue@3.5.12)
      '@tencentcloud/universal-api': 2.4.0
      '@tiptap/core': 2.11.5(@tiptap/pm@2.11.5)
      '@tiptap/extension-document': 2.11.5(@tiptap/core@2.11.5)
@@ -10038,13 +9637,11 @@
    transitivePeerDependencies:
      - '@vue/composition-api'
      - pinia
      - react
      - react-native
      - typescript
      - vue
    dev: false
  /@tencentcloud/chat-uikit-vue@2.4.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12):
  /@tencentcloud/chat-uikit-vue@2.4.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12):
    resolution: {integrity: sha512-kHksYi/HZleA74PjbNshBoImF5a1PQ9SuD2guyoz6CjGouJm7NqdfO5EY/b1E5qS8RR9QskYkv/xJa+kliU8uQ==}
    peerDependencies:
      '@tiptap/core': ^2.0.0-beta.220
@@ -10057,14 +9654,14 @@
      '@tiptap/pm': ^2.0.0-beta.220
      '@tiptap/suggestion': ^2.0.0-beta.220
    dependencies:
      '@tencentcloud/call-uikit-vue': 3.3.9(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-uikit-vue2': 3.3.9(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-uikit-vue2.6': 3.3.9(react-native@0.78.0)(react@19.0.0)(vue@3.5.12)
      '@tencentcloud/chat-uikit-engine': 2.4.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/roomkit-web-vue3': 2.8.2(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-uikit-vue': 3.3.9
      '@tencentcloud/call-uikit-vue2': 3.3.9
      '@tencentcloud/call-uikit-vue2.6': 3.3.9(vue@3.5.12)
      '@tencentcloud/chat-uikit-engine': 2.4.2
      '@tencentcloud/roomkit-web-vue3': 2.8.2(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core': 2.4.0
      '@tencentcloud/tui-customer-service-plugin': 2.2.6(@tencentcloud/tui-core@2.4.0)(vue@3.5.12)
      '@tencentcloud/tui-emoji-plugin': 2.4.3(react-native@0.78.0)(react@19.0.0)(vue@3.5.12)
      '@tencentcloud/tui-emoji-plugin': 2.4.3(vue@3.5.12)
      '@tencentcloud/universal-api': 2.4.0
      '@tiptap/core': 2.11.5(@tiptap/pm@2.11.5)
      '@tiptap/extension-document': 2.11.5(@tiptap/core@2.11.5)
@@ -10085,43 +9682,25 @@
    transitivePeerDependencies:
      - '@vue/composition-api'
      - pinia
      - react
      - react-native
      - typescript
      - vue
    dev: false
  /@tencentcloud/chat@3.5.2(react-native@0.78.0)(react@19.0.0):
    resolution: {integrity: sha512-UuGswGE3jaPgAFHA5kMDASI4Vq5p3lzeK9YisN5kkl9dcxh7BKbxTp5qtD8Fy7tj4VcWbytCb6ytCufmThbDXA==}
    dependencies:
      '@tencentcloud/react-native-push': 1.1.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/uni-app-push': 1.1.0
    transitivePeerDependencies:
      - react
      - react-native
  /@tencentcloud/chat@3.5.3:
    resolution: {integrity: sha512-1iC9CW+8sMcUtZXjB+97N65uyqRAV73InfKCzXtU/igxPqT8nfzfkrcjhi7JfywaKR3jGC1j8tDpsFNlLepFqQ==}
    dev: false
  /@tencentcloud/react-native-push@1.1.0(react-native@0.78.0)(react@19.0.0):
    resolution: {integrity: sha512-6TvPhNnKrBvd6j9dUwFLpkmV9WkdkaQstNvzdK1nIWQgWCTJGFnyiNDEn8zwN2VZkG+MzjYwNqMcVkMMU9Ao2g==}
    peerDependencies:
      react: '*'
      react-native: '>= 0.75'
    dependencies:
      react: 19.0.0
      react-native: 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9)(react@19.0.0)
    dev: false
  /@tencentcloud/roomkit-web-vue3@2.8.2(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12):
  /@tencentcloud/roomkit-web-vue3@2.8.2(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12):
    resolution: {integrity: sha512-A3H1/Sn/g0F8yg7/kgbzwOmVaZKyOO4b9xfKvRv3+Tfu1/qji0dKUHxnnb23QDtMb70GPrd9PXNANaP2qjQCdw==}
    peerDependencies:
      pinia: ^2.1.7
      vue: 3.5.12
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat-uikit-engine': 2.3.3(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat-uikit-vue': 2.3.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tuiroom-engine-js': 2.9.1(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      '@tencentcloud/chat-uikit-engine': 2.3.3
      '@tencentcloud/chat-uikit-vue': 2.3.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core': 2.4.0
      '@tencentcloud/tuiroom-engine-js': 2.9.1
      '@tencentcloud/universal-api': 2.4.0
      '@tiptap/core': 2.11.5(@tiptap/pm@2.11.5)
      '@tiptap/extension-document': 2.11.5(@tiptap/core@2.11.5)
@@ -10140,22 +9719,20 @@
      vue: 3.5.12(typescript@4.9.5)
    transitivePeerDependencies:
      - '@vue/composition-api'
      - react
      - react-native
      - typescript
    dev: false
  /@tencentcloud/roomkit-web-vue3@2.9.1(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12):
  /@tencentcloud/roomkit-web-vue3@2.9.1(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12):
    resolution: {integrity: sha512-jxrxeV+HRYRrFMu6HzJ60Pjcop7qWzeliIIqlklHE5xiDr3WFQEXJTN7rozyOyK+EvOYzSezrLsaIEPVAwUFVQ==}
    peerDependencies:
      pinia: ^2.1.7
      vue: 3.5.12
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat-uikit-engine': 2.3.3(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat-uikit-vue': 2.3.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(react-native@0.78.0)(react@19.0.0)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tuiroom-engine-js': 2.9.1(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      '@tencentcloud/chat-uikit-engine': 2.3.3
      '@tencentcloud/chat-uikit-vue': 2.3.3(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(pinia@2.3.1)(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/tui-core': 2.4.0
      '@tencentcloud/tuiroom-engine-js': 2.9.1
      '@tencentcloud/uikit-base-component-vue3': 0.3.1(typescript@4.9.5)(vue@3.5.12)
      '@tencentcloud/universal-api': 2.4.0
      '@tiptap/core': 2.11.5(@tiptap/pm@2.11.5)
@@ -10175,20 +9752,15 @@
      vue: 3.5.12(typescript@4.9.5)
    transitivePeerDependencies:
      - '@vue/composition-api'
      - react
      - react-native
      - typescript
    dev: false
  /@tencentcloud/tui-core@2.4.0(react-native@0.78.0)(react@19.0.0):
  /@tencentcloud/tui-core@2.4.0:
    resolution: {integrity: sha512-OFXHoi8CQlPtWvNRLApg0wonWbW79uoTgAqqffqWO1icx3xDYd2RZDHMzpBexOsE3CHpWokrfXrqiXkpOmYWew==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      tim-profanity-filter-plugin: 1.1.0
      tim-upload-plugin: 1.4.2
    transitivePeerDependencies:
      - react
      - react-native
    dev: false
  /@tencentcloud/tui-customer-service-plugin@2.2.6(@tencentcloud/tui-core@2.4.0)(vue@3.5.12):
@@ -10201,37 +9773,31 @@
      '@vue/composition-api':
        optional: true
    dependencies:
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0
      '@tencentcloud/universal-api': 2.4.0
      marked: 4.0.0
      vue: 3.5.12(typescript@4.9.5)
    dev: false
  /@tencentcloud/tui-emoji-plugin@2.4.3(react-native@0.78.0)(react@19.0.0)(vue@3.5.12):
  /@tencentcloud/tui-emoji-plugin@2.4.3(vue@3.5.12):
    resolution: {integrity: sha512-Y31S+C/HOJ5cZvi6hsjMRgeUrGFEuEM3fpvHT44TcX4SnypPsVErHBwlWnyp/5LBGBrZ6GszpgziRU1Uw0uKVw==}
    peerDependencies:
      vue: 3.5.12
    dependencies:
      '@tencentcloud/chat-uikit-engine': 2.4.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat-uikit-engine': 2.4.2
      '@tencentcloud/tui-core': 2.4.0
      '@tencentcloud/universal-api': 2.4.0
      '@vue/composition-api': 1.7.2(vue@3.5.12)
      vue: 3.5.12(typescript@4.9.5)
    transitivePeerDependencies:
      - react
      - react-native
    dev: false
  /@tencentcloud/tuiroom-engine-js@2.9.1(react-native@0.78.0)(react@19.0.0):
  /@tencentcloud/tuiroom-engine-js@2.9.1:
    resolution: {integrity: sha512-8qJihr7BVjQ6pkuU1YUC9CHQ+8squg7pUcIjeu3NzMgfygiAXboeAfxUkmqiAvR7Cde2QUsG7OyUdXm/Gnl/NA==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      rtc-detect: 0.0.5
      tcplayer.js: 4.9.1
      trtc-cloud-js-sdk: 2.8.7
    transitivePeerDependencies:
      - react
      - react-native
    dev: false
  /@tencentcloud/uikit-base-component-vue3@0.3.1(typescript@4.9.5)(vue@3.5.12):
@@ -10243,11 +9809,6 @@
      vue: 3.5.12(typescript@4.9.5)
    transitivePeerDependencies:
      - typescript
    dev: false
  /@tencentcloud/uni-app-push@1.1.0:
    resolution: {integrity: sha512-9z8zgAxExwuxzuxq1sFK3jmRJOKG/BNL8i9v+a3jVK/R7XL7ROE5EPWh4gRYABb9DC48NK9hwx2RFqPTlbR/xg==}
    engines: {HBuilderX: ^3.6.8}
    dev: false
  /@tencentcloud/universal-api@2.4.0:
@@ -10406,35 +9967,6 @@
    resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
    dev: true
  /@types/babel__core@7.20.5:
    resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
    dependencies:
      '@babel/parser': 7.26.9
      '@babel/types': 7.26.9
      '@types/babel__generator': 7.6.8
      '@types/babel__template': 7.4.4
      '@types/babel__traverse': 7.20.6
    dev: false
  /@types/babel__generator@7.6.8:
    resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
    dependencies:
      '@babel/types': 7.26.9
    dev: false
  /@types/babel__template@7.4.4:
    resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
    dependencies:
      '@babel/parser': 7.26.9
      '@babel/types': 7.26.9
    dev: false
  /@types/babel__traverse@7.20.6:
    resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
    dependencies:
      '@babel/types': 7.26.9
    dev: false
  /@types/body-parser@1.19.5:
    resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
    dependencies:
@@ -10544,12 +10076,6 @@
      '@types/minimatch': 5.1.2
      '@types/node': 18.7.18
  /@types/graceful-fs@4.1.9:
    resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
    dependencies:
      '@types/node': 18.7.18
    dev: false
  /@types/html-minifier-terser@6.1.0:
    resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==}
    dev: true
@@ -10566,16 +10092,19 @@
  /@types/istanbul-lib-coverage@2.0.6:
    resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
    dev: true
  /@types/istanbul-lib-report@3.0.3:
    resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
    dependencies:
      '@types/istanbul-lib-coverage': 2.0.6
    dev: true
  /@types/istanbul-reports@3.0.4:
    resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
    dependencies:
      '@types/istanbul-lib-report': 3.0.3
    dev: true
  /@types/js-cookie@3.0.6:
    resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==}
@@ -10656,6 +10185,7 @@
    resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
    dependencies:
      '@types/node': 18.7.18
    dev: true
  /@types/node@12.20.55:
    resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
@@ -10741,10 +10271,6 @@
      '@types/node': 18.7.18
    dev: true
  /@types/stack-utils@2.0.3:
    resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
    dev: false
  /@types/svgo@2.6.4:
    resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
    dependencies:
@@ -10809,18 +10335,13 @@
  /@types/yargs-parser@21.0.3:
    resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
    dev: true
  /@types/yargs@15.0.19:
    resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==}
    dependencies:
      '@types/yargs-parser': 21.0.3
    dev: true
  /@types/yargs@17.0.33:
    resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
    dependencies:
      '@types/yargs-parser': 21.0.3
    dev: false
  /@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@4.9.5):
    resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==}
@@ -12499,6 +12020,7 @@
    engines: {node: '>=6.5'}
    dependencies:
      event-target-shim: 5.0.1
    dev: true
  /abortcontroller-polyfill@1.7.8:
    resolution: {integrity: sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==}
@@ -12510,6 +12032,7 @@
    dependencies:
      mime-types: 2.1.35
      negotiator: 0.6.3
    dev: true
  /acorn-globals@7.0.1:
    resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
@@ -12778,10 +12301,6 @@
    resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==}
    dev: false
  /anser@1.4.10:
    resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==}
    dev: false
  /ansi-align@3.0.1:
    resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
    dependencies:
@@ -12856,11 +12375,6 @@
    engines: {node: '>=8'}
    dependencies:
      color-convert: 2.0.1
  /ansi-styles@5.2.0:
    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
    engines: {node: '>=10'}
    dev: false
  /ansi-styles@6.2.1:
    resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
@@ -13105,13 +12619,6 @@
      tslib: 2.8.1
    dev: true
  /ast-types@0.16.1:
    resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
    engines: {node: '>=4'}
    dependencies:
      tslib: 2.8.1
    dev: false
  /astral-regex@1.0.0:
    resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==}
    engines: {node: '>=4'}
@@ -13124,10 +12631,6 @@
  /async-function@1.0.0:
    resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
    engines: {node: '>= 0.4'}
  /async-limiter@1.0.1:
    resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
    dev: false
  /async-retry@1.2.1:
    resolution: {integrity: sha512-FadV8UDcyZDjzb6eV7MCJj0bfrNjwKw7/X0QHPFCbYP6T20FXgZCYXpJKlQC8RxEQP1E6Xs8pNHdh3bcrZAuAw==}
@@ -13437,24 +12940,6 @@
      - supports-color
    dev: true
  /babel-jest@29.7.0(@babel/core@7.26.9):
    resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    peerDependencies:
      '@babel/core': ^7.8.0
    dependencies:
      '@babel/core': 7.26.9
      '@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.9)
      chalk: 4.1.2
      graceful-fs: 4.2.11
      slash: 3.0.0
    transitivePeerDependencies:
      - supports-color
    dev: false
  /babel-loader@8.2.1(@babel/core@7.26.9)(webpack@5.98.0):
    resolution: {integrity: sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==}
    engines: {node: '>= 8.9'}
@@ -13496,29 +12981,6 @@
    transitivePeerDependencies:
      - supports-color
    dev: true
  /babel-plugin-istanbul@6.1.1:
    resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
    engines: {node: '>=8'}
    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
    dev: false
  /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}
    dependencies:
      '@babel/template': 7.26.9
      '@babel/types': 7.26.9
      '@types/babel__core': 7.20.5
      '@types/babel__traverse': 7.20.6
    dev: false
  /babel-plugin-lodash@3.3.4:
    resolution: {integrity: sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==}
@@ -13660,12 +13122,6 @@
  /babel-plugin-syntax-function-bind@6.13.0:
    resolution: {integrity: sha512-m8yMoh9LIiNyeLdQs5I9G+3YXo4nqVsKQkk7YplrG4qAFbNi9hkZlow8HDHxhH9QOVFPHmy8+03NzRCdyChIKw==}
    dev: true
  /babel-plugin-syntax-hermes-parser@0.25.1:
    resolution: {integrity: sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==}
    dependencies:
      hermes-parser: 0.25.1
    dev: false
  /babel-plugin-syntax-object-rest-spread@6.13.0:
    resolution: {integrity: sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w==}
@@ -13940,14 +13396,6 @@
      babel-runtime: 6.26.0
    dev: true
  /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.26.9):
    resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==}
    dependencies:
      '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.9)
    transitivePeerDependencies:
      - '@babel/core'
    dev: false
  /babel-plugin-transform-function-bind@6.22.0:
    resolution: {integrity: sha512-9Ec4KYf1GurT39mlUjDSlN7HWSlB3u3mWRMogQbb+Y88lO0ZM3rJ0ADhPnQwWK9TbO6e/4E+Et1rrfGY9mFimA==}
    dependencies:
@@ -13991,29 +13439,6 @@
      lodash: 4.17.21
    dev: false
  /babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.9):
    resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
    peerDependencies:
      '@babel/core': ^7.0.0
    dependencies:
      '@babel/core': 7.26.9
      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.9)
      '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.9)
      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.9)
      '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9)
      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9)
      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.9)
      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.9)
      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9)
      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.9)
      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.9)
    dev: false
  /babel-preset-es2015@6.24.1:
    resolution: {integrity: sha512-XfwUqG1Ry6R43m4Wfob+vHbIVBIqTg/TJY4Snku1iIzeH7mUnwHA8Vagmv+ZQbPwhS8HgsdQvy28Py3k5zpoFQ==}
    deprecated: '🙌  Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update!'
@@ -14045,17 +13470,6 @@
    transitivePeerDependencies:
      - supports-color
    dev: true
  /babel-preset-jest@29.6.3(@babel/core@7.26.9):
    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
    dependencies:
      '@babel/core': 7.26.9
      babel-plugin-jest-hoist: 29.6.3
      babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9)
    dev: false
  /babel-preset-stage-0@6.24.1:
    resolution: {integrity: sha512-MJD+xBbpsApbKlzAX0sOBF+VeFaUmv5s8FSOO7SSZpes1QgphCjq/UIGRFWSmQ/0i5bqQjLGCTXGGXqcLQ9JDA==}
@@ -14436,12 +13850,6 @@
      node-releases: 2.0.19
      update-browserslist-db: 1.1.3(browserslist@4.24.4)
  /bser@2.1.1:
    resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
    dependencies:
      node-int64: 0.4.0
    dev: false
  /btoa-lite@1.0.0:
    resolution: {integrity: sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==}
    dev: true
@@ -14706,6 +14114,7 @@
  /camelcase@6.3.0:
    resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
    engines: {node: '>=10'}
    dev: true
  /camelcase@8.0.0:
    resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
@@ -14907,36 +14316,10 @@
    dev: false
    optional: true
  /chrome-launcher@0.15.2:
    resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==}
    engines: {node: '>=12.13.0'}
    hasBin: true
    dependencies:
      '@types/node': 18.7.18
      escape-string-regexp: 4.0.0
      is-wsl: 2.2.0
      lighthouse-logger: 1.4.2
    transitivePeerDependencies:
      - supports-color
    dev: false
  /chrome-trace-event@1.0.4:
    resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
    engines: {node: '>=6.0'}
    dev: true
  /chromium-edge-launcher@0.2.0:
    resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==}
    dependencies:
      '@types/node': 18.7.18
      escape-string-regexp: 4.0.0
      is-wsl: 2.2.0
      lighthouse-logger: 1.4.2
      mkdirp: 1.0.4
      rimraf: 3.0.2
    transitivePeerDependencies:
      - supports-color
    dev: false
  /ci-info@2.0.0:
    resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
@@ -14944,6 +14327,7 @@
  /ci-info@3.9.0:
    resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
    engines: {node: '>=8'}
    dev: true
  /ci-info@4.1.0:
    resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==}
@@ -15249,11 +14633,6 @@
    engines: {node: '>=16'}
    dev: true
  /commander@12.1.0:
    resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
    engines: {node: '>=18'}
    dev: false
  /commander@13.1.0:
    resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
    engines: {node: '>=18'}
@@ -15264,6 +14643,7 @@
  /commander@2.20.3:
    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
    dev: true
  /commander@4.1.1:
    resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
@@ -15461,6 +14841,7 @@
      utils-merge: 1.0.1
    transitivePeerDependencies:
      - supports-color
    dev: true
  /consola@2.15.3:
    resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
@@ -16803,6 +16184,7 @@
  /depd@2.0.0:
    resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
    engines: {node: '>= 0.8'}
    dev: true
  /deprecation@2.3.1:
    resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
@@ -17226,10 +16608,12 @@
  /encodeurl@1.0.2:
    resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
    engines: {node: '>= 0.8'}
    dev: true
  /encodeurl@2.0.0:
    resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
    engines: {node: '>= 0.8'}
    dev: true
  /end-of-stream@1.4.4:
    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
@@ -17342,12 +16726,6 @@
    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
    dependencies:
      is-arrayish: 0.2.1
  /error-stack-parser@2.1.4:
    resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
    dependencies:
      stackframe: 1.3.4
    dev: false
  /es-abstract@1.23.9:
    resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
@@ -17940,11 +17318,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'}
    dev: false
  /escape-string-regexp@4.0.0:
    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
@@ -18634,6 +18007,7 @@
  /etag@1.8.1:
    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
    engines: {node: '>= 0.6'}
    dev: true
  /event-emitter@0.3.5:
    resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
@@ -18645,6 +18019,7 @@
  /event-target-shim@5.0.1:
    resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
    engines: {node: '>=6'}
    dev: true
  /eventemitter3@4.0.7:
    resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
@@ -18748,10 +18123,6 @@
    dependencies:
      homedir-polyfill: 1.0.3
    dev: true
  /exponential-backoff@3.1.2:
    resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==}
    dev: false
  /expr-parser@1.0.0:
    resolution: {integrity: sha512-ncuWTCWH0M5KbaYikXxZ3FG3Q+FTYIEXeXAbxYscdZLFNnR5Le5gRU2r/a/JUZHnxwBDZcxWEWzCoPQlW9Engg==}
@@ -18957,12 +18328,6 @@
      websocket-driver: 0.7.4
    dev: true
  /fb-watchman@2.0.2:
    resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
    dependencies:
      bser: 2.1.1
    dev: false
  /fd-slicer@1.1.0:
    resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
    dependencies:
@@ -19119,6 +18484,7 @@
      unpipe: 1.0.0
    transitivePeerDependencies:
      - supports-color
    dev: true
  /finalhandler@1.3.1:
    resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
@@ -19255,15 +18621,6 @@
  /flatted@3.3.3:
    resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
  /flow-enums-runtime@0.0.6:
    resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==}
    dev: false
  /flow-parser@0.263.0:
    resolution: {integrity: sha512-F0Tr7SUvZ4BQYglFOkr8rCTO5FPjCwMhm/6i57h40F80Oz/hzzkqte4lGO0vGJ7THQonuXcTyYqCdKkAwt5d2w==}
    engines: {node: '>=0.4.0'}
    dev: false
  /follow-redirects@1.15.9:
    resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
    engines: {node: '>=4.0'}
@@ -19356,6 +18713,7 @@
  /fresh@0.5.2:
    resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
    engines: {node: '>= 0.6'}
    dev: true
  /from2@2.3.0:
    resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
@@ -19498,11 +18856,6 @@
      has-symbols: 1.1.0
      hasown: 2.0.2
      math-intrinsics: 1.1.0
  /get-package-type@0.1.0:
    resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
    engines: {node: '>=8.0.0'}
    dev: false
  /get-port@5.1.1:
    resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
@@ -19969,6 +19322,7 @@
  /globalthis@1.0.4:
    resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
    engines: {node: '>= 0.4'}
    requiresBuild: true
    dependencies:
      define-properties: 1.2.1
      gopd: 1.2.0
@@ -20304,16 +19658,6 @@
      capital-case: 1.0.4
      tslib: 2.8.1
  /hermes-estree@0.25.1:
    resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
    dev: false
  /hermes-parser@0.25.1:
    resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
    dependencies:
      hermes-estree: 0.25.1
    dev: false
  /hey-listen@1.0.8:
    resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
    dev: false
@@ -20511,6 +19855,7 @@
      setprototypeof: 1.2.0
      statuses: 2.0.1
      toidentifier: 1.0.1
    dev: true
  /http-parser-js@0.5.9:
    resolution: {integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==}
@@ -20734,15 +20079,8 @@
    resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
    engines: {node: '>=0.10.0'}
    hasBin: true
    requiresBuild: true
    dev: true
  /image-size@1.2.0:
    resolution: {integrity: sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==}
    engines: {node: '>=16.x'}
    hasBin: true
    dependencies:
      queue: 6.0.2
    dev: false
  /immediate@3.0.6:
    resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
@@ -20955,6 +20293,7 @@
    resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
    dependencies:
      loose-envify: 1.4.0
    dev: true
  /ip-address@9.0.5:
    resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
@@ -21122,6 +20461,7 @@
    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
    engines: {node: '>=8'}
    hasBin: true
    dev: true
  /is-docker@3.0.0:
    resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
@@ -21520,6 +20860,7 @@
    engines: {node: '>=8'}
    dependencies:
      is-docker: 2.2.1
    dev: true
  /is-wsl@3.1.0:
    resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
@@ -21586,24 +20927,6 @@
      lodash.uniqby: 4.7.0
    dev: true
  /istanbul-lib-coverage@3.2.2:
    resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
    engines: {node: '>=8'}
    dev: false
  /istanbul-lib-instrument@5.2.1:
    resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
    engines: {node: '>=8'}
    dependencies:
      '@babel/core': 7.26.9
      '@babel/parser': 7.26.9
      '@istanbuljs/schema': 0.1.3
      istanbul-lib-coverage: 3.2.2
      semver: 6.3.1
    transitivePeerDependencies:
      - supports-color
    dev: false
  /isurl@1.0.0:
    resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==}
    engines: {node: '>= 4'}
@@ -21663,95 +20986,6 @@
    resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==}
    dev: true
  /jest-environment-node@29.7.0:
    resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@jest/environment': 29.7.0
      '@jest/fake-timers': 29.7.0
      '@jest/types': 29.6.3
      '@types/node': 18.7.18
      jest-mock: 29.7.0
      jest-util: 29.7.0
    dev: false
  /jest-get-type@29.6.3:
    resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dev: false
  /jest-haste-map@29.7.0:
    resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@jest/types': 29.6.3
      '@types/graceful-fs': 4.1.9
      '@types/node': 18.7.18
      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
    dev: false
  /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}
    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
    dev: false
  /jest-mock@29.7.0:
    resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@jest/types': 29.6.3
      '@types/node': 18.7.18
      jest-util: 29.7.0
    dev: false
  /jest-regex-util@29.6.3:
    resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dev: false
  /jest-util@29.7.0:
    resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@jest/types': 29.6.3
      '@types/node': 18.7.18
      chalk: 4.1.2
      ci-info: 3.9.0
      graceful-fs: 4.2.11
      picomatch: 2.3.1
    dev: false
  /jest-validate@29.7.0:
    resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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
    dev: false
  /jest-worker@27.5.1:
    resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
    engines: {node: '>= 10.13.0'}
@@ -21760,16 +20994,6 @@
      merge-stream: 2.0.0
      supports-color: 8.1.1
    dev: true
  /jest-worker@29.7.0:
    resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@types/node': 18.7.18
      jest-util: 29.7.0
      merge-stream: 2.0.0
      supports-color: 8.1.1
    dev: false
  /jimp@0.22.12:
    resolution: {integrity: sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==}
@@ -21879,43 +21103,6 @@
  /jsbn@1.1.0:
    resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
    dev: true
  /jsc-safe-url@0.2.4:
    resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==}
    dev: false
  /jscodeshift@17.1.2(@babel/preset-env@7.26.9):
    resolution: {integrity: sha512-uime4vFOiZ1o3ICT4Sm/AbItHEVw2oCxQ3a0egYVy3JMMOctxe07H3SKL1v175YqjMt27jn1N+3+Bj9SKDNgdQ==}
    engines: {node: '>=16'}
    hasBin: true
    peerDependencies:
      '@babel/preset-env': ^7.1.6
    peerDependenciesMeta:
      '@babel/preset-env':
        optional: true
    dependencies:
      '@babel/core': 7.26.9
      '@babel/parser': 7.26.9
      '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.9)
      '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.9)
      '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.9)
      '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.9)
      '@babel/preset-env': 7.26.9(@babel/core@7.26.9)
      '@babel/preset-flow': 7.25.9(@babel/core@7.26.9)
      '@babel/preset-typescript': 7.26.0(@babel/core@7.26.9)
      '@babel/register': 7.25.9(@babel/core@7.26.9)
      flow-parser: 0.263.0
      graceful-fs: 4.2.11
      micromatch: 4.0.8
      neo-async: 2.6.2
      picocolors: 1.1.1
      recast: 0.23.11
      tmp: 0.2.3
      write-file-atomic: 5.0.1
    transitivePeerDependencies:
      - supports-color
    dev: false
  /jsdom@21.1.2:
    resolution: {integrity: sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ==}
@@ -22283,11 +21470,6 @@
    resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==}
    engines: {node: '>=0.10.0'}
  /leven@3.1.0:
    resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
    engines: {node: '>=6'}
    dev: false
  /levn@0.4.1:
    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
    engines: {node: '>= 0.8.0'}
@@ -22303,15 +21485,6 @@
    resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
    dependencies:
      immediate: 3.0.6
  /lighthouse-logger@1.4.2:
    resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==}
    dependencies:
      debug: 2.6.9
      marky: 1.2.5
    transitivePeerDependencies:
      - supports-color
    dev: false
  /lightningcss-darwin-arm64@1.29.2:
    resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==}
@@ -22923,12 +22096,6 @@
    resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
    dev: true
  /makeerror@1.0.12:
    resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
    dependencies:
      tmpl: 1.0.5
    dev: false
  /map-cache@0.2.2:
    resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
    engines: {node: '>=0.10.0'}
@@ -22990,10 +22157,6 @@
    resolution: {integrity: sha512-7E3m/xIlymrFL5gWswIT4CheIE3fDeh51NV09M4x8iOc7NDYlyERcQMLAIHcSlrvwliwbPQ4OGD+MpPSYiQcqw==}
    engines: {node: '>= 16'}
    hasBin: true
    dev: false
  /marky@1.2.5:
    resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==}
    dev: false
  /matcher@3.0.0:
@@ -23112,10 +22275,6 @@
      fs-monkey: 1.0.6
    dev: true
  /memoize-one@5.2.1:
    resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
    dev: false
  /memoize-one@6.0.0:
    resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
@@ -23222,6 +22381,7 @@
  /merge-stream@2.0.0:
    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
    dev: true
  /merge2@1.4.1:
    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
@@ -23231,86 +22391,6 @@
    resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
    engines: {node: '>= 0.6'}
    dev: true
  /metro-babel-transformer@0.81.3:
    resolution: {integrity: sha512-ENqtnPy2mQZFOuKrbqHRcAwZuaYe43X+30xIF0xlkLuMyCvc0CsFzrrSK9EqrQwexhVlqaRALb0GQbBMcE/y8g==}
    engines: {node: '>=18.18'}
    dependencies:
      '@babel/core': 7.26.9
      flow-enums-runtime: 0.0.6
      hermes-parser: 0.25.1
      nullthrows: 1.1.1
    transitivePeerDependencies:
      - supports-color
    dev: false
  /metro-cache-key@0.81.3:
    resolution: {integrity: sha512-KPsPSRUd6uRva7k7k/DqiiD8td7URQWx0RkX/Cj5+bed5zSXEg/XoQA+b+DmMxS5C7TqP61Fh3XvHx6TQRW82A==}
    engines: {node: '>=18.18'}
    dependencies:
      flow-enums-runtime: 0.0.6
    dev: false
  /metro-cache@0.81.3:
    resolution: {integrity: sha512-6UelMQYjlto/79tTXu0vsTxAX4e+Bkf0tgtDL1BNx3wd68pBg8qKIYpJPaUlOIaNUzFXTBDjYwUverkEW0KAtA==}
    engines: {node: '>=18.18'}
    dependencies:
      exponential-backoff: 3.1.2
      flow-enums-runtime: 0.0.6
      metro-core: 0.81.3
    dev: false
  /metro-config@0.81.3:
    resolution: {integrity: sha512-WpTaT0iQr5juVY50Y/cyacG2ggZqF38VshEQepT+ovPK8E/xUVxlbO5yxLSXUxxUXX3Hka9r6g64+y2WC6c/xQ==}
    engines: {node: '>=18.18'}
    dependencies:
      connect: 3.7.0
      cosmiconfig: 5.2.1
      flow-enums-runtime: 0.0.6
      jest-validate: 29.7.0
      metro: 0.81.3
      metro-cache: 0.81.3
      metro-core: 0.81.3
      metro-runtime: 0.81.3
    transitivePeerDependencies:
      - bufferutil
      - supports-color
      - utf-8-validate
    dev: false
  /metro-core@0.81.3:
    resolution: {integrity: sha512-WZ+qohnpvvSWdPj1VJPUrZz+2ik29M+UUpMU6YrmzQUfDyZ6JYHhzlw5WVBtwpt/+2xTsIyrZ2C1fByT/DsLQA==}
    engines: {node: '>=18.18'}
    dependencies:
      flow-enums-runtime: 0.0.6
      lodash.throttle: 4.1.1
      metro-resolver: 0.81.3
    dev: false
  /metro-file-map@0.81.3:
    resolution: {integrity: sha512-F+t4lnVRoauJxtr9xmI4pWIOE77/vl0IrHDGeJSI9cW6LmuqxkpOlZHTKpbs/hMAo6+KhG2JMJACQDvXDLd/GA==}
    engines: {node: '>=18.18'}
    dependencies:
      debug: 2.6.9
      fb-watchman: 2.0.2
      flow-enums-runtime: 0.0.6
      graceful-fs: 4.2.11
      invariant: 2.2.4
      jest-worker: 29.7.0
      micromatch: 4.0.8
      nullthrows: 1.1.1
      walker: 1.0.8
    transitivePeerDependencies:
      - supports-color
    dev: false
  /metro-minify-terser@0.81.3:
    resolution: {integrity: sha512-912AYv3OmwcbUwzCdWbdQRk+RV6kXXluHKlhBdYFD3kr4Ece691rzlofU/Mlt9qZrhHtctD5Q8cFqOEf9Z69bQ==}
    engines: {node: '>=18.18'}
    dependencies:
      flow-enums-runtime: 0.0.6
      terser: 5.39.0
    dev: false
  /metro-react-native-babel-preset@0.72.4(@babel/core@7.26.9):
    resolution: {integrity: sha512-YGCVaYe1H5fOFktdDdL9IwAyiXjPh1t2eZZFp3KFJak6fxKpN+q5PPhe1kzMa77dbCAqgImv43zkfGa6i27eyA==}
@@ -23359,142 +22439,6 @@
    transitivePeerDependencies:
      - supports-color
    dev: true
  /metro-resolver@0.81.3:
    resolution: {integrity: sha512-XnjENY1c6jcsEfFVIjN/8McUIInCVgGxv5eva+9ZWeCTyiAE/L5HPj2ai/Myb349+6QuSMR0dscTkKCnOwWXdw==}
    engines: {node: '>=18.18'}
    dependencies:
      flow-enums-runtime: 0.0.6
    dev: false
  /metro-runtime@0.81.3:
    resolution: {integrity: sha512-neuGRMC2pgGKIFPbmbrxW41/SmvL7OX4i1LN+saUY2t1cZfxf9haQHUMCGhO3498uEL2N+ulKRSlQrHt6XwGaw==}
    engines: {node: '>=18.18'}
    dependencies:
      '@babel/runtime': 7.26.9
      flow-enums-runtime: 0.0.6
    dev: false
  /metro-source-map@0.81.3:
    resolution: {integrity: sha512-BHJJurmDQRn3hCbBawh/UHzPz3duMpwpE3ofImO2DoWHYzn6nSg/D4wfCN4y14d9fFLE4e0I+BAOX1HWNP4jsw==}
    engines: {node: '>=18.18'}
    dependencies:
      '@babel/traverse': 7.26.9
      '@babel/traverse--for-generate-function-map': /@babel/traverse@7.26.9
      '@babel/types': 7.26.9
      flow-enums-runtime: 0.0.6
      invariant: 2.2.4
      metro-symbolicate: 0.81.3
      nullthrows: 1.1.1
      ob1: 0.81.3
      source-map: 0.5.7
      vlq: 1.0.1
    transitivePeerDependencies:
      - supports-color
    dev: false
  /metro-symbolicate@0.81.3:
    resolution: {integrity: sha512-LQLT6WopQmIz2SDSVh3Lw7nLzF58HpsrPYqRB7RpRXBYhYmPFIjiGaP8qqtKHXczM/5YAOJzpgt8t/OGZgh6Eg==}
    engines: {node: '>=18.18'}
    hasBin: true
    dependencies:
      flow-enums-runtime: 0.0.6
      invariant: 2.2.4
      metro-source-map: 0.81.3
      nullthrows: 1.1.1
      source-map: 0.5.7
      vlq: 1.0.1
    transitivePeerDependencies:
      - supports-color
    dev: false
  /metro-transform-plugins@0.81.3:
    resolution: {integrity: sha512-4JMUXhBB5y4h3dyA272k7T7+U3+J4fSBcct0Y8Yur9ziZB/dK8fieEQg5ZPfEGsgOGI+54zTzOUqga6AgmZSNg==}
    engines: {node: '>=18.18'}
    dependencies:
      '@babel/core': 7.26.9
      '@babel/generator': 7.26.9
      '@babel/template': 7.26.9
      '@babel/traverse': 7.26.9
      flow-enums-runtime: 0.0.6
      nullthrows: 1.1.1
    transitivePeerDependencies:
      - supports-color
    dev: false
  /metro-transform-worker@0.81.3:
    resolution: {integrity: sha512-KZqm9sVyBKRygUxRm+yP4DguE9R1EEv28KJhIxghNp5dcdVXBYUPe1xHoc3QVdzD9c3tf8JFzA2FBlKTlwMwNg==}
    engines: {node: '>=18.18'}
    dependencies:
      '@babel/core': 7.26.9
      '@babel/generator': 7.26.9
      '@babel/parser': 7.26.9
      '@babel/types': 7.26.9
      flow-enums-runtime: 0.0.6
      metro: 0.81.3
      metro-babel-transformer: 0.81.3
      metro-cache: 0.81.3
      metro-cache-key: 0.81.3
      metro-minify-terser: 0.81.3
      metro-source-map: 0.81.3
      metro-transform-plugins: 0.81.3
      nullthrows: 1.1.1
    transitivePeerDependencies:
      - bufferutil
      - supports-color
      - utf-8-validate
    dev: false
  /metro@0.81.3:
    resolution: {integrity: sha512-upilFs7z1uLKvdzFYHiVKrGT/uC7h7d53R0g/FaJoQvLfA8jQG2V69jeOcGi4wCsFYvl1zBSZvKxpQb0nA3giQ==}
    engines: {node: '>=18.18'}
    hasBin: true
    dependencies:
      '@babel/code-frame': 7.26.2
      '@babel/core': 7.26.9
      '@babel/generator': 7.26.9
      '@babel/parser': 7.26.9
      '@babel/template': 7.26.9
      '@babel/traverse': 7.26.9
      '@babel/types': 7.26.9
      accepts: 1.3.8
      chalk: 4.1.2
      ci-info: 2.0.0
      connect: 3.7.0
      debug: 2.6.9
      error-stack-parser: 2.1.4
      flow-enums-runtime: 0.0.6
      graceful-fs: 4.2.11
      hermes-parser: 0.25.1
      image-size: 1.2.0
      invariant: 2.2.4
      jest-worker: 29.7.0
      jsc-safe-url: 0.2.4
      lodash.throttle: 4.1.1
      metro-babel-transformer: 0.81.3
      metro-cache: 0.81.3
      metro-cache-key: 0.81.3
      metro-config: 0.81.3
      metro-core: 0.81.3
      metro-file-map: 0.81.3
      metro-resolver: 0.81.3
      metro-runtime: 0.81.3
      metro-source-map: 0.81.3
      metro-symbolicate: 0.81.3
      metro-transform-plugins: 0.81.3
      metro-transform-worker: 0.81.3
      mime-types: 2.1.35
      nullthrows: 1.1.1
      serialize-error: 2.1.0
      source-map: 0.5.7
      throat: 5.0.0
      ws: 7.5.10
      yargs: 17.7.2
    transitivePeerDependencies:
      - bufferutil
      - supports-color
      - utf-8-validate
    dev: false
  /micromark@2.11.4:
    resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
@@ -23587,6 +22531,7 @@
    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
    engines: {node: '>=4'}
    hasBin: true
    dev: true
  /mime@2.5.2:
    resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==}
@@ -24160,6 +23105,7 @@
  /negotiator@0.6.3:
    resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
    engines: {node: '>= 0.6'}
    dev: true
  /negotiator@0.6.4:
    resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
@@ -24168,6 +23114,7 @@
  /neo-async@2.6.2:
    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
    dev: true
  /netmask@2.0.2:
    resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
@@ -24243,6 +23190,7 @@
  /node-forge@1.3.1:
    resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
    engines: {node: '>= 6.13.0'}
    dev: true
  /node-hex@1.0.1:
    resolution: {integrity: sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ==}
@@ -24255,10 +23203,6 @@
      css-select: 4.3.0
      he: 1.2.0
    dev: true
  /node-int64@0.4.0:
    resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
    dev: false
  /node-readfiles@0.2.0:
    resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==}
@@ -24423,10 +23367,6 @@
      boolbase: 1.0.0
    dev: true
  /nullthrows@1.1.1:
    resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==}
    dev: false
  /num2fraction@1.2.2:
    resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==}
@@ -24506,13 +23446,6 @@
  /oauth-sign@0.9.0:
    resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
    dev: true
  /ob1@0.81.3:
    resolution: {integrity: sha512-wd8zdH0DWsn2iDVn2zT/QURihcqoc73K8FhNCmQ16qkJaoYJLNb/N+huOwdCgsbNP8Lk/s1+dPnDETx+RzsrWA==}
    engines: {node: '>=18.18'}
    dependencies:
      flow-enums-runtime: 0.0.6
    dev: false
  /object-assign@4.1.1:
    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
@@ -24624,12 +23557,14 @@
    engines: {node: '>= 0.8'}
    dependencies:
      ee-first: 1.1.1
    dev: true
  /on-finished@2.4.1:
    resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
    engines: {node: '>= 0.8'}
    dependencies:
      ee-first: 1.1.1
    dev: true
  /on-headers@1.0.2:
    resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
@@ -24677,14 +23612,6 @@
      is-inside-container: 1.0.0
      is-wsl: 3.1.0
    dev: true
  /open@7.4.2:
    resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
    engines: {node: '>=8'}
    dependencies:
      is-docker: 2.2.1
      is-wsl: 2.2.0
    dev: false
  /open@8.4.2:
    resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
@@ -25164,6 +24091,7 @@
  /parseurl@1.3.3:
    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
    engines: {node: '>= 0.8'}
    dev: true
  /pascal-case@3.1.2:
    resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
@@ -26642,15 +25570,6 @@
      react-is: 17.0.2
    dev: true
  /pretty-format@29.7.0:
    resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
    dependencies:
      '@jest/schemas': 29.6.3
      ansi-styles: 5.2.0
      react-is: 18.3.1
    dev: false
  /pretty-time@1.1.0:
    resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==}
    engines: {node: '>=4'}
@@ -26688,12 +25607,6 @@
  /promise-polyfill@7.1.2:
    resolution: {integrity: sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ==}
  /promise@8.3.0:
    resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==}
    dependencies:
      asap: 2.0.6
    dev: false
  /prop-types@15.8.1:
    resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -26938,6 +25851,13 @@
    hasBin: true
    dev: true
  /qrcode.vue@3.6.0(vue@3.5.12):
    resolution: {integrity: sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg==}
    peerDependencies:
      vue: 3.5.12
    dependencies:
      vue: 3.5.12(typescript@5.8.2)
  /qrcode@1.5.4:
    resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
    engines: {node: '>=10.13.0'}
@@ -27001,12 +25921,6 @@
  /queue-microtask@1.2.3:
    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
  /queue@6.0.2:
    resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
    dependencies:
      inherits: 2.0.4
    dev: false
  /quick-lru@1.1.0:
    resolution: {integrity: sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==}
    engines: {node: '>=4'}
@@ -27030,6 +25944,7 @@
  /range-parser@1.2.1:
    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
    engines: {node: '>= 0.6'}
    dev: true
  /raw-body@2.5.2:
    resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
@@ -27071,16 +25986,6 @@
      strip-json-comments: 2.0.1
    dev: true
  /react-devtools-core@6.1.1:
    resolution: {integrity: sha512-TFo1MEnkqE6hzAbaztnyR5uLTMoz6wnEWwWBsCUzNt+sVXJycuRJdDqvL078M4/h65BI/YO5XWTaxZDWVsW0fw==}
    dependencies:
      shell-quote: 1.8.2
      ws: 7.5.10
    transitivePeerDependencies:
      - bufferutil
      - utf-8-validate
    dev: false
  /react-is@16.13.1:
    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
    dev: false
@@ -27089,86 +25994,15 @@
    resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
    dev: true
  /react-is@18.3.1:
    resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
    dev: false
  /react-native@0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9)(react@19.0.0):
    resolution: {integrity: sha512-3PO4tNvCN6BdAKcoY70v1sLfxYCmDR4KS1VTY+kIBKy5Qznp27QNxL7zBQjvS6Jp91gc8N82QbysQrfBlwg9gQ==}
    engines: {node: '>=18'}
    hasBin: true
    peerDependencies:
      '@types/react': ^19.0.0
      react: ^19.0.0
    peerDependenciesMeta:
      '@types/react':
        optional: true
    dependencies:
      '@jest/create-cache-key-function': 29.7.0
      '@react-native/assets-registry': 0.78.0
      '@react-native/codegen': 0.78.0(@babel/preset-env@7.26.9)
      '@react-native/community-cli-plugin': 0.78.0(@babel/core@7.26.9)(@babel/preset-env@7.26.9)
      '@react-native/gradle-plugin': 0.78.0
      '@react-native/js-polyfills': 0.78.0
      '@react-native/normalize-colors': 0.78.0
      '@react-native/virtualized-lists': 0.78.0(react-native@0.78.0)(react@19.0.0)
      abort-controller: 3.0.0
      anser: 1.4.10
      ansi-regex: 5.0.1
      babel-jest: 29.7.0(@babel/core@7.26.9)
      babel-plugin-syntax-hermes-parser: 0.25.1
      base64-js: 1.5.1
      chalk: 4.1.2
      commander: 12.1.0
      event-target-shim: 5.0.1
      flow-enums-runtime: 0.0.6
      glob: 7.2.3
      invariant: 2.2.4
      jest-environment-node: 29.7.0
      memoize-one: 5.2.1
      metro-runtime: 0.81.3
      metro-source-map: 0.81.3
      nullthrows: 1.1.1
      pretty-format: 29.7.0
      promise: 8.3.0
      react: 19.0.0
      react-devtools-core: 6.1.1
      react-refresh: 0.14.2
      regenerator-runtime: 0.13.11
      scheduler: 0.25.0
      semver: 7.7.1
      stacktrace-parser: 0.1.11
      whatwg-fetch: 3.6.20
      ws: 6.2.3
      yargs: 17.7.2
    transitivePeerDependencies:
      - '@babel/core'
      - '@babel/preset-env'
      - '@react-native-community/cli-server-api'
      - bufferutil
      - supports-color
      - utf-8-validate
    dev: false
  /react-refresh@0.11.0:
    resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==}
    engines: {node: '>=0.10.0'}
    dev: true
  /react-refresh@0.14.2:
    resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
    engines: {node: '>=0.10.0'}
    dev: false
  /react-refresh@0.4.3:
    resolution: {integrity: sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==}
    engines: {node: '>=0.10.0'}
    dev: true
  /react@19.0.0:
    resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
    engines: {node: '>=0.10.0'}
    dev: false
  /read-cache@1.0.0:
    resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
@@ -27333,21 +26167,6 @@
    resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
    engines: {node: '>= 14.18.0'}
  /readline@1.3.0:
    resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==}
    dev: false
  /recast@0.23.11:
    resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
    engines: {node: '>= 4'}
    dependencies:
      ast-types: 0.16.1
      esprima: 4.0.1
      source-map: 0.6.1
      tiny-invariant: 1.3.3
      tslib: 2.8.1
    dev: false
  /rechoir@0.6.2:
    resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
    engines: {node: '>= 0.10'}
@@ -27401,6 +26220,7 @@
  /regenerator-runtime@0.13.11:
    resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
    dev: true
  /regenerator-runtime@0.14.1:
    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
@@ -28279,10 +27099,6 @@
      xmlchars: 2.2.0
    dev: true
  /scheduler@0.25.0:
    resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
    dev: false
  /schema-utils@2.7.1:
    resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
    engines: {node: '>= 8.9.0'}
@@ -28365,6 +27181,7 @@
    dependencies:
      '@types/node-forge': 1.3.11
      node-forge: 1.3.1
    dev: true
  /semver-compare@1.0.0:
    resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
@@ -28436,6 +27253,7 @@
      statuses: 2.0.1
    transitivePeerDependencies:
      - supports-color
    dev: true
  /senin-help@1.0.5(@tanstack/vue-query@4.37.1)(axios@1.7.7)(dayjs@1.11.13)(element-plus@2.9.5)(file-saver@2.0.5)(lodash@4.17.21)(semver@7.7.1)(vue@3.5.12)(xlsx-style@0.8.13)(xlsx@0.18.5):
    resolution: {integrity: sha512-Tr8eI1N0z3S4iql2cy0xTDccNYs9AT4oHyT+vIPm1f+5cU7DDRYLhG7aWUsBmMi7oeHQBO+Jj/1toHGRbAYqjw==}
@@ -28536,11 +27354,6 @@
      tslib: 2.8.1
      upper-case-first: 2.0.2
  /serialize-error@2.1.0:
    resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==}
    engines: {node: '>=0.10.0'}
    dev: false
  /serialize-error@7.0.1:
    resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
    engines: {node: '>=10'}
@@ -28581,6 +27394,7 @@
      send: 0.19.0
    transitivePeerDependencies:
      - supports-color
    dev: true
  /set-blocking@2.0.0:
    resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
@@ -28631,6 +27445,7 @@
  /setprototypeof@1.2.0:
    resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
    dev: true
  /shallow-clone@3.0.1:
    resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
@@ -28663,6 +27478,7 @@
  /shell-quote@1.8.2:
    resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==}
    engines: {node: '>= 0.4'}
    dev: true
  /shelljs@0.8.5:
    resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==}
@@ -28754,6 +27570,7 @@
  /signal-exit@4.1.0:
    resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
    engines: {node: '>=14'}
    dev: true
  /sirv@2.0.4:
    resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
@@ -29148,6 +27965,7 @@
  /sprintf-js@1.1.3:
    resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
    requiresBuild: true
    dev: true
  /ssf@0.11.2:
@@ -29195,22 +28013,9 @@
    deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
    dev: true
  /stack-utils@2.0.6:
    resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
    engines: {node: '>=10'}
    dependencies:
      escape-string-regexp: 2.0.0
    dev: false
  /stackframe@1.3.4:
    resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
  /stacktrace-parser@0.1.11:
    resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==}
    engines: {node: '>=6'}
    dependencies:
      type-fest: 0.7.1
    dev: false
    dev: true
  /state-toggle@1.0.3:
    resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==}
@@ -29230,6 +28035,7 @@
  /statuses@2.0.1:
    resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
    engines: {node: '>= 0.8'}
    dev: true
  /std-env@3.8.1:
    resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==}
@@ -30039,6 +28845,7 @@
    engines: {node: '>=10'}
    dependencies:
      has-flag: 4.0.0
    dev: true
  /supports-hyperlinks@2.3.0:
    resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==}
@@ -30288,15 +29095,7 @@
      acorn: 8.14.1
      commander: 2.20.3
      source-map-support: 0.5.21
  /test-exclude@6.0.0:
    resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
    engines: {node: '>=8'}
    dependencies:
      '@istanbuljs/schema': 0.1.3
      glob: 7.2.3
      minimatch: 3.1.2
    dev: false
    dev: true
  /text-extensions@1.9.0:
    resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
@@ -30339,10 +29138,6 @@
      schema-utils: 4.3.0
      webpack: 5.98.0(@swc/core@1.3.96)
    dev: true
  /throat@5.0.0:
    resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==}
    dev: false
  /throat@6.0.2:
    resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==}
@@ -30411,10 +29206,6 @@
    resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
    dev: false
  /tiny-invariant@1.3.3:
    resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
    dev: false
  /tiny-pinyin@1.3.2:
    resolution: {integrity: sha512-uHNGu4evFt/8eNLldazeAM1M8JrMc1jshhJJfVRARTN3yT8HEEibofeQ7QETWQ5ISBjd6fKtTVBCC/+mGS6FpA==}
    dev: false
@@ -30446,15 +29237,6 @@
    dependencies:
      os-tmpdir: 1.0.2
    dev: true
  /tmp@0.2.3:
    resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
    engines: {node: '>=14.14'}
    dev: false
  /tmpl@1.0.5:
    resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
    dev: false
  /to-array@0.1.4:
    resolution: {integrity: sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==}
@@ -30514,6 +29296,7 @@
  /toidentifier@1.0.1:
    resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
    engines: {node: '>=0.6'}
    dev: true
  /token-types@4.2.1:
    resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==}
@@ -30743,15 +29526,12 @@
      typescript: 5.8.2
    dev: true
  /tuicall-engine-webrtc@3.1.6(react-native@0.78.0)(react@19.0.0):
  /tuicall-engine-webrtc@3.1.6:
    resolution: {integrity: sha512-NdRwZTHbqp4LnDEoRfQDa7Z1oH4g156j27awgy2PYO4dBtm7EjAJLFKZeaZZzErU67uW4EuSBRMeCeFx91JKpQ==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat': 3.5.3
      rtc-ai-denoiser: 1.1.7
      trtc-cloud-js-sdk: 2.8.7
    transitivePeerDependencies:
      - react
      - react-native
    dev: false
  /tuikit-logger@0.0.4-beta.1:
@@ -30781,11 +29561,6 @@
    dependencies:
      prelude-ls: 1.2.1
  /type-detect@4.0.8:
    resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
    engines: {node: '>=4'}
    dev: false
  /type-fest@0.13.1:
    resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
    engines: {node: '>=10'}
@@ -30808,11 +29583,6 @@
  /type-fest@0.6.0:
    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
    engines: {node: '>=8'}
  /type-fest@0.7.1:
    resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==}
    engines: {node: '>=8'}
    dev: false
  /type-fest@0.8.1:
    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
@@ -31231,6 +30001,7 @@
  /unpipe@1.0.0:
    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
    engines: {node: '>= 0.8'}
    dev: true
  /unplugin-auto-import@0.16.7:
    resolution: {integrity: sha512-w7XmnRlchq6YUFJVFGSvG1T/6j8GrdYN6Em9Wf0Ye+HXgD/22kont+WnuCAA0UaUoxtuvRR1u/mXKy63g/hfqQ==}
@@ -31342,7 +30113,7 @@
      minimatch: 9.0.5
      mlly: 1.7.4
      unplugin: 1.16.1
      vue: 3.5.12(typescript@4.9.5)
      vue: 3.5.12(typescript@5.8.2)
    transitivePeerDependencies:
      - rollup
      - supports-color
@@ -31581,6 +30352,7 @@
  /utils-merge@1.0.1:
    resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
    engines: {node: '>= 0.4.0'}
    dev: true
  /uuid@3.4.0:
    resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
@@ -32017,10 +30789,6 @@
      fsevents: 2.3.3
    dev: true
  /vlq@1.0.1:
    resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==}
    dev: false
  /vm2@3.9.19:
    resolution: {integrity: sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==}
    engines: {node: '>=6.0'}
@@ -32077,7 +30845,7 @@
      '@vue/composition-api':
        optional: true
    dependencies:
      vue: 3.5.12(typescript@4.9.5)
      vue: 3.5.12(typescript@5.8.2)
  /vue-eslint-parser@10.1.1(eslint@8.57.1):
    resolution: {integrity: sha512-bh2Z/Au5slro9QJ3neFYLanZtb1jH+W2bKqGHXAoYD4vZgNG3KeotL7JpPv5xzY4UXUXJl7TrIsnzECH63kd3Q==}
@@ -32308,12 +31076,6 @@
    dependencies:
      xml-name-validator: 4.0.0
    dev: true
  /walker@1.0.8:
    resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
    dependencies:
      makeerror: 1.0.12
    dev: false
  /watchpack@2.4.2:
    resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==}
@@ -32761,34 +31523,13 @@
    dependencies:
      imurmurhash: 0.1.4
      signal-exit: 3.0.7
  /write-file-atomic@5.0.1:
    resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
    dependencies:
      imurmurhash: 0.1.4
      signal-exit: 4.1.0
    dev: false
    dev: true
  /write@1.0.3:
    resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==}
    engines: {node: '>=4'}
    dependencies:
      mkdirp: 0.5.6
    dev: false
  /ws@6.2.3:
    resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==}
    peerDependencies:
      bufferutil: ^4.0.1
      utf-8-validate: ^5.0.2
    peerDependenciesMeta:
      bufferutil:
        optional: true
      utf-8-validate:
        optional: true
    dependencies:
      async-limiter: 1.0.1
    dev: false
  /ws@7.5.10:
@@ -32802,6 +31543,7 @@
        optional: true
      utf-8-validate:
        optional: true
    dev: true
  /ws@8.18.1:
    resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}