react-toolkits 2.22.8 → 2.22.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +297 -26
- package/lib/chunk-3OYXD4UE.js +1 -0
- package/lib/chunk-4GULXGNG.js +1 -0
- package/lib/chunk-7NM3DK6A.js +1 -0
- package/lib/chunk-FXPGR372.js +0 -0
- package/lib/chunk-JIBSYGRB.js +1 -0
- package/lib/chunk-JTDKSGJR.js +1 -0
- package/lib/chunk-K5HXGCZ4.js +1 -0
- package/lib/chunk-LRMME3YZ.js +2 -0
- package/lib/chunk-OLM4QNJB.js +1 -0
- package/lib/chunk-P5SX5RW3.js +1 -0
- package/lib/chunk-RITI5HRV.js +1 -0
- package/lib/chunk-TRRCT3ST.js +1 -0
- package/lib/chunk-TYDTFWYK.js +1 -0
- package/lib/chunk-WHOTHZUW.js +1 -0
- package/lib/chunk-X6ZI7RL7.js +1 -0
- package/lib/chunk-XQERUQGQ.js +1 -0
- package/lib/chunk-XWIQENHQ.js +2 -0
- package/lib/components.d.ts +530 -0
- package/lib/components.js +1 -0
- package/lib/components.js.map +1 -0
- package/lib/constants.d.ts +11 -0
- package/lib/constants.js +1 -0
- package/lib/constants.js.map +1 -0
- package/lib/createMenuItem-HUQG2HQY.js +1 -0
- package/lib/index.css.map +1 -0
- package/lib/index.d.ts +20 -789
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -0
- package/lib/menuItemList-AS6ZDOTZ.js +1 -0
- package/lib/modules.d.ts +7 -0
- package/lib/modules.js +1 -0
- package/lib/modules.js.map +1 -0
- package/lib/pages.d.ts +20 -0
- package/lib/pages.js +1 -0
- package/lib/pages.js.map +1 -0
- package/lib/roleDetail-PFVKUPYB.js +1 -0
- package/lib/roleList-AHH4PNYW.js +1 -0
- package/lib/services.d.ts +196 -0
- package/lib/services.js +1 -0
- package/lib/services.js.map +1 -0
- package/lib/types-DVKf5poe.d.ts +19 -0
- package/lib/types.d.ts +23 -0
- package/lib/types.js +1 -0
- package/lib/types.js.map +1 -0
- package/lib/updateMenuItem-7SUIOBXS.js +1 -0
- package/lib/userDetail-JJNDBV5T.js +1 -0
- package/lib/userList-KX3POGAU.js +1 -0
- package/lib/utils.d.ts +6 -0
- package/lib/utils.js +1 -0
- package/lib/utils.js.map +1 -0
- package/locale/chunk-GHHHKGNN.js +1 -0
- package/locale/context.js +9 -1
- package/locale/context.js.map +1 -0
- package/locale/en_GB.js +96 -1
- package/locale/en_GB.js.map +1 -0
- package/locale/hooks.js +29 -1
- package/locale/hooks.js.map +1 -0
- package/locale/index.js +29 -1
- package/locale/index.js.map +1 -0
- package/locale/ja_JP.js +96 -1
- package/locale/ja_JP.js.map +1 -0
- package/locale/ko_KR.js +96 -1
- package/locale/ko_KR.js.map +1 -0
- package/locale/zh_CN.js +96 -1
- package/locale/zh_CN.js.map +1 -0
- package/package.json +30 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/index.ts","../src/components/drawer/stores.ts","../src/components/drawer/drawer.tsx","../src/components/drawer/formDrawer.tsx","../src/constants/index.ts","../src/locale/en_GB.ts","../src/stores/context.ts","../src/stores/game.ts","../src/stores/token.ts","../src/stores/index.ts","../src/components/toolkitsProvider/ToolkitsProvider.tsx","../src/locale/hooks.ts","../src/components/dynamicTags/DynamicTags.tsx","../src/components/expandableParagraph/ExpandableParagraph.tsx","../src/components/filterFormWrapper/FilterFormWrapper.tsx","../src/components/highlight/Highlight.tsx","../src/libs/ky.ts","../src/queryKeys.ts","../src/services/index.ts","../src/components/infiniteList/stores.ts","../src/components/infiniteList/InfiniteList.tsx","../src/components/navMenu/stores.ts","../src/components/navMenu/utils.tsx","../src/components/navMenu/NavMenu.tsx","../src/components/requireGame/RequireGame.tsx","../src/components/userWidget/UserWidget.tsx","../src/components/layout/GameSelect.tsx","../src/components/logo/Logo.tsx","../src/components/layout/LayoutHeader.tsx","../src/components/layout/Layout.tsx","../src/components/modal/stores.ts","../src/components/modal/modal.tsx","../src/components/modal/formModal.tsx","../src/components/permissionButton/PermissionButton.tsx","../src/components/queryList/stores.ts","../src/components/queryList/QueryList.tsx","../src/components/requirePermission/RequirePermission.tsx"],"names":["get","useState","jsx","useCallback","store","locale","useMemo","useRef","useEffect","jsxs","theme","Space","Button","Fragment","App","request","options","ky","response","createStore","create","newInstances","data","Form","persist","createJSONStorage","memo","NavMenu","Spin","Antd","Typography","Link","Layout","devtools","subscribeWithSelector","isEqual","QueryListAction","useQuery","cloneElement","useImperativeHandle","Result","Table","forwardRef"],"mappings":"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","file":"components.js","sourcesContent":["import type { StateStorage } from 'zustand/middleware'\n\n// 通过 SessionStorage 隔离数据,防止多开页面时的数据冲突。\n// 当 SessionStorage 不存在时,使用 LocalStorage。\nexport const mixedStorage: StateStorage = {\n getItem: (name: string): string | null => {\n return sessionStorage.getItem(name) || localStorage.getItem(name)\n },\n setItem: (name: string, value: string) => {\n sessionStorage.setItem(name, value)\n localStorage.setItem(name, value)\n },\n removeItem(name: string) {\n sessionStorage.removeItem(name)\n localStorage.removeItem(name)\n },\n}\n\n/**\n * 生成唯一 ID 的函数\n * 使用时间戳 + 随机数 + 计数器的组合来确保唯一性\n */\nlet globalCounter = 0\nexport const generateId = (): number => {\n const timestamp = Date.now()\n const random = Math.floor(Math.random() * 1000)\n const counter = ++globalCounter % 1000\n\n // 组合:时间戳(毫秒) * 1000000 + 随机数 * 1000 + 计数器\n // 这样可以确保即使在同一毫秒内生成多个ID也不会重复\n return timestamp * 1000000 + random * 1000 + counter\n}\n","import { create } from 'zustand'\n\ninterface DrawerState {\n open: Map<number, boolean>\n usedIds: Set<number>\n isOpen: (uuid: number) => boolean\n show: (uuid: number) => void\n hide: (uuid: number) => void\n hideAll: () => void\n checkUniqueness: (uuid: number) => boolean\n registerIds: (uuid: number) => boolean\n cleanup: (uuid: number) => void\n}\n\nexport const useDrawerStore = create<DrawerState>((set, get) => ({\n open: new Map(),\n usedIds: new Set(),\n isOpen: uuid => get().open.get(uuid) ?? false,\n show(uuid) {\n set({\n open: new Map(get().open).set(uuid, true),\n })\n },\n hide(uuid) {\n set({ open: new Map(get().open).set(uuid, false) })\n },\n hideAll() {\n set({ open: new Map() })\n },\n checkUniqueness(uuid) {\n const { usedIds } = get()\n return !usedIds.has(uuid)\n },\n registerIds(uuid) {\n const { usedIds } = get()\n if (usedIds.has(uuid)) {\n return false // ID 已被使用\n }\n set({ usedIds: new Set(usedIds).add(uuid) })\n return true // 注册成功\n },\n cleanup(uuid) {\n const { open, usedIds } = get()\n const newOpen = new Map(open)\n const newUsedIds = new Set(usedIds)\n newOpen.delete(uuid)\n newUsedIds.delete(uuid)\n set({ open: newOpen, usedIds: newUsedIds })\n },\n}))\n","import type { DrawerProps } from 'antd'\nimport { Button, Drawer } from 'antd'\nimport type { ComponentProps, ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useDrawerStore } from './stores'\n\nexport interface UseDrawerOperation {\n hide: () => void\n}\n\nexport interface UseDrawerProps extends Omit<DrawerProps, 'open' | 'confirmLoading' | 'onClose' | 'footer'> {\n content?: ReactNode | ((operation: UseDrawerOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n footer?: ReactNode | null\n confirmText?: string\n cancelText?: string\n confirmButtonProps?: ComponentProps<typeof Button>\n cancelButtonProps?: ComponentProps<typeof Button>\n}\n\nexport function useDrawer(props: UseDrawerProps) {\n const {\n content,\n onConfirm,\n afterOpen,\n afterClose,\n footer,\n confirmText = '确认',\n cancelText = '取消',\n confirmButtonProps,\n cancelButtonProps,\n ...drawerProps\n } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useDrawerStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onClose: DrawerProps['onClose'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const handleConfirm = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n } catch (error) {\n console.error('Drawer confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm])\n\n const drawerFooter =\n footer !== undefined ? (\n footer\n ) : (\n <div className=\"flex gap-4 mx-4\">\n <Button type=\"primary\" loading={confirmLoading} {...confirmButtonProps} onClick={handleConfirm}>\n {confirmText}\n </Button>\n <Button {...cancelButtonProps} onClick={onClose}>\n {cancelText}\n </Button>\n </div>\n )\n\n const internalDrawer = (\n <Drawer {...drawerProps} open={open} footer={drawerFooter} onClose={onClose}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Drawer>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n confirmLoading,\n drawer: internalDrawer,\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useDrawer, type UseDrawerOperation, type UseDrawerProps } from './drawer'\n\nexport interface UseFormDrawerProps<Values extends AnyObject = AnyObject, ExtraValues = any>\n extends Omit<UseDrawerProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseDrawerOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport function useFormDrawer<Values extends AnyObject = AnyObject, ExtraValues = any>(\n props: UseFormDrawerProps<Values, ExtraValues>,\n) {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...drawerProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n let [internalForm] = Form.useForm<Values>()\n internalForm = form || internalForm\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, drawer } = useDrawer({\n ...drawerProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: { initialValues?: RecursivePartial<Values>; extraValues?: ExtraValues }) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n drawer,\n }\n}\n","export const SSO_URL = 'https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1'\n\nexport const APP_ID_HEADER = 'App-ID'\n\nexport const FRONTEND_ROUTE_PREFIX = '/console/'\n\nexport enum PermissionVersion {\n V1 = 'v1',\n V2 = 'v2',\n V3 = 'v3',\n}\n\nexport const WILDCARD = '*'\n","import type { Locale } from '.'\n\nconst locale: Locale = {\n global: {\n noEntitlement: 'No permission, please contact the administrator.',\n name: 'Name',\n creationTime: 'Creation Time',\n operation: 'Operation',\n update: 'Update',\n edit: 'Edit',\n delete: 'Delete',\n selectAll: 'Select All',\n game: 'Game',\n user: 'User',\n role: 'Role',\n username: 'Username',\n password: 'Password',\n label: 'Label',\n method: 'Method',\n route: 'Route',\n request: 'Request',\n response: 'Response',\n add: 'Add',\n signIn: 'Sign In',\n projectGroup: 'Project Group',\n view: 'View',\n },\n SignIn: {\n title: 'Sign In Method',\n thirdParty: 'Third party sign in',\n signInWithIDass: 'Sign in with IDass',\n unregistered: 'You are not yet registered on the platform, please contact the administrator',\n welcome: 'Welcome',\n },\n NotFound: {\n subTitle: 'The page you visited does not exist',\n buttonText: 'Return to homepage',\n },\n FilterFormWrapper: {\n confirmText: 'Search',\n resetText: 'Reset',\n },\n FormModal: {\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n },\n GameSelect: {\n label: 'Current Game',\n placeholder: 'Please select a game',\n },\n RequireGame: {\n description: 'Please select a game',\n },\n UserWidget: {\n signOutText: 'Sign Out',\n },\n User: {\n createTitle: 'Create User',\n createSuccessfully: 'User created successfully',\n updateTitle: 'Update User',\n updateSuccessfully: 'User updated successfully',\n deleteTitle: 'Delete User',\n deleteContent: 'Are you sure you want to delete user <%= user %>?',\n deleteSuccessfully: 'User deleted successfully',\n },\n Role: {\n createTitle: 'Create Role',\n createSuccessfully: 'Role created successfully',\n updateTitle: 'Update Role',\n updateSuccessfully: 'Role updated successfully',\n deleteTitle: 'Delete Role',\n deleteContent: 'Are you sure you want to delete role <%= role %>?',\n deleteSuccessfully: 'Role deleted successfully',\n },\n PermissionList: {\n failedDescription: 'Failed to get permission list',\n baseSectionTitle: 'Platform Basic Permissions',\n gameSectionTitle: 'Game Permissions',\n gameSectionDescription: 'Please select a game first',\n gameSelectPlaceholder: 'Please select a game first',\n removeText: 'Remove',\n addText: 'Add Game Permissions',\n },\n RoleDetail: {\n title: 'Role Details',\n },\n InfiniteList: {\n loadingText: 'Loading...',\n reachEndText: \"You've reached the end\",\n loadMoreText: 'Load more',\n },\n}\n\nexport default locale\n","// import type { AxiosInterceptorManager, AxiosResponse, InternalAxiosRequestConfig } from 'axios'\nimport type { StateCreator } from 'zustand'\n\nimport { PermissionVersion } from '@/constants'\nimport type { Locale } from '@/locale'\nimport enGb from '@/locale/en_GB'\n\nexport interface ContextSlice {\n locale: Locale\n permissionVersion: PermissionVersion // 权限版本\n gameApiV2: boolean\n signInPath: string // 登录页前端路由地址\n isGlobal: boolean // 为 true 时,APP-ID header 为 'global',否则为当前的游戏的 id。\n navWidth?: number // 侧边栏宽度\n collapsed?: boolean\n collapsible?: boolean // 菜单是否可折叠\n mainPagePath: string // 首页地址\n setContext(state: Partial<Omit<ContextSlice, 'setContext'>>): void\n}\n\nexport const createContextSlice: StateCreator<ContextSlice, [], [], ContextSlice> = set => ({\n locale: enGb,\n gameApiV2: false,\n isGlobal: false,\n signInPath: '/sign_in',\n mainPagePath: '/',\n permissionVersion: PermissionVersion.V1,\n setContext(state) {\n set(prev => ({ ...prev, ...state }))\n },\n})\n","import type { StateCreator } from 'zustand'\n\nexport interface GameSlice {\n gameId?: string | number\n setGameId: (id?: string | number) => void\n}\n\nexport const createGameSlice: StateCreator<GameSlice, [], [], GameSlice> = set => ({\n setGameId: id => {\n set({ gameId: id })\n },\n})\n","import { jwtDecode } from 'jwt-decode'\nimport type { StateCreator } from 'zustand'\n\ninterface UserInfo {\n authorityId: string\n exp: number\n}\n\nexport interface TokenSlice {\n token?: string\n getUser: () => UserInfo | null\n setToken: (token: string) => void\n}\n\nexport const createTokenSlice: StateCreator<TokenSlice, [], []> = (set, get) => ({\n getUser: () => {\n const token = get().token\n if (token) {\n try {\n return jwtDecode(token)\n } catch {\n return null\n }\n }\n return null\n },\n setToken: token => set({ token }),\n})\n","import { createStore } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nimport { mixedStorage } from '@/utils'\n\nimport { type ContextSlice, createContextSlice } from './context'\nimport type { GameSlice } from './game'\nimport { createGameSlice } from './game'\nimport type { TokenSlice } from './token'\nimport { createTokenSlice } from './token'\n\nexport type ToolkitsState = TokenSlice &\n GameSlice &\n ContextSlice & {\n clearToken: () => void\n }\n\nexport const createToolkitsStore = (initProps?: Partial<ContextSlice>) => {\n return createStore<ToolkitsState>()(\n persist(\n (...args) => {\n const [, get, store] = args\n\n const clearToken = () => {\n get().setToken('')\n store.persist.clearStorage()\n }\n\n return {\n ...createTokenSlice(...args),\n ...createGameSlice(...args),\n ...createContextSlice(...args),\n clearToken,\n ...initProps,\n }\n },\n {\n name: 'toolkits',\n storage: createJSONStorage(() => mixedStorage),\n partialize: state => ({\n token: state.token,\n gameId: state.gameId,\n collapsed: state.collapsed,\n }),\n },\n ),\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { App } from 'antd'\nimport type { ComponentType, FC, PropsWithChildren } from 'react'\nimport { createContext, useContext, useRef } from 'react'\nimport { useStore } from 'zustand'\n\nimport type { ToolkitsState } from '@/stores'\nimport { createToolkitsStore } from '@/stores'\nimport type { ContextSlice } from '@/stores/context'\n\ntype ToolkitsStore = ReturnType<typeof createToolkitsStore>\n\nconst ToolkitsContext = createContext<ToolkitsStore | null>(null)\n\n// 重载函数签名:支持有 selector 和无 selector 两种调用方式\nexport function useToolkitsStore(): ToolkitsState\nexport function useToolkitsStore<T>(selector: (state: ToolkitsState) => T): T\nexport function useToolkitsStore<T>(selector?: (state: ToolkitsState) => T): T | ToolkitsState {\n const store = useContext(ToolkitsContext)\n if (!store) throw new Error('Missing ToolkitsProvider in the tree')\n\n // 总是调用 useStore,根据是否有 selector 决定使用什么选择器\n return useStore(store, selector || ((state: ToolkitsState) => state as T))\n}\n\nexport type ToolkitsProviderProps = PropsWithChildren<Partial<Omit<ContextSlice, 'setContext'>>>\n\nconst ToolkitsProvider: FC<ToolkitsProviderProps> = props => {\n const { children, ...restProps } = props\n const storeRef = useRef<ToolkitsStore>()\n const parentState = useContext(ToolkitsContext)?.getState()\n\n if (!storeRef.current) {\n storeRef.current = createToolkitsStore({ ...parentState, ...restProps })\n }\n\n if (!storeRef.current.getState().signInPath) {\n throw new Error('ToolkitsProvider: 请配置 \"signInPath\"')\n }\n\n return (\n <ToolkitsContext.Provider value={storeRef.current}>\n <App>{children}</App>\n </ToolkitsContext.Provider>\n )\n}\n\nexport const withContext = (Component: ComponentType, providerProps: Omit<ToolkitsProviderProps, 'children'>) => {\n const WrappedComponent = (props: any) => {\n return (\n <ToolkitsProvider {...providerProps}>\n <Component {...props} />\n </ToolkitsProvider>\n )\n }\n\n WrappedComponent.displayName = `withContext(${Component.displayName || Component.name || 'Component'})`\n\n return WrappedComponent\n}\n\nif (process.env.NODE_ENV !== 'production') {\n ToolkitsProvider.displayName = 'ToolkitsProvider'\n}\n\nexport default ToolkitsProvider\n","import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const locale = useToolkitsStore(state => state.locale)\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n","import { PlusOutlined } from '@ant-design/icons'\nimport type { InputRef } from 'antd'\nimport { Input, Space, Tag, theme } from 'antd'\nimport type { ChangeEvent, CSSProperties, FC } from 'react'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface DynamicTagsProps {\n initialTags?: string[]\n addable?: boolean\n removable?: boolean\n // 返回 Promise。如果返回 Promise.resolve(true),则添加; 如果返回 Promise.resolve(false) 或 Promise.reject,则不添加\n addCallback?: (addedTag: string) => Promise<boolean>\n // 返回 Promise。如果返回 Promise.resolve(true),则删除; 如果返回 Promise.resolve(false) 或 Promise.reject,则不删除\n removeCallback?: (removedTag: string) => Promise<boolean>\n}\n\nconst DynamicTags: FC<DynamicTagsProps> = props => {\n const { initialTags, addable, removable, addCallback, removeCallback } = props\n const { t } = useTranslation()\n const { token } = theme.useToken()\n const [tags, setTags] = useState<string[]>([])\n const [inputVisible, setInputVisible] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const [editInputIndex, setEditInputIndex] = useState(-1)\n const [editInputValue, setEditInputValue] = useState<string>('')\n const inputRef = useRef<InputRef>(null)\n const editInputRef = useRef<InputRef>(null)\n\n useEffect(() => {\n setTags(initialTags ?? [])\n }, [initialTags])\n\n useEffect(() => {\n if (inputVisible) {\n inputRef.current?.focus()\n }\n }, [inputVisible])\n\n useEffect(() => {\n editInputRef.current?.focus()\n }, [inputValue])\n\n const handleClose = async (removedTag: string) => {\n const success = await removeCallback?.(removedTag)\n\n if (success) {\n const newTags = tags.filter(tag => tag !== removedTag)\n setTags(newTags)\n }\n }\n\n const showInput = () => {\n setInputVisible(true)\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value)\n }\n\n const handleInputConfirm = async () => {\n if (inputValue && tags.indexOf(inputValue) === -1) {\n const success = await addCallback?.(inputValue)\n\n if (success) {\n setTags([...tags, inputValue])\n }\n }\n\n setInputVisible(false)\n setInputValue('')\n }\n\n const handleEditInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setEditInputValue(e.target.value)\n }\n\n const handleEditInputConfirm = () => {\n const newTags = [...tags]\n newTags[editInputIndex] = editInputValue\n setTags(newTags)\n setEditInputIndex(-1)\n setInputValue('')\n }\n\n const tagInputStyle: CSSProperties = {\n width: 78,\n verticalAlign: 'top',\n }\n\n const tagPlusStyle: CSSProperties = {\n background: token.colorBgContainer,\n borderStyle: 'dashed',\n }\n\n return (\n <Space wrap size={[0, 8]}>\n <Space wrap size={[0, 8]}>\n {tags.map((tag, index) => {\n if (editInputIndex === index) {\n return (\n <Input\n ref={editInputRef}\n key={tag}\n size=\"small\"\n style={tagInputStyle}\n value={editInputValue}\n onChange={handleEditInputChange}\n onBlur={handleEditInputConfirm}\n onPressEnter={handleEditInputConfirm}\n />\n )\n }\n\n return (\n <Tag\n key={tag}\n closable={removable}\n style={{ userSelect: 'none' }}\n onClose={async e => {\n e.preventDefault()\n await handleClose(tag)\n }}\n >\n <span\n onDoubleClick={e => {\n if (index !== 0) {\n setEditInputIndex(index)\n setEditInputValue(tag)\n e.preventDefault()\n }\n }}\n >\n {tag}\n </span>\n </Tag>\n )\n })}\n </Space>\n {addable &&\n (inputVisible ? (\n <Input\n ref={inputRef}\n type=\"text\"\n size=\"small\"\n style={tagInputStyle}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputConfirm}\n onPressEnter={handleInputConfirm}\n />\n ) : (\n <Tag style={tagPlusStyle} onClick={showInput}>\n <PlusOutlined />\n {t('global.add')}\n </Tag>\n ))}\n </Space>\n )\n}\n\nexport default DynamicTags\n","import { Typography } from 'antd'\nimport type { ParagraphProps } from 'antd/es/typography/Paragraph'\nimport type { FC } from 'react'\nimport { useState } from 'react'\n\nexport type ExpandableParagraphProps = Omit<ParagraphProps, 'ellipsis' | 'className'>\n\nconst ExpandableParagraph: FC<ExpandableParagraphProps> = props => {\n const { children, ...restProps } = props\n const [expanded, setExpanded] = useState(false)\n\n return (\n <Typography.Paragraph\n {...restProps}\n className=\"mb-0\"\n ellipsis={{\n rows: 2,\n expandable: 'collapsible',\n expanded,\n onExpand: (_, info) => {\n setExpanded(info.expanded)\n },\n }}\n >\n {children}\n </Typography.Paragraph>\n )\n}\n\nexport default ExpandableParagraph\n","import { Button, Space, theme } from 'antd'\nimport type { Key, PropsWithChildren, ReactNode } from 'react'\nimport { Fragment } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface FilterFormWrapperProps extends PropsWithChildren {\n onConfirm?: () => void | Promise<void>\n onReset?: () => void\n extras?: { key: Key; children: ReactNode }[]\n isConfirming?: boolean\n buttonsAlign?: 'left' | 'right' | 'bottom'\n showReset?: boolean\n}\n\nconst FilterFormWrapper = (props: FilterFormWrapperProps) => {\n const { extras, isConfirming, onConfirm, onReset, children, buttonsAlign = 'left', showReset } = props\n const { t } = useTranslation()\n const {\n token: { colorFillAlter, lineWidth, lineType, colorBorder, borderRadiusLG },\n } = theme.useToken()\n\n const style = {\n maxWidth: 'none',\n background: colorFillAlter,\n borderWidth: lineWidth,\n borderStyle: lineType,\n borderColor: colorBorder,\n borderRadius: borderRadiusLG,\n padding: 24,\n marginBottom: 24,\n }\n\n return (\n <div style={style}>\n <div className={`flex ${buttonsAlign === 'bottom' ? 'flex-col' : 'flex-row'}`}>\n <div className={`${buttonsAlign === 'left' ? 'flex-grow-0' : 'flex-1'}`}>{children}</div>\n <div className={`${buttonsAlign === 'bottom' ? 'text-end' : 'text-start'} ml-4`}>\n <Space>\n <Button type=\"primary\" disabled={isConfirming} onClick={onConfirm}>\n {t('FilterFormWrapper.confirmText')}\n </Button>\n {extras?.map(item => <Fragment key={item.key}>{item.children}</Fragment>)}\n {showReset && <Button onClick={onReset}>{t('FilterFormWrapper.resetText')}</Button>}\n </Space>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FilterFormWrapper\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\n\nconst splitByTags = (str: string) => {\n const regex = /(<[^>]*>)/\n return str.split(regex).filter(part => part !== '')\n}\n\nfunction renderToString(node: ReactNode): Promise<string> {\n const container = document.createElement('div')\n const root = createRoot(container)\n\n return new Promise(resolve => {\n setTimeout(() => {\n flushSync(() => {\n root.render(node)\n })\n resolve(container.innerHTML)\n })\n })\n}\n\nexport interface HighlightProps extends PropsWithChildren {\n texts: Array<string | number>\n}\n\nconst Highlight = (props: HighlightProps) => {\n const { texts, children } = props\n const [htmlString, setHtmlString] = useState<string>('')\n\n useEffect(() => {\n renderToString(children).then(str => {\n const result = splitByTags(str)\n\n for (const text of texts) {\n for (let index = 0; index < result.length; index++) {\n // TODO: 忽略 HTML tag\n result[index] = result[index].replace(String(text), `<span style='color: #DC143C;'>${text}</span>`)\n }\n }\n\n setHtmlString(result.join(''))\n })\n }, [children, texts])\n\n return <div dangerouslySetInnerHTML={{ __html: htmlString }}></div>\n}\n\nexport default Highlight\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { App } from 'antd'\nimport ky, { type KyInstance, type Options as KyOptions } from 'ky'\nimport { useMemo } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { APP_ID_HEADER, PermissionVersion } from '@/constants'\n\n// 响应成功状态码常量\nconst SUCCESS_RESPONSE_CODES = [0, 1, 200] as const\n\n// HTTP 状态码常量\nconst HTTP_STATUS = {\n OK: 200,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n UNREGISTERED: 412,\n} as const\n\n// 请求超时时间(毫秒)\nconst REQUEST_TIMEOUT = 30000\n\n// 成功响应状态码字段类型\ntype StatusField = 'code' | 'status' | 'errno'\n\n// 状态码检查配置\ninterface StatusCheckConfig {\n field: StatusField\n value: unknown\n allowedCodes: readonly number[]\n}\n\n// 响应类型枚举\nexport enum ResponseType {\n JSON = 'json',\n BLOB = 'blob',\n TEXT = 'text',\n ARRAY_BUFFER = 'arrayBuffer',\n FORM_DATA = 'formData',\n}\n\n// 通用请求选项接口\ninterface RequestOptions extends KyOptions {\n responseType?: ResponseType\n}\n\n// HTTP客户端方法接口 - 支持泛型响应类型\ninterface KyMethods {\n get: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n post: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n put: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n delete: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n patch: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n options: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n head: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n request: <T = any>(options: RequestOptions & { url: string }) => Promise<T>\n instance: KyInstance\n}\n\n// 错误消息提取工具函数\nconst extractErrorMessage = (data: any): string => {\n if (!data || typeof data !== 'object') {\n return 'Unknown error'\n }\n\n return data.msg || data.message || data.error || 'Unknown error'\n}\n\n/**\n * 检查单个状态码字段是否成功\n * @param config 状态码检查配置\n * @returns 是否成功\n */\nconst isStatusCodeSuccess = (config: StatusCheckConfig): boolean => {\n const { value, allowedCodes } = config\n\n if (value === undefined || value === null) {\n return false\n }\n\n if (typeof value !== 'number') {\n return false\n }\n\n return allowedCodes.includes(value)\n}\n\n/**\n * 判断响应是否成功\n * @param data 响应数据\n * @param status HTTP状态码\n * @returns 是否成功\n */\nconst isSuccessResponse = (data: any, status: number): boolean => {\n // 如果HTTP状态码不在2xx范围,直接返回失败\n if (status < HTTP_STATUS.OK || status >= 300) {\n return false\n }\n\n // 如果没有响应数据或不是对象,认为成功(可能是空响应)\n if (!data || typeof data !== 'object') {\n return true\n }\n\n // 定义状态码检查配置\n const statusChecks: StatusCheckConfig[] = [\n { field: 'code', value: data.code, allowedCodes: SUCCESS_RESPONSE_CODES },\n { field: 'status', value: data.status, allowedCodes: SUCCESS_RESPONSE_CODES },\n { field: 'errno', value: data.errno, allowedCodes: SUCCESS_RESPONSE_CODES },\n ]\n\n // 检查是否有任何业务状态码字段存在且表示成功\n const hasBusinessStatusCode = statusChecks.some(config => config.value !== undefined && config.value !== null)\n\n // 如果存在业务状态码字段,则必须检查它们是否都表示成功\n if (hasBusinessStatusCode) {\n return statusChecks.every(\n config => config.value === undefined || config.value === null || isStatusCodeSuccess(config),\n )\n }\n\n // 如果没有业务状态码字段,HTTP 2xx 就认为成功\n return true\n}\n\n/**\n * 根据响应类型处理响应数据\n * @param response 响应对象\n * @param responseType 响应类型\n * @returns 处理后的响应数据\n */\nconst processResponseByType = async (response: Response, responseType?: ResponseType): Promise<any> => {\n switch (responseType) {\n case ResponseType.BLOB:\n return response.blob()\n case ResponseType.TEXT:\n return response.text()\n case ResponseType.ARRAY_BUFFER:\n return response.arrayBuffer()\n case ResponseType.FORM_DATA:\n return response.formData()\n case ResponseType.JSON:\n default:\n return response.json()\n }\n}\n\n/**\n * HTTP客户端Hook (基于 Ky) - 内部使用版本\n * @param baseURL 可选的基础URL\n * @returns HTTP客户端方法集合\n */\nexport const useKy = (baseURL?: string): KyMethods => {\n // 获取 App 实例\n const { notification } = App.useApp()\n\n // 获取工具包状态\n const toolkitsStore = useToolkitsStore()\n const { token, isGlobal, gameId, permissionVersion, signInPath, clearToken } = toolkitsStore\n\n // 处理未授权错误\n const handleUnauthorized = () => {\n clearToken()\n if (signInPath) {\n window.location.href = signInPath\n }\n }\n\n // 处理未注册错误\n const handleUnregistered = () => {\n clearToken()\n if (signInPath) {\n // 添加未注册参数到登录页 URL\n const url = new URL(signInPath, window.location.origin)\n url.searchParams.set('unregistered', 'true')\n window.location.href = url.toString()\n }\n }\n\n // 处理禁止访问错误\n const handleForbidden = () => {\n notification.error({\n message: '访问被禁止',\n description: '您没有权限访问此资源。',\n })\n }\n\n // 创建响应处理函数\n const createResponseHandler = (responseType?: ResponseType) => {\n return async (_request: any, _options: any, response: Response): Promise<Response> => {\n // 非 JSON 类型直接交由调用方按响应类型读取\n if (\n responseType === ResponseType.BLOB ||\n responseType === ResponseType.ARRAY_BUFFER ||\n responseType === ResponseType.TEXT ||\n responseType === ResponseType.FORM_DATA\n ) {\n return response\n }\n\n // 默认 JSON\n let data: any\n try {\n data = await response.clone().json()\n } catch {\n // 非 JSON 或空响应体,直接返回原响应\n return response\n }\n\n if (isSuccessResponse(data, response.status)) {\n const responseData = data.data !== undefined ? data.data : data\n return new Response(JSON.stringify(responseData), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n })\n }\n\n const errorMessage = extractErrorMessage(data)\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n\n const error = new Error(errorMessage)\n ;(error as any).response = response\n ;(error as any).data = data\n throw error\n }\n }\n\n // 处理HTTP状态码错误\n const handleHttpStatusError = (status: number, data: any) => {\n switch (status) {\n case HTTP_STATUS.UNAUTHORIZED:\n handleUnauthorized()\n break\n\n case HTTP_STATUS.UNREGISTERED:\n handleUnregistered()\n break\n\n case HTTP_STATUS.FORBIDDEN:\n handleForbidden()\n break\n\n default: {\n // 安全地提取错误消息\n const errorMessage = extractErrorMessage(data) || `HTTP ${status} Error`\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n break\n }\n }\n }\n\n // 创建ky实例\n const instance = useMemo(() => {\n const kyInstance = ky.create({\n prefixUrl: baseURL,\n retry: 0,\n timeout: REQUEST_TIMEOUT,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n hooks: {\n beforeRequest: [\n request => {\n // 设置认证 headers\n if (token) {\n request.headers.set('Authorization', `Bearer ${token}`)\n }\n\n // 设置应用 ID headers\n if (!request.headers.has(APP_ID_HEADER) && permissionVersion !== PermissionVersion.V1) {\n if (isGlobal || !gameId) {\n request.headers.set(APP_ID_HEADER, 'global')\n } else {\n // 对 gameId 进行 URL 编码以避免非 ASCII 字符导致的 XMLHttpRequest 错误\n request.headers.set(APP_ID_HEADER, encodeURIComponent(String(gameId)))\n }\n }\n },\n ],\n beforeError: [\n async error => {\n const { response } = error\n\n if (response) {\n const status = response.status\n let data: any\n\n try {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json') || contentType.startsWith('text/')) {\n data = await response.clone().json()\n }\n } catch {\n // 忽略 JSON 解析错误\n }\n\n handleHttpStatusError(status, data)\n } else {\n // 网络错误或请求超时等情况\n notification.error({\n message: 'Network Error',\n description: error.message || 'Network request failed',\n })\n }\n\n return error\n },\n ],\n },\n })\n\n return kyInstance\n }, [baseURL, token, isGlobal, gameId, permissionVersion])\n\n // 通用请求处理函数\n const makeRequest = async <T = any>(\n method: string,\n url: string,\n data?: any,\n requestOptions?: RequestOptions,\n ): Promise<T> => {\n const { responseType, ...kyOptions } = requestOptions || {}\n\n // 创建带有响应类型处理器的请求选项\n const finalOptions: KyOptions = {\n ...kyOptions,\n hooks: {\n ...kyOptions.hooks,\n afterResponse: [...(kyOptions.hooks?.afterResponse || []), createResponseHandler(responseType)],\n },\n }\n\n let response: Response\n\n if (data) {\n response = await instance(url, { method, json: data, ...finalOptions })\n } else {\n response = await instance(url, { method, ...finalOptions })\n }\n\n // 根据响应类型返回相应数据\n return processResponseByType(response, responseType)\n }\n\n // HTTP方法\n const get = <T = any>(url: string, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('GET', url, undefined, options)\n }\n\n const post = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('POST', url, data, options)\n }\n\n const put = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('PUT', url, data, options)\n }\n\n const del = <T = any>(url: string, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('DELETE', url, undefined, options)\n }\n\n const patch = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('PATCH', url, data, options)\n }\n\n const options = <T = any>(url: string, requestOptions?: RequestOptions): Promise<T> => {\n return makeRequest<T>('OPTIONS', url, undefined, requestOptions)\n }\n\n const head = <T = any>(url: string, requestOptions?: RequestOptions): Promise<T> => {\n return makeRequest<T>('HEAD', url, undefined, requestOptions)\n }\n\n const request = <T = any>(requestOptions: RequestOptions & { url: string }): Promise<T> => {\n const { url, ...requestOpts } = requestOptions\n return makeRequest<T>(requestOpts.method || 'GET', url, undefined, requestOpts)\n }\n\n return {\n get,\n post,\n put,\n delete: del,\n patch,\n options,\n head,\n request,\n instance,\n }\n}\n","// 查询键工厂 - 使用简单的对象和函数来生成查询键\nexport const queryKeys = {\n // 权限相关\n permissions: {\n check: (permissions: string[], version: 'v1' | 'v2') => ['permissions', 'check', permissions, version] as const,\n allPermissions: ['permissions', 'all'] as const,\n allPermissionsV2: ['permissions', 'allV2'] as const,\n },\n // 用户相关\n users: {\n all: ['users'] as const,\n detail: (id: string) => ['users', 'detail', id] as const,\n create: ['users', 'create'] as const,\n update: ['users', 'update'] as const,\n delete: ['users', 'delete'] as const,\n },\n // 角色相关\n roles: {\n all: ['roles'] as const,\n detail: (name: string, version: 'v1' | 'v2') => ['roles', 'detail', name, version] as const,\n create: (version: 'v1' | 'v2') => ['roles', 'create', version] as const,\n update: (version: 'v1' | 'v2') => ['roles', 'update', version] as const,\n delete: ['roles', 'delete'] as const,\n },\n // 菜单相关\n menus: {\n all: ['menus'] as const,\n navbar: (gameId?: string) => ['menus', 'navbar', gameId] as const,\n detail: (id: number) => ['menus', 'detail', id] as const,\n create: ['menus', 'create'] as const,\n update: ['menus', 'update'] as const,\n delete: ['menus', 'delete'] as const,\n },\n // 枚举相关\n enums: {\n gameGroups: ['enums', 'gameGroups'] as const,\n gameIds: (gameGroups: string[]) => ['enums', 'gameIds', gameGroups] as const,\n },\n}\n\nexport type QueryKeys = typeof queryKeys\n","import { useQuery } from '@tanstack/react-query'\nimport type { Options as KyOptions } from 'ky'\n\nimport type { Game } from '@/components/layout/types'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { APP_ID_HEADER, PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport type { MenuListItem } from '@/types'\n\nexport function usePermission(code?: string | string[], config?: KyOptions) {\n const ky = useKy()\n const { permissionVersion } = useToolkitsStore()\n const url = permissionVersion !== PermissionVersion.V1 ? '/api/usystem/user/checkV2' : '/api/usystem/user/check'\n const permissionCodes: string[] = typeof code !== 'undefined' ? (typeof code === 'string' ? [code] : code) : []\n const version = permissionVersion !== PermissionVersion.V1 ? 'v2' : 'v1'\n\n const { data, ...rest } = useQuery({\n queryKey:\n permissionCodes.length > 0 ? queryKeys.permissions.check(permissionCodes, version) : ['permissions', 'disabled'],\n queryFn: () =>\n ky.post<Record<string, boolean> & { has_all?: boolean }>(url, {\n json: { permissions: permissionCodes },\n ...config,\n }),\n enabled: permissionCodes.length > 0,\n })\n\n let newData: boolean | Record<string, boolean> = true\n\n if (typeof code === 'string') {\n newData = data?.has_all ? true : (data?.[code] ?? false)\n } else if (Array.isArray(code) && code.length > 0) {\n newData = permissionCodes.reduce<Record<string, boolean>>((acc, curr) => {\n acc[curr] = data?.has_all ? true : (data?.[curr] ?? false)\n return acc\n }, {})\n }\n\n return {\n ...rest,\n data: newData,\n }\n}\n\nexport function useMenuList() {\n const { signInPath, gameId } = useToolkitsStore()\n const ky = useKy()\n\n return useQuery({\n queryKey: queryKeys.menus.navbar(gameId ? String(gameId) : undefined),\n queryFn: () =>\n ky.get<MenuListItem[]>('/api/usystem/menu/navbar', {\n headers: { [APP_ID_HEADER]: gameId ? encodeURIComponent(String(gameId)) : 'global' },\n }),\n enabled: window.location.pathname !== signInPath,\n })\n}\n\nexport const useGames = () => {\n const { gameApiV2, permissionVersion } = useToolkitsStore()\n const ky = useKy()\n const url =\n permissionVersion !== PermissionVersion.V1 ? (gameApiV2 ? '/api/game/list' : '/api/usystem/game/all') : null\n\n return useQuery({\n queryKey: queryKeys.enums.gameGroups, // 复用现有的 key,或者可以创建专门的 games key\n queryFn: async () => {\n if (!url) return []\n\n const requestConfig = {\n headers: {\n [APP_ID_HEADER]: 'global',\n },\n }\n\n if (gameApiV2) {\n const response = await ky.get<{ list: Game[] }>(url, requestConfig)\n return response?.list ?? []\n }\n\n const response = await ky.get<Game[]>(url, requestConfig)\n return response ?? []\n },\n enabled: !!url,\n staleTime: Infinity,\n })\n}\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { InfiniteListPayload } from './InfiniteList'\n\n// Infinite Query 更新函数类型\ntype InfiniteQueryRefetchFunction = () => void | Promise<unknown>\ntype InfiniteQueryFetchNextPageFunction = () => void | Promise<unknown>\n\n// InfiniteList 实例信息\ninterface InfiniteListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: InfiniteListPayload\n refetch: InfiniteQueryRefetchFunction\n fetchNextPage: InfiniteQueryFetchNextPageFunction\n}\n\n// 简化的状态接口\ninterface InfiniteListState {\n // 实例管理\n instances: Map<string, InfiniteListInstance>\n\n // 核心方法\n registerInstance(\n id: string,\n url: string,\n queryKey: readonly unknown[],\n refetch: InfiniteQueryRefetchFunction,\n fetchNextPage: InfiniteQueryFetchNextPageFunction,\n ): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: InfiniteListPayload): void\n getPayload(id: string): InfiniteListPayload\n refetch(id: string, payload?: InfiniteListPayload): Promise<void>\n fetchNextPage(id: string): Promise<void>\n\n // 工具方法\n getInstance(id: string): InfiniteListInstance | undefined\n getAllInstances(): InfiniteListInstance[]\n}\n\n// 创建简化的 store\nconst createStore = () =>\n create<InfiniteListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch, fetchNextPage) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新函数\n if (existingInstance) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n fetchNextPage,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n\n // 创建新实例\n const instance: InfiniteListInstance = {\n id,\n url,\n queryKey,\n payload: { page: 0, formValue: {} },\n refetch,\n fetchNextPage,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? { page: 0, formValue: {} }\n },\n\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`InfiniteList instance with id \"${id}\" not found`)\n return\n }\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n }\n }\n\n // 调用 refetch 函数\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch InfiniteList instance \"${id}\":`, error)\n throw error\n }\n },\n\n async fetchNextPage(id) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`InfiniteList instance with id \"${id}\" not found`)\n return\n }\n\n // 调用 fetchNextPage 函数\n try {\n await instance.fetchNextPage()\n } catch (error) {\n console.error(`Failed to fetch next page for InfiniteList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'infinite-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useInfiniteListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useInfiniteQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Button, Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useInfiniteListStore } from './stores'\n\nexport interface InfiniteListPayload<Values = any> {\n page?: number\n formValue?: Values\n}\n\nexport interface InfiniteListRequestConfig<Values = any> {\n url: string\n method?: 'GET' | 'POST'\n body?:\n | FormData\n | Record<string | number, any>\n | ((payload: InfiniteListPayload<Values>, pageParam: any) => FormData | Record<string | number, any>)\n params?:\n | Record<string | number, any>\n | ((payload: InfiniteListPayload<Values>, pageParam: any) => Record<string | number, any>)\n headers?: Record<string, string> | ((form: FormInstance<Values>) => Record<string, string>)\n // 缓存配置\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\nexport enum InfiniteListAction {\n Confirm,\n Reset,\n LoadMore,\n Init,\n}\n\nexport interface InfiniteListDataAdapter<Item = any, Values = any, Data = any> {\n items?: (data: Data[] | undefined, form: FormInstance<Values>) => Item[] | undefined\n hasMore?: (lastPage: Data | undefined, allPages: Data[]) => boolean\n nextPageParam?: (lastPage: Data | undefined, allPages: Data[], pageParam: any) => any\n}\n\nexport interface InfiniteListRef<Item = any, Values = any, Data = any> {\n data: Data[] | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n refetch: () => void\n fetchNextPage: () => void\n hasNextPage: boolean\n isFetchingNextPage: boolean\n}\n\nexport interface InfiniteListProps<Item, Values, Data>\n extends Pick<TableProps<Item>, 'columns' | 'rowKey' | 'tableLayout' | 'expandable' | 'rowSelection' | 'bordered'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier: string // 必需的标识符,用于标识和外部控制\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n request: InfiniteListRequestConfig<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data[]) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: InfiniteListAction, form: FormInstance<Values>, data?: Data[]) => void\n afterError?: (error: Error, action: InfiniteListAction, form: FormInstance<Values>) => void\n dataAdapter?: InfiniteListDataAdapter<Item, Values, Data>\n initialPageParam?: any\n footer?: (data: Data[] | undefined) => ReactNode\n}\n\nconst InternalInfiniteList = <Item extends AnyObject, Values extends object | undefined = undefined, Data = any>(\n props: InfiniteListProps<Item, Values, Data>,\n ref: Ref<InfiniteListRef<Item, Values, Data>>,\n) => {\n const defaultDataAdapter: InfiniteListDataAdapter<Item, Values, Data> = {\n items: (data: Data[] | undefined) => {\n if (!data) return []\n return data.flatMap((page: any) => page?.list || page || [])\n },\n hasMore: (lastPage: Data | undefined): boolean => {\n if (!lastPage) return false\n const page = lastPage as any\n return page?.hasMore || page?.has_more || false\n },\n nextPageParam: (lastPage: Data | undefined, allPages: Data[], _pageParam: any): any => {\n const hasMore = (page: Data | undefined): boolean => {\n if (!page) return false\n const pageData = page as any\n return pageData?.hasMore || pageData?.has_more || false\n }\n return hasMore(lastPage) ? allPages.length : undefined\n },\n }\n\n const internalProps: InfiniteListProps<Item, Values, Data> & {\n refreshInterval: number\n initialPageParam: any\n } = {\n refreshInterval: 0,\n initialPageParam: 0,\n ...props,\n dataAdapter: {\n ...defaultDataAdapter,\n ...props.dataAdapter,\n },\n }\n\n const {\n identifier,\n code,\n buttonsAlign,\n showReset,\n refreshInterval,\n request,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n dataAdapter,\n initialPageParam,\n footer,\n form,\n ...tableProps\n } = internalProps\n const { t } = useTranslation()\n const [_form] = Form.useForm<Values>(form)\n const [isValid, setIsValid] = useState(false)\n const shouldPoll = useRef(false)\n const action = useRef(InfiniteListAction.Init)\n const ky = useKy()\n\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n\n // 从 store 获取 payload\n const getStoredPayload = useCallback(() => {\n return useInfiniteListStore.getState().getPayload(identifier)\n }, [identifier])\n\n // 获取当前表单值\n const formInstance = useMemo(() => _form, [_form])\n\n // 构建请求参数\n const { url, method = 'GET', body, params, headers, cacheTime = 5 * 60 * 1000, staleTime = 0 } = request\n const requestHeaders = useMemo(\n () => (typeof headers === 'function' ? headers(formInstance) : headers),\n [headers, formInstance],\n )\n // 请求参数和 body 将在 queryFn 中动态构建,因为它们依赖于 pageParam\n\n // 构建查询键\n const queryKey = useMemo(() => {\n const payload = getStoredPayload()\n return [url, identifier, accessible, isValid, payload, requestHeaders]\n }, [url, identifier, accessible, isValid, getStoredPayload, requestHeaders])\n\n const { data, fetchNextPage, hasNextPage, isFetchingNextPage, refetch, isFetching } = useInfiniteQuery({\n queryKey,\n queryFn: async ({ pageParam = initialPageParam }) => {\n try {\n const payload = getStoredPayload()\n\n // 动态构建请求参数,包含 pageParam\n const requestParams = typeof params === 'function' ? params(payload, pageParam) : params\n const requestBody = typeof body === 'function' ? body(payload, pageParam) : body\n\n const kyOptions: KyOptions = {\n method: method as any,\n searchParams: requestParams,\n headers: requestHeaders,\n }\n\n if (requestBody) {\n if (requestBody instanceof FormData) {\n kyOptions.body = requestBody\n } else {\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, [response])\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n initialPageParam,\n getNextPageParam: (lastPage: Data, allPages: Data[]) => {\n return dataAdapter?.nextPageParam?.(lastPage, allPages, initialPageParam)\n },\n enabled: accessible && isValid,\n retry: (failureCount, retryError) => {\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000),\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n gcTime: cacheTime,\n staleTime,\n })\n\n // 在组件挂载时注册实例\n useEffect(() => {\n useInfiniteListStore.getState().registerInstance(identifier, url, queryKey, refetch, fetchNextPage)\n return () => {\n useInfiniteListStore.getState().unregisterInstance(identifier)\n }\n }, [identifier, url, queryKey, refetch, fetchNextPage])\n\n const dataSource = dataAdapter?.items?.(data?.pages, formInstance)\n const isLoadingMore = isFetchingNextPage\n const isReachingEnd = !hasNextPage\n const isEmpty = !dataSource || dataSource.length === 0\n\n const onConfirm = async () => {\n action.current = InfiniteListAction.Confirm\n const values = await _form.getFieldsValue()\n\n try {\n await _form.validateFields()\n setIsValid(true)\n\n // 更新 store 中的 payload\n useInfiniteListStore.getState().updatePayload(identifier, { page: 0, formValue: values })\n\n refetch()\n } catch {\n setIsValid(false)\n }\n }\n\n const loadMore = () => {\n action.current = InfiniteListAction.LoadMore\n fetchNextPage()\n }\n\n const onReset = async () => {\n action.current = InfiniteListAction.Reset\n try {\n _form.resetFields()\n const values = await _form.getFieldsValue()\n\n // 重置 store 中的 payload\n useInfiniteListStore.getState().updatePayload(identifier, { page: 0, formValue: values })\n\n await _form.validateFields({ validateOnly: true })\n refetch()\n } catch {\n // Handle validation error\n }\n }\n\n useEffect(() => {\n setTimeout(() => {\n if (accessible) {\n _form\n .validateFields({ validateOnly: true })\n .then(values => {\n setIsValid(true)\n\n // 初始化 store 中的 payload\n useInfiniteListStore.getState().updatePayload(identifier, { page: 0, formValue: values })\n })\n .catch(() => {\n setIsValid(false)\n })\n }\n }, 300)\n }, [accessible, _form, identifier])\n\n useImperativeHandle(ref, () => ({\n data: data?.pages,\n dataSource,\n form: _form,\n refetch: () => useInfiniteListStore.getState().refetch(identifier),\n fetchNextPage: () => useInfiniteListStore.getState().fetchNextPage(identifier),\n hasNextPage: !!hasNextPage,\n isFetchingNextPage,\n }))\n\n if (isChecking) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n }}\n />\n )\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n const renderFooter = footer && (() => footer(data?.pages))\n\n const renderTableExtra = () => {\n if (typeof tableExtra === 'function') {\n return tableExtra(formInstance, data?.pages)\n }\n return tableExtra\n }\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isFetching}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(_form), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={_form} />\n )\n\n return (\n <>\n {formRenderer}\n {renderTableExtra()}\n <div style={{ minHeight: '400px' }}>\n <Table {...tableProps} dataSource={dataSource} loading={isFetching} pagination={false} footer={renderFooter} />\n </div>\n {!isEmpty && (\n <Button\n block\n loading={isLoadingMore}\n type=\"link\"\n htmlType=\"button\"\n disabled={isLoadingMore || isReachingEnd}\n onClick={loadMore}\n >\n {isLoadingMore\n ? t('InfiniteList.loadingText')\n : isReachingEnd\n ? t('InfiniteList.reachEndText')\n : t('InfiniteList.loadMoreText')}\n </Button>\n )}\n </>\n )\n}\n\nconst InfiniteList = forwardRef(InternalInfiniteList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: InfiniteListProps<Item, Values, Data> & { ref?: Ref<InfiniteListRef<Item, Data>> },\n) => ReactElement\n\nexport default InfiniteList\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nexport interface NavState {\n openKeys: string[]\n selectedKeys: string[]\n setOpenKeys: (keys: string[]) => void\n setSelectedKeys: (keys: string[]) => void\n}\n\nexport const useNavStore = create<NavState>()(\n persist(\n (set, get) => ({\n openKeys: [],\n setOpenKeys: keys => {\n const current = get()\n // 避免不必要的状态更新 - 使用更高效的比较方式\n if (current.openKeys.length !== keys.length || !current.openKeys.every((key, index) => key === keys[index])) {\n set({ openKeys: keys })\n }\n },\n selectedKeys: [],\n setSelectedKeys: keys => {\n const current = get()\n // 避免不必要的状态更新 - 使用更高效的比较方式\n if (\n current.selectedKeys.length !== keys.length ||\n !current.selectedKeys.every((key, index) => key === keys[index])\n ) {\n set({ selectedKeys: keys })\n }\n },\n }),\n {\n name: 'nav',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({\n openKeys: state.openKeys,\n selectedKeys: state.selectedKeys,\n }),\n // 减少持久化频率,提升性能\n skipHydration: false,\n version: 1,\n },\n ),\n)\n","import type { ItemType, MenuDividerType } from 'antd/es/menu/interface'\nimport { memo } from 'react'\nimport { Link } from 'react-router-dom'\nimport type { Merge } from 'ts-essentials'\n\nimport type { MenuItemGroupType2, MenuItemType2, NavMenuItem, SubMenuType2 } from './types'\n\n// 优化 Link 组件,避免重复创建\nconst MemoizedLink = memo(({ to, children }: { to: string; children: React.ReactNode }) => (\n <Link to={to}>{children}</Link>\n))\n\nMemoizedLink.displayName = 'MemoizedLink'\n\n// 将自定义的菜单配置转换为 antd 的菜单配置,添加 react-router-dom Link 等。\nexport function transformItems(items?: NavMenuItem[]) {\n const result: ItemType[] = []\n\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i] === null || (items[i] as MenuDividerType).type === 'divider') {\n result[i] = items[i] as null | MenuDividerType\n } else if ((items[i] as SubMenuType2 | MenuItemGroupType2).children) {\n const { children, ...rest } = items[i] as SubMenuType2 | MenuItemGroupType2\n result[i] = {\n ...rest,\n children: transformItems(children),\n }\n } else {\n const { route, label, ...rest } = items[i] as MenuItemType2\n const labelNode = route ? <MemoizedLink to={route}>{label}</MemoizedLink> : label\n\n result[i] = {\n ...rest,\n label: labelNode,\n }\n }\n }\n }\n\n return result\n}\n\n// 拍平导航配置,并且注入 keypath 字段\nexport function flatItems(\n items: NavMenuItem[],\n result: Merge<MenuItemType2, { keypath?: string[] }>[] = [],\n keypath: string[] = [],\n) {\n for (const item of items) {\n const children = (item as SubMenuType2 | MenuItemGroupType2)?.children as NavMenuItem[]\n\n if (Array.isArray(children)) {\n const keys =\n (item as MenuItemGroupType2).type !== 'group' && item!.key ? [...keypath, item!.key as string] : keypath\n flatItems(children, result, keys)\n } else if (item) {\n result.push(Object.assign(item as MenuItemType2, { keypath }))\n }\n }\n\n return result\n}\n","import type { MenuProps } from 'antd'\nimport { Menu, Spin } from 'antd'\nimport { memo, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { useNavStore } from './stores'\nimport type { NavMenuItem } from './types'\nimport { flatItems, transformItems } from './utils'\n\nexport interface NavMenuProps {\n items?: NavMenuItem[]\n theme?: MenuProps['theme']\n loading?: boolean\n}\n\nconst NavMenu = memo(function NavMenu(props: NavMenuProps) {\n const { items = [], theme, loading } = props\n const location = useLocation()\n const previousItemsRef = useRef<NavMenuItem[]>()\n const previousLocationRef = useRef<string>()\n\n const flattenItems = useMemo(() => {\n if (previousItemsRef.current === items) {\n return previousItemsRef.current ? flatItems(previousItemsRef.current) : []\n }\n previousItemsRef.current = items\n return flatItems(items)\n }, [items])\n\n const internalItems = useMemo(() => {\n if (previousItemsRef.current === items) {\n return previousItemsRef.current ? transformItems(previousItemsRef.current) : []\n }\n return transformItems(items)\n }, [items])\n\n const { openKeys, selectedKeys, setOpenKeys, setSelectedKeys } = useNavStore()\n\n const onOpenChange = useCallback(\n (keys: string[]) => {\n // 找到新打开的菜单项\n const expandedKey = keys.find(key => !openKeys.includes(key))\n\n if (expandedKey) {\n // 展开操作:找到完整的层级路径\n const match = flattenItems.find(item => item.key === expandedKey)\n const fullPath = match?.keypath ? [...match.keypath, expandedKey] : [expandedKey]\n setOpenKeys(fullPath)\n } else {\n // 折叠操作:直接使用新的 keys\n setOpenKeys(keys)\n }\n },\n [flattenItems, openKeys, setOpenKeys],\n )\n\n useEffect(() => {\n // 避免不必要的重新计算\n if (previousLocationRef.current === location.pathname) {\n return\n }\n previousLocationRef.current = location.pathname\n\n const match = flattenItems.find(item => location.pathname === item.route)\n\n if (match) {\n const key = match.key as string\n const keypath = match.keypath as string[]\n\n // 批量更新状态以减少重新渲染\n if (selectedKeys[0] !== key || !openKeys.every((k, i) => k === keypath[i])) {\n setSelectedKeys([key])\n setOpenKeys(keypath)\n }\n }\n }, [flattenItems, location.pathname, selectedKeys, openKeys, setSelectedKeys, setOpenKeys])\n\n if (loading) {\n return (\n <div className=\"flex justify-center items-center\" style={{ height: 'calc(100vh - 64px)' }}>\n <Spin />\n </div>\n )\n }\n\n return (\n <Menu\n theme={theme}\n style={{ borderRight: 'none' }}\n items={internalItems}\n mode=\"inline\"\n openKeys={openKeys}\n selectedKeys={selectedKeys}\n onOpenChange={onOpenChange}\n />\n )\n})\n\nif (process.env.NODE_ENV === 'development') {\n NavMenu.displayName = 'NavMenu'\n}\n\nexport default NavMenu\n","import * as Antd from 'antd'\nimport { Empty } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { Fragment } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nconst { Spin } = Antd\n\nconst RequireGame: FC<PropsWithChildren> = ({ children }) => {\n const { permissionVersion, gameId, isGlobal } = useToolkitsStore(s => s)\n const { isLoading } = useGames()\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 400,\n }}\n >\n <Spin />\n </div>\n )\n }\n\n if (permissionVersion === PermissionVersion.V1 || isGlobal) {\n return children\n }\n\n if (!gameId) {\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={t('RequireGame.description')} />\n }\n\n return <Fragment key={gameId}>{children}</Fragment>\n}\n\nexport default RequireGame\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport { LogoutOutlined, UserOutlined } from '@ant-design/icons'\nimport type { MenuProps } from 'antd'\nimport { Dropdown, Space } from 'antd'\nimport type { FC, KeyboardEvent } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\n\nconst UserWidget: FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { clearToken, getUser, signInPath } = useToolkitsStore(s => s)\n const user = getUser()\n\n const handleSignOut = () => {\n clearToken()\n navigate(signInPath)\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSignOut()\n }\n }\n\n const handleDropdownKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }\n\n const items: MenuProps['items'] = [\n {\n key: '1',\n icon: <LogoutOutlined />,\n label: (\n <a role=\"button\" tabIndex={0} onClick={handleSignOut} onKeyDown={handleKeyDown}>\n {t('UserWidget.signOutText')}\n </a>\n ),\n },\n ]\n\n return (\n <div>\n <Dropdown\n menu={{\n selectable: true,\n items,\n }}\n placement=\"bottomRight\"\n >\n <a\n role=\"button\"\n tabIndex={0}\n onClick={e => {\n e.preventDefault()\n }}\n onKeyDown={handleDropdownKeyDown}\n >\n <Space align=\"center\">\n <span>{user?.authorityId}</span>\n <UserOutlined style={{ fontSize: '16px' }} />\n </Space>\n </a>\n </Dropdown>\n </div>\n )\n}\n\nexport default UserWidget\n","import { useQueryClient } from '@tanstack/react-query'\nimport type { SelectProps } from 'antd'\nimport { Select, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport type { Game } from './types'\n\nconst { Text } = Typography\n\nexport interface GameSelectProps {\n filter?: (game: Game) => boolean\n options?: (data?: Game[]) => SelectProps['options']\n}\n\nconst GameSelect: FC<GameSelectProps> = props => {\n const { filter, options } = props\n const { t } = useTranslation()\n const { gameApiV2, gameId, setGameId } = useToolkitsStore(s => s)\n const { data, isLoading } = useGames()\n const queryClient = useQueryClient()\n\n const filteredData = data?.filter(item => filter?.(item) ?? true)\n\n const _options =\n typeof options === 'function'\n ? options(filteredData)\n : filteredData?.map(item => ({\n label: item.name,\n value: gameApiV2 ? item.game_id : item.id,\n }))\n\n // 切换游戏时清空 TanStack Query 缓存触发重新请求以更新视图。\n const onChange = (value: string | number) => {\n clearCache()\n setGameId(value)\n }\n\n const clearCache = () => {\n // 清除除游戏列表外的所有缓存\n queryClient.removeQueries({\n predicate: query => {\n const queryKey = query.queryKey\n return !queryKey.includes('/api/game/list') && !queryKey.includes('/api/usystem/game/all')\n },\n })\n }\n\n useEffect(() => {\n if (data && data.length > 0) {\n const firstId = gameApiV2 ? data[0].game_id : data[0].id\n if (data.every(item => String(item.game_id || item.id) !== String(gameId))) {\n // 如果当前游戏 ID 不在数据中,则设置为第一个游戏 ID\n setGameId(firstId)\n }\n }\n }, [data])\n\n return (\n <Space>\n <Text>{t('GameSelect.label')}</Text>\n <Select<string | number>\n showSearch\n optionFilterProp=\"label\"\n value={gameId}\n placeholder={t('GameSelect.placeholder')}\n loading={isLoading}\n style={{ width: '200px' }}\n options={_options}\n onChange={onChange}\n />\n </Space>\n )\n}\n\nexport default GameSelect\n","import type { DetailedHTMLProps, FC, ImgHTMLAttributes } from 'react'\n\nimport logoUrl from './logo.png'\n\nexport type LogoProps = Omit<DetailedHTMLProps<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, 'src' | 'alt'>\n\nconst Logo: FC<LogoProps> = props => {\n return <img src={logoUrl} alt=\"logo\" {...props} />\n}\n\nexport default Logo\n","import { memo } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { Logo } from '@/components/logo'\n\ninterface LayoutHeaderProps {\n title?: string\n subtitle?: string\n mainPagePath: string\n collapsed: boolean\n}\n\nconst LayoutHeader = memo<LayoutHeaderProps>(({ title, subtitle, mainPagePath, collapsed }) => (\n <div\n className=\"px-6 py-2 font-bold relative bg-gradient-to-r from-white to-gray-50/30\"\n style={{\n height: 'auto',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n backdropFilter: 'blur(4px)',\n WebkitBackdropFilter: 'blur(4px)',\n }}\n >\n <div className={`flex items-center w-full ${collapsed ? 'justify-center' : ''}`}>\n <Link\n to={mainPagePath}\n className=\"hover:opacity-80 transition-all duration-300 ease-out block rounded-lg p-1 hover:bg-white/50 hover:shadow-sm\"\n style={{\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n opacity: collapsed ? 0.8 : 1,\n transform: collapsed ? 'translateX(0)' : 'translateX(0)',\n }}\n >\n <Logo\n width={36}\n style={{\n objectFit: 'contain',\n display: 'block',\n filter: 'drop-shadow(0 1px 1px rgba(0, 0, 0, 0.05))',\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n />\n </Link>\n {title && (\n <div\n className=\"ml-4 overflow-hidden min-w-0\"\n style={{\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n opacity: collapsed ? 0 : 1,\n width: collapsed ? '0px' : 'auto',\n marginLeft: collapsed ? '0px' : '16px',\n transform: collapsed ? 'translateX(-8px)' : 'translateX(0)',\n }}\n >\n <Link\n to={mainPagePath}\n className=\"text-xl leading-tight hover:text-blue-600 transition-all duration-300 font-bold text-ellipsis overflow-hidden whitespace-nowrap block bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent hover:from-blue-600 hover:to-blue-500\"\n title={title}\n style={{\n letterSpacing: '0.02em',\n textShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n }}\n >\n {title}\n </Link>\n </div>\n )}\n </div>\n <div\n className=\"w-full mt-2 overflow-hidden\"\n style={{\n height: subtitle && !collapsed ? '20px' : '1px',\n transition: 'height 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n >\n <div className=\"flex items-center justify-center h-full w-full\">\n <div\n className=\"w-full border-t border-gray-200 absolute\"\n style={{\n opacity: !subtitle || collapsed ? 1 : 0,\n transition: 'opacity 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n />\n {subtitle && (\n <div\n className=\"flex items-center w-full text-sm\"\n style={{\n opacity: collapsed ? 0 : 1,\n transform: collapsed ? 'translateY(-3px)' : 'translateY(0)',\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n >\n <div className=\"flex-1 border-t border-gray-200\"></div>\n <span className=\"px-3 text-gray-500 font-medium whitespace-nowrap\" title={subtitle}>\n {subtitle}\n </span>\n <div className=\"flex-1 border-t border-gray-200\"></div>\n </div>\n )}\n </div>\n </div>\n </div>\n))\n\nLayoutHeader.displayName = 'LayoutHeader'\n\nexport default LayoutHeader\n","import { MenuFoldOutlined, MenuUnfoldOutlined } from '@ant-design/icons'\nimport { Button, Divider, Space } from 'antd'\nimport * as Antd from 'antd'\nimport type { FC, Key, PropsWithChildren, ReactNode } from 'react'\nimport { Suspense, useState } from 'react'\n\nimport type { NavMenuItem } from '@/components/navMenu'\nimport { NavMenu } from '@/components/navMenu'\nimport { RequireGame } from '@/components/requireGame'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { UserWidget } from '@/components/userWidget'\nimport { PermissionVersion } from '@/constants'\n\nimport type { GameSelectProps } from './GameSelect'\nimport GameSelect from './GameSelect'\nimport LayoutHeader from './LayoutHeader'\n\nconst { Spin, theme } = Antd\nconst { Header, Sider, Content } = Antd.Layout\n\ntype HeaderExtra = { key: Key; children: ReactNode }\n\nexport interface LayoutProps extends Pick<GameSelectProps, 'filter'> {\n collapsible?: boolean\n isMenuLoading?: boolean\n items?: NavMenuItem[]\n navWidth?: string | number\n gameSelectOptions?: GameSelectProps['options']\n headerExtra?: {\n left?: HeaderExtra[]\n right?: HeaderExtra[]\n }\n title?: string\n subtitle?: string\n}\n\nconst Layout: FC<PropsWithChildren<LayoutProps>> = props => {\n const {\n collapsible,\n isMenuLoading,\n items,\n headerExtra,\n children,\n navWidth,\n filter,\n gameSelectOptions,\n title,\n subtitle,\n } = props\n const {\n token: { colorBgContainer, colorBorder },\n } = theme.useToken()\n const {\n permissionVersion,\n navWidth: globalNavWidth,\n collapsible: globalCollapsible,\n mainPagePath,\n collapsed,\n setContext,\n isGlobal,\n } = useToolkitsStore()\n\n const [internalCollapsed, setInternalCollapsed] = useState(collapsed)\n\n const onCollapse = async () => {\n setInternalCollapsed(!internalCollapsed)\n setContext({ collapsed: !internalCollapsed })\n }\n\n const internalCollapsible = collapsible ?? globalCollapsible ?? false\n\n return (\n <Antd.Layout>\n <Sider\n collapsible={internalCollapsible}\n theme=\"light\"\n trigger={null}\n collapsed={internalCollapsed}\n width={navWidth ?? globalNavWidth}\n style={{\n height: '100vh',\n overflowX: 'hidden',\n overflowY: 'auto',\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colorBorder,\n transition: 'all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)',\n }}\n >\n <LayoutHeader\n title={title}\n subtitle={subtitle}\n mainPagePath={mainPagePath}\n collapsed={internalCollapsed || false}\n />\n <NavMenu items={items} loading={isMenuLoading} />\n </Sider>\n <Antd.Layout>\n <Header\n style={{\n padding: '0 24px',\n background: colorBgContainer,\n }}\n >\n <div className=\"flex justify-between items-center h-full\">\n <Space size=\"small\" split={<Divider type=\"vertical\" />} className=\"mr-6\">\n {internalCollapsible && (\n <Button\n type=\"text\"\n icon={internalCollapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}\n style={{ fontSize: '16px' }}\n onClick={onCollapse}\n />\n )}\n {permissionVersion !== PermissionVersion.V1 && !isGlobal && (\n <GameSelect filter={filter} options={gameSelectOptions} />\n )}\n {headerExtra?.left?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n </Space>\n <Space size=\"small\" split={<Divider type=\"vertical\" />}>\n {headerExtra?.right?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n <UserWidget />\n </Space>\n </div>\n </Header>\n <Content\n style={{\n overflow: 'auto',\n padding: '24px 16px',\n maxHeight: 'calc(100vh - 64px)',\n transition: 'margin-left 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)',\n }}\n >\n <Suspense\n fallback={\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '200px',\n }}\n />\n }\n >\n <RequireGame>{children}</RequireGame>\n </Suspense>\n </Content>\n </Antd.Layout>\n </Antd.Layout>\n )\n}\n\nexport default Layout\n","import { create } from 'zustand'\n\ninterface ModalState {\n open: Map<number, boolean>\n usedIds: Set<number>\n isOpen: (uuid: number) => boolean\n show: (uuid: number) => void\n hide: (uuid: number) => void\n hideAll: () => void\n checkUniqueness: (uuid: number) => boolean\n registerIds: (uuid: number) => boolean\n cleanup: (uuid: number) => void\n}\n\nexport const useModalStore = create<ModalState>((set, get) => ({\n open: new Map(),\n usedIds: new Set(),\n isOpen: uuid => get().open.get(uuid) ?? false,\n show(uuid) {\n set({\n open: new Map(get().open).set(uuid, true),\n })\n },\n hide(uuid) {\n set({ open: new Map(get().open).set(uuid, false) })\n },\n hideAll() {\n set({ open: new Map() })\n },\n checkUniqueness(uuid) {\n const { usedIds } = get()\n return !usedIds.has(uuid)\n },\n registerIds(uuid) {\n const { usedIds } = get()\n if (usedIds.has(uuid)) {\n return false // ID 已被使用\n }\n set({ usedIds: new Set(usedIds).add(uuid) })\n return true // 注册成功\n },\n cleanup(uuid) {\n const { open, usedIds } = get()\n const newOpen = new Map(open)\n const newUsedIds = new Set(usedIds)\n newOpen.delete(uuid)\n newUsedIds.delete(uuid)\n set({ open: newOpen, usedIds: newUsedIds })\n },\n}))\n","import type { ModalProps } from 'antd'\nimport { Modal } from 'antd'\nimport { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useModalStore } from './stores'\n\nexport interface UseModalOperation {\n hide: () => void\n}\n\nexport interface UseModalProps extends Omit<ModalProps, 'open' | 'confirmLoading' | 'onOk' | 'onCancel'> {\n content?: ReactNode | ((operation: UseModalOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n}\n\nexport function useModal(props: UseModalProps) {\n const { content, onConfirm, afterOpen, afterClose, ...modalProps } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useModalStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onCancel: ModalProps['onCancel'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const onOk = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n _hide()\n await afterClose?.()\n } catch (error) {\n console.error('Modal confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm, _hide, afterClose])\n\n const internalModal = (\n <Modal {...modalProps} open={open} confirmLoading={confirmLoading} onOk={onOk} onCancel={onCancel}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Modal>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n modal: internalModal,\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useModal, type UseModalOperation, type UseModalProps } from './modal'\n\nexport interface UseFormModalProps<Values extends AnyObject = AnyObject, ExtraValues = any>\n extends Omit<UseModalProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseModalOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport function useFormModal<Values extends AnyObject = AnyObject, ExtraValues = any>(\n props: UseFormModalProps<Values, ExtraValues>,\n) {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...modalProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n let [internalForm] = Form.useForm<Values>()\n internalForm = form || internalForm\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, modal } = useModal({\n ...modalProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: { initialValues?: RecursivePartial<Values>; extraValues?: ExtraValues }) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n modal,\n }\n}\n","import type { ButtonProps } from 'antd'\nimport { Button, Tooltip } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface PermissionButtonProps extends ButtonProps {\n code?: string | string[]\n showLoading?: boolean\n config?: KyOptions\n}\n\nconst PermissionButton: FC<PropsWithChildren<PermissionButtonProps>> = props => {\n const { children, code, showLoading, disabled, config, ...restProps } = props\n const codes = code ? (Array.isArray(code) ? code : [code]) : []\n const { data, isLoading } = usePermission(codes, config)\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <Button loading={showLoading} disabled={!showLoading} {...restProps}>\n {children}\n </Button>\n )\n }\n\n // 只要有一个权限即可\n if (typeof data === 'boolean' || (data && Object.values(data).some(Boolean))) {\n return (\n <Button disabled={disabled} {...restProps}>\n {children}\n </Button>\n )\n }\n\n return (\n <Tooltip defaultOpen={false} title={t('global.noEntitlement')}>\n <Button disabled {...restProps}>\n {children}\n </Button>\n </Tooltip>\n )\n}\n\nexport default PermissionButton\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { QueryListPayload } from './QueryList'\n\n// Query 更新函数类型\ntype QueryRefetchFunction = () => void | Promise<unknown>\n\n// QueryList 实例信息\ninterface QueryListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: QueryListPayload\n refetch: QueryRefetchFunction\n}\n\n// 简化的状态接口\ninterface QueryListState {\n // 实例管理\n instances: Map<string, QueryListInstance>\n\n // 核心方法\n registerInstance(id: string, url: string, queryKey: readonly unknown[], refetch: QueryRefetchFunction): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: QueryListPayload): void\n getPayload(id: string): QueryListPayload\n refetch(id: string, payload?: QueryListPayload): Promise<void>\n\n // 工具方法\n getInstance(id: string): QueryListInstance | undefined\n getAllInstances(): QueryListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: QueryListPayload = Object.freeze({\n page: 1,\n size: 10,\n filters: Object.freeze({}),\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<QueryListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新refetch函数\n if (existingInstance) {\n // 仅当 refetch 变更时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n return state\n }\n\n // 创建新实例\n const instance: QueryListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`QueryList instance with id \"${id}\" not found`)\n return\n }\n\n let payloadChanged = false\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n payloadChanged = true\n }\n }\n\n // 若 payload 发生变化,queryKey 会变化,React Query 会自动触发请求,此处不再手动 refetch,避免重复请求\n if (payloadChanged) {\n return\n }\n\n // 否则手动触发一次请求\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch QueryList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'query-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useQueryListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport { isEqual } from 'lodash-es'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useQueryListStore } from './stores'\n\nexport interface ListResponse<T = any> {\n list: T[]\n total: number\n}\n\nexport interface QueryListPayload<Values = any> {\n page?: number\n size?: number\n filters?: Values\n}\n\n// 缓存配置\nexport interface CacheConfig {\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\n// 支持的 HTTP 请求方法类型\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD'\n\n// 简化的请求配置\nexport interface QueryListRequestConfig extends CacheConfig {\n url: string\n method?: HttpMethod\n body?: FormData | Record<string | number, any>\n searchParams?: Record<string | number, any>\n headers?: Record<string, string>\n}\n\nexport type QueryListRequestConfigType<Values = any> =\n | QueryListRequestConfig\n | ((payload: QueryListPayload<Values>) => QueryListRequestConfig)\n\nexport enum QueryListAction {\n Confirm,\n Reset,\n Jump,\n Init,\n}\n\nexport interface QueryListDataType<Item> {\n dataSource: Item[]\n total: number\n}\n\nexport interface QueryListRef<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any> {\n data: Data | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n}\n\nexport interface QueryListDataAdapter<Item extends AnyObject = AnyObject> {\n total?: number\n items?: Item[]\n}\n\nexport type QueryListDataAdapterConfig<Item extends AnyObject = AnyObject, Data = any> =\n | QueryListDataAdapter<Item>\n | ((data: Data) => QueryListDataAdapter<Item>)\n\nexport interface QueryListProps<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any>\n extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier?: string // 可选的标识符,用于标识和外部控制,未提供时自动生成\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n onePage?: boolean // 无分页\n defaultSize?: number\n pageSizeOptions?: number[]\n request: QueryListRequestConfigType<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: QueryListAction, form: FormInstance<Values>, data?: Data) => void\n afterError?: (error: Error, action: QueryListAction, form: FormInstance<Values>) => void\n dataAdapter?: QueryListDataAdapterConfig<Item, Data>\n footer?: (data: Data | undefined) => ReactNode\n}\n\n// 常量定义\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000 // 默认缓存5分钟\nconst DEFAULT_STALE_TIME = 30 * 1000 // 默认30秒内数据新鲜\n\n// 无请求体的 HTTP 方法\nconst BODYLESS_METHODS: HttpMethod[] = ['GET', 'HEAD']\n\n// 支持请求体的 HTTP 方法\nconst BODY_SUPPORTED_METHODS: HttpMethod[] = ['POST', 'PUT', 'PATCH', 'DELETE']\n\nconst SPIN_STYLE: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n}\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\n\n// 生成唯一 identifier 的函数\nconst generateUniqueIdentifier = (): string => {\n return `queryList_${Date.now()}_${++identifierCounter}`\n}\n\nconst InternalQueryList = <Item extends AnyObject = AnyObject, Values extends AnyObject = any, Data = any>(\n props: QueryListProps<Item, Values, Data>,\n ref: Ref<QueryListRef<Item, Values, Data>>,\n) => {\n const { t } = useTranslation()\n\n const {\n form,\n identifier,\n code,\n onePage,\n buttonsAlign,\n showReset,\n defaultSize = 10,\n refreshInterval = 0,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n footer,\n pageSizeOptions,\n request,\n dataAdapter,\n ...tableProps\n } = props\n\n const [formInstance] = Form.useForm<Values>(form)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => {\n return identifier || generateUniqueIdentifier()\n }, [identifier])\n const action = useRef<QueryListAction>(QueryListAction.Init)\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n const [isValid, setIsValid] = useState(false)\n const isInitialized = useRef(false)\n const isUpdatingFromPayload = useRef(false) // 防止循环更新的标志\n\n // 仅订阅当前 identifier 的 payload,避免因其它实例变化导致不必要重渲染\n const subscribedPayload = useQueryListStore(s => s.getPayload(finalIdentifier))\n const ky = useKy()\n\n const { page, size = defaultSize, filters } = subscribedPayload\n\n const payload = { page, size, filters }\n\n // 处理 request 配置(对象或函数)\n const resolvedRequest = typeof request === 'function' ? request(payload) : request\n\n const {\n url,\n method = 'GET',\n body,\n searchParams,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = resolvedRequest\n\n // 验证请求方法\n const normalizedMethod = method.toUpperCase() as HttpMethod\n const allSupportedMethods: HttpMethod[] = [...BODYLESS_METHODS, ...BODY_SUPPORTED_METHODS]\n\n if (!allSupportedMethods.includes(normalizedMethod)) {\n console.warn(`QueryList: 不支持的 HTTP 请求方法 \"${method}\",将使用 GET 方法`)\n }\n\n // 根据请求方法决定参数传递方式\n const isBodylessMethod = BODYLESS_METHODS.includes(normalizedMethod)\n const supportsBody = BODY_SUPPORTED_METHODS.includes(normalizedMethod)\n\n const defaultRequestData = { ...filters, ...(!onePage && { page, size }) }\n\n // 使用用户提供的参数,否则使用默认请求数据\n const requestBody = body || (supportsBody ? defaultRequestData : undefined)\n const requestSearchParams = searchParams || defaultRequestData\n\n const requestHeaders = headers\n\n const shouldPoll = useRef(false)\n\n const queryKey = ['queryList', url, finalIdentifier, page, size, filters]\n\n const { data, isLoading, refetch } = useQuery({\n queryKey,\n queryFn: async () => {\n try {\n const kyOptions: KyOptions = {\n method: normalizedMethod,\n searchParams: requestSearchParams,\n headers: requestHeaders,\n }\n\n // 只有非无请求体方法才允许有 body\n if (requestBody && !isBodylessMethod) {\n if (requestBody instanceof FormData) {\n // FormData 使用 body 方式传递\n kyOptions.body = requestBody\n } else if (typeof requestBody === 'string') {\n // 字符串直接作为 body\n kyOptions.body = requestBody\n } else {\n // 对象类型使用 .json 方式传递\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, response)\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n retry: (failureCount, retryError) => {\n // 自定义重试逻辑\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false // 认证错误不重试\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), // 指数退避\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n // 缓存配置\n gcTime: cacheTime,\n staleTime,\n enabled: accessible && isValid,\n })\n\n // 处理 dataAdapter 配置\n const resolvedDataAdapter = useMemo(() => {\n const adapter = dataAdapter\n const defaultAdapter: QueryListDataAdapter<Item> = {\n total: (data as ListResponse<Item>)?.total,\n items: (data as ListResponse<Item>)?.list,\n }\n\n if (typeof adapter === 'function') {\n return {\n ...defaultAdapter,\n ...adapter(data as Data),\n }\n }\n return {\n ...defaultAdapter,\n ...adapter,\n }\n }, [dataAdapter, data])\n\n // 在组件挂载时注册实例,避免因 queryKey/refetch 身份变化反复注册\n useEffect(() => {\n useQueryListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch)\n return () => {\n useQueryListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url])\n\n const dataSource = resolvedDataAdapter.items\n const total = resolvedDataAdapter.total\n\n const pagination = useMemo(() => {\n if (onePage) return false\n\n return {\n pageSizeOptions,\n showSizeChanger: true,\n showQuickJumper: true,\n current: page,\n pageSize: size,\n total,\n onChange: async (currentPage: number, currentSize: number) => {\n action.current = QueryListAction.Jump\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: currentPage,\n size: currentSize,\n })\n },\n }\n }, [onePage, pageSizeOptions, page, size, total, finalIdentifier])\n\n const onConfirm = useCallback(async () => {\n action.current = QueryListAction.Confirm\n try {\n await formInstance.validateFields()\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const onReset = useCallback(async () => {\n action.current = QueryListAction.Reset\n formInstance.resetFields()\n\n try {\n await formInstance.validateFields({ validateOnly: true })\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isLoading}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(formInstance), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={formInstance} />\n )\n\n const tableExtraRenderer = typeof tableExtra === 'function' ? tableExtra(formInstance, data) : tableExtra\n\n const renderFooter = footer ? () => footer(data) : undefined\n\n // 监听 payload.filters 变化并同步更新表单实例\n useEffect(() => {\n if (!isInitialized.current || isUpdatingFromPayload.current) {\n return\n }\n\n // 获取当前表单的值\n const currentFormValues = formInstance.getFieldsValue()\n\n // 如果 payload 中的 filters 与当前表单值不同,则更新表单\n if (filters && !isEqual(currentFormValues, filters)) {\n isUpdatingFromPayload.current = true\n formInstance.setFieldsValue(filters)\n // 使用 setTimeout 确保在下一个事件循环中重置标志\n setTimeout(() => {\n isUpdatingFromPayload.current = false\n }, 0)\n }\n }, [filters, formInstance])\n\n // 首次挂载时自动校验表单,校验通过则更新 payload 并允许请求\n useEffect(() => {\n if (!accessible || isInitialized.current) {\n return\n }\n\n const init = async () => {\n console.log('QueryList init starting')\n try {\n formInstance.resetFields()\n const value = await formInstance.validateFields({ validateOnly: true })\n console.log('QueryList init validation success:', value)\n useQueryListStore.getState().updatePayload(finalIdentifier, {\n page: 1,\n filters: value,\n })\n setIsValid(true)\n console.log('QueryList init completed, isValid set to true')\n } catch (error) {\n console.log('QueryList init validation failed:', error)\n setIsValid(false)\n } finally {\n isInitialized.current = true\n }\n }\n\n const rafId = requestAnimationFrame(() => {\n Promise.resolve().then(init)\n })\n\n return () => {\n if (rafId) {\n cancelAnimationFrame(rafId)\n }\n }\n }, [accessible, finalIdentifier, formInstance])\n\n useImperativeHandle(\n ref,\n () => ({\n data,\n dataSource,\n form: formInstance,\n refetch,\n }),\n [data, dataSource, formInstance, refetch],\n )\n\n if (isChecking) {\n return <Spin style={SPIN_STYLE} />\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n return (\n <div>\n {formRenderer}\n {tableExtraRenderer}\n <Table\n {...tableProps}\n dataSource={dataSource}\n loading={isLoading}\n pagination={pagination}\n footer={renderFooter}\n />\n </div>\n )\n}\n\nconst QueryList = forwardRef(InternalQueryList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: QueryListProps<Item, Values, Data> & { ref?: Ref<QueryListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default QueryList\n","import { Result, Spin } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface RequirePermissionProps {\n code: string\n config?: KyOptions\n}\n\nconst RequirePermission: FC<PropsWithChildren<RequirePermissionProps>> = props => {\n const { code, config, children } = props\n const { data: accessible, isLoading } = usePermission(code, config)\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 200,\n }}\n />\n )\n }\n\n if (!accessible) {\n return <Result status=\"403\" subTitle={t('global.noEntitlement')} />\n }\n\n return <>{children}</>\n}\n\nexport default RequirePermission\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare const SSO_URL = "https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1";
|
|
2
|
+
declare const APP_ID_HEADER = "App-ID";
|
|
3
|
+
declare const FRONTEND_ROUTE_PREFIX = "/console/";
|
|
4
|
+
declare enum PermissionVersion {
|
|
5
|
+
V1 = "v1",
|
|
6
|
+
V2 = "v2",
|
|
7
|
+
V3 = "v3"
|
|
8
|
+
}
|
|
9
|
+
declare const WILDCARD = "*";
|
|
10
|
+
|
|
11
|
+
export { APP_ID_HEADER, FRONTEND_ROUTE_PREFIX, PermissionVersion, SSO_URL, WILDCARD };
|
package/lib/constants.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{b as APP_ID_HEADER,c as FRONTEND_ROUTE_PREFIX,d as PermissionVersion,a as SSO_URL,e as WILDCARD}from'./chunk-LRMME3YZ.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants/index.ts"],"names":["PermissionVersion"],"mappings":";AAAO,IAAM,OAAU,GAAA;AAEhB,IAAM,aAAgB,GAAA;AAEtB,IAAM,qBAAwB,GAAA;AAEzB,IAAA,iBAAA,qBAAAA,kBAAL,KAAA;AACL,EAAAA,mBAAA,IAAK,CAAA,GAAA,IAAA;AACL,EAAAA,mBAAA,IAAK,CAAA,GAAA,IAAA;AACL,EAAAA,mBAAA,IAAK,CAAA,GAAA,IAAA;AAHK,EAAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AAML,IAAM,QAAW,GAAA","file":"constants.js","sourcesContent":["export const SSO_URL = 'https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1'\n\nexport const APP_ID_HEADER = 'App-ID'\n\nexport const FRONTEND_ROUTE_PREFIX = '/console/'\n\nexport enum PermissionVersion {\n V1 = 'v1',\n V2 = 'v2',\n V3 = 'v3',\n}\n\nexport const WILDCARD = '*'\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {a}from'./chunk-JIBSYGRB.js';import {b}from'./chunk-WHOTHZUW.js';import {c}from'./chunk-LRMME3YZ.js';import'./chunk-OLM4QNJB.js';import {Editor}from'@monaco-editor/react';import {App,Form,Card,Input,Switch,InputNumber,Button}from'antd';import {useNavigate}from'react-router-dom';import {jsx,jsxs}from'react/jsx-runtime';var y=b(()=>{let{message:p}=App.useApp(),[c$1]=Form.useForm(),o=useNavigate(),{mutate:I}=a();return jsx(Card,{title:"\u521B\u5EFA\u83DC\u5355\u9879",children:jsxs(Form,{scrollToFirstError:!0,form:c$1,labelCol:{flex:"120px"},initialValues:{is_common:!1,is_model:!1,order:0},onFinish:async d=>{let{permissions:s,front_route:f,...F}=d;await I({...F,front_route:c+f,permissions:s?JSON.parse(s):void 0}),p.success("\u521B\u5EFA\u6210\u529F",.8,()=>o("..",{relative:"route"}));},children:[jsx(Form.Item,{label:"\u83DC\u5355\u9879\u540D\u79F0",name:"category",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"\u524D\u7AEF\u8DEF\u7531",name:"front_route",rules:[{required:!0}],children:jsx(Input,{prefix:c})}),jsx(Form.Item,{label:"\u6A21\u677F\u540D\u79F0",name:"model_name",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"Is Common",name:"is_common",rules:[{required:!0}],valuePropName:"checked",children:jsx(Switch,{})}),jsx(Form.Item,{label:"Order",name:"order",children:jsx(InputNumber,{className:"w-full"})}),jsx(Form.Item,{label:"\u63A5\u53E3\u89C4\u5219",name:"permissions",children:jsx(Editor,{theme:"vs-dark",height:"300px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Schema",name:"scheme",rules:[{required:!0}],children:jsx(Editor,{theme:"vs-dark",height:"600px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Ext",name:"ext",children:jsx(Input.TextArea,{rows:5})}),jsx(Form.Item,{children:jsxs("div",{className:"flex justify-center gap-8",children:[jsx(Button,{type:"primary",htmlType:"submit",children:"\u63D0\u4EA4"}),jsx(Button,{onClick:()=>{o("..",{relative:"path"});},children:"\u53D6\u6D88"})]})})]})})},{isGlobal:!0}),M=y;export{M as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/styles/index.css"],"sourcesContent":["/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-white: #fff;\n --spacing: 0.25rem;\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --font-weight-medium: 500;\n --font-weight-bold: 700;\n --leading-tight: 1.25;\n --radius-lg: 0.5rem;\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::-moz-placeholder {\n opacity: 1;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::-moz-placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n -webkit-appearance: button;\n -moz-appearance: button;\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .collapse {\n visibility: collapse;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\/2 {\n top: calc(1/2 * 100%);\n }\n .top-6 {\n top: calc(var(--spacing) * 6);\n }\n .top-16 {\n top: calc(var(--spacing) * 16);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-16 {\n right: calc(var(--spacing) * 16);\n }\n .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-14 {\n left: calc(var(--spacing) * 14);\n }\n .z-10 {\n z-index: 10;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .mx-4 {\n margin-inline: calc(var(--spacing) * 4);\n }\n .my-12 {\n margin-block: calc(var(--spacing) * 12);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mr-6 {\n margin-right: calc(var(--spacing) * 6);\n }\n .mb-0 {\n margin-bottom: calc(var(--spacing) * 0);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .mb-12 {\n margin-bottom: calc(var(--spacing) * 12);\n }\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-full {\n height: 100%;\n }\n .h-screen {\n height: 100vh;\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-10\\/12 {\n width: calc(10/12 * 100%);\n }\n .w-\\[650px\\] {\n width: 650px;\n }\n .w-full {\n width: 100%;\n }\n .w-screen {\n width: 100vw;\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .flex-1 {\n flex: 1;\n }\n .flex-grow-0 {\n flex-grow: 0;\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-10 {\n --tw-translate-y: calc(var(--spacing) * -10);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .items-center {\n align-items: center;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-gradient-to-r {\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .from-gray-800 {\n --tw-gradient-from: var(--color-gray-800);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-white {\n --tw-gradient-from: var(--color-white);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-50\\/30 {\n --tw-gradient-to: color-mix(in srgb, oklch(98.5% 0.002 247.839) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-gray-50) 30%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-600 {\n --tw-gradient-to: var(--color-gray-600);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .bg-clip-text {\n -webkit-background-clip: text;\n background-clip: text;\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .px-36 {\n padding-inline: calc(var(--spacing) * 36);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .text-center {\n text-align: center;\n }\n .text-end {\n text-align: end;\n }\n .text-start {\n text-align: start;\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .text-ellipsis {\n text-overflow: ellipsis;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-transparent {\n color: transparent;\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .hover\\:bg-white\\/50 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n }\n }\n .hover\\:from-blue-600 {\n &:hover {\n @media (hover: hover) {\n --tw-gradient-from: var(--color-blue-600);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n }\n }\n .hover\\:to-blue-500 {\n &:hover {\n @media (hover: hover) {\n --tw-gradient-to: var(--color-blue-500);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n }\n }\n .hover\\:text-blue-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-600);\n }\n }\n }\n .hover\\:opacity-80 {\n &:hover {\n @media (hover: hover) {\n opacity: 80%;\n }\n }\n }\n .hover\\:shadow-sm {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"<color>\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"<length-percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n }\n }\n}\n"],"mappings":";AACA;AACA;AACA;AACE;AAAA,EAAO;AACL;AAAA,MAAa,aAAa;AAAA,MAAE,SAAS;AAAA,MAAE,UAAU;AAAA,MAAE,mBAAmB;AAAA,MACpE,gBAAgB;AAAA,MAAE,iBAAiB;AAAA,MAAE;AACvC;AAAA,MAAa,YAAY;AAAA,MAAE,cAAc;AAAA,MAAE,KAAK;AAAA,MAAE,MAAM;AAAA,MAAE,QAAQ;AAAA,MAAE,iBAAiB;AAAA,MACnF,aAAa;AAAA,MAAE;AACjB,sBAAkB,MAAM,MAAM,MAAM;AACpC,sBAAkB,MAAM,MAAM,MAAM;AACpC,sBAAkB,MAAM,MAAM,MAAM;AACpC,qBAAiB,MAAM,MAAM,MAAM;AACnC,sBAAkB,MAAM,MAAM,MAAM;AACpC,sBAAkB,MAAM,MAAM,MAAM;AACpC,sBAAkB,MAAM,MAAM,KAAK;AACnC,sBAAkB,MAAM,MAAM,MAAM;AACpC,mBAAe;AACf,eAAW;AACX,eAAW;AACX,4BAAwB,KAAK,KAAK,EAAE;AACpC,eAAW;AACX,4BAAwB,KAAK,KAAK,EAAE;AACpC,gBAAY;AACZ,6BAAyB,KAAK,EAAE,EAAE;AAClC,0BAAsB;AACtB,wBAAoB;AACpB,qBAAiB;AACjB,iBAAa;AACb,gBAAY,aAAa,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE;AACpC,mCAA+B;AAC/B,0CAAsC,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;AAChE,2BAAuB,IAAI;AAC3B,gCAA4B,IAAI;AAClC;AACF;AACA;AACE;AAAA,EAAG;AAAA,EAAS;AAAA,EAAU;AAAA,EAAY;AAChC,gBAAY;AACZ,YAAQ;AACR,aAAS;AACT,YAAQ,EAAE;AACZ;AACA;AAAA,EAAM;AACJ,iBAAa;AACb,8BAA0B;AAC1B,mBAAe;AACb,iBAAa;AACV,cAAU;AACf,iBAAa,IAAI,qBAAqB,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE;AACxI,2BAAuB,IAAI,+BAA+B,EAAE;AAC5D,6BAAyB,IAAI,iCAAiC,EAAE;AAChE,iCAA6B;AAC/B;AACA;AACE,YAAQ;AACR,WAAO;AACP,sBAAkB;AACpB;AACA,MAAI,OAAO,CAAC;AACV,6BAAyB,UAAU;AACnC,qBAAiB,UAAU;AAC7B;AACA;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAClB,eAAW;AACX,iBAAa;AACf;AACA;AACE,WAAO;AACP,6BAAyB;AACzB,qBAAiB;AACnB;AACA;AAAA,EAAG;AACD,iBAAa;AACf;AACA;AAAA,EAAM;AAAA,EAAK;AAAA,EAAM;AACf,iBAAa,IAAI,0BAA0B,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE;AACtI,2BAAuB,IAAI,oCAAoC,EAAE;AACjE,6BAAyB,IAAI,sCAAsC,EAAE;AACrE,eAAW;AACb;AACA;AACE,eAAW;AACb;AACA;AAAA,EAAK;AACH,eAAW;AACX,iBAAa;AACb,cAAU;AACV,oBAAgB;AAClB;AACA;AACE,YAAQ;AACV;AACA;AACE,SAAK;AACP;AACA;AACE,iBAAa;AACb,kBAAc;AACd,qBAAiB;AACnB;AACA;AACE,aAAS;AACX;AACA;AACE,oBAAgB;AAClB;AACA;AACE,aAAS;AACX;AACA;AAAA,EAAI;AAAA,EAAI;AACN,gBAAY;AACd;AACA;AAAA,EAAK;AAAA,EAAK;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAO;AAC7C,aAAS;AACT,oBAAgB;AAClB;AACA;AAAA,EAAK;AACH,eAAW;AACX,YAAQ;AACV;AACA;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAU;AACzC,UAAM;AACN,2BAAuB;AACvB,6BAAyB;AACzB,oBAAgB;AAChB,WAAO;AACP,mBAAe;AACf,sBAAkB;AAClB,aAAS;AACX;AACA,SAAO,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ;AACpC,iBAAa;AACf;AACA,SAAO,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,SAAS;AAC7C,0BAAsB;AACxB;AACA;AACE,uBAAmB;AACrB;AACA;AACE,aAAS;AACX;AACA;AACE,aAAS;AACX;AACA,YAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,oBAAqB,GAAG,CAAC,sBAAsB,EAAE;AACnF;AACE,aAAO;AACP,gBAAU,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,GAAG,EAAE;AACvC,eAAO,UAAU,GAAG,KAAK,EAAE,aAAa,GAAG,EAAE;AAC/C;AACF;AACA;AACE,aAAO;AACP,gBAAU,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,GAAG,EAAE;AACvC,eAAO,UAAU,GAAG,KAAK,EAAE,aAAa,GAAG,EAAE;AAC/C;AACF;AACF;AACA;AACE,YAAQ;AACV;AACA;AACE,wBAAoB;AACtB;AACA;AACE,gBAAY;AACZ,gBAAY;AACd;AACA;AACE,aAAS;AACX;AACA;AACE,aAAS;AACX;AACA;AAAA,EAAyB;AAAA,EAAoC;AAAA,EAAqC;AAAA,EAAmC;AAAA,EAAoC;AAAA,EAAsC;AAAA,EAAsC;AAAA,EAA2C;AAC9R,mBAAe;AACjB;AACA;AACE,gBAAY;AACd;AACA;AAAA,EAAQ,KAAK,OAAO,CAAC,cAAgB,CAAC,aAAe,CAAC;AAAA,EAAiB;AACrE,wBAAoB;AACjB,qBAAiB;AACZ,gBAAY;AACtB;AACA;AAAA,EAA6B;AAC3B,YAAQ;AACV;AACA,GAAC,OAAO,OAAO,KAAK,CAAC;AACnB,aAAS;AACX;AACF;AACA;AACE,GAAC;AACC,gBAAY;AACd;AACA,GAAC;AACC,cAAU;AACZ;AACA,GAAC;AACC,cAAU;AACZ;AACA,GAAC;AACC,cAAU;AACZ;AACA,GAAC;AACC,SAAK,KAAK,IAAI,WAAW,EAAE;AAC7B;AACA,GAAC;AACC,SAAK,KAAK,CAAC,CAAC,EAAE,EAAE;AAClB;AACA,GAAC;AACC,SAAK,KAAK,IAAI,WAAW,EAAE;AAC7B;AACA,GAAC;AACC,SAAK,KAAK,IAAI,WAAW,EAAE;AAC7B;AACA,GAAC;AACC,WAAO,KAAK,IAAI,WAAW,EAAE;AAC/B;AACA,GAAC;AACC,WAAO,KAAK,IAAI,WAAW,EAAE;AAC/B;AACA,GAAC;AACC,YAAQ,KAAK,IAAI,WAAW,EAAE;AAChC;AACA,GAAC;AACC,UAAM,KAAK,IAAI,WAAW,EAAE;AAC9B;AACA,GAAC;AACC,UAAM,KAAK,IAAI,WAAW,EAAE;AAC9B;AACA,GAAC;AACC,aAAS;AACX;AACA,GAAC;AACC,WAAO;AACP,WAAO,CAAC,MAAM,CAAC,EAAE;AACf,iBAAW;AACb;AACA,WAAO,CAAC,MAAM,CAAC,EAAE;AACf,iBAAW;AACb;AACA,WAAO,CAAC,MAAM,CAAC,EAAE;AACf,iBAAW;AACb;AACA,WAAO,CAAC,MAAM,CAAC,EAAE;AACf,iBAAW;AACb;AACA,WAAO,CAAC,MAAM,CAAC,EAAE;AACf,iBAAW;AACb;AACF;AACA,GAAC;AACC,mBAAe,KAAK,IAAI,WAAW,EAAE;AACvC;AACA,GAAC;AACC,kBAAc,KAAK,IAAI,WAAW,EAAE;AACtC;AACA,GAAC;AACC,gBAAY,KAAK,IAAI,WAAW,EAAE;AACpC;AACA,GAAC;AACC,gBAAY,KAAK,IAAI,WAAW,EAAE;AACpC;AACA,GAAC;AACC,kBAAc,KAAK,IAAI,WAAW,EAAE;AACtC;AACA,GAAC;AACC,mBAAe,KAAK,IAAI,WAAW,EAAE;AACvC;AACA,GAAC;AACC,mBAAe,KAAK,IAAI,WAAW,EAAE;AACvC;AACA,GAAC;AACC,mBAAe,KAAK,IAAI,WAAW,EAAE;AACvC;AACA,GAAC;AACC,mBAAe,KAAK,IAAI,WAAW,EAAE;AACvC;AACA,GAAC;AACC,iBAAa,KAAK,IAAI,WAAW,EAAE;AACrC;AACA,GAAC;AACC,aAAS;AACX;AACA,GAAC;AACC,aAAS;AACX;AACA,GAAC;AACC,aAAS;AACX;AACA,GAAC;AACC,aAAS;AACX;AACA,GAAC;AACC,YAAQ,KAAK,IAAI,WAAW,EAAE;AAChC;AACA,GAAC;AACC,YAAQ;AACV;AACA,GAAC;AACC,YAAQ;AACV;AACA,GAAC;AACC,WAAO,KAAK,IAAI,WAAW,EAAE;AAC/B;AACA,GAAC;AACC,WAAO,KAAK,EAAE,CAAC,GAAG,EAAE;AACtB;AACA,GAAC;AACC,WAAO;AACT;AACA,GAAC;AACC,WAAO;AACT;AACA,GAAC;AACC,WAAO;AACT;AACA,GAAC;AACC,eAAW,KAAK,IAAI,WAAW,EAAE;AACnC;AACA,GAAC;AACC,UAAM;AACR;AACA,GAAC;AACC,eAAW;AACb;AACA,GAAC;AACC,sBAAkB,KAAK,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE;AAC1C,eAAW,IAAI,kBAAkB,IAAI;AACvC;AACA,GAAC;AACC,sBAAkB,KAAK,IAAI,WAAW,EAAE;AACxC,eAAW,IAAI,kBAAkB,IAAI;AACvC;AACA,GAAC;AACC,eAAW,IAAI,aAAa,GAAG,IAAI,aAAa,GAAG,IAAI,aAAa,GAAG,IAAI,WAAW,GAAG,IAAI,WAAW;AAC1G;AACA,GAAC;AACC,oBAAgB;AAClB;AACA,GAAC;AACC,oBAAgB;AAClB;AACA,GAAC;AACC,iBAAa;AACf;AACA,GAAC;AACC,qBAAiB;AACnB;AACA,GAAC;AACC,qBAAiB;AACnB;AACA,GAAC;AACC,SAAK,KAAK,IAAI,WAAW,EAAE;AAC7B;AACA,GAAC;AACC,SAAK,KAAK,IAAI,WAAW,EAAE;AAC7B;AACA,GAAC;AACC,cAAU;AACZ;AACA,GAAC;AACC,mBAAe,IAAI;AACrB;AACA,GAAC;AACC,sBAAkB,IAAI;AACtB,sBAAkB;AACpB;AACA,GAAC;AACC,kBAAc,IAAI;AACpB;AACA,GAAC;AACC,sBAAkB,IAAI;AACxB;AACA,GAAC;AACC,4BAAwB,GAAG,MAAM,GAAG;AACpC,sBAAkB,gBAAgB,IAAI;AACxC;AACA,GAAC;AACC,wBAAoB,IAAI;AACxB,yBAAqB,IAAI,uBAAuB,EAAE,IAAI,uBAAuB,EAAE,IAAI,oBAAoB,IAAI,4BAA4B,EAAE,IAAI,kBAAkB,IAAI;AACrK;AACA,GAAC;AACC,wBAAoB,IAAI;AACxB,yBAAqB,IAAI,uBAAuB,EAAE,IAAI,uBAAuB,EAAE,IAAI,oBAAoB,IAAI,4BAA4B,EAAE,IAAI,kBAAkB,IAAI;AACrK;AACA,GAAC;AACC,sBAAkB,UAAU,GAAG,IAAI,EAAE,MAAM,MAAM,MAAM,SAAS,GAAG,EAAE;AACrE,cAAU,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,GAAG,EAAE;AACvC,wBAAkB,UAAU,GAAG,KAAK,EAAE,IAAI,iBAAiB,GAAG,EAAE;AAClE;AACA,yBAAqB,IAAI,uBAAuB,EAAE,IAAI,uBAAuB,EAAE,IAAI,oBAAoB,IAAI,4BAA4B,EAAE,IAAI,kBAAkB,IAAI;AACrK;AACA,GAAC;AACC,sBAAkB,IAAI;AACtB,yBAAqB,IAAI,uBAAuB,EAAE,IAAI,uBAAuB,EAAE,IAAI,oBAAoB,IAAI,4BAA4B,EAAE,IAAI,kBAAkB,IAAI;AACrK;AACA,GAAC;AACC,6BAAyB;AACjB,qBAAiB;AAC3B;AACA,GAAC;AACC,aAAS,KAAK,IAAI,WAAW,EAAE;AACjC;AACA,GAAC;AACC,oBAAgB,KAAK,IAAI,WAAW,EAAE;AACxC;AACA,GAAC;AACC,oBAAgB,KAAK,IAAI,WAAW,EAAE;AACxC;AACA,GAAC;AACC,oBAAgB,KAAK,IAAI,WAAW,EAAE;AACxC;AACA,GAAC;AACC,mBAAe,KAAK,IAAI,WAAW,EAAE;AACvC;AACA,GAAC;AACC,gBAAY;AACd;AACA,GAAC;AACC,gBAAY;AACd;AACA,GAAC;AACC,gBAAY;AACd;AACA,GAAC;AACC,eAAW,IAAI;AACf,iBAAa,IAAI,YAAY,EAAE,IAAI;AACrC;AACA,GAAC;AACC,eAAW,IAAI;AACf,iBAAa,IAAI,YAAY,EAAE,IAAI;AACrC;AACA,GAAC;AACC,eAAW,IAAI;AACf,iBAAa,IAAI,YAAY,EAAE,IAAI;AACrC;AACA,GAAC;AACC,kBAAc,IAAI;AAClB,iBAAa,IAAI;AACnB;AACA,GAAC;AACC,sBAAkB,IAAI;AACtB,iBAAa,IAAI;AACnB;AACA,GAAC;AACC,sBAAkB,IAAI;AACtB,iBAAa,IAAI;AACnB;AACA,GAAC;AACC,mBAAe;AACjB;AACA,GAAC;AACC,iBAAa;AACf;AACA,GAAC;AACC,WAAO,IAAI;AACb;AACA,GAAC;AACC,WAAO;AACT;AACA,GAAC;AACC,YAAQ,IAAI,SAAS,GAAG,IAAI,eAAe,GAAG,IAAI,aAAa,GAAG,IAAI,cAAc,GAAG,IAAI,eAAe,GAAG,IAAI,WAAW,GAAG,IAAI,aAAa,GAAG,IAAI,UAAU,GAAG,IAAI,gBAAgB;AAC1L;AACA,GAAC;AACC;AAAA,MAAqB,KAAK;AAAA,MAAE,gBAAgB;AAAA,MAAE,YAAY;AAAA,MAAE,aAAa;AAAA,MAAE,qBAAqB;AAAA,MAAE,IAAI;AAAA,MAAE,MAAM;AAAA,MAAE,kBAAkB;AAAA,MAAE,iBAAiB;AAAA,MAAE,gBAAgB;AAAA,MAAE,OAAO;AAAA,MAAE,UAAU;AAAA,MAAE,SAAS;AAAA,MAAE,SAAS;AAAA,MAAE,KAAK;AAAA,MAAE,MAAM;AAAA,MAAE,MAAM;AAAA,MAAE,uBAAuB;AAAA,MAAE,eAAe;AAAA,MAAE,OAAO;AAAA,MAAE,UAAU;AAAA,MAAE,kBAAkB;AAAA,MAAE,OAAO;AAAA,MAAE;AACvU,gCAA4B,IAAI,SAAS,EAAE,IAAI;AAC/C,yBAAqB,IAAI,aAAa,EAAE,IAAI;AAC9C;AACA,GAAC;AACC,yBAAqB;AACrB,gCAA4B,IAAI,SAAS,EAAE,IAAI;AAC/C,yBAAqB,IAAI,aAAa,EAAE,IAAI;AAC9C;AACA,GAAC;AACC,mBAAe;AACf,yBAAqB;AACvB;AACA,GAAC;AACC,eAAW,IAAI;AACf,gCAA4B,IAAI;AAClC;AACA,GAAC;AACC,KAAC;AACC,aAAO,CAAC,KAAK,EAAE;AACb,0BAAkB,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE;AAC/C,kBAAU,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,GAAG,EAAE;AACvC,4BAAkB,UAAU,GAAG,KAAK,EAAE,IAAI,eAAe,GAAG,EAAE;AAChE;AACF;AACF;AACF;AACA,GAAC;AACC,KAAC;AACC,aAAO,CAAC,KAAK,EAAE;AACb,4BAAoB,IAAI;AACxB,6BAAqB,IAAI,uBAAuB,EAAE,IAAI,uBAAuB,EAAE,IAAI,oBAAoB,IAAI,4BAA4B,EAAE,IAAI,kBAAkB,IAAI;AACrK;AACF;AACF;AACA,GAAC;AACC,KAAC;AACC,aAAO,CAAC,KAAK,EAAE;AACb,0BAAkB,IAAI;AACtB,6BAAqB,IAAI,uBAAuB,EAAE,IAAI,uBAAuB,EAAE,IAAI,oBAAoB,IAAI,4BAA4B,EAAE,IAAI,kBAAkB,IAAI;AACrK;AACF;AACF;AACA,GAAC;AACC,KAAC;AACC,aAAO,CAAC,KAAK,EAAE;AACb,eAAO,IAAI;AACb;AACF;AACF;AACA,GAAC;AACC,KAAC;AACC,aAAO,CAAC,KAAK,EAAE;AACb,iBAAS;AACX;AACF;AACF;AACA,GAAC;AACC,KAAC;AACC,aAAO,CAAC,KAAK,EAAE;AACb,qBAAa,EAAE,IAAI,IAAI,EAAE,IAAI,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,KAAK,IAAI,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;AACrH;AAAA,UAAY,IAAI,kBAAkB;AAAA,UAAE,IAAI,uBAAuB;AAAA,UAAE,IAAI,wBAAwB;AAAA,UAAE,IAAI,iBAAiB;AAAA,UAAE,IAAI;AAC5H;AACF;AACF;AACF;AACA,UAAU,iBAAiB,EACzB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,CAAC;AAElB,UAAU,iBAAiB,EACzB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,CAAC;AAElB,UAAU,iBAAiB,EACzB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,CAAC;AAElB,UAAU,cAAc,EACtB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,cAAc,EACtB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,cAAc,EACtB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,YAAY,EACpB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,YAAY,EACpB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,kBAAkB,EAC1B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,KAAK;AAEtB,UAAU,uBAAuB,EAC/B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,mBAAmB,EAC3B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,KAAK;AAEtB,UAAU,kBAAkB,EAC1B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,KAAK;AAEtB,UAAU,iBAAiB,EACzB,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,KAAK;AAEtB,UAAU,oBAAoB,EAC5B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,wBAAwB,EAChC,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,4BAA4B,EACpC,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,EAAE;AAEnB,UAAU,2BAA2B,EACnC,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,GAAG;AAEpB,UAAU,0BAA0B,EAClC,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,IAAI;AAErB,UAAU,aAAa,EACrB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,iBAAiB,EACzB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,UAAU,EAClB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,gBAAgB,EACxB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,cAAc,EACtB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,eAAe,EACvB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,gBAAgB,EACxB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,YAAY,EACpB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,aAAa,EACrB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,cAAc,EACtB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,WAAW,EACnB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,iBAAiB,EACzB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,uBAAuB,EAC/B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,uBAAuB,EAC/B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,IAAI;AAErB,UAAU,sBAAsB,EAC9B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,cAAc,EACtB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,UAAU,EAClB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,YAAY,EACpB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,EAAE,EAAE,KAAK;AAE1B,UAAU,kBAAkB,EAC1B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,kBAAkB,EAC1B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,IAAI;AAErB,UAAU,kBAAkB,EAC1B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,EAAE,EAAE,KAAK;AAE1B,UAAU,wBAAwB,EAChC,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,wBAAwB,EAChC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,IAAI;AAErB,UAAU,gBAAgB,EACxB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,iBAAiB,EACzB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,EAAE,EAAE,KAAK;AAE1B,UAAU,sBAAsB,EAC9B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,uBAAuB,EAC/B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,EAAE,EAAE,KAAK;AAE1B,UAAU,gBAAgB,EACxB,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK;AAEjB,UAAU,uBAAuB,EAC/B,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,GAAG;AAEpB,UAAU,uBAAuB,EAC/B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,IAAI;AAErB,UAAU,wBAAwB,EAChC,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,EAAE,EAAE,KAAK;AAE1B;AACE,YAAU,CAAC,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE;AAC7H;AAAA,IAAG;AAAA,IAAU;AAAA,IAAS;AACpB,wBAAkB;AAClB,wBAAkB;AAClB,wBAAkB;AAClB,qBAAe;AACf,qBAAe;AACf,qBAAe;AACf,mBAAa;AACb,mBAAa;AACb,yBAAmB;AACnB,8BAAwB;AACxB,0BAAoB;AACpB,yBAAmB;AACnB,wBAAkB;AAClB,2BAAqB;AACrB,+BAAyB;AACzB,mCAA6B;AAC7B,kCAA4B;AAC5B,iCAA2B;AAC3B,oBAAc;AACd,wBAAkB;AAClB,iBAAW;AACX,uBAAiB;AACjB,qBAAe;AACf,sBAAgB;AAChB,uBAAiB;AACjB,mBAAa;AACb,oBAAc;AACd,qBAAe;AACf,kBAAY;AACZ,wBAAkB;AAClB,8BAAwB;AACxB,8BAAwB;AACxB,6BAAuB;AACvB,qBAAe;AACf,iBAAW;AACX,mBAAa,EAAE,EAAE;AACjB,yBAAmB;AACnB,yBAAmB;AACnB,yBAAmB,EAAE,EAAE;AACvB,+BAAyB;AACzB,+BAAyB;AACzB,uBAAiB;AACjB,wBAAkB,EAAE,EAAE;AACtB,6BAAuB;AACvB,8BAAwB,EAAE,EAAE;AAC5B,uBAAiB;AACjB,8BAAwB;AACxB,8BAAwB;AACxB,+BAAyB,EAAE,EAAE;AAC/B;AACF;AACF;","names":[]}
|