guava-ui 0.2.8 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"guava-ui.umd.js","sources":["../packages/bridge/index.ts","../packages/GvBacktop/src/GvBacktop.vue","../packages/GvBacktop/index.ts","../packages/GvBadge/src/GvBadge.vue","../packages/GvBadge/index.ts","../packages/utils/index.ts","../packages/GvIcon/src/GvIcon.vue","../packages/GvIcon/index.ts","../packages/utils/gv.tree.ts","../packages/GvBreadCrumb/src/helper.ts","../packages/GvBreadCrumb/src/GvBreadCrumb.vue","../packages/GvBreadCrumb/index.ts","../packages/GvPopconfirm/src/GvPopconfirm.vue","../packages/GvPopconfirm/index.ts","../packages/hooks/web/useStorage.ts","../packages/utils/gv.notify.ts","../packages/GvButton/src/GvButton.vue","../packages/GvButton/index.ts","../packages/GvCard/src/GvCard.vue","../packages/GvCard/index.ts","../packages/GvCascader/src/GvCascader.vue","../packages/GvCascader/index.ts","../packages/GvCheckbox/src/GvCheckbox.vue","../packages/GvCheckbox/index.ts","../packages/GvCheckboxButton/src/GvCheckboxButton.vue","../packages/GvCheckboxButton/index.ts","../packages/GvCheckboxGroup/src/GvCheckboxGroup.vue","../packages/GvCheckboxGroup/index.ts","../packages/GvCol/src/GvCol.vue","../packages/GvCol/index.ts","../packages/GvDatePicker/src/datetime.ts","../packages/GvDatePicker/src/shortcuts.ts","../packages/GvDatePicker/src/GvDatePicker.vue","../packages/GvDatePicker/index.ts","../packages/GvDialog/src/drag.ts","../packages/GvDialog/src/GvDialog.vue","../packages/GvDialog/index.ts","../packages/GvDivider/src/GvDivider.vue","../packages/GvDivider/index.ts","../packages/GvDrawer/src/GvDrawer.vue","../packages/GvDrawer/index.ts","../packages/utils/gv.propTypes.ts","../packages/hooks/web/usePinyin.ts","../packages/GvExpandMenu/src/GvMenuList.vue","../packages/GvExpandMenu/src/GvExpandMenu.vue","../packages/GvExpandMenu/index.ts","../packages/GvInput/src/GvInput.vue","../packages/GvInput/index.ts","../packages/GvInputNumber/src/GvInputNumber.vue","../packages/GvInputNumber/index.ts","../packages/GvSelect/src/GvSelect.vue","../packages/GvSelect/index.ts","../packages/GvSwitch/src/GvSwitch.vue","../packages/GvSwitch/index.ts","../packages/GvTimePicker/src/GvTimePicker.vue","../packages/GvTimePicker/index.ts","../packages/utils/gv.infomsg.ts","../packages/utils/gv.validate.ts","../packages/GvForm/src/GvForm.vue","../packages/GvForm/index.ts","../packages/GvHamburger/src/GvHamburger.vue","../packages/GvHamburger/index.ts","../packages/GvLangSelect/src/GvLangSelect.vue","../packages/GvLangSelect/index.ts","../packages/GvPopover/src/GvPopover.vue","../packages/GvPopover/index.ts","../packages/GvRadio/src/GvRadio.vue","../packages/GvRadio/index.ts","../packages/GvRadioButton/src/GvRadioButton.vue","../packages/GvRadioButton/index.ts","../packages/GvRadioGroup/src/GvRadioGroup.vue","../packages/GvRadioGroup/index.ts","../packages/GvRow/src/GvRow.vue","../packages/GvRow/index.ts","../packages/GvScreenFull/src/GvScreenFull.vue","../packages/GvScreenFull/index.ts","../packages/GvSearchBar/src/GvSearchBar.vue","../packages/GvSearchBar/index.ts","../packages/GvSidebar/src/helper.ts","../packages/GvSidebar/src/components/useRenderMenuTitle.tsx","../packages/GvSidebar/src/components/useRenderMenuItem.tsx","../packages/GvSidebar/src/GvSidebar.vue","../packages/GvSidebar/index.ts","../src/assets/imgs/logo.png","../packages/GvSidebarLogo/src/GvSidebarLogo.vue","../packages/GvSidebarLogo/index.ts","../packages/GvTableBar/src/GvTableBar.vue","../packages/GvTag/src/GvTag.vue","../packages/utils/gv.table.ts","../packages/utils/gv.crud.ts","../packages/GvTable/src/GvTable.vue","../packages/GvTable/index.ts","../packages/GvTabPane/src/GvTabPane.vue","../packages/GvTabPane/index.ts","../packages/GvTabs/src/GvTabs.vue","../packages/GvTabs/index.ts","../packages/GvTag/index.ts","../packages/GvTagsView/src/GvTagsView.vue","../packages/GvTagsView/index.ts","../packages/GvTheme/src/GvTheme.vue","../packages/GvTheme/index.ts","../packages/GvTree/src/GvTree.vue","../packages/GvTree/index.ts","../packages/utils/gv.secret.ts","../packages/index.ts"],"sourcesContent":["// bridge/index.ts\nimport type { Router } from 'vue-router';\nimport type { Pinia } from 'pinia';\nimport type { Composer } from 'vue-i18n';\n\ninterface GlobalBridgeContext {\n router?: Router;\n i18n?: Composer;\n store?: Pinia;\n}\nconst globalBridgeKey = '__LIB_BRIDGE_CONTEXT__';\nconst getBridge = (): GlobalBridgeContext => {\n const g = globalThis as any;\n if (!g[globalBridgeKey]) g[globalBridgeKey] = {};\n\n return g[globalBridgeKey];\n};\nconst context: GlobalBridgeContext = {};\n\n// export function setBridgeContext(options: GlobalBridgeContext) {\n// if (options.router) context.router = options.router;\n// if (options.i18n) context.i18n = options.i18n;\n// if (options.pinia) context.pinia = options.pinia;\n// }\nexport const setBridgeContext = (ctx: GlobalBridgeContext) => {\n // console.log('setBridgeContext', ctx);\n Object.assign(getBridge(), ctx);\n};\n\nexport function useBridgeRouter(): Router {\n const router = getBridge().router;\n if (!router) throw new Error('[Bridge] router not set');\n return router;\n}\n// export function useBridgeRouter(): Router {\n// if (!context.router) throw new Error('[Bridge] Router is not injected');\n// return context.router;\n// }\n\nexport function useBridgeI18n(): Composer {\n const i18n = getBridge().i18n;\n if (!i18n) throw new Error('[Bridge] I18n is not injected');\n return i18n;\n}\n\n// export function useBridgeI18n(): Composer {\n// if (!context.i18n) throw new Error('[Bridge] I18n is not injected');\n// return context.i18n;\n// }\n\nexport function useBridgePinia(): Pinia {\n if (!context.store) throw new Error('[Bridge] Pinia is not injected');\n return context.store;\n}\n","<!--\n * @title: backtop\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:24:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-05-22 09:26:44\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { ElBacktop } from 'element-plus';\n import { useStyle } from '@/hook/web/useStyle';\n\n // --- define name and inheritAttrs ---\n defineOptions({\n name: 'GvBacktop', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n const { getPrefixCls, variables } = useStyle();\n\n const prefixCls = getPrefixCls('backtop');\n</script>\n\n<template>\n <ElBacktop\n :class=\"prefixCls\"\n :target=\"`.${variables.namespace}-layout-content-scrollbar .${variables.elNamespace}-scrollbar__wrap`\" />\n</template>\n","import type { App } from 'vue';\nimport GvBacktop from './src/GvBacktop.vue';\n// Define the install method on the GvButton component\nconst GvBacktopPlugin = {\n install(app: App): void {\n app.component(GvBacktop.name ?? 'GvBacktop', GvBacktop);\n },\n};\nexport default GvBacktopPlugin;\n\nexport { GvBacktop };\n","<!--\n * @title: badge component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 10:37:36\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:14:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElBadge } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { TBadgeType } from './types/index';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('badge');\n\n export default defineComponent({\n name: 'GvBadge',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: '',\n },\n max: {\n type: Number,\n default: 10,\n },\n isDot: {\n type: Boolean,\n default: false,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n showZero: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String,\n default: '',\n },\n type: {\n type: String as PropType<TBadgeType>,\n default: 'warning',\n },\n },\n\n setup(props, { slots }) {\n // @render\n return () => (\n <ElBadge\n value={props.value}\n max={props.max}\n type={props.type}\n hidden={props.hidden}\n isDot={props.isDot}\n showZero={props.showZero}\n color={props.color}\n class={prefixCls}>\n {slots.default?.()}\n </ElBadge>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-badge';\n .#{$prefixCls} {\n margin-top: 5px;\n margin-right: 25px;\n\n :deep(.el-badge__content) {\n height: 20px;\n line-height: 18px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvBadge from './src/GvBadge.vue';\n\nconst GvBadgePlugin = {\n install(app: App): void {\n app.component(GvBadge.name ?? 'GvBadge', GvBadge);\n },\n};\nexport default GvBadgePlugin;\n\nexport { GvBadge };\n","/*\n * @title: common utility func\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-02-27 13:25:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 15:00:33\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n// ------ is utils ------\nconst toString = Object.prototype.toString;\nexport const is = (val: unknown, type: string) => toString.call(val) === `[object ${type}]`;\n\nexport const isExternal = (path: string): boolean => /^(https?:|mailto:|tel:)/.test(path);\nexport const isString = (val: unknown): val is string => is(val, 'String');\nexport const isArray = (val: any): val is any[] => val && Array.isArray(val);\nexport const isError = (e: unknown): e is Error => typeof e === 'object' && e !== null && 'message' in e;\nexport const isObject = (val: any): val is Record<any, any> => val !== null && is(val, 'Object');\nexport const isDate = (val: unknown): val is Date => is(val, 'Date');\nexport const isNumber = (val: unknown): val is number => is(val, 'Number');\nexport const isBoolean = (val: unknown): val is boolean => is(val, 'Boolean');\nexport const isFunction = (val: unknown): val is (...args: any[]) => any => typeof val === 'function';\nexport const isElement = (val: unknown): val is Element => isObject(val) && !!val.tagName;\nexport const isMap = (val: unknown): val is Map<any, any> => is(val, 'Map');\nexport const isImgPath = (path: string): boolean => /(https?:\\/\\/|data:image\\/).*?\\.(png|jpg|jpeg|gif|svg|webp|ico)/gi.test(path);\nexport const isDark = (): boolean => window.matchMedia('(prefers-color-scheme: dark)').matches;\nexport const isNull = (val: unknown): val is null => val === null;\n\nexport const isEmpty = <T = unknown>(val: T): val is T => {\n if (isNull(val)) return true;\n if (val === undefined) return true;\n if (val === 'null') return true;\n if (isArray(val) || isString(val)) return val.length === 0;\n if (val instanceof Map || val instanceof Set) return val.size === 0;\n if (isObject(val)) return Object.keys(val).length === 0;\n return false;\n};\n\n/**\n * @todo: deep equal (plain object / array / date), functions compare by reference\n */\nexport const isEqual = (a: unknown, b: unknown): boolean => {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || a === undefined || b === undefined) return false;\n if (typeof a !== typeof b) return false;\n if (isFunction(a) || isFunction(b)) return a === b;\n if (isDate(a) && isDate(b)) return a.getTime() === b.getTime();\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (!isEqual(a[i], b[i])) return false;\n\n return true;\n }\n if (isObject(a) && isObject(b)) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!isEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return false;\n};\n\nexport const isUrl = (path: string): boolean => {\n try {\n new URL(path);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * @todo: set html lang attr\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-24 10:37:13\n * @param {LocaleType} locale\n */\nexport const setHtmlAttrByLang = (locale: LocaleType): void => {\n document.querySelector('html')?.setAttribute('lang', locale);\n};\n\n/**\n * @todo: sleep async function\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 12:01:37\n * @param {*} timeLen\n */\nexport const sleep = async (timeLen: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, timeLen));\n/**\n * @todo: underline to camel case\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 15:21:09\n * @param {*} name\n */\nexport const toHump = (name: string): string => {\n if (!name) return '';\n // eslint-disable-next-line no-useless-escape\n return name.replace(/\\_(\\w)/g, function (all, letter) {\n return letter.toUpperCase();\n });\n};\n\n/**\n * @todo: camel case to underline\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 15:21:50\n * @param {*} name\n */\nexport const toLine = (name: string): string => name.replace(/([A-Z])/g, '_$1').toLowerCase();\n\n/**\n * 设置css style\n * @param prop\n * @param val\n * @param dom\n */\nexport const setDomCssProp = (prop: string, val: any, dom = document.documentElement): void => {\n dom.style.setProperty(prop, val);\n};\n\n/**\n * get css style\n * @param prop\n * @param dom\n * @returns\n */\nexport const getDomCssProp = (prop: string, dom = document.documentElement): string => getComputedStyle(dom).getPropertyValue(prop);\n\n/**\n * join icon class\n * @param icon\n * @returns\n */\nexport const joinIcon = function (icon) {\n let joinIcons = '';\n if (icon)\n if (icon.includes('el-icon')) joinIcons = icon;\n else if (icon.includes('gv-icon')) joinIcons = `iconfont ${icon}`;\n return joinIcons;\n};\n\n/**\n * Check if an element has a class\n * @param {HTMLElement} ele\n * @param {string} cls\n * @returns {boolean}\n */\nexport const hasClass = (ele: HTMLElement, cls: string): boolean => !!ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\n\n/**\n * Add class to element\n * @param {HTMLElement} ele\n * @param {string} cls\n */\nexport const addClass = (ele: HTMLElement, cls: string) => {\n if (!hasClass(ele, cls)) ele.className += ' ' + cls;\n};\n\n/**\n * Remove class from element\n * @param {HTMLElement} ele s s\n * @param {string} cls\n */\nexport const removeClass = (ele: HTMLElement, cls: string): void => {\n if (hasClass(ele, cls)) {\n const reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\n ele.className = ele.className.replace(reg, ' ');\n }\n};\n\n/**\n * @todo: html tag has scrollbar\n * @param {*} tag\n */\nexport const hasScrollbar = (tag: any) => tag.scrollHeight > (tag.innerHeight || tag.clientHeight);\n\n/**\n * date format settings\n */\nexport const dateFormatConfig = {\n date: {\n placeholder: '选择日期', // yyyy-mm-dd\n valueFormat: 'YYYY-MM-DD',\n dateFormat: 'YYYY-MM-DD',\n },\n exactdate: {\n placeholder: '选择日期', // yyyy-mm-dd\n valueFormat: 'YYYY-MM-dd HH:mm:ss',\n dateFormat: 'YYYY-MM-DD',\n },\n datetime: {\n placeholder: '选择时间', // yyyy-mm-dd hh:mm\n valueFormat: 'YYYY-MM-DD HH:mm',\n dateFormat: 'YYYY-MM-DD HH:mm',\n },\n week: {\n placeholder: '选择周',\n dateFormat: 'YYYY 第 WW 周',\n },\n month: {\n placeholder: '选择月份', // yyyy-mm\n valueFormat: 'YYYY-MM',\n dateFormat: 'YYYY-MM',\n },\n year: {\n placeholder: '选择年份', // yyyy\n valueFormat: 'YYYY',\n dateFormat: 'YYYY',\n },\n};\n\n/**\n * @todo: 防抖函数(一段时间内只响应最后一次操作,如:input框连续输入)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:58:21\n * @param {*} func\n * @param {*} wait\n * @param {*} immediate\n */\nexport const debounce = (func: Fn, wait = 100, immediate = false) => {\n let timeout: ReturnType<typeof setTimeout> | null;\n let arg: any[];\n let context: any;\n let timestamp: number;\n let result: ReturnType<Fn>;\n const later = function () {\n // 据上一次触发时间间隔\n const last = +new Date() - timestamp;\n // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait\n if (last < wait && last > 0) timeout = setTimeout(later, wait - last);\n else {\n timeout = null;\n // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用\n if (!immediate) {\n result = func.apply(context, arg);\n if (!timeout) context = arg = null as any;\n }\n }\n };\n return function (this: any, ...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n context = this;\n // fixme: 解决防抖函数无法传参的问题 2022-04-19\n arg = args;\n timestamp = +new Date();\n const callNow = immediate && !timeout;\n // 如果延时不存在,重新设定延时\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, arg);\n context = arg = null as any;\n }\n\n return result;\n };\n};\n\n/**\n * @todo: get vnode text\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 13:49:54\n * @param {VNode} vnode\n */\nexport const getVNodeText = (vnode: any): string => {\n if (!vnode) return '';\n // 1. 字符串\n if (typeof vnode === 'string') return vnode;\n // 2. 数字\n if (typeof vnode === 'number') return String(vnode);\n // 3. children 为字符串\n if (typeof vnode.children === 'string') return vnode.children.trim();\n // 4. children 为数组\n if (Array.isArray(vnode.children)) return vnode.children.map((item) => getVNodeText(item)).join('');\n // 5. slots(ElButton / 组件)\n if (vnode.children && typeof vnode.children === 'object') {\n const slots = vnode.children as Record<string, any>;\n // default slot\n if (typeof slots.default === 'function') {\n const slotNodes = slots.default();\n return slotNodes.map((item: any) => getVNodeText(item)).join('');\n }\n }\n\n return '';\n};\n\n/**\n * @todo: get vnode name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 17:24:24\n * @param {any} vnode\n */\nexport const getVNodeName = (vnode: any): string => {\n if (!vnode) return '';\n return typeof vnode.type === 'object' && vnode.type !== null && 'name' in vnode.type ? vnode.type.name : '';\n};\n\n/**\n * @todo: 去除金额格式化方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-24 14:14:55\n * @param {*} val\n */\nexport const removeAmountFormat = (val: string): string => {\n if (val) return val.replace(/,/g, '');\n else return '0.00';\n};\n\n// when val is 0.00, change it as 0 format\nfunction zeroFormat(val: string): string {\n if (val === '0.00') return '0';\n else return val;\n}\n\nfunction numberFormat(pattern, val) {\n const oldVal = val;\n if (val < 0) val = -val;\n const _nfPattern = '[0#]+[,]?[0#]*(\\\\.[0#]+)?';\n if (!pattern || !new RegExp(_nfPattern, 'g').test(pattern)) return '0.00';\n\n if (!isNumber((val + '').replace('.', ''))) return '0.00';\n\n const strAry = pattern.match(new RegExp(_nfPattern, 'g'));\n const p1 = strAry[0].indexOf('.');\n if (p1 > 0) {\n const len = strAry[0].length - p1 - 1;\n val = Math.round(val * Math.pow(10, len)) / Math.pow(10, len);\n } else val = Math.round(val);\n\n val = val + '';\n const p2 = val.indexOf('.');\n let ret = '';\n if (p1 > 0) {\n for (let i = p1 + 1; i < strAry[0].length; i++) {\n const ch = p2 > 0 && p2 + i - p1 < val.length ? val.charAt(p2 + i - p1) : '';\n if (strAry[0].charAt(i) === '0') ret = ret + (ch === '' ? '0' : ch);\n else ret = ret + (ch === '' ? '' : ch);\n }\n ret = ret === '' ? '' : '.' + ret;\n }\n const p3 = strAry[0].indexOf(',');\n if (p3 > 0) {\n const len = p1 > 0 ? p1 - p3 - 1 : strAry[0].length - p3 - 1;\n const len2 = p2 > 0 ? p2 - 1 : val.length - 1;\n for (let i = len2; i >= 0; i--) ret = ((len2 - i + 1) % len === 0 ? ',' : '') + val.charAt(i) + ret;\n\n ret = ret.charAt(0) === ',' ? ret.substring(1, ret.length) : ret;\n } else ret = val.substring(0, p2 > 0 ? p2 : val.length) + ret;\n\n if (oldVal < 0) ret = '-' + ret;\n\n return pattern.replace(strAry[0], ret);\n}\n\n/**\n * @todo: 千位符转换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-24 09:22:56\n * @param {*} val\n * @param {*} decimal 小数位数\n */\nexport const amountFormat = (val: string | number, decimal = 2): string => {\n let v = val + '';\n if (v === null || v === 'null' || v === '0' || v === undefined || v === 'undefined') return '0.00';\n if (v.indexOf(',') > 0) v = removeAmountFormat(v);\n let pattern = '#,###.';\n let decimalPattern = '00';\n if (decimal) decimalPattern = decimalPattern.padStart(decimal, '0');\n pattern = pattern + decimalPattern;\n return zeroFormat(numberFormat(pattern, v));\n};\n\n/**\n * @todo: set quick keys\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:38:53\n * @param {*} ev\n */\nexport const setQuickKeys = (ev) => {\n if (ev && ev.key)\n if (ev.key.toLowerCase() === 'q' && ev.ctrlKey === true) {\n // 绑定ctr + q\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-search__bar>.gv-button.search') as HTMLElement;\n if (btnHtml && btnHtml.style.display !== 'none') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.search') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 'r' && ev.ctrlKey === true) {\n // 绑定crt + r\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.reset') as HTMLElement;\n if (btnHtml && btnHtml.style.display !== 'none') if (btnHtml.getAttribute('refform')) btnHtml.click();\n } else if (ev.key.toLowerCase() === 'e' && ev.ctrlKey === true) {\n // 绑定crt + e\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.shrink') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.expand') as HTMLElement;\n if (btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 's' && ev.ctrlKey === true) {\n // 绑定crt + s\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-drawer__popup .gv-drawer .gv-drawer__footer>.gv-drawer__footer--inner .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 'n' && ev.ctrlKey === true) {\n // 绑定crt + n\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-table__container .gv-table__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === '=' && ev.ctrlKey === true) {\n // 绑定crt + '='\n ev.preventDefault();\n ev.stopPropagation();\n const inputHtml = document.body.querySelector('.main-container .gv-container .gv-table__container .gv-table__search .gv-table__search-input > .el-input__inner') as HTMLElement;\n if (inputHtml) inputHtml.focus();\n } else if (ev.key === 'Escape') {\n // 绑定esc关闭弹窗\n ev.preventDefault();\n ev.stopPropagation();\n const messageConfirmHtml = document.documentElement.querySelector('body>.el-message-box__wrapper') as HTMLElement;\n if (messageConfirmHtml && messageConfirmHtml.style.display !== 'none') {\n const bodyButtonHtml = messageConfirmHtml.querySelector('.el-message-box .el-message-box__btns button') as HTMLElement;\n bodyButtonHtml.click();\n } else {\n const bodyDialogHtml = document.documentElement.querySelector('body>.gv-dialog') as HTMLElement;\n if (bodyDialogHtml && bodyDialogHtml.style.display !== 'none') {\n const bodyButtonHtml = bodyDialogHtml.querySelector('.el-dialog__header button') as HTMLElement;\n bodyButtonHtml.click();\n } else {\n const dialogArr = document.body.querySelectorAll('.main-container .gv-container .gv-dialog__popup .gv-dialog') as NodeListOf<HTMLElement>;\n if (dialogArr)\n for (let i = 0; i < dialogArr.length; i++)\n if (dialogArr[i].style.display !== 'none') {\n const buttonHtml = dialogArr[i].querySelector('.el-dialog__header button') as HTMLElement;\n if (buttonHtml && buttonHtml.style.display !== 'none') {\n buttonHtml.click();\n return;\n }\n }\n\n const buttonDHtml = document.body.querySelector('.main-container .gv-container .gv-drawer__popup .gv-drawer .el-drawer__header button') as HTMLElement;\n if (buttonDHtml && buttonDHtml.style.display !== 'none') buttonDHtml.click();\n }\n }\n }\n};\n\nexport const pathResolve = (parentPath: string, path: string) => {\n if (isUrl(path)) return path;\n const childPath = path.startsWith('/') || !path ? path : `/${path}`;\n return `${parentPath}${childPath}`.replace(/\\/\\//g, '/').trim();\n};\n","<!--\n * @title: svg icon component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-01 17:02:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 10:50:13\n * @version: 1.0.8\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { isExternal } from '@@/utils';\n import * as Icons from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, useAttrs, type DefineComponent } from 'vue';\n const { variables } = useStyle();\n const preNameSpace = variables.namespace;\n const attrs = useAttrs();\n // --- define name and inheritAttrs ---\n defineOptions({\n name: 'GvIcon', // 定义组件名称\n inheritAttrs: false, // 默认继承属性\n });\n // --- transfer props and define default values ---\n const props = withDefaults(\n defineProps<{\n iconType?: string;\n iconName: string;\n className?: string;\n icon?: DefineComponent; // element-plus icon component\n size?: string; // 图标的font-size,单位是px\n }>(),\n {\n iconType: '', // svg | iconfont | el\n className: '',\n },\n );\n // @computed\n const isLocal = computed(() => isExternal(props.iconName));\n const iconType = computed(() => {\n if (props.iconType === 'svg') return 'svg';\n else if (props.iconType === 'iconfont') return 'iconfont';\n else if (props.iconType === 'el') return 'el';\n else if (props.iconType === '')\n if (props.iconName.startsWith('el-icon')) return 'el';\n else if (props.iconName.startsWith('gv-')) return 'iconfont';\n else return 'svg';\n else return 'svg';\n });\n const iconName = computed(() => {\n if (iconType.value === 'svg') return `#${preNameSpace}-icon-${props.iconName}`;\n else if (iconType.value === 'iconfont') return 'iconfont ' + props.iconName;\n else if (iconType.value === 'el') return props.iconName;\n else return `#${props.iconName}`;\n });\n\n // @method\n const svgClass = computed(() => {\n if (iconType.value === 'svg') return props.className ? 'svg-icon ' + props.className : 'svg-icon';\n else return props.className;\n });\n const styleExternalIcon = computed(() => ({\n mask: `url(${props.iconName}) no-repeat 50% 50%`,\n '-webkit-mask': `url(${props.iconName}) no-repeat 50% 50%`,\n }));\n\n /**\n * @todo: get element-plus icon component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:18:16\n * @param {*} computed\n */\n const iconComponent = computed(() => {\n // console.log(iconType.value);\n // console.log(props.iconName);\n if (iconType.value !== 'el') return null;\n const name = props.iconName;\n let compName = '';\n if (name.startsWith('el-icon')) {\n compName = name.replace('el-icon-', '');\n compName = compName.charAt(0).toUpperCase() + compName.slice(1);\n } else compName = name.charAt(0).toUpperCase() + name.slice(1);\n\n return Icons[compName as keyof typeof Icons];\n });\n</script>\n<template>\n <div\n v-if=\"isLocal\"\n :style=\"styleExternalIcon\"\n class=\"svg-external-icon svg-icon\"\n v-bind=\"attrs\"></div>\n <svg\n v-else-if=\"iconType === 'svg'\"\n :class=\"svgClass\"\n aria-hidden=\"true\"\n v-bind=\"attrs\">\n <use :href=\"iconName\" />\n </svg>\n <i\n v-else-if=\"iconType === 'iconfont'\"\n :class=\"[iconName, svgClass]\"\n v-bind=\"attrs\">\n </i>\n <ElIcon\n v-else-if=\"iconComponent\"\n :class=\"svgClass\">\n <component :is=\"iconComponent\" />\n </ElIcon>\n <svg\n v-else\n :class=\"svgClass\"\n :style=\"{ 'font-size': size + 'px' }\"\n aria-hidden=\"true\"\n v-bind=\"attrs\">\n <use :xlink:href=\"iconName\" />\n </svg>\n</template>\n\n<style lang=\"scss\" scoped>\n .svg-icon {\n width: 1em;\n height: 1em;\n overflow: hidden;\n vertical-align: -0.15em;\n fill: currentcolor;\n }\n\n .svg-external-icon {\n display: inline-block;\n background-color: currentcolor;\n mask-size: cover !important;\n }\n</style>\n","import type { App } from 'vue';\nimport GvIcon from './src/GvIcon.vue';\nconst GvIconPlugin = {\n install(app: App): void {\n app.component(GvIcon.name ?? 'GvIcon', GvIcon);\n },\n};\nexport default GvIconPlugin;\n\nexport { GvIcon };\n","interface TreeHelperConfig {\n id: string;\n children: string;\n pid: string;\n}\nconst DEFAULT_CONFIG: TreeHelperConfig = {\n id: 'id',\n children: 'children',\n pid: 'pid',\n};\nconst getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config);\n// tree from list\nexport const listToTree = <T = any>(list: any[], config: Partial<TreeHelperConfig> = {}): T[] => {\n const conf = getConfig(config) as TreeHelperConfig;\n const nodeMap = new Map();\n const result: T[] = [];\n const { id, children, pid } = conf;\n\n for (const node of list) {\n node[children] = node[children] || [];\n nodeMap.set(node[id], node);\n }\n for (const node of list) {\n const parent = nodeMap.get(node[pid]);\n (parent ? parent.children : result).push(node);\n }\n return result;\n};\n\nexport const treeToList = <T = any>(tree: any, config: Partial<TreeHelperConfig> = {}): T => {\n config = getConfig(config);\n const { children } = config;\n const result: any = [...tree];\n for (let i = 0; i < result.length; i++) {\n if (!result[i][children!]) continue;\n result.splice(i + 1, 0, ...result[i][children!]);\n }\n return result;\n};\n\nexport const findNode = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | null => {\n config = getConfig(config);\n const { children } = config;\n const list = [...tree];\n for (const node of list) {\n if (func(node)) return node;\n node[children!] && list.push(...node[children!]);\n }\n return null;\n};\n\nexport const findNodeAll = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T[] => {\n config = getConfig(config);\n const { children } = config;\n const list = [...tree];\n const result: T[] = [];\n for (const node of list) {\n func(node) && result.push(node);\n node[children!] && list.push(...node[children!]);\n }\n return result;\n};\n\nexport const findPath = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | T[] | null => {\n config = getConfig(config);\n const path: T[] = [];\n const list = [...tree];\n const visitedSet = new Set();\n const { children } = config;\n while (list.length) {\n const node = list[0];\n if (visitedSet.has(node)) {\n path.pop();\n list.shift();\n } else {\n visitedSet.add(node);\n node[children!] && list.unshift(...node[children!]);\n path.push(node);\n if (func(node)) return path;\n }\n }\n return null;\n};\n\nexport const findPathAll = (tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}) => {\n config = getConfig(config);\n const path: any[] = [];\n const list = [...tree];\n const result: any[] = [];\n const visitedSet = new Set();\n const { children } = config;\n while (list.length) {\n const node = list[0];\n if (visitedSet.has(node)) {\n path.pop();\n list.shift();\n } else {\n visitedSet.add(node);\n node[children!] && list.unshift(...node[children!]);\n path.push(node);\n func(node) && result.push([...path]);\n }\n }\n return result;\n};\n\nexport const filter = <T = any>(tree: T[], func: (n: T) => boolean, config: Partial<TreeHelperConfig> = {}): T[] => {\n config = getConfig(config);\n const children = config.children as string;\n function listFilter(list: T[]) {\n return list\n .map((node: any) => ({ ...node }))\n .filter((node) => {\n node[children] = node[children] && listFilter(node[children]);\n return func(node) || (node[children] && node[children].length);\n });\n }\n return listFilter(tree);\n};\n\nexport const forEach = <T = any>(tree: T[], func: (n: T) => any, config: Partial<TreeHelperConfig> = {}): void => {\n config = getConfig(config);\n const list: any[] = [...tree];\n const { children } = config;\n for (let i = 0; i < list.length; i++) {\n // func 返回true就终止遍历,避免大量节点场景下无意义循环,引起浏览器卡顿\n if (func(list[i])) return;\n\n children && list[i][children] && list.splice(i + 1, 0, ...list[i][children]);\n }\n};\n/**\n * @description: Extract tree specified structure\n */\nexport const treeMapEach = (data: any, { children = 'children', conversion }: { children?: string; conversion: Fn }) => {\n const haveChildren = Array.isArray(data[children]) && data[children].length > 0;\n const conversionData = conversion(data) || {};\n if (haveChildren)\n return {\n ...conversionData,\n [children]: data[children].map((i: number) =>\n treeMapEach(i, {\n children,\n conversion,\n }),\n ),\n };\n else\n return {\n ...conversionData,\n };\n};\n/**\n * @description: Extract tree specified structure\n */\nexport const treeMap = <T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[] => treeData.map((item) => treeMapEach(item, opt));\n\n/**\n * 递归遍历树结构\n * @param treeDatas 树\n * @param callBack 回调\n * @param parentNode 父节点\n */\nexport const eachTree = (treeDatas: any[], callBack: Fn, parentNode = {}) => {\n treeDatas.forEach((element) => {\n const newNode = callBack(element, parentNode) || element;\n if (element.children) eachTree(element.children, callBack, newNode);\n });\n};\n","/*\n * @title: breadcrumb helper func\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-07-15 12:55:48\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-01-30 12:12:40\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pathResolve } from '../../utils/index';\n\nexport const filterBreadcrumb = (routes: AppRouteRecordRaw[], parentPath = ''): AppRouteRecordRaw[] => {\n const res: AppRouteRecordRaw[] = [];\n\n for (const route of routes) {\n const meta = route?.meta;\n if (route.name !== 'Root' && meta?.hidden && !meta.canTo) continue;\n\n const data: AppRouteRecordRaw = !meta?.alwaysShow && route.children?.length === 1 ? { ...route.children[0], path: pathResolve(route.path, route.children[0].path) } : { ...route };\n\n data.path = pathResolve(parentPath, data.path);\n\n if (data.children) data.children = filterBreadcrumb(data.children, data.path);\n\n if (data) res.push(data);\n }\n return res;\n};\n","<!--\n * @title: breadcrumb \n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:13:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-06 14:28:48\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { usePermsStore } from '@/store/modules/perms';\n import { useBridgeI18n } from '@@/bridge';\n import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus';\n import { computed, defineComponent, ref, TransitionGroup, unref, watch } from 'vue';\n import { useRouter } from 'vue-router';\n import { GvIcon } from '../../GvIcon';\n import { filter, treeToList } from '../../utils/gv.tree';\n import { filterBreadcrumb } from './helper';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('breadcrumb');\n\n export default defineComponent({\n name: 'GvBreadCrumb',\n setup() {\n const appStore = useAppStore();\n const permStore = usePermsStore();\n // if you want to use the icon in breadcrumb, you can set it in appStore\n const showBreadcrumbIcon = computed(() => appStore.getShowBreadcrumbIcon);\n const { currentRoute } = useRouter();\n\n const { t } = useBridgeI18n();\n\n const levelList = ref<AppRouteRecordRaw[]>([]);\n const menuRouters = computed(() => {\n const routers = permStore.getRouters;\n return filterBreadcrumb(routers);\n });\n\n const getBreadcrumb = () => {\n const currentPath = currentRoute.value.matched.slice(-1)[0].path;\n levelList.value = filter<AppRouteRecordRaw>(unref(menuRouters), (node: AppRouteRecordRaw) => node.path === currentPath);\n };\n\n const renderBreadcrumb = () => {\n const breadcrumbList = treeToList<AppRouteRecordRaw[]>(unref(levelList));\n return breadcrumbList.map((v) => {\n const disabled = !v.redirect || v.redirect === 'noredirect';\n const meta = v.meta;\n return (\n <ElBreadcrumbItem\n to={{ path: disabled ? '' : v.path }}\n key={v.name}>\n {meta?.icon && showBreadcrumbIcon.value ? (\n <>\n <GvIcon\n iconType=\"iconfont\"\n iconName={meta.icon}\n className=\"text-[13px]\"></GvIcon>{' '}\n {t(v?.meta?.title || '')}\n </>\n ) : (\n t(v?.meta?.title || '')\n )}\n </ElBreadcrumbItem>\n );\n });\n };\n // @watch\n watch(\n () => currentRoute.value.path,\n (path) => {\n if (path.startsWith('/redirect/')) return;\n\n getBreadcrumb();\n },\n {\n immediate: true,\n },\n );\n // @created\n\n // @render\n return () => (\n <ElBreadcrumb\n separator=\"/\"\n class={`${prefixCls} flex items-center h-full ml-[10px]`}>\n <TransitionGroup\n appear\n enter-active-class=\"animate__animated animate__fadeInRight\">\n {renderBreadcrumb()}\n </TransitionGroup>\n </ElBreadcrumb>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-breadcrumb';\n .#{$prefixCls} {\n user-select: none;\n :deep(.el-breadcrumb__item) {\n display: flex;\n .el-breadcrumb__inner {\n display: flex;\n align-items: center;\n color: #afb3b9;\n cursor: text;\n //color: var(--top-header-text-color);\n //&:hover {\n // color: var(--el-color-primary);\n //}\n &.is-link {\n font-weight: 500;\n }\n }\n .iconfont {\n //font-size: $textSizeSecondary;\n }\n }\n :deep(.el-breadcrumb__item):last-child {\n .el-breadcrumb__inner:hover {\n color: #afb3b9;\n cursor: text;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvBreadCrumb from './src/GvBreadCrumb.vue';\nconst GvBreadCrumbPlugin = {\n install(app: App): void {\n app.component(GvBreadCrumb.name ?? 'GvBreadCrumb', GvBreadCrumb);\n },\n};\nexport default GvBreadCrumbPlugin;\n\nexport { GvBreadCrumb };\n","<!--\n * @title: popconfirm component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 16:43:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-22 16:32:45\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElPopconfirm } from 'element-plus';\n import { defineComponent, getCurrentInstance } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popconfirm');\n\n export default defineComponent({\n name: 'GvPopconfirm',\n props: {\n title: {\n type: String,\n default: '',\n },\n },\n\n emits: ['confirm'],\n\n setup(props, { emit, slots }) {\n const instance = getCurrentInstance();\n\n const handleConfirm = (event: MouseEvent) => {\n emit('confirm', event, instance);\n };\n\n return () => (\n <ElPopconfirm\n title={props.title}\n onConfirm={handleConfirm}\n class={prefixCls}>\n {{\n reference: () => slots.reference?.(),\n }}\n </ElPopconfirm>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popconfirm';\n .#{$prefixCls} {\n display: inline-block;\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopconfirm from './src/GvPopconfirm.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvPopconfirm.name ?? 'GvPopconfirm', GvPopconfirm);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvPopconfirm };\n","/*\n * @title: sessionStorage and localStorage hook\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-19 16:32:15\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-04-24 17:11:28\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n// 获取传入的值的类型\nconst getValueType = (value: any): string => {\n const type = Object.prototype.toString.call(value);\n return type.slice(8, -1);\n};\n\nexport const useStorage = (type: 'sessionStorage' | 'localStorage' = 'sessionStorage'): IWebStorage => {\n const setStorage = (key: string, value: any): void => {\n const valueType = getValueType(value);\n window[type].setItem(key, JSON.stringify({ type: valueType, value }));\n };\n\n const getStorage = (key: string): any => {\n const value = window[type].getItem(key);\n if (value) {\n const { value: val } = JSON.parse(value);\n return val;\n } else return value;\n };\n\n const removeStorage = (key: string): void => {\n window[type].removeItem(key);\n };\n\n const clear = (excludes?: string[]): void => {\n // 获取排除项\n const keys = Object.keys(window[type]);\n const defaultExcludes = ['dynamicRouter', 'serverDynamicRouter'];\n const excludesArr = excludes ? [...excludes, ...defaultExcludes] : defaultExcludes;\n const excludesKeys = excludesArr ? keys.filter((key) => !excludesArr.includes(key)) : keys;\n // 排除项不清除\n excludesKeys.forEach((key) => {\n window[type].removeItem(key);\n });\n // window[type].clear()\n };\n\n return {\n setStorage,\n getStorage,\n removeStorage,\n clear,\n };\n};\n","/*\n * @title: message alert confirm\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 11:47:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:50:11\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport { ElMessage, ElMessageBox, ElNotification } from 'element-plus';\n// import { useLocaleStoreWithOut } from '@/store/modules/locale';\nimport { isError, sleep } from './index';\n// const localeStore = useLocaleStoreInstance();\n// const { lang } = localeStore.getCurrentLocale;\n\nconst notificationTime = 5000;\nconst notificationTimeError = 6000;\nconst messageTime = 2000;\nconst messageTimeError = 5000;\ninterface ConfirmOptions {\n title?: string;\n message: string;\n confirmButtonText?: string;\n cancelButtonText?: string;\n type?: 'success' | 'warning' | 'info' | 'error';\n showCancelButton?: boolean;\n}\n/**\n * @todo: Notification - MessageBox\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 13:48:24\n * @param {unknown} msg\n * @param {MessageType} type\n * @param {string} title\n */\ntype MessageType = 'success' | 'info' | 'warning' | 'error';\n\nexport const alert = async (msg: unknown, type: MessageType = 'success') => {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n let promptMsg = '提示信息';\n if (lang === 'en') promptMsg = 'Hint';\n const duration = type === 'error' ? notificationTimeError : notificationTime;\n let m = 'No message...';\n if (isError(msg)) m = msg.message || 'No message...';\n else if (typeof msg === 'string' || typeof msg === 'number' || typeof msg === 'boolean') m = String(msg);\n else if (typeof msg === 'object') m = JSON.stringify(msg);\n\n ElNotification({\n title: promptMsg,\n message: m,\n type,\n duration: duration,\n });\n await sleep(duration);\n};\n/**\n * @todo: confirm - MessageBox\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 12:03:27\n * @param {*} msg\n * @param {*} type\n */\nexport const confirm = async (msg: string, type: MessageType = 'warning') => {\n if (document.body.querySelector('body>.el-confirm')) return;\n // 返回 Promise 对象\n let msgs: string;\n const showCancelButton = true;\n msgs = '是否确定此操作?';\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n let hint = '提示信息';\n let ok = '确定';\n let cancel = '取消';\n if (msg) msgs = msg;\n else if (lang === 'en') {\n msgs = 'Are you sure you want to proceed?';\n hint = 'Hint';\n ok = 'Ok';\n cancel = 'Cancel';\n }\n\n return new Promise((resolve, reject) => {\n ElMessageBox.confirm(msgs, hint, {\n confirmButtonText: ok,\n cancelButtonText: cancel,\n type,\n showCancelButton,\n } as ConfirmOptions)\n .then(() => {\n resolve(true);\n })\n .catch(() => {\n reject(false);\n });\n });\n};\n\nexport const message = async (msg: unknown, type: MessageType = 'warning', tableedit: boolean = false) => {\n if (tableedit === false) {\n const messageObj = document.body.querySelector('body>.el-message');\n // if (messageObj) messageObj.style.display = 'none';\n if (messageObj) return;\n const notifyObj = document.body.querySelector('body>.el-notification');\n if (notifyObj) return;\n }\n let m = 'No message...';\n if (isError(msg)) m = msg.message || 'No message...';\n else if (typeof msg === 'string' || typeof msg === 'number' || typeof msg === 'boolean') m = String(msg);\n else if (typeof msg === 'object') m = JSON.stringify(msg);\n const duration = type === 'error' ? messageTimeError : messageTime;\n ElMessage({\n message: m,\n showClose: true,\n type,\n duration: duration,\n });\n await sleep(duration);\n};\n","<!--\n * @title: button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 16:43:34\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:20:22\n * @version: 1.1.0\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import { getVNodeText } from '@@/utils';\n import { confirm } from '@@/utils/gv.notify';\n import { ElButton, useGlobalConfig, type ButtonType, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, ref, unref, watch, type Component, type PropType } from 'vue';\n import { useRoute } from 'vue-router';\n import type { BizType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('button');\n\n export default defineComponent({\n name: 'GvButton',\n props: {\n visible: {\n type: Boolean,\n default: true,\n },\n text: {\n type: String,\n default: '',\n },\n otext: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n type: {\n type: String as PropType<ButtonType>,\n default: 'default',\n },\n link: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: [Boolean, String] as PropType<boolean | string>,\n default: false,\n },\n refForm: {\n type: String,\n required: false,\n default: undefined,\n },\n icon: {\n // type: [String, Object] as PropType<string | DefineComponent>,\n type: String,\n default: '',\n },\n nativeType: {\n type: String,\n default: 'button',\n },\n bizType: {\n type: String as PropType<BizType>,\n default: undefined,\n },\n args: {\n type: String,\n default: undefined,\n },\n confirm: {\n type: [Boolean, String],\n default: false,\n },\n perms: {\n type: String,\n default: undefined,\n },\n cb: {\n type: Function as PropType<(args?: any) => void>,\n default: () => {},\n },\n },\n\n // @emits\n emits: ['click', 'confirm'],\n\n setup(props, { emit, slots }) {\n // @data\n // const attrs = useAttrs();\n const { t } = useBridgeI18n();\n const route = useRoute();\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const globalSize = useGlobalConfig('size');\n const buttonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const buttonConfirm = computed(() => appStore.buttonConfirm);\n const loadings = ref(props.loading);\n const locked = ref(false);\n const isShow = ref(props.visible);\n const isIf = ref(true);\n\n // @computed\n const getSlots = computed(() => {\n if (props.text && props.otext) return props.text;\n else return slots.default?.();\n });\n\n // @watch\n watch(\n () => props.loading,\n (v) => (loadings.value = v),\n );\n watch(\n () => props.visible,\n (v) => (isShow.value = v),\n );\n\n // @method\n\n const setIconStyle = () => {\n if (!props.icon) return '';\n if (props.icon.startsWith('el-icon'))\n return (\n <GvIcon\n iconType=\"el\"\n iconName={props.icon.replace('el-icon-', '')}\n />\n );\n else if (props.icon.startsWith('iconfont') || props.icon.startsWith('gv-icon'))\n return (\n <GvIcon\n iconType=\"iconfont\"\n iconName={props.icon.replace('iconfont', '')}\n />\n );\n else return <GvIcon iconName={props.icon} />;\n // 父组件如果传递了图标组件,就使用图标组件,如果传递了ep图标名称,就使用ep图标名称\n // if (typeof props.icon === 'string')\n // return (\n // <GvIcon\n // iconName={props.icon}\n // className={props.icon}\n // />\n // );\n // else {\n // const Icons = props.icon;\n // return <Icons />;\n // }\n };\n\n const checkPerms = () => {\n if (route) {\n const meta = route.meta;\n if (meta) {\n const pm = meta.pm || '';\n if (pm) {\n let filter: string = props.text || '';\n if (props.otext) filter = props.otext;\n if (filter === '') {\n const slot = slots.default?.();\n if (slot && slot[0]) filter = getVNodeText(slot[0]) || '';\n }\n if (filter) {\n const pmArr = pm.split(',');\n const perms = pmArr.filter((x) => x.indexOf(filter) !== -1);\n if (perms.length > 0) {\n const p = perms[0];\n const arr = p.split('|');\n if (arr[0] !== ' ' && arr[1] && arr[1] === 'f') {\n isShow.value = false;\n isIf.value = false;\n }\n }\n }\n }\n }\n }\n };\n\n const handleClick = async (e: MouseEvent, type?: string) => {\n // 判断是否是reset\n if (props.bizType === 'reset') {\n let parent: any = instance?.parent; // form\n while (parent && parent.type?.name !== 'ElForm') parent = parent.parent;\n await parent.exposed.resetFields?.();\n\n while (parent && parent.type?.name !== 'GvForm') parent = parent.parent;\n const rootForm = parent;\n // console.log(rootForm);\n const originFormList = rootForm?.exposed.originFormList.value;\n const formList = rootForm?.props.formList;\n // console.log(parent.props.model.value);\n if (originFormList && Array.isArray(originFormList))\n originFormList.forEach((x: any, index: number) => {\n if (x.type === 'dic') formList[index]['filtercode'] = x.filtercode; // 重置字典的filtercode\n formList[index]['value'] = x.value;\n formList[index]['showLabel'] = x.showLabel;\n formList[index]['hidden'] = x.hidden;\n formList[index]['disabled'] = x.disabled;\n // 重置日期\n if (x.dateType === 'daterange2' || x.dateType === 'datetimerange2') {\n parent.props.model.value[x.field + '-start'] = undefined;\n parent.props.model.value[x.field + '-end'] = undefined;\n parent.props.model.value[x.field] = undefined;\n }\n });\n // 重置按钮自定义回调\n props.cb?.(props.args);\n\n const rootEl = parent?.vnode.el as HTMLElement;\n // 重置日期\n const dateRangeSingles = rootEl?.querySelectorAll('.gv-daterange__single') as NodeListOf<HTMLElement>;\n if (dateRangeSingles)\n for (let i = 0; i < dateRangeSingles.length; i++) {\n const startInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-start .el-input__inner') as HTMLInputElement | null;\n if (startInput) startInput.value = '';\n const endInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-end .el-input__inner') as HTMLInputElement | null;\n if (endInput) endInput.value = '';\n }\n // update: 重置后执行查询方法 2022-04-17\n loadings.value = true;\n await parent?.vnode.el?.querySelector('.gv-search-bar .el-button--primary')?.click();\n loadings.value = false;\n return;\n } else if (props.bizType === 'import' || props.bizType === 'export') {\n emit('click', e, props.args);\n return;\n } else {\n loadings.value = true;\n if (type === 'confirm')\n if (buttonConfirm.value === false)\n try {\n await confirm(t('common.confirmMsg')).then(async () => {\n if (!locked.value) {\n locked.value = true;\n emit('click', e, props.args);\n locked.value = false;\n }\n });\n } catch {\n // ignore user cancel\n }\n else {\n if (!locked.value) {\n locked.value = true;\n emit('click', e, props.args);\n locked.value = false;\n }\n }\n else emit('click', e, props.args);\n // ===== loading关闭 =====\n loadings.value = false;\n }\n };\n\n // @created\n\n // @mounted\n // onMounted(() => {\n // checkPerms();\n // });\n\n // @render\n /** ===== render 渲染 ===== */\n return () => {\n // validate btn perms\n checkPerms();\n\n const classz = props.bizType ? `${prefixCls} ${props.bizType}` : `${prefixCls}`;\n if (isIf.value) {\n let renderBtn: Component;\n if (props.confirm === 'true' || props.confirm === true)\n if (buttonConfirm.value === false)\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e, 'confirm')}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n else\n renderBtn = (\n <GvPopconfirm\n title={t('common.confirmMsg')}\n onConfirm={(e: MouseEvent) => handleClick(e, 'confirm')}>\n {{\n reference: () => (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n class={classz}>\n {getSlots.value}\n </ElButton>\n ),\n }}\n </GvPopconfirm>\n );\n else\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e)}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n return renderBtn;\n } else return null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-button';\n .#{$prefixCls} {\n :deep(i + span) {\n margin-left: 5px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvButton from './src/GvButton.vue';\n\nconst GvButtonPlugin = {\n install(app: App): void {\n app.component(GvButton.name ?? 'GvButton', GvButton);\n },\n};\nexport default GvButtonPlugin;\n\nexport { GvButton };\n","<!--\n * @title: card component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 09:39:53\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:18:37\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCard } from 'element-plus';\n import { defineComponent } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('card');\n\n export default defineComponent({\n name: 'GvCard',\n props: {},\n setup(_props, { slots }) {\n // @method\n /**\n *@todo: 设置header标题\n *@author: bugcao\n *@date: 2026-05-09 09:31:12\n *@version: v0.0.1\n */\n const getCardHeader = () => {\n if (slots.header?.()) return <div class=\"clearfix\">{slots.header?.()}</div>;\n else return null;\n };\n\n // @render\n return () => (\n <ElCard class={prefixCls}>\n {{\n header: () => getCardHeader(),\n default: () => slots.default?.(),\n }}\n </ElCard>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-card';\n .#{$prefixCls} {\n .clearfix::before,\n .clearfix::after {\n display: table;\n content: '';\n }\n .clearfix::after {\n clear: both;\n }\n :deep(.el-card__body) {\n padding: 10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCard from './src/GvCard.vue';\n\nconst GvCardPlugin = {\n install(app: App): void {\n app.component(GvCard.name ?? 'GvCard', GvCard);\n },\n};\nexport default GvCardPlugin;\n\nexport { GvCard };\n","<!--\n * @title: cascader component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:07\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElCascader, useGlobalConfig, type CascaderOption, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('cascader');\n\n export default defineComponent({\n name: 'GvCascader',\n props: {\n vref: {\n type: String,\n required: false,\n default: '',\n },\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n id: {\n type: String,\n required: false,\n default: undefined,\n },\n value: {\n type: Array,\n required: false,\n default: () => [],\n },\n options: {\n type: Array as PropType<CascaderOption[]>,\n required: false,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n placeholder: {\n type: String,\n required: false,\n default: 'All', // 请选择\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n clearable: {\n type: Boolean,\n required: false,\n default: true,\n },\n showAllLevels: {\n type: Boolean,\n required: false,\n default: true,\n },\n separator: {\n type: String,\n required: false,\n default: ' / ',\n },\n trigger: {\n type: String,\n required: false,\n default: 'hover',\n },\n filterable: {\n type: Boolean,\n required: false,\n default: true,\n },\n multiple: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazy: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazyLoad: {\n type: Function as PropType<(node: any, resolve: (data: any[]) => void, reject: () => void) => void>,\n required: false,\n default: () => {},\n },\n },\n // @emit\n emits: ['input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const sOps = props.options;\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n\n // @computed\n const cascaderSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n\n // 回调参数:(value: string | number)\n // const handleInput = (val) => {\n // emit('input', val);\n // };\n const handleChange = (val) => {\n emit('change', val);\n };\n const handleBlur = (event) => {\n emit('blur', event);\n };\n /**\n * @todo: 搜索\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-10-07 15:48:09\n * @param {*} node\n * @param {*} query\n */\n const handleFilterMethod = (node, query) => {\n // console.log(node);\n const path = node.path;\n const labels = node.pathLabels;\n const data = node.data;\n if (query) {\n if (path.join(',').indexOf(query) >= 0) return true;\n if (labels.join(',').indexOf(query) >= 0) return true;\n if (data.spell)\n if (data.spell.indexOf(query) >= 0) return true;\n else {\n const pathNodes = node.pathNodes;\n return pathNodes.some((x) => {\n if (x.data.spell && x.data.spell.indexOf(query) >= 0) return true;\n });\n }\n }\n };\n\n // @render\n return (\n <ElCascader\n ref={props.vref || 'gv-cascader'}\n id={resolvedInputId.value}\n {...(props.name ? { name: props.name } : {})}\n class={prefixCls}\n v-model={inputValue.value}\n style={{ display: props.value ? '' : 'none' }}\n size={cascaderSize.value}\n placeholder={sPlaceHolder.value}\n options={sOps}\n disabled={getDisabled.value}\n show-all-levels={props.showAllLevels}\n clearable={props.clearable}\n separator={props.separator}\n filterable={props.filterable}\n filter-method={handleFilterMethod}\n debounce={400}\n onBlur={handleBlur}\n onChange={handleChange}\n collapse-tags\n props={{\n expandTrigger: props.trigger as 'click' | 'hover',\n lazy: props.lazy,\n lazyLoad: props.lazyLoad,\n multiple: props.multiple,\n }}></ElCascader>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-cascader';\n .#{$prefixCls} {\n width: 100%;\n\n :deep(.el-input) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-input__inner {\n height: 30px !important;\n line-height: 30px;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCascader from './src/GvCascader.vue';\nconst GvCascaderPlugin = {\n install(app: App): void {\n app.component(GvCascader.name ?? 'GvCascader', GvCascader);\n },\n};\nexport default GvCascaderPlugin;\n\nexport { GvCascader };\n","<!--\n * @title: checkbox component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 15:50:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:51:56\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckbox, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TCheckboxValueType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox');\n\n export default defineComponent({\n name: 'GvCheckbox',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Boolean, String, Number] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n const checkboxValue = ref(props.value);\n const checkboxSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新值 */\n const handleUpdate = (val: TCheckboxValueType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxValueType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckbox\n class={prefixCls}\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n border={props.border}\n size={checkboxSize.value}\n style={{ display: props.visible ? '' : 'none' }}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckbox>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n //font-size: $appTextSize;\n\n :deep(.el-checkbox__input) {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-focus {\n .el-checkbox__inner {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked {\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n\n &:hover {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n\n :deep(.el-checkbox__input.is-checked + .el-checkbox__label) {\n color: var(--primaryColor, $primaryColor);\n }\n\n :deep(.el-checkbox__label) {\n //font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckbox from './src/GvCheckbox.vue';\n\nconst GvCheckboxPlugin = {\n install(app: App): void {\n app.component(GvCheckbox.name ?? 'GvCheckbox', GvCheckbox);\n },\n};\nexport default GvCheckboxPlugin;\n\nexport { GvCheckbox };\n","<!--\n * @title: checkbox button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:41:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:52:18\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxButton, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxButtonValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-button');\n\n export default defineComponent({\n name: 'GvCheckboxButton',\n inheritAttrs: false,\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n required: false,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n /** 内部值 */\n const checkboxValue = ref(props.value);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @computed\n /** checkbox尺寸 */\n const checkboxButtonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @method\n /** 更新v-model */\n const handleUpdate = (val: TCheckboxButtonValue) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n\n // @render\n return () => (\n <ElCheckboxButton\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n value={props.value}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n size={checkboxButtonSize.value}\n class={prefixCls}\n border={props.border}\n style={{ display: props.visible ? '' : 'none' }}>\n {slots.default?.()}\n </ElCheckboxButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-button';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n //font-size: $appTextSize;\n\n :deep(.el-checkbox-button__inner) {\n //font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxButton from './src/GvCheckboxButton.vue';\n\nconst GvCheckboxButtonPlugin = {\n install(app: App): void {\n app.component(GvCheckboxButton.name ?? 'GvCheckboxButton', GvCheckboxButton);\n },\n};\nexport default GvCheckboxButtonPlugin;\n\nexport { GvCheckboxButton };\n","<!--\n * @title: checkbox group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:08:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:26:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxGroupType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-group');\n\n export default defineComponent({\n name: 'GvCheckboxGroup',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: Array as PropType<TCheckboxGroupType>,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n\n const checkboxValue = ref(props.value);\n\n // @computed\n const checkboxGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新 v-model */\n const handleUpdate = (val: TCheckboxGroupType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxGroupType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckboxGroup\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n size={checkboxGroupSize.value}\n aria-label={props.label}\n min={props.min}\n max={props.max}\n disabled={props.disabled}\n class={prefixCls}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckboxGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxGroup from './src/GvCheckboxGroup.vue';\n\nconst GvCheckboxGroupPlugin = {\n install(app: App): void {\n app.component(GvCheckboxGroup.name ?? 'GvCheckboxGroup', GvCheckboxGroup);\n },\n};\nexport default GvCheckboxGroupPlugin;\n\nexport { GvCheckboxGroup };\n","<!--\n * @title: col component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 10:00:33\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:24:29\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCol } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('col');\n\n export default defineComponent({\n name: 'GvCol',\n props: {\n span: {\n type: Number,\n default: 24,\n },\n offset: {\n type: Number,\n default: 0,\n },\n xs: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n sm: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n md: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n lg: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n xl: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n tag: {\n type: String,\n default: 'div',\n },\n visible: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @render\n return () => (\n <ElCol\n ref=\"gv-col\"\n style={{ display: props.visible ? '' : 'none' }}\n xs={props.xs}\n sm={props.sm}\n md={props.md}\n lg={props.lg}\n xl={props.xl}\n span={props.span}\n offset={props.offset}\n tag={props.tag}\n class={prefixCls}>\n {slots.default?.()}\n </ElCol>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvCol from './src/GvCol.vue';\n\nconst GvColPlugin = {\n install(app: App): void {\n app.component(GvCol.name ?? 'GvCol', GvCol);\n },\n};\nexport default GvColPlugin;\n\nexport { GvCol };\n","/*\n * 日期工具函数(Vue3 + TS 重构版)\n */\n\nexport type LocaleType = 'zh' | 'en' | 'english';\n\nconst localLabels = {\n monthes: {\n english: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n en: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n zh: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n },\n weekdays: {\n english: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n en: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n zh: ['日', '一', '二', '三', '四', '五', '六'],\n },\n meridians: {\n english: ['a.m.', 'p.m.'],\n en: ['AM', 'PM'],\n zh: ['上午', '下午'],\n },\n dayagos: {\n english: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n en: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n zh: ['今天', '昨天', '明天', '天前', '天后'],\n },\n};\n\nexport const toMidnight = (date: Date): Date => {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nexport const daysAgo = (date: Date, days = 0, midnight = false): Date => {\n const result = new Date(date.getTime() - days * 8.64e7);\n return midnight ? toMidnight(result) : result;\n};\n\nexport const monthBegin = (date: Date, offset = 0): Date => {\n const days = date.getDate() - 1 - offset;\n return daysAgo(date, days, true);\n};\n\nexport const quarterBegin = (date: Date): Date => {\n const month = date.getMonth() - (date.getMonth() % 3);\n return toMidnight(new Date(date.getFullYear(), month, 1));\n};\n\nexport const yearBegin = (date: Date): Date => toMidnight(new Date(date.getFullYear(), 0, 1));\n\nconst padZero = (value: string | number, len = 2): string => String(value).padStart(len, '0');\n\nexport const strftime = (date: Date, format?: string, local: LocaleType = 'zh'): string => {\n if (!format) {\n const str = new Date(date.getTime() + 2.88e7).toISOString();\n return str.substring(0, 16).replace('T', ' ');\n }\n\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n format = format.replace('%F', '%Y-%m-%d');\n format = format.replace(/%D|%x/g, '%m/%d/%y');\n format = format.replace(/%T|%X/g, '%H:%M:%S');\n format = format.replace('%R', '%H:%M');\n\n return format.replace(/%[A-Za-z%]/g, (f) => {\n let ans: string | number = f;\n\n switch (f) {\n case '%%':\n ans = '%';\n break;\n\n case '%Y':\n ans = date.getFullYear();\n break;\n\n case '%y':\n ans = date.getFullYear() % 100;\n break;\n\n case '%m':\n ans = date.getMonth() + 1;\n break;\n\n case '%d':\n ans = date.getDate();\n break;\n\n case '%H':\n ans = date.getHours();\n break;\n\n case '%M':\n ans = date.getMinutes();\n break;\n\n case '%S':\n ans = date.getSeconds();\n break;\n\n case '%b':\n case '%B': {\n const key = f === '%B' && locale === 'en' ? 'english' : locale;\n ans = localLabels.monthes[key][date.getMonth()];\n break;\n }\n\n case '%a':\n case '%A': {\n const key = f === '%A' && locale === 'en' ? 'english' : locale;\n ans = localLabels.weekdays[key][date.getDay()];\n break;\n }\n\n default:\n break;\n }\n\n if (['%y', '%m', '%d', '%H', '%M', '%S'].includes(f)) return padZero(ans);\n\n return String(ans);\n });\n};\n\nexport const humanize = (date: Date, local: LocaleType = 'zh'): string => {\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n const result = strftime(date, '', locale);\n\n const today = toMidnight(new Date()).getTime();\n const current = toMidnight(date).getTime();\n\n const days = (today - current) / 8.64e7;\n\n if (days <= -10 || days >= 10) return result;\n\n const labels = localLabels.dayagos[locale];\n\n let lbl = '';\n\n if (days === 0) lbl = labels[0];\n else if (days === 1) lbl = labels[1];\n else if (days === -1) lbl = labels[2];\n else if (days >= 2) lbl = `${days}${labels[3]}`;\n else lbl = `${Math.abs(days)}${labels[4]}`;\n\n return lbl + result.substring(10, 16);\n};\n","/*\n * @title: 日期组件左侧选择日期快捷键(非区间模式)\n * @author: bugcao@163.com\n * @Date: 2022-05-14 08:33:20\n * @LastEditors: bugcao@163.com\n * @LastEditTime: 2022-05-14 08:33:20\n * @version: 0.0.1\n * @copyright: copyright (c) 2022 bugcao\n */\nimport { daysAgo, monthBegin, quarterBegin, yearBegin } from './datetime';\n\nexport interface ShortcutItem {\n text: string;\n value: Date | [Date, Date] | (() => Date | [Date, Date]);\n}\n\nconst now = () => new Date();\n\n/** 单日期快捷选择 */\nexport const dateShortcuts: ShortcutItem[] = [\n {\n text: '今天',\n value: () => now(),\n },\n {\n text: '昨天',\n value: () => daysAgo(now(), 1),\n },\n {\n text: '最近一周',\n value: () => daysAgo(now(), 7),\n },\n {\n text: '最近30天',\n value: () => daysAgo(now(), 30),\n },\n {\n text: '本月开始',\n value: () => monthBegin(now()),\n },\n {\n text: '本季开始',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 英文单日期快捷选择 */\nexport const dateShortcutsEn: ShortcutItem[] = [\n {\n text: 'Today',\n value: () => now(),\n },\n {\n text: 'Yesterday',\n value: () => daysAgo(now(), 1),\n },\n {\n text: 'Last week',\n value: () => daysAgo(now(), 7),\n },\n {\n text: 'Last 30 days',\n value: () => daysAgo(now(), 30),\n },\n {\n text: 'Month start',\n value: () => monthBegin(now()),\n },\n {\n text: 'Season Start',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 日期时间快捷选择 */\nexport const dateTimeShortcuts = dateShortcuts.slice(0, 3);\n\nexport const dateTimeShortcutsEn = dateShortcutsEn.slice(0, 3);\n\n/** 日期范围快捷选择 */\nexport const dateRangeShortcuts: ShortcutItem[] = [\n {\n text: '最近一周',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '最近30天',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本月至今',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本季至今',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '今年至今',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: '最近六个月',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 英文日期范围快捷选择 */\nexport const dateRangeShortcutsEn: ShortcutItem[] = [\n {\n text: 'Last week',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Last 30 days',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Month date',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Season date',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Year date',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: 'Last 6 mon',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 日历快捷选择 */\nexport const calendarShortcuts = [...dateShortcuts];\n","<!--\n * @title: 自定义日期选择组件\n * @author: bugcao@163.com\n * @date: 2026-06-08 14:52:11\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:52:01\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Bugcao\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDatePicker, useGlobalConfig, type ComponentSize, type DatePickerType } from 'element-plus';\n import { computed, defineComponent, ref, unref, useAttrs, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n import { dateRangeShortcuts, dateRangeShortcutsEn, dateShortcuts, dateShortcutsEn, dateTimeShortcuts, dateTimeShortcutsEn } from './shortcuts';\n import type { TDatePickerSize, TDatePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('datepicker');\n\n export default defineComponent({\n // @define name\n name: 'GvDatePicker',\n\n // @props\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, String, Array] as PropType<TDatePickerType>,\n default: undefined,\n },\n type: {\n type: String as PropType<DatePickerType>,\n default: 'date',\n },\n format: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n valueFormat: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n defaultTime: {\n type: Array,\n default: undefined,\n },\n size: {\n type: String as PropType<TDatePickerSize>,\n default: 'default',\n },\n rangeSeparator: {\n type: String,\n default: undefined,\n },\n startPlaceholder: {\n type: String,\n default: undefined,\n },\n endPlaceholder: {\n type: String,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n disabledDateFunc: {\n type: Array,\n default: () => [],\n },\n disabledDate: {\n type: Function,\n default: () => {},\n },\n editable: {\n type: Boolean,\n default: true,\n },\n unlink: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change', 'blur', 'focus', 'pick', 'input'],\n\n setup(props, { emit }) {\n // @hooks\n const { locale, t } = useI18n();\n const attrs = useAttrs();\n const globalSize = useGlobalConfig('size');\n\n // @data\n const inputValue = ref(props.modelValue);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @computed\n const datePickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n const getShortcuts = computed(() => {\n if (locale.value === 'en')\n if (props.type === 'date') return dateShortcutsEn;\n else if (props.type === 'datetime') return dateTimeShortcutsEn;\n else if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcutsEn;\n else return '';\n // fixme: 查看源码是'',如果是[],则依旧会出现左边栏\n else if (props.type === 'date') return dateShortcuts;\n else if (props.type === 'datetime') return dateTimeShortcuts;\n else if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcuts;\n else return ''; // fixme: 查看源码是'',如果是[],则依旧会出现左边栏\n });\n /**\n * @todo: 设置pickerOptions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 17:03:41\n */\n const getPickerOptions = computed(() => {\n const pickerOptions: any = {\n shortcuts: getShortcuts.value,\n };\n if (props.disabledDateFunc.includes('beforeToday'))\n // 禁止选择今天之前日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() < Date.now() - 8.64e7;\n if (props.disabledDateFunc.includes('afterToday'))\n // 禁止选择今天之后的日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() > Date.now();\n if (props.disabledDate) {\n const db = { disabledDate: props.disabledDate };\n return { ...pickerOptions, ...db };\n } else return { ...pickerOptions };\n });\n\n // @methods\n /**\n * @todo: 回调参数:(value: string | number)\n * @author: bugcao@163.com\n * @Date: 2026-06-08 16:03:12\n * @param {*} value\n */\n const handleInput = (value: TDatePickerType) => {\n emit('update:modelValue', value);\n emit('input', value);\n };\n /**\n * @todo: 变化时触发\n * @author: bugcao@163.com\n * @Date: 2026-06-08 15:05:50\n * @param {*} value\n */\n const handleChange = (value: string) => {\n emit('change', value);\n };\n /**\n * @todo: 失去焦点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 18:39:51\n * @param {*} vm 当前vue组件对象\n */\n const handleBlur = (vm: FocusEvent) => {\n // console.log(vm);\n // const val = vm.$el.querySelector('input').value;\n // if (val) {\n // const format = vm.format;\n // if (!this.userInput)\n // this.userInput = moment(val, format.toUpperCase()).format(format.toUpperCase());\n // if (this.userInput !== 'Invalid date')\n // vm.userInput = this.userInput;\n // // picker.vue中触发value的方法\n // // vm.handleChange();\n emit('blur', vm);\n // this.userInput = '';\n // }\n };\n /**\n * @todo: 获得焦点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 18:39:51\n * @param {*} vm 当前vue组件对象\n */\n const handleFocus = (vm: FocusEvent) => {\n emit('focus', vm);\n };\n /**\n * @todo: 选中日期回调:只有在range模式下有效\n * @author: bugcao@163.com\n * @Date: 2026-06-08 16:16:51\n * @param {*} maxDate\n * @param {*} minDate\n */\n const handlePick = (val: [Date, null | Date]) => {\n emit('pick', { maxDate: val[0], minDate: val[1] });\n };\n\n // @render\n return () => (\n <div class={prefixCls}>\n <ElDatePicker\n ref={props.vref || 'gv-datepicker'}\n id={resolvedInputId.value}\n name={props.name}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleInput}\n type={props.type}\n range-separator={props.rangeSeparator || t('common.until')}\n placeholder={props.placeholder || t('common.selectDate')}\n startPlaceholder={props.startPlaceholder || t('common.startDate')}\n endPlaceholder={props.endPlaceholder || t('common.endDate')}\n default-time={props.defaultTime}\n disabled-date={getPickerOptions.value?.disabledDate}\n shortcuts={getPickerOptions.value.shortcuts}\n format={props.format}\n clearable={props.clearable}\n valueFormat={props.valueFormat}\n {...({\n onCalendarChange: handlePick,\n } as any)}\n size={datePickerSize.value}\n disabled={props.disabled}\n editable={props.editable}\n onBlur={handleBlur}\n onFocus={handleFocus}\n prefix-icon=\"\"\n onChange={handleChange}\n unlink-panels={props.unlink}\n {...attrs}\n // { ...this.$listeners }\n ></ElDatePicker>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-datepicker';\n .#{$prefixCls} {\n width: 100% !important;\n vertical-align: middle;\n :deep(.el-date-editor) {\n width: 100%;\n }\n :deep(.el-input.is-disabled) {\n .el-input__inner {\n color: $textColor;\n }\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n //font-size: $appTextSize;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-range__close-icon {\n width: 20px;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-date-editor--daterange {\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDatePicker from './src/GvDatePicker.vue';\n\nconst GvDatePickerPlugin = {\n install(app: App): void {\n app.component(GvDatePicker.name ?? 'GvDatePicker', GvDatePicker);\n },\n};\nexport default GvDatePickerPlugin;\n\nexport { GvDatePicker };\n","/*\n * @title: dialog drag\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 10:50:25\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 10:52:45\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Directive } from 'vue';\n\n/** 使用 WeakSet 跟踪已绑定拖拽事件的 header 元素,避免内存泄漏 */\nconst boundElements = new WeakSet<HTMLElement>();\n\n/**\n * 初始化拖拽功能\n */\nconst initDrag = (el: HTMLElement, collapseMenu: boolean = false) => {\n /** Vue3 dialog - 支持 appendToBody 的情况 */\n let dragDom = el.querySelector('.el-dialog') as HTMLElement;\n if (!dragDom) dragDom = document.querySelector('.el-dialog') as HTMLElement;\n\n if (!dragDom) {\n console.warn('gv-drag-dialog: 未找到 dialog 元素');\n return false;\n }\n\n /** Vue3 dialog header - 支持自定义 header 和默认 header */\n let dialogHeaderEl: HTMLElement | null = null;\n dialogHeaderEl = dragDom.querySelector('.el-dialog__header') as HTMLElement;\n if (!dialogHeaderEl) dialogHeaderEl = dragDom.querySelector('.gv-dialog__title') as HTMLElement;\n\n if (!dialogHeaderEl) {\n console.warn('gv-drag-dialog: 未找到 dialog header 元素');\n return false;\n }\n\n /** 避免重复绑定 */\n if (boundElements.has(dialogHeaderEl)) return true;\n boundElements.add(dialogHeaderEl);\n\n /** 鼠标移动样式 */\n dialogHeaderEl.style.cursor = 'move';\n /** 初始化顶部 */\n dragDom.style.top = '0px';\n /** 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null) */\n const getStyle = (function () {\n if ((window.document as any).currentStyle) return (dom: HTMLElement, attr: string) => (dom as any).currentStyle[attr];\n else return (dom: HTMLElement, attr: string) => getComputedStyle(dom, null)[attr as any];\n })();\n\n dialogHeaderEl.onmousedown = (e: MouseEvent) => {\n /** 鼠标按下,计算当前元素距离可视区的距离 */\n const disX = e.clientX - dialogHeaderEl!.offsetLeft;\n const disY = e.clientY - dialogHeaderEl!.offsetTop;\n\n const dragDomWidth = dragDom.offsetWidth;\n const dragDomHeight = dragDom.offsetHeight;\n\n const screenWidth = document.body.clientWidth;\n const screenHeight = document.body.clientHeight;\n\n /** 左侧边界 */\n const minDragDomLeft = dragDom.offsetLeft;\n /** 右侧边界 */\n const menuWidth = collapseMenu ? 54 : 200;\n const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth - menuWidth;\n\n /** 上边界 */\n const minDragDomTop = dragDom.offsetTop;\n /** 下边界 */\n // 45: toolbar height;34: tags view height\n const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight - 45 - 34;\n\n /** 获取到的值带px 正则匹配替换 */\n let styL: string | number = getStyle(dragDom, 'left');\n let styT: string | number = getStyle(dragDom, 'top');\n\n /** 百分比转像素 */\n if (typeof styL === 'string' && styL.includes('%')) {\n styL = document.body.clientWidth * (+styL.replace(/%/g, '') / 100);\n styT = document.body.clientHeight * (+String(styT).replace(/%/g, '') / 100);\n } else {\n styL = +String(styL).replace(/\\px/g, '');\n styT = +String(styT).replace(/\\px/g, '');\n }\n\n /** 鼠标移动 */\n const onMouseMove = (ev: MouseEvent) => {\n /** 通过事件委托,计算移动的距离 */\n let left = ev.clientX - disX;\n let top = ev.clientY - disY;\n\n /** 边界处理 */\n if (-left > minDragDomLeft) left = -minDragDomLeft;\n else if (left > maxDragDomLeft) left = maxDragDomLeft;\n\n if (-top > minDragDomTop) top = -minDragDomTop;\n else if (top > maxDragDomTop) top = maxDragDomTop;\n\n /** 移动当前元素 */\n dragDom.style.left = `${left + Number(styL)}px`;\n dragDom.style.top = `${top + Number(styT)}px`;\n };\n\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n return true;\n};\n\nconst dragDialog: Directive = {\n /**\n * @title 挂载时调用\n * @param el 指令绑定的元素\n * @param binding 指令绑定的参数\n * @description Vue3 中需要使用 nextTick 等待 DOM 渲染完成,并通过 querySelector 查找 ElDialog 内部元素\n */\n // mounted(el: HTMLElement, binding: DirectiveBinding, vnode: VNode) {\n // // 使用 setTimeout 确保 ElDialog 已经渲染完成\n // setTimeout(() => {\n // // 尝试初始化,如果 dialog 还没打开,会在 opened 事件中再次尝试\n // initDrag(el);\n // }, 200);\n // },\n};\nexport default dragDialog;\nexport { initDrag };\n","<!--\n * @title: dialog component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:57:32\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:57:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDialog } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref, watch, type VNode } from 'vue';\n import { initDrag } from './drag';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('dialog');\n\n export default defineComponent({\n name: 'GvDialog',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n hasFooter: {\n type: Boolean,\n required: false,\n default: true,\n },\n width: {\n type: String,\n required: false,\n default: '75%',\n },\n height: {\n type: String,\n required: false,\n default: undefined,\n },\n nest: {\n type: Boolean,\n required: false,\n default: false,\n },\n appendToBody: {\n type: Boolean,\n required: false,\n default: false,\n },\n fullscreen: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: String,\n required: false,\n default: undefined,\n },\n closeOnClickModal: {\n type: Boolean,\n required: false,\n default: false,\n },\n closeOnPressEscape: {\n type: Boolean,\n required: false,\n default: true,\n },\n dialogClass: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n emits: ['open', 'opened', 'close', 'closed', 'cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n const buttonQuick = appStore.buttonQuick;\n const collapseMenus = appStore.collapseMenus;\n const instance = getCurrentInstance();\n\n let myDialogClass = props.dialogClass || prefixCls;\n let dialogVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-dialog';\n const dialogMaxHeight = ref(props.height);\n let sAppendToBody = props.appendToBody;\n const modalAppendToBody = ref(false);\n let sNest = props.nest;\n let modalMask = props.nest;\n\n // @watch\n watch(\n () => props.visible,\n (newValue) => {\n // fixme: watch中跟踪visible,解决如将ht-dialog在一个vue组件中,如不设置,则第二次无法显示\n dialogVisible = newValue;\n if (dialogVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n },\n );\n\n // @method\n const handleVisible = () => {\n dialogVisible = true;\n };\n const handleOpen = () => {\n emit('open');\n };\n const handleOpened = () => {\n emit('opened');\n nextTick(() => {\n initDrag(instance?.vnode?.el as HTMLElement, collapseMenus);\n });\n };\n const handleClose = () => {\n dialogVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n emit('close');\n };\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event) => {\n dialogVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n /**\n * @todo: render footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 11:19:11\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x.children?.[0]) || '';\n // add: 增加text属性,判断权限使用 2023-04-18\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick) if (text === t('dialogBar.save')) propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n } else if (text.indexOf(t('dialogBar.add')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.add')) {\n propsData.text = t('dialogBar.add2');\n propsData.otext = t('dialogBar.add');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData.text = t('dialogBar.confirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.affirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n // if (text === t('dialogBar.download')) x.children[0].text = t('dialogBar.download2');\n propsData.bizType = 'download';\n propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1) {\n propsData.bizType = 'delete';\n propsData.icon = 'el-icon-delete';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-wangongqueren';\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n }\n });\n return footer;\n };\n\n /**\n * @todo: footer render\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:34:41\n */\n const getFooter = () => {\n if (props.hasFooter)\n if (slots.footer?.())\n return (\n <div>\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div>\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n\n /**\n * @todo: mask\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:38:59\n */\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n class=\"v-modal gv-dialog-modal z-[9]\"\n tabindex=\"0\"></div>\n );\n return mask;\n };\n\n const getMaxHeight = () => {\n if (!props.height) dialogMaxHeight.value = document.documentElement.clientHeight - 230 + 'px';\n else if (props.height.indexOf('%') === -1) dialogMaxHeight.value = parseFloat(props.height) - 180 + 'px';\n else dialogMaxHeight.value = props.height; // 百分比方式\n };\n\n // @created\n // fixme: 解决嵌套弹窗问题 2022-08-08\n const pEl = instance?.parent?.parent?.vnode.el;\n if (pEl)\n try {\n const p = pEl.closest('.gv-drawer,.gv-dialog');\n if (p) sNest = true;\n } catch {\n // error\n }\n if (sNest) {\n myDialogClass = props.dialogClass ? 'gv-dialog is-nested ' + props.dialogClass : 'gv-dialog is-nested';\n sAppendToBody = true;\n modalAppendToBody.value = true;\n modalMask = true;\n } else modalMask = false;\n\n onBeforeUnmount(() => {\n window.removeEventListener('resize', getMaxHeight);\n });\n\n // mounted\n onMounted(() => {\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (dialogVisible) maskVisible.value = true;\n\n nextTick(() => {\n window.addEventListener('resize', getMaxHeight);\n // 计算高度\n getMaxHeight();\n });\n });\n\n // @render\n return () => (\n <div class=\"gv-dialog__popup\">\n <ElDialog\n ref={vref}\n // route={this.route}\n modelValue={dialogVisible}\n onUpdate:modelValue={handleVisible}\n appendToBody={sAppendToBody}\n modal-append-to-body={modalAppendToBody.value}\n close-on-click-modal={props.closeOnClickModal}\n close-on-press-escape={props.closeOnPressEscape}\n showClose={true}\n destroy-on-close={true}\n fullscreen={props.fullscreen}\n modal={modalMask}\n // before-close={this.handleBeforeClose}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n onOpened={handleOpened}\n class={myDialogClass}\n width={props.width}\n style={{ height: `${props.height}` }}>\n {{\n header: () => (\n <div class=\"gv-dialog__title\">\n <span>\n <GvIcon\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"\n />\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div\n class=\"gv-dialog__body__inner\"\n style={{ maxHeight: `${dialogMaxHeight.value} !important` }}>\n {slots.default?.()}\n </div>\n ),\n footer: () => <div class=\"dialog-footer\">{getFooter()}</div>,\n }}\n </ElDialog>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-dialog__popup {\n :deep(.el-modal-dialog) {\n position: absolute !important;\n &.is-nested {\n top: 100px;\n left: 14%;\n }\n .el-overlay-dialog {\n position: absolute !important;\n overflow: hidden;\n .el-dialog {\n max-height: 93.5% !important;\n margin-top: 25px !important;\n padding: 0px;\n\n .el-dialog__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-dialog__title {\n //font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n //font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-dialog__headerbtn {\n width: 16px;\n height: 25px;\n top: 2px;\n right: 12px;\n font-size: 20px;\n font-weight: bolder;\n line-height: normal;\n\n &:hover .el-dialog__close {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-dialog__close {\n font-size: 16px;\n font-weight: bolder;\n }\n }\n }\n\n .el-dialog__body {\n padding: 5px 5px 5px 15px;\n overflow: hidden;\n\n .gv-dialog__body__inner {\n padding-right: 15px;\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .el-dialog__footer {\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button i + span {\n margin-left: 5px;\n }\n\n padding: 5px 15px;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n }\n\n .gv-tabs {\n .gv-dialog {\n top: -10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDialog from './src/GvDialog.vue';\nconst GvDialogPlugin = {\n install(app: App): void {\n app.component(GvDialog.name ?? 'GvDialog', GvDialog);\n },\n};\nexport default GvDialogPlugin;\n\nexport { GvDialog };\n","<!--\n * @title: divider component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:24:57\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:03:45\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDivider } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { DividerDirection } from './types';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('divider');\n\n export default defineComponent({\n name: 'GvDivider',\n emits: ['setDividerShow'],\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n label: {\n type: String,\n required: true,\n default: '栏目',\n },\n position: {\n type: String,\n required: false,\n default: 'left',\n },\n direction: {\n type: String as PropType<DividerDirection>,\n required: false,\n default: 'horizontal',\n },\n target: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n\n setup(props, { emit }) {\n /**\n * @todo: click divider — toggle form visibility via parent isShow\n */\n const clickDivider = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n emit('setDividerShow', !props.visible);\n };\n\n return () => (\n <div\n class={prefixCls}\n onClick={(event) => clickDivider(event)}>\n <ElDivider\n content-position={props.position}\n direction={props.direction}>\n <span class=\"title\">{props.label}</span>\n </ElDivider>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-divider';\n .#{$prefixCls} {\n width: 100%;\n height: 20px;\n margin: 5px 0 8px 0;\n overflow: hidden;\n user-select: none;\n\n // 禁止选中文本\n &:hover {\n cursor: pointer;\n }\n :deep(.el-divider--horizontal) {\n margin: 8px 0;\n .el-divider__text {\n padding: 0 $modulePadding;\n &.is-left {\n left: -$moduleMargin;\n }\n .title {\n display: inline-block;\n height: 20px;\n //font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 20px;\n color: $textColor;\n\n &::before {\n display: inline-block;\n width: 5px;\n height: 100%;\n margin-right: 8px;\n vertical-align: middle;\n content: '';\n background-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDivider from './src/GvDivider.vue';\nconst GvDividerPlugin = {\n install(app: App): void {\n app.component(GvDivider.name ?? 'GvDivider', GvDivider);\n },\n};\nexport default GvDividerPlugin;\n\nexport { GvDivider };\n","<!--\n * @title: drawer component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:58:21\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:04\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDrawer } from 'element-plus';\n import { defineComponent, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('drawer');\n\n export default defineComponent({\n name: 'GvDrawer',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n direction: {\n type: String as PropType<'rtl' | 'ltr' | 'ttb' | 'btt'>,\n required: false,\n default: 'rtl',\n },\n size: {\n type: [String, Number],\n required: false,\n default: '95%', // 95%\n },\n paddingHeight: {\n type: [Number],\n required: false,\n default: 100, // 100\n },\n },\n emits: ['cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n let drawerVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-drawer';\n const drawerMaxHeight = ref(0);\n const show = ref(false);\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const sPaddingHeight = appStore.drawerPaddingHeight ? appStore.drawerPaddingHeight : props.paddingHeight;\n\n // @watch\n watch(\n () => props.visible,\n (newVal) => {\n // fixme: watch中跟踪visible,解决如将ht-drawer在一个vue组件中,如不设置,则第二次无法显示\n drawerVisible = newVal;\n if (drawerVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n },\n );\n\n // @method\n\n const handleOpen = () => {\n // this.maskVisible = true;\n // this.$emit('opened');\n };\n\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event: Event) => {\n drawerVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n\n const handleVisible = () => {\n drawerVisible = true;\n };\n\n const handleClose = () => {\n drawerVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n // this.$emit('close', event);\n };\n\n /**\n * @todo: set footer button shortcut\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:25:50\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x) || '';\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.save')) {\n propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData['otext'] = t('dialogBar.confirm');\n propsData.text = t('dialogBar.confirm2');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n if (buttonIcon) propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n if (buttonIcon) propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.pay')) !== -1) {\n propsData.bizType = 'pay';\n if (buttonIcon) propsData.icon = 'gv-icon-yingshoukuan';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n if (buttonIcon) propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n if (buttonIcon) propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n if (buttonIcon) propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n if (buttonIcon) propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.publish')) !== -1) {\n propsData.bizType = 'publish';\n if (buttonIcon) propsData.icon = 'gv-icon-fabu';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n propsData.bizType = 'download';\n // if (text === t('dialogBar.download')) children[0].text = '下 载';\n if (buttonIcon) propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1 || text.indexOf(t('dialogBar.obsolete')) !== -1) {\n propsData.bizType = 'delete';\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n if (buttonQuick) {\n if (text === t('dialogBar.obsolete')) {\n propsData.text = t('dialogBar.obsolete2');\n propsData.otext = t('dialogBar.obsolete');\n }\n if (text === t('dialogBar.delete')) {\n propsData.text = t('dialogBar.delete2');\n propsData.otext = t('dialogBar.delete');\n }\n }\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n propsData['otext'] = t('dialogBar.submit');\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.settlement')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-eduguanli';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-wangongqueren';\n }\n });\n\n return footer;\n };\n\n /**\n * @todo: get footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:38:54\n */\n const getFooter = () => {\n let returnIcon: string | undefined = 'iconfont gv-icon-fanhui2';\n if (!buttonIcon) returnIcon = undefined;\n if (slots.footer?.())\n return (\n <div class=\"gv-drawer__footer__inner\">\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div class=\"gv-drawer__footer__inner\">\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n const getMaxHeight = () => {\n drawerMaxHeight.value = document.documentElement.clientHeight - 215;\n };\n\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n tabindex=\"0\"\n class=\"v-modal gv-dialog-drawer z-[9]\"></div>\n );\n return mask;\n };\n // @created\n\n // @mounted\n onMounted(() => {\n // 实现esc按键绑定\n // this.bindListerOnEsc();\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (drawerVisible) {\n show.value = true;\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n }\n getMaxHeight();\n nextTick(() => {});\n });\n // @render\n return () => (\n <div class=\"gv-drawer__popup\">\n <ElDrawer\n class={prefixCls}\n ref={vref}\n modelValue={drawerVisible}\n onUpdate:modelValue={handleVisible}\n direction={props.direction}\n appendToBody={false}\n modal-append-to-body={false}\n close-on-press-escape={true}\n showClose={true}\n close-on-click-modal={false}\n modal={false}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n size={props.size}\n style={{ height: `calc(100vh - ${sPaddingHeight}px)` }}>\n {{\n header: () => (\n <div class=\"gv-drawer__title\">\n <span>\n <GvIcon\n style={{ display: buttonIcon ? '' : 'none' }}\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"></GvIcon>\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div>\n <div\n class=\"gv-drawer__body__inner\"\n style={{ maxHeight: `${drawerMaxHeight.value}px !important` }}>\n {slots.default?.()}\n </div>\n </div>\n ),\n footer: () => <div class=\"gv-drawer__footer\">{getFooter()}</div>,\n }}\n </ElDrawer>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-drawer__popup {\n :deep(.el-modal-drawer) {\n position: absolute !important;\n top: 1px !important;\n height: calc(100vh - 100px) !important;\n .el-drawer {\n // width: 95% !important;\n height: 98% !important;\n margin-top: 1px !important;\n\n .el-drawer__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n margin-bottom: 1px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-drawer__title {\n //font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n //font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-drawer__close-btn {\n top: 10px;\n right: 12px;\n line-height: normal;\n\n i {\n font-size: 16px;\n font-weight: bolder;\n }\n\n &:hover i {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-drawer__close {\n font-weight: bolder;\n }\n }\n }\n\n .el-drawer__body {\n padding: 5px 15px;\n overflow: hidden;\n\n .gv-drawer__body__inner {\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .gv-drawer__footer {\n .gv-drawer__footer__inner {\n float: right;\n padding: 5px;\n\n .el-button i + span {\n margin-left: 5px;\n }\n }\n\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button--default {\n margin-left: 8px;\n }\n\n width: 100%;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n .gv-tabs {\n .gv-drawer {\n top: 10px;\n height: 93% !important;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDrawer from './src/GvDrawer.vue';\nconst GvDrawerPlugin = {\n install(app: App): void {\n app.component(GvDrawer.name ?? 'GvDrawer', GvDrawer);\n },\n};\nexport default GvDrawerPlugin;\n\nexport { GvDrawer };\n","import { type VueTypeValidableDef, type VueTypesInterface, createTypes, toValidableType } from 'vue-types';\nimport type { CSSProperties } from 'vue';\n\ntype PropTypes = VueTypesInterface & {\n readonly style: VueTypeValidableDef<CSSProperties>;\n};\nconst newPropTypes = createTypes({\n func: undefined,\n bool: undefined,\n string: undefined,\n number: undefined,\n object: undefined,\n integer: undefined,\n}) as PropTypes;\n\nclass propTypes extends newPropTypes {\n static get style(): VueTypeValidableDef<CSSProperties> {\n return toValidableType('style', {\n type: [String, Object],\n });\n }\n}\n\nexport { propTypes };\n","/*\n * @title: pinyin-pro 汉字转拼音组件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-10 11:21:59\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-10-10 11:22:02\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pinyin } from 'pinyin-pro';\n/**\n * usePinyin 组合式函数\n * 提供常见的中文转拼音功能\n */\nexport function usePinyin() {\n /**\n * 中文转拼音(默认无音调、空格分隔)\n * @param text 中文字符串\n * @param withTone 是否带音调(默认 false)\n */\n const toPinyin = (text: string, withTone = false): string => {\n if (!text) return '';\n return pinyin(text, {\n toneType: withTone ? 'symbol' : 'none',\n type: 'string',\n multiple: false,\n });\n };\n\n /**\n * 获取拼音首字母\n * @param text 中文字符串\n */\n const getFirstLetter = (text: string): string => {\n if (!text) return '';\n return pinyin(text, {\n pattern: 'first',\n toneType: 'none',\n type: 'string',\n }).replace(/\\s+/g, '');\n };\n\n /**\n * 获取拼音数组(按字分隔)\n * @param text 中文字符串\n */\n const getPinyinArray = (text: string): string[] => {\n if (!text) return [];\n return pinyin(text, {\n toneType: 'none',\n type: 'array',\n });\n };\n\n return {\n toPinyin,\n getFirstLetter,\n getPinyinArray,\n };\n}\n","<!--\n * @title: expand menu list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-04 12:37:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:26\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { usePinyin } from '@@/hooks/web/usePinyin';\n import { isExternal, pathResolve, sleep } from '@@/utils';\n import { Search, Star, StarFilled } from '@element-plus/icons-vue';\n import { ElAutocomplete, ElIcon, ElTabPane, ElTabs } from 'element-plus';\n import { computed, onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n';\n import type { RouteType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu-list');\n\n defineOptions({\n name: 'GvMenuList', // 定义组件名称\n });\n const { t } = useI18n();\n const permStore = usePermsStore();\n const pinYin = usePinyin();\n const routes = computed(() => permStore.getServerRouters);\n\n const emit = defineEmits(['close']);\n\n const menuList = ref<RouteType[]>();\n const menuPath = ref('');\n\n const fMenusList = ref<AppRouteRecordRaw[]>([]);\n\n // ------ watch hook------\n // watchEffect();\n // // [routes, menusList],\n // // [\n // // (n, o) => {\n // // this.menusList = this.generateRoutes(this.routes.value);\n // // },\n // // (list) => {\n // // // 转换拼音\n // // if (this.supportPinyinSearch) this.addPinyinField(list);\n // // },\n // // ],\n\n // ------ methods hook ------\n /**\n * @todo: generate routes\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-15 10:46:56\n * @param {*} sidebarRoutes\n * @param {*} basePath\n * @param {*} prefixTitle\n * @param {*} prefixCode\n */\n\n const generateRouter = (serverRoutes: AppRouteRecordRaw[], basePath = '/', prefixTitle: string[] = [], prefixCode: string[] = []): RouteType[] => {\n let res: RouteType[] = [];\n for (const router of serverRoutes) {\n if (router.redirect === '/404') continue;\n if (router.meta?.hidden) continue;\n const data: RouteType = {\n path: pathResolve(basePath, router.path),\n title: [...(prefixTitle as string[])],\n pinyinTitle: pinYin.getFirstLetter([...(prefixTitle as string[])].join('')),\n code: [...prefixCode],\n };\n if (router.meta && router.meta.title) {\n const i18ntitle = router.meta.title;\n const code = router.meta.code || '';\n data.title = [...data.title, i18ntitle];\n data.pinyinTitle = pinYin.getFirstLetter(data.title.join(''));\n data.code = [...data.code, String(code)];\n if (router.redirect !== 'noredirect') res.push(data);\n else if (basePath === '/') fMenusList.value.push(router);\n }\n if (router.children) {\n const tempRoutes = generateRouter(router.children, data.path, data.title);\n if (tempRoutes.length >= 1) res = [...res, ...tempRoutes];\n }\n }\n return res;\n };\n\n const handleCloseDrawer = () => {\n emit('close');\n };\n\n /**\n * @todo: click menu item handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-03-09 10:56:00\n * @param {*} item\n */\n const handleSelect = (item: RouteType) => {\n // push({ path: item.path });\n // handleCloseDrawer();\n sleep(200).then(() => {\n menuPath.value = '';\n });\n };\n\n const handleSearch = (query: string, cb: any) => {\n let res: RouteType[] = [];\n if (query !== '')\n if (Array.isArray(menuList.value))\n res = menuList.value.filter((item) => {\n if (item.title.join('').indexOf(query) !== -1) return item;\n else if (item.pinyinTitle.indexOf(query.toLowerCase()) !== -1) return item;\n else if (item.path.indexOf(query) !== -1) return item;\n });\n else res = menuList.value ?? [];\n else res = menuList.value ?? [];\n cb(res);\n };\n\n /**\n * @todo: star click handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-11 10:20:33\n * @param {*} star\n * @param {*} path\n * @param {*} title\n * @param {*} menuItem\n */\n const starClickHandle = (star, path, title, menuItem) => {};\n\n // ------ mounted hook ------\n onMounted(() => {\n menuList.value = generateRouter(routes.value);\n // console.log('routes', permStore.getServerRouters);\n // console.log('menuList', menuList.value);\n });\n</script>\n<template>\n <div :class=\"prefixCls\">\n <!-- search -->\n <div class=\"search\">\n <div class=\"top\">\n <ElAutocomplete\n v-model=\"menuPath\"\n value-key=\"path\"\n :fetch-suggestions=\"handleSearch\"\n :placeholder=\"t('sideBar.menuSearch')\"\n @select=\"handleSelect\">\n <template #prefix>\n <ElIcon>\n <Search />\n </ElIcon>\n </template>\n <template v-slot=\"{ item }\">\n <span class=\"name\">{{ item.title.join(' > ') }}</span>\n </template>\n </ElAutocomplete>\n </div>\n </div>\n <!-- main -->\n <div class=\"main\">\n <ElTabs tab-position=\"right\">\n <ElTabPane\n v-for=\"item in fMenusList\"\n :key=\"item.name\"\n :label=\"item.meta?.title\"\n lazy>\n <div class=\"column-wrap\">\n <div\n v-for=\"sub in item.children\"\n :key=\"sub.name\"\n class=\"box\">\n <template v-if=\"!sub.children || sub.children.length === 0\">\n <ul class=\"leaf\">\n <li>\n <ElIcon @click.stop=\"starClickHandle(sub.meta?.star, sub.path, sub.meta?.title, sub)\">\n <component :is=\"sub.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}`\"\n @click=\"handleCloseDrawer\">\n {{ sub.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ sub.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n <template v-else>\n <h4>{{ sub.meta?.title }}</h4>\n <ul>\n <li\n v-for=\"x in sub.children\"\n :key=\"x.name\">\n <ElIcon @click.stop=\"starClickHandle(x.meta?.star, x.name, x.meta?.title, x)\">\n <component :is=\"x.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}/${x.path}`\"\n @click=\"handleCloseDrawer\">\n {{ x.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ x.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n </div>\n </div>\n </ElTabPane>\n </ElTabs>\n </div>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu-list';\n .#{$prefixCls} {\n position: absolute;\n width: 650px;\n height: 100%;\n left: 0px;\n background: #272b2c;\n &::after {\n top: 0;\n right: 0;\n width: 150px;\n height: 100%;\n content: '';\n background: #272b2c;\n }\n :deep(.search) {\n height: 100px;\n width: 500px;\n background: #313538;\n .top {\n padding: 30px 0 0 100px;\n i {\n color: var(--left-menu-text-color);\n }\n .el-autocomplete {\n width: 300px;\n border-bottom: 1px solid #626466;\n border-radius: 0;\n .el-input {\n .el-input__wrapper {\n background: var(--left-menu-expand-bg-color);\n box-shadow: none;\n padding-left: 30px;\n .el-input__inner {\n //font-size: $appTextSize;\n color: #fff;\n border: none;\n line-height: 40px;\n height: 40px;\n }\n }\n }\n }\n }\n }\n :deep(.main) {\n position: relative;\n height: calc(100% - 100px);\n .el-tabs {\n height: 100%;\n overflow-y: auto;\n &::-webkit-scrollbar {\n display: none;\n }\n .el-tabs__header {\n position: absolute;\n top: 0;\n right: 0;\n .el-tabs__nav-wrap {\n padding: 0;\n .el-tabs__nav-scroll {\n overflow-y: auto;\n .el-tabs__nav {\n padding-bottom: $modulePadding;\n }\n }\n .el-tabs__item {\n height: 30px;\n padding: 0 0 0 15px;\n //font-size: $textSize;\n line-height: 30px;\n color: $menuText;\n &.is-active {\n font-weight: 500;\n color: #fff;\n }\n }\n &.is-right {\n width: 151px;\n }\n &::after {\n display: none;\n }\n }\n }\n .el-tabs__content {\n background: #313538;\n margin-right: 150px;\n .el-tab-pane {\n padding-right: 20px;\n }\n .column-wrap {\n column-count: 2;\n column-gap: 0;\n .box {\n padding-bottom: 10px;\n padding-left: 30px;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n break-inside: avoid;\n h4 {\n margin-bottom: 12px;\n height: 32px;\n //font-size: $textSize;\n font-weight: 500;\n line-height: 32px;\n color: $menuText;\n border-bottom: 1px solid #626466;\n }\n ul {\n padding-left: 0;\n margin-top: 8px;\n list-style: none;\n &.leaf {\n margin-top: 18px;\n }\n li {\n line-height: 26px;\n i {\n //font-size: 14px;\n cursor: pointer;\n top: 2px;\n }\n .el-icon {\n color: $menuText;\n }\n a {\n padding-left: 3px;\n //font-size: $textSize;\n color: $menuText;\n transition: all 0.3s ease;\n &:hover {\n color: var(--menuActiveText, $menuActiveText);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n</style>\n","<!--\n * @title: Expand Menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-02 09:39:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:12\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { propTypes } from '@@/utils/gv.propTypes';\n import { ElDrawer } from 'element-plus';\n import { computed, ref } from 'vue';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import GvMenuList from './GvMenuList.vue';\n\n defineOptions({\n name: 'GvExpandMenu', // 定义组件名称\n });\n\n const props = defineProps({\n collapse: propTypes.bool.def(true),\n });\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu');\n\n const { t } = useBridgeI18n();\n\n // console.log('t', t('sideBar.menuNav'));\n const visible = ref(false);\n const sideWidth = computed(() => (props.collapse ? '54px' : '200px'));\n const expandHandle = () => {\n visible.value = !visible.value;\n };\n</script>\n<template>\n <div :class=\"prefixCls\">\n <div\n class=\"expand-menu-title\"\n :class=\"{ selected: visible ? true : false }\"\n @click.stop=\"expandHandle\">\n <i :class=\"['iconfont', 'gv-icon-wangzhandaohang']\"></i>\n <span\n v-if=\"!collapse\"\n class=\"text\"\n >{{ t('sideBar.menuNav') }}</span\n >\n </div>\n <ElDrawer\n v-model=\"visible\"\n :style=\"{ left: sideWidth, paddingLeft: sideWidth }\"\n class=\"sidebar-expand-drawer\"\n :with-header=\"false\"\n :append-to-body=\"true\"\n direction=\"ltr\"\n resizable\n :modal-class=\"!collapse ? 'sidebar-expand-menu-collapse' : 'sidebar-expand-menu-unCollapse'\"\n size=\"650\">\n <GvMenuList @close=\"visible = false\" />\n </ElDrawer>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu';\n .#{$prefixCls} {\n height: 40px;\n background-color: $menuBg;\n\n .expand-menu-title {\n width: 100%;\n padding-left: 14px;\n line-height: 48px;\n color: $menuText;\n cursor: pointer;\n\n &.selected,\n &:hover {\n color: var(--left-menu-text-active-color);\n background-color: $menuHover;\n }\n\n i {\n width: 24px;\n font-size: 20px;\n font-weight: 500;\n color: var(--left-menu-text-color);\n text-align: center;\n vertical-align: middle;\n }\n\n .text {\n display: inline-block;\n line-height: 48px;\n margin-left: 10px;\n //font-size: $textSize;\n color: var(--left-menu-text-color);\n vertical-align: middle;\n &:hover {\n color: var(--left-menu-text-active-color);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvExpandMenu from './src/GvExpandMenu.vue';\nconst GvExpandMenuPlugin = {\n install(app: App): void {\n app.component(GvExpandMenu.name ?? 'GvExpandMenu', GvExpandMenu);\n },\n};\nexport default GvExpandMenuPlugin;\n\nexport { GvExpandMenu };\n","<!--\n * @title: input component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:22:45\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { ElInput, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { BizType, InputType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input');\n\n export default defineComponent({\n name: 'GvInput',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n value: {\n type: [String, Number, undefined] as PropType<string | number | undefined>,\n default: '',\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n prefixIcon: {\n type: String,\n default: '',\n },\n suffixIcon: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n maxlength: {\n type: Number,\n default: 30,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n type: {\n type: String as PropType<InputType>,\n default: 'text',\n },\n rows: {\n type: Number,\n default: 2,\n },\n autosize: {\n type: [Boolean, Object] as PropType<boolean | Record<string, any>>,\n default: false,\n },\n bizType: {\n type: String as PropType<BizType>,\n default: 'tableedit',\n },\n },\n\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'clear', 'keydown'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref(props.value);\n\n const showWordLimit = ref(false);\n\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceholder = computed(() => props.placeholder || t('common.pleaseInput'));\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @watch\n watch(\n () => props.value,\n (newValue) => {\n inputValue.value = newValue;\n },\n );\n\n // @methods\n\n const renderPrefixIcon = (): JSX.Element | null => {\n if (!props.prefixIcon) return null;\n return <GvIcon iconName={props.prefixIcon} />;\n };\n\n const renderSuffixIcon = (): JSX.Element | null => {\n if (!props.suffixIcon) return null;\n return <GvIcon iconName={props.suffixIcon} />;\n };\n\n const getDisabled = computed(() => {\n if (typeof props.disabled === 'boolean') return props.disabled;\n if (typeof props.disabled === 'string') return props.disabled !== '';\n return false;\n });\n\n const handleInput = (val: string | number) => {\n inputValue.value = val;\n emit('update:modelValue', val);\n emit('input', val);\n };\n\n const handleBlur = (event: FocusEvent) => {\n showWordLimit.value = false;\n if (props.bizType === 'tableedit') emit('blur', event, inputValue.value, props.columnProp);\n else emit('blur', event, inputValue.value, props.vref);\n };\n\n const handleFocus = (event: FocusEvent) => {\n (event.target as HTMLInputElement).select();\n if (props.bizType === 'tableedit') emit('focus', event, inputValue.value, props.columnProp);\n else emit('focus', event, inputValue.value, props.vref);\n };\n\n const handleClear = (event: any) => {\n emit('clear', event);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n showWordLimit.value = true;\n emit('keydown', event);\n };\n\n // @render\n return () => {\n if (!props.visible) return null;\n return (\n <ElInput\n ref={props.vref}\n id={resolvedInputId.value}\n name={props.name}\n type={props.type}\n modelValue={inputValue.value}\n modelModifiers={{ number: true }}\n readonly={props.readonly}\n rows={props.rows}\n autosize={props.autosize}\n size={inputSize.value}\n showWordLimit={showWordLimit.value}\n maxlength={props.maxlength}\n placeholder={sPlaceholder.value}\n disabled={getDisabled.value}\n clearable={props.clearable}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClear={handleClear}\n onKeydown={handleKeyDown}\n class={prefixCls}\n style={{ display: props.visible ? '' : 'none' }}>\n {{\n prefix: () => renderPrefixIcon(),\n suffix: () => renderSuffixIcon(),\n }}\n </ElInput>\n );\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-input';\n .#{$prefixCls} {\n display: flex;\n margin: 0;\n align-items: center;\n\n &.is-disabled {\n :deep(.el-input__inner) {\n color: $textColor;\n }\n }\n\n :deep(.el-input__inner) {\n &:focus {\n // border-color: var(--primaryColorHover, $primaryColorHover);\n }\n height: 30px;\n // padding-left: 10px;\n line-height: 30px;\n //font-size: $textSizeSecondary;\n }\n\n &.el-input--small {\n :deep(.el-input__inner) {\n height: 26px;\n line-height: 26px;\n }\n }\n\n :deep(.el-input__suffix .el-input__suffix-inner) {\n .el-input__count {\n font-size: 10px;\n padding-left: 5px;\n .el-input__count-inner {\n padding: 0;\n }\n }\n .el-input__icon {\n padding: 0;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInput from './src/GvInput.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvInput.name ?? 'GvInput', GvInput);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvInput };\n","<!--\n * @title: input number component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 11:02:44\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useI18n } from '@/hook/web/useI18n';\n import { useStyle } from '@/hook/web/useStyle';\n import { ElInputNumber, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input-number');\n\n export default defineComponent({\n name: 'GvInputNumber',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n value: {\n type: Number,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n step: {\n type: Number,\n default: 1,\n },\n stepStrictly: {\n type: Boolean,\n default: false,\n },\n precision: {\n type: Number,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n position: {\n type: String,\n default: undefined,\n },\n },\n // @emit\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useI18n();\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n const handleInput = (val) => {\n emit('update:modelValue', val, props.vref);\n emit('input', val, props.vref);\n };\n const handleBlur = ($event: FocusEvent) => {\n if (props.bizType === 'tableedit') emit('blur', $event, inputValue.value, props.columnProp);\n else emit('blur', $event, inputValue.value, props.vref);\n };\n\n const handleFocus = ($event: FocusEvent) => {\n if ($event.target) ($event.target as HTMLInputElement).select();\n\n if (props.bizType === 'tableedit') emit('focus', $event, inputValue.value, props.columnProp);\n else emit('focus', $event, inputValue.value, props.vref);\n };\n // const handleKeyDown = ($event: KeyboardEvent) => {\n // emit('keydown', $event);\n // };\n const handleChange = (currentValue: number, oldValue: number) => {\n emit('change', currentValue, oldValue);\n };\n\n // @render\n // 注意方法的传参必须使用箭头函数方式,避免每次 render 的时候都会自动执行一次方法\n return (\n // nativeOnkeydown={(e) => this.inputKeydown(e)}\n <ElInputNumber\n class={prefixCls}\n ref={props.vref || 'gv-input-number'}\n id={resolvedInputId.value}\n name={props.name}\n v-model={inputValue.value}\n style={{ display: props.visible ? '' : 'none' }}\n size={inputSize.value}\n placeholder={sPlaceHolder.value}\n disabled={getDisabled.value}\n controls-position={props.position}\n step={props.step}\n step-strictly={props.stepStrictly}\n precision={props.precision}\n min={props.min}\n max={props.max}\n // onKeydown={handleKeyDown}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onChange={handleChange}\n // { ...this.$attrs }\n // { ...this.$listeners }\n ></ElInputNumber>\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-input-number';\n .#{$prefixCls} {\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n height: 28px;\n line-height: 28px;\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-input-number__increase):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),\n :deep(.el-input-number__decrease):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n &.is-controls-right {\n // line-height: 34px; // 需要定义line-height,否则高度串行\n :deep(.el-input-number__decrease) {\n bottom: 1px;\n\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__increase) {\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n top: 1px;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInputNumber from './src/GvInputNumber.vue';\nconst GvInputNumberPlugin = {\n install(app: App): void {\n app.component(GvInputNumber.name ?? 'GvInputNumber', GvInputNumber);\n },\n};\nexport default GvInputNumberPlugin;\n\nexport { GvInputNumber };\n","<!--\n * @title: select component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:36:14\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:53:12\n * @version: 1.0.7\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useNotify } from '@/hook/web/useNotify';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { ElOption, ElSelect, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('select');\n export default defineComponent({\n name: 'GvSelect',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n value: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n showLabel: {\n type: [String, Array],\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined, // 请选择\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n filterable: {\n type: Boolean,\n default: true,\n },\n dicType: {\n type: String,\n required: true,\n },\n filtercode: {\n // 过滤字典码\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n dicRemote: {\n type: Function,\n default: () => {},\n },\n cb: {\n type: Function,\n default: () => {},\n },\n clear: {\n type: Function,\n default: () => {},\n },\n isreload: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n editRow: {\n type: Object,\n default: () => {},\n },\n collapseTags: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n },\n // define emit\n emits: ['update:modelValue', 'focus', 'clear', 'change'],\n setup(props, { emit }) {\n const userStore = useUserStore();\n const appStore = useAppStore();\n const { alert } = useNotify();\n const { t, locale } = useI18n();\n\n // @data\n const lang = locale.value;\n let dicIcon = 'iconfont gv-icon-shujuzidian3';\n const remote = ref(false);\n const loading = ref(false);\n const loadingText = ref('loading...');\n const sPlaceholder = computed(() => props.placeholder || t('common.all'));\n const externalValue = computed(() => (props.modelValue !== undefined ? props.modelValue : props.value));\n const inputValue = ref(externalValue.value);\n const inputShowLabel = ref(props.showLabel);\n const inputFilterable = ref(props.filterable);\n // let inputFilterable = props.filterable,\n type SelectModel = string | unknown[] | Record<string, unknown> | undefined;\n const selectValue = ref<SelectModel>(undefined);\n const options = ref<DicItem[]>([]);\n const originOptions = ref<DicItem[]>([]);\n const className = ref(`${prefixCls}`);\n const globalSize = useGlobalConfig('size');\n\n // 表选字典 t# 需在 setup 阶段识别,不能等 mounted\n const dicSrc = props.dicType?.toLowerCase() ?? '';\n if (dicSrc.startsWith('e#')) dicIcon = 'iconfont gv-icon-meiju';\n else if (dicSrc.startsWith('t#')) {\n dicIcon = 'iconfont gv-icon-24gl-table';\n remote.value = true;\n className.value = 'gv-select__table';\n }\n if (props.bizType === 'tableedit') className.value += ' tableedit';\n\n const valueCache = new Map<string, { value: string; label: string; row?: Record<string, unknown> }>();\n\n // @computed\n const selectSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @method\n\n const isEmptyLabel = (label: unknown) => label == null || label === '';\n\n const getDictItemLabel = (item: DicItem): string => {\n switch (locale.value) {\n case 'en':\n return item.e ?? item.t ?? '';\n case 'l1':\n return item.l1 ?? item.t ?? '';\n case 'l2':\n return item.l2 ?? item.t ?? '';\n default:\n return item.t ?? '';\n }\n };\n\n const formatOptionLabel = (label: string) => {\n if (!label) return '';\n return remote.value && label.includes('[') ? label.split('[')[0] : label;\n };\n\n const findLabelInOptions = (code: string, opts: DicItem[]) => {\n const item = opts.find((x) => String(x.c) === String(code));\n if (!item) return '';\n return formatOptionLabel(getDictItemLabel(item));\n };\n\n const getOptionValue = (code: string, label: string, row?: Record<string, unknown>) => {\n const key = String(code);\n const text = String(label || key);\n const cached = valueCache.get(key);\n if (cached && cached.label === text) {\n if (row) cached.row = row;\n return cached;\n }\n const obj = row ? { value: key, label: text, row } : { value: key, label: text };\n valueCache.set(key, obj);\n return obj;\n };\n\n const getSelectCode = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const code = o.value ?? o.c ?? o.code;\n return code == null || code === '' ? '' : String(code).trim();\n }\n return String(v).trim();\n };\n\n const getSelectLabel = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const label = o.label ?? o.v;\n return label == null || label === '' ? '' : String(label).trim();\n }\n return String(v).trim();\n };\n\n const isEmptySelectValue = (raw: unknown) => {\n if (raw == null || raw === '') return true;\n if (Array.isArray(raw)) {\n if (raw.length === 0) return true;\n return raw.every((item) => {\n if (item == null || item === '') return true;\n return !getSelectCode(item) && isEmptyLabel(getSelectLabel(item));\n });\n }\n if (typeof raw === 'object') return !getSelectCode(raw) && isEmptyLabel(getSelectLabel(raw));\n return false;\n };\n\n const syncEmptyToParent = () => {\n if (externalValue.value === '') return;\n emit('update:modelValue', '');\n };\n\n const elSelectModel = computed<SelectModel>(() => (isEmptySelectValue(selectValue.value) ? undefined : selectValue.value));\n\n /**\n * @todo: 远程搜索、聚焦、清空后保留当前选中项\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-04 10:52:44\n * @param {*} _opts\n */\n const mergeOptionsWithSelected = (_opts: DicItem[]) => {\n let merged = _opts ?? [];\n const append = (code: string, label: string) => {\n if (!code || merged.some((x) => x.c + '' === code)) return;\n merged = [{ c: code, t: label || code, s: '' } as DicItem, ...merged];\n };\n const sv = selectValue.value;\n if (Array.isArray(sv)) sv.forEach((item) => append(getSelectCode(item), getSelectLabel(item) || getSelectCode(item)));\n else if (sv && !isEmptySelectValue(sv)) append(getSelectCode(sv), getSelectLabel(sv) || getSelectCode(sv));\n return merged;\n };\n\n const pushDefaultOption = (op: DicItem) => {\n options.value.push(op);\n if (remote.value) originOptions.value.push({ ...op });\n };\n\n /**\n * @todo: load dict list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:31:44\n */\n const getSelectOptions = async () => {\n if (!props.dicType) return null;\n else {\n let ret: DicItem[] = [];\n const src = props.dicType.toLowerCase();\n if (src.startsWith('e#')) {\n // const pinyin = await require('js-pinyin');\n // 生成枚举类型字典\n const arr = src.split('#')[1].split(':');\n arr.forEach((x) => {\n const xx: DicItem = {\n c: '',\n t: '',\n s: '',\n };\n const arr2 = x.split('=');\n xx['c'] = arr2[0];\n xx['t'] = arr2[1];\n xx['s'] = '';\n ret.push(xx);\n });\n return ret;\n } else {\n const dictCache = userStore.dictCache?.[src];\n if (props.filtercode === undefined && dictCache) ret = dictCache;\n else if (props.dicType === 'xzqh') {\n // 生成字典列表\n const dict = appStore.getDictDivision;\n if (dict) {\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n ret = dict;\n }\n } else {\n const dict = appStore.getDict[src];\n\n if (dict) {\n // fixme: 解决字典缓存不能缓存多个问题 2022-04-13\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n\n ret = dict;\n }\n }\n\n // 设置是否可搜索\n // this.setFilterable(ret);\n // 增加字典码过滤\n let opts = ret;\n if (props.filtercode) {\n const reg = new RegExp(props.filtercode, 'i');\n opts = ret.filter((x) => reg.test(x.c));\n }\n return opts;\n }\n }\n };\n /**\n * @todo: 设置字典项目超过5个可搜索-- 弃用\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-10 09:42:19\n * @param {*} dict\n */\n // setFilterable(dict) {\n // if (dict && dict.length > 5)\n // inputFilterable.value = true;\n // },\n // 回调参数:(value: string | number)\n // 字典自定义过滤方法\n const filterMethod = (value) => {\n if (value)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts.filter((item) => {\n // console.log(item);\n if (\n item.c.indexOf(value) !== -1 || // value检索\n item.t?.indexOf(value) !== -1 || // label检索\n item.s.indexOf(value.toLowerCase()) !== -1 // 简拼检索\n )\n return true;\n });\n });\n else\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n };\n /**\n * @todo: handle clear event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:27\n */\n const handleClear = () => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n else options.value = mergeOptionsWithSelected(originOptions.value);\n\n props.clear(selectValue.value, props.vref, props.dicType);\n emit('clear');\n };\n /**\n * @todo: remote dict search method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:20:03\n * @param {*} query\n */\n const initialRemoteLoaded = ref(false);\n let pendingRemoteQuery: string | null = null;\n let pendingRemotePromise: Promise<void> | null = null;\n let remoteRequestSeq = 0;\n\n const filterOriginOptions = (query: string) =>\n originOptions.value.filter((x) => {\n if (x.t) {\n const f = x.t.split(']');\n if (f[0].indexOf(query) !== -1) return true;\n }\n if (x.c && x.c.indexOf(query) !== -1) return true;\n return false;\n });\n\n const remoteDictSearch = async (query = ''): Promise<void> => {\n if (pendingRemotePromise && pendingRemoteQuery === query) return pendingRemotePromise;\n\n const requestSeq = ++remoteRequestSeq;\n pendingRemoteQuery = query;\n\n pendingRemotePromise = (async () => {\n loading.value = true;\n try {\n const sDicType = props.dicType.substring(2);\n const { datas } = await props.dicRemote(sDicType, query, props.editRow);\n if (requestSeq !== remoteRequestSeq) return;\n\n const ops: DicItem[] = [];\n try {\n JSON.parse(datas).forEach((x: any) => {\n ops.push({ c: x.c, t: x.t, s: '' } as DicItem);\n });\n } catch (e) {\n console.log(e);\n }\n\n options.value = mergeOptionsWithSelected(ops);\n originOptions.value = [...options.value];\n initialRemoteLoaded.value = true;\n } finally {\n if (requestSeq === remoteRequestSeq) {\n loading.value = false;\n loadingText.value = options.value.length === 0 ? t('common.noData') : t('common.loading');\n }\n if (pendingRemoteQuery === query) {\n pendingRemoteQuery = null;\n pendingRemotePromise = null;\n }\n }\n })();\n\n return pendingRemotePromise;\n };\n /**\n * @todo: table dict remote load method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:11:51\n */\n const remoteMethod = async (query = ''): Promise<void> => {\n const q = String(query ?? '');\n\n if (q && originOptions.value.length > 0 && props.isreload === false) {\n const filtered = filterOriginOptions(q);\n if (filtered.length > 0) {\n options.value = mergeOptionsWithSelected(filtered);\n loading.value = false;\n return;\n }\n }\n\n const needFetch = q !== '' || props.isreload || !initialRemoteLoaded.value || originOptions.value.length === 0;\n if (!needFetch) {\n options.value = mergeOptionsWithSelected(originOptions.value);\n loading.value = false;\n return;\n }\n\n await remoteDictSearch(q);\n };\n\n const ensureDefaultOption = (code: string, text: string) => {\n if (!code) return;\n const existed = options.value.find((x) => String(x.c) === String(code));\n if (existed) {\n if (text && existed.t !== text) existed.t = text;\n return;\n }\n pushDefaultOption({ c: code, t: text || code, s: '' } as DicItem);\n };\n\n const resolveDisplayLabel = async (code: string, hint?: string): Promise<string> => {\n if (hint && hint !== code) return hint;\n const localOpts = (await getSelectOptions()) ?? [];\n let label = findLabelInOptions(code, localOpts);\n if (label) return label;\n\n label = findLabelInOptions(code, options.value);\n if (label) return label;\n\n if (remote.value && code) {\n // await remoteDictSearch(code);\n // label = findLabelInOptions(code, options.value);\n // if (label) return label;\n // await remoteDictSearch('');\n // label = findLabelInOptions(code, options.value);\n }\n\n return label || code;\n };\n\n const applySelectValue = async (raw: unknown) => {\n if (isEmptySelectValue(raw)) {\n inputValue.value = undefined as typeof inputValue.value;\n selectValue.value = undefined;\n syncEmptyToParent();\n return;\n }\n inputValue.value = raw as typeof inputValue.value;\n\n if (Array.isArray(raw)) {\n const resolved: ReturnType<typeof getOptionValue>[] = [];\n for (let index = 0; index < raw.length; index++) {\n const item = raw[index];\n if (item === '') continue;\n const code = getSelectCode(item);\n let hint = getSelectLabel(item);\n if (isEmptyLabel(hint) || hint === code) {\n const showLbl = Array.isArray(props.showLabel) ? props.showLabel[index] : undefined;\n if (showLbl && showLbl !== code) hint = String(showLbl);\n }\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof item === 'object' && item !== null ? ((item as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n resolved.push(getOptionValue(code, text, row));\n ensureDefaultOption(code, text);\n }\n selectValue.value = resolved;\n return;\n }\n\n const code = getSelectCode(raw);\n let hint = '';\n if (typeof raw === 'object' && raw !== null) {\n const o = raw as Record<string, unknown>;\n hint = String(o.label ?? o.v ?? '');\n } else if (typeof props.showLabel === 'string') hint = props.showLabel;\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof raw === 'object' && raw !== null ? ((raw as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n selectValue.value = getOptionValue(code, text, row);\n ensureDefaultOption(code, text);\n };\n\n watch(\n externalValue,\n (newValue) => {\n void applySelectValue(newValue);\n },\n { deep: true, immediate: true },\n );\n\n watch(\n () => props.showLabel,\n (newVal) => {\n inputShowLabel.value = newVal;\n if (!isEmptySelectValue(inputValue.value)) void applySelectValue(externalValue.value ?? inputValue.value);\n },\n );\n\n /**\n * @todo: handle focus event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:35\n * @param {*} event\n */\n const handleFocus = (event: FocusEvent) => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n if (remote.value === false)\n if (_opts === undefined || _opts === null || _opts.length === 0) {\n alert('The dict value does not exist', 'warning');\n return false;\n }\n options.value = _opts;\n });\n emit('focus', event);\n };\n\n /**\n * @todo: handle visible change event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:25:38\n * @param {*} val\n */\n const handleVisibleChange = () => {\n // console.log(val);\n };\n\n const handleBlur = () => {\n // // add: 解决无法重新加载问题 2022-04-10\n // if (this.remote === false)\n // this.getSelectOptions().then((_opts) => {\n // this.options = _opts;\n // });\n // else\n // this.options = this.originOptions;\n };\n\n /**\n * @todo: render select option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:37:58\n * @param {*} x\n */\n const renderSelectOption = (x: DicItem) => {\n let t = x.t;\n switch (lang) {\n case 'zh-CN':\n t = x.t;\n break;\n case 'en':\n t = x.e;\n break;\n case 'l1':\n t = x.l1;\n break;\n case 'l2':\n t = x.l2;\n break;\n default:\n t = x.t;\n break;\n }\n if (!t) t = x.t;\n return (\n <ElOption\n key={x.c + ''}\n label={t}\n value={getOptionValue(x.c + '', t ?? '')}>\n <span class=\"gv-select__option--label\">{t}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n </ElOption>\n );\n };\n\n /**\n * @todo: render table option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:44:34\n * @param {*} x\n */\n const renderTableOption = (x: DicItem) => {\n const t = x.t;\n let val = t;\n const columnTexts: string[] = [];\n const row: Record<string, string> = {};\n let multiColumn = false;\n if (t) {\n if (t.indexOf('[') !== -1) {\n // 多列显示\n multiColumn = true;\n const v1 = t.split('[');\n val = v1[0];\n let mm = v1[1];\n mm = mm.split(']')[0];\n const m2 = mm.split(',');\n for (let i = 0; i < m2.length; i++) {\n const m3 = m2[i];\n const m4 = m3.split(':');\n row[m4[0]] = m4[1];\n columnTexts.push(m4[1] === 'null' ? ' -- ' : m4[1]);\n }\n }\n if (t.indexOf('{') !== -1) {\n // 隐藏列\n const vv1 = t.split('{');\n if (multiColumn === false) val = vv1[0];\n let mmm = vv1[1];\n mmm = mmm.split('}')[0];\n const mm2 = mmm.split(',');\n for (let i = 0; i < mm2.length; i++) {\n const mm3 = mm2[i];\n const mm4 = mm3.split(':');\n row[mm4[0]] = mm4[1];\n }\n }\n }\n let key = x.c + '';\n if (props.multiple === true) key = x.val === undefined ? x.c + '' : String(x.val);\n return (\n <ElOption\n key={key}\n label={val}\n value={getOptionValue(x.c + '', val ?? '', row)}>\n <span class=\"gv-select__option--label\">{val}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n {columnTexts.map((text, index) => (\n <span\n key={index}\n class=\"gv-select__option--column\">\n {text}\n </span>\n ))}\n </ElOption>\n );\n };\n\n /**\n * @todo: selected call back\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:27:07\n * @param {*} val\n */\n const handleChange = async (val: any) => {\n if (isEmptySelectValue(val)) return;\n let labels: string = '';\n const labelArr: string[] = [];\n if (props.multiple === true)\n options.value.forEach((x) => {\n if (Array.isArray(val) && val.some((ele) => ele === x.c)) labelArr.push(x.t ?? '');\n });\n else if (typeof val === 'object') labels = val.label ?? '';\n else {\n const opArr = options.value.filter((x) => {\n const v = val + '';\n return x.c + '' === v;\n });\n labels = opArr[0]?.t ?? '';\n if (labels) labels = labels.split('[')[0];\n }\n if (props.bizType === 'tableedit')\n if (props.multiple === true) {\n emit('change', val, labelArr, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labelArr, props.editRow);\n } else {\n emit('change', val, labels, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labels, props.editRow);\n }\n else if (props.multiple === true) {\n emit('change', val, labelArr);\n await props.cb(val, props.vref, props.dicType);\n } else {\n emit('change', val, labels);\n await props.cb(val, props.vref, props.dicType);\n }\n };\n /**\n * @todo: handle update modelValue\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:29:17\n * @param {*} value\n */\n const handleUpdate = (value: any): void => {\n if (isEmptySelectValue(value)) {\n inputValue.value = undefined as typeof inputValue.value;\n selectValue.value = undefined;\n emit('update:modelValue', '');\n return;\n }\n inputValue.value = value;\n selectValue.value = value;\n emit('update:modelValue', value);\n };\n\n if (props.dicType === undefined || props.dicType === null) alert(`[ ${props.label} ] - The dicType needs to be set`, 'warning');\n\n // @render\n return () => {\n const render =\n remote.value === false ? (\n <ElSelect\n ref=\"gv-select\"\n id={resolvedInputId.value}\n name={props.name}\n modelValue={elSelectModel.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder.value}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n filterable={inputFilterable.value}\n filter-method={filterMethod}\n default-first-option={true}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onVisible-change={handleVisibleChange}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderSelectOption(x)),\n }}\n </ElSelect>\n ) : (\n <ElSelect\n ref=\"gv-select\"\n id={resolvedInputId.value}\n name={props.name}\n modelValue={elSelectModel.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder.value}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n default-first-option={true}\n filterable={inputFilterable.value}\n remote={true}\n remote-method={remoteMethod}\n debounce={300}\n loading={loading.value}\n loading-text={loadingText.value}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderTableOption(x)),\n }}\n </ElSelect>\n );\n return render;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-select';\n .#{$prefixCls} {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n //font-size: $appTextSize;\n }\n }\n\n .el-select__placeholder {\n //font-size: $appTextSize;\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n .el-select__input {\n padding-right: 5px !important;\n //font-size: $appTextSize;\n }\n\n .el-select__suffix {\n width: 0;\n }\n }\n }\n }\n\n .#{$gvNamespace}-select__table {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n //font-size: $appTextSize;\n }\n }\n .el-select__selection {\n //font-size: $appTextSize;\n }\n\n &.is-focus .el-select__input {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSelect from './src/GvSelect.vue';\n// Define the install method on the GvButton component\nconst GvSelectPlugin = {\n install(app: App): void {\n app.component(GvSelect.name ?? 'GvSelect', GvSelect);\n },\n};\nexport default GvSelectPlugin;\n\nexport { GvSelect };\n","<!--\n * @title: switch component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 13:26:26\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 09:55:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElSwitch } from 'element-plus';\n import { defineComponent, ref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('switch');\n export default defineComponent({\n name: 'GvSwitch',\n props: {\n value: {\n type: [Boolean, Number, String] as PropType<boolean | number | string>,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n columnKey: {\n type: String,\n required: false,\n default: undefined,\n },\n target: {\n type: [Number, String] as PropType<number | string>,\n require: false,\n default: '100201',\n },\n },\n\n // emit\n emits: ['change'],\n setup(props, { emit }) {\n // @data\n const val = ref(props.value);\n const switchType = ref(true);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n val.value = newVal;\n switchType.value = val.value === props.target;\n },\n );\n watch(\n () => switchType.value,\n (newVal) => {\n val.value === newVal;\n },\n );\n\n // @methods\n const handleChange = (newStatus) => {\n emit('change', newStatus, val.value);\n };\n\n // @created\n switchType.value = val.value === props.target;\n\n // @render\n return () => (\n <ElSwitch\n ref=\"gv-switch\"\n v-model={switchType.value}\n key={props.columnKey}\n disabled={props.disabled}\n // active-color='#13ce66'\n // inactive-color='#ff4949'\n onChange={handleChange}\n class={prefixCls}\n />\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-switch';\n .#{$prefixCls} {\n &.is-checked {\n :deep(.el-switch__core) {\n background-color: #13ce66;\n border-color: #13ce66;\n }\n }\n\n :deep(.el-switch__core) {\n background-color: #b3aaaa;\n border-color: #b3aaaa;\n //background-color:#ff4949;\n //border-color:#ff4949;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSwitch from './src/GvSwitch.vue';\n// Define the install method on the GvButton component\nconst GvSwitchPlugin = {\n install(app: App): void {\n app.component(GvSwitch.name ?? 'GvSwitch', GvSwitch);\n },\n};\nexport default GvSwitchPlugin;\n\nexport { GvSwitch };\n","<!--\n * @title: time picker\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:18:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 14:19:59\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElTimePicker, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { DefineComponent, PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TTimePickerEmits, TTimePickerSize, TTimePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('timepicker');\n const TimePicker = ElTimePicker as typeof ElTimePicker & DefineComponent<TTimePickerEmits>;\n\n export default defineComponent({\n name: 'GvTimePicker',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, Array, String] as PropType<TTimePickerType>,\n default: undefined,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<TTimePickerSize>,\n default: 'default',\n },\n isRange: {\n type: Boolean,\n default: false,\n },\n disabledHours: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledMinutes: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledSeconds: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n rangeSeparator: {\n type: String,\n default: '-',\n },\n format: {\n type: String,\n default: 'HH:mm',\n },\n valueFormat: {\n type: String,\n default: 'HH:mm',\n },\n placeholder: {\n type: String,\n default: '00:00',\n },\n startPlaceholder: {\n type: String,\n default: '',\n },\n endPlaceholder: {\n type: String,\n default: '',\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n },\n\n emits: ['update:modelValue', 'change', 'blur', 'focus'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref<TTimePickerType>(props.modelValue);\n const timepickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n /**\n *@todo: 更新v-model值\n *@author: bugcao\n *@date: 2026-05-07 15:45:52\n *@version: v0.0.1\n */\n const handleUpdate = (value: TTimePickerType) => {\n inputValue.value = value;\n emit('update:modelValue', value);\n };\n /**\n *@todo: 合并禁用小时\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledHours = () => props.disabledHours;\n /**\n *@todo: 合并禁用分钟\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledMinutes = () => props.disabledMinutes;\n /**\n *@todo: 合并禁用秒\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledSeconds = () => props.disabledSeconds;\n /**\n *@todo: 更新change事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:09\n *@version: v0.0.1\n */\n const handleChange = (value: TTimePickerType) => {\n emit('change', value);\n };\n /**\n *@todo: 更新blur事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleBlur = (e: FocusEvent) => {\n emit('blur', e);\n };\n /**\n *@todo: 更新focus事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleFocus = (e: FocusEvent) => {\n emit('focus', e);\n };\n\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @render\n return () => (\n <TimePicker\n ref={props.vref || 'gv-timepicker'}\n id={resolvedInputId.value}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n readonly={props.readonly}\n disabled={props.disabled}\n editable={props.editable}\n clearable={props.clearable}\n is-range={props.isRange}\n range-separator={props.rangeSeparator}\n size={timepickerSize.value}\n placeholder={props.placeholder || t('common.selectTime')}\n start-placeholder={props.startPlaceholder || t('common.startTime')}\n end-placeholder={props.endPlaceholder || t('common.endTime')}\n format={props.format}\n value-format={props.valueFormat}\n class={prefixCls}\n disabled-hours={mergedDisabledHours}\n disabled-minutes={mergedDisabledMinutes}\n disabled-seconds={mergedDisabledSeconds}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-timepicker';\n .#{$prefixCls} {\n width: 100%;\n vertical-align: middle;\n :deep(.el-icon-time) {\n margin-left: 1px;\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__wrapper) {\n &:is(.is-focus) {\n box-shadow: 0 0 0 1px var(--primaryColorHover, $primaryColorHover) inset;\n }\n }\n :deep(.el-input__inner) {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range__close-icon) {\n width: 20px;\n }\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTimePicker from './src/GvTimePicker.vue';\n\nconst GvTimePickerPlugin = {\n install(app: App): void {\n app.component(GvTimePicker.name ?? 'GvTimePicker', GvTimePicker);\n },\n};\nexport default GvTimePickerPlugin;\n\nexport { GvTimePicker };\n","/*\n * @title: info message component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:10:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:01:59\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nconst infoMsg = {\n carNo: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '车牌号格式错误';\n else info = 'car number format error.';\n return info;\n },\n double: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入浮点数.';\n else info = 'please enter Double.';\n return info;\n },\n decimal: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '小数点位数不能超过: ' + len + ' 位';\n else info = 'Number of decimal places can not be more than:' + len + '.';\n return info;\n },\n idCard: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '身份证格式不正确';\n else info = 'id card format is not correct.';\n return info;\n },\n maxLen: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能超过 ' + Math.floor(len / 2) + '个汉字或 ' + len + ' 个字符';\n else info = 'Can not exceed ' + len + ' character.';\n return info;\n },\n money: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '非0开头的数字 小数最多两位.';\n else info = \"Only input Numbers, 0 can't start, the decimal two at the most.\";\n return info;\n },\n moneyMax: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '整数位最多只能是: ' + len + ' 位';\n else info = 'integer digits can only be at most: ' + len;\n return info;\n },\n letter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入字母以外的字符';\n else info = \"Can't input letters outside of the characters.\";\n return info;\n },\n number: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入正整数.';\n else info = 'Only enter a positive integer.';\n return info;\n },\n number0: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入不能以0开头的正整数.';\n else info = 'Only enter a non-zero positive integer, and cannot begin with zero.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n numberLetter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母以外的字符.';\n else info = 'Can not input Numbers, letters characters.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n name: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母、-、_和中文以外的字符.';\n else info = 'Can not enter Numbers, letters, -, _ and Chinese characters.';\n return info;\n },\n phone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '电话号码格式不正确.';\n else info = 'Phone format is not correct.';\n return info;\n },\n email: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '邮件格式不正确.';\n else info = 'E-mail format is not correct.';\n return info;\n },\n telephone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的固话(格式:区号+号码,如010-1234567)';\n else info = 'Telephone format is not correct.';\n return info;\n },\n ip: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的IP地址';\n else info = 'IpAddress format is not correct.';\n return info;\n },\n url: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的url地址';\n else info = 'Url format is not correct.';\n return info;\n },\n phoneTel: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的电话号码或者固话号码';\n else info = 'phone & tel format is not correct.';\n return info;\n },\n vin: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入后8位或17位(字母大写)';\n else info = 'must be 8 or 17 letters and Numbers.';\n return info;\n },\n};\nexport default infoMsg;\n","/*\n * @title: validate rules component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:09:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 20:32:12\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n/** ------------------- 验证规则 ------------------------\n * isAny: 默认规则,无校验\n * isAdmin: 验证是否是admin用户\n * isUrl: 验证url格式\n * isLowercase: 验证是否都是小写\n * isUppercase: 验证是否都是大写\n * isLetter: 验证是否都是字母( 不包括标点符号)\n * isEmail: 验证是否是email\n * isPhone: 验证电话号码\n * isIp: 验证是否是ip地址\n * isPhoneTel: 验证是否是手机号或者固定电话号\n * isTelephone: 验证是否是固定电话\n * isIdcard: 验证身份证号\n * isMoney:验证金额格式\n * isBigMoney: 验证金额格式(千位符格式)\n * isNumber: 验证是否是整数数字\n * isNumberLetter: 验证是否是数字和字母\n * isDouble: 验证浮点数格式\n * isName: 验证是否是名称格式\n * isVin: 验证vin码格式\n * isCarno: 验证车牌号(含新能源)\n ----------------------------------------------------\n*/\n\nimport infoMsg from './gv.infomsg';\n\n/**\n * @todo: 计算输入字符串的长度,汉字记为2 英文字母记为1\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 14:56:22\n * @param {*} val 对于多选字典,val是数组类型的字典码\n */\nconst calLength = function (val) {\n if (val === null || val.length === 0) return 0;\n let i, sum;\n sum = 0;\n // fixme: val有可能是数组,需要转化为字符串 2022-04-10\n let v = val;\n if (Array.isArray(val)) v = val.join(',');\n for (i = 0; i < v.length; i++)\n if (v.charCodeAt(i) >= 32 && v.charCodeAt(i) <= 126) sum = sum + 1;\n else sum = sum + 2;\n return sum;\n};\n\nconst vcity = {\n 11: '北京',\n 12: '天津',\n 13: '河北',\n 14: '山西',\n 15: '内蒙古',\n 21: '辽宁',\n 22: '吉林',\n 23: '黑龙江',\n 31: '上海',\n 32: '江苏',\n 33: '浙江',\n 34: '安徽',\n 35: '福建',\n 36: '江西',\n 37: '山东',\n 41: '河南',\n 42: '湖北',\n 43: '湖南',\n 44: '广东',\n 45: '广西',\n 46: '海南',\n 50: '重庆',\n 51: '四川',\n 52: '贵州',\n 53: '云南',\n 54: '西藏',\n 61: '陕西',\n 62: '甘肃',\n 63: '青海',\n 64: '宁夏',\n 65: '新疆',\n 71: '台湾',\n 81: '香港',\n 82: '澳门',\n 91: '国外',\n};\n// 校验浮点数位数\nconst checkDecimal = function (val, decimalLen) {\n let v = val + '';\n if (v && v.indexOf('.') > 0) {\n v = v.substr(v.indexOf('.') + 1, v.length);\n if (v.length <= decimalLen) return true;\n else return false;\n } else return true;\n};\n// 取身份证前两位,校验省份\nconst checkProvince = function (card) {\n const province = card.substr(0, 2);\n if (vcity[province] === undefined) return false;\n\n return true;\n};\n\n// 校验日期\nconst verifyBirthday = function (year: number, month: number, day: number, birthday: Date) {\n const now = new Date();\n const now_year = now.getFullYear();\n // 年月日是否合理\n if (birthday.getFullYear() === +year && birthday.getMonth() + 1 === +month && birthday.getDate() === +day) {\n // 判断年份的范围(3岁到100岁之间)\n const time = now_year - Number(year);\n if (time >= 3 && time <= 100) return true;\n return false;\n }\n return false;\n};\n\n// 检查生日是否正确\nconst checkBirthday = function (card) {\n const len = card.length;\n // 身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字\n if (len === 15) {\n const re_fifteen = /^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$/;\n const arr_data = card.match(re_fifteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date('19' + year + '/' + month + '/' + day);\n return verifyBirthday(Number('19' + year), month, day, birthday);\n }\n // 身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X\n if (len === 18) {\n const re_eighteen = /^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$/;\n const arr_data = card.match(re_eighteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date(year + '/' + month + '/' + day);\n return verifyBirthday(year, month, day, birthday);\n }\n return false;\n};\n// 15位转18位身份证号\nconst changeFivteenToEighteen = function (card) {\n if (card.length === 15) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let i;\n card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);\n for (i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n card += arrCh[cardTemp % 11];\n return card;\n }\n return card;\n};\n\n// 校验位的检测\nconst checkParity = function (card) {\n // 15位转18位\n card = changeFivteenToEighteen(card);\n const len = card.length;\n if (len === 18) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let valnum = '';\n for (let i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n valnum = arrCh[cardTemp % 11];\n if (valnum === card.substr(17, 1)) return true;\n\n return false;\n }\n return false;\n};\n\nconst htValidate = {\n isLength: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language, max = 30 } = rule;\n const len = calLength(value);\n if (len > max) callback(new Error(infoMsg.maxLen(language, max)));\n else callback();\n }\n },\n isDouble: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^(-)?\\d+(\\.\\d+)?$/;\n const { language, decimal = 2 } = rule;\n if (!reg.test(value)) callback(new Error(infoMsg.double(language)));\n else if (checkDecimal(value, decimal)) callback();\n else callback(new Error(infoMsg.decimal(language, decimal)));\n }\n },\n isIdcard: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // 校验长度\n const reg = /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/;\n if (!reg.test(value)) callback(new Error(infoMsg.idCard(language)));\n else if (checkProvince(value) === false)\n // 检查省份\n callback(new Error(infoMsg.idCard(language)));\n else if (checkBirthday(value) === false)\n // 校验生日\n callback(new Error(infoMsg.idCard(language)));\n else if (checkParity(value) === false)\n // 检验位的检测\n callback(new Error(infoMsg.idCard(language)));\n else callback();\n }\n },\n\n isCarno: (rule, value, callback) => {\n const { language } = rule;\n if (value === '' || value === undefined || value == null) return callback();\n else if (value.length === 7) {\n const pattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;\n if (!pattern.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n } else {\n const pattern2 = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DABCEFGHJK][A-HJ-NP-Z0-9][0-9]{4}$))/;\n if (!pattern2.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n }\n },\n\n isMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return callback();\n else {\n const { language, max } = rule;\n // eslint-disable-next-line no-useless-escape\n const pattern = /^[\\-\\+]?(([1-9]\\d*)|0)(\\.\\d{1,2})?$/;\n const val = value + '';\n // var rv = val.replace(/[,]/g, '');\n if (!pattern.exec(val)) callback(new Error(infoMsg.money(language)));\n else if (val.indexOf('.') > 0)\n if (val.split('.')[0].length > max - 3)\n // 校验整数位格式只能是maxLength -3\n callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n else if (value.length > max - 3) callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n }\n },\n\n isBigMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^[\\-\\+]?([0-9]\\d*|0|[1-9]\\d{0,2}(,\\d{3})*)(\\.\\d+)?$/;\n if (!reg.test(value)) callback(new Error(infoMsg.money(language)));\n else callback();\n }\n },\n\n isLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[A-Za-z]+$/;\n if (!reg.test(value)) callback(new Error(infoMsg.letter(language)));\n else callback();\n }\n },\n\n isNumber: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[0-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number(language)));\n else callback();\n }\n },\n\n isNumber0: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[1-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number0(language)));\n else callback();\n }\n },\n\n isNumberLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^([a-z]|[A-Z]|[ ]|[(]|[)]|[-]|[_]|[*]|[.]|[,]|[,]|[0-9]){0,200}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.numberLetter(language)));\n else callback();\n }\n },\n\n isName: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[a-zA-Z0-9-_. \\u4E00-\\u9FA5]{0,60}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.name(language)));\n else callback();\n }\n },\n\n isPhone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}$/;\n if (!reg.test(value)) {\n const { language = 'zh-CN' } = rule;\n callback(new Error(infoMsg.phone(language)));\n } else callback();\n }\n },\n\n isEmail: (rule, value, callback) => {\n // eslint-disable-next-line no-useless-escape\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.email(language)));\n else callback();\n }\n },\n\n isTelephone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /0\\d{2}-\\d{7,8}/;\n if (!reg.test(value)) callback(new Error(infoMsg.telephone(language)));\n else callback();\n }\n },\n\n isPhoneTel: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^((0\\d{2,3}-\\d{7,8})|(1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.phoneTel(language)));\n else callback();\n }\n },\n\n isIp: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n if (!reg.test(value)) callback(new Error(infoMsg.ip(language)));\n else callback();\n }\n },\n\n isUrl: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg =\n /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.?(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.url(language)));\n else callback();\n }\n },\n\n isVin: (rule, value, callback) => {\n const { language } = rule;\n const reg = /^[A-Z0-9]+$/;\n if (value === '' || value === undefined || value == null) callback();\n else if (value.length !== 8 && value.length !== 17) callback(new Error(infoMsg.vin(language)));\n else if (!reg.test(value)) callback(new Error(infoMsg.vin(language)));\n else callback();\n },\n};\n\nexport default htValidate;\n","<!--\n * @title: form component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:01:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:32\n * @version: 1.1.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvCascader } from '@@/GvCascader';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvDivider } from '@@/GvDivider';\n import { GvInput } from '@@/GvInput';\n import { GvInputNumber } from '@@/GvInputNumber';\n import { GvSelect } from '@@/GvSelect';\n import { GvSwitch } from '@@/GvSwitch';\n import { GvTimePicker } from '@@/GvTimePicker';\n import { addClass, dateFormatConfig, hasScrollbar, removeClass, sleep, toHump } from '@@/utils';\n import gvValidate from '@@/utils/gv.validate';\n import { ElCol, ElForm, ElFormItem, ElInput, ElRadio, ElRadioButton, ElRadioGroup, ElRow, ElTooltip, useGlobalConfig, type ComponentSize, type FormInstance, type FormItemRule } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, provide, ref, Transition, unref, watch, type PropType, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('form');\n\n export default defineComponent({\n name: 'GvForm',\n props: {\n refForm: {\n type: String,\n required: true,\n },\n divider: {\n type: String,\n required: false,\n default: undefined,\n },\n isDivider: {\n type: Boolean,\n required: false,\n default: true,\n },\n formList: {\n type: Array as PropType<FormItem[]>,\n required: true,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n labelWidth: {\n type: [Number, String] as PropType<number | string>,\n default: 100,\n },\n formStyle: {\n // 响应式布局 使用该参数定义width\n type: [Object],\n required: false,\n default: () => {},\n },\n scroller: {\n // 是否带有滚动条\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots, expose }) {\n const searchFieldsCollapsed = ref(true); // 查询 form 默认折叠超出行数字段\n // @provide\n provide('refForm', props.refForm);\n provide('formList', props.formList);\n provide('searchFieldsCollapsed', searchFieldsCollapsed);\n\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { t } = useBridgeI18n();\n\n const originFormList = ref([]);\n const instance = getCurrentInstance ? getCurrentInstance() : ({ parent: null } as any);\n\n const formRefs = ref<Record<string, FormInstance | null>>({}); // 表单实例引用,默认空对象\n const formElRef = ref<FormInstance | null>(null); // ElForm 元素引用\n\n const setFormRef = (el: FormInstance | null) => {\n formElRef.value = el;\n if (el && props.refForm) formRefs.value[props.refForm] = el;\n };\n const globalSize = useGlobalConfig('size');\n const rootNodeStyle = ref({}); // form组件根节点div样式\n const isShow = ref(true); // form表单show状态,默认显示\n const rules = ref({}); // 表单校验规则,默认空对象\n const isEditContainer = ref(false); // 是否是editContainer标签内,默认false\n const sMaxHeight = ref(0); // 表单最大高度,默认0\n const isScrollbar = ref(false); // 是否dialog中有滚动条\n const isAnchor = ref(false); // 是否锚点中列表\n const model = ref({}); // 表单数据,默认空对象\n const isDialog = ref(false); // 是否是dialog中form表单,默认false\n const colSpanNums = ref(0); // 根据form宽度或屏幕宽度计算显示列数,默认0\n const formType = ref('s'); // form类型:查询form:s、表单form:e\n const styles = ref({}); // form表单style样式,默认空对象\n\n // @computed\n const formSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const labelPosition = computed(() => appStore.labelPosition); // 表单label位置\n const searchDivider = computed(() => appStore.searchDivider); // search divider show,default: true\n const dict = computed<DicItems>(() => appStore.getDict); // 字典数据\n const dictCache = computed(() => userStore.dictCache); // 字典缓存\n\n // @exposed\n expose({\n originFormList,\n setFormRef,\n });\n // method\n const getLanguage = (lang: string, x: any) => {\n let v = '';\n switch (lang) {\n case 'zh-CN':\n v = x.t;\n break;\n case 'en':\n v = x.e;\n break;\n case 'l1':\n v = x.l1;\n break;\n case 'l2':\n v = x.l2;\n break;\n default:\n v = x.t;\n break;\n }\n if (!v) v = x.t;\n return v;\n };\n /**\n * @todo: set divider show status\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:12:34\n * @param {*} show\n */\n const setDividerShow = (show: boolean) => {\n isShow.value = show;\n };\n\n const getEditBar = computed(() => {\n if (slots.editbar?.())\n return (\n <ElRow\n ref-form={props.refForm}\n class=\"gv-form-editbar\">\n {slots.editbar?.()}\n </ElRow>\n );\n else return null;\n });\n\n const getDivider = computed(() => {\n let dividerRender: VNode | null = null;\n if (searchDivider.value !== false) {\n let dividerTitle: string;\n if (props.divider) dividerTitle = props.divider;\n else dividerTitle = t('common.dividerTitle');\n if (props.isDivider)\n dividerRender = (\n <GvDivider\n label={dividerTitle}\n target={props.refForm}\n visible={isShow.value}\n onSetDividerShow={setDividerShow}\n />\n );\n }\n\n return dividerRender;\n });\n\n /**\n * @todo: get dic item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:13:06\n * @param {*} src\n */\n const getDictItems = (src: string): DicItem[] => {\n let ret = [] as DicItem[];\n const dictCacheTmp: DicItem[] | undefined = dictCache.value?.[src];\n if (dictCacheTmp) ret = dictCacheTmp;\n else {\n // 生成字典列表\n const dictTmp: DicItem[] | undefined = dict.value[src];\n if (dictTmp) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dictTmp;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n\n ret = dictTmp;\n }\n }\n return ret;\n };\n /**\n * @todo: generate form item rules\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 20:31:59\n * @param {*} _item\n */\n const getItemRules = (_item: FormItem): FormItemRule[] => {\n const rules: FormItemRule[] = [];\n const format: FormItemFormat | undefined = _item.format;\n // 富文本不校验\n if (_item.type === 'richtext') return rules;\n if (!format) return rules;\n // ========== 必填校验 ==========\n const requiredFlag = Number(format[0]);\n if (requiredFlag === 1 && !_item.hidden)\n rules.push({\n required: true,\n message: `${t('common.pleaseInput')} ${_item.label ?? ''}`,\n trigger: 'blur',\n });\n // ========== 自定义校验 ==========\n let validateKey = 'isAny';\n if (format[1]) validateKey = toHump(String(format[1]));\n const maxLen = Number(format[2] ?? 30);\n const decimal = format.length >= 4 ? Number(format[3] ?? 0) : 0;\n const validator = gvValidate[validateKey as keyof typeof gvValidate];\n if (validator && validateKey !== 'isAny')\n rules.push({\n validator: validator,\n trigger: ['change', 'blur'],\n // Element Plus 透传参数(自定义字段)\n language: userStore.language,\n max: maxLen,\n decimal,\n } as FormItemRule);\n // ========== 长度校验 ==========\n const excluded = ['isDate', 'isDateTime', 'isTime', 'isDic'];\n if (format[2] && !excluded.includes(validateKey))\n rules.push({\n language: userStore.language,\n max: maxLen,\n validator: gvValidate['isLength'],\n trigger: ['change', 'blur'],\n } as FormItemRule);\n return rules;\n };\n const handleRadioInput = (event: any, field: string, val, formVal, disabled) => {\n if (disabled) return;\n if (val === formVal) {\n event.preventDefault();\n model.value[field] = '';\n }\n };\n const handleDateRange2Focus = (vm: any) => {\n sleep(100).then(() => {\n addClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n });\n };\n const handleDateRange2Blur = (vm: any) => {\n removeClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n };\n\n /**\n * @todo: 日期范围选择,单独选择开始日期、结束日期选择回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 19:49:03\n * @param {*} type\n * @param {*} val\n * @param {*} field\n */\n const handleDateRange2Change = (type: string, val: string | Date, field: string): void => {\n // 校验开始日期和结束日期大小\n if (type === 's')\n if (val && model.value[field + '-end']) {\n const endTime = new Date(model.value[field + '-end'] as string).getTime();\n const startTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-end'] = '';\n model.value[1] = 'null';\n }\n }\n\n if (type === 'e')\n if (val && model.value[field + '-start']) {\n const startTime = new Date(model.value[field + '-start'] as string).getTime();\n const endTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-start'] = '';\n // console.log(this.model);\n model.value[1] = 'null';\n }\n }\n\n if (!field) return;\n const datePicker = model.value[field];\n let dateArr = new Array(2);\n if (Array.isArray(datePicker)) {\n if (type === 's') datePicker[0] = val;\n else datePicker[1] = val;\n if (!datePicker[0]) datePicker[0] = 'null';\n if (!datePicker[1]) datePicker[1] = 'null';\n model.value[field] = datePicker.join(',');\n } else {\n if (datePicker && typeof datePicker === 'string') dateArr = datePicker.split(',');\n dateArr[0] = model.value[field + '-start'];\n dateArr[1] = model.value[field + '-end'];\n if (!dateArr[0]) dateArr[0] = 'null';\n if (!dateArr[1]) dateArr[1] = 'null';\n model.value[field] = dateArr.join(',');\n }\n };\n /**\n * @todo: switch框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-12-21 16:47:22\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleSwitchDictChange = async (val, field, dicType, cb) => {\n switch (dicType) {\n case 'yxzt':\n if (val === true) model.value[field] = '100201';\n else model.value[field] = '100202';\n break;\n case 'sf':\n if (val === true) model.value[field] = '100101';\n else model.value[field] = '100102';\n break;\n }\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: radio框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-22 15:50:15\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleRadioDictChange = async (val, field, dicType: string | undefined, cb: Fn | undefined) => {\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: 查询 form 列默认折叠 class(渲染时绑定,避免重渲染丢失)\n */\n const getSearchColClass = (index: number) => {\n if (formType.value !== 's' || !searchFieldsCollapsed.value) return undefined;\n const slot = slots.default?.()?.[0];\n const slotProps = slot?.props as Recordable | undefined;\n if (slotProps?.expand === false) return undefined;\n const showDefaultRow = appStore.searchFormRows === 1 ? 4 : 8;\n if (index >= showDefaultRow - 1) return 'gv-form-col--hidden';\n return undefined;\n };\n\n /**\n * @todo: render form item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:54:23\n * @param {*} _item\n * @param {*} _index\n */\n const renderFormItem = (_item: FormItem, _index: number): VNode => {\n const {\n type = 'text',\n label,\n field,\n hidden = false,\n disabled,\n format = [],\n placeholder,\n readonly = false,\n dateType = 'date',\n dicType,\n filtercode,\n colspan = 1,\n disabledDateFunc,\n disabledDate,\n editable = true,\n multiple = false,\n showLabel,\n size = formSize.value,\n visible = true,\n // offset,\n createRow = false, // 是否创建新row,\n dicRemote,\n cb, // 回调方法\n clear, // 清空回调\n rows, // textarea\n autosize, // textarea\n min, // input-number\n max, // input-number\n step, // input-number\n precision, // input-number\n blur = () => {},\n suffixIcon, // 后缀icon\n prefixIcon, // 前缀icon\n focus = () => {},\n change = () => {},\n defaultTime, // 时间的默认能够选择的时间\n isreload = true, // 表选字典是否重新加载\n options = [],\n lazy = false, // cascader是否懒加载\n lazyLoad = () => {}, // cascader懒加载方法\n render, // 自定义form样式\n } = _item;\n let renders;\n const isHidden = hidden === true;\n const maxLen = format[2] || 30;\n let cType = type;\n // const dateFormatConfig = dateFormatConfig;\n const validateRule = toHump(String(format[1] || ''));\n let sDateType = dateType;\n let isRange = false;\n let dateFormat = dateFormatConfig.date.valueFormat; // 日期显示格式\n let valueFormat = dateFormatConfig.date.valueFormat; // 日期绑定值格式\n if (sDateType !== 'daterange' && sDateType !== 'datetimerange' && sDateType !== 'daterange2' && sDateType !== 'datetimerange2') {\n if (validateRule === 'isDate') cType = 'date';\n if (validateRule === 'isDateTime') {\n cType = 'datetime';\n sDateType = 'datetime';\n }\n if (validateRule === 'isTime') cType = 'time';\n }\n\n if (sDateType === 'timerange') isRange = true;\n\n let ph = placeholder;\n let startPh = t('common.startDate');\n let endPh = t('common.endDate');\n // todo: 响应式布局计算\n // const cols = { span: colspan, offset: (_index) * 6 };\n let cols = colspan > 4 ? 4 : colspan; // fixme: 最大值不能超过4 2022-04-07\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') cols = 2;\n // update: 对于多选字典,默认占用列数为2列 2023-02-18\n if (multiple === true && colspan === undefined) cols = 2;\n let rangeSeparator;\n if (sDateType === 'timerange' || sDateType === 'daterange2' || sDateType === 'datetimerange2') rangeSeparator = t('common.until');\n const colSpanXs = 24;\n let colSpanSm = 12;\n let colSpanMd = 8;\n\n let colSpanLg = 6;\n if (isDialog.value === true) colSpanLg = 8;\n let colSpanXl = 4;\n if (isDialog.value === true) colSpanXl = 6;\n if (colSpanNums.value !== 0) {\n if (colSpanNums.value === 12) cols = colspan > 2 ? 2 : colspan;\n if (colSpanNums.value === 8) cols = colspan > 3 ? 3 : colspan;\n if (colSpanNums.value === 6 || colSpanNums.value === 4) cols = colspan > 4 ? 4 : colspan;\n colSpanSm = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanMd = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanLg = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanXl = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n } else {\n colSpanSm = cols * colSpanSm > 24 ? 24 : cols * colSpanSm;\n colSpanMd = cols * colSpanMd > 24 ? 24 : cols * colSpanMd;\n colSpanLg = cols * colSpanLg > 24 ? 24 : cols * colSpanLg;\n colSpanXl = cols * colSpanXl > 24 ? 24 : cols * colSpanXl;\n }\n let decimal = 2;\n let v = '';\n if (!ph)\n switch (validateRule) {\n case 'isMoney':\n ph = '0.00';\n break;\n case 'isBigMoney':\n ph = '0,000.00';\n break;\n case 'isEmail':\n ph = 'xx@xx.com';\n break;\n case 'isDouble':\n if (format.length >= 4) decimal = format[3] || 2;\n while (decimal > 0) {\n v = '0' + v;\n decimal--;\n }\n ph = '00.' + v;\n break;\n case 'isDate':\n if (sDateType === 'week') {\n ph = t('common.selectWeek'); // dateFormatConfig.week.placeholder;\n dateFormat = dateFormatConfig.week.dateFormat;\n } else if (sDateType === 'month' || sDateType === 'monthrange') {\n ph = t('common.selectMonth'); // dateFormatConfig.month.placeholder;\n startPh = ph;\n endPh = ph;\n dateFormat = dateFormatConfig.month.dateFormat;\n valueFormat = dateFormatConfig.month.valueFormat;\n } else if (sDateType === 'year') {\n ph = t('common.selectYear'); // dateFormatConfig.year.placeholder\n dateFormat = dateFormatConfig.year.dateFormat;\n valueFormat = dateFormatConfig.year.valueFormat;\n } else if (sDateType === 'daterange' || sDateType === 'daterange2') ph = t('common.selectDate');\n break;\n case 'isDateTime':\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') {\n startPh = t('common.startTime');\n endPh = t('common.endTime');\n }\n ph = t('common.selectTime'); // dateFormatConfig.datetime.placeholder;\n dateFormat = dateFormatConfig.datetime.dateFormat;\n valueFormat = dateFormatConfig.datetime.valueFormat;\n break;\n }\n let editables = editable;\n // 如果是带有禁用日期的,不可编辑,防止输入不一致问题\n if (disabledDateFunc || disabledDate) editables = false;\n let ops;\n let isTableDic = false;\n if (type === 'dic')\n if (dicType) {\n ops = getDictItems(dicType);\n if (dicType.indexOf('t#') >= 0) isTableDic = true;\n }\n\n // 设置label是否显示\n let sLabel = label;\n if (formType.value === 's') {\n sLabel = appStore.searchFormLabel === true ? label : undefined;\n if (appStore.searchFormLabel !== true) ph = label;\n }\n\n const switchDefaultVal = ref('');\n const searchColClass = getSearchColClass(_index);\n switch (cType) {\n case 'blank':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n prop={field}\n key={field}>\n <div class=\"el-input__inner gv-form__item__inner-blank\">&nbsp;</div>\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'divider':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={24}\n sm={24}\n md={24}\n lg={24}\n xl={24}>\n <GvDivider label={sLabel} />\n </ElCol>\n );\n break;\n case 'render':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n {render?.(model.value[field], field)}\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'text':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n type=\"text\"\n vref={field}\n name={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n maxlength={maxLen}\n size={size as ComponentSize}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n onBlur={blur}\n onFocus={focus}\n suffixIcon={suffixIcon}\n prefixIcon={prefixIcon}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'textarea':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n vref={field}\n name={field}\n type=\"textarea\"\n v-model={model.value[field]}\n value={model.value[field]}\n size={size as ComponentSize}\n disabled={disabled}\n maxlength={maxLen}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n rows={rows}\n autosize={autosize}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'time':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvTimePicker\n v-model={model.value[field]}\n vref={field}\n name={field}\n disabled={disabled}\n editable={editables}\n placeholder={ph}\n isRange={isRange}\n rangeSeparator={rangeSeparator}\n // format={dateFormat}\n // value-format={valueFormat}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'date':\n case 'datetime':\n if (sDateType !== 'daterange2' && sDateType !== 'datetimerange2')\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvDatePicker\n v-model={model.value[field]}\n modelValue={model.value[field]}\n vref={field}\n data-name={field}\n data-align={'right'}\n type={sDateType}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={ph}\n default-time={defaultTime}\n startPlaceholder={startPh}\n endPlaceholder={endPh}\n data-visible={visible}\n onChange={change}\n />\n </ElFormItem>\n </ElCol>\n ) : null;\n else\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <div\n class=\"gv-daterange__single\"\n style=\"width: 100%;\"\n onFocus={() => void 0}>\n <GvDatePicker\n v-model={model.value[field + '-start']}\n modelValue={model.value[field + '-start']}\n vref={field + '-start'}\n data-name={field + '-start'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={startPh}\n default-time={defaultTime}\n data-visible={visible}\n style={{ width: '96% !important' }}\n class=\"gv-datepicker-range-start\"\n onChange={(val) => handleDateRange2Change('s', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n <span class=\"gv-daterange__single-separator\">{rangeSeparator}</span>\n <GvDatePicker\n v-model={model.value[field + '-end']}\n modelValue={model.value[field + '-end'] as string}\n vref={field + '-end'}\n data-name={field + '-end'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={(date) => {\n if (sDateType === 'daterange2') return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n else return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n }}\n editable={editables}\n placeholder={endPh}\n default-time={defaultTime}\n data-visible={visible}\n class=\"gv-datepicker-range-end\"\n onChange={(val) => handleDateRange2Change('e', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n </div>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'dic':\n switch (dicType) {\n case 'yxzt':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100201';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100201';\n break;\n case 'sf':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100101';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100101';\n break;\n }\n if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2 && (dicType === 'sf' || dicType === 'yxzt'))\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvSwitch\n value={switchDefaultVal.value}\n columnKey={field}\n disabled={disabled}\n target={dicType === 'yxzt' ? '100201' : '100101'}\n onChange={(val) => handleSwitchDictChange(val, field, dicType, cb)}></GvSwitch>\n </ElFormItem>\n </ElCol>\n ) : null;\n else if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2)\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElInput\n id={`${field}__a11y-anchor`}\n modelValue=\"\"\n readonly\n validateEvent={false}\n tabindex={-1}\n aria-hidden={true}\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: 0,\n border: 0,\n clip: 'rect(0, 0, 0, 0)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n />\n <ElRadioGroup\n aria-label={sLabel}\n name={field}\n v-model={model.value[field].value}\n onChange={(val) => handleRadioDictChange(val, field, dicType, cb)}>\n {ops.map((x) =>\n format[0] === 0 ? (\n <ElRadio\n value={x.c}\n disabled={disabled}\n onChange={(event) => handleRadioInput(event, field, x.c, model.value[field], disabled)}>\n {getLanguage(userStore.language, x)}\n </ElRadio>\n ) : (\n <ElRadioButton\n value={x.c}\n disabled={disabled}>\n {getLanguage(userStore.language, x)}\n </ElRadioButton>\n ),\n )}\n </ElRadioGroup>\n </ElFormItem>\n </ElCol>\n ) : null;\n else {\n // form dic\n let v: string | undefined;\n const vv = model.value[field];\n if (typeof vv === 'object')\n if (Array.isArray(vv))\n vv.forEach((x, index) => {\n if (x)\n if (v)\n if (x.label) v += ',' + x.label;\n else v += ',' + (showLabel?.[index] ? showLabel[index] : x);\n else if (x.label) v = x.label;\n else v = showLabel?.[index] ?? x;\n });\n else {\n if (vv) v = vv.label;\n }\n else v = vv;\n let toolText = v; // 提示的文本\n if (showLabel) toolText = showLabel as string;\n\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!v}\n content={toolText ? toolText + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvSelect\n v-model={model.value[field]}\n value={model.value[field]}\n label={label}\n showLabel={showLabel}\n vref={field}\n multiple={multiple}\n dicType={dicType ?? ''}\n size={size as ComponentSize}\n disabled={disabled}\n placeholder={ph}\n filtercode={filtercode}\n visible={visible}\n dicRemote={typeof dicRemote === 'function' ? dicRemote : undefined}\n cb={cb}\n clear={clear}\n isreload={isreload}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n }\n\n break;\n case 'number':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInputNumber\n vref={field}\n name={field}\n id={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n visible={visible}\n size={size as ComponentSize}\n min={min}\n max={max}\n step={step}\n precision={precision}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'layer':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvCascader\n vref={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n size={size as ComponentSize}\n lazy={lazy}\n multiple={multiple}\n lazyLoad={lazyLoad}\n visible={visible}\n options={options}\n onBlur={blur}\n onChange={change}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n default:\n break;\n }\n if (createRow === true) return <el-row>{renders}</el-row>;\n else return renders;\n };\n\n const getItems = computed(() => {\n const res: VNode[] = [];\n props.formList.forEach((item: FormItem, index: number) => {\n res.push(renderFormItem(item, index));\n });\n return res;\n });\n\n // todo: 计算最大高度 需要增加弹出框判断逻辑,\n const getMaxHeight = (sRootEl: HTMLElement | undefined) => {\n if (isEditContainer.value) sMaxHeight.value = 0;\n else if (props.scroller === false) sMaxHeight.value = 0;\n else if (!isScrollbar.value)\n if (!isAnchor.value) {\n if (sRootEl && typeof sRootEl.closest === 'function') {\n const tabPane = sRootEl?.closest('.el-tabs') as HTMLElement | undefined;\n if (tabPane) {\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 215 : 275;\n sMaxHeight.value = document.documentElement.clientHeight - (sRootEl?.offsetTop || 0) - (tabPane?.offsetTop || 0) - offsetTop;\n } else {\n const dialog = sRootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = sRootEl?.closest('.gv-drawer');\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 75;\n // console.log(this.sMaxHeight);\n } else sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 265;\n }\n }\n } else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n };\n\n const clearFormValidate = () => {\n formRefs.value[props.refForm]?.clearValidate();\n };\n\n /**\n * @todo: 设置form表单样式\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-07 19:35:14\n */\n const setFormStyle = () => {\n let formStyle1;\n // console.log(props.formStyle);\n if (props.formStyle) {\n formStyle1 = props.formStyle;\n let width = formStyle1.width || 0;\n let height = formStyle1.height || 0;\n // fixme: 判断width是否是百分比\n // if (width.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持width定义百分比');\n // if (height.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持height定义百分比');\n // width = Math.round(this.getParentWidth * (parseInt(width) / 100) * 100) / 100;\n\n if (width.lastIndexOf('%') === -1) {\n // width固定值\n width = parseInt(width);\n if (width !== 0) {\n if (width < 762)\n // xs\n colSpanNums.value = 24;\n else if (width < 992)\n // sm\n colSpanNums.value = 12;\n else if (width < 1200)\n // md\n colSpanNums.value = 8;\n else if (width < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = width + 'px';\n }\n if (height !== '100%' && height !== 0) {\n height = parseInt(height);\n rootNodeStyle.value['height'] = height + 'px';\n }\n } else rootNodeStyle.value['width'] = width;\n } else {\n const rootEl = instance?.vnode?.el as HTMLElement;\n const clientWidth = rootEl?.clientWidth;\n // console.log(clientWidth);\n if (clientWidth !== 0) {\n if (clientWidth < 762)\n // xs\n colSpanNums.value = 24;\n else if (clientWidth < 992)\n // sm\n colSpanNums.value = 12;\n else if (clientWidth < 1200)\n // md\n colSpanNums.value = 8;\n else if (clientWidth < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = clientWidth + 'px';\n }\n }\n styles.value = formStyle1;\n };\n\n /**\n * @todo: form init\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 07:47:06\n * @param {*} type\n */\n const init = async (type: string) => {\n // alert(type);\n const formModel = {};\n const formRule = {};\n props.formList.forEach((item: FormItem) => {\n let v;\n if (type === 'create') v = item.value;\n else v = model.value[item.field] === undefined ? item.value : model.value[item.field];\n formModel[item.field] = v;\n if (item.dateType === 'daterange2' || item.dateType === 'datetimerange2')\n if (Array.isArray(v)) {\n formModel[item.field + '-start'] = v[0] === 'null' ? undefined : v[0];\n formModel[item.field + '-end'] = v[1] === 'null' ? undefined : v[1];\n } else {\n formModel[item.field + '-start'] = '';\n formModel[item.field + '-end'] = '';\n }\n\n formRule[item.field] = getItemRules(item);\n // 设置 value属性为响应式数据\n item.value = v;\n });\n // 设置form model\n model.value = formModel;\n if (type === 'create') rules.value = formRule;\n else if (type === 'watch') rules.value = formRule;\n\n await nextTick();\n setFormStyle();\n // console.log(formRefs.value);\n clearFormValidate();\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal) {\n const fieldObj = newVal[key];\n const oldObj = oldVal[key];\n if (fieldObj === undefined) continue;\n else if (!oldObj) {\n diff = true;\n break;\n } else {\n const fieldObjKeys = Object.keys(fieldObj);\n for (const key2 in fieldObjKeys)\n if (\n fieldObjKeys[key2] === 'label' ||\n fieldObjKeys[key2] === 'hidden' ||\n fieldObjKeys[key2] === 'disabled' ||\n fieldObjKeys[key2] === 'format' ||\n fieldObjKeys[key2] === 'readonly' ||\n fieldObjKeys[key2] === 'filtercode' ||\n fieldObjKeys[key2] === 'multiple' ||\n fieldObjKeys[key2] === 'showLabel' ||\n fieldObjKeys[key2] === 'visible'\n )\n if (fieldObjKeys[key2] === 'format') {\n if (fieldObj[fieldObjKeys[key2]][0] !== oldObj[fieldObjKeys[key2]][0]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][1] !== oldObj[fieldObjKeys[key2]][1]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][2] !== oldObj[fieldObjKeys[key2]][2]) {\n diff = true;\n break;\n }\n // //if (!_.isEqual(fieldObj[fieldObjKeys[key2]], oldObj[fieldObjKeys[key2]])) {\n // diff = true;\n // break;\n // }\n } else if (fieldObj[fieldObjKeys[key2]] !== oldObj[fieldObjKeys[key2]]) {\n // console.log(key2);\n // console.log(fieldObj[fieldObjKeys[key2]]);\n // console.log(oldObj[fieldObjKeys[key2]]);\n diff = true;\n break;\n }\n }\n\n // if (!_.isEqual(newVal[key], oldVal[key]))\n }\n // console.log(diff);\n return diff;\n };\n\n // watch\n watch(\n () => props.formList,\n (nextProps, prevProps) => {\n // formList\n if (Array.isArray(nextProps) && Array.isArray(prevProps) && nextProps.length !== prevProps.length) init('watch');\n else if (difference(nextProps, originFormList.value)) init('watch');\n },\n {\n deep: true,\n },\n );\n watch(\n () => sMaxHeight.value,\n (newVal) => {\n // sMaxHeight\n if (isScrollbar.value === false)\n if (isAnchor.value === false) sMaxHeight.value = newVal;\n else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n },\n );\n\n // @created hook\n // console.log(slots.default);\n const firstSlot = slots.default?.()?.[0];\n if (typeof firstSlot?.type === 'object' && 'name' in firstSlot.type && firstSlot?.type?.name === 'GvSearchBar') {\n formType.value = 's';\n const slotProps = firstSlot.props as Recordable | undefined;\n if (slotProps?.expand === false) searchFieldsCollapsed.value = false;\n } else formType.value = 'e';\n // 解析formList\n originFormList.value = JSON.parse(JSON.stringify(props.formList));\n init('create');\n // 判断是否是dialog弹出框中的form\n const parentNode = instance?.parent;\n // console.log(parentNode.$?.type?.name);\n if (parentNode && parentNode.type?.name === 'ElDialog') isDialog.value = true;\n else isDialog.value = false;\n\n // @mounted hook\n onMounted(() => {\n nextTick(() => {\n // get root element\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n\n // 确保 rootEl 是 HTMLElement 并且有 closest 方法\n if (rootEl && typeof rootEl.closest === 'function') {\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n const dialogBody = rootEl.closest('.gv-drawer__body__inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogBody2 = rootEl.closest('.gv-dialog__body__inner');\n if (dialogBody2) isScrollbar.value = hasScrollbar(dialogBody2);\n }\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n\n // 计算maxheight;\n getMaxHeight(rootEl);\n\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n }\n });\n });\n\n // @render\n return () => (\n <div\n class={prefixCls}\n style={{ ...rootNodeStyle }}>\n {getEditBar.value}\n {getDivider.value}\n <Transition name=\"el-zoom-in-top\">\n <div\n v-show={isShow.value}\n key=\"gv-form-body\"\n class={`${prefixCls}-collapse__inner`}>\n <ElForm\n ref={setFormRef}\n model={model.value}\n size={formSize.value}\n inline={false}\n label-position={labelPosition.value}\n label-width={`${props.labelWidth}px`}\n rules={rules.value}\n style={{\n ...styles.value,\n width: '100%',\n maxHeight: sMaxHeight.value === 0 ? undefined : sMaxHeight.value + 'px',\n }}>\n <ElRow\n ref-form={props.refForm}\n style={{ display: 'flex', flexWrap: 'wrap' }}>\n {getItems.value}\n {slots.default?.() && <div style={{ flex: 1, minWidth: 1 }}>{slots.default?.()}</div>}\n </ElRow>\n </ElForm>\n </div>\n </Transition>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-form';\n .#{$prefixCls} {\n width: 100%;\n\n .#{$prefixCls}-form-editbar {\n // editbar bottom\n // border-bottom:1px solid #d9d9d9;\n // editbar top\n // border-top:1px solid #d9d9d9;\n // border-top: 1.5px solid var(--primaryColorHover, $primaryColorHover);\n padding: 0 0 2px;\n margin-top: -3px;\n }\n\n .#{$prefixCls}-collapse-wrap {\n overflow: hidden;\n }\n\n .#{$prefixCls}-collapse__inner {\n transform-origin: center top;\n }\n\n .el-form {\n overflow: hidden auto;\n }\n\n .el-col {\n min-height: 32px;\n margin-bottom: 12px;\n\n &[type='FIXED'] {\n height: 32px !important;\n }\n\n :deep(.el-form-item) {\n margin-bottom: 0;\n\n .el-form-item__label {\n height: 30px; // 32px\n padding-right: $modulePadding;\n //font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 30px; // 32px\n\n .label-wrap {\n display: inline-block;\n max-width: calc(100% - 10px);\n\n .el-input__inner {\n padding: 0 8px;\n border-color: $borderColor;\n\n & + span.el-input__suffix {\n right: 0;\n }\n }\n }\n }\n\n .el-form-item__content {\n line-height: 29px;\n height: 29px;\n .el-radio-group {\n .el-radio-button--small .el-radio-button__inner {\n padding: 7px;\n }\n\n .el-radio__label {\n //font-size: $appTextSize;\n }\n }\n\n .el-range-editor {\n width: 100%;\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .#{$prefixCls}__item__inner-blank {\n width: 100%;\n height: 20px;\n line-height: 5px;\n border: 0;\n }\n\n // 日期范围选择\n .el-range-editor.el-input__inner {\n padding: 3px 5px;\n }\n\n // 日期范围选择\n .el-range__close-icon {\n width: 20px;\n }\n\n .gv-daterange__single {\n display: inline-flex !important;\n height: 32px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n\n &:focus,\n &.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .el-input__suffix {\n right: 2px;\n }\n\n .el-input__inner {\n padding-right: 2px;\n padding-left: 25px;\n border: 0;\n }\n\n .gv-daterange__single-separator {\n height: 32px;\n //font-size: $appTextSize;\n line-height: 32px;\n }\n }\n\n .el-form-item__error {\n margin-top: 2px;\n transform: scale(0.9);\n transform-origin: 0 50%;\n }\n }\n\n .el-select {\n width: 100%;\n\n .el-select__tags {\n height: 24px;\n overflow-y: auto;\n\n .el-select__input {\n height: inherit;\n padding-left: 15px;\n }\n }\n }\n\n .el-autocomplete {\n width: 100%;\n }\n\n .el-textarea {\n display: block;\n\n .el-textarea__inner {\n padding: 0 10px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n overflow-y: auto;\n font-family: inherit;\n }\n\n .el-input__count {\n right: 6px;\n line-height: 1;\n }\n }\n\n .el-input-number {\n width: 100%;\n\n .el-input__inner {\n text-align: left !important;\n }\n\n .el-input-number__increase:hover ~ .el-input .el-input__inner:not(.is-disabled),\n .el-input-number__decrease:hover ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: $borderColor;\n }\n }\n\n .desc-icon {\n padding: 6px;\n font-size: 18px;\n vertical-align: middle;\n }\n\n .desc-text {\n //font-size: $textSizeSecondary;\n }\n\n &.is-required .el-form-item__label {\n // color: #f5222d;\n color: #606266;\n }\n }\n }\n .el-form--label-top {\n .el-form-item {\n .el-select,\n .el-input,\n .el-radio-group {\n width: 90% !important;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvForm from './src/GvForm.vue';\nconst GvFormPlugin = {\n install(app: App): void {\n app.component(GvForm.name ?? 'GvForm', GvForm);\n },\n};\nexport default GvFormPlugin;\n\nexport { GvForm };\n","<!--\n * @title: collapsed sidebar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-03 13:48:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 11:18:57\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { Expand, Fold } from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, onMounted, unref } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvHamburger', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('hamburger');\n\n const appStore = useAppStore();\n const collapse = computed(() => appStore.getCollapseMenus);\n\n // set quick keys\n\n // @method\n // load dict\n const loadDict = async () => {\n try {\n await appStore.loadAllDict();\n } catch {\n // empty\n }\n };\n // load division\n const loadDictDivision = async () => {\n try {\n await appStore.loadDictDivision();\n } catch {\n // empty\n }\n };\n\n const toggleCollapse = () => {\n const collapsed = unref(collapse);\n appStore.setCollapseMenus(!collapsed);\n };\n\n // @created\n // @mounted\n onMounted(async () => {\n // reload dict if needed\n const currentDict = appStore.dict;\n const currentReloadDict = appStore.isLoadDict;\n if (!currentDict || Object.keys(currentDict).length === 0) await loadDict();\n else if (+currentReloadDict === 1) await loadDict();\n const currentDictDivision = appStore.dictDivision;\n if (currentDictDivision && currentDictDivision.length === 0) await loadDictDivision();\n });\n</script>\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleCollapse\">\n <div class=\"trigger\">\n <ElIcon\n :size=\"20\"\n :class=\"`${prefixCls}__icon`\">\n <Expand\n v-if=\"!collapse\"\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n <Fold\n v-else\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n </ElIcon>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-hamburger';\n .#{$prefixCls} {\n position: relative;\n z-index: 3;\n line-height: $navHeadHeight;\n background-color: #fff;\n &:hover {\n background-color: rgb(0 0 0 / 3%);\n }\n .trigger {\n display: inline-block;\n line-height: 1px;\n cursor: pointer;\n transition: color 0.3s ease;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvHamburger from './src/GvHamburger.vue';\nconst GvHamburgerPlugin = {\n install(app: App): void {\n app.component(GvHamburger.name ?? 'GvHamburger', GvHamburger);\n },\n};\nexport default GvHamburgerPlugin;\n\nexport { GvHamburger };\n","<!--\n * @title: locale lang dropdown\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-25 11:43:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:09:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useLocale } from '@/hook/web/useLocale';\n import { useStyle } from '@/hook/web/useStyle';\n import { useLocaleStore } from '@/store/modules/locale';\n import { useUserStore } from '@/store/modules/user';\n import { computed, unref } from 'vue';\n import { useRouter } from 'vue-router';\n import { propTypes } from '../../utils/gv.propTypes';\n\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n\n defineOptions({\n name: 'GvLangSelect', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n defineProps({\n className: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('lang-select');\n\n const userStore = useUserStore();\n const localeStore = useLocaleStore();\n const langMap = computed(() => localeStore.getLocaleMap);\n const currentLang = computed(() => localeStore.getCurrentLocale);\n\n const router = useRouter();\n\n const handleSetLang = async (lang): Promise<void> => {\n if (lang === unref(currentLang).lang) return;\n\n const { switchLocale } = useLocale();\n userStore.setLanguage(lang);\n await switchLocale(lang);\n\n router.go(0);\n };\n</script>\n\n<template>\n <ElDropdown\n :class=\"prefixCls\"\n trigger=\"click\"\n class=\"international\"\n @command=\"handleSetLang\">\n <div>\n <GvIcon\n :class-name=\"`international-icon ${className}`\"\n icon-name=\"language\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item in langMap\"\n :key=\"item.lang\"\n :command=\"item.lang\">\n {{ item.name }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n","import type { App } from 'vue';\nimport GvLangSelect from './src/GvLangSelect.vue';\nconst GvLangSelectPlugin = {\n install(app: App): void {\n app.component(GvLangSelect.name ?? 'GvLangSelect', GvLangSelect);\n },\n};\nexport default GvLangSelectPlugin;\n\nexport { GvLangSelect };\n","<!--\n * @title: popover component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:04:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:33:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { GvIcon } from '@@/GvIcon';\n import { ElPopover } from 'element-plus';\n import { computed, defineComponent, ref, watch, type PropType } from 'vue';\n import type { TPopoverPlacement, TPopoverTrigger } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popover');\n\n export default defineComponent({\n name: 'GvPopover',\n props: {\n vref: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n placement: {\n type: String as PropType<TPopoverPlacement>,\n default: 'bottom-start',\n },\n trigger: {\n type: String as PropType<TPopoverTrigger>,\n default: 'click',\n },\n tablePopover: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n columnType: {\n type: String,\n default: undefined,\n },\n },\n\n emits: ['update:visible', 'show', 'hide'],\n\n setup(props, { emit, slots }) {\n // @data\n const isShow = ref<boolean>(props.visible);\n\n // @watch\n watch(\n () => props.visible,\n (val) => {\n isShow.value = val;\n },\n );\n\n // @computed\n const popClass = computed(() => (props.tablePopover ? `${prefixCls} table-popover` : prefixCls));\n\n // @methods\n\n const handleUpdateVisible = (val: boolean) => {\n isShow.value = val;\n emit('update:visible', val);\n };\n\n const handleShow = () => {\n emit('show', props.columnProp);\n };\n\n const handleHide = () => {\n emit('hide', props.columnProp);\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n // 关闭其他 popover\n // if (this.tablePopover === true)\n // this.$refs.array.forEach(element => {\n\n // });\n\n // this.$emit('click', e, this.columnProp);\n };\n\n const getReferenceSlot = () => (\n <span class=\"gv-popover-reference\">\n {props.label || props.title}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"\n />\n </span>\n );\n\n // @render\n return () => (\n <div\n class={prefixCls}\n onClick={handlePopoverWrapper}>\n <ElPopover\n ref={props.vref || 'gv-popover'}\n visible={isShow.value}\n onUpdate:visible={handleUpdateVisible}\n title={props.title}\n placement={props.placement}\n trigger={props.trigger}\n showArrow={true}\n popperClass={`gv-popover ${popClass.value}`}\n transition=\"el-zoom-in-top\"\n onAfter-enter={handleShow}\n onAfter-leave={handleHide}\n // append-to-body={false}\n // popper-options={{ // fixme: 增加该配置会导致各种问题,兼容性不行\n // boundariesElement: 'body',\n // // gpuAcceleration: true,\n // // positionFixed: true,\n // removeOnDestroy: true\n // }}\n >\n {{\n default: () => slots.default?.(),\n reference: () => getReferenceSlot(),\n }}\n </ElPopover>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popover';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopover from './src/GvPopover.vue';\n\nconst GvPopoverPlugin = {\n install(app: App): void {\n app.component(GvPopover.name ?? 'GvPopover', GvPopover);\n },\n};\nexport default GvPopoverPlugin;\n\nexport { GvPopover };\n","<!--\n * @title: radio component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:52:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:34:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadio, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio');\n\n export default defineComponent({\n name: 'GvRadio',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref(props.value);\n const radioSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadio\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n value={props.value ?? props.label}\n disabled={props.disabled}\n border={props.border}\n onChange={handleChange}\n size={radioSize.value}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadio>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadio from './src/GvRadio.vue';\n\nconst GvRadioPlugin = {\n install(app: App): void {\n app.component(GvRadio.name ?? 'GvRadio', GvRadio);\n },\n};\nexport default GvRadioPlugin;\n\nexport { GvRadio };\n","<!--\n * @title: radio button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:18:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:35:23\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioButton } from 'element-plus';\n import { defineComponent, ref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-button');\n\n export default defineComponent({\n name: 'GvRadioButton',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue', 'change'],\n setup(props, { slots }) {\n // @data\n const radioValue = ref(props.value);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n // const handleUpdate = (val) => {\n // radioValue.value = val;\n // emit('update:modelValue', val);\n // };\n\n // @render\n return () => (\n <ElRadioButton\n value={props.value ?? props.label}\n modelValue={radioValue.value}\n name={props.name}\n disabled={props.disabled}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadioButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-button';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioButton from './src/GvRadioButton.vue';\n\nconst GvRadioButtonPlugin = {\n install(app: App): void {\n app.component(GvRadioButton.name ?? 'GvRadioGroup', GvRadioButton);\n },\n};\nexport default GvRadioButtonPlugin;\n\nexport { GvRadioButton };\n","<!--\n * @title: radio group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:10:40\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 09:03:41\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioGroupValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-group');\n\n export default defineComponent({\n name: 'GvRadioGroup',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioGroupValue>,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref<TRadioGroupValue | undefined>(props.value ?? undefined);\n const radioGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioGroupValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioGroupValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadioGroup\n class={prefixCls}\n aria-label={props.label}\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n size={radioGroupSize.value}\n onChange={handleChange}>\n {slots.default?.()}\n </ElRadioGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioGroup from './src/GvRadioGroup.vue';\n\nconst GvRadioGroupPlugin = {\n install(app: App): void {\n app.component(GvRadioGroup.name ?? 'GvRadioGroup', GvRadioGroup);\n },\n};\nexport default GvRadioGroupPlugin;\n\nexport { GvRadioGroup };\n","<!--\n * @title: row component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:49:52\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:36:24\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRow } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('row');\n\n export default defineComponent({\n name: 'GvRow',\n props: {\n gutter: {\n type: Number,\n default: 0,\n },\n tag: {\n type: String as PropType<string>,\n default: 'div',\n },\n },\n setup(props, { slots }) {\n return () => (\n <ElRow\n class={prefixCls}\n gutter={props.gutter}\n tag={props.tag}>\n {slots.default?.()}\n </ElRow>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvRow from './src/GvRow.vue';\n\nconst GvRowPlugin = {\n install(app: App): void {\n app.component(GvRow.name ?? 'GvRow', GvRow);\n },\n};\nexport default GvRowPlugin;\n\nexport { GvRow };\n","<!--\n * @title: screenfull\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:15:43\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-11-17 10:55:25\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useFullscreen } from '@vueuse/core';\n import { propTypes } from '../../utils/gv.propTypes';\n import { useStyle } from '@/hook/web/useStyle';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('screenfull');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { toggle, isFullscreen } = useFullscreen();\n\n const toggleFullscreen = () => {\n toggle();\n };\n</script>\n\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleFullscreen\">\n <GvIcon :icon-name=\"isFullscreen ? 'exit-fullscreen' : 'fullscreen'\" />\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-screenfull';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvScreenFull from './src/GvScreenFull.vue';\n// Define the install method on the GvButton component\nconst GvScreenFullPlugin = {\n install(app: App): void {\n app.component(GvScreenFull.name ?? 'GvScreenFull', GvScreenFull);\n },\n};\nexport default GvScreenFullPlugin;\n\nexport { GvScreenFull };\n","<!--\n * @title: search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:02:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:14:30\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText } from '@@/utils';\n import { computed, defineComponent, getCurrentInstance, inject, nextTick, onMounted, ref } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('search-bar');\n export default defineComponent({\n name: 'GvSearchBar',\n props: {\n expand: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n const visible = ref(props.expand);\n const searchFieldsCollapsed = inject<{ value: boolean }>('searchFieldsCollapsed', ref(true));\n // const formList = inject('formList') as Recordable[];\n const refForm = inject('refForm') as string;\n const instance = getCurrentInstance(); // get current vnode\n let formNode: any = instance;\n while (formNode && formNode.type?.name !== 'ElForm') formNode = formNode?.parent;\n\n const fieldList = ref<any[]>([]);\n const searchFormRows = appStore.searchFormRows;\n const showDefaultRow = searchFormRows === 1 ? 4 : 8;\n // @mounted\n onMounted(() => {\n nextTick(() => {\n // console.log(formNode.exposed.fields);\n fieldList.value = formNode.exposed.fields;\n });\n });\n // const gvSearchExpand = ref(null);\n // const gvSearchShrink = ref(null);\n\n // @methods\n /**\n * @todo: expand search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:45:03\n */\n const expandFields = () => {\n searchFieldsCollapsed.value = false;\n visible.value = false;\n };\n /**\n * @todo: shrink search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:48:18\n */\n const shrinkFields = () => {\n searchFieldsCollapsed.value = true;\n visible.value = true;\n };\n /**\n * @todo: create search button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:17:17\n */\n const createSearchBar = computed(() => {\n if (!fieldList.value?.length) return null;\n const searchBar: any[] = [];\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const defaultSlot = slots.default?.();\n if (defaultSlot) {\n defaultSlot.forEach((vnode) => {\n const propsData = vnode.props;\n const type = vnode.type;\n if (typeof type === 'object' && 'name' in type && type.name === 'GvButton') {\n let text = getVNodeText(vnode);\n let searchBtnFlag = false;\n\n if (text === t('searchBar.search')) {\n if (buttonQuick) text = t('searchBar.search2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.search');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.seek')) {\n if (buttonQuick) text = t('searchBar.seek2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.seek');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.query')) {\n if (buttonQuick) text = t('searchBar.query2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.query');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.reset')) {\n if (buttonQuick) text = t('searchBar.reset2');\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.reset');\n if (buttonIcon) propsData.icon = 'el-icon-refreshLeft';\n propsData.bizType = 'reset';\n }\n }\n\n if (searchBtnFlag && propsData && propsData.type === undefined) propsData.type = 'primary';\n\n if (propsData) propsData.refForm = refForm;\n }\n searchBar.push(vnode);\n });\n\n // if (this.expand) {\n // add: 判断是否需要增加展开按钮 2022-04-22\n const fieldList2 = fieldList.value.filter((x) => {\n if (x.$el.hidden !== true) return true;\n });\n\n if (fieldList2.length > showDefaultRow) {\n let expandText = `${t('searchBar.expand')}`;\n if (buttonQuick) expandText = `${t('searchBar.expand')}(E)`;\n let shrinkText = `${t('searchBar.shrink')}`;\n if (buttonQuick) shrinkText = `${t('searchBar.shrink')}(E)`;\n const expand = (\n <GvButton\n link={true}\n bizType=\"expand\"\n visible={visible.value}\n onClick={expandFields}>\n {expandText} &nbsp;\n <GvIcon\n iconType=\"el\"\n iconName=\"arrowDown\"\n />\n </GvButton>\n );\n searchBar.push(expand);\n const shrink = (\n <GvButton\n link={true}\n bizType=\"shrink\"\n visible={!visible.value}\n onClick={shrinkFields}>\n {shrinkText} &nbsp;\n <GvIcon\n iconType=\"el\"\n iconName=\"arrowUp\"\n />\n </GvButton>\n );\n searchBar.push(shrink);\n }\n // }\n }\n return searchBar;\n });\n // @created\n\n // @render\n return () => <div class={prefixCls}>{createSearchBar.value}</div>;\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-search-bar';\n .#{$prefixCls} {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n padding-top: 0px;\n margin: 0 1px 6px 0;\n }\n</style>\n","import type { App } from 'vue';\nimport GvSearchBar from './src/GvSearchBar.vue';\n// Define the install method on the GvButton component\nconst GvSearchBarPlugin = {\n install(app: App): void {\n app.component(GvSearchBar.name ?? 'GvSearchBar', GvSearchBar);\n },\n};\nexport default GvSearchBarPlugin;\n\nexport { GvSearchBar };\n","import { ref, unref } from 'vue';\nimport { findPath } from '../../utils/gv.tree';\n\ntype OnlyOneChildType = AppRouteRecordRaw & { noShowingChildren?: boolean };\n\ninterface HasOneShowingChild {\n oneShowingChild?: boolean;\n onlyOneChild?: OnlyOneChildType;\n}\n\nexport const getAllParentPath = <T = Recordable>(treeData: T[], path: string) => {\n const menuList = findPath(treeData, (n) => n.path === path) as AppRouteRecordRaw[];\n return (menuList || []).map((item) => item.path);\n};\n\nexport const hasOneShowingChild = (parent: AppRouteRecordRaw, children: AppRouteRecordRaw[] = []): HasOneShowingChild => {\n const onlyOneChild = ref<OnlyOneChildType>();\n\n const showingChildren = children.filter((v) => {\n const meta = v.meta ?? {};\n if (meta.hidden) return false;\n else {\n // Temp set(will be used if only has one showing child)\n onlyOneChild.value = v;\n return true;\n }\n });\n\n // When there is only one child router, the child router is displayed by default\n if (showingChildren.length === 1)\n return {\n oneShowingChild: true,\n onlyOneChild: unref(onlyOneChild),\n };\n\n // Show parent if there are no child router to display\n if (!showingChildren.length) {\n onlyOneChild.value = { ...parent, path: '', noShowingChildren: true };\n return {\n oneShowingChild: true,\n onlyOneChild: unref(onlyOneChild),\n };\n }\n\n return {\n oneShowingChild: false,\n onlyOneChild: unref(onlyOneChild),\n };\n};\n","import { useI18n } from '@/hook/web/useI18n';\nimport type { RouteMeta } from 'vue-router';\nimport { GvIcon } from '../../../GvIcon';\nexport const useRenderMenuTitle = () => {\n const renderMenuTitle = (meta: RouteMeta) => {\n const { t } = useI18n();\n if (!meta) {\n return <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">No Title</span>;\n }\n const { title = 'Please set title', icon } = meta;\n\n return icon ? (\n <>\n <GvIcon\n iconName={meta.icon || ''}\n className=\"sub-el-icon\"></GvIcon>\n <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">{t(title as string)}</span>\n </>\n ) : (\n <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">{t(title as string)}</span>\n );\n };\n\n return {\n renderMenuTitle,\n };\n};\n","/*\n * @title: render menu item - useRenderMenuItem\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-07-15 15:07:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 14:34:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { useStyle } from '@/hook/web/useStyle';\nimport { isUrl, pathResolve } from '@@/utils';\nimport { ElMenuItem, ElSubMenu } from 'element-plus';\nimport { unref } from 'vue';\nimport { hasOneShowingChild } from '../helper';\nimport { useRenderMenuTitle } from './useRenderMenuTitle';\nconst { getPrefixCls } = useStyle();\nconst prefixCls = getPrefixCls('submenu');\n\nconst { renderMenuTitle } = useRenderMenuTitle();\n\nexport const useRenderMenuItem = (menuMode) =>\n // allRouters: AppRouteRecordRaw[] = [],\n {\n const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => {\n if (!routers || !routers.length) return null;\n return routers\n .filter((v) => !v.meta?.hidden)\n .map((v) => {\n const meta = v.meta ?? {};\n const { oneShowingChild, onlyOneChild } = hasOneShowingChild(v, v.children);\n const fullPath = isUrl(v.path) ? String(v.path) : pathResolve(parentPath, v.path); // getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/')\n if (oneShowingChild && (!onlyOneChild?.children || onlyOneChild?.noShowingChildren) && !meta?.alwaysShow) {\n return (\n <ElMenuItem index={onlyOneChild ? pathResolve(fullPath, onlyOneChild.path) : fullPath}>\n {{\n default: () => renderMenuTitle(onlyOneChild ? (onlyOneChild.meta ?? meta) : meta),\n }}\n </ElMenuItem>\n );\n } else {\n return (\n <ElSubMenu\n index={fullPath}\n teleported\n class=\"nest-menu\"\n popperClass={unref(menuMode) === 'vertical' ? `${prefixCls}-popper--vertical` : ''}>\n {{\n title: () => renderMenuTitle(meta),\n default: () => renderMenuItem(v.children!, fullPath),\n }}\n </ElSubMenu>\n );\n }\n });\n };\n return {\n renderMenuItem,\n };\n };\n","<!--\n * @title: left menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-30 16:12:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 15:14:41\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useAppStore } from '@/store/modules/app';\n import { usePermsStore } from '@/store/modules/perms';\n import { ElMenu, ElScrollbar } from 'element-plus';\n import { computed, defineComponent, unref, type PropType } from 'vue';\n import { useRenderMenuItem } from './components/useRenderMenuItem';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useRouter } from 'vue-router';\n import { isUrl } from '../../utils';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('sidebar');\n\n export default defineComponent({\n name: 'GvSidebar',\n props: {\n menuSelect: {\n type: Function as PropType<(index: string) => void>,\n default: undefined,\n },\n },\n setup(props) {\n const appStore = useAppStore();\n const layout = computed(() => appStore.getLayout);\n const { push, currentRoute } = useRouter();\n const permStore = usePermsStore();\n const menuMode = computed((): 'vertical' | 'horizontal' => {\n const vertical: LayoutType[] = ['default', 'topLeft', 'cutMenu'];\n\n if (vertical.includes(unref(layout))) return 'vertical';\n else return 'horizontal';\n });\n\n const routers = computed(() => (unref(layout) === 'cutMenu' ? permStore.getRouters : permStore.getRouters));\n\n // console.log(routers.value);\n\n const collapse = computed(() => appStore.getCollapseMenus);\n\n const leftMenuUniqueOpened = computed(() => appStore.getLeftMenuUniqueOpened);\n\n const activeMenu = computed(() => {\n const { meta, path } = unref(currentRoute);\n // if set path, the sidebar will highlight the path you set\n if (meta.activeMenu) return meta.activeMenu as string;\n\n return path;\n });\n\n const menuSelect = (index: string) => {\n props.menuSelect?.(index);\n\n // 自定义事件\n if (isUrl(index)) {\n window.open(index);\n return;\n }\n push(index);\n };\n\n const renderMenu = () => (\n <ElMenu\n defaultActive={unref(activeMenu)}\n mode={unref(menuMode)}\n collapse={unref(layout) === 'top' || unref(layout) === 'cutMenu' ? false : unref(collapse)}\n uniqueOpened={unref(layout) === 'top' ? false : unref(leftMenuUniqueOpened)}\n backgroundColor=\"var(--left-menu-bg-color)\"\n textColor=\"var(--left-menu-text-color)\"\n activeTextColor=\"var(--left-menu-text-active-color)\"\n popperClass={unref(menuMode) === 'vertical' ? `${prefixCls}-popper--vertical` : `${prefixCls}-popper--horizontal`}\n onSelect={menuSelect}>\n {{\n default: () => {\n const { renderMenuItem } = useRenderMenuItem(menuMode);\n // console.log('renderMenu', routers.value);\n return renderMenuItem(unref(routers));\n },\n }}\n </ElMenu>\n );\n const renderMenuWrap = () => {\n if (unref(layout) === 'top') return renderMenu();\n else return <ElScrollbar>{renderMenu()}</ElScrollbar>;\n };\n return () => (\n <div\n id=\"gv-sidebar\"\n class={[\n `${prefixCls} ${prefixCls}__${unref(menuMode)}`,\n 'h-[100%] overflow-hidden flex-col bg-[var(--left-menu-bg-color)]',\n {\n 'w-[var(--left-menu-min-width)]': unref(collapse) && unref(layout) !== 'cutMenu',\n 'w-[var(--left-menu-max-width)]': !unref(collapse) && unref(layout) !== 'cutMenu',\n },\n ]}>\n {renderMenuWrap()}\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-sidebar';\n\n .#{$prefixCls} {\n position: relative;\n transition: width var(--transition-time-02);\n\n :deep(.#{$elNamespace}-menu) {\n width: 100% !important;\n border-right: none;\n --el-menu-bg-color: var(--left-menu-bg-color);\n --el-menu-text-color: var(--left-menu-text-color);\n --el-menu-hover-text-color: var(--left-menu-text-active-color);\n --el-menu-active-color: var(--left-menu-text-active-color);\n --el-menu-hover-bg-color: var(--left-menu-hover-bg-color);\n\n // 设置选中时子标题的颜色\n .is-active {\n & > .#{$elNamespace}-sub-menu__title {\n color: var(--left-menu-text-active-color) !important;\n }\n }\n\n // 设置子菜单悬停的高亮和背景色\n .#{$elNamespace}-sub-menu__title,\n .#{$elNamespace}-menu-item {\n &:hover {\n color: var(--left-menu-text-active-color) !important;\n background-color: var(--left-menu-bg-color) !important;\n }\n }\n\n // 设置选中时的高亮背景和高亮颜色\n .#{$elNamespace}-menu-item.is-active {\n color: var(--left-menu-text-active-color) !important;\n background-color: var(--left-menu-bg-active-color) !important;\n\n &:hover {\n background-color: var(--left-menu-bg-active-color) !important;\n }\n }\n\n .#{$elNamespace}-menu-item.is-active {\n position: relative;\n }\n\n // 设置子菜单的背景颜色\n .#{$elNamespace}-menu {\n .#{$elNamespace}-sub-menu__title {\n background-color: var(--left-menu-bg-color) !important;\n }\n .#{$elNamespace}-menu-item:not(.is-active) {\n background-color: var(--left-menu-item-bg-light-color) !important;\n }\n }\n }\n\n // 折叠时的最小宽度\n :deep(.#{$elNamespace}-menu--collapse) {\n width: var(--left-menu-min-width);\n\n & > .is-active,\n & > .is-active > .#{$elNamespace}-sub-menu__title {\n position: relative;\n background-color: var(--left-menu-collapse-bg-active-color) !important;\n }\n }\n\n // 折叠动画的时候,就需要把文字给隐藏掉\n :deep(.horizontal-collapse-transition) {\n .#{$prefixCls}__title {\n display: none;\n }\n }\n\n // 水平菜单\n &__horizontal {\n height: calc(var(--top-tool-height)) !important;\n\n :deep(.#{$elNamespace}-menu--horizontal) {\n height: calc(var(--top-tool-height));\n border-bottom: none;\n // 重新设置底部高亮颜色\n & > .#{$elNamespace}-sub-menu.is-active {\n .#{$elNamespace}-sub-menu__title {\n border-bottom-color: var(--el-color-primary) !important;\n }\n }\n\n .#{$elNamespace}-menu-item.is-active {\n position: relative;\n\n &::after {\n display: none !important;\n }\n }\n\n .#{$prefixCls}__title {\n /* stylelint-disable-next-line */\n max-height: calc(var(--top-tool-height) - 2px) !important;\n /* stylelint-disable-next-line */\n line-height: calc(var(--top-tool-height) - 2px);\n }\n }\n }\n }\n</style>\n\n<style lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-sidebar-popper';\n\n .#{$prefixCls}--vertical,\n .#{$prefixCls}--horizontal {\n // 设置选中时子标题的颜色\n .is-active {\n & > .el-sub-menu__title {\n color: var(--left-menu-text-active-color) !important;\n }\n }\n\n // 设置子菜单悬停的高亮和背景色\n .el-sub-menu__title,\n .el-menu-item {\n &:hover {\n color: var(--left-menu-text-active-color) !important;\n background-color: #545658 !important;\n }\n }\n\n // 设置选中时的高亮背景\n .el-menu-item.is-active {\n position: relative;\n background-color: var(--left-menu-bg-active-color) !important;\n\n &:hover {\n background-color: var(--left-menu-bg-active-color) !important;\n }\n }\n }\n\n $submenu-prefix-cls: '#{$gvNamespace}-submenu-popper';\n\n // 设置子菜单溢出时滚动样式\n .#{$submenu-prefix-cls}--vertical {\n max-height: 100%;\n overflow-y: auto;\n\n &::-webkit-scrollbar {\n width: 6px;\n background-color: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgb(144 147 153 / 30%);\n border-radius: 4px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSidebar from './src/GvSidebar.vue';\n// Define the install method on the GvButton component\nconst GvSidebarPlugin = {\n install(app: App): void {\n app.component(GvSidebar.name ?? 'GvSidebar', GvSidebar);\n },\n};\nexport default GvSidebarPlugin;\n\nexport { GvSidebar };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABaCAYAAAAilKGMAAAACXBIWXMAAAZ2AAAGdgEpJm+AAAAKDGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYTZhNjM5NjhhLCAyMDI0LzAzLzA2LTExOjUyOjA1ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmQxNjAxODBkLTVlZmUtZjc0MS1iY2RhLTdjMDBjNTc4ZTVkMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDE1ZDUxNC05YzkxLTQwNTYtYTgzNS05YjZlYmRlOTQ5ZmEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB0aWZmOkltYWdlV2lkdGg9IjYzNiIgdGlmZjpJbWFnZUxlbmd0aD0iNjYwIiB0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb249IjIiIHRpZmY6U2FtcGxlc1BlclBpeGVsPSIzIiB0aWZmOlhSZXNvbHV0aW9uPSIxNDQvMSIgdGlmZjpZUmVzb2x1dGlvbj0iMTQ0LzEiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6RXhpZlZlcnNpb249IjAyMzEiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSI2MzYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSI2NjAiIHhtcDpDcmVhdGVEYXRlPSIyMDI0LTExLTI5VDEyOjQ4OjMzKzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNC0xMS0yOVQxMjo1MToyNCswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNC0xMS0yOVQxMjo1MToyNCswODowMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZiNWYzMGIyLWJmODgtNDQ3My1iMDk0LWIzMGUzYjkyMzczZiIgc3RFdnQ6d2hlbj0iMjAyNC0xMS0yOVQxMjo0OToxNyswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjExIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2UvanBlZyB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGltYWdlL2pwZWcgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MDg4Y2NiMi05NDFlLTQ1YmItOGZhZi02YjA5Mjc0M2Q0MDciIHN0RXZ0OndoZW49IjIwMjQtMTEtMjlUMTI6NDk6MTcrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNS4xMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NWQxNWQ1MTQtOWM5MS00MDU2LWE4MzUtOWI2ZWJkZTk0OWZhIiBzdEV2dDp3aGVuPSIyMDI0LTExLTI5VDEyOjUxOjI0KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMTEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmZiNWYzMGIyLWJmODgtNDQ3My1iMDk0LWIzMGUzYjkyMzczZiIgc3RSZWY6ZG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiLz4gPHRpZmY6Qml0c1BlclNhbXBsZT4gPHJkZjpTZXE+IDxyZGY6bGk+ODwvcmRmOmxpPiA8cmRmOmxpPjg8L3JkZjpsaT4gPHJkZjpsaT44PC9yZGY6bGk+IDwvcmRmOlNlcT4gPC90aWZmOkJpdHNQZXJTYW1wbGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+WfjB/QAAOnxJREFUeJztvXe4XFd19//Z+9Tp5famq2rJVnE3trGxMcY0h2KMDSb04NBCDIQQQgukvKTwQAKEEkIS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\"","<!--\n * @title: sidebar logo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-15 14:11:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 11:46:47\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { computed, onMounted, ref, unref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('logo');\n\n const appStore = useAppStore();\n\n const show = ref(true);\n const title = computed(() => appStore.getTitle);\n const layout = computed(() => appStore.getLayout);\n const collapseMenus = computed(() => appStore.getCollapseMenus);\n\n watch(\n () => collapseMenus.value,\n (collapse: boolean) => {\n if (unref(layout) === 'topLeft' || unref(layout) === 'cutMenu') {\n show.value = true;\n return;\n }\n show.value = !collapse;\n },\n );\n\n watch(\n () => layout.value,\n (layout) => {\n if (layout === 'top' || layout === 'cutMenu') show.value = true;\n else if (unref(collapseMenus)) show.value = false;\n else show.value = true;\n },\n );\n\n onMounted(() => {\n if (unref(collapseMenus)) show.value = false;\n });\n</script>\n\n<template>\n <div>\n <router-link\n :class=\"[prefixCls, layout !== 'default' ? `${prefixCls}__Top` : '', 'flex !h-[var(--logo-height)] items-center cursor-pointer pl-[8px] relative decoration-none overflow-hidden']\"\n to=\"/\">\n <img\n src=\"@/assets/imgs/logo.png\"\n class=\"w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]\" />\n <div\n v-if=\"show\"\n :class=\"[\n 'block whitespace-nowrap ml-[45px] mr-[0px] mt-[-25px] mb-[0px] text-[16px] font-bold',\n {\n 'text-[var(--logo-title-text-color)]': layout === 'default',\n 'text-[var(--top-header-text-color)]': layout === 'topLeft' || layout === 'top' || layout === 'cutMenu',\n },\n ]\">\n {{ title }}\n </div>\n </router-link>\n </div>\n</template>\n<style lang=\"scss\" scoped></style>\n","import type { App } from 'vue';\nimport GvSidebarLogo from './src/GvSidebarLogo.vue';\n// Define the install method on the GvButton component\nconst GvSidebarLogoPlugin = {\n install(app: App): void {\n app.component(GvSidebarLogo.name ?? 'GvSidebarLogo', GvSidebarLogo);\n },\n};\nexport default GvSidebarLogoPlugin;\n\nexport { GvSidebarLogo };\n","<!--\n * @title: table bar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:46:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:53\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { getVNodeName, getVNodeText } from '@@/utils';\n import { defineComponent, getCurrentInstance, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table-bar');\n export default defineComponent({\n name: 'GvTableBar',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const { t } = useBridgeI18n();\n // @watch\n\n // @methods\n const createTableBar = () => {\n const tableBar: VNode[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots) {\n const parentNode = instance?.parent;\n const refForm = parentNode?.attrs['ref-form'];\n\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const childrenNodes = (defaultSlots[0].children as VNode[]) || [];\n childrenNodes.forEach((vnode: VNode) => {\n const propsData = vnode.props || {};\n if (getVNodeName(vnode) === 'GvButton') {\n const text = getVNodeText(vnode);\n if (text.indexOf(t('tableBar.save')) !== -1 || text.indexOf(t('tableBar.add')) !== -1 || text.indexOf(t('tableBar.append')) !== -1 || text.indexOf(t('tableBar.create')) !== -1) {\n if (text === t('tableBar.add') && buttonQuick) {\n propsData.text = t('tableBar.add2');\n propsData.otext = text;\n } else propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-add';\n propsData.bizType = 'save';\n } else if (propsData.bizType === 'export') {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-daochu1';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.refresh')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-shuaxin';\n propsData.bizType = 'refresh';\n propsData.text = t('tableBar.refresh');\n } else if (text.indexOf(t('tableBar.templateDownload')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-xiazaidaorumoban1x';\n propsData.bizType = 'downloadTemplate';\n } else if (text.indexOf(t('tableBar.dispatch')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-winfo-icon-zhipai';\n propsData.bizType = 'dispatch';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.assign')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhipai';\n propsData.bizType = 'dispatch';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.calculate')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jisuan';\n propsData.text = text;\n propsData.bizType = 'calculate';\n } else if (text.indexOf(t('tableBar.trace')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiankongguanli';\n propsData.text = text;\n propsData.bizType = 'trace';\n } else if (text.indexOf(t('tableBar.receive')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-piliangbianji1';\n propsData.text = text;\n propsData.bizType = 'receive';\n } else if (propsData.bizType === 'import') {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-daoru2';\n propsData.text = text;\n propsData.bizType = 'import';\n } else if (text.indexOf(t('tableBar.generate')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zujian';\n propsData.text = text;\n propsData.bizType = 'generate';\n } else if (text.indexOf(t('tableBar.pay')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-yingshoukuan';\n propsData.text = text;\n propsData.bizType = 'pay';\n } else if (text.indexOf(t('tableBar.check')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-xuanze';\n propsData.text = text;\n propsData.bizType = 'check';\n } else if (text.indexOf(t('tableBar.reject')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-bohui';\n propsData.text = text;\n propsData.bizType = 'reject';\n } else if (text.indexOf(t('tableBar.approve')) !== -1 || text.indexOf(t('tableBar.audit')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-shenpi2';\n propsData.text = text;\n propsData.bizType = 'approve';\n } else if (text.indexOf(t('tableBar.logging')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-rizhi1';\n propsData.bizType = 'logging';\n } else if (text.indexOf(t('tableBar.select')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-chaxun';\n propsData.bizType = 'search';\n }\n // else if (text.indexOf('派') !== -1) {\n // // propsData.text = text;\n // propsData.icon = 'el-icon-finished';\n // propsData.bizType = 'confirm';\n // }\n else if (text.indexOf(t('tableBar.detail')) !== -1 || text.indexOf(t('table.list')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-mingxi';\n propsData.bizType = 'detail';\n } else if (text.indexOf(t('tableBar.withdraw')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-fanhui5';\n propsData.bizType = 'withdraw';\n } else if (text.indexOf(t('tableBar.submit')) !== -1 || text.indexOf('提报') !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tijiao';\n propsData.bizType = 'submit';\n } else if (text.indexOf(t('tableBar.delete')) !== -1 || text.indexOf(t('tableBar.cancel')) !== -1 || text.indexOf(t('tableBar.cancel1')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n propsData.bizType = 'delete';\n } else if (text.indexOf(t('tableBar.change')) !== -1 || text.indexOf(t('tableBar.update')) !== -1 || text.indexOf(t('tableBar.modify')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-edit-outline';\n propsData.bizType = 'update';\n } else if (text.indexOf(t('tableBar.sync')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tongbu1';\n propsData.bizType = 'update';\n } else if (text.indexOf(t('tableBar.untop')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-quxiaozhiding1';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.top')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhiding1';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.deserum')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-quxiaozhiding';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.unitPrice')) !== -1) {\n if (buttonIcon)\n // propsData.text = text;\n propsData.icon = 'iconfont gv-icon-jiangjinguize';\n else if (text.indexOf(t('tableBar.essence')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhiding';\n propsData.bizType = 'top';\n propsData.text = text;\n }\n } else if (text.indexOf(t('tableBar.relieve')) !== -1 || text.indexOf(t('tableBar.unbind')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiekou1';\n propsData.bizType = 'unbind';\n } else if (text.indexOf(t('tableBar.bind')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiekoushuoming';\n propsData.bizType = 'bind';\n } else if (text.indexOf(t('tableBar.confirm')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tianshenpi';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.notify')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-huodong';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.payment')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiage';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.transfer')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-fanhui5';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.putaway')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-top';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.soldOut')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-bottom';\n propsData.bizType = 'confirm';\n }\n propsData.refForm = refForm;\n } else if (getVNodeName(vnode) === 'ElDropdown') {\n const firstChild = vnode?.children?.[0];\n const text = getVNodeText(firstChild);\n propsData.text = text;\n propsData.icon = firstChild?.props.icon || '';\n }\n tableBar.push(vnode);\n });\n }\n return tableBar || [];\n };\n // console.log(tableBar);\n\n // @mounted\n\n // @render\n return () => (props.visible ? <div class={prefixCls}>{createTableBar()}</div> : null);\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-table-bar';\n .#{$prefixCls} {\n display: inline-block;\n height: 30px;\n padding-top: 3px;\n\n .el-dropdown {\n float: left;\n\n i {\n padding-right: 3px;\n color: var(--tableBarColor, $tableBarColor);\n\n & + span {\n margin-left: 3px;\n }\n }\n }\n\n :deep(.el-button) {\n float: left;\n height: 25px;\n padding: 2px 8px;\n margin-bottom: 2px;\n margin-left: 2px;\n color: var(--tableBarColor, $tableBarColor);\n text-align: left;\n background: #fff !important;\n border: 0;\n\n i {\n padding-right: 3px;\n color: var(--tableBarColor, $tableBarColor);\n\n & + span {\n margin-left: 3px;\n }\n }\n\n &:hover {\n background-color: rgb(0 82 156 / 5%) !important;\n }\n }\n\n .el-button.is-disabled {\n color: $textColor;\n\n :deep(i) {\n color: $textColor;\n }\n }\n }\n</style>\n","<!--\n * @title: tag component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:43:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:37:24\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTag, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, unref, type PropType } from 'vue';\n import type { TTagEffect, TTagType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tag');\n\n export default defineComponent({\n name: 'GvTag',\n props: {\n type: {\n type: String as PropType<TTagType>,\n default: 'primary',\n },\n closable: {\n type: Boolean,\n default: false,\n },\n effect: {\n type: String as PropType<TTagEffect>,\n default: 'light',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n round: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emits\n emits: ['click', 'close'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const tagSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @methods\n\n const handleClick = (event: MouseEvent) => {\n emit('click', event);\n };\n\n const handleClose = (event: Event) => {\n emit('close', event);\n };\n\n // @render\n return () => (\n <ElTag\n type={props.type}\n size={tagSize.value}\n round={props.round}\n closable={props.closable}\n effect={props.effect}\n class={prefixCls}\n onClick={handleClick}\n onClose={handleClose}>\n {slots.default?.()}\n </ElTag>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tag';\n .#{$prefixCls} {\n }\n</style>\n","/*\n * @title: table utils\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-09 17:50:09\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 08:47:14\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { FilterCondition, PageInfo } from '@@/GvTable/src/types';\nimport type { TableInstance } from 'element-plus';\nimport type { VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { isEmpty, toHump, toLine } from './index';\n/**\n * @todo: page info condition\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 09:09:54\n * @param {PageInfo} pi\n */\nexport const appendPageInfo = (pi?: PageInfo): PageInfo => {\n const pageInfo: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n const currentpagenum = pi && pi['currentpagenum'] ? pi['currentpagenum'] : 1;\n const recordsperpage = pi && pi['recordsperpage'] ? pi['recordsperpage'] : 10;\n const countrows = pi && pi['countrows'] ? pi['countrows'] : 0;\n const totalpage = pi && pi['totalpage'] ? pi['totalpage'] : 0;\n pageInfo['currentpagenum'] = currentpagenum;\n pageInfo['recordsperpage'] = recordsperpage;\n pageInfo['countrows'] = countrows;\n pageInfo['totalpage'] = totalpage;\n return pageInfo;\n};\n\n/**\n * @todo: common query combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:08:33\n * @param {VNode} tabNode\n * @param {Recordable} filter\n */\nexport const combined = function (tabNode: VNode, filter: Recordable<any>): Recordable<FilterCondition | PageInfo> {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n if (!isEmpty(filter))\n Object.keys(filter).forEach((x: string) => {\n let val: string = '';\n let co = 'null';\n if (!isEmpty(filter[x])) {\n let sOp = '=';\n if (typeof filter[x] === 'object')\n if (Array.isArray(filter[x] as any[])) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (filter[x] as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else {\n const v = filter[x] as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n val = val + '';\n if (val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n const ds = toLine(x);\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n let type = 'text';\n if (type !== 'dic' && (x.indexOf('id') >= 0 || x.indexOf('Id') >= 0)) type = 'number';\n\n condition['id'] = x;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = 'null';\n condition['ki'] = type;\n filterConditions[x] = condition;\n }\n });\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = tabNode.props?.['pageSize'] ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: form search combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:31:41\n * @param {FormItem} formList\n * @param {Recordable} filter\n * @param {VNode} tabNode\n */\nexport const searchCombined = (formList: FormItem[], filter: Recordable<any>, tabNode: TableInstance): Recordable<FilterCondition | PageInfo> => {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n // console.log(formList);\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n const { action, field, op = 'like', upper = false, showLabel, dateType } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (isEmpty(val)) continue;\n // 对于日期范围选择\n if (Array.isArray(val)) if (isEmpty(val[0])) continue;\n // if (type !== 'dic' && (field.indexOf('id') >= 0 || field.indexOf('Id') >= 0))\n // type = 'number';\n // console.log(val);\n let sOp = op;\n if (type === 'dic') {\n if (Array.isArray(val)) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (val as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (showLabel) {\n // 单选字典\n co = val + '';\n val = showLabel;\n } else {\n const v = val as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n\n sOp = '=';\n } else if (type === 'date' || type === 'datetime' || type === 'time') {\n if (op === 'like') sOp = '=';\n if (dateType === 'daterange' || dateType === 'datetimerange' || dateType === 'timerange' || dateType === 'monthrange') val = (val as any[]).join(',');\n } else if (type === 'number') sOp = '=';\n\n let sType = type;\n if (dateType === 'monthrange') sType = 'month';\n\n val = val + '';\n if (!action && val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n\n sOp = sOp.replace(/</gi, '&lt;');\n sOp = sOp.replace(/>/gi, '&gt;');\n let ds = toLine(field);\n // 多表关联判断是否带表别名 2022-06-23\n if (ds.indexOf('@') > 0) ds = ds.replace('@', '.');\n\n if (upper === true) {\n if (co && co !== 'null') co = co.toUpperCase();\n val = val.toUpperCase();\n // 将ds转为upper函数\n ds = 'upper(' + ds + ')';\n }\n\n condition['id'] = field;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = action || 'null';\n condition['ki'] = sType || 'text';\n filterConditions[field] = condition;\n }\n }\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = (tabNode.$.props?.['pageSize'] as number) ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: save combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:43:03\n * @param {FormItem} formList\n * @param {Recordable} filter\n */\nexport const saveCombined = (formList: FormItem[], filter: Recordable<any>): Recordable<any> => {\n const filterConditions = {};\n\n try {\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const { action, field, showLabel } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (val === undefined || val === null) continue;\n if (type === 'dic')\n if (showLabel)\n if (Array.isArray(val)) {\n // 多选字典\n let coo = '';\n const labels = '';\n val.forEach((x) => {\n let v: string;\n if (typeof x === 'object') v = x.value;\n else v = x + '';\n if (coo) coo += ',' + v;\n else coo = v;\n });\n co = coo;\n val = labels;\n } else if (typeof val === 'object') {\n co = val.value;\n val = val.label;\n } else {\n co = val + '';\n val = showLabel;\n }\n else if (Array.isArray(val)) {\n // 多选字典\n let coo = '';\n let labels = '';\n val.forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (typeof val === 'object') {\n co = val.value;\n val = val.label;\n } else\n // if (typeof val !== 'object' && item.dicType.indexOf('t#') >= 0) {\n // Notify.message('[' + field + ']: 字典值设置不正确', 'error');\n // throw new Error('[' + field + ']: 字典值设置不正确');\n // }\n co = val;\n else {\n val = val + ''; // fixme: 对于id等数字,转换为字符类型,防止indexOf出错\n co = val + '';\n }\n if (co === null || co === undefined) {\n message('[' + field + ']: dict value is null', 'error');\n throw new Error('[' + field + ']: dict value is null');\n }\n if (!action && co.indexOf(',') > 0) co = co.replace(/,/g, ',');\n const ds = toHump(field);\n\n filterConditions[ds] = co;\n }\n }\n } catch (error) {\n console.log(error);\n throw new Error('combined data error:' + error);\n }\n return filterConditions;\n};\n","/*\n * @title: crud methods utils\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-25 15:07:35\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 13:38:52\n * @version: 1.0.7\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { PageInfo } from '@@/GvTable/src/types/index';\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport type { FormInstance, TableInstance } from 'element-plus';\nimport type { ComponentInternalInstance, VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { appendPageInfo, combined, saveCombined, searchCombined } from './gv.table';\nimport { getVNodeName, isEmpty } from './index';\n/**\n * @todo: common fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:55:17\n * @param {function} fetch\n * @param {any} data\n */\nconst fetchData = async (fetch: AsyncFn, data: any): Promise<any> => {\n let result = {};\n await fetch(data).then((res) => {\n result = res.datas;\n });\n\n return result;\n};\n\n/**\n * @todo: common submit fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:39:01\n */\nconst submit = async (fetch: AsyncFn, data: any, hasMsg = true, msg?: string): Promise<any> => {\n let result = {};\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '操作成功';\n else msgs = 'Operate successfully';\n }\n await fetch(data).then((res) => {\n result = res.datas;\n if (hasMsg) message(msgs, 'success');\n });\n\n return result;\n};\n/**\n * @todo: common fetch table data(with pagination)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:40:36\n */\nconst fetchTable = async (tabNode: any, fetch: AsyncFn, data: any) => {\n let result = {};\n const condition = combined(tabNode, data);\n if (tabNode) {\n tabNode.filterConditions = condition;\n tabNode.fetch = fetch;\n }\n if (tabNode) tabNode.startLoading();\n await fetch(condition)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n if (tabNode) tabNode.stopLoading();\n return result;\n};\n\n/**\n * @todo: validate form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:42:22\n */\nconst checkForms = async (fmNodes: FormInstance[]) => {\n if (fmNodes === undefined || fmNodes === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = true;\n for (const fmNode of fmNodes) {\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n await fmNode2.component.exposed\n .validate()\n .then(() => {\n // todo\n })\n .catch(() => {\n // throw new Error(e);\n result = false;\n Promise.reject('The form failed validation');\n });\n }\n }\n\n return result;\n};\n\n/**\n * @todo: save form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:45:03\n */\nconst save = async (fmNode: FormInstance, fetch: AsyncFn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save OK.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n // console.log(error);\n return null;\n }\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n return;\n }\n })\n .catch(() => {\n // throw new Error(e);\n Promise.reject('The form failed validation');\n result = {};\n });\n }\n\n return result;\n};\n\n/**\n * @todo: update form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:49:05\n */\nconst update = async (fmNode: FormInstance, id: number, fetch: Async2Fn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (isEmpty(id)) {\n message('pk is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save Ok.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n })\n .catch(() => {\n result = {};\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list with form and table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:11:42\n */\nconst search = async (fmNode: FormInstance, tabNode: TableInstance, fetch: AsyncFn) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (tabNode === undefined || tabNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n // 解析检索条件\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 拼接查询条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(formList);\n const filterConditions = searchCombined(formList, filter, tabNode);\n // console.log(filterConditions);\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n exposed.startLoading();\n\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x: VNode) => {\n if (getVNodeName(x) === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n // fixme: 清空列表表头筛选框 2022-12-14\n const tableEl = tabNode.$el as HTMLElement;\n const tableHeader = tableEl.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const tableFixedHeader = tableEl.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n const columns = tableHeader?.querySelectorAll('.el-table__cell');\n const len = columns?.length || 0;\n for (let i = 0; i < len; i++) {\n const h = columns?.[i]?.querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n }\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.stopLoading();\n })\n .catch(() => {\n exposed.stopLoading();\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list without form but with table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:22:00\n * @param {*} tabNode\n * @param {*} fetch\n * @param {*} data\n */\nconst searchNoFm = async (tabNode: any, fetch: AsyncFn, data: any) => {\n if (tabNode === undefined || tabNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const condition = combined(tabNode, data);\n // console.log(JSON.stringify(filterConditions));\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n tabNode.filterConditions = condition;\n tabNode.fetch = fetch;\n tabNode.startLoading();\n await fetch(condition)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x) => {\n if (x?.type?.name === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n tabNode.stopLoading();\n return result;\n};\n\n/**\n * @todo: jump to new page search\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:23:46\n * @param {*} tabNode\n * @param {*} filterConditions\n * @param {*} fetch\n * @param {*} pageInfo\n */\nconst toNewPageSearch = async (tabNode: ComponentInternalInstance | null, filterConditions: Recordable<any>, fetch: AsyncFn, pageInfo: PageInfo) => {\n if (filterConditions === undefined || filterConditions === null) {\n console.log('分页查询失败: 过滤条件为空', 'error');\n return false;\n }\n if (fetch === undefined || fetch === null) {\n message('Paging query failed: Request method is empty', 'error');\n return false;\n }\n let result: Recordable<any> = [];\n tabNode?.exposed?.startLoading();\n const sfc = filterConditions || {};\n if (sfc['pageinfo'] === undefined) sfc['pageinfo'] = appendPageInfo() as PageInfo;\n // 更新pageinfo\n sfc['pageinfo'].currentpagenum = pageInfo.currentpagenum;\n sfc['pageinfo'].recordsperpage = pageInfo.recordsperpage;\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n console.log(error);\n });\n tabNode?.exposed?.stopLoading();\n return result;\n};\n\n/**\n * @todo: 转换单个结果集对象\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 10:11:53\n * @param {*} result\n */\nconst trans = (result) => result;\n\n/**\n * @todo: table insert row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:27:57\n * @param {*} searchData\n * @param {*} result\n */\nconst insertResult = (searchData: any, result: any) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined)\n // Notify.message('结果对象为空', 'error');\n return false;\n\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else\n // if (searchData.records === undefined)\n // result['rownums'] = 0;\n // else\n // if (!searchData.records[0])\n // result['rownums'] = 0;\n // else\n // result['rownums'] = (searchData.records[0].rownums - 1);\n searchData.records.splice(0, 0, trans(result));\n\n return true;\n};\n\n/**\n * @todo: table update row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:28:33\n * @param {*} searchData\n * @param {*} result\n * @param {*} rownums\n */\nconst updateResult = (searchData: any, result: any, rownums: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined)\n // Notify.message('结果对象为空', 'error');\n return false;\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else {\n const currentRowArr = searchData.records.filter((x: any) => {\n if (x.rownums === rownums) return true;\n });\n const currentRow = currentRowArr[0];\n Object.keys(result).forEach((x) => {\n if (x !== 'rownums') currentRow[x] = result[x];\n });\n }\n\n return true;\n};\n\n/**\n * @todo: table remove row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:29:10\n * @param {*} searchData\n * @param {*} index\n */\nconst removeResult = (searchData: any, index: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n searchData.records.splice(index, 1);\n // 设置总条数 - 1\n if (searchData.total) searchData.total = searchData.total - 1;\n return true;\n};\n\n/**\n * @todo: 从后端字典对象 { c, v, e, l1, l2 } 取当前语言展示文本\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-03 18:21:13\n * @param {Recordable} dictObj\n * @param {string} lang\n */\nconst getDictDisplayLabel = (dictObj: Recordable<any>, lang?: string | null): string => {\n if (!dictObj || typeof dictObj !== 'object') return '';\n const locale = lang || 'zh-CN';\n switch (locale) {\n case 'en':\n return dictObj.e ?? dictObj.e ?? dictObj.v ?? '';\n case 'l1':\n return dictObj.l1 ?? dictObj.l1 ?? dictObj.v ?? '';\n case 'l2':\n return dictObj.l2 ?? dictObj.l2 ?? dictObj.v ?? '';\n case 'zh-CN':\n default:\n return dictObj.v ?? dictObj.c ?? '';\n }\n};\n\n/**\n * @todo: table set form value\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:30:16\n * @param {*} formList\n * @param {*} rowData\n */\nconst setEditValue = (formList: FormItem[], rowData: Recordable<any>) => {\n // console.log(rowData);\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (rowData === null || rowData === undefined) {\n message('Set data is null', 'error');\n return false;\n }\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang') || 'zh-CN';\n if (Object.keys(rowData).length !== 0)\n formList.forEach((x) => {\n const fieldValue = rowData[x.field];\n if (fieldValue !== undefined)\n if (x.type !== 'blank' && x.keep !== true)\n // const dicType = x.dicType;\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n if (fieldValue !== null && typeof fieldValue === 'object') x.value = fieldValue.c;\n else x.value = fieldValue;\n break;\n case 'date':\n if (x.dateType === 'daterange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'datetime':\n if (x.dateType === 'datetimerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'time':\n if (x.dateType === 'timerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'layer':\n if (Array.isArray(fieldValue)) x.value = fieldValue;\n else if (fieldValue) {\n const arr = fieldValue.split(',');\n // const arr = [1, '2', 'a'];\n const arr2 = arr.map((x) => {\n if (!isNaN(parseInt(x))) return x * 1;\n else return x;\n });\n x.value = arr2;\n // console.log(x.value);\n } else x.value = [];\n\n break;\n case 'dic':\n // console.log(rowData[x.field]);\n // if (dicType && dicType.indexOf('t#') !== -1)\n // x.value = rowData[x.field];\n // else {\n // fixme: 增加枚举字典类型赋值 2022-11-07\n if (x.dicType && x.dicType.indexOf('e#') >= 0) {\n if (typeof x.value !== 'object') {\n const enums = x.dicType.split('#');\n const items = enums[1].split(':');\n\n for (let i = 0; i < items.length; i++) {\n const itemChild = items[i].split('=');\n if (itemChild[0] === fieldValue + '') {\n x.value = fieldValue;\n x.showLabel = itemChild[1];\n break;\n }\n }\n }\n } else if (x.multiple)\n if (fieldValue !== null) {\n // 多选字典\n if (typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const c = dictObj.c;\n const v = getDictDisplayLabel(dictObj, lang);\n\n if (c) {\n const codes = c.split(',');\n const labels = v ? v.split(',') : [];\n x.value = codes.map((code: string, i: number) => ({\n value: code,\n label: labels[i] ?? code,\n }));\n x.showLabel = labels;\n } else {\n x.value = [];\n x.showLabel = [];\n }\n } else if (typeof fieldValue === 'string') {\n const c = fieldValue;\n if (c) {\n const op = [];\n c.split(',').forEach((x) => {\n const o: Recordable<any> = {};\n o.value = x;\n (op as Recordable<any>[]).push(o);\n });\n x.value = op;\n } else x.value = [];\n }\n } else x.value = fieldValue;\n else if (fieldValue !== null && typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const code = String(dictObj.c ?? '').trim();\n const label = getDictDisplayLabel(dictObj, lang).trim();\n if (!code && !label) {\n x.value = '';\n x.showLabel = '';\n } else {\n x.value = { value: code, label: label || code };\n x.showLabel = label || code;\n }\n } else x.value = fieldValue;\n\n break;\n default:\n x.value = fieldValue;\n break;\n }\n });\n // formList = newList;\n};\n\n/**\n * @todo: reset form edit\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:36:39\n * @param {FormItem[]} formList\n */\nconst resetEditValue = (formList: FormItem[]) => {\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n formList.forEach((x) => {\n if (x.type !== 'blank' && x.keep !== true)\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n x.value = '';\n break;\n case 'date':\n x.value = '';\n break;\n case 'dic':\n x.value = '';\n x.showLabel = '';\n break;\n }\n });\n};\n\nconst crud = {\n fetchData,\n submit,\n fetchTable,\n save,\n update,\n search,\n searchNoFm,\n toNewPageSearch,\n insertResult,\n updateResult,\n removeResult,\n setEditValue,\n resetEditValue,\n checkForms,\n};\n\nexport { crud };\n","<!--\n * @title: table component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:32:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:08:00\n * @version: 1.0.9\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStorage } from '@/hook/web/useStorage';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvIcon } from '@@/GvIcon';\n import { GvInput } from '@@/GvInput';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import type { TPopoverPlacement } from '@@/GvPopover/src/types';\n import { GvTableBar } from '@@/GvTableBar';\n import GvTag from '@@/GvTag/src/GvTag.vue';\n import { debounce, hasClass, hasScrollbar, isEqual, toLine } from '@@/utils';\n import { crud } from '@@/utils/gv.crud';\n import { message } from '@@/utils/gv.notify';\n import { Operation, Refresh } from '@element-plus/icons-vue';\n import {\n ElButton,\n ElButtonGroup,\n ElCheckbox,\n ElDivider,\n ElPagination,\n ElPopover,\n ElRadio,\n ElRadioGroup,\n ElTable,\n ElTableColumn,\n ElTooltip,\n ElTree,\n useGlobalConfig,\n type ComponentSize,\n type TableColumnCtx,\n type TableInstance,\n } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, ref, unref, watch, type PropType, type VNode } from 'vue';\n import type { FilterCondition, PageInfo } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table');\n /** 表头筛选 Popover:覆盖 EP 默认 150px,按内容自适应宽度 */\n const tableHeadFilterPopoverPopperStyle = {\n width: 'max-content',\n minWidth: '180px',\n maxWidth: 'min(420px, 90vw)',\n };\n export default defineComponent({\n name: 'GvTable',\n props: {\n refTable: {\n type: String,\n required: false,\n default: undefined,\n },\n tableHead: {\n type: Array as PropType<TableHeadItem[]>,\n required: true,\n default: () => [],\n },\n tableData: {\n type: Object as PropType<Recordable<any>>,\n required: false,\n default: () => {},\n },\n height: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n maxHeight: {\n type: [Number, String, undefined] as PropType<number | string | undefined>,\n required: false,\n default: undefined,\n },\n maxWidth: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n pageSize: {\n type: Number,\n required: false,\n default: 10,\n },\n rowClassName: {\n type: Function,\n required: false,\n default: () => {},\n },\n rowStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n spanMethod: {\n type: Function,\n required: false,\n default: () => {},\n },\n cellStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n // tableImport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n // tableExport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n tableType: {\n type: String,\n required: false,\n default: undefined,\n },\n tableSort: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableKit: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableBar: {\n type: Boolean,\n required: false,\n default: true,\n },\n border: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableFetch: {\n type: Function,\n required: false,\n default: () => {},\n },\n multi: {\n // 是否多选\n type: Boolean,\n required: false,\n default: false,\n },\n layout: {\n type: String,\n required: false,\n default: 'total, sizes, prev, pager, next, jumper',\n },\n isShowPage: {\n type: Boolean,\n required: false,\n default: true,\n },\n total: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: 'default',\n },\n tableInit: {\n type: Boolean,\n required: false,\n default: false,\n },\n beforeImport: {\n type: Function,\n required: false,\n default: undefined,\n },\n tableFilter: {\n type: Object,\n required: false,\n default: undefined,\n },\n tableCb: {\n type: Function,\n required: false,\n default: undefined,\n },\n expandRowKeys: {\n type: Array,\n required: false,\n default: undefined,\n },\n limitHeight: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableAction: {\n type: String,\n required: false,\n default: 'left',\n },\n tableActionIcon: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n emits: ['row-dblclick'],\n // emit\n setup(props, { slots, expose, emit, attrs }) {\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { getStorage } = useStorage('localStorage');\n const instance = getCurrentInstance();\n let lang = 'zh-CN';\n const sTableAction = appStore.tableAction || props.tableAction;\n const sTableActionIcon = appStore.tableActionIcon;\n const sTableConfirm = appStore.buttonConfirm;\n const detailPlacement: TPopoverPlacement = sTableAction === 'left' ? 'right-start' : 'left-start';\n let sTableType = props.tableType;\n let originTableHead: TableHeadItem[] = props.tableHead;\n let tableHeads: TableHeadItem[] = [];\n const vref = 'gv-table-' + props.refTable;\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n\n const sHeight = props.height;\n const sMaxHeight = ref(props.maxHeight);\n const sMaxWidth = ref(props.maxWidth || '100%');\n const loading = ref(false);\n let isEditTable = false; // 是否是编辑列表\n const pageInfo = ref<PageInfo>({\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n });\n const filterConditions: FilterCondition[] = [];\n let sPageSize = props.pageSize;\n\n const resultData = ref(props.tableData);\n const recordsList = ref(props.tableData?.records || []);\n const pageSizes = [10, 20, 50, 100, 200, 500];\n let filterHeads: string[] = []; // 表头Q过滤列缓存\n const popoverVisible = ref({}); // popover筛选使用\n const exportBtnDisabled = ref(true); // 导出按钮disabled\n const exportBtnLoading = ref(false); // 导出按钮loading\n const importBtnLoading = ref(false); // 导入按钮loading\n const tableSortMode = ref(1); // 列表默认排序方式\n const exportDialogShow = ref(false); // 导出列弹出框\n const importDialogShow = ref(false); // 导入弹出框\n const sTableBar = ref(props.tableBar); // 是否显示tablebar\n const gTableBar = appStore.tableBar;\n const tableSearchShow = ref(false); // 是否带有table search框\n const sTableSort = ref(props.tableSort); // 是否显示排序模式框\n const sTableKit = ref(props.tableKit); // 是否显示工具按钮\n const showPopoverDetail = null;\n const pageLayout = ref(props.layout);\n let actionWidth: number = 0; // 操作列宽度\n let transHash: Recordable<string> | null = null; // 列表列缓存\n const headColumn = ref<VNode[]>([]); // 列表列\n const headColumnInit = ref<VNode[]>([]);\n\n const columnSums: string[] = []; // 合计列\n const columnSumsDecimal: number[] = []; // 合计列位数\n const isIndeterminate = ref([]); // 表头筛选全选\n\n let isAnchor = false; // 是否锚点中列表\n let isScrollbar = false; // 是否dialog中有滚动条\n let isEditContainer = false; // 是否是editContainer标签内\n const columnTreeList = ref([]); // 列表显示、排序数组\n const columnCheckedKeys = ref<string[]>([]); // 列表显示、排序选中数组\n const storageKey = props.refTable + '-' + userStore.loginAccount; // localStorage存储列表字段key\n let lsTableHeads = '';\n let debounceSearch;\n const tableRefs = ref<Record<string, TableInstance | null>>({}); // 表单实例引用,默认空对象\n const tableRef = ref<TableInstance | null>(null); // ElForm 元素引用\n\n // @computed\n const tableSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n /**\n * @todo: pageinfo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:15:00\n */\n const getPageInfo = computed((): PageInfo => {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n if (resultData.value && resultData.value.records !== undefined) {\n pi['currentpagenum'] = resultData.value.current;\n pi['totalpage'] = resultData.value.pages;\n // if (this.sPageSize)\n // pi['size'] = this.sPageSize;\n // else\n pi['recordsperpage'] = resultData.value.size;\n pi['countrows'] = resultData.value.total;\n }\n return pi;\n });\n\n // @method\n\n const setTableRef = (el: TableInstance | null) => {\n tableRef.value = el;\n if (el && props.refTable) tableRefs.value[vref] = el;\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal)\n if (!isEqual(newVal[key], oldVal[key])) {\n diff = true;\n break;\n }\n\n return diff;\n };\n\n /**\n * @todo: close all filter popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 13:17:27\n * @param {*} property\n */\n const closeAllPopover = (property?: string) => {\n const next = { ...popoverVisible.value };\n Object.keys(next).forEach((key) => {\n if (key !== property) next[key] = false;\n });\n popoverVisible.value = next;\n };\n\n const ensurePopoverKey = (propKey: string) => {\n if (popoverVisible.value[propKey] === undefined) popoverVisible.value = { ...popoverVisible.value, [propKey]: false };\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n /** 阻止表头/表格事件冒泡,避免点击筛选面板内输入框时关闭 Popover */\n const wrapPopoverFilterBody = (body: VNode) => (\n <div\n class=\"table-popover__content\"\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onClick={(e: MouseEvent) => e.stopPropagation()}>\n {body}\n </div>\n );\n const getScrollLeft = () => {\n closeAllPopover();\n };\n\n const startLoading = () => {\n loading.value = true;\n };\n const stopLoading = () => {\n loading.value = false;\n };\n\n /**\n * @todo: calculate max height\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:16:19\n * @param {*} rootEl\n */\n const getMaxHeight = (rootEl: HTMLElement | undefined) => {\n if (props.limitHeight)\n if (!isEditContainer)\n if (!isScrollbar)\n if (!isAnchor) {\n if (props.tableType !== 'detail')\n if (props.tableType === 'import') sMaxHeight.value = undefined;\n else if (props.maxHeight)\n // if (this.sTableType === 'expand')\n // this.sMaxHeight = undefined;\n // else\n sMaxHeight.value = props.maxHeight;\n else {\n // tab table\n // const tabPane = this.$el.closest('.el-tabs');\n const tabPane = rootEl?.closest('.el-tab-pane');\n // alert(tabPane.clientHeight);\n if (tabPane) {\n // const offsetTop = tabPane.classList.contains('el-tabs--left') ? 235 : 295;\n if (props.isShowPage) sMaxHeight.value = tabPane.clientHeight - 135;\n else sMaxHeight.value = tabPane.clientHeight - 85;\n // sMaxHeight = document.documentElement.clientHeight - tabPane.offsetTop - offsetTop;\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer)\n // sMaxHeight = sMaxHeight + 30;\n sMaxHeight.value = undefined;\n } else sMaxHeight.value = undefined; // sMaxHeight = sMaxHeight + 30;\n } else {\n // common table\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n // console.log(document.documentElement.clientHeight);\n // console.log(rootEl?.offsetTop);\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 150;\n // console.log(sMaxHeight);\n } // dialog\n else sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 265;\n }\n }\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n if (sMaxHeight.value && Number(sMaxHeight.value) < 150) sMaxHeight.value = undefined;\n };\n\n /**\n * @todo: trans records\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:33:48\n * @param {*} loadAction\n */\n const transRecords = (loadAction?: string) => {\n if (recordsList.value && recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n }\n // add: 增加查询回调方法 2022-11-23\n if (loadAction !== 'create' && props.tableCb) props.tableCb(recordsList.value, resultData.value);\n };\n\n /**\n * @todo: handle import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:43:56\n */\n const handleImport = () => {\n if (props.beforeImport)\n if (props.beforeImport(props.refTable, tableHeads, props.tableData)) {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n } else importDialogShow.value = false;\n else {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n }\n };\n\n const handleExport = () => {\n exportDialogShow.value = true;\n // 设置loading\n exportBtnLoading.value = true;\n };\n\n /**\n * @todo: import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:41:45\n */\n const getImportBtn = computed(() => {\n if (slots.import?.()) {\n let buttonName = t('tableBar.import');\n if (slots.import?.()[0].props?.['import-name']) buttonName = slots.import?.()[0].props?.['import-name'];\n const ref = 'gv-import-' + props.refTable;\n return (\n <GvButton\n bizType=\"import\"\n ref={ref}\n onClick={handleImport}\n loading={importBtnLoading.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: get export btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:22:42\n * @param {*} computed\n */\n const getExportBtn = computed(() => {\n if (slots.export?.()) {\n let buttonName = t('common.export');\n if (slots.export?.()[0].props?.['export-name']) buttonName = slots.export?.()[0].props?.['export-name'];\n const ref = 'gv-export-' + props.refTable;\n return (\n <GvButton\n bizType=\"export\"\n ref={ref}\n onClick={handleExport}\n loading={exportBtnLoading.value}\n disabled={exportBtnDisabled.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: change page size\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 17:24:46\n */\n const runPageSearch = async () => {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n\n const handleSizeChange = async (val: number) => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n pageInfo.value.recordsperpage = val;\n pageInfo.value.currentpagenum = 1;\n sPageSize = val;\n await runPageSearch();\n };\n\n const handleCurrentChange = async (val: number) => {\n pageInfo.value.currentpagenum = val;\n await runPageSearch();\n };\n\n /**\n * @todo: 查询输入框输入响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-19 15:18:03\n * @param {*} val\n */\n const handleTableSearchInput = (val) => {\n debounceSearch(val);\n };\n\n /**\n * @todo: search table input event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-26 22:06:01\n * @param {*} val\n */\n const handleTableSearch = async (val: string) => {\n const fh = {};\n let strFh = '';\n filterHeads.forEach((x: string) => {\n // fixme: 转换@为. 2022-07-20\n let y = x;\n if (y.indexOf('@') > 0) y = y.replace('@', '.');\n if (strFh === '') strFh = toLine(y);\n else strFh += ',' + toLine(y);\n });\n const v = val + '';\n fh['fields'] = strFh;\n fh['val'] = v.trim();\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC['searchfilter'] = fh;\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetch) {\n message(t('table.execSearchWarn'));\n return;\n }\n\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n /**\n * @todo: 列表search框\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-30 17:24:09\n */\n const getTableSearch = () =>\n tableSearchShow.value === true ? (\n <div class=\"gv-table__search\">\n <GvInput\n id=\"gv-table-search\"\n placeholder={`${t('table.tableSearch')}(+)..`}\n prefixIcon=\"gv-icon-sousuo\"\n size=\"default\"\n class=\"gv-table__search-input\"\n onInput={handleTableSearchInput}></GvInput>\n </div>\n ) : null;\n\n /**\n * @todo: table head popover show\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-08 10:43:51\n */\n const handlePopoverShow = () => {\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n if (rootEl) {\n const popOvers = document.querySelectorAll('body>.table-popover');\n const tableBodyWidth = (rootEl.querySelector('.el-table__body-wrapper >.el-table__body') as HTMLElement)?.style.width;\n const clientWidth = document.body.clientWidth - 200 - 20;\n for (let i = 0; i < popOvers.length; i++)\n if ((popOvers[i] as HTMLElement).style.display !== 'none') {\n const bodyWrapper = rootEl.querySelector('.el-table__body-wrapper') as HTMLElement;\n if (bodyWrapper?.scrollLeft ?? 0)\n (popOvers[i] as HTMLElement).style.left = parseInt(tableBodyWidth) - clientWidth + parseInt((popOvers[i] as HTMLElement).style.left) - (bodyWrapper?.scrollLeft ?? 0) + 'px';\n else (popOvers[i] as HTMLElement).style.left = parseInt((popOvers[i] as HTMLElement).style.left) - (bodyWrapper?.scrollLeft ?? 0) + 'px';\n }\n }\n });\n };\n const handlePopoverHide = () => {\n // this.popoverVisible[prop] = false;\n };\n\n /**\n * @todo: 列选中状态切换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:44:01\n * @param {*} columns\n * @param {*} checkedKeys\n */\n const createChangedColumns = (columns, checkedKeys) =>\n columns.map((column) => {\n const target = { ...column };\n if (target.type !== 'action' && target.type !== 'expand') target.hasHidden = !checkedKeys.includes(target.prop);\n return target;\n });\n\n /**\n * @todo: 列顺序和选中方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:43:09\n * @param {*} data\n * @param {*} checked\n * @param {*} childChecked\n */\n const handleColumnCheckChange = (data, checked, childChecked) => {\n const checkedKeys = this.$refs['gv-table-column-tree'].$children[0].getCheckedKeys();\n const hColumns = createChangedColumns(tableHeads, checkedKeys);\n // console.log(hColumns);\n headColumn.value = getTableColumn('recreate', hColumns);\n // 存储到 localStorage\n setStoreLocal(checkedKeys, checked, data);\n };\n\n /**\n * @todo: table refresh btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:45:55\n */\n const handleTableRefresh = async () => {\n // 判断search框中是否有值\n const el = instance?.vnode?.el as HTMLElement | undefined;\n if (el) {\n const inputSearch = el.querySelector('.gv-table__search-input .el-input__inner');\n if (inputSearch && inputSearch.value !== undefined && inputSearch.value !== null && inputSearch.value !== '') {\n inputSearch.value = '';\n handleTableSearch('');\n } else {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n }\n };\n\n /**\n * @todo: tablebar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:21:41\n */\n const getTableBar = () => {\n const btns: any[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots && defaultSlots.length > 0)\n defaultSlots.forEach((x: VNode) => {\n // add table btn bar\n if (typeof x.type === 'object' && x.type !== null && 'name' in x.type && x.type.name === 'GvButton') btns.push(x);\n });\n // export btn\n const exportSlots = slots.export?.();\n if (exportSlots && exportSlots.length > 0)\n exportSlots.forEach(() => {\n btns.push(getExportBtn.value);\n });\n\n // import btn\n const importSlots = slots.import?.();\n if (importSlots && importSlots.length > 0)\n importSlots.forEach(() => {\n btns.push(getImportBtn.value);\n });\n\n // console.log(btns);\n return btns;\n };\n\n /**\n * @todo: get kit bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:41:30\n */\n const getKitBar = () => {\n let isVisible = true;\n if (sTableKit.value !== undefined) isVisible = sTableKit.value;\n if (props.tableType === 'import' || props.tableType === 'detail' || props.tableType === 'expand' || props.tableType === 'export') isVisible = false;\n // 行编辑去掉隐藏列功能\n if (isEditTable === true) isVisible = false;\n return isVisible === true ? (\n <div class=\"gv-table__kitbar\">\n <ElButtonGroup>\n <ElButton\n style=\"width: 37px\"\n size={tableSize.value}\n icon={Refresh}\n onClick={handleTableRefresh}\n />\n <ElPopover\n placement=\"bottom-end\"\n width=\"150\"\n trigger=\"click\">\n {{\n reference: () => (\n <ElButton\n size={tableSize.value}\n style={{ width: '37px' }}\n icon={Operation}\n />\n ),\n default: () => (\n <ElTree\n ref=\"gv-table-column-tree\"\n node-key=\"columnProp\"\n tree-data={columnTreeList}\n check-on-click-node={true}\n default-checked-keys={columnCheckedKeys.value}\n show-checkbox\n draggable\n on-check-change={handleColumnCheckChange}\n style={{ maxHeight: '450px', overflow: 'hidden auto' }}\n class=\"gv-table-column-tree\"\n />\n ),\n }}\n </ElPopover>\n </ElButtonGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: sort mode\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:17:36\n */\n const getSortModel = () => {\n let isVisible = true;\n if (sTableSort.value !== undefined) isVisible = sTableSort.value;\n else isVisible = props.tableType !== 'import';\n return isVisible === true ? (\n <div\n class=\"gv-table__sortmode\"\n style={{ marginRight: `${tableSearchShow.value === true ? '10px' : '0'}` }}>\n <i class=\"iconfont gv-icon-paixu2\" />\n <ElRadioGroup\n modelValue={tableSortMode.value}\n onUpdate:modelValue={(val: number) => {\n tableSortMode.value = val;\n }}\n ref=\"gv-table-sortmode\">\n <ElRadio value={1}>{t('common.currentPage')}</ElRadio>\n <ElRadio\n value={2}\n disabled={pageInfo.value?.totalpage === 1}>\n {t('common.all')}\n </ElRadio>\n </ElRadioGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: column filter handler\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:27:41\n * @param {*} e\n * @param {*} propField\n * @param {*} type\n */\n const columnFilterHandler = async (e: MouseEvent, propField: string, type: string) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n let filterValue = '';\n switch (type) {\n case 'text':\n case 'number':\n filterValue = inputHtml.value;\n if (filterValue.length === 0)\n // Notify.alert('请输入筛选内容', 'warning');\n return;\n\n break;\n case 'date':\n filterValue = dateHtmlArr[0].value + '|' + dateHtmlArr[1].value;\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked'))\n if (check.innerText !== t('common.checkAll'))\n filterValue = filterValue !== '' ? filterValue + '|' + check.querySelector('.el-checkbox__original').value : check.querySelector('.el-checkbox__original').value;\n\n break;\n }\n if (filterValue.length === 0 || filterValue === '|') {\n message(t('table.columnFilterWarn'));\n return;\n }\n\n if (type === 'date') {\n const pattern = /\\d{4}-\\d{2}-\\d{2}\\\\|\\d{4}-\\d{2}-\\d{2}/;\n if (!pattern.test(filterValue)) {\n message(t('table.columnFilterDateWarn'));\n return;\n }\n }\n\n if (propField !== null) {\n const fh = {};\n fh[toLine(propField.replace('@', '.')) + '|' + type] = filterValue;\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n // 标识筛选列(带fix)\n const tableFixHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n if (tableFixHeader !== null) {\n const fixColumns = tableFixHeader.querySelectorAll('.el-table__cell');\n if (fixColumns !== null) {\n const fixLen = fixColumns.length;\n for (let i = 0; i < fixLen; i++) {\n const h = fixColumns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n }\n }\n }\n };\n /**\n * @todo: 列表头筛选重置\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-20 10:05:08\n * @param {*} e\n */\n const columnFilterHandlerReset = async (e: MouseEvent, propField: string, type: stringType) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n switch (type) {\n case 'text':\n case 'number':\n inputHtml.value = '';\n break;\n case 'date':\n dateHtmlArr[0].value = '';\n dateHtmlArr[1].value = '';\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked')) {\n // check.classList.remove('is-checked');\n check.querySelector('.el-checkbox__original').checked = false;\n check.querySelector('.el-checkbox__input').classList.remove('is-checked');\n }\n\n break;\n }\n\n if (propField !== null) {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fh = fC.value['headfilter'];\n if (fh !== undefined && fh != null) delete fh[toLine(propField.replace('@', '.')) + '|' + type];\n\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n\n if (type !== 'date') {\n const primaryBtn = popoverHtml.querySelector('.el-button--primary');\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n const tableFixedHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n // fixed: 解决列表没有锁定列时报错问题 2023-10-07\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n }\n }\n };\n\n /**\n * @todo: set column width by column name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:12:01\n * @param {*} label\n * @param {*} query\n * @param {*} edit\n */\n const getColWidth = (label: string, query: boolean, edit: boolean) => {\n if (!label) return;\n let label2 = label;\n if (lang === 'en') label2 = label.toLowerCase();\n let sWidth = 0;\n if (label2.indexOf(t('table.date')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.month2')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.month')) !== -1) sWidth = 90;\n else if (label2.indexOf(t('table.time')) !== -1) sWidth = 130;\n else if (label2.indexOf(t('table.deliveryTime')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.name')) !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.userAccount')) !== -1) sWidth = 120;\n else if (label === t('table.customerName')) sWidth = 115;\n else if (label2.indexOf(t('table.approve')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.audit')) !== -1) sWidth = 110;\n else if (label === t('table.operator')) sWidth = 110;\n else if (label2.indexOf(t('table.staff')) !== -1) sWidth = 100;\n else if (label.indexOf(t('table.whether')) !== -1) sWidth = 110;\n else if (label === t('table.enableStatus')) sWidth = 110;\n else if (label === t('table.orderStatus')) sWidth = 110;\n else if (label2 === t('table.status')) sWidth = 90;\n else if (label2.indexOf(t('table.status')) !== -1) sWidth = 90;\n else if (label === t('table.vin')) sWidth = 185;\n else if (label === t('table.carNo')) sWidth = 105;\n else if (label2.indexOf(t('table.phone')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.tel')) !== -1) sWidth = 110;\n else if (label === t('table.sex')) sWidth = 90;\n else if (label2.indexOf(t('table.type')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.amount')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.money')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.balance')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.unitPrice')) !== -1) sWidth = 95;\n else if (label2.indexOf(t('table.times')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.number')) !== -1) sWidth = 140;\n else if (label2.indexOf(t('table.code')) !== -1) sWidth = 135;\n else if (label2.indexOf(t('table.odd')) !== -1) sWidth = 230;\n else if (label2.indexOf(t('table.unit')) !== -1) sWidth = 110;\n else if (label2.indexOf('省') !== -1) sWidth = 90;\n else if (label2.indexOf('市') !== -1) sWidth = 100;\n else if (label2.indexOf('区') !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.color')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.storageAge')) !== -1) sWidth = 105;\n else if (label2.indexOf(t('table.chassis')) !== -1) sWidth = 105;\n else if (label2.indexOf('排放标准') !== -1) sWidth = 115;\n else if (label2 === t('table.brand')) sWidth = 105;\n else if (label === t('table.series')) sWidth = 105;\n else if (label === t('table.strain')) sWidth = 105;\n else if (label === '运输方式') sWidth = 100;\n else if (label2.indexOf(t('table.rate')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.level')) !== -1) sWidth = edit === true ? 140 : 115;\n // fixme: 增加表头query宽度判断 2022-04-30\n if (query === true && sWidth > 0) sWidth += 15;\n\n // fixme: 增加表头edit宽度判断 2022-06-11\n if (edit === true && sWidth > 0) sWidth += 20;\n return sWidth;\n };\n\n /**\n * @todo: table cell formatter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:19:28\n * @param {*} row\n * @param {*} column\n * @param {*} cellValue\n * @param {*} index\n */\n const columnFormatter = (row, column, cellValue, index: number) => {\n // console.log(column);\n // console.log(cellValue);\n if (cellValue != null && cellValue.v !== undefined) return cellValue.v;\n else return cellValue === undefined ? '' : cellValue;\n };\n\n /**\n * @todo: table header search input change method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 09:55:46\n * @param {string} val\n */\n const handleColumnFilter = (val: string) => {\n const popoverHtmlList = Array.from(document.body.querySelectorAll<HTMLElement>('body>.table-popover'));\n let popoverHtml: HTMLElement | undefined;\n for (const pop of popoverHtmlList)\n if (pop.style.display !== 'none') {\n popoverHtml = pop;\n break;\n }\n if (!popoverHtml) return;\n const primaryBtn = popoverHtml.querySelector<HTMLElement>('.el-button--primary');\n if (!primaryBtn) return;\n if (val !== undefined && val !== null && val !== '') {\n primaryBtn.removeAttribute('disabled');\n primaryBtn.classList.remove('is-disabled');\n } else {\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n };\n /**\n * @todo: set header filter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:23:58\n * @param {string} type\n * @param {string} label\n * @param {string} prop\n * @param {string} dicType\n * @param {string} filtercode\n */\n const renderHeadFilter = (type: string, label: string, prop: string, dicType: string | undefined, filtercode: string | undefined) => {\n let render: VNode | null = null;\n let fc = filtercode !== undefined ? filtercode : '';\n switch (type) {\n case 'text':\n case 'number':\n render = (\n <div>\n <GvInput\n placeholder={`${t('table.search')} - ${label}`}\n size={tableSize.value}\n onInput={handleColumnFilter}\n vref={prop}></GvInput>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'date':\n render = (\n <div>\n <GvDatePicker\n placeholder={`${t('table.search')} - ${label}`}\n size={tableSize.value}\n type=\"daterange\"\n format={dicType}\n value-format={dicType}\n // onChange={handleColumnFilter}\n vref={prop}\n />\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'dic':\n if (dicType) {\n let ret = [];\n const src = dicType.toLowerCase();\n let dictCache;\n if (this.$store && this.$store.getters) dictCache = this.$store.getters.dictCache[src];\n if (dicType !== 'xzqh' && dictCache) ret = dictCache;\n // 生成字典列表\n else if (dicType === 'xzqh') {\n if (label.indexOf('省') >= 0) fc = '0000$';\n // else if (label.indexOf('市') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9]00$';\n // else if (label.indexOf('区') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9][0-9][1-9]$';\n\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dictDivision;\n if (dict) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n } else {\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dict[src];\n if (dict) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n }\n // 设置过滤\n let ret2 = ret;\n if (fc) {\n const reg = new RegExp(fc, 'i');\n ret2 = ret.filter((x) => reg.test(x.c));\n }\n // ret.map((x) => {\n // checkList.push(x.c);\n // });\n // console.log(checkList);\n // 最大显示100个\n if (ret2 && ret2.length !== undefined && ret2.length > 0) {\n ret2.splice(50);\n render = (\n <div>\n <div>\n <ElCheckbox\n checked={false}\n key=\"checkAll\"\n label={t('common.checkAll')}\n style={{ display: 'block' }}\n indeterminate={isIndeterminate[prop]}\n onChange={handleDictCheckAll}\n class=\"gv-checkbox\">\n {t('common.checkAll')}\n </ElCheckbox>\n <ElDivider style=\"margin: 5px 0px\" />\n {ret2.map((x) => (\n <ElCheckbox\n checked={false}\n key={x.c}\n label={x.c}\n style={{ display: 'block' }}\n onChange={handleDictCheck}\n class=\"gv-checkbox\">\n {lang === 'zh-CN' ? x.t : x.e}\n </ElCheckbox>\n ))}\n </div>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n disabled=\"true\"\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n } else render = null;\n } else render = null;\n\n break;\n }\n return render ? wrapPopoverFilterBody(render) : null;\n };\n\n /**\n * @todo: open popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:22:13\n * @param {*} type\n * @param {*} label\n * @param {*} prop\n * @param {*} dicType\n * @param {*} filtercode\n * @param {*} event\n */\n /** 点击表头筛选箭头:仅关闭其它列 Popover,开关由 ElPopover trigger=click + v-model 处理 */\n const handlePopoverSlotClick = (event: MouseEvent, prop: string) => {\n event?.stopPropagation();\n closeAllPopover(prop);\n };\n\n /**\n * @todo: render column item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:37:55\n */\n const renderColumnItem = (item: TableHeadItem, index: number, loadAction: string | undefined, tableFixed: string | undefined) => {\n const {\n prop,\n label,\n fixed,\n width,\n minWidth = 135,\n align = 'left',\n formatter,\n type = 'text',\n dicType,\n query = false,\n render,\n edit = false,\n format,\n cellBlur,\n cellEnter,\n cellChange,\n hidden = false,\n hasHidden = false,\n filtercode,\n showLabel,\n dicRemote,\n isreload = true,\n cb,\n multiple = false,\n dateType = 'date',\n selectable,\n min,\n max,\n collapseTags = false, // 多选字典tag是否折叠\n showLabelProp, // 表选showLabel列\n columnFilter = true, // 表头是否带筛选\n multiLabel = '', // 多级表头\n heads, // 多级表头\n focus,\n } = item;\n let reserveSelection = false;\n if (selectable) reserveSelection = true;\n let sHidden = false;\n if (hidden === true) sHidden = true;\n if (hasHidden === true) sHidden = true;\n if (sHidden === true) return null;\n\n let sLabel = label;\n let sProp = prop;\n if (prop && prop.indexOf('@') > 0) sProp = prop.split('@')[1];\n const key = loadAction === 'create' ? Math.random() : sProp;\n\n let placement: TPopoverPlacement = 'bottom-start';\n if (index >= tableHeads.length - 2) placement = 'bottom-end';\n let sFixed = sTableType === 'expand' ? undefined : fixed;\n if (tableFixed === 'n') sFixed = undefined;\n if (sTableAction === 'right') sFixed = undefined;\n // console.log(sFixed);\n if (sFixed) sLabel = sLabel + '';\n if (query === true) {\n sLabel = sLabel + '(Q)';\n filterHeads.push(prop);\n tableSearchShow.value = true;\n }\n ensurePopoverKey(prop);\n const sortable = sTableType === 'expand' ? false : 'custom';\n\n let sWidth;\n if (width !== 'auto')\n if (width) sWidth = width;\n else sWidth = getColWidth(label, query, edit);\n if (isEditTable === false && edit === true) isEditTable = true;\n\n // 多级表头\n if (multiLabel && multiLabel !== '') {\n if (heads && Array.isArray(heads)) {\n const multiLabels: VNode[] = [];\n heads.forEach((x) => {\n const hType = x.type || 'text';\n let hSLabel = x.label;\n let hSProp = x.prop;\n if (x.prop && x.prop.indexOf('@') > 0) hSProp = x.prop.split('@')[1];\n const hKey = loadAction === 'create' ? Math.random() : hSProp;\n\n let hSFixed = sTableType === 'expand' ? undefined : x.fixed;\n if (tableFixed === 'n') hSFixed = undefined;\n // console.log(sFixed);\n if (hSFixed) hSLabel = hSLabel + '';\n if (x.query === true) {\n hSLabel = hSLabel + '(Q)';\n filterHeads.push(x.prop);\n tableSearchShow.value = true;\n }\n let hReserveSelection = false;\n if (x.selectable) hReserveSelection = true;\n // 初始化 列的筛选popover都是隐藏的\n ensurePopoverKey(x.prop);\n const hSortable = sTableType === 'expand' ? false : 'custom';\n\n let hSWidth;\n if (x.width !== 'auto')\n if (x.width) hSWidth = x.width;\n else hSWidth = getColWidth(x.label, x.query, x.edit);\n multiLabels.push(\n <ElTableColumn\n fixed={hSFixed}\n prop={hSProp}\n label={hSLabel}\n width={hSWidth}\n align={x.align}\n column-key={hSProp}\n key={hKey}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={hSortable}\n selectable={x.selectable}\n reserveSelection={hReserveSelection}\n header-align={x.align || 'left'}\n style={{ display: sHidden ? 'none' : '' }}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[x.prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [x.prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(hType, x.label, x.prop, x.dicType, x.filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, x.prop)}>\n {hSLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>,\n );\n });\n return <ElTableColumn label={multiLabel + ''}>{multiLabels}</ElTableColumn>;\n }\n } else if (typeof render === 'function') {\n // 自定义字段 render\n let className = 'gv-cell__render';\n if (edit === true) className += ' gv-cell__isedit';\n return (\n <ElTableColumn\n // fixed = {fixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name={className}>\n {{\n default: (scope) => {\n const render1 = render(scope, sProp);\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n } else if (edit === true)\n return (\n <ElTableColumn\n style={{ display: sHidden ? 'none' : '' }}\n fixed={sFixed}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n // filters={this.columnFilters}\n // filter-method={this.filterHandler}\n // filter-placement='bottom-start'\n class-name=\"gv-cell__isedit\">\n {{\n default: (scope) => {\n // if (this.renderMap[`${scope.$index}-${sProp}`] === undefined) {\n const render1 = renderRowEdit(\n scope,\n label,\n sProp,\n prop,\n type,\n dicType,\n format,\n cellBlur,\n cellEnter,\n filtercode,\n showLabel,\n dicRemote,\n isreload,\n cb,\n multiple,\n dateType,\n render,\n cellChange,\n min,\n max,\n collapseTags,\n showLabelProp,\n focus,\n );\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n else if (type === 'tag')\n // 设置tag\n return (\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name=\"gv-cell__render\">\n {{\n default: (scope) =>\n scope.row[sProp] !== null && typeof scope.row[sProp] === 'object' ? (\n scope.row[sProp].v ? (\n <GvTag>{scope.row[sProp].v}</GvTag>\n ) : null\n ) : scope.row[sProp] ? (\n <GvTag>{scope.row[sProp]}</GvTag>\n ) : null,\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else if (\n dicType !== 'company' &&\n dicType !== 'dept' &&\n dicType !== 'user' &&\n label.indexOf('市') === -1 &&\n label.indexOf('区县') === -1 &&\n label.indexOf('区/县') === -1 &&\n props.tableType !== 'list' &&\n props.tableType !== 'detail' &&\n props.tableType !== 'expand' &&\n props.tableType !== 'import'\n )\n if (columnFilter !== true)\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(type, label, prop, dicType, filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, prop)}>\n {sLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>\n );\n else\n return (\n <ElTableColumn\n fixed={sFixed}\n prop={sProp}\n style={{ display: sHidden ? 'none' : '' }}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n selectable={selectable}\n reserveSelection={reserveSelection}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => <div class=\"render__header\">{props.tableType === 'list' ? sLabel : label}</div>,\n }}\n </ElTableColumn>\n );\n };\n\n /**\n * @todo: action column\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:08:55\n */\n const renderAction = (scope, content: string[], action: any[], render: Fn | undefined, confirmArr: boolean[], iconArr: string[]) => {\n let sContent = content;\n if (render) sContent = render(scope, content);\n return (\n <div class=\"flex\">\n {sContent.map((item: string, index: number) => {\n let x = item;\n let xx = 't';\n let disabled = false;\n if (item.indexOf('|') > 0) {\n const arr = item.split('|');\n x = arr[0];\n if (arr[1] === 'd') {\n xx = 't';\n disabled = true;\n // xx = arr[1];\n }\n }\n // console.log(item);\n let confirms = false;\n if (confirmArr) confirms = confirmArr[index];\n let detail = false;\n let icon = '';\n\n let actionType = '';\n if (x.indexOf(t('table.edit')) !== -1 || x.indexOf(t('table.modify')) !== -1 || x.indexOf(t('table.update')) !== -1) icon = 'el-icon-edit';\n else if (x.indexOf(t('table.delete')) !== -1 || x.indexOf(t('table.cancel')) !== -1) {\n icon = 'el-icon-delete';\n confirms = true;\n } else if (x.indexOf(t('table.add')) !== -1) icon = 'gv-icon-add';\n else if (x.indexOf(t('table.scheduling')) !== -1 || x.indexOf(t('table.production')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.append')) !== -1) {\n actionType = '1';\n icon = 'gv-icon-baocun2';\n } else if (x.indexOf(t('table.disabled')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.cancel1')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.close')) !== -1) {\n icon = 'el-icon-circle-close';\n confirms = true;\n } else if (x.indexOf(t('table.detail')) !== -1) {\n icon = 'gv-icon-mingxi';\n detail = true;\n } else if (x.indexOf(t('table.logging')) !== -1) {\n icon = 'gv-icon-daiban';\n detail = true;\n } else if (x.indexOf(t('table.info')) !== -1 || x.indexOf(t('table.infos')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.view')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.message')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.price')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.money')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.dispatch')) !== -1) icon = 'gv-icon-winfo-icon-zhipai';\n else if (x.indexOf(t('table.adjust')) !== -1) icon = 'gv-icon-wujiliandongdizhi';\n else if (x.indexOf(t('table.leaveFactory')) !== -1 || x.indexOf(t('table.delivery')) !== -1) icon = 'gv-icon-paichesonghuodan';\n else if (x.indexOf(t('table.quit')) !== -1 || x.indexOf(t('table.transfer')) !== -1) icon = 'gv-icon-zhipai';\n else if (x.indexOf(t('table.submit')) !== -1 || x.indexOf(t('table.report')) !== -1) icon = 'gv-icon-tijiao';\n else if (x.indexOf(t('table.download')) !== -1) icon = 'gv-icon-xiazai';\n else if (x.indexOf(t('table.upload')) !== -1) icon = 'gv-icon-fujian';\n else if (x.indexOf(t('table.notify')) !== -1) icon = 'gv-icon-huodong';\n else if (x.indexOf(t('table.send')) !== -1) icon = 'gv-icon-xiazaidaorumoban1x';\n else if (x.indexOf(t('table.freeze')) !== -1) icon = 'gv-icon-dongjie';\n else if (x.indexOf(t('table.apply')) !== -1) icon = 'gv-icon-biaoshilei_yuanchengshengji';\n else if (x.indexOf(t('table.unfreeze')) !== -1) icon = 'gv-icon-jiedong';\n else if (x.indexOf(t('table.qrcode')) !== -1) icon = 'gv-icon-erweima';\n else if (x.indexOf(t('table.build')) !== -1) icon = 'gv-icon-rocket';\n else if (x.indexOf(t('table.confirm')) !== -1) icon = 'gv-icon-tianshenpi';\n else if (x.indexOf(t('table.proxyPay')) !== -1) icon = 'gv-icon-bengchefenleijiageguanli';\n else if (x.indexOf(t('table.open')) !== -1) icon = 'gv-icon-addNode';\n else if (x.indexOf(t('table.audit')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.top')) !== -1) icon = 'gv-icon-zhidingxian';\n else if (x.indexOf(t('table.publish')) !== -1) icon = 'gv-icon-fabu';\n else if (x.indexOf(t('table.withdraw')) !== -1) icon = 'gv-icon-fanhui5';\n else if (x.indexOf(t('table.cost')) !== -1) icon = 'gv-icon-yingshou';\n else if (x.indexOf(t('table.approve')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.reject')) !== -1) icon = 'gv-icon-shenqingbohui';\n else if (x.indexOf(t('table.exec')) !== -1) icon = 'gv-icon-kaishi_yunhang';\n else if (x.indexOf(t('table.recover')) !== -1) icon = 'gv-icon-huifu1';\n else if (x.indexOf(t('table.dispose')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.ok')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.select')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.lock')) !== -1) icon = 'el-icon-lock';\n else if (x.indexOf(t('table.unLock')) !== -1) icon = 'el-icon-unlock';\n else if (x.indexOf(t('table.enable')) !== -1) icon = 'gv-icon-yunhang';\n else if (x.indexOf(t('table.transmit')) !== -1) icon = 'gv-icon-xiada';\n else if (x.indexOf(t('table.putaway')) !== -1) icon = 'el-icon-top';\n else if (x.indexOf(t('table.soldOut')) !== -1) icon = 'el-icon-bottom';\n else if (x.indexOf(t('table.transferPeople')) !== -1) icon = 'gv-icon-zhuanpai1';\n else if (x.indexOf(t('table.copy')) !== -1) icon = 'el-icon-copy-document';\n else if (x.indexOf(t('table.followUp')) !== -1) icon = 'gv-icon-mingdangenjin';\n else if (x.indexOf(t('table.circleCheck')) !== -1) icon = 'gv-icon-huanjiance';\n else if (x.indexOf(t('table.completed')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.finished')) !== -1) icon = 'gv-icon-wangongguanli';\n else if (x.indexOf(t('table.beCompleted')) !== -1) icon = 'gv-icon-wangongqueren';\n else if (x.indexOf(t('table.openCard')) !== -1) icon = 'gv-icon-daka-copy';\n else if (x.indexOf(t('table.closeCard')) !== -1) icon = 'gv-icon-guanqia';\n else if (x.indexOf(t('table.clockIn')) !== -1) icon = 'gv-icon-qiandao';\n else if (x.indexOf(t('table.preview')) !== -1) icon = 'el-icon-view';\n else if (x.indexOf(t('table.replace')) !== -1) icon = 'gv-icon-tihuantupian';\n else if (x.indexOf(t('table.settlement')) !== -1) icon = 'gv-icon-eduguanli';\n else if (x.indexOf(t('table.inWarehouse')) !== -1) icon = 'gv-icon-caituiruku';\n else if (x.indexOf(t('table.save')) !== -1) {\n icon = 'gv-icon-baocun1';\n actionType = '1';\n } else icon = 'el-icon-document-copy';\n\n // added by andy.ten@tom.com 2024-08-14 增加自定义按钮icon\n if (iconArr && Array.isArray(iconArr) && iconArr.length > index && iconArr[index]) icon = iconArr[index];\n if (sTableActionIcon === false) icon = '';\n if (confirms === true)\n if (sTableConfirm === false)\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm('是否?').then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm(`${t('table.isConfirm')} ${x} ${t('table.action')} ?`).then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n else\n return (\n <GvPopconfirm\n title={`${t('table.isConfirm')} ${x} ${t('table.action')} ?`}\n onConfirm={() => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n }}>\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n }}\n </GvPopconfirm>\n );\n else if (detail === true)\n return (\n <ElPopover\n title={x}\n placement={detailPlacement}\n trigger=\"click\"\n showArrow={true}\n onAfter-enter={() => handleDetailPopoverShow(action, index, scope.row, scope.$index)}\n popperClass=\"gv-popconfirm\">\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n default: () => showPopoverDetail,\n }}\n </ElPopover>\n );\n else\n // action btn\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size={tableSize.value}\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}\n icon={icon}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size={tableSize.value}\n type=\"text\"\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n startLoading();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n })}\n </div>\n );\n };\n\n /**\n * @todo: get table header columns\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 12:03:16\n * @param {*} loadAction\n * @param {*} tableColumns\n */\n const getTableColumn = (loadAction?: string, tableColumns?: TableHeadItem[]) => {\n const res: VNode[] = [];\n tableHeads = loadAction === 'recreate' ? tableColumns! : props.tableHead;\n // 从localStorage中获取已保存的列表显示信息\n if (loadAction === 'create') {\n lsTableHeads = getStorage(storageKey);\n if (lsTableHeads) {\n const thd: TableHeadItem[] = [];\n const lsTableHeadsArr = lsTableHeads.split(',');\n let startIndex = 0;\n if (tableHeads[0].type === 'expand') {\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n startIndex = 0;\n if (tableHeads[1].type === 'action') thd[1] = { ...tableHeads[1] } as TableHeadItem;\n startIndex = 1;\n } else if (tableHeads[0].type === 'action') {\n startIndex = 0;\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n }\n\n lsTableHeadsArr.forEach((x: string, index: number) => {\n const xx = x.split('|');\n const ff = tableHeads.filter((f) => f.prop === xx[0]);\n if (ff.length > 0) {\n if (ff[0].hidden !== true) {\n ff[0].hasHidden = xx[1] === 't';\n const treeNode = {\n columnProp: ff[0].prop,\n label: ff[0].label,\n };\n if (loadAction === 'create') {\n (columnTreeList.value as any[]).push(treeNode);\n if (ff[0].hasHidden !== true && xx[1] !== 't') columnCheckedKeys.value.push(ff[0].prop);\n }\n }\n thd[index + startIndex] = { ...ff[0] };\n }\n });\n tableHeads = thd;\n }\n }\n\n // 第一列为序号列\n // let fixed = this.tableType !== 'detail';\n let fixed: string | undefined = sTableAction;\n if (tableHeads[0].type === 'expand') {\n fixed = undefined as unknown as string;\n sTableType = 'expand';\n }\n\n if (sTableType === 'expand') fixed = undefined as unknown as string;\n // 如果是edit多选列表,则去掉列锁定\n let tableFixed = 'y';\n if (tableHeads.some((x) => x.multiple === true)) {\n tableFixed = 'n';\n fixed = undefined;\n }\n\n if (props.multi === true) {\n fixed = undefined;\n tableFixed = 'n';\n }\n\n // 添加展开列\n if (tableHeads[0].type === 'expand')\n res.push(\n <ElTableColumn\n type=\"expand\"\n key=\"expand\"\n column-key=\"expand\"\n prop=\"expand\"\n width=\"42\"\n fixed={fixed}>\n {{ default: (scope: any) => tableHeads[0].render?.(scope) }}\n </ElTableColumn>,\n );\n let rownumWidth = '55';\n if (pageInfo.value?.currentpagenum)\n if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 10000) rownumWidth = '65';\n else if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 1000) rownumWidth = '57';\n\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed={fixed}\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n // console.log(this.pageInfo.current);\n // console.log((this.pageInfo.current === -1 ? 0 : this.pageInfo.current - 1) * (this.pageInfo.size === -1 ? 0 : this.pageInfo.size));\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n // add: 第二列判断是否是多选框 2022-06-11\n if (props.multi === true)\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed=\"left\"\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n\n const actionHead = tableHeads.filter((x) => x.type === 'action');\n if (sTableAction === 'left')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1) actionWidth = content.join('').length * 30;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n filterHeads = [];\n tableHeads.forEach((item: TableHeadItem, index: number) => {\n if (item.type !== 'expand' && item.type !== 'action') {\n const columnVNode = renderColumnItem(item, index, loadAction, tableFixed);\n if (columnVNode) res.push(columnVNode);\n if (!lsTableHeads && loadAction === 'create')\n if (item.hidden !== true) {\n const treeNode = {\n columnProp: item.prop,\n label: item.label,\n };\n (columnTreeList.value as any[]).push(treeNode);\n columnCheckedKeys.value.push(item.prop);\n }\n }\n\n // this.$set(this.tableHead, index, item);\n // if (loadAction === 'create')\n // this.$set(this.resultData, index, item);\n });\n if (sTableAction === 'right')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1)\n if (lang === 'zh_CN') actionWidth = content.join('').length * 30;\n else actionWidth = content.join('').length * 18;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n // this.setDataLoaded(false);\n return res;\n };\n\n /**\n * @todo: table sort\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 17:45:10\n */\n const sortMethod = async ({ column, prop, order }: { column: Recordable<any>; prop: string | null; order: 'ascending' | 'descending' | null }) => {\n const fieldName = prop || column?.property;\n const sortingType = order ?? column?.order ?? null;\n if (tableSortMode.value === 1) {\n // 本页排序\n let sumData = {}; // 放置总计一行数据\n recordsList.value.forEach((item) => {\n if (item.name === t('common.total')) sumData = item;\n });\n if (sortingType === null)\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a['rownums'];\n let row2 = b['rownums'];\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n else if (sortingType === 'ascending' || sortingType === null) {\n // 正序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n // 删除table中的总计\n recordsList.value.forEach((item, index) => {\n if (item.name === t('common.total')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n } else if (sortingType === 'descending') {\n // 倒序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row2 - row1;\n else return row2.toString().localeCompare(row1.toString());\n });\n recordsList.value.map((item, index) => {\n if (item.name === t('common.aggregate')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n }\n } else {\n // 后端排序\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn = (instance?.exposed?.fetch as Fn) || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const oi: Recordable<string> = {};\n\n oi['orderfilter'] = fieldName;\n oi['ordertype'] = sortingType === 'ascending' ? 'asc' : 'desc';\n fC['orderinfo'] = oi;\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n\n // 隐藏popover\n popoverVisible.value[fieldName] = false;\n document.body.click();\n };\n\n /**\n * @todo: row dblclick event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-08 11:15:41\n * @param {*} row\n * @param {*} column\n * @param {*} event\n */\n const rowDblClick = (row: Recordable<any>, column: TableColumnCtx<Recordable<any>> | null, event: MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (!target) return;\n // fixme: 屏蔽行中带有icon图标双击事件 2022-12-12\n if (target.tagName === 'I') return;\n else {\n const cell = target.closest('.el-table__cell');\n if (cell && hasClass(cell as HTMLElement, 'el-table__expand-column')) return;\n }\n if (isEditTable === false)\n if (typeof attrs.onRowDblclick === 'function') emit('row-dblclick', row, column, event);\n else {\n const tr = target.closest('.el-table__row');\n if (!tr) return;\n const tds = tr.children;\n let firstBtn: HTMLElement | null = null;\n for (let i = 0; i < tds.length; i++) {\n const btnArr = tds[i].querySelectorAll<HTMLElement>('.cell button.gv-button');\n for (let j = 0; j < btnArr.length; j++) {\n const btn = btnArr[j];\n // fixme: 解决隐藏按钮后双击仍然调用问题 2022-10-09\n if (btn && btn.style.display !== 'none') {\n firstBtn = btn;\n break;\n }\n }\n if (firstBtn) break;\n }\n firstBtn?.click();\n }\n };\n\n /**\n * @todo: 合并表格行或合并列方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-16 14:27:07\n */\n // const handleSpanMethod = (columnObj) => {\n // props.spanMethod(columnObj);\n // };\n\n // const getSummaries = (param) => {\n // const { columns, data } = param;\n // const sums = [];\n // columns.forEach((column, index) => {\n // if (column.columnKey === 'rownums') {\n // sums[index] = t('common.total');\n // return;\n // }\n // if (column.property === 'multi' || column.columnKey === 'caozuo' || column.columnKey === 'expand') return;\n // const keyIndex = columnSums.indexOf(column.property);\n // if (keyIndex !== -1) {\n // const values = data.map((item) => Number(item[column.property]));\n // if (!values.every((value) => isNaN(value))) {\n // sums[index] = values.reduce((prev, curr) => {\n // const value = Number(curr);\n // if (!isNaN(value)) return prev + curr;\n // else return prev;\n // }, 0);\n // const decimal = columnSumsDecimal[keyIndex];\n // sums[index] = amountFormat(sums[index], decimal);\n // sums[index] += '';\n // } else sums[index] = '';\n // } else return;\n // });\n // return sums;\n // };\n\n /**\n * @todo: 拖动表头改变列宽度响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-01-07 10:16:42\n * @param {*} newWidth\n * @param {*} oldWidth\n * @param {*} column\n * @param {*} event\n */\n // const headerDragend = (newWidth, oldWidth, column, event) => {\n // // fixed: 解决fix table 表头列宽度改变时fix列高度不正确问题 2024-01-07\n // nextTick(() => {\n // // fixCellH.style.height = cellH.offsetHeight;\n // this.$refs[this.vref].doLayout();\n // const fixCellH = this.$refs[this.vref].$el.querySelector('.el-table__fixed-header-wrapper>.el-table__header .el-table__cell');\n // const cellH = this.$refs[this.vref].$el.querySelector('.el-table__header-wrapper>.el-table__header .el-table__cell');\n // // console.log(cellH.offsetHeight);\n // fixCellH.style.height = cellH.offsetHeight + 'px';\n // // console.log(fixCellH.style.height);\n // });\n // });\n\n // @watch\n watch(\n () => props.tableHead,\n (newVal, prevVal) => {\n if (newVal.length !== prevVal.length) headColumn.value = getTableColumn();\n else {\n const res = difference(newVal, originTableHead);\n if (res === true) headColumn.value = getTableColumn();\n }\n },\n );\n watch(\n () => sMaxHeight.value,\n () => {\n if (props.tableType !== 'import')\n if (isScrollbar === false)\n if (isAnchor === false) {\n if (sHeight) sMaxHeight.value = sHeight;\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n },\n );\n watch(\n () => props.tableData,\n (newValue) => {\n resultData.value = newValue;\n },\n );\n\n watch(\n () => resultData.value,\n (newValue) => {\n if (newValue) {\n recordsList.value = newValue.records || newValue;\n // fixme: 解决无法获取结果集时报错问题 2022-06-05\n if (recordsList.value === undefined || recordsList.value.length === undefined) recordsList.value = [];\n if (recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n if (headColumn.value.length === 0) {\n tableHeads.forEach((x: TableHeadItem) => {\n let sProp = x.prop;\n if (sProp && sProp.indexOf('@') > 0) sProp = sProp.split('@')[1];\n if (props.total)\n if (x.sum === true) {\n columnSums.push(sProp);\n columnSumsDecimal.push(x.decimal ? x.decimal : 2);\n x.align = 'right';\n }\n\n const trans: string | undefined = transHash?.[sProp];\n if (trans) {\n const typeArr = trans.split('|');\n switch (typeArr[0]) {\n case 'company':\n x.dicType = 'company';\n break;\n case 'dept':\n x.dicType = 'dept';\n break;\n case 'user':\n x.dicType = 'user';\n break;\n case 'dic':\n x.type = 'dic';\n x.dicType = typeArr[1];\n break;\n case 'division':\n x.type = 'dic';\n x.dicType = 'xzqh';\n break;\n case 'date':\n x.type = 'date';\n x.dateType = typeArr[1];\n break;\n }\n }\n });\n headColumn.value = getTableColumn();\n }\n } else headColumn.value = getTableColumn();\n pageInfo.value = getPageInfo.value;\n // 设置排序方式\n if (pageInfo.value.totalpage > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n // 设置导出按钮状态\n if (recordsList.value && recordsList.value.length > 0) exportBtnDisabled.value = false;\n else exportBtnDisabled.value = true;\n\n // 加载状态\n // this.sDataLoaded = true;\n }\n nextTick(() => {\n // 重新计算\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n\n // add: 增加查询回调方法 2022-11-23\n if (props.tableCb) props.tableCb(recordsList.value, resultData.value);\n tableRef.value?.doLayout();\n });\n },\n );\n\n // @exposed\n expose({\n setTableRef,\n fetch,\n startLoading,\n stopLoading,\n filterConditions,\n });\n\n // @created\n // get localStorage table column\n const loginLang = userStore.language;\n if (loginLang === 'en') lang = 'en';\n originTableHead = JSON.parse(JSON.stringify(props.tableHead));\n // fixme: 初始化时根据结果集赋值pagesize 解决后端设置pageSize后前端无法加载问题 2022-04-30\n // if (this.tableInit === true)\n if (Object.keys(props.tableData).length === 0) headColumnInit.value = getTableColumn('create');\n if (props.tableType === 'expand') {\n sTableSort.value = false;\n sTableBar.value = false;\n } else if (props.tableType === 'detail') headColumnInit.value = getTableColumn();\n if (props.tableData && props.tableData.size) {\n sPageSize = props.tableData.size;\n // 设置排序方式\n if (props.tableData.pages > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n }\n\n // 设置列表按钮以及右上角按钮的全局隐藏或显示\n if (gTableBar === false) {\n sTableSort.value = false;\n sTableKit.value = false;\n sTableBar.value = true;\n }\n\n // set pageSizes\n if (pageSizes.includes(sPageSize) === false) {\n pageSizes.splice(0, 0, sPageSize);\n pageSizes.sort(function (m, n) {\n if (m < n) return -1;\n else if (m > n) return 1;\n else return 0;\n });\n }\n\n if (props.tableType === 'detail') {\n // this.sMaxHeight = '200px';\n pageLayout.value = 'total, prev, pager, next';\n // 设置detail宽度\n sMaxWidth.value = '850px';\n } else if (props.tableType === 'expand') if (!sMaxWidth.value) sMaxWidth.value = '85%';\n // this.pageLayout = 'total, prev, pager, next';\n\n transRecords('create');\n\n // @mounted\n onMounted(() => {\n debounceSearch = debounce(handleTableSearch, 500);\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n window.addEventListener('click', () => {\n closeAllPopover();\n });\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n if (rootEl) {\n const tableBodyWrapper = rootEl.querySelector('.el-table__body-wrapper');\n if (tableBodyWrapper) tableBodyWrapper.addEventListener('scroll', getScrollLeft, false);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor = true;\n const dialogBody = rootEl.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-edit__container')) isEditContainer = true;\n }\n });\n });\n\n // @render\n return () => {\n pageInfo.value = getPageInfo.value;\n return props.visible ? (\n <div\n class={props.tableType === 'expand' ? 'gv-table__container gv-table__container-expand' : 'gv-table__container'}\n style={{ width: '100%', minWidth: '0px', maxWidth: sMaxWidth.value }}>\n <GvTableBar visible={sTableBar.value}>{getTableBar()}</GvTableBar>\n {getKitBar()}\n {getTableSearch()}\n {getSortModel()}\n <div\n class=\"gv-table__loading-wrap\"\n v-loading={loading.value}\n element-loading-text=\"Loading...\">\n <ElTable\n ref={vref}\n // element-loading-spinner='iconfont gv-icon-loading'\n data={recordsList.value}\n border={props.tableType === 'detail' ? false : props.border}\n highlight-current-row={true}\n table-layout=\"fixed\"\n style=\"width: 100%\"\n height={sHeight}\n max-height={sMaxHeight.value}\n stripe={true}\n row-key={(row: any) => row.rownums}\n expand-row-keys={props.expandRowKeys}\n row-style={props.rowStyle}\n cell-style={props.cellStyle}\n header-cell-class-name=\"headerStyleEvent\"\n //span-method={handleSpanMethod}\n show-summary={props.total}\n // summary-method={getSummaries}\n // toggleRowSelection\n // on-row-class-name={props.rowClassName} // 设置行class的回调方法\n onSort-change={sortMethod}\n onRow-dblclick={rowDblClick} // 设置行双击事件方法\n // on-row-click={props.handleRowClick} // 设置行单击事件方法\n // on-selection-change={handleSelectionChange} // 设置多选行事件\n // on-expand-change={handleExpandChange} // 行展开异步加载方法\n // on-header-dragend={headerDragend} // 列拖宽度方法\n class={props.tableType === 'detail' ? 'gv-table-noborder' : props.border === true ? `${prefixCls}` : 'gv-table-noborder'}>\n {props.tableData && Object.keys(props.tableData).length > 0 ? headColumn.value : headColumnInit.value}\n </ElTable>\n </div>\n <ElPagination\n style={{ display: props.isShowPage ? '' : 'none' }}\n pageSizes={pageSizes}\n pageSize={pageInfo.value.recordsperpage}\n layout={pageLayout.value}\n total={pageInfo.value.countrows}\n currentPage={pageInfo.value.currentpagenum}\n hideOnSinglePage={true}\n onUpdate:page-size={handleSizeChange}\n onUpdate:current-page={handleCurrentChange}\n class=\"gv-pagination\"></ElPagination>\n </div>\n ) : null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-table__container {\n width: 100%;\n height: calc(100% - 10em);\n margin-top: -2px;\n\n .gv-table__loading-wrap {\n position: relative;\n width: 100%;\n }\n .gv-table__sortmode {\n float: right;\n\n & i {\n padding-right: 15px;\n //font-size: 14px;\n }\n\n :deep(.el-radio) {\n margin-right: 12px;\n\n .el-radio__input {\n &.is-checked {\n .el-radio__inner {\n background: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .el-radio__label {\n //font-size: $tableThFontSize;\n }\n\n .el-radio__input.is-checked + .el-radio__label {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .gv-table__kitbar {\n position: relative;\n float: right;\n width: 74px;\n height: 28px;\n margin: 1px 0 0 8px;\n line-height: 28px;\n\n .el-button-group {\n height: 26px;\n line-height: 26px;\n\n .el-button {\n padding: 6px 8px 5px;\n }\n }\n }\n\n .gv-table__search {\n position: relative;\n float: right;\n width: 160px;\n margin-top: 3px;\n\n :deep(.gv-table__search-input) {\n // top: -30px;\n float: right;\n width: 150px;\n .el-input__wrapper {\n height: 28px;\n line-height: 28px;\n }\n .el-input__inner {\n font-size: 12px;\n padding-left: 1px !important;\n }\n }\n }\n\n .gv-table {\n border-top: 1px solid $tableBorderColor;\n border-bottom: 0;\n border-left: 1px solid $tableBorderColor;\n\n :deep(.ascending .sort-caret.ascending) {\n border-bottom-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.descending .sort-caret.descending) {\n border-top-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n padding-right: 3px;\n color: $textColor;\n font-weight: 500 !important;\n .render__header {\n font-weight: 500 !important;\n }\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 4px 2px 10px 89px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-tag {\n box-sizing: border-box;\n display: inline-block;\n height: 22px;\n padding: 0 5px;\n //font-size: $appTextSize;\n line-height: 22px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: auto;\n padding: 0 5px;\n\n .gv-input {\n height: 25px;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-input-number {\n width: 120px;\n height: 25px;\n line-height: 25px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n height: 25px;\n //font-size: $textSizeSecondary;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 25px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n width: 100%;\n\n .el-input {\n // line-height: 28px;\n // height: 25px;\n\n // height: 28px;\n //font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px !important;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .el-select__tags {\n .el-tag {\n height: 22px;\n margin: 1px 0 1px 6px;\n }\n }\n }\n\n .gv-select__table {\n width: 100%;\n vertical-align: inherit !important;\n .el-input {\n // height: 25px;\n //font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n // &.current-row{\n // td.el-table__cell{\n // background-color: var(--defaultHover,$defaultHover);\n // }\n // }\n\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n :deep(.el-table__footer-wrapper) {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n //font-size: $tableThFontSize;\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n height: 100% !important;\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n height: 28px;\n font-weight: 500 !important;\n // display: inline-block; // flex\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 2px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n .cell {\n // display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n // padding-left: 3px;\n .el-button {\n // margin-left: 5px;\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .gv-tag {\n box-sizing: border-box;\n\n // display: inline-block;\n height: 24px;\n padding: 0 5px;\n //font-size: $appTextSize;\n line-height: 24px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n // border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n .el-table__fixed-footer-wrapper {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n //font-size: $tableThFontSize;\n }\n }\n }\n }\n }\n\n .gv-table-noborder {\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n\n .cell {\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n }\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n\n .cell {\n display: inline-block; // flex\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n }\n }\n }\n }\n }\n }\n }\n\n // pageinfo\n :deep(.el-pagination) {\n float: right;\n\n .el-input__inner {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n\n &:hover {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n }\n\n .el-pagination__total {\n left: 15px;\n //font-size: $appTextSize !important;\n // position: absolute;\n margin-right: 20px;\n font-weight: 500;\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-pagination__sizes {\n // position: absolute;\n left: 65px;\n margin: 0px 10px 0 0;\n width: 100px;\n line-height: 28px;\n .el-select {\n width: 100px;\n line-height: 28px;\n .el-select__wrapper {\n //font-size: $appTextSize;\n min-height: 28px;\n }\n .el-input {\n width: 90px;\n\n .el-input__inner {\n height: 25px;\n line-height: 25px;\n }\n }\n }\n }\n\n .btn-prev,\n .btn-next {\n min-width: 25px;\n padding: 0;\n }\n\n .el-pager {\n li.active,\n li:hover {\n color: var(--primaryColor, $primaryColor);\n }\n .is-active number {\n //font-size: $appTextSize;\n }\n .number {\n min-width: 30px;\n //font-size: $appTextSize;\n font-weight: $fontWeight;\n }\n }\n\n .el-pagination__jump {\n .el-pagination__goto {\n //font-size: $appTextSize;\n }\n .el-pagination__classifier {\n //font-size: $appTextSize;\n }\n .el-pagination__editor {\n //font-size: $appTextSize;\n width: 45px;\n\n .el-input__inner {\n height: 24px;\n line-height: 24px;\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTable from './src/GvTable.vue';\n\nconst GvTablePlugin = {\n install(app: App): void {\n app.component(GvTable.name ?? 'GvTable', GvTable);\n },\n};\nexport default GvTablePlugin;\n\nexport { GvTable };\n","<!--\n * @title: tab pane component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:19:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 10:24:57\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { hasScrollbar } from '@@/utils';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref } from 'vue';\n\n // const { getPrefixCls } = useStyle();\n // const prefixCls = getPrefixCls('tab-pane');\n export default defineComponent({\n name: 'GvTabPane',\n props: {\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n autoHeight: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const sMaxHeight = props.maxHeight;\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n // @methods\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el;\n const dialogBody = rootEl.closest('<div className=\"gv\"></div>-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isAnchor.value = true;\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n if (props.autoHeight === false)\n if (isEditContainer.value === false)\n if (isScrollbar.value === false)\n if (isAnchor.value === false)\n if (!sMaxHeight) {\n const tabPane = rootEl;\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 95 : 165;\n const maxHeight = document.documentElement.clientHeight - rootEl.offsetTop - offsetTop;\n rootEl.style.maxHeight = maxHeight + 'px';\n }\n });\n });\n // @render\n return () => (\n <div\n data-name={props.name}\n data-label={props.label}\n data-disabled={props.disabled}\n style={{ overflow: 'hidden auto', maxHeight: `${props.maxHeight}` }}>\n {slots.default?.()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tab-pane';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabPane from './src/GvTabPane.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabPane.name ?? 'GvTabPane', GvTabPane);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabPane };\n","<!--\n * @title: tabs component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 09:50:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:54:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { hasScrollbar } from '@@/utils';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tabs');\n export default defineComponent({\n name: 'GvTabs',\n props: {\n tabPosition: {\n type: String,\n default: 'left',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: undefined,\n },\n type: {\n type: String as PropType<'card' | 'border-card'>,\n default: undefined, // card|border-card\n },\n closable: {\n type: Boolean,\n default: false,\n },\n tabMaxHeight: {\n type: [Number, String],\n default: undefined,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const inputValue = ref(props.value);\n const tabHeight = ref('auto');\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const panes = ref([]);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @methods\n /**\n * @todo: 点击tab页响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-09 09:16:37\n * @param {*} tabVm 被选中tab页实例\n */\n const handleTabClick = (tabVm) => {\n const props = tabVm.props;\n const parent = tabVm.parent;\n const tabName = props.name;\n if (tabName) parent.props.value = tabName;\n emit('tab-click', tabVm);\n };\n\n /**\n * @todo: created tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:05:03\n */\n const calcPaneInstances = () => {\n if (panes.value.length === 0)\n if (slots.default?.())\n slots.default?.().forEach((vnode) => {\n if (vnode && typeof vnode.type === 'object' && 'name' in vnode.type && vnode.type.name === 'GvTabPane') {\n const tabPane = {};\n const props = vnode.props;\n tabPane['label'] = props?.label;\n tabPane['name'] = props?.name;\n tabPane['autoHeight'] = isEditContainer.value;\n let visible = true;\n if (props?.visible === false) visible = false;\n tabPane['visible'] = visible;\n (panes.value as any[]).push(tabPane);\n }\n });\n return panes.value || [];\n };\n /**\n * @todo: 创建tabpanel\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-03 16:30:54\n */\n const createTabPane = () =>\n calcPaneInstances().map((vnode: VNode, index) => {\n const props = vnode.props;\n // console.log(vnode.name);\n return props?.visible ? (\n <ElTabPane\n // v-show={vnode.visible}\n ref=\"tabPane\"\n name={props?.name}\n label={props?.label}\n style={{ height: `${tabHeight.value} !important` }}>\n {slots.default?.()[index]}\n </ElTabPane>\n ) : null;\n });\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el as HTMLElement | undefined;\n const dialogBody = rootEl?.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogContainer = rootEl?.closest('.gv-container');\n if (dialogContainer) isScrollbar.value = hasScrollbar(dialogContainer);\n }\n if (rootEl?.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl?.closest('.gv-edit__container')) isEditContainer.value = true;\n if (!isEditContainer.value)\n if (isScrollbar.value === false)\n if (isAnchor.value === false) {\n // 设置tab页高度\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const dialog = rootEl?.closest('.gv-dialog');\n if (dialog) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const h = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 55;\n if (h < 384) tabHeight.value = '384px';\n else tabHeight.value = h + 'px';\n }\n }\n }\n });\n });\n // @render\n return () => (\n <ElTabs\n ref=\"gv-tabs\"\n v-model={inputValue.value}\n tab-position={props.tabPosition}\n type={props.type}\n closable={props.closable}\n on-tab-click={handleTabClick}\n class={prefixCls}>\n {createTabPane()}\n </ElTabs>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tabs';\n .#{$prefixCls} {\n :deep(.el-tabs__header) {\n &.is-top {\n margin: 0 0 6px;\n }\n\n .el-tabs__nav {\n .el-tabs__active-bar {\n background-color: var(--primaryColor, $primaryColor);\n }\n\n .el-tabs__item {\n //font-size: $appTextSize;\n\n &:hover {\n color: var(--primaryColor, $primaryColor);\n }\n\n &.is-active {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabs from './src/GvTabs.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabs.name ?? 'GvTabs', GvTabs);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabs };\n","import type { App } from 'vue';\nimport GvTag from './src/GvTag.vue';\n\nconst GvTagPlugin = {\n install(app: App): void {\n app.component(GvTag.name ?? 'GvTag', GvTag);\n },\n};\nexport default GvTagPlugin;\n\nexport { GvTag };\n","<!--\n * @title: navigation tags view\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-20 10:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:00:46\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { useTagsViewStore } from '@/store/modules/tagsView';\n import { useBridgeI18n } from '@@/bridge';\n import { joinIcon, pathResolve } from '@@/utils';\n import { useEventListener } from '@vueuse/core';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { cloneDeep } from 'lodash-es';\n import { computed, defineComponent, nextTick, onMounted, reactive, ref, unref, watch } from 'vue';\n import { useRouter, type RouteLocationNormalizedLoaded } from 'vue-router';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tags-view');\n export default defineComponent({\n name: 'GvTagsView',\n setup() {\n const visible = ref(false);\n const position = reactive({ x: 0, y: 0 });\n const currentKey = ref('');\n\n const { currentRoute, push, replace } = useRouter();\n const activeKey = ref<string>(unref(currentRoute).path || '/dashboard');\n const { t } = useBridgeI18n();\n const tagsViewStore = useTagsViewStore();\n const permsStore = usePermsStore();\n\n const visitedViews = computed(() => tagsViewStore.visitedViews);\n const mainAppRoutes = computed(() => permsStore.mainAppRoutes);\n\n const isRedirect = (path: string) => path.startsWith('/redirect');\n const isActive = (route) => route.path === unref(currentRoute).path;\n const isAffix = (tag) => tag.meta && tag.meta.affix;\n\n /**\n * @todo: filter affix nav menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:39:08\n * @param {*} mainAppRoutes\n * @param {*} basePath\n */\n const filterAffixNavMenus = (navMenus, basePath = '/'): RouteLocationNormalizedLoaded[] => {\n const affixTags: RouteLocationNormalizedLoaded[] = [];\n // console.log('navMenus:', navMenus.value);\n navMenus.value.forEach((route) => {\n if (route.meta && route.meta.affix === true) {\n const tagPath = pathResolve(basePath, route.path);\n affixTags.push({\n fullPath: tagPath,\n path: tagPath,\n name: route.name,\n meta: route.meta,\n matched: [],\n params: {},\n query: {},\n hash: '',\n redirectedFrom: undefined,\n });\n }\n });\n return affixTags;\n };\n /**\n * @todo: add affix tags\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:45:26\n */\n const addAffixTags = () => {\n const affixTags = filterAffixNavMenus(mainAppRoutes);\n\n for (const tagView of affixTags) if (tagView.name) tagsViewStore.addVisitedView(tagView);\n };\n /**\n * @todo: create tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:36:56\n */\n const createTabPanel = () =>\n visitedViews.value.map((v) => {\n const icons = joinIcon(v.meta?.picon);\n const closable = visitedViews.value.length > 1;\n const title = t(v.meta?.title ?? 'no-name');\n return (\n <ElTabPane\n key={String(v.path)}\n name={String(v.path)}\n label={title}\n closable={closable}>\n {{\n label: () => (\n <span class=\"tab-label\">\n {icons && <i class={icons}></i>}\n {title}\n </span>\n ),\n }}\n </ElTabPane>\n );\n });\n\n /**\n * @todo: show right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 17:22:53\n * @param {*} key\n */\n const showContextMenu = (key: string) => {\n currentKey.value = key;\n visible.value = true;\n };\n /**\n * @todo: close right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:31:06\n */\n const closeContextMenu = () => {\n visible.value = false;\n };\n /**\n * @todo: jump to link route\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 11:25:08\n * @param {*} routePath\n */\n const toLink = (routePath: string) => {\n const targetView = visitedViews.value.find((v) => v.path === routePath);\n activeKey.value = routePath || '/dashboard';\n\n if (targetView)\n // 使用完整的 route 对象跳转,保留 query 参数\n push({\n path: targetView.path,\n query: targetView.query || {},\n });\n else push({ path: routePath, query: {} });\n };\n /**\n * @todo: jump to last tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:31:01\n * @param {*} visitedView\n * @param {*} currentView\n */\n const toLastView = (visitedView: RouteLocationNormalizedLoaded[], currentView: RouteLocationNormalizedLoaded) => {\n const latestView = visitedView.slice(-1)[0];\n if (visitedView) {\n activeKey.value = latestView.path;\n push(latestView.path);\n } else if (currentView.name === 'Dashboard') replace({ path: '/redirect' + currentView.path });\n else push('/');\n };\n /**\n * @todo: add menu tab\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 10:27:35\n */\n const addNavMenu = () => {\n const name = currentRoute.value.name;\n if (name) tagsViewStore.addTagView(currentRoute.value);\n };\n\n const moveToCurrentTag = (view: RouteLocationNormalizedLoaded) => {\n // toLink(view.path);\n };\n\n /**\n * @todo: click tab event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 12:08:48\n * @param {*} tab\n */\n const clickTab = (tab) => {\n toLink(tab.props.name);\n };\n /**\n * @todo: close current tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:56:44\n * @param {*} targetKey\n */\n const closeCurrentTag = async (targetKey) => {\n const view = visitedViews.value.filter((view) => view.path === targetKey);\n if (isAffix(view[0])) return;\n\n await tagsViewStore.delTagView({ view: view[0] });\n\n // 清除缓存的search条件\n // currentRoute.value.meta.search = {};\n // 判断是否是当前标签页关闭\n if (isActive(view[0])) toLastView(visitedViews.value, view[0]);\n };\n /**\n * @todo: refresh selected tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:40:45\n */\n const refreshSelectedTag = async () => {\n tagsViewStore.delCachedView(unref(currentRoute));\n const { path, query } = unref(currentRoute);\n await nextTick();\n replace({\n path: '/redirect' + path,\n query: query,\n });\n };\n const findCurTagIndex = () => visitedViews.value.findIndex((x) => x.path === currentKey.value);\n /**\n * @todo: close right/left tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:42:33\n * @param {*} direction\n */\n const closeTagsOrientation = (direction) => {\n const index = findCurTagIndex();\n if (index === -1) return;\n let isClosed = false;\n const vV = cloneDeep(visitedViews.value);\n vV.map(({ path }, i) => {\n if (direction === 'right' && i > index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n } else if (direction === 'left' && i < index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n }\n });\n // 跳转至当前页\n if (isClosed) toLink(unref(currentKey));\n };\n /**\n * @todo: close other tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 11:04:12\n */\n const closeOthersTags = () => {\n const index = findCurTagIndex();\n if (index === -1) return;\n push(currentKey.value);\n\n tagsViewStore.delOthersViews(currentRoute.value).then(() => {\n moveToCurrentTag(unref(currentRoute));\n });\n };\n\n watch(\n () => [currentRoute.value.path, currentRoute.value.name],\n ([path, name], [, oldName]) => {\n // if /redirect\n if (isRedirect(path as string)) return;\n // 当前选中tab页\n activeKey.value = (path as string) || '/dashboard';\n // del notify msg\n if (oldName !== name) {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n }\n addNavMenu();\n // moveToCurrentTag(currentRoute.value);\n },\n );\n\n /**\n * @todo: bind right click event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 15:28:28\n */\n const tagsViewEl = ref<HTMLElement | null>(null);\n useEventListener(tagsViewEl, 'contextmenu', (ev: MouseEvent) => {\n ev.preventDefault();\n\n let targetNode: HTMLElement | null = null;\n const el = ev.target as HTMLElement;\n\n if (el.tagName === 'SPAN') targetNode = el.parentElement;\n else targetNode = el;\n\n if (targetNode?.classList.contains('el-tabs__item')) {\n const path = targetNode?.getAttribute('aria-controls')?.replace(/^pane-/, '') || '';\n if (path !== unref(currentRoute).path) toLink(path);\n\n position.x = ev.clientX || ev.pageX;\n position.y = ev.clientY || ev.pageY;\n\n showContextMenu(path);\n }\n });\n /**\n * @todo: close context menu on window click\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:39:46\n */\n useEventListener(window, 'click', () => {\n closeContextMenu();\n });\n\n // mounted hooks\n onMounted(() => {\n addAffixTags();\n addNavMenu();\n });\n return () => (\n <div\n ref={tagsViewEl}\n class={[prefixCls, 'flex w-full relative bg-[#fff] dark:bg-[var(--el-bg-color)']}>\n <ElTabs\n class=\"multi-tab\"\n type=\"card\"\n modelValue={activeKey.value}\n onUpdate:modelValue={(v: string) => (activeKey.value = v)}\n onTabClick={clickTab}\n onTabRemove={closeCurrentTag}>\n {createTabPanel()}\n </ElTabs>\n {visible.value && (\n <ul\n class=\"tagsView-contextmenu\"\n style={{ left: `${position.x + 10}px`, top: `${position.y - 10}px` }}>\n <li onClick={refreshSelectedTag}>{t('tagsView.refresh')}</li>\n {currentKey.value !== '/dashboard' && visitedViews.value.length === 2 && <li onClick={() => closeCurrentTag(currentKey.value)}>{t('tagsView.close')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 1 && findCurTagIndex() < visitedViews.value.length - 1 && (\n <li onClick={() => closeTagsOrientation('right')}>{t('tagsView.closeRight')}</li>\n )}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && findCurTagIndex() > 1 && <li onClick={() => closeTagsOrientation('left')}>{t('tagsView.closeLeft')}</li>}\n {currentKey.value === '/dashboard' && visitedViews.value.length > 1 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n </ul>\n )}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tags-view';\n\n .#{$prefixCls} {\n user-select: none; // 禁止选中文本\n\n .multi-tab {\n width: 100%;\n position: relative;\n :deep(.el-tabs__header) {\n margin: 0;\n border-bottom-color: $borderColor;\n height: 34px;\n line-height: 34px;\n .el-tabs__nav {\n border-color: $borderColor;\n .el-tabs__item {\n height: 34px; // 38px\n line-height: 34px; // 38px\n padding: 2px 10px 0 10px; // 0 10px\n //font-size: $textSize;\n border-left-color: $borderColor;\n\n &.is-active {\n & > span {\n font-weight: $fontWeight2;\n }\n color: var(--primaryColor, $primaryColor);\n }\n &:focus.is-focus:not(:active) {\n box-shadow: 0 0 1px 1px inset;\n }\n > span {\n font-weight: 500;\n > i {\n padding-right: 5px;\n //font-size: $textSize;\n }\n }\n }\n }\n .is-scrollable {\n .el-tabs__nav-next,\n .el-tabs__nav-prev {\n line-height: 42px;\n }\n\n i {\n font-size: 18px;\n color: rgba(0, 0, 0, 0.95);\n }\n }\n }\n .el-tabs__content {\n display: none !important;\n }\n }\n :deep(.tagsView-contextmenu) {\n position: fixed;\n top: $navHeadHeight;\n left: 300px;\n z-index: 9999;\n min-width: 90px;\n padding: 6px 0;\n list-style: none;\n background-color: #fff;\n border: 1px solid $borderColorSecondary;\n border-radius: $borderRadius;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n li {\n line-height: 27px;\n padding: 0 15px;\n //font-size: $appTextSize;\n &:hover,\n &:focus {\n background-color: $backgroundColor;\n color: var(--primaryColorHover, $primaryColorHover);\n cursor: pointer;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTagsView from './src/GvTagsView.vue';\n// Define the install method on the GvExpandMenu component\nconst GvTagsViewPlugin = {\n install(app: App): void {\n app.component(GvTagsView.name ?? 'GvTagsView', GvTagsView);\n },\n};\nexport default GvTagsViewPlugin;\n\nexport { GvTagsView };\n","<!--\n * @title: theme switcher\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-08-14 10:17:38\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-18 15:04:37\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n import { computed } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvTheme',\n inheritAttrs: true,\n });\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('theme');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const appStore = useAppStore();\n const themeOptions = computed(() => appStore.getSwitchTheme);\n const currentTheme = computed(() => appStore.getCurrentTheme);\n\n const handleSetTheme = () => {\n //appStore.setTheme(theme);\n };\n</script>\n<template>\n <ElDropdown\n trigger=\"click\"\n :class=\"prefixCls\"\n @command=\"handleSetTheme\">\n <div>\n <GvIcon\n class=\"international-icon\"\n iconName=\"theme\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item of themeOptions\"\n :key=\"item.value\"\n :disabled=\"currentTheme === item.value\"\n :command=\"item.value\">\n {{ item.label }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-theme';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvTheme from './src/GvTheme.vue';\nconst GvThemePlugin = {\n install(app: App): void {\n app.component(GvTheme.name ?? 'GvTheme', GvTheme);\n },\n};\nexport default GvThemePlugin;\n\nexport { GvTheme };\n","<!--\n * @title: tree component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 16:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:54:23\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTree } from 'element-plus';\n import type { Node } from 'element-plus/es/components/tree/src/model/node';\n import type { FilterNodeMethodFunction, LoadFunction, RenderContentFunction, TreeComponentProps, TreeNodeData } from 'element-plus/es/components/tree/src/tree.type';\n import { defineComponent, type ComponentInternalInstance, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tree');\n\n type TreeData = Record<string, unknown>;\n\n export default defineComponent({\n name: 'GvTree',\n props: {\n treeData: {\n type: Array as PropType<TreeData[]>,\n default: () => [],\n },\n treeProps: {\n type: Object as PropType<TreeComponentProps['props']>,\n default: () => ({}),\n },\n nodeKey: {\n type: String,\n default: undefined,\n },\n lazy: {\n type: Boolean,\n default: false,\n },\n load: {\n type: Function as PropType<LoadFunction>,\n default: undefined,\n },\n showCheckbox: {\n type: Boolean,\n default: false,\n },\n draggable: {\n type: Boolean,\n default: false,\n },\n defaultExpandedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n defaultCheckedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n iconClass: {\n type: String,\n default: undefined,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n expandOnClickNode: {\n type: Boolean,\n default: true,\n },\n checkOnClickNode: {\n type: Boolean,\n default: false,\n },\n filterNodeMethod: {\n type: Function as PropType<FilterNodeMethodFunction>,\n default: undefined,\n },\n renderContent: {\n type: Function as PropType<RenderContentFunction>,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['node-click', 'node-expand', 'node-collapse', 'check', 'check-change', 'node-drop'],\n\n setup(props, { emit }) {\n // @methods\n\n const handleNodeClick = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null, event: MouseEvent) => {\n emit('node-click', data, node, treeNode, event);\n };\n\n const handleNodeExpand = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-expand', data, node, treeNode);\n };\n\n const handleNodeCollapse = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-collapse', data, node, treeNode);\n };\n\n const handleCheck = (\n data: TreeData,\n checkedInfo: {\n checkedNodes: TreeNodeData[];\n checkedKeys: (string | number)[];\n halfCheckedNodes: TreeNodeData[];\n halfCheckedKeys: (string | number)[];\n },\n ) => {\n emit('check', data, checkedInfo);\n };\n\n const handleCheckChange = (data: TreeData, checked: boolean, childChecked: boolean) => {\n emit('check-change', data, checked, childChecked);\n };\n\n const handleLazyLoad: LoadFunction = (...args) => {\n props.load?.(...args);\n };\n\n const handleNodeDrop = (draggingNode: Node, dropNode: Node, dropType: 'before' | 'after' | 'inner', event: DragEvent) => {\n emit('node-drop', draggingNode, dropNode, dropType, event);\n };\n\n // @render\n return () => (\n <ElTree\n ref=\"gv-tree\"\n data={props.treeData}\n props={props.treeProps}\n nodeKey={props.nodeKey}\n lazy={props.lazy}\n load={handleLazyLoad}\n draggable={props.draggable}\n showCheckbox={props.showCheckbox}\n defaultExpandedKeys={props.defaultExpandedKeys}\n defaultCheckedKeys={props.defaultCheckedKeys}\n icon={props.iconClass}\n highlightCurrent\n defaultExpandAll={props.defaultExpandAll}\n expandOnClickNode={props.expandOnClickNode}\n checkOnClickNode={props.checkOnClickNode}\n filterNodeMethod={props.filterNodeMethod}\n renderContent={props.renderContent}\n class={prefixCls}\n onNode-click={handleNodeClick}\n onNode-expand={handleNodeExpand}\n onNode-collapse={handleNodeCollapse}\n onNode-drop={handleNodeDrop}\n onCheck={handleCheck}\n onCheck-change={handleCheckChange}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tree';\n .#{$prefixCls} {\n :deep(.el-tree-node) {\n .el-tree-node__content {\n .el-tree-node__label {\n //font-size: $appTextSize;\n }\n .el-checkbox__input {\n &.is-checked {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTree from './src/GvTree.vue';\n\nconst GvTreePlugin = {\n install(app: App): void {\n app.component(GvTree.name ?? 'GvTree', GvTree);\n },\n};\nexport default GvTreePlugin;\n\nexport { GvTree };\n","/*\r\n * @title: encrypt\r\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\r\n * @Date: 2023-12-16 08:07:24\r\n * @LastEditors: andy.ten@tom.com\r\n * @LastEditTime: 2025-04-07 13:54:00\r\n * @version: 1.0.1\r\n * @copyright: copyright (c) 2025 Andy Xu\r\n * node: you can not copy and/or use and/or modify this program free,\r\n * please reserve the segment above.Please mail me if you have any question.\r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nexport const key = 'abcdefgabcdefg12';\r\nexport const encrypt = (word: any): string => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n let ww;\r\n if (typeof word === 'object') ww = JSON.stringify(word);\r\n else ww = word;\r\n const srcs = CryptoJS.enc.Utf8.parse(ww);\r\n const encrypted = CryptoJS.AES.encrypt(srcs, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return encrypted.toString();\r\n};\r\nexport const decrypt = (word: string): any => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n const decrypt = CryptoJS.AES.decrypt(word, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return CryptoJS.enc.Utf8.stringify(decrypt).toString();\r\n};\r\n// Randomly generate a specified number of hexadecimal keys\r\nexport const generateKey = (num: number): string => {\r\n const library = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let key = '';\r\n for (let i = 0; i < num; i++) {\r\n const randomPoz = Math.floor(Math.random() * library.length);\r\n key += library.substring(randomPoz, randomPoz + 1);\r\n }\r\n return key;\r\n};\r\n","/*\n * @title: package lib entry\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-11-28 18:18:44\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 09:22:01\n * @version: 1.1.2\n * @copyright: copyright (c) 2024 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Pinia } from 'pinia';\nimport { setActivePinia } from 'pinia';\nimport 'uno.css'; // 引入 UnoCSS 样式\nimport type { App } from 'vue';\nimport type { Composer } from 'vue-i18n';\n\nimport { setBridgeContext } from './bridge';\nimport GvBacktopPlugin, { GvBacktop } from './GvBacktop';\nimport GvBadgePlugin, { GvBadge } from './GvBadge';\nimport GvBreadCrumbPlugin, { GvBreadCrumb } from './GvBreadCrumb';\nimport GvButtonPlugin, { GvButton } from './GvButton';\nimport GvCardPlugin, { GvCard } from './GvCard';\nimport GvCascaderPlugin, { GvCascader } from './GvCascader';\nimport GvCheckboxPlugin, { GvCheckbox } from './GvCheckbox';\nimport GvCheckboxButtonPlugin, { GvCheckboxButton } from './GvCheckboxButton';\nimport GvCheckboxGroupPlugin, { GvCheckboxGroup } from './GvCheckboxGroup';\nimport GvColPlugin, { GvCol } from './GvCol';\nimport GvDatePickerPlugin, { GvDatePicker } from './GvDatePicker';\nimport GvDialogPlugin, { GvDialog } from './GvDialog';\nimport GvDividerPlugin, { GvDivider } from './GvDivider';\nimport GvDrawerPlugin, { GvDrawer } from './GvDrawer';\nimport GvExpandMenuPlugin, { GvExpandMenu } from './GvExpandMenu';\nimport GvFormPlugin, { GvForm } from './GvForm';\nimport GvHamburgerPlugin, { GvHamburger } from './GvHamburger';\nimport GvIconPlugin, { GvIcon } from './GvIcon';\nimport GvInputPlugin, { GvInput } from './GvInput';\nimport GvInputNumberPlugin, { GvInputNumber } from './GvInputNumber';\nimport GvLangSelectPlugin, { GvLangSelect } from './GvLangSelect';\nimport GvPopconfirmPlugin, { GvPopconfirm } from './GvPopconfirm';\nimport GvPopoverPlugin, { GvPopover } from './GvPopover';\nimport GvRadioPlugin, { GvRadio } from './GvRadio';\nimport GvRadioButtonPlugin, { GvRadioButton } from './GvRadioButton';\nimport GvRadioGroupPlugin, { GvRadioGroup } from './GvRadioGroup';\nimport GvRowPlugin, { GvRow } from './GvRow';\nimport GvScreenFullPlugin, { GvScreenFull } from './GvScreenFull';\nimport GvSearchBarPlugin, { GvSearchBar } from './GvSearchBar';\nimport GvSelectPlugin, { GvSelect } from './GvSelect';\nimport GvSidebarPlugin, { GvSidebar } from './GvSidebar';\nimport GvSidebarLogoPlugin, { GvSidebarLogo } from './GvSidebarLogo';\nimport GvSwitchPlugin, { GvSwitch } from './GvSwitch';\nimport GvTablePlugin, { GvTable } from './GvTable';\nimport GvTabPanePlugin, { GvTabPane } from './GvTabPane';\nimport GvTabsPlugin, { GvTabs } from './GvTabs';\nimport GvTagPlugin, { GvTag } from './GvTag';\nimport GvTagsViewPlugin, { GvTagsView } from './GvTagsView';\nimport GvThemePlugin, { GvTheme } from './GvTheme';\nimport GvTimePickerPlugin, { GvTimePicker } from './GvTimePicker';\nimport GvTreePlugin, { GvTree } from './GvTree';\nconst components = [\n GvRowPlugin,\n GvColPlugin,\n GvInputPlugin,\n GvButtonPlugin,\n GvPopconfirmPlugin,\n GvIconPlugin,\n GvInputNumberPlugin,\n GvCascaderPlugin,\n GvSwitchPlugin,\n GvRadioButtonPlugin,\n GvCheckboxButtonPlugin,\n GvRadioGroupPlugin,\n GvBadgePlugin,\n GvTabPanePlugin,\n GvTabsPlugin,\n GvDrawerPlugin,\n GvCardPlugin,\n GvTablePlugin,\n GvPopoverPlugin,\n GvRadioPlugin,\n GvSelectPlugin,\n GvTimePickerPlugin,\n GvCheckboxGroupPlugin,\n GvCheckboxPlugin,\n GvTagPlugin,\n GvTreePlugin,\n GvFormPlugin,\n GvLangSelectPlugin,\n GvBacktopPlugin,\n GvBreadCrumbPlugin,\n GvHamburgerPlugin,\n GvScreenFullPlugin,\n GvSearchBarPlugin,\n GvSidebarPlugin,\n GvSidebarLogoPlugin,\n GvThemePlugin,\n GvDialogPlugin,\n GvExpandMenuPlugin,\n GvTagsViewPlugin,\n GvDividerPlugin,\n GvDatePickerPlugin,\n];\n\nexport type GuavaUIOptions = {\n store: Pinia;\n i18n: Composer;\n};\n\nexport const install = (app: App, options: GuavaUIOptions) => {\n if ((install as any).INSTALLED) return;\n (install as any).INSTALLED = true;\n\n setActivePinia(options.store);\n setBridgeContext(options);\n\n components.forEach((c) => c.install(app));\n};\n\nconst GuavaUI = { install };\n\n// 🔹 按需导出组件\nexport {\n GvBacktop,\n GvBadge,\n GvBreadCrumb,\n GvButton,\n GvCard,\n GvCascader,\n GvCheckbox,\n GvCheckboxButton,\n GvCheckboxGroup,\n GvCol,\n GvDatePicker,\n GvDialog,\n GvDivider,\n GvDrawer,\n GvExpandMenu,\n GvForm,\n GvHamburger,\n GvIcon,\n GvInput,\n GvInputNumber,\n GvLangSelect,\n GvPopconfirm,\n GvPopover,\n GvRadio,\n GvRadioButton,\n GvRadioGroup,\n GvRow,\n GvScreenFull,\n GvSearchBar,\n GvSelect,\n GvSidebar,\n GvSidebarLogo,\n GvSwitch,\n GvTable,\n GvTabPane,\n GvTabs,\n GvTag,\n GvTagsView,\n GvTheme,\n GvTimePicker,\n GvTree,\n};\n\n// 🔹 hooks / utils\nexport { crud } from '@@/utils/gv.crud';\n// export * from './hooks/web/useNotify';\nexport * from './hooks/web/usePinyin';\nexport * from './hooks/web/useStorage';\nexport * from './utils/gv.notify';\nexport * from './utils/gv.propTypes';\nexport * from './utils/gv.secret';\nexport * from './utils/gv.tree';\nexport * from './utils/index';\n\n// 🔹 默认导出统一安装对象\nexport { GuavaUI };\n"],"names":["globalBridgeKey","getBridge","g","setBridgeContext","ctx","useBridgeI18n","i18n","getPrefixCls","variables","useStyle","prefixCls","_createBlock","_unref","ElBacktop","GvBacktopPlugin","app","GvBacktop","_sfc_main$F","name","props","vref","type","String","default","value","Number","max","isDot","Boolean","hidden","showZero","color","setup","slots","_createVNode","ElBadge","_export_sfc","sfc","GvBadgePlugin","_a","GvBadge","toString","is","val","isExternal","path","isString","isArray","isError","isObject","isDate","isNumber","isBoolean","isFunction","isElement","isMap","isImgPath","isDark","isNull","isEmpty","isEqual","a","b","i","keysA","keysB","key","isUrl","e","setHtmlAttrByLang","locale","sleep","timeLen","__async","resolve","toHump","all","letter","toLine","setDomCssProp","prop","dom","getDomCssProp","joinIcon","icon","joinIcons","hasClass","ele","cls","addClass","removeClass","reg","hasScrollbar","tag","dateFormatConfig","debounce","func","wait","immediate","timeout","arg","context","timestamp","result","later","last","args","callNow","getVNodeText","vnode","item","getVNodeName","removeAmountFormat","zeroFormat","numberFormat","pattern","oldVal","_nfPattern","strAry","p1","len","p2","ret","ch","p3","len2","amountFormat","decimal","v","decimalPattern","setQuickKeys","ev","btnHtml","inputHtml","messageConfirmHtml","bodyDialogHtml","dialogArr","buttonHtml","buttonDHtml","pathResolve","parentPath","childPath","preNameSpace","attrs","useAttrs","__props","isLocal","computed","iconType","iconName","svgClass","styleExternalIcon","iconComponent","compName","Icons","_openBlock","_createElementBlock","_mergeProps","_createElementVNode","_hoisted_1","ElIcon","_resolveDynamicComponent","_hoisted_2","GvIconPlugin","GvIcon","DEFAULT_CONFIG","getConfig","config","listToTree","list","conf","nodeMap","id","children","pid","node","parent","treeToList","tree","findNode","findNodeAll","findPath","visitedSet","findPathAll","filter","listFilter","__spreadValues","forEach","treeMapEach","data","conversion","haveChildren","conversionData","__spreadProps","treeMap","treeData","opt","eachTree","treeDatas","callBack","parentNode","element","newNode","filterBreadcrumb","routes","res","route","meta","_isSlot","s","Object","prototype","call","_isVNode","appStore","useAppStore","permStore","usePermsStore","showBreadcrumbIcon","getShowBreadcrumbIcon","currentRoute","useRouter","t","levelList","ref","menuRouters","routers","getRouters","getBreadcrumb","currentPath","matched","slice","unref","renderBreadcrumb","map","disabled","redirect","ElBreadcrumbItem","title","watch","startsWith","_slot","ElBreadcrumb","TransitionGroup","GvBreadCrumbPlugin","GvBreadCrumb","emits","emit","instance","getCurrentInstance","handleConfirm","event","ElPopconfirm","reference","GvInputPlugin","GvPopconfirm","getValueType","useStorage","valueType","excludes","keys","defaultExcludes","excludesArr","notificationTime","notificationTimeError","messageTime","messageTimeError","alert","msg","alertObj","getStorage","lang","promptMsg","duration","m","ElNotification","confirm","msgs","showCancelButton","hint","ok","cancel","reject","ElMessageBox","message","tableedit","ElMessage","visible","text","otext","size","undefined","link","loading","refForm","required","nativeType","bizType","perms","cb","Function","useRoute","globalSize","useGlobalConfig","buttonSize","buttonConfirm","loadings","locked","isShow","isIf","getSlots","setIconStyle","replace","checkPerms","pm","slot","split","x","indexOf","length","arr","handleClick","exposed","resetFields","rootForm","originFormList","formList","Array","index","filtercode","showLabel","dateType","model","field","rootEl","el","dateRangeSingles","querySelectorAll","startInput","querySelector","endInput","click","then","classz","renderBtn","display","ElButton","GvButtonPlugin","GvButton","_props","getCardHeader","header","ElCard","GvCardPlugin","GvCard","options","placeholder","clearable","showAllLevels","separator","trigger","filterable","multiple","lazy","lazyLoad","sOps","inputValue","cascaderSize","sPlaceHolder","getDisabled","resolvedInputId","newVal","handleChange","handleBlur","handleFilterMethod","query","labels","pathLabels","join","spell","pathNodes","some","ElCascader","$event","expandTrigger","GvCascaderPlugin","GvCascader","indeterminate","label","border","checkboxValue","checkboxSize","handleUpdate","ElCheckbox","GvCheckboxPlugin","GvCheckbox","inheritAttrs","checkboxButtonSize","ElCheckboxButton","GvCheckboxButtonPlugin","GvCheckboxButton","min","checkboxGroupSize","ElCheckboxGroup","GvCheckboxGroupPlugin","GvCheckboxGroup","_sfc_main$v","span","offset","xs","sm","md","lg","xl","ElCol","GvColPlugin","GvCol","toMidnight","date","d","daysAgo","days","midnight","monthBegin","quarterBegin","month","yearBegin","now","dateShortcuts","dateShortcutsEn","dateTimeShortcuts","dateTimeShortcutsEn","dateRangeShortcuts","start","end","dateRangeShortcutsEn","modelValue","Date","format","valueFormat","defaultTime","rangeSeparator","startPlaceholder","endPlaceholder","disabledDateFunc","disabledDate","editable","unlink","useI18n","datePickerSize","getShortcuts","getPickerOptions","pickerOptions","shortcuts","includes","getTime","db","handleInput","vm","handleFocus","handlePick","maxDate","minDate","ElDatePicker","onCalendarChange","GvDatePickerPlugin","GvDatePicker","boundElements","initDrag","collapseMenu","dragDom","dialogHeaderEl","getStyle","attr","disX","disY","dragDomWidth","dragDomHeight","screenWidth","screenHeight","minDragDomLeft","menuWidth","maxDragDomLeft","minDragDomTop","maxDragDomTop","styL","styT","onMouseMove","left","top","onMouseUp","hasFooter","width","height","nest","appendToBody","fullscreen","maxHeight","closeOnClickModal","closeOnPressEscape","dialogClass","buttonQuick","collapseMenus","myDialogClass","dialogVisible","maskVisible","dialogMaxHeight","sAppendToBody","modalAppendToBody","sNest","modalMask","newValue","handleVisible","handleOpen","handleOpened","nextTick","handleClose","handleClosed","handleCancel","renderFooterBtn","footer","propsData","getFooter","setMask","mask","getMaxHeight","parseFloat","document","documentElement","clientHeight","pEl","closest","onBeforeUnmount","window","removeEventListener","onMounted","addEventListener","ElDialog","GvDialogPlugin","GvDialog","position","direction","target","clickDivider","preventDefault","stopPropagation","ElDivider","GvDividerPlugin","GvDivider","paddingHeight","drawerVisible","drawerMaxHeight","show","buttonIcon","sPaddingHeight","drawerPaddingHeight","returnIcon","ElDrawer","GvDrawerPlugin","GvDrawer","newPropTypes","createTypes","propTypes","toValidableType","usePinyin","withTone","pinyin","pinYin","__emit","menuList","menuPath","fMenusList","generateRouter","serverRoutes","basePath","prefixTitle","prefixCode","router","i18ntitle","code","tempRoutes","handleCloseDrawer","handleSelect","handleSearch","_b","starClickHandle","star","menuItem","ElAutocomplete","Search","_withCtx","_hoisted_3","_toDisplayString","_hoisted_4","ElTabs","_Fragment","_renderList","ElTabPane","_hoisted_5","sub","_hoisted_6","StarFilled","Star","_hoisted_7","_component_router_link","_hoisted_8","sideWidth","expandHandle","_normalizeClass","_normalizeStyle","GvMenuList","GvExpandMenuPlugin","GvExpandMenu","prefixIcon","suffixIcon","maxlength","readonly","columnProp","rows","autosize","showWordLimit","inputSize","sPlaceholder","renderPrefixIcon","renderSuffixIcon","select","handleClear","handleKeyDown","ElInput","number","prefix","suffix","GvInput","step","stepStrictly","precision","currentValue","oldValue","ElInputNumber","GvInputNumberPlugin","GvInputNumber","dicType","dicRemote","clear","isreload","editRow","collapseTags","userStore","useUserStore","useNotify","dicIcon","remote","loadingText","externalValue","inputShowLabel","inputFilterable","selectValue","originOptions","className","dicSrc","toLowerCase","valueCache","Map","selectSize","isEmptyLabel","getDictItemLabel","l1","l2","formatOptionLabel","findLabelInOptions","opts","find","c","getOptionValue","row","cached","get","obj","set","getSelectCode","o","trim","getSelectLabel","isEmptySelectValue","raw","every","syncEmptyToParent","elSelectModel","mergeOptionsWithSelected","_opts","merged","append","sv","pushDefaultOption","op","push","getSelectOptions","src","xx","arr2","dictCache","dict","getDictDivision","cache","addDictCache","getDict","RegExp","test","filterMethod","initialRemoteLoaded","pendingRemoteQuery","pendingRemotePromise","remoteRequestSeq","filterOriginOptions","remoteDictSearch","requestSeq","sDicType","substring","datas","ops","JSON","parse","console","log","remoteMethod","q","filtered","ensureDefaultOption","existed","resolveDisplayLabel","localOpts","applySelectValue","resolved","showLbl","deep","handleVisibleChange","renderSelectOption","ElOption","renderTableOption","columnTexts","multiColumn","v1","mm","m2","m4","vv1","mmm","mm2","mm4","labelArr","opArr","ElSelect","GvSelectPlugin","GvSelect","columnKey","require","switchType","newStatus","ElSwitch","GvSwitchPlugin","GvSwitch","TimePicker","ElTimePicker","isRange","disabledHours","disabledMinutes","disabledSeconds","timepickerSize","mergedDisabledHours","mergedDisabledMinutes","mergedDisabledSeconds","GvTimePickerPlugin","GvTimePicker","infoMsg","info","calLength","sum","vcity","checkDecimal","decimalLen","checkProvince","card","province","verifyBirthday","year","day","birthday","now_year","time","checkBirthday","re_fifteen","arr_data","re_eighteen","changeFivteenToEighteen","arrInt","arrCh","cardTemp","checkParity","valnum","htValidate","rule","callback","language","divider","isDivider","labelWidth","formStyle","scroller","expose","searchFieldsCollapsed","provide","formRefs","formElRef","setFormRef","rootNodeStyle","rules","isEditContainer","sMaxHeight","isScrollbar","isAnchor","isDialog","colSpanNums","formType","styles","formSize","labelPosition","searchDivider","getLanguage","setDividerShow","getEditBar","editbar","ElRow","getDivider","dividerRender","dividerTitle","getDictItems","dictCacheTmp","dictTmp","getItemRules","_item","validateKey","maxLen","validator","gvValidate","excluded","handleRadioInput","formVal","handleDateRange2Focus","$el","handleDateRange2Blur","handleDateRange2Change","endTime","startTime","datePicker","dateArr","handleSwitchDictChange","error","handleRadioDictChange","getSearchColClass","slotProps","expand","showDefaultRow","searchFormRows","renderFormItem","_index","_slot3","colspan","createRow","blur","focus","change","render","renders","isHidden","cType","validateRule","sDateType","dateFormat","ph","startPh","endPh","cols","colSpanXs","colSpanSm","colSpanMd","colSpanLg","colSpanXl","week","datetime","editables","isTableDic","sLabel","searchFormLabel","switchDefaultVal","searchColClass","ElFormItem","_createTextVNode","ElTooltip","onFocus","padding","margin","clip","overflow","whiteSpace","ElRadioGroup","_slot2","ElRadio","ElRadioButton","vv","toolText","_resolveComponent","getItems","sRootEl","tabPane","offsetTop","classList","contains","clearFormValidate","clearValidate","setFormStyle","formStyle1","lastIndexOf","parseInt","clientWidth","init","formModel","formRule","difference","diff","fieldObj","oldObj","fieldObjKeys","key2","nextProps","prevProps","firstSlot","stringify","dialogBody","dialogBody2","Transition","_withDirectives","ElForm","flexWrap","flex","minWidth","_vShow","GvFormPlugin","GvForm","collapse","loadDict","loadDictDivision","toggleCollapse","collapsed","currentDict","currentReloadDict","currentDictDivision","Fold","Expand","GvHamburgerPlugin","GvHamburger","localeStore","useLocaleStore","langMap","currentLang","handleSetLang","switchLocale","useLocale","ElDropdown","ElDropdownMenu","ElDropdownItem","_component_GvIcon","GvLangSelectPlugin","GvLangSelect","placement","tablePopover","columnType","popClass","handleUpdateVisible","handleShow","handleHide","handlePopoverWrapper","getReferenceSlot","ElPopover","GvPopoverPlugin","GvPopover","radioValue","radioSize","GvRadioPlugin","GvRadio","GvRadioButtonPlugin","GvRadioButton","radioGroupSize","GvRadioGroupPlugin","GvRadioGroup","_sfc_main$c","gutter","GvRowPlugin","GvRow","toggle","isFullscreen","useFullscreen","toggleFullscreen","GvScreenFullPlugin","GvScreenFull","inject","formNode","fieldList","fields","expandFields","shrinkFields","createSearchBar","searchBar","defaultSlot","searchBtnFlag","expandText","shrinkText","shrink","GvSearchBarPlugin","GvSearchBar","hasOneShowingChild","onlyOneChild","showingChildren","useRenderMenuTitle","renderMenuTitle","useRenderMenuItem","menuMode","renderMenuItem","oneShowingChild","fullPath","noShowingChildren","alwaysShow","ElMenuItem","ElSubMenu","menuSelect","layout","getLayout","getCollapseMenus","leftMenuUniqueOpened","getLeftMenuUniqueOpened","activeMenu","open","renderMenu","ElMenu","renderMenuWrap","ElScrollbar","GvSidebarPlugin","GvSidebar","_imports_0","GvSidebarLogoPlugin","GvSidebarLogo","createTableBar","tableBar","defaultSlots","firstChild","closable","effect","round","tagSize","ElTag","appendPageInfo","pi","pageInfo","currentpagenum","recordsperpage","countrows","totalpage","combined","tabNode","filterConditions","co","sOp","coo","ds","condition","searchCombined","action","upper","sType","saveCombined","fetchData","fetch","submit","hasMsg","fetchTable","checkForms","fmNodes","fmNode","rawFmChildren","fmChildList","fmNode2","_c","save","check","fmInnerNode","conditions","update","search","searchInputNode","tableEl","tableHeader","tableFixedHeader","columns","h","columnsFixed","lenFixed","searchNoFm","toNewPageSearch","trans","insertResult","searchData","updateResult","rownums","currentRow","removeResult","getDictDisplayLabel","dictObj","_f","_e","_d","_i","_h","_g","_k","_j","crud","rowData","fieldValue","items","itemChild","codes","tableHeadFilterPopoverPopperStyle","maxWidth","refTable","tableHead","tableData","pageSize","rowClassName","rowStyle","spanMethod","cellStyle","tableType","tableSort","tableKit","tableFetch","multi","isShowPage","total","tableInit","beforeImport","tableFilter","tableCb","expandRowKeys","limitHeight","tableAction","tableActionIcon","sTableAction","sTableActionIcon","sTableConfirm","detailPlacement","sTableType","originTableHead","tableHeads","sHeight","sMaxWidth","isEditTable","sPageSize","resultData","recordsList","records","pageSizes","filterHeads","popoverVisible","exportBtnDisabled","exportBtnLoading","importBtnLoading","tableSortMode","exportDialogShow","importDialogShow","sTableBar","gTableBar","tableSearchShow","sTableSort","sTableKit","showPopoverDetail","pageLayout","actionWidth","transHash","headColumn","headColumnInit","columnSumsDecimal","isIndeterminate","columnTreeList","columnCheckedKeys","storageKey","loginAccount","lsTableHeads","debounceSearch","tableRefs","tableRef","tableSize","getPageInfo","current","pages","setTableRef","closeAllPopover","property","next","ensurePopoverKey","propKey","wrapPopoverFilterBody","body","getScrollLeft","startLoading","stopLoading","transRecords","loadAction","splice","handleImport","handleExport","getImportBtn","import","buttonName","getExportBtn","export","runPageSearch","fC","fetchFn","handleSizeChange","handleCurrentChange","handleTableSearchInput","handleTableSearch","fh","strFh","y","getTableSearch","handlePopoverShow","popOvers","tableBodyWidth","style","bodyWrapper","scrollLeft","handlePopoverHide","createChangedColumns","checkedKeys","column","hasHidden","handleColumnCheckChange","checked","childChecked","$refs","$children","getCheckedKeys","hColumns","getTableColumn","setStoreLocal","handleTableRefresh","inputSearch","getTableBar","btns","exportSlots","importSlots","getKitBar","isVisible","ElButtonGroup","Refresh","Operation","ElTree","getSortModel","marginRight","columnFilterHandler","propField","popoverHtml","checkList","dateHtmlArr","filterValue","innerText","assign","getAttribute","add","tableFixHeader","fixColumns","fixLen","columnFilterHandlerReset","remove","primaryBtn","setAttribute","getColWidth","edit","label2","sWidth","columnFormatter","cellValue","handleColumnFilter","popoverHtmlList","from","pop","removeAttribute","renderHeadFilter","_slot4","_slot5","_slot6","fc","$store","getters","dictDivision","dispatch","ret2","_slot7","_slot8","_slot9","handleDictCheckAll","handleDictCheck","handlePopoverSlotClick","renderColumnItem","tableFixed","fixed","align","formatter","cellBlur","cellEnter","cellChange","selectable","showLabelProp","columnFilter","multiLabel","heads","reserveSelection","sHidden","sProp","Math","random","sFixed","sortable","multiLabels","hType","hSLabel","hSProp","hKey","hSFixed","hReserveSelection","hSortable","hSWidth","ElTableColumn","scope","renderRowEdit","renderAction","content","confirmArr","iconArr","sContent","confirms","detail","actionType","onClick","lock","$index","onConfirm","onAfter-enter","handleDetailPopoverShow","checkEditRow","tableColumns","thd","lsTableHeadsArr","startIndex","ff","f","treeNode","rownumWidth","actionHead","actionColumn","columnVNode","sortMethod","_0","order","fieldName","sortingType","sumData","sort","row1","row2","isNaN","localeCompare","oi","rowDblClick","tagName","cell","onRowDblclick","tr","tds","firstBtn","btnArr","j","btn","prevVal","typeArr","doLayout","n","tableBodyWrapper","_slot0","GvTableBar","ElTable","_resolveDirective","ElPagination","GvTablePlugin","GvTable","autoHeight","proxy","GvTabsPlugin","GvTabPane","tabPosition","tabMaxHeight","tabHeight","panes","handleTabClick","tabVm","tabName","calcPaneInstances","createTabPane","dialogContainer","GvTabs","GvTagPlugin","GvTag","reactive","currentKey","activeKey","tagsViewStore","useTagsViewStore","permsStore","visitedViews","mainAppRoutes","isRedirect","isActive","isAffix","affix","filterAffixNavMenus","navMenus","affixTags","tagPath","params","hash","redirectedFrom","addAffixTags","tagView","addVisitedView","createTabPanel","icons","picon","showContextMenu","closeContextMenu","toLink","routePath","targetView","toLastView","visitedView","currentView","latestView","addNavMenu","addTagView","moveToCurrentTag","view","clickTab","tab","closeCurrentTag","targetKey","delTagView","refreshSelectedTag","delCachedView","findCurTagIndex","findIndex","closeTagsOrientation","isClosed","cloneDeep","closeOthersTags","delOthersViews","oldName","tagsViewEl","useEventListener","targetNode","parentElement","clientX","pageX","clientY","pageY","GvTagsViewPlugin","GvTagsView","themeOptions","currentTheme","handleSetTheme","GvThemePlugin","GvTheme","treeProps","nodeKey","load","showCheckbox","draggable","defaultExpandedKeys","defaultCheckedKeys","iconClass","defaultExpandAll","expandOnClickNode","checkOnClickNode","filterNodeMethod","renderContent","handleNodeClick","handleNodeExpand","handleNodeCollapse","handleCheck","checkedInfo","handleCheckChange","handleLazyLoad","handleNodeDrop","draggingNode","dropNode","dropType","GvTreePlugin","GvTree","encrypt","word","keyStr","CryptoJS","ww","srcs","decrypt","generateKey","num","library","randomPoz","components","GvPopconfirmPlugin","GvTabPanePlugin","install","setActivePinia","GuavaUI","exports","_sfc_main$G","_sfc_main$h","_sfc_main$8","confirm$1"],"mappings":";0UAUMA,GAAkB,yBAClBC,GAAY,IAA2B,CAC3C,MAAMC,EAAI,WACV,OAAKA,EAAEF,EAAe,IAAGE,EAAEF,EAAe,EAAI,CAAA,GAEvCE,EAAEF,EAAe,CAC1B,EAQaG,GAAoBC,GAA6B,CAE5D,OAAO,OAAOH,GAAA,EAAaG,CAAG,CAChC,EAYO,SAASC,IAA0B,CACxC,MAAMC,EAAOL,KAAY,KACzB,GAAI,CAACK,EAAM,MAAM,IAAI,MAAM,+BAA+B,EAC1D,OAAOA,CACT,0FCrBE,KAAM,CAAE,aAAAC,EAAc,UAAAC,CAAA,EAAcC,YAAA,EAE9BC,EAAYH,EAAa,SAAS,8BAIxCI,EAAAA,YAE2GC,EAAAA,MAAAC,EAAAA,SAAA,EAAA,CADxG,uBAAOD,QAAAF,CAAA,CAAS,EAChB,WAAYE,EAAAA,MAAAJ,CAAA,EAAU,SAAS,8BAA8BI,EAAAA,MAAAJ,CAAA,EAAU,WAAW,kBAAA,iCC3BjFM,GAAkB,CACtB,QAAQC,EAAgB,OACtBA,EAAI,WAAUC,EAAAA,GAAU,OAAVA,KAAAA,EAAkB,YAAaA,EAAS,CACxD,CACF,ECWQ,CAAET,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,OAAO,EAEtCU,qBAA+B,CAC7BC,KAAM,UACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXC,MAAO,CACLH,KAAM,CAACI,OAAQH,MAAM,EACrBC,QAAS,IAEXG,IAAK,CACHL,KAAMI,OACNF,QAAS,IAEXI,MAAO,CACLN,KAAMO,QACNL,QAAS,IAEXM,OAAQ,CACNR,KAAMO,QACNL,QAAS,IAEXO,SAAU,CACRT,KAAMO,QACNL,QAAS,IAEXQ,MAAO,CACLV,KAAMC,OACNC,QAAS,IAEXF,KAAM,CACJA,KAAMC,OACNC,QAAS,SACX,GAGFS,MAAMb,EAAO,CAAEc,MAAAA,CAAM,EAAG,CAEtB,MAAO,IAAAC,EAAAA,YAAAC,UAAA,CAAA,MAEIhB,EAAMK,MAAK,IACbL,EAAMO,IAAG,KACRP,EAAME,KAAI,OACRF,EAAMU,OAAM,MACbV,EAAMQ,MAAK,SACRR,EAAMW,SAAQ,MACjBX,EAAMY,MAAK,MACXrB,EAAS,EAAA,CAAAa,QAAAA,IAAAA,OAAA,QACfU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,CAGxB,CACF,CAAC,EAACG,GAAA,CAAAC,EAAAlB,IAAA,wGCvEEmB,GAAgB,CACpB,QAAQvB,EAAgB,OACtBA,EAAI,WAAUwB,EAAAC,GAAQ,OAAR,KAAAD,EAAgB,UAAWC,EAAO,CAClD,CACF,ECKMC,GAAW,OAAO,UAAU,SACrBC,GAAK,CAACC,EAActB,IAAiBoB,GAAS,KAAKE,CAAG,IAAM,WAAWtB,CAAI,IAE3EuB,GAAcC,GAA0B,0BAA0B,KAAKA,CAAI,EAC3EC,GAAYH,GAAgCD,GAAGC,EAAK,QAAQ,EAC5DI,GAAWJ,GAA2BA,GAAO,MAAM,QAAQA,CAAG,EAC9DK,GAAW,GAA2B,OAAO,GAAM,UAAY,IAAM,MAAQ,YAAa,EAC1FC,GAAYN,GAAsCA,IAAQ,MAAQD,GAAGC,EAAK,QAAQ,EAClFO,GAAUP,GAA8BD,GAAGC,EAAK,MAAM,EACtDQ,GAAYR,GAAgCD,GAAGC,EAAK,QAAQ,EAC5DS,GAAaT,GAAiCD,GAAGC,EAAK,SAAS,EAC/DU,GAAcV,GAAiD,OAAOA,GAAQ,WAC9EW,GAAaX,GAAiCM,GAASN,CAAG,GAAK,CAAC,CAACA,EAAI,QACrEY,GAASZ,GAAuCD,GAAGC,EAAK,KAAK,EAC7Da,GAAaX,GAA0B,mEAAmE,KAAKA,CAAI,EACnHY,GAAS,IAAe,OAAO,WAAW,8BAA8B,EAAE,QAC1EC,GAAUf,GAA8BA,IAAQ,KAEhDgB,GAAwBhB,GAC/Be,GAAOf,CAAG,GACVA,IAAQ,QACRA,IAAQ,OAAe,GACvBI,GAAQJ,CAAG,GAAKG,GAASH,CAAG,EAAUA,EAAI,SAAW,EACrDA,aAAe,KAAOA,aAAe,IAAYA,EAAI,OAAS,EAC9DM,GAASN,CAAG,EAAU,OAAO,KAAKA,CAAG,EAAE,SAAW,EAC/C,GAMIiB,GAAU,CAACC,EAAYC,IAAwB,CAC1D,GAAI,OAAO,GAAGD,EAAGC,CAAC,EAAG,MAAO,GAE5B,GADID,IAAM,MAAQC,IAAM,MAAQD,IAAM,QAAaC,IAAM,QACrD,OAAOD,GAAM,OAAOC,EAAG,MAAO,GAClC,GAAIT,GAAWQ,CAAC,GAAKR,GAAWS,CAAC,SAAUD,IAAMC,EACjD,GAAIZ,GAAOW,CAAC,GAAKX,GAAOY,CAAC,EAAG,OAAOD,EAAE,QAAA,IAAcC,EAAE,QAAA,EACrD,GAAIf,GAAQc,CAAC,GAAKd,GAAQe,CAAC,EAAG,CAC5B,GAAID,EAAE,SAAWC,EAAE,OAAQ,MAAO,GAClC,QAASC,EAAI,EAAGA,EAAIF,EAAE,OAAQE,IAAK,GAAI,CAACH,GAAQC,EAAEE,CAAC,EAAGD,EAAEC,CAAC,CAAC,EAAG,MAAO,GAEpE,MAAO,EACT,CACA,GAAId,GAASY,CAAC,GAAKZ,GAASa,CAAC,EAAG,CAC9B,MAAME,EAAQ,OAAO,KAAKH,CAAC,EACrBI,EAAQ,OAAO,KAAKH,CAAC,EAC3B,GAAIE,EAAM,SAAWC,EAAM,OAAQ,MAAO,GAC1C,UAAWC,KAAOF,EAEhB,GADI,CAAC,OAAO,UAAU,eAAe,KAAKF,EAAGI,CAAG,GAC5C,CAACN,GAAQC,EAAEK,CAAG,EAAGJ,EAAEI,CAAG,CAAC,EAAG,MAAO,GAEvC,MAAO,EACT,CACA,MAAO,EACT,EAEaC,GAAStB,GAA0B,CAC9C,GAAI,CACF,WAAI,IAAIA,CAAI,EACL,EACT,OAAQuB,EAAA,CACN,MAAO,EACT,CACF,EAQaC,GAAqBC,GAA6B,QAC7D/B,EAAA,SAAS,cAAc,MAAM,IAA7B,MAAAA,EAAgC,aAAa,OAAQ+B,EACvD,EAQaC,GAAeC,GAAAC,GAAA,sBAAmC,WAAI,QAASC,GAAY,WAAWA,EAASF,CAAO,CAAC,IAOvGG,GAAUzD,GAChBA,EAEEA,EAAK,QAAQ,UAAW,SAAU0D,EAAKC,EAAQ,CACpD,OAAOA,EAAO,YAAA,CAChB,CAAC,EAJiB,GAaPC,GAAU5D,GAAyBA,EAAK,QAAQ,WAAY,KAAK,EAAE,YAAA,EAQnE6D,GAAgB,CAACC,EAAcrC,EAAUsC,EAAM,SAAS,kBAA0B,CAC7FA,EAAI,MAAM,YAAYD,EAAMrC,CAAG,CACjC,EAQauC,GAAgB,CAACF,EAAcC,EAAM,SAAS,kBAA4B,iBAAiBA,CAAG,EAAE,iBAAiBD,CAAI,EAOrHG,GAAW,SAAUC,EAAM,CACtC,IAAIC,EAAY,GAChB,OAAID,IACEA,EAAK,SAAS,SAAS,EAAGC,EAAYD,EACjCA,EAAK,SAAS,SAAS,IAAGC,EAAY,YAAYD,CAAI,KAC1DC,CACT,EAQaC,GAAW,CAACC,EAAkBC,IAAyB,CAAC,CAACD,EAAI,UAAU,MAAM,IAAI,OAAO,UAAYC,EAAM,SAAS,CAAC,EAOpHC,GAAW,CAACF,EAAkBC,IAAgB,CACpDF,GAASC,EAAKC,CAAG,IAAGD,EAAI,WAAa,IAAMC,EAClD,EAOaE,GAAc,CAACH,EAAkBC,IAAsB,CAClE,GAAIF,GAASC,EAAKC,CAAG,EAAG,CACtB,MAAMG,EAAM,IAAI,OAAO,UAAYH,EAAM,SAAS,EAClDD,EAAI,UAAYA,EAAI,UAAU,QAAQI,EAAK,GAAG,CAChD,CACF,EAMaC,GAAgBC,GAAaA,EAAI,cAAgBA,EAAI,aAAeA,EAAI,cAKxEC,GAAmB,CAC9B,KAAM,CACJ,YAAa,OACb,YAAa,aACb,WAAY,YAAA,EAEd,UAAW,CACT,YAAa,OACb,YAAa,sBACb,WAAY,YAAA,EAEd,SAAU,CACR,YAAa,OACb,YAAa,mBACb,WAAY,kBAAA,EAEd,KAAM,CACJ,YAAa,MACb,WAAY,aAAA,EAEd,MAAO,CACL,YAAa,OACb,YAAa,UACb,WAAY,SAAA,EAEd,KAAM,CACJ,YAAa,OACb,YAAa,OACb,WAAY,MAAA,CAEhB,EAUaC,GAAW,CAACC,EAAUC,EAAO,IAAKC,EAAY,KAAU,CACnE,IAAIC,EACAC,EACAC,EACAC,EACAC,EACJ,MAAMC,EAAQ,UAAY,CAExB,MAAMC,EAAO,CAAC,IAAI,KAASH,EAEvBG,EAAOR,GAAQQ,EAAO,IAAa,WAAWD,EAAOP,EAAOQ,CAAI,GAElEN,EAAU,KAELD,IACHK,EAASP,EAAK,MAAMK,EAASD,CAAG,EAC3BD,IAASE,EAAUD,EAAM,OAGpC,EACA,OAAO,YAAwBM,EAAM,CAEnCL,EAAU,KAEVD,EAAMM,EACNJ,EAAY,KAAK,KACjB,MAAMK,EAAUT,GAAa,CAACC,EAE9B,OAAKA,IAASA,EAAU,WAAWK,EAAOP,CAAI,GAC1CU,IACFJ,EAASP,EAAK,MAAMK,EAASD,CAAG,EAChCC,EAAUD,EAAM,MAGXG,CACT,CACF,EAQaK,GAAgBC,GAAuB,CAClD,GAAI,CAACA,EAAO,MAAO,GAEnB,GAAI,OAAOA,GAAU,SAAU,OAAOA,EAEtC,GAAI,OAAOA,GAAU,SAAU,OAAO,OAAOA,CAAK,EAElD,GAAI,OAAOA,EAAM,UAAa,SAAU,OAAOA,EAAM,SAAS,KAAA,EAE9D,GAAI,MAAM,QAAQA,EAAM,QAAQ,SAAUA,EAAM,SAAS,IAAKC,GAASF,GAAaE,CAAI,CAAC,EAAE,KAAK,EAAE,EAElG,GAAID,EAAM,UAAY,OAAOA,EAAM,UAAa,SAAU,CACxD,MAAM5E,EAAQ4E,EAAM,SAEpB,GAAI,OAAO5E,EAAM,SAAY,WAE3B,OADkBA,EAAM,QAAA,EACP,IAAK6E,GAAcF,GAAaE,CAAI,CAAC,EAAE,KAAK,EAAE,CAEnE,CAEA,MAAO,EACT,EAQaC,GAAgBF,GACtBA,GACE,OAAOA,EAAM,MAAS,UAAYA,EAAM,OAAS,MAAQ,SAAUA,EAAM,KAAOA,EAAM,KAAK,KAD/E,GAURG,GAAsBrE,GAC7BA,EAAYA,EAAI,QAAQ,KAAM,EAAE,EACxB,OAId,SAASsE,GAAWtE,EAAqB,CACvC,OAAIA,IAAQ,OAAe,IACfA,CACd,CAEA,SAASuE,GAAaC,EAASxE,EAAK,CAClC,MAAMyE,EAASzE,EACXA,EAAM,IAAGA,EAAM,CAACA,GACpB,MAAM0E,EAAa,4BAGnB,GAFI,CAACF,GAAW,CAAC,IAAI,OAAOE,EAAY,GAAG,EAAE,KAAKF,CAAO,GAErD,CAAChE,IAAUR,EAAM,IAAI,QAAQ,IAAK,EAAE,CAAC,EAAG,MAAO,OAEnD,MAAM2E,EAASH,EAAQ,MAAM,IAAI,OAAOE,EAAY,GAAG,CAAC,EAClDE,EAAKD,EAAO,CAAC,EAAE,QAAQ,GAAG,EAChC,GAAIC,EAAK,EAAG,CACV,MAAMC,EAAMF,EAAO,CAAC,EAAE,OAASC,EAAK,EACpC5E,EAAM,KAAK,MAAMA,EAAM,KAAK,IAAI,GAAI6E,CAAG,CAAC,EAAI,KAAK,IAAI,GAAIA,CAAG,CAC9D,MAAO7E,EAAM,KAAK,MAAMA,CAAG,EAE3BA,EAAMA,EAAM,GACZ,MAAM8E,EAAK9E,EAAI,QAAQ,GAAG,EAC1B,IAAI+E,EAAM,GACV,GAAIH,EAAK,EAAG,CACV,QAASxD,EAAIwD,EAAK,EAAGxD,EAAIuD,EAAO,CAAC,EAAE,OAAQvD,IAAK,CAC9C,MAAM4D,EAAKF,EAAK,GAAKA,EAAK1D,EAAIwD,EAAK5E,EAAI,OAASA,EAAI,OAAO8E,EAAK1D,EAAIwD,CAAE,EAAI,GACtED,EAAO,CAAC,EAAE,OAAOvD,CAAC,IAAM,IAAK2D,EAAMA,GAAOC,IAAO,GAAK,IAAMA,GAC3DD,EAAMA,GAAOC,IAAO,GAAK,GAAKA,EACrC,CACAD,EAAMA,IAAQ,GAAK,GAAK,IAAMA,CAChC,CACA,MAAME,EAAKN,EAAO,CAAC,EAAE,QAAQ,GAAG,EAChC,GAAIM,EAAK,EAAG,CACV,MAAMJ,EAAMD,EAAK,EAAIA,EAAKK,EAAK,EAAIN,EAAO,CAAC,EAAE,OAASM,EAAK,EACrDC,EAAOJ,EAAK,EAAIA,EAAK,EAAI9E,EAAI,OAAS,EAC5C,QAASoB,EAAI8D,EAAM9D,GAAK,EAAGA,QAAa8D,EAAO9D,EAAI,GAAKyD,IAAQ,EAAI,IAAM,IAAM7E,EAAI,OAAOoB,CAAC,EAAI2D,EAEhGA,EAAMA,EAAI,OAAO,CAAC,IAAM,IAAMA,EAAI,UAAU,EAAGA,EAAI,MAAM,EAAIA,CAC/D,MAAOA,EAAM/E,EAAI,UAAU,EAAG8E,EAAK,EAAIA,EAAK9E,EAAI,MAAM,EAAI+E,EAE1D,OAAIN,EAAS,IAAGM,EAAM,IAAMA,GAErBP,EAAQ,QAAQG,EAAO,CAAC,EAAGI,CAAG,CACvC,CASO,MAAMI,GAAe,CAACnF,EAAsBoF,EAAU,IAAc,CACzE,IAAIC,EAAIrF,EAAM,GACd,GAAIqF,IAAM,MAAQA,IAAM,QAAUA,IAAM,KAAOA,IAAM,QAAaA,IAAM,YAAa,MAAO,OACxFA,EAAE,QAAQ,GAAG,EAAI,IAAGA,EAAIhB,GAAmBgB,CAAC,GAChD,IAAIb,EAAU,SACVc,EAAiB,KACrB,OAAIF,IAASE,EAAiBA,EAAe,SAASF,EAAS,GAAG,GAClEZ,EAAUA,EAAUc,EACbhB,GAAWC,GAAaC,EAASa,CAAC,CAAC,CAC5C,EAQaE,GAAgBC,GAAO,CAClC,GAAIA,GAAMA,EAAG,KACX,GAAIA,EAAG,IAAI,YAAA,IAAkB,KAAOA,EAAG,UAAY,GAAM,CAEvDA,EAAG,eAAA,EACHA,EAAG,gBAAA,EACH,MAAMC,EAAU,SAAS,KAAK,cAAc,iEAAiE,EAC7G,GAAIA,GAAWA,EAAQ,MAAM,UAAY,SAAgB,MAAA,MACpD,CACH,MAAMA,EAAU,SAAS,KAAK,cAAc,+DAA+D,EACvGA,GAAWA,EAAQ,MAAM,UAAY,IAAIA,EAAQ,MAAA,CACvD,CACF,SAAWD,EAAG,IAAI,YAAA,IAAkB,KAAOA,EAAG,UAAY,GAAM,CAE9DA,EAAG,eAAA,EACHA,EAAG,gBAAA,EACH,MAAMC,EAAU,SAAS,KAAK,cAAc,yEAAyE,EACjHA,GAAWA,EAAQ,MAAM,UAAY,QAAYA,EAAQ,aAAa,SAAS,KAAW,MAAA,CAChG,SAAWD,EAAG,IAAI,YAAA,IAAkB,KAAOA,EAAG,UAAY,GAAM,CAE9DA,EAAG,eAAA,EACHA,EAAG,gBAAA,EACH,MAAMC,EAAU,SAAS,KAAK,cAAc,0EAA0E,EACtH,GAAIA,GAAWA,EAAQ,MAAM,UAAY,KAAY,MAAA,MAChD,CACH,MAAMA,EAAU,SAAS,KAAK,cAAc,0EAA0E,EAClHA,EAAQ,MAAM,UAAY,IAAIA,EAAQ,MAAA,CAC5C,CACF,SAAWD,EAAG,IAAI,YAAA,IAAkB,KAAOA,EAAG,UAAY,GAAM,CAE9DA,EAAG,eAAA,EACHA,EAAG,gBAAA,EACH,MAAMC,EAAU,SAAS,KAAK,cAAc,yHAAyH,EACrK,GAAIA,GAAWA,EAAQ,MAAM,UAAY,KAAY,MAAA,MAChD,CACH,MAAMA,EAAU,SAAS,KAAK,cAAc,6DAA6D,EACrGA,GAAWA,EAAQ,MAAM,UAAY,IAAIA,EAAQ,MAAA,CACvD,CACF,SAAWD,EAAG,IAAI,YAAA,IAAkB,KAAOA,EAAG,UAAY,GAAM,CAE9DA,EAAG,eAAA,EACHA,EAAG,gBAAA,EACH,MAAMC,EAAU,SAAS,KAAK,cAAc,mFAAmF,EAC/H,GAAIA,GAAWA,EAAQ,MAAM,UAAY,KAAY,MAAA,MAChD,CACH,MAAMA,EAAU,SAAS,KAAK,cAAc,6DAA6D,EACrGA,GAAWA,EAAQ,MAAM,UAAY,IAAIA,EAAQ,MAAA,CACvD,CACF,SAAWD,EAAG,IAAI,YAAA,IAAkB,KAAOA,EAAG,UAAY,GAAM,CAE9DA,EAAG,eAAA,EACHA,EAAG,gBAAA,EACH,MAAME,EAAY,SAAS,KAAK,cAAc,iHAAiH,EAC3JA,KAAqB,MAAA,CAC3B,SAAWF,EAAG,MAAQ,SAAU,CAE9BA,EAAG,eAAA,EACHA,EAAG,gBAAA,EACH,MAAMG,EAAqB,SAAS,gBAAgB,cAAc,+BAA+B,EACjG,GAAIA,GAAsBA,EAAmB,MAAM,UAAY,OACtCA,EAAmB,cAAc,8CAA8C,EACvF,MAAA,MACV,CACL,MAAMC,EAAiB,SAAS,gBAAgB,cAAc,iBAAiB,EAC/E,GAAIA,GAAkBA,EAAe,MAAM,UAAY,OAC9BA,EAAe,cAAc,2BAA2B,EAChE,MAAA,MACV,CACL,MAAMC,EAAY,SAAS,KAAK,iBAAiB,4DAA4D,EAC7G,GAAIA,GACF,QAAS,EAAI,EAAG,EAAIA,EAAU,OAAQ,IACpC,GAAIA,EAAU,CAAC,EAAE,MAAM,UAAY,OAAQ,CACzC,MAAMC,EAAaD,EAAU,CAAC,EAAE,cAAc,2BAA2B,EACzE,GAAIC,GAAcA,EAAW,MAAM,UAAY,OAAQ,CACrDA,EAAW,MAAA,EACX,MACF,CACF,EAEJ,MAAMC,EAAc,SAAS,KAAK,cAAc,sFAAsF,EAClIA,GAAeA,EAAY,MAAM,UAAY,UAAoB,MAAA,CACvE,CACF,CACF,EACJ,EAEaC,GAAc,CAACC,EAAoB/F,IAAiB,CAC/D,GAAIsB,GAAMtB,CAAI,EAAG,OAAOA,EACxB,MAAMgG,EAAYhG,EAAK,WAAW,GAAG,GAAK,CAACA,EAAOA,EAAO,IAAIA,CAAI,GACjE,MAAO,GAAG+F,CAAU,GAAGC,CAAS,GAAG,QAAQ,QAAS,GAAG,EAAE,KAAA,CAC3D,iMCzcE,KAAM,CAAE,UAAArI,CAAA,EAAcC,YAAA,EAChBqI,EAAetI,EAAU,UACzBuI,EAAQC,EAAAA,SAAA,EAOR7H,EAAQ8H,EAcRC,EAAUC,EAAAA,SAAS,IAAMvG,GAAWzB,EAAM,QAAQ,CAAC,EACnDiI,EAAWD,EAAAA,SAAS,IACpBhI,EAAM,WAAa,MAAc,MAC5BA,EAAM,WAAa,WAAmB,WACtCA,EAAM,WAAa,KAAa,KAChCA,EAAM,WAAa,GACtBA,EAAM,SAAS,WAAW,SAAS,EAAU,KACxCA,EAAM,SAAS,WAAW,KAAK,EAAU,WACtC,MACF,KACb,EACKkI,EAAWF,EAAAA,SAAS,IACpBC,EAAS,QAAU,MAAc,IAAIN,CAAY,SAAS3H,EAAM,QAAQ,GACnEiI,EAAS,QAAU,WAAmB,YAAcjI,EAAM,SAC1DiI,EAAS,QAAU,KAAajI,EAAM,SACnC,IAAIA,EAAM,QAAQ,EAC/B,EAGKmI,EAAWH,EAAAA,SAAS,IACpBC,EAAS,QAAU,MAAcjI,EAAM,UAAY,YAAcA,EAAM,UAAY,WAC3EA,EAAM,SACnB,EACKoI,EAAoBJ,EAAAA,SAAS,KAAO,CACxC,KAAM,OAAOhI,EAAM,QAAQ,sBAC3B,eAAgB,OAAOA,EAAM,QAAQ,qBAAA,EACrC,EAQIqI,EAAgBL,EAAAA,SAAS,IAAM,CAGnC,GAAIC,EAAS,QAAU,KAAM,OAAO,KACpC,MAAMlI,EAAOC,EAAM,SACnB,IAAIsI,EAAW,GACf,OAAIvI,EAAK,WAAW,SAAS,GAC3BuI,EAAWvI,EAAK,QAAQ,WAAY,EAAE,EACtCuI,EAAWA,EAAS,OAAO,CAAC,EAAE,cAAgBA,EAAS,MAAM,CAAC,GACzDA,EAAWvI,EAAK,OAAO,CAAC,EAAE,cAAgBA,EAAK,MAAM,CAAC,EAEtDwI,GAAMD,CAA8B,CAC7C,CAAC,eAIOP,EAAA,OADRS,EAAAA,UAAA,EAAAC,EAAAA,mBAIuB,MAJvBC,aAIuB,OAFpB,MAAON,EAAA,MACR,MAAM,4BAAA,EACE3I,EAAAA,MAAAmI,CAAA,CAAK,EAAA,KAAA,EAAA,GAEFK,EAAA,QAAQ,OADrBO,EAAAA,UAAA,EAAAC,EAAAA,mBAMM,MANNC,EAAAA,WAMM,OAJH,MAAOP,EAAA,MACR,cAAY,MAAA,EACJ1I,EAAAA,MAAAmI,CAAA,CAAK,EAAA,CACbe,qBAAwB,MAAA,CAAlB,KAAMT,EAAA,OAAQ,KAAA,EAAAU,EAAA,CAAA,OAGTX,EAAA,QAAQ,YADrBO,EAAAA,YAAAC,EAAAA,mBAII,IAJJC,aAII,OAFD,MAAK,CAAGR,EAAA,MAAUC,EAAA,KAAQ,CAAA,EACnB1I,EAAAA,MAAAmI,CAAA,CAAK,EAAA,KAAA,EAAA,GAGFS,EAAA,qBADb7I,EAAAA,YAISC,EAAAA,MAAAoJ,EAAAA,MAAA,EAAA,OAFN,uBAAOV,EAAA,KAAQ,CAAA,qBAChB,IAAiC,EAAjCK,EAAAA,YAAAhJ,EAAAA,YAAiCsJ,EAAAA,wBAAjBT,EAAA,KAAa,CAAA,EAAA,uBAE/BG,EAAAA,UAAA,EAAAC,EAAAA,mBAOM,MAPNC,aAOM,OALH,MAAOP,EAAA,MACP,mBAAsBL,EAAA,KAAI,IAAA,EAC3B,cAAY,MAAA,EACJrI,EAAAA,MAAAmI,CAAA,CAAK,EAAA,CACbe,qBAA8B,MAAA,CAAxB,aAAYT,EAAA,OAAQ,KAAA,EAAAa,EAAA,CAAA,6CCnHxBC,GAAe,CACnB,QAAQpJ,EAAgB,OACtBA,EAAI,WAAUwB,EAAA6H,GAAO,OAAP,KAAA7H,EAAe,SAAU6H,EAAM,CAC/C,CACF,ECDMC,GAAmC,CACvC,GAAI,KACJ,SAAU,WACV,IAAK,KACP,EACMC,GAAaC,GAAsC,OAAO,OAAO,CAAA,EAAIF,GAAgBE,CAAM,EAEpFC,GAAa,CAAUC,EAAaF,EAAoC,KAAY,CAC/F,MAAMG,EAAOJ,GAAUC,CAAM,EACvBI,MAAc,IACdpE,EAAc,CAAA,EACd,CAAE,GAAAqE,EAAI,SAAAC,EAAU,IAAAC,CAAA,EAAQJ,EAE9B,UAAWK,KAAQN,EACjBM,EAAKF,CAAQ,EAAIE,EAAKF,CAAQ,GAAK,CAAA,EACnCF,EAAQ,IAAII,EAAKH,CAAE,EAAGG,CAAI,EAE5B,UAAWA,KAAQN,EAAM,CACvB,MAAMO,EAASL,EAAQ,IAAII,EAAKD,CAAG,CAAC,GACnCE,EAASA,EAAO,SAAWzE,GAAQ,KAAKwE,CAAI,CAC/C,CACA,OAAOxE,CACT,EAEa0E,GAAa,CAAUC,EAAWX,EAAoC,KAAU,CAC3FA,EAASD,GAAUC,CAAM,EACzB,KAAM,CAAE,SAAAM,GAAaN,EACfhE,EAAc,CAAC,GAAG2E,CAAI,EAC5B,QAASnH,EAAI,EAAGA,EAAIwC,EAAO,OAAQxC,IAC5BwC,EAAOxC,CAAC,EAAE8G,CAAS,GACxBtE,EAAO,OAAOxC,EAAI,EAAG,EAAG,GAAGwC,EAAOxC,CAAC,EAAE8G,CAAS,CAAC,EAEjD,OAAOtE,CACT,EAEa4E,GAAW,CAAUD,EAAWlF,EAAUuE,EAAoC,CAAA,IAAiB,CAC1GA,EAASD,GAAUC,CAAM,EACzB,KAAM,CAAE,SAAAM,GAAaN,EACfE,EAAO,CAAC,GAAGS,CAAI,EACrB,UAAWH,KAAQN,EAAM,CACvB,GAAIzE,EAAK+E,CAAI,EAAG,OAAOA,EACvBA,EAAKF,CAAS,GAAKJ,EAAK,KAAK,GAAGM,EAAKF,CAAS,CAAC,CACjD,CACA,OAAO,IACT,EAEaO,GAAc,CAAUF,EAAWlF,EAAUuE,EAAoC,CAAA,IAAY,CACxGA,EAASD,GAAUC,CAAM,EACzB,KAAM,CAAE,SAAAM,GAAaN,EACfE,EAAO,CAAC,GAAGS,CAAI,EACf3E,EAAc,CAAA,EACpB,UAAWwE,KAAQN,EACjBzE,EAAK+E,CAAI,GAAKxE,EAAO,KAAKwE,CAAI,EAC9BA,EAAKF,CAAS,GAAKJ,EAAK,KAAK,GAAGM,EAAKF,CAAS,CAAC,EAEjD,OAAOtE,CACT,EAEa8E,GAAW,CAAUH,EAAWlF,EAAUuE,EAAoC,CAAA,IAAuB,CAChHA,EAASD,GAAUC,CAAM,EACzB,MAAM1H,EAAY,CAAA,EACZ4H,EAAO,CAAC,GAAGS,CAAI,EACfI,MAAiB,IACjB,CAAE,SAAAT,GAAaN,EACrB,KAAOE,EAAK,QAAQ,CAClB,MAAMM,EAAON,EAAK,CAAC,EACnB,GAAIa,EAAW,IAAIP,CAAI,EACrBlI,EAAK,IAAA,EACL4H,EAAK,MAAA,UAELa,EAAW,IAAIP,CAAI,EACnBA,EAAKF,CAAS,GAAKJ,EAAK,QAAQ,GAAGM,EAAKF,CAAS,CAAC,EAClDhI,EAAK,KAAKkI,CAAI,EACV/E,EAAK+E,CAAI,EAAG,OAAOlI,CAE3B,CACA,OAAO,IACT,EAEa0I,GAAc,CAACL,EAAWlF,EAAUuE,EAAoC,CAAA,IAAO,CAC1FA,EAASD,GAAUC,CAAM,EACzB,MAAM1H,EAAc,CAAA,EACd4H,EAAO,CAAC,GAAGS,CAAI,EACf3E,EAAgB,CAAA,EAChB+E,MAAiB,IACjB,CAAE,SAAAT,GAAaN,EACrB,KAAOE,EAAK,QAAQ,CAClB,MAAMM,EAAON,EAAK,CAAC,EACfa,EAAW,IAAIP,CAAI,GACrBlI,EAAK,IAAA,EACL4H,EAAK,MAAA,IAELa,EAAW,IAAIP,CAAI,EACnBA,EAAKF,CAAS,GAAKJ,EAAK,QAAQ,GAAGM,EAAKF,CAAS,CAAC,EAClDhI,EAAK,KAAKkI,CAAI,EACd/E,EAAK+E,CAAI,GAAKxE,EAAO,KAAK,CAAC,GAAG1D,CAAI,CAAC,EAEvC,CACA,OAAO0D,CACT,EAEaiF,GAAS,CAAUN,EAAWlF,EAAyBuE,EAAoC,CAAA,IAAY,CAClHA,EAASD,GAAUC,CAAM,EACzB,MAAMM,EAAWN,EAAO,SACxB,SAASkB,EAAWhB,EAAW,CAC7B,OAAOA,EACJ,IAAKM,GAAeW,GAAA,GAAKX,EAAO,EAChC,OAAQA,IACPA,EAAKF,CAAQ,EAAIE,EAAKF,CAAQ,GAAKY,EAAWV,EAAKF,CAAQ,CAAC,EACrD7E,EAAK+E,CAAI,GAAMA,EAAKF,CAAQ,GAAKE,EAAKF,CAAQ,EAAE,OACxD,CACL,CACA,OAAOY,EAAWP,CAAI,CACxB,EAEaS,GAAU,CAAUT,EAAWlF,EAAqBuE,EAAoC,CAAA,IAAa,CAChHA,EAASD,GAAUC,CAAM,EACzB,MAAME,EAAc,CAAC,GAAGS,CAAI,EACtB,CAAE,SAAAL,GAAaN,EACrB,QAAS,EAAI,EAAG,EAAIE,EAAK,OAAQ,IAAK,CAEpC,GAAIzE,EAAKyE,EAAK,CAAC,CAAC,EAAG,OAEnBI,GAAYJ,EAAK,CAAC,EAAEI,CAAQ,GAAKJ,EAAK,OAAO,EAAI,EAAG,EAAG,GAAGA,EAAK,CAAC,EAAEI,CAAQ,CAAC,CAC7E,CACF,EAIae,GAAc,CAACC,EAAW,CAAE,SAAAhB,EAAW,WAAY,WAAAiB,KAAwD,CACtH,MAAMC,EAAe,MAAM,QAAQF,EAAKhB,CAAQ,CAAC,GAAKgB,EAAKhB,CAAQ,EAAE,OAAS,EACxEmB,EAAiBF,EAAWD,CAAI,GAAK,CAAA,EAC3C,OAAIE,EACKE,GAAAP,GAAA,GACFM,GADE,CAEL,CAACnB,CAAQ,EAAGgB,EAAKhB,CAAQ,EAAE,IAAK,GAC9Be,GAAY,EAAG,CACb,SAAAf,EACA,WAAAiB,CAAA,CACD,CAAA,CACH,GAGKJ,GAAA,GACFM,EAET,EAIaE,GAAU,CAAUC,EAAeC,IAAoDD,EAAS,IAAKrF,GAAS8E,GAAY9E,EAAMsF,CAAG,CAAC,EAQpIC,GAAW,CAACC,EAAkBC,EAAcC,EAAa,CAAA,IAAO,CAC3EF,EAAU,QAASG,GAAY,CAC7B,MAAMC,EAAUH,EAASE,EAASD,CAAU,GAAKC,EAC7CA,EAAQ,UAAUJ,GAASI,EAAQ,SAAUF,EAAUG,CAAO,CACpE,CAAC,CACH,EC1JaC,GAAmB,CAACC,EAA6BhE,EAAa,KAA4B,OACrG,MAAMiE,EAA2B,CAAA,EAEjC,UAAWC,KAASF,EAAQ,CAC1B,MAAMG,EAAOD,GAAA,YAAAA,EAAO,KACpB,GAAIA,EAAM,OAAS,SAAUC,GAAA,MAAAA,EAAM,SAAU,CAACA,EAAK,MAAO,SAE1D,MAAMlB,EAA0B,EAACkB,GAAA,MAAAA,EAAM,eAAcxK,EAAAuK,EAAM,WAAN,YAAAvK,EAAgB,UAAW,EAAI0J,GAAAP,GAAA,GAAKoB,EAAM,SAAS,CAAC,GAArB,CAAwB,KAAMnE,GAAYmE,EAAM,KAAMA,EAAM,SAAS,CAAC,EAAE,IAAI,IAAMpB,GAAA,GAAKoB,GAE3KjB,EAAK,KAAOlD,GAAYC,EAAYiD,EAAK,IAAI,EAEzCA,EAAK,WAAUA,EAAK,SAAWc,GAAiBd,EAAK,SAAUA,EAAK,IAAI,GAExEA,GAAMgB,EAAI,KAAKhB,CAAI,CACzB,CACA,OAAOgB,CACT,ECR6C,SAAAG,GAAAC,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAC,OAAAC,UAAA1K,SAAA2K,KAAAH,CAAA,IAAA,mBAAA,CAAAI,EAAAA,QAAAJ,CAAA,CAAA,CAE3C,KAAM,CAAE1M,aAAAA,EAAa,EAAIE,YAAQ,EAE3BC,GAAYH,GAAa,YAAY,0BAEZ,CAC7BW,KAAM,eACNc,OAAQ,CACN,MAAMsL,EAAWC,GAAAA,YAAW,EACtBC,EAAYC,GAAAA,cAAa,EAEzBC,EAAqBvE,EAAAA,SAAS,IAAMmE,EAASK,qBAAqB,EAClE,CAAEC,aAAAA,GAAiBC,aAAS,EAE5B,CAAEC,EAAAA,GAAMzN,GAAa,EAErB0N,EAAYC,EAAAA,IAAyB,EAAE,EACvCC,EAAc9E,EAAAA,SAAS,IAAM,CACjC,MAAM+E,EAAUV,EAAUW,WAC1B,OAAOxB,GAAiBuB,CAAO,CACjC,CAAC,EAEKE,EAAgBA,IAAM,CAC1B,MAAMC,EAAcT,EAAapM,MAAM8M,QAAQC,MAAM,EAAE,EAAE,CAAC,EAAE1L,KAC5DkL,EAAUvM,MAAQgK,GAA0BgD,QAAMP,CAAW,EAAIlD,GAA4BA,EAAKlI,OAASwL,CAAW,CACxH,EAEMI,EAAmBA,IACAxD,GAAgCuD,EAAAA,MAAMT,CAAS,CAAC,EACjDW,IAAK1G,GAAM,CAC/B,MAAM2G,EAAW,CAAC3G,EAAE4G,UAAY5G,EAAE4G,WAAa,aACzC7B,EAAO/E,EAAE+E,KACf,OAAA7K,EAAAA,YAAA2M,EAAAA,iBAAA,CAAA,GAEQ,CAAEhM,KAAM8L,EAAW,GAAK3G,EAAEnF,MAAM,IAC/BmF,EAAE9G,IAAI,EAAA,CAAAK,QAAAA,IAAAA,SAAA,OACVwL,GAAAA,MAAAA,EAAM3H,MAAQsI,EAAmBlM,oFAIlBuL,EAAK3H,KAAI,UAAA,eAAA,IAAA,EACe,IACnC0I,IAAE9F,EAAAA,GAAAA,YAAAA,EAAG+E,OAAH/E,YAAAA,EAAS8G,QAAS,EAAE,CAAC,CAAA,EAG1BhB,IAAE9F,EAAAA,GAAAA,YAAAA,EAAG+E,OAAH/E,YAAAA,EAAS8G,QAAS,EAAE,CACvB,EAAA,CAAA,CAGP,CAAC,EAGHC,OAAAA,EAAAA,MACE,IAAMnB,EAAapM,MAAMqB,KACxBA,GAAS,CACJA,EAAKmM,WAAW,YAAY,GAEhCZ,EAAa,CACf,EACA,CACElI,UAAW,EACb,CACF,EAIO,IAAA,CAAA,IAAA+I,EAAA,OAAA/M,EAAAA,YAAAgN,EAAAA,aAAA,CAAA,UAAA,IAAA,MAGI,GAAGxO,EAAS,qCAAqC,EAAA,CAAAa,QAAAA,IAAA,CAAAW,EAAAA,YAAAiN,kBAAA,CAAA,OAAA,GAAA,qBAAA,0CAAAnC,GAAAiC,EAIrDR,EAAgB,CAAE,EAAAQ,EAAA,CAAA1N,QAAAA,IAAA,CAAA0N,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAI3B,CACF,CAAC,qCCnGGG,GAAqB,CACzB,QAAQrO,EAAgB,OACtBA,EAAI,WAAUwB,EAAA8M,GAAa,OAAb,KAAA9M,EAAqB,eAAgB8M,EAAY,CACjE,CACF,ECWQ,CAAE9O,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,YAAY,0BAEZ,CAC7BW,KAAM,eACNC,MAAO,CACL2N,MAAO,CACLzN,KAAMC,OACNC,QAAS,EACX,GAGF+N,MAAO,CAAC,SAAS,EAEjBtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAC5B,MAAMuN,EAAWC,EAAAA,mBAAkB,EAE7BC,EAAiBC,GAAsB,CAC3CJ,EAAK,UAAWI,EAAOH,CAAQ,CACjC,EAEA,MAAO,IAAAtN,EAAAA,YAAA0N,eAAA,CAAA,MAEIzO,EAAM2N,MAAK,UACPY,EAAa,MACjBhP,EAAS,EAAA,CAEdmP,UAAWA,IAAAA,OAAM5N,OAAAA,EAAAA,EAAM4N,YAAN5N,YAAAA,EAAAA,KAAAA,IAAmB,CAI5C,CACF,CAAC,qCC9CG6N,GAAgB,CACpB,QAAQ/O,EAAgB,OACtBA,EAAI,WAAUwB,EAAAwN,GAAa,OAAb,KAAAxN,EAAqB,eAAgBwN,EAAY,CACjE,CACF,ECMMC,GAAgBxO,GACP,OAAO,UAAU,SAAS,KAAKA,CAAK,EACrC,MAAM,EAAG,EAAE,EAGZyO,GAAa,CAAC5O,EAA0C,oBA+B5D,CACL,WA/BiB,CAAC6C,EAAa1C,IAAqB,CACpD,MAAM0O,EAAYF,GAAaxO,CAAK,EACpC,OAAOH,CAAI,EAAE,QAAQ6C,EAAK,KAAK,UAAU,CAAE,KAAMgM,EAAW,MAAA1O,CAAA,CAAO,CAAC,CACtE,EA6BE,WA3BkB0C,GAAqB,CACvC,MAAM1C,EAAQ,OAAOH,CAAI,EAAE,QAAQ6C,CAAG,EACtC,GAAI1C,EAAO,CACT,KAAM,CAAE,MAAOmB,CAAA,EAAQ,KAAK,MAAMnB,CAAK,EACvC,OAAOmB,CACT,KAAO,QAAOnB,CAChB,EAsBE,cApBqB0C,GAAsB,CAC3C,OAAO7C,CAAI,EAAE,WAAW6C,CAAG,CAC7B,EAmBE,MAjBaiM,GAA8B,CAE3C,MAAMC,EAAO,OAAO,KAAK,OAAO/O,CAAI,CAAC,EAC/BgP,EAAkB,CAAC,gBAAiB,qBAAqB,EACzDC,EAAcH,EAAW,CAAC,GAAGA,EAAU,GAAGE,CAAe,EAAIA,GAC9CC,EAAcF,EAAK,OAAQlM,GAAQ,CAACoM,EAAY,SAASpM,CAAG,CAAC,EAAIkM,GAEzE,QAASlM,GAAQ,CAC5B,OAAO7C,CAAI,EAAE,WAAW6C,CAAG,CAC7B,CAAC,CAEH,CAME,GClCEqM,GAAmB,IACnBC,GAAwB,IACxBC,GAAc,IACdC,GAAmB,IAmBZC,GAAQ,CAAOC,EAAcvP,EAAoB,YAAcoD,GAAA,sBAC1E,MAAMoM,EAAW,SAAS,KAAK,cAAc,uBAAuB,EAChEA,KAAmB,OAAA,EACvB,KAAM,CAAE,WAAAC,CAAA,EAAeb,GAAW,cAAc,EAC1Cc,EAAOD,EAAW,MAAM,EAC9B,IAAIE,EAAY,OACZD,IAAS,OAAMC,EAAY,QAC/B,MAAMC,EAAW5P,IAAS,QAAUmP,GAAwBD,GAC5D,IAAIW,EAAI,gBACJlO,GAAQ4N,CAAG,EAAGM,EAAIN,EAAI,SAAW,gBAC5B,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,UAAWM,EAAI,OAAON,CAAG,EAC9F,OAAOA,GAAQ,WAAUM,EAAI,KAAK,UAAUN,CAAG,GAExDO,iBAAe,CACb,MAAOH,EACP,QAASE,EACT,KAAA7P,EACA,SAAA4P,CAAA,CACD,EACD,MAAM1M,GAAM0M,CAAQ,CACtB,GAQaG,GAAU,CAAOR,EAAavP,EAAoB,YAAcoD,GAAA,sBAC3E,GAAI,SAAS,KAAK,cAAc,kBAAkB,EAAG,OAErD,IAAI4M,EACJ,MAAMC,EAAmB,GACzBD,EAAO,WACP,KAAM,CAAE,WAAAP,CAAA,EAAeb,GAAW,cAAc,EAC1Cc,EAAOD,EAAW,MAAM,EAC9B,IAAIS,EAAO,OACPC,EAAK,KACLC,EAAS,KACb,OAAIb,EAAKS,EAAOT,EACPG,IAAS,OAChBM,EAAO,oCACPE,EAAO,OACPC,EAAK,KACLC,EAAS,UAGJ,IAAI,QAAQ,CAAC/M,EAASgN,IAAW,CACtCC,eAAa,QAAQN,EAAME,EAAM,CAC/B,kBAAmBC,EACnB,iBAAkBC,EAClB,KAAApQ,EACA,iBAAAiQ,CAAA,CACiB,EAChB,KAAK,IAAM,CACV5M,EAAQ,EAAI,CACd,CAAC,EACA,MAAM,IAAM,CACXgN,EAAO,EAAK,CACd,CAAC,CACL,CAAC,CACH,GAEaE,GAAU,CAAOhB,EAAcvP,EAAoB,UAAWwQ,EAAqB,KAAUpN,GAAA,sBACxG,GAAIoN,IAAc,KACG,SAAS,KAAK,cAAc,kBAAkB,GAG/C,SAAS,KAAK,cAAc,uBAAuB,GACtD,OAEjB,IAAIX,EAAI,gBACJlO,GAAQ4N,CAAG,EAAGM,EAAIN,EAAI,SAAW,gBAC5B,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,UAAWM,EAAI,OAAON,CAAG,EAC9F,OAAOA,GAAQ,WAAUM,EAAI,KAAK,UAAUN,CAAG,GACxD,MAAMK,EAAW5P,IAAS,QAAUqP,GAAmBD,GACvDqB,YAAU,CACR,QAASZ,EACT,UAAW,GACX,KAAA7P,EACA,SAAA4P,CAAA,CACD,EACD,MAAM1M,GAAM0M,CAAQ,CACtB,GCnGQ,CAAE1Q,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,QAAQ,0BAER,CAC7BW,KAAM,WACNC,MAAO,CACL4Q,QAAS,CACP1Q,KAAMO,QACNL,QAAS,IAEXyQ,KAAM,CACJ3Q,KAAMC,OACNC,QAAS,IAEX0Q,MAAO,CACL5Q,KAAMC,OACNC,QAAS,IAEX2Q,KAAM,CACJ7Q,KAAMC,OACNC,QAAS4Q,QAEX9Q,KAAM,CACJA,KAAMC,OACNC,QAAS,WAEX6Q,KAAM,CACJ/Q,KAAMO,QACNL,QAAS,IAEX8Q,QAAS,CACPhR,KAAMO,QACNL,QAAS,IAEXoN,SAAU,CACRtN,KAAM,CAACO,QAASN,MAAM,EACtBC,QAAS,IAEX+Q,QAAS,CACPjR,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEX/M,KAAM,CAEJ/D,KAAMC,OACNC,QAAS,IAEXiR,WAAY,CACVnR,KAAMC,OACNC,QAAS,UAEXkR,QAAS,CACPpR,KAAMC,OACNC,QAAS4Q,QAEXzL,KAAM,CACJrF,KAAMC,OACNC,QAAS4Q,QAEXf,QAAS,CACP/P,KAAM,CAACO,QAASN,MAAM,EACtBC,QAAS,IAEXmR,MAAO,CACLrR,KAAMC,OACNC,QAAS4Q,QAEXQ,GAAI,CACFtR,KAAMuR,SACNrR,QAASA,IAAM,CAAC,CAClB,GAIF+N,MAAO,CAAC,QAAS,SAAS,EAE1BtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAG5B,KAAM,CAAE6L,EAAAA,GAAMzN,GAAa,EACrByM,EAAQ+F,GAAAA,SAAQ,EAChBvF,EAAWC,GAAAA,YAAW,EACtBiC,EAAWC,EAAAA,mBAAkB,EAC7BqD,EAAaC,EAAAA,gBAAgB,MAAM,EACnCC,EAAa7J,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EACzGG,EAAgB9J,EAAAA,SAAS,IAAMmE,EAAS2F,aAAa,EACrDC,EAAWlF,EAAAA,IAAI7M,EAAMkR,OAAO,EAC5Bc,EAASnF,EAAAA,IAAI,EAAK,EAClBoF,EAASpF,EAAAA,IAAI7M,EAAM4Q,OAAO,EAC1BsB,EAAOrF,EAAAA,IAAI,EAAI,EAGfsF,EAAWnK,EAAAA,SAAS,IAAM,OAC9B,OAAIhI,EAAM6Q,MAAQ7Q,EAAM8Q,MAAc9Q,EAAM6Q,MAChC/P,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EACd,CAAC,EAGD8M,EAAAA,MACE,IAAM5N,EAAMkR,QACXrK,GAAOkL,EAAS1R,MAAQwG,CAC3B,EACA+G,EAAAA,MACE,IAAM5N,EAAM4Q,QACX/J,GAAOoL,EAAO5R,MAAQwG,CACzB,EAIA,MAAMuL,EAAeA,IACdpS,EAAMiE,KACPjE,EAAMiE,KAAK4J,WAAW,SAAS,EACjC9M,EAAAA,YAAAkI,GAAA,CAAA,SAAA,KAAA,SAGcjJ,EAAMiE,KAAKoO,QAAQ,WAAY,EAAE,GAAC,IAAA,EAGzCrS,EAAMiE,KAAK4J,WAAW,UAAU,GAAK7N,EAAMiE,KAAK4J,WAAW,SAAS,EAC3E9M,EAAAA,YAAAkI,GAAA,CAAA,SAAA,WAAA,SAGcjJ,EAAMiE,KAAKoO,QAAQ,WAAY,EAAE,CAAC,EAAA,IAAA,EAG7CtR,EAAAA,YAAAkI,GAAA,CAAA,SAAyBjJ,EAAMiE,IAAI,EAAA,IAAA,EAfhB,GA8BpBqO,EAAaA,IAAM,OACvB,GAAI3G,EAAO,CACT,MAAMC,GAAOD,EAAMC,KACnB,GAAIA,GAAM,CACR,MAAM2G,EAAK3G,GAAK2G,IAAM,GACtB,GAAIA,EAAI,CACN,IAAIlI,EAAiBrK,EAAM6Q,MAAQ,GAEnC,GADI7Q,EAAM8Q,QAAOzG,EAASrK,EAAM8Q,OAC5BzG,IAAW,GAAI,CACjB,MAAMmI,GAAO1R,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,GACT0R,GAAQA,EAAK,CAAC,IAAGnI,EAAS5E,GAAa+M,EAAK,CAAC,CAAC,GAAK,GACzD,CACA,GAAInI,EAAQ,CAEV,MAAMkH,EADQgB,EAAGE,MAAM,GAAG,EACNpI,OAAQqI,GAAMA,EAAEC,QAAQtI,CAAM,IAAM,EAAE,EAC1D,GAAIkH,EAAMqB,OAAS,EAAG,CAEpB,MAAMC,EADItB,EAAM,CAAC,EACHkB,MAAM,GAAG,EACnBI,EAAI,CAAC,IAAM,KAAOA,EAAI,CAAC,GAAKA,EAAI,CAAC,IAAM,MACzCZ,EAAO5R,MAAQ,GACf6R,EAAK7R,MAAQ,GAEjB,CACF,CACF,CACF,CACF,CACF,EAEMyS,EAAc,CAAO7P,EAAe/C,KAAkBoD,GAAA,wCAE1D,GAAItD,EAAMsR,UAAY,QAAS,CAC7B,IAAIzH,EAAcwE,GAAAA,YAAAA,EAAUxE,OAC5B,KAAOA,KAAUA,EAAAA,EAAO3J,OAAP2J,YAAAA,EAAa9J,QAAS,UAAU8J,EAASA,EAAOA,OAGjE,IAFA,MAAMA,GAAAA,EAAAA,EAAOkJ,SAAQC,cAAfnJ,YAAAA,EAAAA,KAAAA,GAECA,KAAUA,EAAAA,EAAO3J,OAAP2J,YAAAA,EAAa9J,QAAS,UAAU8J,EAASA,EAAOA,OACjE,MAAMoJ,GAAWpJ,EAEXqJ,GAAiBD,IAAAA,YAAAA,GAAUF,QAAQG,eAAe7S,MAClD8S,GAAWF,IAAAA,YAAAA,GAAUjT,MAAMmT,SAE7BD,IAAkBE,MAAMxR,QAAQsR,EAAc,GAChDA,GAAe1I,QAAQ,CAACkI,GAAQW,KAAkB,CAC5CX,GAAExS,OAAS,QAAOiT,GAASE,EAAK,EAAE,WAAgBX,GAAEY,YACxDH,GAASE,EAAK,EAAE,MAAWX,GAAErS,MAC7B8S,GAASE,EAAK,EAAE,UAAeX,GAAEa,UACjCJ,GAASE,EAAK,EAAE,OAAYX,GAAEhS,OAC9ByS,GAASE,EAAK,EAAE,SAAcX,GAAElF,UAE5BkF,GAAEc,WAAa,cAAgBd,GAAEc,WAAa,oBAChD3J,EAAO7J,MAAMyT,MAAMpT,MAAMqS,GAAEgB,MAAQ,QAAQ,EAAI1C,OAC/CnH,EAAO7J,MAAMyT,MAAMpT,MAAMqS,GAAEgB,MAAQ,MAAM,EAAI1C,OAC7CnH,EAAO7J,MAAMyT,MAAMpT,MAAMqS,GAAEgB,KAAK,EAAI1C,OAExC,CAAC,GAEHhR,EAAAA,EAAMwR,KAANxR,MAAAA,EAAAA,KAAAA,EAAWA,EAAMuF,MAEjB,MAAMoO,EAAS9J,GAAAA,YAAAA,EAAQnE,MAAMkO,GAEvBC,EAAmBF,GAAAA,YAAAA,EAAQG,iBAAiB,yBAClD,GAAID,EACF,QAASjR,GAAI,EAAGA,GAAIiR,EAAiBjB,OAAQhQ,KAAK,CAChD,MAAMmR,GAAaF,EAAiBjR,EAAC,EAAEoR,cAAc,6CAA6C,EAC9FD,KAAYA,GAAW1T,MAAQ,IACnC,MAAM4T,EAAWJ,EAAiBjR,EAAC,EAAEoR,cAAc,2CAA2C,EAC1FC,IAAUA,EAAS5T,MAAQ,GACjC,CAEF0R,EAAS1R,MAAQ,GACjB,MAAMwJ,GAAAA,EAAAA,GAAAA,YAAAA,EAAQnE,MAAMkO,KAAd/J,YAAAA,EAAkBmK,cAAc,wCAAhCnK,YAAAA,EAAuEqK,QAC7EnC,EAAS1R,MAAQ,GACjB,MACF,SAAWL,EAAMsR,UAAY,UAAYtR,EAAMsR,UAAY,SAAU,CACnElD,EAAK,QAASnL,EAAGjD,EAAMuF,IAAI,EAC3B,MACF,KAAO,CAEL,GADAwM,EAAS1R,MAAQ,GACbH,KAAS,UACX,GAAI4R,EAAczR,QAAU,GAC1B,GAAI,CACF,MAAM4P,GAAQtD,EAAE,mBAAmB,CAAC,EAAEwH,KAAK,IAAY7Q,GAAA,sBAChD0O,EAAO3R,QACV2R,EAAO3R,MAAQ,GACf+N,EAAK,QAASnL,EAAGjD,EAAMuF,IAAI,EAC3ByM,EAAO3R,MAAQ,GAEnB,EAAC,CACH,OAAQ4C,EAAA,CACN,MAGG+O,EAAO3R,QACV2R,EAAO3R,MAAQ,GACf+N,EAAK,QAASnL,EAAGjD,EAAMuF,IAAI,EAC3ByM,EAAO3R,MAAQ,SAGhB+N,EAAK,QAASnL,EAAGjD,EAAMuF,IAAI,EAEhCwM,EAAS1R,MAAQ,EACnB,CACF,GAWA,MAAO,IAAM,CAEXiS,EAAU,EAEV,MAAM8B,EAASpU,EAAMsR,QAAU,GAAG/R,EAAS,IAAIS,EAAMsR,OAAO,GAAK,GAAG/R,EAAS,GAC7E,GAAI2S,EAAK7R,MAAO,CACd,IAAIgU,GACJ,OAAIrU,EAAMiQ,UAAY,QAAUjQ,EAAMiQ,UAAY,GAC5C6B,EAAczR,QAAU,GAC1BgU,mDAGW,CAAEC,QAASrC,EAAO5R,MAAQ,GAAK,QAAQ,gBAC/BL,EAAMmR,QAAO,KACtBU,EAAWxR,MAAK,KAChBL,EAAME,OAAS,OAASF,EAAME,KAAO8Q,OAAS,KAC9ChR,EAAMiR,KAAI,QACPc,EAAS1R,MAAK,SACb,CAAC,CAACL,EAAMwN,SAAQ,KACpB4E,EAAY,EAAE,cACPpS,EAAMqR,WAAU,QACnBpO,GAAkB6P,EAAY7P,EAAG,SAAS,EAAC,MAC9CmR,CAAM,EAAA,CAAAhU,QAAAA,IAAA,CACZ+R,EAAS9R,KAAK,CAAA,CAAA,EAInBgU,2BAEW1H,EAAE,mBAAmB,EAAC,UACjB1J,GAAkB6P,EAAY7P,EAAG,SAAS,CAAC,EAAA,CAErDyL,UAAWA,IAAA3N,EAAAA,YAAAwT,WAAA,CAAA,IAAA,YAAA,MAGA,CAAED,QAASrC,EAAO5R,MAAQ,GAAK,QAAQ,gBAC/BL,EAAMmR,QAAO,KACtBU,EAAWxR,MAAK,KAChBL,EAAME,OAAS,OAASF,EAAME,KAAO8Q,OAAS,KAC9ChR,EAAMiR,KAAI,QACPc,EAAS1R,MAAK,SACb,CAAC,CAACL,EAAMwN,SAAQ,KACpB4E,EAAY,EAAE,cACPpS,EAAMqR,WAAU,MACtB+C,CAAM,EAAA,CAAAhU,QAAAA,IAAA,CACZ+R,EAAS9R,KAAK,CAAA,CAAA,EAElB,EAKTgU,mDAGW,CAAEC,QAASrC,EAAO5R,MAAQ,GAAK,QAAQ,gBAC/BL,EAAMmR,QAAO,KACtBU,EAAWxR,MAAK,KAChBL,EAAME,OAAS,OAASF,EAAME,KAAO8Q,OAAS,KAC9ChR,EAAMiR,KAAI,QACPc,EAAS1R,MAAK,SACb,CAAC,CAACL,EAAMwN,SAAQ,KACpB4E,EAAY,EAAE,cACPpS,EAAMqR,WAAU,QACnBpO,GAAkB6P,EAAY7P,CAAC,EAAC,MACnCmR,CAAM,EAAA,CAAAhU,QAAAA,IAAA,CACZ+R,EAAS9R,KAAK,EAAA,EAGdgU,EACT,KAAO,QAAO,IAChB,CACF,CACF,CAAC,qCC9VGG,GAAiB,CACrB,QAAQ5U,EAAgB,OACtBA,EAAI,WAAUwB,EAAAqT,GAAS,OAAT,KAAArT,EAAiB,WAAYqT,EAAQ,CACrD,CACF,ECUQ,CAAErV,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,MAAM,0BAEN,CAC7BW,KAAM,SACNC,MAAO,CAAA,EACPa,MAAM6T,EAAQ,CAAE5T,MAAAA,CAAM,EAAG,CAQvB,MAAM6T,EAAgBA,IAAM,SAC1B,OAAI7T,EAAAA,EAAM8T,SAAN9T,MAAAA,EAAAA,KAAAA,GAAkBC,EAAAA,YAAA,MAAA,CAAA,MAAA,YAAA,EAA8BD,EAAAA,EAAM8T,SAAN9T,YAAAA,EAAAA,KAAAA,EAAgB,CAAA,EACxD,IACd,EAGA,MAAO,IAAAC,EAAAA,YAAA8T,SAAA,CAAA,MACUtV,EAAS,EAAA,CAEpBqV,OAAQA,IAAMD,EAAa,EAC3BvU,QAASA,IAAAA,OAAMU,OAAAA,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,IAAiB,CAIxC,CACF,CAAC,qCC3CGgU,GAAe,CACnB,QAAQlV,EAAgB,OACtBA,EAAI,WAAUwB,EAAA2T,GAAO,OAAP,KAAA3T,EAAe,SAAU2T,EAAM,CAC/C,CACF,ECUQ,CAAE3V,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,UAAU,0BAEV,CAC7BW,KAAM,aACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNiR,SAAU,GACVhR,QAAS,IAEXL,KAAM,CACJG,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEXvH,GAAI,CACFvJ,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEX3Q,MAAO,CACLH,KAAMkT,MACNhC,SAAU,GACVhR,QAASA,IAAM,CAAA,GAEjB4U,QAAS,CACP9U,KAAMkT,MACNhC,SAAU,GACVhR,QAASA,IAAM,CAAA,GAEjB2Q,KAAM,CACJ7Q,KAAMC,OACNC,QAAS4Q,QAEXiE,YAAa,CACX/U,KAAMC,OACNiR,SAAU,GACVhR,QAAS,OAEXoN,SAAU,CACRtN,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXwQ,QAAS,CACP1Q,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX8U,UAAW,CACThV,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX+U,cAAe,CACbjV,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXgV,UAAW,CACTlV,KAAMC,OACNiR,SAAU,GACVhR,QAAS,OAEXiV,QAAS,CACPnV,KAAMC,OACNiR,SAAU,GACVhR,QAAS,SAEXkV,WAAY,CACVpV,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXmV,SAAU,CACRrV,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXoV,KAAM,CACJtV,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXqV,SAAU,CACRvV,KAAMuR,SACNL,SAAU,GACVhR,QAASA,IAAM,CAAC,CAClB,GAGF+N,MAAO,CAAC,QAAS,OAAQ,QAAS,UAAW,QAAQ,EAErDtN,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,CAErB,KAAM,CAAEzB,EAAAA,GAAMzN,GAAa,EACrBwW,EAAO1V,EAAMgV,QACbW,EAAa9I,EAAAA,IAAI7M,EAAMK,KAAK,EAC5BsR,EAAaC,EAAAA,gBAAgB,MAAM,EAGnCgE,EAAe5N,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAC3GkE,EAAe7N,WAAS,IAAOhI,EAAMiV,YAAcjV,EAAMiV,YAActI,EAAE,oBAAoB,CAAE,EAC/FmJ,EAAc9N,EAAAA,SAAS,IAAMhI,EAAMwN,QAAQ,EAC3CuI,EAAkB/N,EAAAA,SAAS,IAAA,SAAOhI,QAAAA,GAAAA,EAAAA,EAAMyJ,KAANzJ,KAAAA,EAAYA,EAAMD,OAAlBC,KAAAA,EAA0BA,EAAMC,OAAS+Q,OAAS,EAG1FpD,EAAAA,MACE,IAAM5N,EAAMK,MACX2V,GAAW,CACVL,EAAWtV,MAAQ2V,CACrB,CACF,EAQA,MAAMC,EAAgBzU,GAAQ,CAC5B4M,EAAK,SAAU5M,CAAG,CACpB,EACM0U,EAAc1H,GAAU,CAC5BJ,EAAK,OAAQI,CAAK,CACpB,EAQM2H,EAAqBA,CAACvM,EAAMwM,IAAU,CAE1C,MAAM1U,EAAOkI,EAAKlI,KACZ2U,EAASzM,EAAK0M,WACd5L,EAAOd,EAAKc,KAClB,GAAI0L,EAAO,CAET,GADI1U,EAAK6U,KAAK,GAAG,EAAE5D,QAAQyD,CAAK,GAAK,GACjCC,EAAOE,KAAK,GAAG,EAAE5D,QAAQyD,CAAK,GAAK,EAAG,MAAO,GACjD,GAAI1L,EAAK8L,MACP,OAAI9L,EAAK8L,MAAM7D,QAAQyD,CAAK,GAAK,EAAU,GAEvBxM,EAAK6M,UACNC,KAAMhE,IAAM,CAC3B,GAAIA,GAAEhI,KAAK8L,OAAS9D,GAAEhI,KAAK8L,MAAM7D,QAAQyD,CAAK,GAAK,EAAG,MAAO,EAC/D,CAAC,CAEP,CACF,EAGA,OAAArV,EAAAA,YAAA4V,EAAAA,WAAAjO,aAAA,CAAA,IAES1I,EAAMC,MAAQ,cAAa,GAC5B8V,EAAgB1V,OACfL,EAAMD,KAAO,CAAEA,KAAMC,EAAMD,MAAS,GAAE,CAAA,MACpCR,GAAS,WACPoW,EAAWtV,MAAK,sBAAAuW,GAAhBjB,EAAWtV,MAAKuW,EAAA,MAClB,CAAEtC,QAAStU,EAAMK,MAAQ,GAAK,QAAQ,KACvCuV,EAAavV,MAAK,YACXwV,EAAaxV,MAAK,QACtBqV,EAAI,SACHI,EAAYzV,MAAK,kBACVL,EAAMmV,cAAa,UACzBnV,EAAMkV,UAAS,UACflV,EAAMoV,UAAS,WACdpV,EAAMsV,WAAU,gBACba,EAAkB,SACvB,IAAG,OACLD,EAAU,SACRD,EAAY,gBAAA,GAAA,MAEf,CACLY,cAAe7W,EAAMqV,QACrBG,KAAMxV,EAAMwV,KACZC,SAAUzV,EAAMyV,SAChBF,SAAUvV,EAAMuV,QAClB,CAAC,CAAA,EAAA,IAAA,CAEP,CACF,CAAC,qCCtMGuB,GAAmB,CACvB,QAAQlX,EAAgB,OACtBA,EAAI,WAAUwB,EAAA2V,GAAW,OAAX,KAAA3V,EAAmB,aAAc2V,EAAU,CAC3D,CACF,ECYQ,CAAE3X,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,UAAU,0BAEV,CAC7BW,KAAM,aAENC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXC,MAAO,CACLH,KAAM,CAACO,QAASN,OAAQG,MAAM,EAC9BF,QAAS4Q,QAEXJ,QAAS,CACP1Q,KAAMO,QACNL,QAAS,IAEX4W,cAAe,CACb9W,KAAMO,QACNL,QAAS,IAEX6W,MAAO,CACL/W,KAAM,CAACC,OAAQG,OAAQG,OAAO,EAC9BL,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACNL,QAAS,IAEX8W,OAAQ,CACNhX,KAAMO,QACNL,QAAS,IAEX2Q,KAAM,CACJ7Q,KAAMC,OACNC,QAAS,SACX,GAIF+N,MAAO,CAAC,oBAAqB,QAAQ,EAErCtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAC5B,MAAM6Q,EAAaC,EAAAA,gBAAgB,MAAM,EACnCuF,EAAgBtK,EAAAA,IAAI7M,EAAMK,KAAK,EAC/B+W,EAAepP,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAIjH/D,EAAAA,MACE,IAAM5N,EAAMK,MACXmB,GAAQ,CACP2V,EAAc9W,MAAQmB,CACxB,CACF,EAIA,MAAM6V,EAAgB7V,GAA4B,CAChD2V,EAAc9W,MAAQmB,EACtB4M,EAAK,oBAAqB5M,CAAG,CAC/B,EAEMyU,EAAgBzU,GAA4B,CAChD4M,EAAK,SAAU5M,CAAG,CACpB,EAGA,MAAO,IAAAT,EAAAA,YAAAuW,aAAA,CAAA,MAEI/X,GAAS,WACJ4X,EAAc9W,MAAK,sBACVgX,EAAY,MAC1BrX,EAAMiX,MAAK,cACHjX,EAAMgX,cAAa,SACxBhX,EAAMwN,SAAQ,OAChBxN,EAAMkX,OAAM,KACdE,EAAa/W,MAAK,MACjB,CAAEiU,QAAStU,EAAM4Q,QAAU,GAAK,QAAQ,SACrCqF,CAAY,EAAA,CAAA7V,QAAAA,IAAAA,OAAA,QACrBU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,CAGxB,CACF,CAAC,qCCrGGyW,GAAmB,CACvB,QAAQ3X,EAAgB,OACtBA,EAAI,WAAUwB,EAAAoW,GAAW,OAAX,KAAApW,EAAmB,aAAcoW,EAAU,CAC3D,CACF,ECYQ,CAAEpY,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,iBAAiB,0BAEjB,CAC7BW,KAAM,mBACN0X,aAAc,GAEdzX,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXC,MAAO,CACLH,KAAM,CAACC,OAAQG,OAAQG,OAAO,EAC9BL,QAAS4Q,QAEXjR,KAAM,CACJG,KAAMC,OACNC,QAAS4Q,QAEXJ,QAAS,CACP1Q,KAAMO,QACNL,QAAS,IAEX4W,cAAe,CACb9W,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX6W,MAAO,CACL/W,KAAM,CAACC,OAAQG,OAAQG,OAAO,EAC9BL,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACNL,QAAS,IAEX8W,OAAQ,CACNhX,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX2Q,KAAM,CACJ7Q,KAAMC,OACNC,QAAS,SACX,GAIF+N,MAAO,CAAC,oBAAqB,QAAQ,EAErCtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAC5B,MAAM6Q,EAAaC,EAAAA,gBAAgB,MAAM,EAEnCuF,EAAgBtK,EAAAA,IAAI7M,EAAMK,KAAK,EAIrCuN,EAAAA,MACE,IAAM5N,EAAMK,MACXmB,GAAQ,CACP2V,EAAc9W,MAAQmB,CACxB,CACF,EAIA,MAAMkW,EAAqB1P,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAIjH0F,EAAgB7V,GAA8B,CAClD2V,EAAc9W,MAAQmB,EACtB4M,EAAK,oBAAqB5M,CAAG,CAC/B,EAGA,MAAO,IAAAT,EAAAA,YAAA4W,mBAAA,CAAA,WAESR,EAAc9W,MAAK,sBACVgX,EAAY,MAC1BrX,EAAMK,MAAK,MACXL,EAAMiX,MAAK,cACHjX,EAAMgX,cAAa,SACxBhX,EAAMwN,SAAQ,KAClBkK,EAAmBrX,MAAK,MACvBd,GAAS,OACRS,EAAMkX,OAAM,MACb,CAAE5C,QAAStU,EAAM4Q,QAAU,GAAK,MAAO,CAAC,EAAA,CAAAxQ,QAAAA,IAAAA,OAAA,QAC9CU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,CAGxB,CACF,CAAC,qCC7GG8W,GAAyB,CAC7B,QAAQhY,EAAgB,OACtBA,EAAI,WAAUwB,EAAAyW,GAAiB,OAAjB,KAAAzW,EAAyB,mBAAoByW,EAAgB,CAC7E,CACF,ECYQ,CAAEzY,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,gBAAgB,0BAEhB,CAC7BW,KAAM,kBAENC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXC,MAAO,CACLH,KAAMkT,MACNhC,SAAU,GACVhR,QAAS4Q,QAEXiG,MAAO,CACL/W,KAAMC,OACNC,QAAS4Q,QAEXD,KAAM,CACJ7Q,KAAMC,OACNC,QAAS,WAEX0X,IAAK,CACH5X,KAAMI,OACNF,QAAS4Q,QAEXzQ,IAAK,CACHL,KAAMI,OACNF,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACNL,QAAS,EACX,GAIF+N,MAAO,CAAC,oBAAqB,QAAQ,EAErCtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAC5B,MAAM6Q,EAAaC,EAAAA,gBAAgB,MAAM,EAEnCuF,EAAgBtK,EAAAA,IAAI7M,EAAMK,KAAK,EAG/B0X,EAAoB/P,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAItH/D,EAAAA,MACE,IAAM5N,EAAMK,MACXmB,GAAQ,CACP2V,EAAc9W,MAAQmB,CACxB,CACF,EAIA,MAAM6V,EAAgB7V,GAA4B,CAChD2V,EAAc9W,MAAQmB,EACtB4M,EAAK,oBAAqB5M,CAAG,CAC/B,EAEMyU,EAAgBzU,GAA4B,CAChD4M,EAAK,SAAU5M,CAAG,CACpB,EAGA,MAAO,IAAAT,EAAAA,YAAAiX,kBAAA,CAAA,WAESb,EAAc9W,MAAK,sBACVgX,EAAY,KAC3BU,EAAkB1X,MAAK,aACjBL,EAAMiX,MAAK,IAClBjX,EAAM8X,IAAG,IACT9X,EAAMO,IAAG,SACJP,EAAMwN,SAAQ,MACjBjO,GAAS,SACN0W,CAAY,EAAA,CAAA7V,QAAAA,IAAAA,OAAA,QACrBU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,CAGxB,CACF,CAAC,qCCrGGmX,GAAwB,CAC5B,QAAQrY,EAAgB,OACtBA,EAAI,WAAUwB,EAAA8W,GAAgB,OAAhB,KAAA9W,EAAwB,kBAAmB8W,EAAe,CAC1E,CACF,ECUQ,CAAE9Y,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,KAAK,EAEpC+Y,qBAA+B,CAC7BpY,KAAM,QACNC,MAAO,CACLoY,KAAM,CACJlY,KAAMI,OACNF,QAAS,IAEXiY,OAAQ,CACNnY,KAAMI,OACNF,QAAS,GAEXkY,GAAI,CACFpY,KAAMI,OACNF,QAAS4Q,QAEXuH,GAAI,CACFrY,KAAMI,OACNF,QAAS4Q,QAEXwH,GAAI,CACFtY,KAAMI,OACNF,QAAS4Q,QAEXyH,GAAI,CACFvY,KAAMI,OACNF,QAAS4Q,QAEX0H,GAAI,CACFxY,KAAMI,OACNF,QAAS4Q,QAEXtM,IAAK,CACHxE,KAAMC,OACNC,QAAS,OAEXwQ,QAAS,CACP1Q,KAAMO,QACNL,QAAS,EACX,GAEFS,MAAMb,EAAO,CAAEc,MAAAA,CAAM,EAAG,CAEtB,MAAO,IAAAC,EAAAA,YAAA4X,QAAA,CAAA,IAAA,SAAA,MAGI,CAAErE,QAAStU,EAAM4Q,QAAU,GAAK,QAAQ,GAC3C5Q,EAAMsY,GAAE,GACRtY,EAAMuY,GAAE,GACRvY,EAAMwY,GAAE,GACRxY,EAAMyY,GAAE,GACRzY,EAAM0Y,GAAE,KACN1Y,EAAMoY,KAAI,OACRpY,EAAMqY,OAAM,IACfrY,EAAM0E,IAAG,MACPnF,EAAS,EAAA,CAAAa,QAAAA,IAAAA,OAAA,QACfU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,CAGxB,CACF,CAAC,EC5EG8X,GAAc,CAClB,QAAQhZ,EAAgB,OACtBA,EAAI,WAAUiZ,EAAAA,GAAM,OAANA,KAAAA,EAAc,QAASA,EAAK,CAC5C,CACF,ECsBaC,GAAcC,GAAqB,CAC9C,MAAMC,EAAI,IAAI,KAAKD,CAAI,EACvB,OAAAC,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,EACdA,CACT,EAEaC,GAAU,CAACF,EAAYG,EAAO,EAAGC,EAAW,KAAgB,CACvE,MAAM/T,EAAS,IAAI,KAAK2T,EAAK,QAAA,EAAYG,EAAO,KAAM,EACtD,OAAOC,EAAWL,GAAW1T,CAAM,EAAIA,CACzC,EAEagU,GAAa,CAACL,EAAYV,EAAS,IAAY,CAC1D,MAAMa,EAAOH,EAAK,QAAA,EAAY,EAAIV,EAClC,OAAOY,GAAQF,EAAMG,EAAM,EAAI,CACjC,EAEaG,GAAgBN,GAAqB,CAChD,MAAMO,EAAQP,EAAK,SAAA,EAAcA,EAAK,WAAa,EACnD,OAAOD,GAAW,IAAI,KAAKC,EAAK,cAAeO,EAAO,CAAC,CAAC,CAC1D,EAEaC,GAAaR,GAAqBD,GAAW,IAAI,KAAKC,EAAK,YAAA,EAAe,EAAG,CAAC,CAAC,EClCtFS,GAAM,IAAM,IAAI,KAGTC,GAAgC,CAC3C,CACE,KAAM,KACN,MAAO,IAAMD,GAAA,CAAI,EAEnB,CACE,KAAM,KACN,MAAO,IAAMP,GAAQO,GAAA,EAAO,CAAC,CAAA,EAE/B,CACE,KAAM,OACN,MAAO,IAAMP,GAAQO,GAAA,EAAO,CAAC,CAAA,EAE/B,CACE,KAAM,QACN,MAAO,IAAMP,GAAQO,GAAA,EAAO,EAAE,CAAA,EAEhC,CACE,KAAM,OACN,MAAO,IAAMJ,GAAWI,GAAA,CAAK,CAAA,EAE/B,CACE,KAAM,OACN,MAAO,IAAMH,GAAaG,GAAA,CAAK,CAAA,CAEnC,EAGaE,GAAkC,CAC7C,CACE,KAAM,QACN,MAAO,IAAMF,GAAA,CAAI,EAEnB,CACE,KAAM,YACN,MAAO,IAAMP,GAAQO,GAAA,EAAO,CAAC,CAAA,EAE/B,CACE,KAAM,YACN,MAAO,IAAMP,GAAQO,GAAA,EAAO,CAAC,CAAA,EAE/B,CACE,KAAM,eACN,MAAO,IAAMP,GAAQO,GAAA,EAAO,EAAE,CAAA,EAEhC,CACE,KAAM,cACN,MAAO,IAAMJ,GAAWI,GAAA,CAAK,CAAA,EAE/B,CACE,KAAM,eACN,MAAO,IAAMH,GAAaG,GAAA,CAAK,CAAA,CAEnC,EAGaG,GAAoBF,GAAc,MAAM,EAAG,CAAC,EAE5CG,GAAsBF,GAAgB,MAAM,EAAG,CAAC,EAGhDG,GAAqC,CAChD,CACE,KAAM,OACN,MAAO,IAAM,CACX,MAAMC,EAAQ,IAAI,KAAKb,GAAQO,GAAA,EAAO,CAAC,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EACvDO,EAAM,IAAI,KAAKP,GAAA,EAAM,SAAS,GAAI,GAAI,GAAI,GAAG,CAAC,EAEpD,MAAO,CAACM,EAAOC,CAAG,CACpB,CAAA,EAEF,CACE,KAAM,QACN,MAAO,IAAM,CACX,MAAMD,EAAQ,IAAI,KAAKb,GAAQO,GAAA,EAAO,EAAE,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EACxDO,EAAM,IAAI,KAAKP,GAAA,EAAM,SAAS,GAAI,GAAI,GAAI,GAAG,CAAC,EAEpD,MAAO,CAACM,EAAOC,CAAG,CACpB,CAAA,EAEF,CACE,KAAM,OACN,MAAO,IAAM,CACX,MAAMD,EAAQ,IAAI,KAAKV,GAAWI,GAAA,CAAK,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EACvDO,EAAM,IAAI,KAAKP,GAAA,EAAM,SAAS,GAAI,GAAI,GAAI,GAAG,CAAC,EAEpD,MAAO,CAACM,EAAOC,CAAG,CACpB,CAAA,EAEF,CACE,KAAM,OACN,MAAO,IAAM,CACX,MAAMD,EAAQ,IAAI,KAAKT,GAAaG,GAAA,CAAK,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EACzDO,EAAM,IAAI,KAAKP,GAAA,EAAM,SAAS,GAAI,GAAI,GAAI,GAAG,CAAC,EAEpD,MAAO,CAACM,EAAOC,CAAG,CACpB,CAAA,EAEF,CACE,KAAM,OACN,MAAO,IAAM,CAACR,GAAUC,IAAK,EAAGA,IAAK,CAAA,EAEvC,CACE,KAAM,QACN,MAAO,IAAM,CACX,MAAMO,EAAMP,GAAA,EACNM,MAAY,KAElB,OAAAA,EAAM,SAASA,EAAM,SAAA,EAAa,CAAC,EAE5B,CAACA,EAAOC,CAAG,CACpB,CAAA,CAEJ,EAGaC,GAAuC,CAClD,CACE,KAAM,YACN,MAAO,IAAM,CACX,MAAMF,EAAQ,IAAI,KAAKb,GAAQO,GAAA,EAAO,CAAC,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EACvDO,EAAM,IAAI,KAAKP,GAAA,EAAM,SAAS,GAAI,GAAI,GAAI,GAAG,CAAC,EAEpD,MAAO,CAACM,EAAOC,CAAG,CACpB,CAAA,EAEF,CACE,KAAM,eACN,MAAO,IAAM,CACX,MAAMD,EAAQ,IAAI,KAAKb,GAAQO,GAAA,EAAO,EAAE,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EACxDO,EAAM,IAAI,KAAKP,GAAA,EAAM,SAAS,GAAI,GAAI,GAAI,GAAG,CAAC,EAEpD,MAAO,CAACM,EAAOC,CAAG,CACpB,CAAA,EAEF,CACE,KAAM,aACN,MAAO,IAAM,CACX,MAAMD,EAAQ,IAAI,KAAKV,GAAWI,GAAA,CAAK,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EACvDO,EAAM,IAAI,KAAKP,GAAA,EAAM,SAAS,GAAI,GAAI,GAAI,GAAG,CAAC,EAEpD,MAAO,CAACM,EAAOC,CAAG,CACpB,CAAA,EAEF,CACE,KAAM,cACN,MAAO,IAAM,CACX,MAAMD,EAAQ,IAAI,KAAKT,GAAaG,GAAA,CAAK,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,CAAC,EACzDO,EAAM,IAAI,KAAKP,GAAA,EAAM,SAAS,GAAI,GAAI,GAAI,GAAG,CAAC,EAEpD,MAAO,CAACM,EAAOC,CAAG,CACpB,CAAA,EAEF,CACE,KAAM,YACN,MAAO,IAAM,CAACR,GAAUC,IAAK,EAAGA,IAAK,CAAA,EAEvC,CACE,KAAM,aACN,MAAO,IAAM,CACX,MAAMO,EAAMP,GAAA,EACNM,MAAY,KAElB,OAAAA,EAAM,SAASA,EAAM,SAAA,EAAa,CAAC,EAE5B,CAACA,EAAOC,CAAG,CACpB,CAAA,CAEJ,EAGiC,CAAC,GAAGN,EAAa,EC7KhD,KAAM,CAAEra,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,YAAY,0BAEZ,CAE7BW,KAAM,eAGNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXL,KAAM,CACJG,KAAMC,OACNC,QAAS4Q,QAEXvH,GAAI,CACFvJ,KAAMC,OACNC,QAAS4Q,QAEXiJ,WAAY,CACV/Z,KAAM,CAACga,KAAM/Z,OAAQiT,KAAK,EAC1BhT,QAAS4Q,QAEX9Q,KAAM,CACJA,KAAMC,OACNC,QAAS,QAEX+Z,OAAQ,CACNja,KAAMC,OACNC,QAAS,cAEXga,YAAa,CACXla,KAAMC,OACNC,QAAS,cAEXia,YAAa,CACXna,KAAMkT,MACNhT,QAAS4Q,QAEXD,KAAM,CACJ7Q,KAAMC,OACNC,QAAS,WAEXka,eAAgB,CACdpa,KAAMC,OACNC,QAAS4Q,QAEXuJ,iBAAkB,CAChBra,KAAMC,OACNC,QAAS4Q,QAEXwJ,eAAgB,CACdta,KAAMC,OACNC,QAAS4Q,QAEXiE,YAAa,CACX/U,KAAMC,OACNC,QAAS4Q,QAEXkE,UAAW,CACThV,KAAMO,QACNL,QAAS,IAEXoN,SAAU,CACRtN,KAAMO,QACNL,QAAS,IAEXqa,iBAAkB,CAChBva,KAAMkT,MACNhT,QAASA,IAAM,CAAA,GAEjBsa,aAAc,CACZxa,KAAMuR,SACNrR,QAASA,IAAM,CAAC,GAElBua,SAAU,CACRza,KAAMO,QACNL,QAAS,IAEXwa,OAAQ,CACN1a,KAAMO,QACNL,QAAS,EACX,GAIF+N,MAAO,CAAC,oBAAqB,SAAU,OAAQ,QAAS,OAAQ,OAAO,EAEvEtN,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,CAErB,KAAM,CAAEjL,OAAAA,EAAQwJ,EAAAA,GAAMkO,WAAO,EACvBjT,EAAQC,EAAAA,SAAQ,EAChB8J,EAAaC,EAAAA,gBAAgB,MAAM,EAGnC+D,EAAa9I,EAAAA,IAAI7M,EAAMia,UAAU,EAGvCrM,EAAAA,MACE,IAAM5N,EAAMia,WACXjE,GAAW,CACVL,EAAWtV,MAAQ2V,CACrB,CACF,EAGA,MAAM8E,EAAiB9S,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAC7GoE,EAAkB/N,EAAAA,SAAS,IAAA,SAAOhI,QAAAA,GAAAA,EAAAA,EAAMyJ,KAANzJ,KAAAA,EAAYA,EAAMD,OAAlBC,KAAAA,EAA0BA,EAAMC,OAAS+Q,OAAS,EACpF+J,EAAe/S,EAAAA,SAAS,IACxB7E,EAAO9C,QAAU,KACfL,EAAME,OAAS,OAAewZ,GACzB1Z,EAAME,OAAS,WAAmB0Z,GAClC5Z,EAAME,OAAS,aAAeF,EAAME,OAAS,gBAAwB8Z,GAClE,GAELha,EAAME,OAAS,OAAeuZ,GAC9BzZ,EAAME,OAAS,WAAmByZ,GAClC3Z,EAAME,OAAS,aAAeF,EAAME,OAAS,gBAAwB2Z,GAClE,EACb,EAMKmB,EAAmBhT,EAAAA,SAAS,IAAM,CACtC,MAAMiT,EAAqB,CACzBC,UAAWH,EAAa1a,OAQ1B,GANIL,EAAMya,iBAAiBU,SAAS,aAAa,IAE/CF,EAAc,aAAmBlC,GAAeA,EAAKqC,UAAYlB,KAAKV,IAAG,EAAK,OAC5ExZ,EAAMya,iBAAiBU,SAAS,YAAY,IAE9CF,EAAc,aAAmBlC,GAAeA,EAAKqC,QAAO,EAAKlB,KAAKV,IAAG,GACvExZ,EAAM0a,aAAc,CACtB,MAAMW,EAAK,CAAEX,aAAc1a,EAAM0a,cACjC,OAAOnQ,MAAA,GAAK0Q,GAAkBI,EAChC,KAAO,QAAO9Q,GAAA,GAAK0Q,EACrB,CAAC,EASKK,EAAejb,GAA2B,CAC9C+N,EAAK,oBAAqB/N,CAAK,EAC/B+N,EAAK,QAAS/N,CAAK,CACrB,EAOM4V,EAAgB5V,GAAkB,CACtC+N,EAAK,SAAU/N,CAAK,CACtB,EAOM6V,EAAcqF,GAAmB,CAWrCnN,EAAK,OAAQmN,CAAE,CAGjB,EAOMC,EAAeD,GAAmB,CACtCnN,EAAK,QAASmN,CAAE,CAClB,EAQME,EAAcja,GAA6B,CAC/C4M,EAAK,OAAQ,CAAEsN,QAASla,EAAI,CAAC,EAAGma,QAASna,EAAI,CAAC,CAAE,CAAC,CACnD,EAGA,MAAO,IAAA,OAAAT,OAAAA,EAAAA,YAAA,MAAA,CAAA,MACOxB,EAAS,EAAA,CAAAwB,EAAAA,YAAA6a,EAAAA,aAAAlT,aAAA,CAAA,IAEZ1I,EAAMC,MAAQ,gBAAe,GAC9B8V,EAAgB1V,MAAK,KACnBL,EAAMD,KAAI,WACJ4V,EAAWtV,MAAK,sBACPib,EAAW,KAC1Btb,EAAME,KAAI,kBACCF,EAAMsa,gBAAkB3N,EAAE,cAAc,EAAC,YAC7C3M,EAAMiV,aAAetI,EAAE,mBAAmB,EAAC,iBACtC3M,EAAMua,kBAAoB5N,EAAE,kBAAkB,EAAC,eACjD3M,EAAMwa,gBAAkB7N,EAAE,gBAAgB,EAAC,eAC7C3M,EAAMqa,YAAW,iBAChBW,EAAAA,EAAiB3a,QAAjB2a,YAAAA,EAAwBN,aAAY,UACxCM,EAAiB3a,MAAM6a,UAAS,OACnClb,EAAMma,OAAM,UACTna,EAAMkV,UAAS,YACblV,EAAMoa,WAAW,EAAA,CAE5ByB,iBAAkBJ,CAAU,EAAA,CAAA,KAExBX,EAAeza,MAAK,SAChBL,EAAMwN,SAAQ,SACdxN,EAAM2a,SAAQ,OAChBzE,EAAU,QACTsF,EAAW,cAAA,GAAA,SAEVvF,EAAY,gBACPjW,EAAM4a,MAAM,EACvBhT,CAAK,EAAA,IAAA,CAAA,CAAA,EAKjB,CACF,CAAC,qCC/PGkU,GAAqB,CACzB,QAAQlc,EAAgB,OACtBA,EAAI,WAAUwB,EAAA2a,GAAa,OAAb,KAAA3a,EAAqB,eAAgB2a,EAAY,CACjE,CACF,ECQMC,OAAoB,QAKpBC,GAAW,CAACrI,EAAiBsI,EAAwB,KAAU,CAEnE,IAAIC,EAAUvI,EAAG,cAAc,YAAY,EAG3C,GAFKuI,IAASA,EAAU,SAAS,cAAc,YAAY,GAEvD,CAACA,EACH,eAAQ,KAAK,+BAA+B,EACrC,GAIT,IAAIC,EAAqC,KAIzC,GAHAA,EAAiBD,EAAQ,cAAc,oBAAoB,EACtDC,IAAgBA,EAAiBD,EAAQ,cAAc,mBAAmB,GAE3E,CAACC,EACH,eAAQ,KAAK,sCAAsC,EAC5C,GAIT,GAAIJ,GAAc,IAAII,CAAc,EAAG,MAAO,GAC9CJ,GAAc,IAAII,CAAc,EAGhCA,EAAe,MAAM,OAAS,OAE9BD,EAAQ,MAAM,IAAM,MAEpB,MAAME,GAAY,UAAY,CAC5B,OAAK,OAAO,SAAiB,aAAqB,CAACvY,EAAkBwY,IAAkBxY,EAAY,aAAawY,CAAI,EACxG,CAACxY,EAAkBwY,IAAiB,iBAAiBxY,EAAK,IAAI,EAAEwY,CAAW,CACzF,GAAA,EAEA,OAAAF,EAAe,YAAenZ,GAAkB,CAE9C,MAAMsZ,EAAOtZ,EAAE,QAAUmZ,EAAgB,WACnCI,EAAOvZ,EAAE,QAAUmZ,EAAgB,UAEnCK,EAAeN,EAAQ,YACvBO,EAAgBP,EAAQ,aAExBQ,EAAc,SAAS,KAAK,YAC5BC,EAAe,SAAS,KAAK,aAG7BC,EAAiBV,EAAQ,WAEzBW,EAAYZ,EAAe,GAAK,IAChCa,EAAiBJ,EAAcR,EAAQ,WAAaM,EAAeK,EAGnEE,EAAgBb,EAAQ,UAGxBc,EAAgBL,EAAeT,EAAQ,UAAYO,EAAgB,GAAK,GAG9E,IAAIQ,EAAwBb,EAASF,EAAS,MAAM,EAChDgB,EAAwBd,EAASF,EAAS,KAAK,EAG/C,OAAOe,GAAS,UAAYA,EAAK,SAAS,GAAG,GAC/CA,EAAO,SAAS,KAAK,aAAe,CAACA,EAAK,QAAQ,KAAM,EAAE,EAAI,KAC9DC,EAAO,SAAS,KAAK,cAAgB,CAAC,OAAOA,CAAI,EAAE,QAAQ,KAAM,EAAE,EAAI,OAEvED,EAAO,CAAC,OAAOA,CAAI,EAAE,QAAQ,OAAQ,EAAE,EACvCC,EAAO,CAAC,OAAOA,CAAI,EAAE,QAAQ,OAAQ,EAAE,GAIzC,MAAMC,GAAepW,GAAmB,CAEtC,IAAIqW,EAAOrW,EAAG,QAAUuV,EACpBe,EAAMtW,EAAG,QAAUwV,EAGnB,CAACa,EAAOR,EAAgBQ,EAAO,CAACR,EAC3BQ,EAAON,IAAgBM,EAAON,GAEnC,CAACO,EAAMN,EAAeM,EAAM,CAACN,EACxBM,EAAML,IAAeK,EAAML,GAGpCd,EAAQ,MAAM,KAAO,GAAGkB,EAAO,OAAOH,CAAI,CAAC,KAC3Cf,EAAQ,MAAM,IAAM,GAAGmB,EAAM,OAAOH,CAAI,CAAC,IAC3C,EAEMI,EAAY,IAAM,CACtB,SAAS,oBAAoB,YAAaH,EAAW,EACrD,SAAS,oBAAoB,UAAWG,CAAS,CACnD,EACA,SAAS,iBAAiB,YAAaH,EAAW,EAClD,SAAS,iBAAiB,UAAWG,CAAS,CAChD,EAEO,EACT,EC/FQ,CAAEne,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,QAAQ,0BAER,CAC7BW,KAAM,WACNC,MAAO,CACL4Q,QAAS,CACP1Q,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXuN,MAAO,CACLzN,KAAMC,OACNiR,SAAU,GACVhR,QAAS,MAEXod,UAAW,CACTtd,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXqd,MAAO,CACLvd,KAAMC,OACNiR,SAAU,GACVhR,QAAS,OAEXsd,OAAQ,CACNxd,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEX2M,KAAM,CACJzd,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXwd,aAAc,CACZ1d,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXyd,WAAY,CACV3d,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX0d,UAAW,CACT5d,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEX+M,kBAAmB,CACjB7d,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX4d,mBAAoB,CAClB9d,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX6d,YAAa,CACX/d,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,MACX,GAEF7C,MAAO,CAAC,OAAQ,SAAU,QAAS,SAAU,SAAU,gBAAgB,EAEvEtN,MAAMb,EAAO,CAAEc,MAAAA,EAAOsN,KAAAA,CAAK,EAAG,WAE5B,MAAMjC,EAAWC,GAAAA,YAAW,EACtB,CAAEO,EAAAA,GAAMzN,GAAa,EACrBgf,EAAc/R,EAAS+R,YACvBC,EAAgBhS,EAASgS,cACzB9P,EAAWC,EAAAA,mBAAkB,EAEnC,IAAI8P,EAAgBpe,EAAMie,aAAe1e,GACrC8e,EAAgBre,EAAM4Q,QAC1B,MAAM0N,EAAczR,EAAAA,IAAI,EAAK,EACvB5M,EAAO,YACPse,EAAkB1R,EAAAA,IAAI7M,EAAM0d,MAAM,EACxC,IAAIc,EAAgBxe,EAAM4d,aAC1B,MAAMa,EAAoB5R,EAAAA,IAAI,EAAK,EACnC,IAAI6R,EAAQ1e,EAAM2d,KACdgB,EAAY3e,EAAM2d,KAGtB/P,EAAAA,MACE,IAAM5N,EAAM4Q,QACXgO,IAAa,CAEZP,EAAgBO,GACZP,GACFjb,GAAM,GAAG,EAAE+Q,KAAK,IAAM,CACpBmK,EAAYje,MAAQ,EACtB,CAAC,CACL,CACF,EAGA,MAAMwe,EAAgBA,IAAM,CAC1BR,EAAgB,EAClB,EACMS,EAAaA,IAAM,CACvB1Q,EAAK,MAAM,CACb,EACM2Q,GAAeA,IAAM,CACzB3Q,EAAK,QAAQ,EACb4Q,EAAAA,SAAS,IAAM,QACb/C,IAAS5N,GAAAA,GAAAA,YAAAA,EAAU3I,QAAV2I,YAAAA,GAAiBuF,GAAmBuK,CAAa,CAC5D,CAAC,CACH,EACMc,EAAcA,IAAM,CACxBZ,EAAgB,GAChBC,EAAYje,MAAQ,GAKpB+N,EAAK,OAAO,CACd,EACM8Q,EAAeA,IAAM,CACzB9Q,EAAK,iBAAkB,EAAK,CAC9B,EAEM+Q,EAAgB3Q,IAAU,CAC9B6P,EAAgB,GAChBC,EAAYje,MAAQ,GACpB+N,EAAK,SAAUI,EAAK,CACtB,EAMM4Q,EAAkBA,IAAM,OAC5B,MAAMC,IAASve,EAAAA,EAAMue,SAANve,YAAAA,EAAAA,KAAAA,GACfue,OAAAA,IAAAA,MAAAA,GAAQ7U,QAASkI,GAAM,QACrB,MAAMhO,GAAM,OAAOgO,EAAExS,MAAS,UAAYwS,EAAExS,OAAS,MAAQwS,EAAExS,KAAaH,MAAQ,GAC9E8Q,GAAOpL,IAAaiN,GAAAA,EAAEhJ,WAAFgJ,YAAAA,GAAa,EAAE,GAAK,GAEzCA,EAAE1S,QAAO0S,EAAE1S,MAAQ,CAAA,GACxB,MAAMsf,EAAY5M,EAAE1S,MACpBsf,EAAUzO,KAAOA,GACbnM,KACEmM,GAAK8B,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,IACxC2S,EAAUhO,QAAU,OACpBgO,EAAUrb,KAAO,kBACbia,GAAiBrN,KAASlE,EAAE,gBAAgB,IAAG2S,EAAUzO,KAAOlE,EAAE,iBAAiB,GACvF2S,EAAUxO,MAAQnE,EAAE,gBAAgB,GAC3BkE,GAAK8B,QAAQhG,EAAE,eAAe,CAAC,IAAM,IAC9C2S,EAAUhO,QAAU,OACpBgO,EAAUrb,KAAO,kBACbia,GACErN,KAASlE,EAAE,eAAe,IAC5B2S,EAAUzO,KAAOlE,EAAE,gBAAgB,EACnC2S,EAAUxO,MAAQnE,EAAE,eAAe,IAE9BkE,GAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUhO,QAAU,OACpBgO,EAAUrb,KAAO,kBACbia,GACErN,KAASlE,EAAE,mBAAmB,IAChC2S,EAAUzO,KAAOlE,EAAE,oBAAoB,EACvC2S,EAAUxO,MAAQnE,EAAE,mBAAmB,IAElCkE,GAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUhO,QAAU,OACpBgO,EAAUrb,KAAO,kBACbia,GACErN,KAASlE,EAAE,kBAAkB,IAC/B2S,EAAUzO,KAAOlE,EAAE,mBAAmB,EACtC2S,EAAUxO,MAAQnE,EAAE,kBAAkB,IAEjCkE,GAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUhO,QAAU,UACpBgO,EAAUrb,KAAO,mBACR4M,GAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IAEnD2S,EAAUhO,QAAU,WACpBgO,EAAUrb,KAAO,kBACR4M,GAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUhO,QAAU,SACpBgO,EAAUrb,KAAO,kBACR4M,GAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUhO,QAAU,SACpBgO,EAAUrb,KAAO,kBACR4M,GAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUhO,QAAU,SACpBgO,EAAUrb,KAAO,mBACR4M,GAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IACnD2S,EAAUhO,QAAU,WACpBgO,EAAUrb,KAAO,kBACR4M,GAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAChD2S,EAAUhO,QAAU,QACpBgO,EAAUrb,KAAO,0BACR4M,GAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUhO,QAAU,UACpBgO,EAAUrb,KAAO,0BACR4M,GAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IACnD2S,EAAUhO,QAAU,OACpBgO,EAAUrb,KAAO,kBACR4M,GAAK8B,QAAQhG,EAAE,uBAAuB,CAAC,IAAM,IACtD2S,EAAUhO,QAAU,SACpBgO,EAAUrb,KAAO,sBACR4M,GAAK8B,QAAQhG,EAAE,qBAAqB,CAAC,IAAM,IACpD2S,EAAUhO,QAAU,SACpBgO,EAAUrb,KAAO,kBACR4M,GAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IAAMkE,GAAK8B,QAAQhG,EAAE,uBAAuB,CAAC,IAAM,IACtG2S,EAAUhO,QAAU,SACpBgO,EAAUrb,KAAO,yBACR4M,GAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,KACjD2S,EAAUhO,QAAU,SACpBgO,EAAUrb,KAAO,iBACbia,GACErN,KAASlE,EAAE,kBAAkB,IAC/B2S,EAAUzO,KAAOlE,EAAE,mBAAmB,EACtC2S,EAAUxO,MAAQnE,EAAE,kBAAkB,IAGhD,GACO0S,EACT,EAOME,EAAYA,IAAM,QACtB,GAAIvf,EAAMwd,UACR,OAAI1c,GAAAA,EAAMue,SAANve,MAAAA,GAAAA,KAAAA,GACFC,0BAEKqe,EAAe,EAAEre,EAAAA,YAAA0T,GAAA,CAAA,QAEP0K,EAAY,KAAA,0BAAA,EAAA,CAAA/e,QAAAA,IAAA,CAEpBuM,EAAE,eAAe,EACjBuR,EAAc,OAAS,EAAE,CAAA,CAAA,CAAA,CAAA,EAMhCnd,EAAAA,YAAA,MAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,QAGe0K,EAAY,KAAA,0BAAA,EAAA,CAAA/e,QAAAA,IAAA,CAEpBuM,EAAE,eAAe,EACjBuR,EAAc,OAAS,EAAE,CAAA,CAAA,CAAA,CAAA,CAItC,EAOMsB,EAAUA,IAAM,CACpB,IAAIC,GAAqB,KACzB,OAAInB,EAAYje,QACdof,GAAG1e,EAAAA,YAAA,MAAA,CAAA,MAAA,gCAAA,SAAA,KAAA,IAAA,GAKE0e,EACT,EAEMC,EAAeA,IAAM,CACpB1f,EAAM0d,OACF1d,EAAM0d,OAAO/K,QAAQ,GAAG,IAAM,GAAI4L,EAAgBle,MAAQsf,WAAW3f,EAAM0d,MAAM,EAAI,IAAM,KAC/Fa,EAAgBle,MAAQL,EAAM0d,OAFhBa,EAAgBle,MAAQuf,SAASC,gBAAgBC,aAAe,IAAM,IAG3F,EAIMC,GAAM1R,IAAAA,GAAAA,GAAAA,YAAAA,EAAUxE,SAAVwE,YAAAA,GAAkBxE,SAAlBwE,YAAAA,GAA0B3I,MAAMkO,GAC5C,GAAImM,EACF,GAAI,CACQA,EAAIC,QAAQ,uBAAuB,IACtCtB,EAAQ,GACjB,OAAQzb,GAAA,CACN,CAEJ,OAAIyb,GACFN,EAAgBpe,EAAMie,YAAc,uBAAyBje,EAAMie,YAAc,sBACjFO,EAAgB,GAChBC,EAAkBpe,MAAQ,GAC1Bse,EAAY,IACPA,EAAY,GAEnBsB,EAAAA,gBAAgB,IAAM,CACpBC,OAAOC,oBAAoB,SAAUT,CAAY,CACnD,CAAC,EAGDU,EAAAA,UAAU,IAAM,CAEV/B,IAAeC,EAAYje,MAAQ,IAEvC2e,EAAAA,SAAS,IAAM,CACbkB,OAAOG,iBAAiB,SAAUX,CAAY,EAE9CA,EAAY,CACd,CAAC,CACH,CAAC,EAGM,IAAA3e,EAAAA,YAAA,MAAA,CAAA,MAAA,oBAAA,CAAAA,EAAAA,YAAAuf,WAAA,CAAA,IAGIrgB,EAAI,WAEGoe,EAAa,sBACJQ,EAAa,aACpBL,EAAa,uBACLC,EAAkBpe,MAAK,uBACvBL,EAAM+d,kBAAiB,wBACtB/d,EAAMge,mBAAkB,UACpC,GAAI,mBACG,GAAI,WACVhe,EAAM6d,WAAU,MACrBc,EAAS,QAEPM,EAAW,SACVC,EAAY,OACdJ,EAAU,SACRC,GAAY,MACfX,EAAa,MACbpe,EAAMyd,MAAK,MACX,CAAEC,OAAQ,GAAG1d,EAAM0d,MAAM,EAAG,CAAC,EAAA,CAElC9I,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,MAAA,kBAAA,EAAA,CAAAA,EAAAA,YAAA,OAAA,KAAA,CAAAA,EAAAA,YAAAkI,GAAA,CAAA,SAAA,WAAA,SAAA,uBAAA,IAAA,EAODjJ,EAAM2N,KAAK,CAAA,CAAA,CAAA,EAIlBvN,QAASA,IAAAA,QAAAW,OAAAA,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,MAGE,CAAE+c,UAAW,GAAGS,EAAgBle,KAAK,aAAc,CAAC,EAAA,EAC1DS,GAAAA,EAAMV,UAANU,YAAAA,GAAAA,KAAAA,EAAiB,CAAA,GAGtBue,OAAQA,IAAAte,EAAAA,YAAA,MAAA,CAAA,MAAA,iBAAA,CAAkCwe,EAAS,CAAE,CAAA,EAAO,EAG/DC,EAAO,CAAE,CAAA,CAGhB,CACF,CAAC,qCC/XGe,GAAiB,CACrB,QAAQ3gB,EAAgB,OACtBA,EAAI,WAAUwB,EAAAof,GAAS,OAAT,KAAApf,EAAiB,WAAYof,EAAQ,CACrD,CACF,ECWQ,CAAEphB,aAAAA,EAAa,EAAIE,YAAQ,EAE3BC,GAAYH,GAAa,SAAS,0BAET,CAC7BW,KAAM,YACNoO,MAAO,CAAC,gBAAgB,EACxBnO,MAAO,CACL4Q,QAAS,CACP1Q,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX6W,MAAO,CACL/W,KAAMC,OACNiR,SAAU,GACVhR,QAAS,MAEXqgB,SAAU,CACRvgB,KAAMC,OACNiR,SAAU,GACVhR,QAAS,QAEXsgB,UAAW,CACTxgB,KAAMC,OACNiR,SAAU,GACVhR,QAAS,cAEXugB,OAAQ,CACNzgB,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,MACX,GAGFnQ,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,CAIrB,MAAMwS,EAAgBpS,GAAmC,CACvDA,EAAMqS,eAAc,EACpBrS,EAAMsS,gBAAe,EACrB1S,EAAK,iBAAkB,CAACpO,EAAM4Q,OAAO,CACvC,EAEA,MAAO,IAAA7P,EAAAA,YAAA,MAAA,CAAA,MAEIxB,GAAS,QACNiP,GAAUoS,EAAapS,CAAK,GAAC,CAAAzN,EAAAA,YAAAggB,YAAA,CAAA,mBAEnB/gB,EAAMygB,SAAQ,UACrBzgB,EAAM0gB,SAAS,EAAA,CAAAtgB,QAAAA,IAAA,CAAAW,EAAAA,YAAA,OAAA,CAAA,MAAA,SAAA,CACLf,EAAMiX,KAAK,CAAA,CAAA,EAAA,CAAA,CAAA,CAIxC,CACF,CAAC,qCCxEG+J,GAAkB,CACtB,QAAQphB,EAAgB,OACtBA,EAAI,WAAUwB,EAAA6f,GAAU,OAAV,KAAA7f,EAAkB,YAAa6f,EAAS,CACxD,CACF,ECeQ,CAAE7hB,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,QAAQ,0BAER,CAC7BW,KAAM,WACNC,MAAO,CACL4Q,QAAS,CACP1Q,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXuN,MAAO,CACLzN,KAAMC,OACNiR,SAAU,GACVhR,QAAS,MAEXsgB,UAAW,CACTxgB,KAAMC,OACNiR,SAAU,GACVhR,QAAS,OAEX2Q,KAAM,CACJ7Q,KAAM,CAACC,OAAQG,MAAM,EACrB8Q,SAAU,GACVhR,QAAS,OAEX8gB,cAAe,CACbhhB,KAAM,CAACI,MAAM,EACb8Q,SAAU,GACVhR,QAAS,GACX,GAEF+N,MAAO,CAAC,SAAU,gBAAgB,EAElCtN,MAAMb,EAAO,CAAEc,MAAAA,EAAOsN,KAAAA,CAAK,EAAG,CAE5B,MAAMjC,EAAWC,GAAAA,YAAW,EACtB,CAAEO,EAAAA,GAAMzN,GAAa,EAE3B,IAAIiiB,EAAgBnhB,EAAM4Q,QAC1B,MAAM0N,EAAczR,EAAAA,IAAI,EAAK,EACvB5M,EAAO,YACPmhB,EAAkBvU,EAAAA,IAAI,CAAC,EACvBwU,EAAOxU,EAAAA,IAAI,EAAK,EAChBqR,EAAc/R,EAAS+R,YACvBoD,EAAanV,EAASmV,WACtBC,EAAiBpV,EAASqV,oBAAsBrV,EAASqV,oBAAsBxhB,EAAMkhB,cAG3FtT,EAAAA,MACE,IAAM5N,EAAM4Q,QACXoF,GAAW,CAEVmL,EAAgBnL,EACZmL,GACF/d,GAAM,GAAG,EAAE+Q,KAAK,IAAM,CACpBmK,EAAYje,MAAQ,EACtB,CAAC,CACL,CACF,EAIA,MAAMye,EAAaA,IAAM,CAEvB,EAGII,EAAeA,IAAM,CACzB9Q,EAAK,iBAAkB,EAAK,CAC9B,EAEM+Q,EAAgB3Q,GAAiB,CACrC2S,EAAgB,GAChB7C,EAAYje,MAAQ,GACpB+N,EAAK,SAAUI,CAAK,CACtB,EAEMqQ,EAAgBA,IAAM,CAC1BsC,EAAgB,EAClB,EAEMlC,EAAcA,IAAM,CACxBkC,EAAgB,GAChB7C,EAAYje,MAAQ,EAMtB,EAOM+e,EAAkBA,IAAM,OAC5B,MAAMC,GAASve,EAAAA,EAAMue,SAANve,YAAAA,EAAAA,KAAAA,GACfue,OAAAA,GAAAA,MAAAA,EAAQ7U,QAASkI,GAAM,CACrB,MAAMhO,EAAM,OAAOgO,EAAExS,MAAS,UAAYwS,EAAExS,OAAS,MAAQwS,EAAExS,KAAaH,MAAQ,GAC9E8Q,EAAOpL,GAAaiN,CAAC,GAAK,GAC3BA,EAAE1S,QAAO0S,EAAE1S,MAAQ,CAAA,GACxB,MAAMsf,EAAY5M,EAAE1S,MACpBsf,EAAUzO,KAAOA,EACbnM,IACEmM,EAAK8B,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,IACxC2S,EAAUhO,QAAU,OAChBgQ,IAAYhC,EAAUrb,KAAO,mBAC7Bia,GACErN,IAASlE,EAAE,gBAAgB,IAC7B2S,EAAUzO,KAAOlE,EAAE,iBAAiB,EACpC2S,EAAUxO,MAAQnE,EAAE,gBAAgB,IAE/BkE,EAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUhO,QAAU,OAChBgQ,IAAYhC,EAAUrb,KAAO,mBAC7Bia,GACErN,IAASlE,EAAE,mBAAmB,IAChC2S,EAAU,MAAW3S,EAAE,mBAAmB,EAC1C2S,EAAUzO,KAAOlE,EAAE,oBAAoB,IAElCkE,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUhO,QAAU,OAChBgQ,IAAYhC,EAAUrb,KAAO,mBAC7Bia,GACErN,IAASlE,EAAE,kBAAkB,IAC/B2S,EAAUzO,KAAOlE,EAAE,mBAAmB,EACtC2S,EAAUxO,MAAQnE,EAAE,mBAAmB,IAElCkE,EAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUhO,QAAU,UAChBgQ,IAAYhC,EAAUrb,KAAO,oBACxB4M,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUhO,QAAU,SAChBgQ,IAAYhC,EAAUrb,KAAO,mBACxB4M,EAAK8B,QAAQhG,EAAE,eAAe,CAAC,IAAM,IAC9C2S,EAAUhO,QAAU,MAChBgQ,IAAYhC,EAAUrb,KAAO,yBACxB4M,EAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUhO,QAAU,UAChBgQ,IAAYhC,EAAUrb,KAAO,2BACxB4M,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUhO,QAAU,SAChBgQ,IAAYhC,EAAUrb,KAAO,oBACxB4M,EAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IACnD2S,EAAUhO,QAAU,WAChBgQ,IAAYhC,EAAUrb,KAAO,mBACxB4M,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAChD2S,EAAUhO,QAAU,QAChBgQ,IAAYhC,EAAUrb,KAAO,2BACxB4M,EAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUhO,QAAU,UAChBgQ,IAAYhC,EAAUrb,KAAO,iBACxB4M,EAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IACnD2S,EAAUhO,QAAU,OAChBgQ,IAAYhC,EAAUrb,KAAO,mBACxB4M,EAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IACnD2S,EAAUhO,QAAU,WAEhBgQ,IAAYhC,EAAUrb,KAAO,mBACxB4M,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IACjG2S,EAAUhO,QAAU,SAChBgQ,IAAYhC,EAAUrb,KAAO,kBAC7Bia,IACErN,IAASlE,EAAE,oBAAoB,IACjC2S,EAAUzO,KAAOlE,EAAE,qBAAqB,EACxC2S,EAAUxO,MAAQnE,EAAE,oBAAoB,GAEtCkE,IAASlE,EAAE,kBAAkB,IAC/B2S,EAAUzO,KAAOlE,EAAE,mBAAmB,EACtC2S,EAAUxO,MAAQnE,EAAE,kBAAkB,KAGjCkE,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUhO,QAAU,SAChBgQ,IAAYhC,EAAUrb,KAAO,kBAC7Bia,GACErN,IAASlE,EAAE,kBAAkB,IAC/B2S,EAAUzO,KAAOlE,EAAE,mBAAmB,EACtC2S,EAAUxO,MAAQnE,EAAE,kBAAkB,GAE1C2S,EAAU,MAAW3S,EAAE,kBAAkB,GAChCkE,EAAK8B,QAAQhG,EAAE,uBAAuB,CAAC,IAAM,IACtD2S,EAAUhO,QAAU,SAChBgQ,IAAYhC,EAAUrb,KAAO,uBACxB4M,EAAK8B,QAAQhG,EAAE,qBAAqB,CAAC,IAAM,IACpD2S,EAAUhO,QAAU,SAChBgQ,IAAYhC,EAAUrb,KAAO,mBACxB4M,EAAK8B,QAAQhG,EAAE,sBAAsB,CAAC,IAAM,IACrD2S,EAAUhO,QAAU,SAChBgQ,IAAYhC,EAAUrb,KAAO,uBACxB4M,EAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,uBAAuB,CAAC,IAAM,MACtG2S,EAAUhO,QAAU,SAChBgQ,IAAYhC,EAAUrb,KAAO,0BAEvC,GAEOob,CACT,EAOME,GAAYA,IAAM,OACtB,IAAIkC,EAAiC,2BAErC,OADKH,IAAYG,EAAazQ,SAC1BlQ,EAAAA,EAAMue,SAANve,MAAAA,EAAAA,KAAAA,GACFC,EAAAA,YAAA,MAAA,CAAA,MAAA,0BAAA,EAAA,CAEKqe,EAAe,EAAEre,EAAAA,YAAA0T,GAAA,CAAA,QAEP0K,EAAY,KACfsC,CAAU,EAAA,CAAArhB,QAAAA,IAAA,CACfuM,EAAE,eAAe,EACjBuR,EAAc,OAAS,EAAE,CAAA,CAAA,CAAA,CAAA,EAMhCnd,EAAAA,YAAA,MAAA,CAAA,MAAA,4BAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,QAGe0K,EAAY,KACfsC,CAAU,EAAA,CAAArhB,QAAAA,IAAA,CACfuM,EAAE,eAAe,EACjBuR,EAAc,OAAS,EAAE,CAAA,CAAA,CAAA,CAAA,CAIpC,EACMwB,EAAeA,IAAM,CACzB0B,EAAgB/gB,MAAQuf,SAASC,gBAAgBC,aAAe,GAClE,EAEMN,EAAUA,IAAM,CACpB,IAAIC,EAAqB,KACzB,OAAInB,EAAYje,QACdof,EAAG1e,EAAAA,YAAA,MAAA,CAAA,SAAA,IAAA,MAAA,kCAAA,IAAA,GAKE0e,CACT,EAIAW,OAAAA,EAAAA,UAAU,IAAM,CAIVe,IACFE,EAAKhhB,MAAQ,GACb+C,GAAM,GAAG,EAAE+Q,KAAK,IAAM,CACpBmK,EAAYje,MAAQ,EACtB,CAAC,GAEHqf,EAAY,EACZV,EAAAA,SAAS,IAAM,CAAC,CAAC,CACnB,CAAC,EAEM,IAAAje,EAAAA,YAAA,MAAA,CAAA,MAAA,oBAAA,CAAAA,EAAAA,YAAA2gB,WAAA,CAAA,MAGMniB,GAAS,IACXU,EAAI,WACGkhB,EAAa,sBACJtC,EAAa,UACvB7e,EAAM0gB,UAAS,aACZ,GAAK,uBACG,GAAK,wBACJ,GAAI,UAChB,GAAI,uBACO,GAAK,MACpB,GAAK,QACHzB,EAAW,SACVC,EAAY,OACdJ,EAAU,KACZ9e,EAAM+Q,KAAI,MACT,CAAE2M,OAAQ,gBAAgB6D,CAAc,KAAM,CAAC,EAAA,CAEpD3M,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,MAAA,kBAAA,EAAA,CAAAA,EAAAA,YAAA,OAAA,KAAA,CAAAA,EAAAA,YAAAkI,GAAA,CAAA,MAIO,CAAEqL,QAASgN,EAAa,GAAK,QAAQ,SAAA,WAAA,SAAA,uBAAA,IAAA,EAG7CthB,EAAM2N,KAAK,CAAA,CAAA,CAAA,EAIlBvN,QAASA,IAAAA,OAAAW,OAAAA,EAAAA,wBAAAA,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,MAII,CAAE+c,UAAW,GAAGsD,EAAgB/gB,KAAK,eAAgB,CAAC,EAAA,EAC5DS,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,CAAA,CAAA,CAAA,GAIxBue,OAAQA,IAAAte,EAAAA,YAAA,MAAA,CAAA,MAAA,qBAAA,CAAsCwe,GAAS,CAAE,CAAA,EAAO,EAGnEC,EAAO,CAAE,CAAA,CAGhB,CACF,CAAC,qCC3UGmC,GAAiB,CACrB,QAAQ/hB,EAAgB,OACtBA,EAAI,WAAUwB,EAAAwgB,GAAS,OAAT,KAAAxgB,EAAiB,WAAYwgB,EAAQ,CACrD,CACF,ECAMC,GAAeC,eAAY,CAC/B,KAAM,OACN,KAAM,OACN,OAAQ,OACR,OAAQ,OACR,OAAQ,OACR,QAAS,MACX,CAAC,EAED,MAAMC,WAAkBF,EAAa,CACnC,WAAW,OAA4C,CACrD,OAAOG,GAAAA,gBAAgB,QAAS,CAC9B,KAAM,CAAC,OAAQ,MAAM,CAAA,CACtB,CACH,CACF,CCJO,SAASC,IAAY,CAwC1B,MAAO,CACL,SAnCe,CAACpR,EAAcqR,EAAW,KACpCrR,EACEsR,GAAAA,OAAOtR,EAAM,CAClB,SAAUqR,EAAW,SAAW,OAChC,KAAM,SACN,SAAU,EAAA,CACX,EALiB,GAmClB,eAvBsBrR,GACjBA,EACEsR,GAAAA,OAAOtR,EAAM,CAClB,QAAS,QACT,SAAU,OACV,KAAM,QAAA,CACP,EAAE,QAAQ,OAAQ,EAAE,EALH,GAuBlB,eAXsBA,GACjBA,EACEsR,GAAAA,OAAOtR,EAAM,CAClB,SAAU,OACV,KAAM,OAAA,CACP,EAJiB,CAAA,CAUlB,CAEJ,0PCxCE,KAAM,CAAE,aAAAzR,CAAA,EAAiBE,YAAA,EACnBC,EAAYH,EAAa,kBAAkB,EAK3C,CAAE,EAAAuN,CAAA,EAAMkO,WAAA,EACRxO,EAAYC,GAAAA,cAAA,EACZ8V,EAASH,GAAA,EACTxW,EAASzD,EAAAA,SAAS,IAAMqE,EAAU,gBAAgB,EAElD+B,EAAOiU,EAEPC,EAAWzV,EAAAA,IAAA,EACX0V,EAAW1V,EAAAA,IAAI,EAAE,EAEjB2V,EAAa3V,EAAAA,IAAyB,EAAE,EA0BxC4V,EAAiB,CAACC,EAAmCC,EAAW,IAAKC,GAAwB,CAAA,EAAIC,EAAuB,KAAoB,OAChJ,IAAInX,EAAmB,CAAA,EACvB,UAAWoX,KAAUJ,EAAc,CAEjC,GADII,EAAO,WAAa,SACpB1hB,EAAA0hB,EAAO,OAAP,MAAA1hB,EAAa,OAAQ,SACzB,MAAMsJ,EAAkB,CACtB,KAAMlD,GAAYmb,EAAUG,EAAO,IAAI,EACvC,MAAO,CAAC,GAAIF,EAAwB,EACpC,YAAaR,EAAO,eAAe,CAAC,GAAIQ,EAAwB,EAAE,KAAK,EAAE,CAAC,EAC1E,KAAM,CAAC,GAAGC,CAAU,CAAA,EAEtB,GAAIC,EAAO,MAAQA,EAAO,KAAK,MAAO,CACpC,MAAMC,EAAYD,EAAO,KAAK,MACxBE,EAAOF,EAAO,KAAK,MAAQ,GACjCpY,EAAK,MAAQ,CAAC,GAAGA,EAAK,MAAOqY,CAAS,EACtCrY,EAAK,YAAc0X,EAAO,eAAe1X,EAAK,MAAM,KAAK,EAAE,CAAC,EAC5DA,EAAK,KAAO,CAAC,GAAGA,EAAK,KAAM,OAAOsY,CAAI,CAAC,EACnCF,EAAO,WAAa,aAAcpX,EAAI,KAAKhB,CAAI,EAC1CiY,IAAa,KAAKH,EAAW,MAAM,KAAKM,CAAM,CACzD,CACA,GAAIA,EAAO,SAAU,CACnB,MAAMG,EAAaR,EAAeK,EAAO,SAAUpY,EAAK,KAAMA,EAAK,KAAK,EACpEuY,EAAW,QAAU,IAAGvX,EAAM,CAAC,GAAGA,EAAK,GAAGuX,CAAU,EAC1D,CACF,CACA,OAAOvX,CACT,EAEMwX,EAAoB,IAAM,CAC9B9U,EAAK,OAAO,CACd,EAQM+U,EAAgBxd,GAAoB,CAGxCvC,GAAM,GAAG,EAAE,KAAK,IAAM,CACpBmf,EAAS,MAAQ,EACnB,CAAC,CACH,EAEMa,EAAe,CAAChN,EAAe5E,IAAY,SAC/C,IAAI9F,GAAmB,CAAA,EACnB0K,IAAU,GACR,MAAM,QAAQkM,EAAS,KAAK,EAC9B5W,GAAM4W,EAAS,MAAM,OAAQ3c,GAAS,CACpC,GAAIA,EAAK,MAAM,KAAK,EAAE,EAAE,QAAQyQ,CAAK,IAAM,GAAI,OAAOzQ,EAAA,GAC7CA,EAAK,YAAY,QAAQyQ,EAAM,aAAa,IAAM,GAAI,OAAOzQ,EAAA,GAC7DA,EAAK,KAAK,QAAQyQ,CAAK,IAAM,GAAI,OAAOzQ,CACnD,CAAC,EACE+F,IAAMtK,EAAAkhB,EAAS,QAAT,KAAAlhB,EAAkB,CAAA,EAC1BsK,IAAM2X,EAAAf,EAAS,QAAT,KAAAe,EAAkB,CAAA,EAC7B7R,EAAG9F,EAAG,CACR,EAWM4X,EAAkB,CAACC,EAAM7hB,EAAMiM,GAAO6V,IAAa,CAAC,EAG1DpD,OAAAA,EAAAA,UAAU,IAAM,CACdkC,EAAS,MAAQG,EAAehX,EAAO,KAAK,CAG9C,CAAC,0EAGDhD,EAAAA,mBAsFM,MAAA,CAtFA,uBAAOhJ,EAAAA,MAAAF,CAAA,CAAS,CAAA,GAEpBoJ,EAAAA,mBAkBM,MAlBNC,GAkBM,CAjBJD,EAAAA,mBAgBM,MAhBNI,GAgBM,CAfJhI,cAciBtB,EAAAA,MAAAgkB,EAAAA,cAAA,EAAA,YAbNlB,EAAA,2CAAAA,EAAQ,MAAA3L,GACjB,YAAU,OACT,oBAAmBwM,EACnB,YAAa3jB,EAAAA,MAAAkN,CAAA,EAAC,oBAAA,EACd,SAAQwW,CAAA,GACE,iBACT,IAES,CAFTpiB,EAAAA,YAEStB,EAAAA,MAAAoJ,QAAA,EAAA,KAAA,mBADP,IAAU,CAAV9H,EAAAA,YAAUtB,EAAAA,MAAAikB,SAAA,CAAA,CAAA,WAIZ,QAAAC,EAAAA,QAAA,CAAsD,CADpC,KAAAhe,KAAI,CACtBgD,qBAAsD,OAAtDib,GAAsDC,kBAAhCle,EAAK,MAAM,KAAI,KAAA,CAAA,EAAA,CAAA,CAAA,4CAM7CgD,EAAAA,mBA+DM,MA/DNmb,GA+DM,CA9DJ/iB,EAAAA,YA6DStB,EAAAA,MAAAskB,EAAAA,MAAA,EAAA,CA7DD,eAAa,SAAO,mBAExB,IAA0B,kBAD5Btb,EAAAA,mBA2DYub,EAAAA,SAAA,KAAAC,EAAAA,WA1DKzB,EAAA,MAAR7c,GAAI,4BADbnG,EAAAA,YA2DYC,EAAAA,MAAAykB,EAAAA,SAAA,EAAA,CAzDT,IAAKve,EAAK,KACV,OAAOvE,EAAAuE,EAAK,OAAL,YAAAvE,EAAW,MACnB,KAAA,EAAA,qBACA,IAqDM,CArDNuH,EAAAA,mBAqDM,MArDNwb,GAqDM,EApDJ3b,YAAA,EAAA,EAAAC,EAAAA,mBAmDMub,EAAAA,SAAA,KAAAC,EAAAA,WAlDUte,EAAK,SAAZye,GAAG,8BADZ3b,EAAAA,mBAmDM,MAAA,CAjDH,IAAK2b,EAAI,KACV,MAAM,KAAA,GACW,CAAAA,EAAI,UAAYA,EAAI,SAAS,SAAM,GAClD5b,YAAA,EAAAC,qBAmBK,KAnBL4b,GAmBK,CAlBH1b,EAAAA,mBAiBK,KAAA,KAAA,CAhBH5H,cAEStB,EAAAA,MAAAoJ,EAAAA,MAAA,EAAA,CAFA,oCAAY,OAAAya,GAAgBliB,EAAAgjB,EAAI,OAAJ,YAAAhjB,EAAU,KAAMgjB,EAAI,MAAMf,EAAAe,EAAI,OAAJ,YAAAf,EAAU,KAAU,GAAA,CAAA,MAAA,CAAA,CAAA,qBACjF,IAAA,OAAsD,sBAAtD7jB,EAAAA,YAAsDsJ,EAAAA,yBAAtC1H,EAAAgjB,EAAI,OAAJ,MAAAhjB,EAAU,KAAO3B,EAAAA,MAAA6kB,GAAAA,UAAA,EAAa7kB,QAAA8kB,GAAAA,IAAA,CAAI,CAAA,EAAA,2BAG3C9kB,EAAAA,MAAAgC,EAAA,EAAW2iB,EAAI,IAAI,iBAK5B3b,EAAAA,mBAMC,IAAA,OAJE,KAAM2b,EAAI,KACX,OAAO,SACP,IAAI,UAAA,qBACDhjB,EAAAgjB,EAAI,OAAJ,YAAAhjB,EAAU,KAAK,EAAA,EAAAojB,EAAA,kBAXpBhlB,EAAAA,YAKcilB,GAAA,OAHX,MAAO9e,EAAK,IAAI,IAAIye,EAAI,IAAI,GAC5B,QAAOlB,CAAA,qBACR,IAAA,OAAqB,4CAAlB9hB,EAAAgjB,EAAI,OAAJ,YAAAhjB,EAAU,KAAK,EAAA,CAAA,CAAA,sBAOA,qBAK1BqH,EAAAA,mBAwBWub,EAAAA,SAAA,CAAA,IAAA,GAAA,CAvBTrb,qBAA8B,KAAA,KAAAkb,EAAAA,iBAAvBR,EAAAe,EAAI,OAAJ,YAAAf,EAAU,KAAK,EAAA,CAAA,EACtB1a,EAAAA,mBAqBK,KAAA,KAAA,EApBHH,YAAA,EAAA,EAAAC,EAAAA,mBAmBKub,EAAAA,SAAA,KAAAC,EAAAA,WAlBSG,EAAI,SAAT1R,GAAC,4BADVjK,EAAAA,mBAmBK,KAAA,CAjBF,IAAKiK,EAAE,IAAA,GACR3R,cAEStB,EAAAA,MAAAoJ,EAAAA,MAAA,EAAA,CAFA,sCAAY,OAAAya,GAAgBliB,GAAAsR,EAAE,OAAF,YAAAtR,GAAQ,KAAMsR,EAAE,MAAM2Q,GAAA3Q,EAAE,OAAF,YAAA2Q,GAAQ,KAAQ,GAAA,CAAA,MAAA,CAAA,CAAA,qBACzE,IAAA,OAAoD,sBAApD7jB,EAAAA,YAAoDsJ,EAAAA,yBAApC1H,EAAAsR,EAAE,OAAF,MAAAtR,EAAQ,KAAO3B,EAAAA,MAAA6kB,GAAAA,UAAA,EAAa7kB,QAAA8kB,GAAAA,IAAA,CAAI,CAAA,EAAA,2BAGzC9kB,EAAAA,MAAAgC,EAAA,EAAW2iB,EAAI,IAAI,iBAK5B3b,EAAAA,mBAMC,IAAA,OAJE,KAAM2b,EAAI,KACX,OAAO,SACP,IAAI,UAAA,qBACDhjB,EAAAsR,EAAE,OAAF,YAAAtR,EAAQ,KAAK,EAAA,EAAAsjB,EAAA,kBAXlBllB,EAAAA,YAKcilB,GAAA,OAHX,GAAE,GAAK9e,EAAK,IAAI,IAAIye,EAAI,IAAI,IAAI1R,EAAE,IAAI,GACtC,QAAOwQ,CAAA,qBACR,IAAA,OAAmB,4CAAhB9hB,EAAAsR,EAAE,OAAF,YAAAtR,EAAQ,KAAK,EAAA,CAAA,CAAA,sBAOA,qPClMpC,MAAMpB,EAAQ8H,EAGR,CAAE,aAAA1I,CAAA,EAAiBE,YAAA,EACnBC,EAAYH,EAAa,aAAa,EAEtC,CAAE,EAAAuN,CAAA,EAAMzN,GAAA,EAGR0R,EAAU/D,EAAAA,IAAI,EAAK,EACnB8X,EAAY3c,EAAAA,SAAS,IAAOhI,EAAM,SAAW,OAAS,OAAQ,EAC9D4kB,EAAe,IAAM,CACzBhU,EAAQ,MAAQ,CAACA,EAAQ,KAC3B,8BAGAnI,EAAAA,mBAwBM,MAAA,CAxBA,uBAAOhJ,EAAAA,MAAAF,CAAA,CAAS,CAAA,GACpBoJ,EAAAA,mBAUM,MAAA,CATJ,MAAKkc,EAAAA,eAAA,CAAC,oBAAmB,CAAA,SACL,EAAAjU,EAAA,KAAO,CAAA,CAAA,EAC1B,wBAAYgU,EAAY,CAAA,MAAA,CAAA,CAAA,eACzBjc,EAAAA,mBAAwD,IAAA,CAApD,uBAAO,CAAA,WAAA,yBAAA,CAAuC,CAAA,YAEzCb,EAAA,oDADTW,EAAAA,mBAIC,OAJDG,GAICib,EAAAA,gBADKpkB,EAAAA,MAAAkN,CAAA,EAAC,iBAAA,CAAA,EAAA,CAAA,OAGT5L,cAWWtB,EAAAA,MAAAiiB,EAAAA,QAAA,EAAA,YAVA9Q,EAAA,2CAAAA,EAAO,MAAAgG,GACf,MAAKkO,EAAAA,eAAA,CAAA,KAAUH,EAAA,MAAS,YAAeA,EAAA,MAAS,EACjD,MAAM,wBACL,cAAa,GACb,iBAAgB,GACjB,UAAU,MACV,UAAA,GACC,cAAc7c,EAAA,SAAQ,iCAAA,+BACvB,KAAK,KAAA,qBACL,IAAuC,CAAvC/G,EAAAA,YAAuCgkB,GAAA,CAA1B,uBAAOnU,EAAA,MAAO,GAAA,sGC7D3BoU,GAAqB,CACzB,QAAQplB,EAAgB,OACtBA,EAAI,WAAUwB,EAAA6jB,GAAa,OAAb,KAAA7jB,EAAqB,eAAgB6jB,EAAY,CACjE,CACF,ECcQ,CAAE7lB,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,OAAO,0BAEP,CAC7BW,KAAM,UACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXL,KAAM,CACJG,KAAMC,OACNC,QAAS4Q,QAEXvH,GAAI,CACFvJ,KAAMC,OACNC,QAAS4Q,QAEX3Q,MAAO,CACLH,KAAM,CAACC,OAAQG,OAAQ0Q,MAAS,EAChC5Q,QAAS,IAEX6U,YAAa,CACX/U,KAAMC,OACNC,QAAS4Q,QAEXkU,WAAY,CACVhlB,KAAMC,OACNC,QAAS,IAEX+kB,WAAY,CACVjlB,KAAMC,OACNC,QAAS,IAEX2Q,KAAM,CACJ7Q,KAAMC,OACNC,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACNL,QAAS,IAEXglB,UAAW,CACTllB,KAAMI,OACNF,QAAS,IAEXwQ,QAAS,CACP1Q,KAAMO,QACNL,QAAS,IAEX8U,UAAW,CACThV,KAAMO,QACNL,QAAS,IAEXilB,SAAU,CACRnlB,KAAMO,QACNL,QAAS,IAEXklB,WAAY,CACVplB,KAAMC,OACNC,QAAS4Q,QAEX9Q,KAAM,CACJA,KAAMC,OACNC,QAAS,QAEXmlB,KAAM,CACJrlB,KAAMI,OACNF,QAAS,GAEXolB,SAAU,CACRtlB,KAAM,CAACO,QAASsL,MAAM,EACtB3L,QAAS,IAEXkR,QAAS,CACPpR,KAAMC,OACNC,QAAS,WACX,GAGF+N,MAAO,CAAC,oBAAqB,QAAS,OAAQ,QAAS,QAAS,SAAS,EAEzEtN,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,CAErB,KAAM,CAAEzB,EAAAA,GAAMzN,GAAa,EACrByS,EAAaC,EAAAA,gBAAgB,MAAM,EACnC+D,EAAa9I,EAAAA,IAAI7M,EAAMK,KAAK,EAE5BolB,EAAgB5Y,EAAAA,IAAI,EAAK,EAGzB6Y,EAAY1d,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EACxGgU,EAAe3d,EAAAA,SAAS,IAAMhI,EAAMiV,aAAetI,EAAE,oBAAoB,CAAC,EAC1EoJ,EAAkB/N,EAAAA,SAAS,IAAA,SAAOhI,QAAAA,GAAAA,EAAAA,EAAMyJ,KAANzJ,KAAAA,EAAYA,EAAMD,OAAlBC,KAAAA,EAA0BA,EAAMC,OAAS+Q,OAAS,EAG1FpD,EAAAA,MACE,IAAM5N,EAAMK,MACXue,GAAa,CACZjJ,EAAWtV,MAAQue,CACrB,CACF,EAIA,MAAMgH,EAAmBA,IAClB5lB,EAAMklB,WACXnkB,EAAAA,YAAAkI,GAAA,CAAA,SAAyBjJ,EAAMklB,UAAU,EAAA,IAAA,EADX,KAI1BW,EAAmBA,IAClB7lB,EAAMmlB,WACXpkB,EAAAA,YAAAkI,GAAA,CAAA,SAAyBjJ,EAAMmlB,UAAU,EAAA,IAAA,EADX,KAI1BrP,EAAc9N,EAAAA,SAAS,IACvB,OAAOhI,EAAMwN,UAAa,UAAkBxN,EAAMwN,SAClD,OAAOxN,EAAMwN,UAAa,SAAiBxN,EAAMwN,WAAa,GAC3D,EACR,EAEK8N,EAAe9Z,GAAyB,CAC5CmU,EAAWtV,MAAQmB,EACnB4M,EAAK,oBAAqB5M,CAAG,EAC7B4M,EAAK,QAAS5M,CAAG,CACnB,EAEM0U,EAAc1H,GAAsB,CACxCiX,EAAcplB,MAAQ,GAClBL,EAAMsR,UAAY,YAAalD,EAAK,OAAQI,EAAOmH,EAAWtV,MAAOL,EAAMslB,UAAU,EACpFlX,EAAK,OAAQI,EAAOmH,EAAWtV,MAAOL,EAAMC,IAAI,CACvD,EAEMub,EAAehN,GAAsB,CACxCA,EAAMmS,OAA4BmF,OAAM,EACrC9lB,EAAMsR,UAAY,YAAalD,EAAK,QAASI,EAAOmH,EAAWtV,MAAOL,EAAMslB,UAAU,EACrFlX,EAAK,QAASI,EAAOmH,EAAWtV,MAAOL,EAAMC,IAAI,CACxD,EAEM8lB,EAAevX,GAAe,CAClCJ,EAAK,QAASI,CAAK,CACrB,EAEMwX,EAAiBxX,GAAyB,CAC9CiX,EAAcplB,MAAQ,GACtB+N,EAAK,UAAWI,CAAK,CACvB,EAGA,MAAO,IACAxO,EAAM4Q,QACX7P,EAAAA,YAAAklB,EAAAA,QAAA,CAAA,IAESjmB,EAAMC,KAAI,GACX8V,EAAgB1V,MAAK,KACnBL,EAAMD,KAAI,KACVC,EAAME,KAAI,WACJyV,EAAWtV,MAAK,eACZ,CAAE6lB,OAAQ,IAAM,SACtBlmB,EAAMqlB,SAAQ,KAClBrlB,EAAMulB,KAAI,SACNvlB,EAAMwlB,SAAQ,KAClBE,EAAUrlB,MAAK,cACNolB,EAAcplB,MAAK,UACvBL,EAAMolB,UAAS,YACbO,EAAatlB,MAAK,SACrByV,EAAYzV,MAAK,UAChBL,EAAMkV,UAAS,QACjBoG,EAAW,OACZpF,EAAU,QACTsF,EAAW,QACXuK,EAAW,UACTC,EAAa,MACjBzmB,GAAS,MACT,CAAE+U,QAAStU,EAAM4Q,QAAU,GAAK,MAAO,CAAC,EAAA,CAE7CuV,OAAQA,IAAMP,EAAgB,EAC9BQ,OAAQA,IAAMP,EAAgB,CAAE,CAAA,EA3BX,IAgC/B,CACF,CAAC,qCCxMGlX,GAAgB,CACpB,QAAQ/O,EAAgB,OACtBA,EAAI,WAAUwB,EAAAilB,GAAQ,OAAR,KAAAjlB,EAAgB,UAAWilB,EAAO,CAClD,CACF,ECUQ,CAAEjnB,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,cAAc,0BAEd,CAC7BW,KAAM,gBACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXL,KAAM,CACJG,KAAMC,OACNC,QAAS4Q,QAEXvH,GAAI,CACFvJ,KAAMC,OACNC,QAAS4Q,QAEX3Q,MAAO,CACLH,KAAMI,OACNF,QAAS4Q,QAEXiE,YAAa,CACX/U,KAAMC,OACNC,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACNL,QAAS,IAEX0X,IAAK,CACH5X,KAAMI,OACNF,QAAS4Q,QAEXzQ,IAAK,CACHL,KAAMI,OACNF,QAAS4Q,QAEXD,KAAM,CACJ7Q,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEXsV,KAAM,CACJpmB,KAAMI,OACNF,QAAS,GAEXmmB,aAAc,CACZrmB,KAAMO,QACNL,QAAS,IAEXomB,UAAW,CACTtmB,KAAMI,OACNF,QAAS4Q,QAEXJ,QAAS,CACP1Q,KAAMO,QACNL,QAAS,IAEXklB,WAAY,CACVplB,KAAMC,OACNC,QAAS4Q,QAEXM,QAAS,CACPpR,KAAMC,OACNC,QAAS4Q,QAEXyP,SAAU,CACRvgB,KAAMC,OACNC,QAAS4Q,MACX,GAGF7C,MAAO,CAAC,oBAAqB,QAAS,OAAQ,QAAS,UAAW,QAAQ,EAE1EtN,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,CAErB,KAAM,CAAEzB,EAAAA,GAAMkO,WAAO,EACflF,EAAa9I,EAAAA,IAAI7M,EAAMK,KAAK,EAC5BsR,EAAaC,EAAAA,gBAAgB,MAAM,EAEnC8T,EAAY1d,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EACxGkE,EAAe7N,WAAS,IAAOhI,EAAMiV,YAAcjV,EAAMiV,YAActI,EAAE,oBAAoB,CAAE,EAC/FmJ,EAAc9N,EAAAA,SAAS,IAAMhI,EAAMwN,QAAQ,EAC3CuI,EAAkB/N,EAAAA,SAAS,IAAA,SAAOhI,QAAAA,GAAAA,EAAAA,EAAMyJ,KAANzJ,KAAAA,EAAYA,EAAMD,OAAlBC,KAAAA,EAA0BA,EAAMC,OAAS+Q,OAAS,EAE1FpD,EAAAA,MACE,IAAM5N,EAAMK,MACX2V,GAAW,CACVL,EAAWtV,MAAQ2V,CACrB,CACF,EAGA,MAAMsF,EAAe9Z,GAAQ,CAC3B4M,EAAK,oBAAqB5M,EAAKxB,EAAMC,IAAI,EACzCmO,EAAK,QAAS5M,EAAKxB,EAAMC,IAAI,CAC/B,EACMiW,EAAcU,GAAuB,CACrC5W,EAAMsR,UAAY,YAAalD,EAAK,OAAQwI,EAAQjB,EAAWtV,MAAOL,EAAMslB,UAAU,EACrFlX,EAAK,OAAQwI,EAAQjB,EAAWtV,MAAOL,EAAMC,IAAI,CACxD,EAEMub,EAAe5E,GAAuB,CACtCA,EAAO+J,QAAS/J,EAAO+J,OAA4BmF,OAAM,EAEzD9lB,EAAMsR,UAAY,YAAalD,EAAK,QAASwI,EAAQjB,EAAWtV,MAAOL,EAAMslB,UAAU,EACtFlX,EAAK,QAASwI,EAAQjB,EAAWtV,MAAOL,EAAMC,IAAI,CACzD,EAIMgW,EAAeA,CAACwQ,EAAsBC,IAAqB,CAC/DtY,EAAK,SAAUqY,EAAcC,CAAQ,CACvC,EAIA,OACE3lB,EAAAA,YAAA4lB,EAAAA,cAAA,CAAA,MAESpnB,GAAS,IACXS,EAAMC,MAAQ,kBAAiB,GAChC8V,EAAgB1V,MAAK,KACnBL,EAAMD,KAAI,WACP4V,EAAWtV,MAAK,sBAAAuW,GAAhBjB,EAAWtV,MAAKuW,EAAA,MAClB,CAAEtC,QAAStU,EAAM4Q,QAAU,GAAK,QAAQ,KACzC8U,EAAUrlB,MAAK,YACRwV,EAAaxV,MAAK,SACrByV,EAAYzV,MAAK,oBACRL,EAAMygB,SAAQ,KAC3BzgB,EAAMsmB,KAAI,gBACDtmB,EAAMumB,aAAY,UACtBvmB,EAAMwmB,UAAS,IACrBxmB,EAAM8X,IAAG,IACT9X,EAAMO,IAAG,QAEL+a,EAAW,OACZpF,EAAU,QACTsF,EAAW,SACVvF,CAAY,EAAA,IAAA,CAK5B,CACF,CAAC,qCCjKG2Q,GAAsB,CAC1B,QAAQhnB,EAAgB,OACtBA,EAAI,WAAUwB,EAAAylB,GAAc,OAAd,KAAAzlB,EAAsB,gBAAiBylB,EAAa,CACpE,CACF,ECcQ,CAAEznB,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,QAAQ,0BACR,CAC7BW,KAAM,WACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXL,KAAM,CACJG,KAAMC,OACNC,QAAS4Q,QAEXvH,GAAI,CACFvJ,KAAMC,OACNC,QAAS4Q,QAEXiJ,WAAY,CACV/Z,KAAM,CAACC,OAAQiT,MAAOrH,MAAM,EAC5B3L,QAAS4Q,QAEX3Q,MAAO,CACLH,KAAM,CAACC,OAAQiT,MAAOrH,MAAM,EAC5B3L,QAAS4Q,QAEXiG,MAAO,CACL/W,KAAMC,OACNC,QAAS4Q,QAEXuC,UAAW,CACTrT,KAAM,CAACC,OAAQiT,KAAK,EACpBhT,QAAS4Q,QAEXiE,YAAa,CACX/U,KAAMC,OACNC,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACNL,QAAS,IAEX8U,UAAW,CACThV,KAAMO,QACNL,QAAS,IAEXmV,SAAU,CACRrV,KAAMO,QACNL,QAAS,IAEXkV,WAAY,CACVpV,KAAMO,QACNL,QAAS,IAEX0mB,QAAS,CACP5mB,KAAMC,OACNiR,SAAU,IAEZkC,WAAY,CAEVpT,KAAMC,OACNC,QAAS4Q,QAEXJ,QAAS,CACP1Q,KAAMO,QACNL,QAAS,IAEX2mB,UAAW,CACT7mB,KAAMuR,SACNrR,QAASA,IAAM,CAAC,GAElBoR,GAAI,CACFtR,KAAMuR,SACNrR,QAASA,IAAM,CAAC,GAElB4mB,MAAO,CACL9mB,KAAMuR,SACNrR,QAASA,IAAM,CAAC,GAElB6mB,SAAU,CACR/mB,KAAMO,QACNL,QAAS,IAEXklB,WAAY,CACVplB,KAAMC,OACNC,QAAS4Q,QAEXM,QAAS,CACPpR,KAAMC,OACNC,QAAS4Q,QAEXkW,QAAS,CACPhnB,KAAM6L,OACN3L,QAASA,IAAM,CAAC,GAElB+mB,aAAc,CACZjnB,KAAMO,QACNL,QAAS,IAEX2Q,KAAM,CACJ7Q,KAAMC,OACNC,QAAS4Q,MACX,GAGF7C,MAAO,CAAC,oBAAqB,QAAS,QAAS,QAAQ,EACvDtN,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,SACrB,MAAMgZ,EAAYC,GAAAA,aAAY,EACxBlb,EAAWC,GAAAA,YAAW,EACtB,CAAEoD,MAAAA,GAAU8X,aAAS,EACrB,CAAE3a,EAAAA,EAAGxJ,OAAAA,GAAW0X,WAAO,EAGvBjL,EAAOzM,EAAO9C,MACpB,IAAIknB,EAAU,gCACd,MAAMC,EAAS3a,EAAAA,IAAI,EAAK,EAClBqE,EAAUrE,EAAAA,IAAI,EAAK,EACnB4a,EAAc5a,EAAAA,IAAI,YAAY,EAC9B8Y,EAAe3d,EAAAA,SAAS,IAAMhI,EAAMiV,aAAetI,EAAE,YAAY,CAAC,EAClE+a,EAAgB1f,WAAS,IAAOhI,EAAMia,aAAejJ,OAAYhR,EAAMia,WAAaja,EAAMK,KAAM,EAChGsV,EAAa9I,EAAAA,IAAI6a,EAAcrnB,KAAK,EACpCsnB,EAAiB9a,EAAAA,IAAI7M,EAAMuT,SAAS,EACpCqU,EAAkB/a,EAAAA,IAAI7M,EAAMsV,UAAU,EAGtCuS,EAAchb,EAAAA,IAAiBmE,MAAS,EACxCgE,EAAUnI,EAAAA,IAAe,EAAE,EAC3Bib,GAAgBjb,EAAAA,IAAe,EAAE,EACjCkb,EAAYlb,EAAAA,IAAI,GAAGtN,EAAS,EAAE,EAC9BoS,EAAaC,EAAAA,gBAAgB,MAAM,EAGnCoW,GAAShoB,GAAAA,EAAAA,EAAM8mB,UAAN9mB,YAAAA,EAAeioB,gBAAfjoB,KAAAA,EAAgC,GAC3CgoB,EAAOna,WAAW,IAAI,EAAG0Z,EAAU,yBAC9BS,EAAOna,WAAW,IAAI,IAC7B0Z,EAAU,8BACVC,EAAOnnB,MAAQ,GACf0nB,EAAU1nB,MAAQ,oBAEhBL,EAAMsR,UAAY,cAAayW,EAAU1nB,OAAS,cAEtD,MAAM6nB,EAAa,IAAIC,IAGjBC,EAAapgB,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EACzGoE,EAAkB/N,EAAAA,SAAS,IAAA,SAAOhI,QAAAA,GAAAA,EAAAA,EAAMyJ,KAANzJ,KAAAA,EAAYA,EAAMD,OAAlBC,KAAAA,EAA0BA,EAAMC,OAAS+Q,OAAS,EAIpFqX,EAAgBpR,GAAmBA,GAAS,MAAQA,IAAU,GAE9DqR,EAAoB3iB,GAA0B,uBAClD,OAAQxC,EAAO9C,MAAK,CAClB,IAAK,KACH,OAAOsF,GAAAA,EAAAA,EAAK1C,IAAL0C,KAAAA,EAAUA,EAAKgH,IAAfhH,KAAAA,EAAoB,GAC7B,IAAK,KACH,OAAOA,IAAAA,EAAAA,EAAK4iB,KAAL5iB,KAAAA,EAAWA,EAAKgH,IAAhBhH,KAAAA,GAAqB,GAC9B,IAAK,KACH,OAAOA,IAAAA,GAAAA,EAAK6iB,KAAL7iB,KAAAA,GAAWA,EAAKgH,IAAhBhH,KAAAA,GAAqB,GAC9B,QACE,OAAOA,GAAAA,EAAKgH,IAALhH,KAAAA,GAAU,EACrB,CACF,EAEM8iB,GAAqBxR,GACpBA,EACEuQ,EAAOnnB,OAAS4W,EAAMkE,SAAS,GAAG,EAAIlE,EAAMxE,MAAM,GAAG,EAAE,CAAC,EAAIwE,EADhD,GAIfyR,GAAqBA,CAAC1F,EAAc2F,IAAoB,CAC5D,MAAMhjB,EAAOgjB,EAAKC,KAAMlW,GAAMvS,OAAOuS,EAAEmW,CAAC,IAAM1oB,OAAO6iB,CAAI,CAAC,EAC1D,OAAKrd,EACE8iB,GAAkBH,EAAiB3iB,CAAI,CAAC,EAD7B,EAEpB,EAEMmjB,GAAiBA,CAAC9F,EAAc/L,EAAe8R,IAAkC,CACrF,MAAMhmB,EAAM5C,OAAO6iB,CAAI,EACjBnS,GAAO1Q,OAAO8W,GAASlU,CAAG,EAC1BimB,GAASd,EAAWe,IAAIlmB,CAAG,EACjC,GAAIimB,IAAUA,GAAO/R,QAAUpG,GAC7B,OAAIkY,IAAKC,GAAOD,IAAMA,GACfC,GAET,MAAME,GAAMH,EAAM,CAAE1oB,MAAO0C,EAAKkU,MAAOpG,GAAMkY,IAAAA,CAAI,EAAI,CAAE1oB,MAAO0C,EAAKkU,MAAOpG,IAC1EqX,OAAAA,EAAWiB,IAAIpmB,EAAKmmB,EAAG,EAChBA,EACT,EAEME,EAAiBviB,GAAe,SACpC,GAAIA,GAAK,MAAQA,IAAM,GAAI,MAAO,GAClC,GAAI,OAAOA,GAAM,UAAY,CAACuM,MAAMxR,QAAQiF,CAAC,EAAG,CAC9C,MAAMwiB,EAAIxiB,EACJmc,IAAOqG,GAAAA,EAAAA,EAAEhpB,QAAFgpB,KAAAA,EAAWA,EAAER,IAAbQ,KAAAA,EAAkBA,EAAErG,KACjC,OAAOA,IAAQ,MAAQA,KAAS,GAAK,GAAK7iB,OAAO6iB,EAAI,EAAEsG,KAAI,CAC7D,CACA,OAAOnpB,OAAO0G,CAAC,EAAEyiB,KAAI,CACvB,EAEMC,EAAkB1iB,GAAe,OACrC,GAAIA,GAAK,MAAQA,IAAM,GAAI,MAAO,GAClC,GAAI,OAAOA,GAAM,UAAY,CAACuM,MAAMxR,QAAQiF,CAAC,EAAG,CAC9C,MAAMwiB,EAAIxiB,EACJoQ,GAAQoS,EAAAA,EAAEpS,QAAFoS,KAAAA,EAAWA,EAAExiB,EAC3B,OAAOoQ,GAAS,MAAQA,IAAU,GAAK,GAAK9W,OAAO8W,CAAK,EAAEqS,KAAI,CAChE,CACA,OAAOnpB,OAAO0G,CAAC,EAAEyiB,KAAI,CACvB,EAEME,GAAsBC,GACtBA,GAAO,MAAQA,IAAQ,GAAW,GAClCrW,MAAMxR,QAAQ6nB,CAAG,EACfA,EAAI7W,SAAW,EAAU,GACtB6W,EAAIC,MAAO/jB,GACZA,GAAQ,MAAQA,IAAS,GAAW,GACjC,CAACyjB,EAAczjB,CAAI,GAAK0iB,EAAakB,EAAe5jB,CAAI,CAAC,CACjE,EAEC,OAAO8jB,GAAQ,SAAiB,CAACL,EAAcK,CAAG,GAAKpB,EAAakB,EAAeE,CAAG,CAAC,EACpF,GAGHE,GAAoBA,IAAM,CAC1BjC,EAAcrnB,QAAU,IAC5B+N,EAAK,oBAAqB,EAAE,CAC9B,EAEMwb,EAAgB5hB,WAAsB,IAAOwhB,GAAmB3B,EAAYxnB,KAAK,EAAI2Q,OAAY6W,EAAYxnB,KAAM,EAQnHwpB,GAA4BC,GAAqB,CACrD,IAAIC,EAASD,GAAAA,KAAAA,EAAS,CAAA,EACtB,MAAME,EAASA,CAAChH,GAAc/L,KAAkB,CAC1C,CAAC+L,IAAQ+G,EAAOrT,KAAMhE,IAAMA,GAAEmW,EAAI,KAAO7F,EAAI,IACjD+G,EAAS,CAAC,CAAElB,EAAG7F,GAAMrW,EAAGsK,IAAS+L,GAAMlX,EAAG,IAAiB,GAAGie,CAAM,EACtE,EACME,EAAKpC,EAAYxnB,MACvB,OAAI+S,MAAMxR,QAAQqoB,CAAE,EAAGA,EAAGzf,QAAS7E,IAASqkB,EAAOZ,EAAczjB,EAAI,EAAG4jB,EAAe5jB,EAAI,GAAKyjB,EAAczjB,EAAI,CAAC,CAAC,EAC3GskB,GAAM,CAACT,GAAmBS,CAAE,GAAGD,EAAOZ,EAAca,CAAE,EAAGV,EAAeU,CAAE,GAAKb,EAAca,CAAE,CAAC,EAClGF,CACT,EAEMG,GAAqBC,GAAgB,CACzCnV,EAAQ3U,MAAM+pB,KAAKD,CAAE,EACjB3C,EAAOnnB,OAAOynB,GAAcznB,MAAM+pB,KAAK7f,GAAA,GAAK4f,EAAI,CACtD,EAOME,GAAmB,IAAY/mB,GAAA,4BACnC,GAAKtD,EAAM8mB,QACN,CACH,IAAIvgB,EAAiB,CAAA,EACrB,MAAM+jB,EAAMtqB,EAAM8mB,QAAQmB,YAAW,EACrC,GAAIqC,EAAIzc,WAAW,IAAI,EAIrBgF,OADYyX,EAAI7X,MAAM,GAAG,EAAE,CAAC,EAAEA,MAAM,GAAG,EACnCjI,QAASkI,IAAM,CACjB,MAAM6X,GAAc,CAClB1B,EAAG,GACHlc,EAAG,GACHb,EAAG,IAEC0e,GAAO9X,GAAED,MAAM,GAAG,EACxB8X,GAAG,EAAOC,GAAK,CAAC,EAChBD,GAAG,EAAOC,GAAK,CAAC,EAChBD,GAAG,EAAO,GACVhkB,EAAI6jB,KAAKG,EAAE,CACb,CAAC,EACMhkB,EACF,CACL,MAAMkkB,GAAYrD,EAAAA,EAAUqD,YAAVrD,YAAAA,EAAsBkD,GACxC,GAAItqB,EAAMsT,aAAetC,QAAayZ,EAAWlkB,EAAMkkB,UAC9CzqB,EAAM8mB,UAAY,OAAQ,CAEjC,MAAM4D,GAAOve,EAASwe,gBACtB,GAAID,GAAM,CACR,GAAI1qB,EAAMsT,aAAetC,OAAW,CAClC,MAAM4Z,GAAQ,CAAA,EACdA,GAAM,IAAS,OACfA,GAAM,KAAUF,GAChBtD,EAAUyD,aAAaD,EAAyC,CAClE,CACArkB,EAAMmkB,EACR,CACF,KAAO,CACL,MAAMA,GAAOve,EAAS2e,QAAQR,CAAG,EAEjC,GAAII,GAAM,CAER,GAAI1qB,EAAMsT,aAAetC,OAAW,CAClC,MAAM4Z,GAAQ,CAAA,EACdA,GAAM,IAASN,EACfM,GAAM,KAAUF,GAChBtD,EAAUyD,aAAaD,EAAyC,CAClE,CAEArkB,EAAMmkB,EACR,CACF,CAKA,IAAI/B,GAAOpiB,EACX,GAAIvG,EAAMsT,WAAY,CACpB,MAAM9O,GAAM,IAAIumB,OAAO/qB,EAAMsT,WAAY,GAAG,EAC5CqV,GAAOpiB,EAAI8D,OAAQqI,IAAMlO,GAAIwmB,KAAKtY,GAAEmW,CAAC,CAAC,CACxC,CACA,OAAOF,EACT,CACF,KA9DoB,QAAO,IA+D7B,GAaMsC,GAAgB5qB,GAAU,CAC1BA,EACFgqB,KAAmBlW,KAAM2V,GAAqB,CAC5C9U,EAAQ3U,MAAQypB,EAAMzf,OAAQ1E,GAAS,OAErC,GACEA,EAAKkjB,EAAElW,QAAQtS,CAAK,IAAM,MAC1BsF,EAAAA,EAAKgH,IAALhH,YAAAA,EAAQgN,QAAQtS,MAAW,IAC3BsF,EAAKmG,EAAE6G,QAAQtS,EAAM4nB,YAAW,CAAE,IAAM,GAExC,MAAO,EACX,CAAC,CACH,CAAC,EAEDoC,KAAmBlW,KAAM2V,GAAqB,CAC5C9U,EAAQ3U,MAAQypB,CAClB,CAAC,CACL,EAMM/D,GAAcA,IAAM,CACpByB,EAAOnnB,QAAU,GACnBgqB,GAAgB,EAAGlW,KAAM2V,GAAqB,CAC5C9U,EAAQ3U,MAAQypB,CAClB,CAAC,EACE9U,EAAQ3U,MAAQwpB,GAAyB/B,GAAcznB,KAAK,EAEjEL,EAAMgnB,MAAMa,EAAYxnB,MAAOL,EAAMC,KAAMD,EAAM8mB,OAAO,EACxD1Y,EAAK,OAAO,CACd,EAOM8c,GAAsBre,EAAAA,IAAI,EAAK,EACrC,IAAIse,GAAoC,KACpCC,GAA6C,KAC7CC,GAAmB,EAEvB,MAAMC,GAAuBlV,GAC3B0R,GAAcznB,MAAMgK,OAAQqI,GACtBA,GAAAA,EAAE/F,GACM+F,EAAE/F,EAAE8F,MAAM,GAAG,EACjB,CAAC,EAAEE,QAAQyD,CAAK,IAAM,IAE1B1D,EAAEmW,GAAKnW,EAAEmW,EAAElW,QAAQyD,CAAK,IAAM,GAEnC,EAEGmV,GAAmB,CAAOnV,EAAQ,KAAsB9S,GAAA,sBAC5D,GAAI8nB,IAAwBD,KAAuB/U,EAAO,OAAOgV,GAEjE,MAAMI,EAAa,EAAEH,GACrBF,OAAAA,GAAqB/U,EAErBgV,GAAoC9nB,GAAA,sBAClC4N,EAAQ7Q,MAAQ,GAChB,GAAI,CACF,MAAMorB,EAAWzrB,EAAM8mB,QAAQ4E,UAAU,CAAC,EACpC,CAAEC,MAAAA,CAAM,EAAI,MAAM3rB,EAAM+mB,UAAU0E,EAAUrV,EAAOpW,EAAMknB,OAAO,EACtE,GAAIsE,IAAeH,GAAkB,OAErC,MAAMO,GAAiB,CAAA,EACvB,GAAI,CACFC,KAAKC,MAAMH,CAAK,EAAEnhB,QAASkI,IAAW,CACpCkZ,GAAIxB,KAAK,CAAEvB,EAAGnW,GAAEmW,EAAGlc,EAAG+F,GAAE/F,EAAGb,EAAG,EAAG,CAAY,CAC/C,CAAC,CACH,OAAS7I,GAAG,CACV8oB,QAAQC,IAAI/oB,EAAC,CACf,CAEA+R,EAAQ3U,MAAQwpB,GAAyB+B,EAAG,EAC5C9D,GAAcznB,MAAQ,CAAC,GAAG2U,EAAQ3U,KAAK,EACvC6qB,GAAoB7qB,MAAQ,EAC9B,QAAA,CACMmrB,IAAeH,KACjBna,EAAQ7Q,MAAQ,GAChBonB,EAAYpnB,MAAQ2U,EAAQ3U,MAAMuS,SAAW,EAAIjG,EAAE,eAAe,EAAIA,EAAE,gBAAgB,GAEtFwe,KAAuB/U,IACzB+U,GAAqB,KACrBC,GAAuB,KAE3B,CACF,GAEOA,EACT,GAMMa,GAAe,CAAO7V,EAAQ,KAAsB9S,GAAA,sBACxD,MAAM4oB,EAAI/rB,OAAOiW,GAAAA,KAAAA,EAAS,EAAE,EAE5B,GAAI8V,GAAKpE,GAAcznB,MAAMuS,OAAS,GAAK5S,EAAMinB,WAAa,GAAO,CACnE,MAAMkF,EAAWb,GAAoBY,CAAC,EACtC,GAAIC,EAASvZ,OAAS,EAAG,CACvBoC,EAAQ3U,MAAQwpB,GAAyBsC,CAAQ,EACjDjb,EAAQ7Q,MAAQ,GAChB,MACF,CACF,CAGA,GAAI,EADc6rB,IAAM,IAAMlsB,EAAMinB,UAAY,CAACiE,GAAoB7qB,OAASynB,GAAcznB,MAAMuS,SAAW,GAC7F,CACdoC,EAAQ3U,MAAQwpB,GAAyB/B,GAAcznB,KAAK,EAC5D6Q,EAAQ7Q,MAAQ,GAChB,MACF,CAEA,MAAMkrB,GAAiBW,CAAC,CAC1B,GAEME,GAAsBA,CAACpJ,EAAcnS,IAAiB,CAC1D,GAAI,CAACmS,EAAM,OACX,MAAMqJ,EAAUrX,EAAQ3U,MAAMuoB,KAAMlW,GAAMvS,OAAOuS,EAAEmW,CAAC,IAAM1oB,OAAO6iB,CAAI,CAAC,EACtE,GAAIqJ,EAAS,CACPxb,GAAQwb,EAAQ1f,IAAMkE,IAAMwb,EAAQ1f,EAAIkE,GAC5C,MACF,CACAqZ,GAAkB,CAAErB,EAAG7F,EAAMrW,EAAGkE,GAAQmS,EAAMlX,EAAG,EAAG,CAAY,CAClE,EAEMwgB,GAAsB,CAAOtJ,EAAc5S,IAAmC9M,GAAA,6BAClF,GAAI8M,GAAQA,IAAS4S,EAAM,OAAO5S,EAClC,MAAMmc,GAAanrB,GAAA,MAAMipB,GAAgB,IAAtB,KAAAjpB,GAA6B,CAAA,EAChD,IAAI6V,EAAQyR,GAAmB1F,EAAMuJ,CAAS,EAI9C,OAHItV,IAEJA,EAAQyR,GAAmB1F,EAAMhO,EAAQ3U,KAAK,EAC1C4W,GAAcA,GAEduQ,EAAOnnB,MAQJ4W,GAAS+L,EAClB,GAEMwJ,GAA0B/C,GAAiBnmB,GAAA,gCAC/C,GAAIkmB,GAAmBC,CAAG,EAAG,CAC3B9T,EAAWtV,MAAQ2Q,OACnB6W,EAAYxnB,MAAQ2Q,OACpB2Y,GAAiB,EACjB,MACF,CAGA,GAFAhU,EAAWtV,MAAQopB,EAEfrW,MAAMxR,QAAQ6nB,CAAG,EAAG,CACtB,MAAMgD,GAAgD,CAAA,EACtD,QAASpZ,GAAQ,EAAGA,GAAQoW,EAAI7W,OAAQS,KAAS,CAC/C,MAAM1N,GAAO8jB,EAAIpW,EAAK,EACtB,GAAI1N,KAAS,GAAI,SACjB,MAAMqd,GAAOoG,EAAczjB,EAAI,EAC/B,IAAIyK,GAAOmZ,EAAe5jB,EAAI,EAC9B,GAAI0iB,EAAajY,EAAI,GAAKA,KAAS4S,GAAM,CACvC,MAAM0J,GAAUtZ,MAAMxR,QAAQ5B,EAAMuT,SAAS,EAAIvT,EAAMuT,UAAUF,EAAK,EAAIrC,OACtE0b,IAAWA,KAAY1J,KAAM5S,GAAOjQ,OAAOusB,EAAO,EACxD,CACA,MAAM7b,GAAO,MAAMyb,GAAoBtJ,GAAMqF,EAAajY,EAAI,GAAKA,KAAS4S,GAAOhS,OAAYZ,EAAI,EAC7F2Y,GAAM,OAAOpjB,IAAS,UAAYA,KAAS,KAASA,GAAiCojB,IAAkC/X,OAC7Hyb,GAASrC,KAAKtB,GAAe9F,GAAMnS,GAAMkY,EAAG,CAAC,EAC7CqD,GAAoBpJ,GAAMnS,EAAI,CAChC,CACAgX,EAAYxnB,MAAQosB,GACpB,MACF,CAEA,MAAMzJ,EAAOoG,EAAcK,CAAG,EAC9B,IAAIrZ,EAAO,GACX,GAAI,OAAOqZ,GAAQ,UAAYA,IAAQ,KAAM,CAC3C,MAAMJ,GAAII,EACVrZ,EAAOjQ,QAAOkpB,IAAAA,GAAAA,GAAEpS,QAAFoS,KAAAA,GAAWA,GAAExiB,IAAbwiB,KAAAA,GAAkB,EAAE,CACpC,MAAW,OAAOrpB,EAAMuT,WAAc,WAAUnD,EAAOpQ,EAAMuT,WAC7D,MAAM1C,EAAO,MAAMyb,GAAoBtJ,EAAMqF,EAAajY,CAAI,GAAKA,IAAS4S,EAAOhS,OAAYZ,CAAI,EAC7F2Y,GAAM,OAAOU,GAAQ,UAAYA,IAAQ,KAASA,EAAgCV,IAAkC/X,OAC1H6W,EAAYxnB,MAAQyoB,GAAe9F,EAAMnS,EAAMkY,EAAG,EAClDqD,GAAoBpJ,EAAMnS,CAAI,CAChC,GAEAjD,EAAAA,MACE8Z,EACC9I,GAAa,CACP4N,GAAiB5N,CAAQ,CAChC,EACA,CAAE+N,KAAM,GAAM5nB,UAAW,EAAK,CAChC,EAEA6I,EAAAA,MACE,IAAM5N,EAAMuT,UACXyC,GAAW,OACV2R,EAAetnB,MAAQ2V,EAClBwT,GAAmB7T,EAAWtV,KAAK,GAAQmsB,IAAiB9E,EAAAA,EAAcrnB,QAAdqnB,KAAAA,EAAuB/R,EAAWtV,KAAK,CAC1G,CACF,EAQA,MAAMmb,GAAehN,GAAsB,CACrCgZ,EAAOnnB,QAAU,IACnBgqB,GAAgB,EAAGlW,KAAM2V,GAAqB,CAC5C,GAAItC,EAAOnnB,QAAU,KACQypB,GAAU,MAAQA,EAAMlX,SAAW,GAC5DpD,OAAAA,EAAM,gCAAiC,SAAS,EACzC,GAEXwF,EAAQ3U,MAAQypB,CAClB,CAAC,EACH1b,EAAK,QAASI,CAAK,CACrB,EAQMoe,GAAsBA,IAAM,CAChC,EAGI1W,GAAaA,IAAM,CAOvB,EASI2W,GAAsBna,GAAe,CACzC,IAAI/F,EAAI+F,EAAE/F,EACV,OAAQiD,EAAI,CACV,IAAK,QACHjD,EAAI+F,EAAE/F,EACN,MACF,IAAK,KACHA,EAAI+F,EAAEzP,EACN,MACF,IAAK,KACH0J,EAAI+F,EAAE6V,GACN,MACF,IAAK,KACH5b,EAAI+F,EAAE8V,GACN,MACF,QACE7b,EAAI+F,EAAE/F,EACN,KACJ,CACA,OAAKA,IAAGA,EAAI+F,EAAE/F,GACd5L,EAAAA,YAAA+rB,EAAAA,SAAA,CAAA,IAESpa,EAAEmW,EAAI,GAAE,MACNlc,EAAC,MACDmc,GAAepW,EAAEmW,EAAI,GAAIlc,GAAAA,KAAAA,EAAK,EAAE,CAAC,EAAA,CAAAvM,QAAAA,IAAA,CAAAW,EAAAA,YAAA,OAAA,CAAA,MAAA,4BAAA,CACA4L,CAAC,GAAA5L,EAAAA,YAAA,OAAA,CAAA,MAAA,4BAAA,CACD2R,EAAEmW,CAAC,CAAA,CAAA,CAAA,CAAA,CAGjD,EAQMkE,GAAqBra,GAAe,CACxC,MAAM/F,EAAI+F,EAAE/F,EACZ,IAAInL,EAAMmL,EACV,MAAMqgB,EAAwB,CAAA,EACxBjE,GAA8B,CAAA,EACpC,IAAIkE,GAAc,GAClB,GAAItgB,EAAG,CACL,GAAIA,EAAEgG,QAAQ,GAAG,IAAM,GAAI,CAEzBsa,GAAc,GACd,MAAMC,GAAKvgB,EAAE8F,MAAM,GAAG,EACtBjR,EAAM0rB,GAAG,CAAC,EACV,IAAIC,GAAKD,GAAG,CAAC,EACbC,GAAKA,GAAG1a,MAAM,GAAG,EAAE,CAAC,EACpB,MAAM2a,GAAKD,GAAG1a,MAAM,GAAG,EACvB,QAAS7P,GAAI,EAAGA,GAAIwqB,GAAGxa,OAAQhQ,KAAK,CAElC,MAAMyqB,GADKD,GAAGxqB,EAAC,EACD6P,MAAM,GAAG,EACvBsW,GAAIsE,GAAG,CAAC,CAAC,EAAIA,GAAG,CAAC,EACjBL,EAAY5C,KAAKiD,GAAG,CAAC,IAAM,OAAS,OAASA,GAAG,CAAC,CAAC,CACpD,CACF,CACA,GAAI1gB,EAAEgG,QAAQ,GAAG,IAAM,GAAI,CAEzB,MAAM2a,GAAM3gB,EAAE8F,MAAM,GAAG,EACnBwa,KAAgB,KAAOzrB,EAAM8rB,GAAI,CAAC,GACtC,IAAIC,GAAMD,GAAI,CAAC,EACfC,GAAMA,GAAI9a,MAAM,GAAG,EAAE,CAAC,EACtB,MAAM+a,GAAMD,GAAI9a,MAAM,GAAG,EACzB,QAAS7P,GAAI,EAAGA,GAAI4qB,GAAI5a,OAAQhQ,KAAK,CAEnC,MAAM6qB,GADMD,GAAI5qB,EAAC,EACD6P,MAAM,GAAG,EACzBsW,GAAI0E,GAAI,CAAC,CAAC,EAAIA,GAAI,CAAC,CACrB,CACF,CACF,CACA,IAAI1qB,GAAM2P,EAAEmW,EAAI,GAChB,OAAI7oB,EAAMuV,WAAa,KAAMxS,GAAM2P,EAAElR,MAAQwP,OAAY0B,EAAEmW,EAAI,GAAK1oB,OAAOuS,EAAElR,GAAG,GAChFT,EAAAA,YAAA+rB,EAAAA,SAAA,CAAA,IAES/pB,GAAG,MACDvB,EAAG,MACHsnB,GAAepW,EAAEmW,EAAI,GAAIrnB,GAAAA,KAAAA,EAAO,GAAIunB,EAAG,CAAC,EAAA,CAAA3oB,QAAAA,IAAA,CAAAW,EAAAA,YAAA,OAAA,CAAA,MAAA,4BAAA,CACPS,CAAG,GAAAT,EAAAA,YAAA,OAAA,CAAA,MAAA,0BAAA,EAAA,CACH2R,EAAEmW,CAAC,CAAA,EAC1CmE,EAAYzf,IAAI,CAACsD,GAAMwC,KAAKtS,EAAAA,YAAA,OAAA,CAAA,IAEpBsS,GAAK,MAAA,6BAAA,CAETxC,EAAI,EAER,CAAC,CAAA,CAAA,CAGR,EAQMoF,EAAsBzU,GAAa8B,GAAA,kCACvC,GAAIkmB,GAAmBhoB,CAAG,EAAG,OAC7B,IAAI6U,EAAiB,GACrB,MAAMqX,EAAqB,CAAA,EACvB1tB,EAAMuV,WAAa,GACrBP,EAAQ3U,MAAMmK,QAASkI,IAAM,QACvBU,MAAMxR,QAAQJ,CAAG,GAAKA,EAAIkV,KAAMtS,IAAQA,KAAQsO,GAAEmW,CAAC,GAAG6E,EAAStD,MAAK1X,GAAAA,GAAE/F,IAAF+F,KAAAA,GAAO,EAAE,CACnF,CAAC,EACM,OAAOlR,GAAQ,SAAU6U,GAAS7U,EAAAA,EAAIyV,QAAJzV,KAAAA,EAAa,IAMtD6U,GAASsX,IAAAA,GAJK3Y,EAAQ3U,MAAMgK,OAAQqI,IAAM,CACxC,MAAM7L,GAAIrF,EAAM,GAChB,OAAOkR,GAAEmW,EAAI,KAAOhiB,EACtB,CAAC,EACc,CAAC,IAAP8mB,YAAAA,GAAUhhB,IAAVghB,KAAAA,GAAe,GACpBtX,IAAQA,EAASA,EAAO5D,MAAM,GAAG,EAAE,CAAC,IAEtCzS,EAAMsR,UAAY,YAChBtR,EAAMuV,WAAa,IACrBnH,EAAK,SAAU5M,EAAKksB,EAAU1tB,EAAMslB,UAAU,EAC9C,MAAMtlB,EAAMwR,GAAGhQ,EAAKxB,EAAMslB,WAAYtlB,EAAM8mB,QAAS4G,EAAU1tB,EAAMknB,OAAO,IAE5E9Y,EAAK,SAAU5M,EAAK6U,EAAQrW,EAAMslB,UAAU,EAC5C,MAAMtlB,EAAMwR,GAAGhQ,EAAKxB,EAAMslB,WAAYtlB,EAAM8mB,QAASzQ,EAAQrW,EAAMknB,OAAO,GAErElnB,EAAMuV,WAAa,IAC1BnH,EAAK,SAAU5M,EAAKksB,CAAQ,EAC5B,MAAM1tB,EAAMwR,GAAGhQ,EAAKxB,EAAMC,KAAMD,EAAM8mB,OAAO,IAE7C1Y,EAAK,SAAU5M,EAAK6U,CAAM,EAC1B,MAAMrW,EAAMwR,GAAGhQ,EAAKxB,EAAMC,KAAMD,EAAM8mB,OAAO,EAEjD,GAOMzP,EAAgBhX,GAAqB,CACzC,GAAImpB,GAAmBnpB,CAAK,EAAG,CAC7BsV,EAAWtV,MAAQ2Q,OACnB6W,EAAYxnB,MAAQ2Q,OACpB5C,EAAK,oBAAqB,EAAE,EAC5B,MACF,CACAuH,EAAWtV,MAAQA,EACnBwnB,EAAYxnB,MAAQA,EACpB+N,EAAK,oBAAqB/N,CAAK,CACjC,EAEA,OAAIL,EAAM8mB,UAAY9V,QAAahR,EAAM8mB,UAAY,OAAMtX,EAAM,KAAKxP,EAAMiX,KAAK,mCAAoC,SAAS,EAGvH,IAEHuQ,EAAOnnB,QAAU,gDAGT0V,EAAgB1V,MAAK,KACnBL,EAAMD,KAAI,WACJ6pB,EAAcvpB,MAAK,SAAA,QAAA,sBAEVgX,EAAY,MAC1B,CAAE/C,QAAStU,EAAM4Q,QAAU,GAAK,QAAQ,YAClC+U,EAAatlB,MAAK,SACrBL,EAAMwN,SAAQ,UACbxN,EAAMkV,UAAS,KACpBkT,EAAW/nB,MAAK,SACZL,EAAMuV,SAAQ,WACZqS,EAAgBvnB,MAAK,gBAClB4qB,GAAY,uBACL,GAAI,aACZjrB,EAAMmnB,aAAY,QACvBpB,GAAW,QACXvK,GAAW,mBACFoR,GAAmB,SAC3B3W,EAAY,MACf8R,EAAU1nB,KAAK,EAAA,CAEpB8lB,OAAQA,IAAAplB,EAAAA,YAAA,IAAA,CAAA,MAAgBwmB,GAAO,IAAA,EAC/BnnB,QAASA,IAAM4U,EAAQ3U,MAAMkN,IAAKmF,GAAMma,GAAmBna,CAAC,CAAC,EAAC,EAAA3R,EAAAA,YAAA6sB,WAAA,CAAA,IAAA,YAAA,GAM5D7X,EAAgB1V,MAAK,KACnBL,EAAMD,KAAI,WACJ6pB,EAAcvpB,MAAK,SAAA,QAAA,sBAEVgX,EAAY,MAC1B,CAAE/C,QAAStU,EAAM4Q,QAAU,GAAK,QAAQ,YAClC+U,EAAatlB,MAAK,SACrBL,EAAMwN,SAAQ,UACbxN,EAAMkV,UAAS,KACpBkT,EAAW/nB,MAAK,SACZL,EAAMuV,SAAQ,uBACF,GAAI,WACdqS,EAAgBvnB,MAAK,OACzB,GAAI,gBACG4rB,GAAY,SACjB,IAAG,QACJ/a,EAAQ7Q,MAAK,eACRonB,EAAYpnB,MAAK,aACjBL,EAAMmnB,aAAY,QACvBpB,GAAW,QACXvK,GAAW,OACZtF,GAAU,SACRD,EAAY,MACf8R,EAAU1nB,KAAK,EAAA,CAEpB8lB,OAAQA,IAAAplB,EAAAA,YAAA,IAAA,CAAA,MAAgBwmB,GAAO,IAAA,EAC/BnnB,QAASA,IAAM4U,EAAQ3U,MAAMkN,IAAKmF,GAAMqa,GAAkBra,CAAC,CAAC,EAAC,CAMzE,CACF,CAAC,qCCpzBGmb,GAAiB,CACrB,QAAQjuB,EAAgB,OACtBA,EAAI,WAAUwB,EAAA0sB,GAAS,OAAT,KAAA1sB,EAAiB,WAAY0sB,EAAQ,CACrD,CACF,ECUQ,CAAE1uB,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,QAAQ,0BACR,CAC7BW,KAAM,WACNC,MAAO,CACLK,MAAO,CACLH,KAAM,CAACO,QAASH,OAAQH,MAAM,EAC9BiR,SAAU,GACVhR,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACN2Q,SAAU,GACVhR,QAAS4Q,QAEX+c,UAAW,CACT7tB,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEX2P,OAAQ,CACNzgB,KAAM,CAACI,OAAQH,MAAM,EACrB6tB,QAAS,GACT5tB,QAAS,QACX,GAIF+N,MAAO,CAAC,QAAQ,EAChBtN,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,CAErB,MAAM5M,EAAMqL,EAAAA,IAAI7M,EAAMK,KAAK,EACrB4tB,EAAaphB,EAAAA,IAAI,EAAI,EAG3Be,EAAAA,MACE,IAAM5N,EAAMK,MACX2V,GAAW,CACVxU,EAAInB,MAAQ2V,EACZiY,EAAW5tB,MAAQmB,EAAInB,QAAUL,EAAM2gB,MACzC,CACF,EACA/S,EAAAA,MACE,IAAMqgB,EAAW5tB,MAChB2V,GAAW,CACVxU,EAAInB,KACN,CACF,EAGA,MAAM4V,EAAgBiY,GAAc,CAClC9f,EAAK,SAAU8f,EAAW1sB,EAAInB,KAAK,CACrC,EAGA4tB,OAAAA,EAAW5tB,MAAQmB,EAAInB,QAAUL,EAAM2gB,OAGhC,IAAA5f,EAAAA,YAAAotB,WAAA,CAAA,IAAA,YAAA,WAGMF,EAAW5tB,MAAK,sBAAAuW,GAAhBqX,EAAW5tB,MAAKuW,EAAA,IACpB5W,EAAM+tB,UAAS,SACV/tB,EAAMwN,SAAQ,SAGdyI,EAAY,MACf1W,IAAS,IAAA,CAGtB,CACF,CAAC,qCCrFG6uB,GAAiB,CACrB,QAAQxuB,EAAgB,OACtBA,EAAI,WAAUwB,EAAAitB,GAAS,OAAT,KAAAjtB,EAAiB,WAAYitB,EAAQ,CACrD,CACF,ECaQ,CAAEjvB,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,YAAY,EACrCkvB,GAAaC,EAAAA,qCAEY,CAC7BxuB,KAAM,eACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXL,KAAM,CACJG,KAAMC,OACNC,QAAS4Q,QAEXvH,GAAI,CACFvJ,KAAMC,OACNC,QAAS4Q,QAEXiJ,WAAY,CACV/Z,KAAM,CAACga,KAAM9G,MAAOjT,MAAM,EAC1BC,QAAS4Q,QAEXqU,SAAU,CACRnlB,KAAMO,QACNL,QAAS,IAEXoN,SAAU,CACRtN,KAAMO,QACNL,QAAS,IAEX2Q,KAAM,CACJ7Q,KAAMC,OACNC,QAAS,WAEXouB,QAAS,CACPtuB,KAAMO,QACNL,QAAS,IAEXquB,cAAe,CACbvuB,KAAMkT,MACNhT,QAASA,IAAM,CAAA,GAEjBsuB,gBAAiB,CACfxuB,KAAMkT,MACNhT,QAASA,IAAM,CAAA,GAEjBuuB,gBAAiB,CACfzuB,KAAMkT,MACNhT,QAASA,IAAM,CAAA,GAEjBka,eAAgB,CACdpa,KAAMC,OACNC,QAAS,KAEX+Z,OAAQ,CACNja,KAAMC,OACNC,QAAS,SAEXga,YAAa,CACXla,KAAMC,OACNC,QAAS,SAEX6U,YAAa,CACX/U,KAAMC,OACNC,QAAS,SAEXma,iBAAkB,CAChBra,KAAMC,OACNC,QAAS,IAEXoa,eAAgB,CACdta,KAAMC,OACNC,QAAS,IAEXua,SAAU,CACRza,KAAMO,QACNL,QAAS,IAEX8U,UAAW,CACThV,KAAMO,QACNL,QAAS,EACX,GAGF+N,MAAO,CAAC,oBAAqB,SAAU,OAAQ,OAAO,EAEtDtN,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,CAErB,KAAM,CAAEzB,EAAAA,GAAMzN,GAAa,EACrByS,EAAaC,EAAAA,gBAAgB,MAAM,EACnC+D,EAAa9I,EAAAA,IAAqB7M,EAAMia,UAAU,EAClD2U,EAAiB5mB,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAGnH/D,EAAAA,MACE,IAAM5N,EAAMia,WACXjE,GAAW,CACVL,EAAWtV,MAAQ2V,CACrB,CACF,EASA,MAAMqB,EAAgBhX,GAA2B,CAC/CsV,EAAWtV,MAAQA,EACnB+N,EAAK,oBAAqB/N,CAAK,CACjC,EAOMwuB,EAAsBA,IAAM7uB,EAAMyuB,cAOlCK,EAAwBA,IAAM9uB,EAAM0uB,gBAOpCK,EAAwBA,IAAM/uB,EAAM2uB,gBAOpC1Y,EAAgB5V,GAA2B,CAC/C+N,EAAK,SAAU/N,CAAK,CACtB,EAOM6V,EAAcjT,GAAkB,CACpCmL,EAAK,OAAQnL,CAAC,CAChB,EAOMuY,EAAevY,GAAkB,CACrCmL,EAAK,QAASnL,CAAC,CACjB,EAEM8S,EAAkB/N,EAAAA,SAAS,IAAA,SAAOhI,QAAAA,GAAAA,EAAAA,EAAMyJ,KAANzJ,KAAAA,EAAYA,EAAMD,OAAlBC,KAAAA,EAA0BA,EAAMC,OAAS+Q,OAAS,EAG1F,MAAO,IAAAjQ,EAAAA,YAAAutB,GAAA,CAAA,IAEEtuB,EAAMC,MAAQ,gBAAe,GAC9B8V,EAAgB1V,MAAK,WACbsV,EAAWtV,MAAK,sBACPgX,EAAY,KAC3BrX,EAAMD,KAAI,SACNC,EAAMqlB,SAAQ,SACdrlB,EAAMwN,SAAQ,SACdxN,EAAM2a,SAAQ,UACb3a,EAAMkV,UAAS,WAChBlV,EAAMwuB,QAAO,kBACNxuB,EAAMsa,eAAc,KAC/BsU,EAAevuB,MAAK,YACbL,EAAMiV,aAAetI,EAAE,mBAAmB,EAAC,oBACrC3M,EAAMua,kBAAoB5N,EAAE,kBAAkB,EAAC,kBACjD3M,EAAMwa,gBAAkB7N,EAAE,gBAAgB,EAAC,OACpD3M,EAAMma,OAAM,eACNna,EAAMoa,YAAW,MACxB7a,GAAS,iBACAsvB,EAAmB,mBACjBC,EAAqB,mBACrBC,EAAqB,SAC7B9Y,EAAY,OACdC,EAAU,QACTsF,GAAW,IAAA,CAG1B,CACF,CAAC,qCCnNGwT,GAAqB,CACzB,QAAQpvB,EAAgB,OACtBA,EAAI,WAAUwB,EAAA6tB,GAAa,OAAb,KAAA7tB,EAAqB,eAAgB6tB,EAAY,CACjE,CACF,ECKMC,GAAU,CACd,MAAQtf,GAAiB,CACvB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,UACxBA,EAAO,2BACLA,CACT,EACA,OAASvf,GAAiB,CACxB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,UACxBA,EAAO,uBACLA,CACT,EACA,QAAS,CAACvf,EAAcvJ,IAAgB,CACtC,IAAI8oB,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,cAAgB9oB,EAAM,KAC9C8oB,EAAO,iDAAmD9oB,EAAM,IAC9D8oB,CACT,EACA,OAASvf,GAAiB,CACxB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,WACxBA,EAAO,iCACLA,CACT,EACA,OAAQ,CAACvf,EAAcvJ,IAAgB,CACrC,IAAI8oB,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,QAAU,KAAK,MAAM9oB,EAAM,CAAC,EAAI,QAAUA,EAAM,OACxE8oB,EAAO,kBAAoB9oB,EAAM,cAC/B8oB,CACT,EACA,MAAQvf,GAAiB,CACvB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,kBACxBA,EAAO,kEACLA,CACT,EACA,SAAU,CAACvf,EAAcvJ,IAAgB,CACvC,IAAI8oB,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,aAAe9oB,EAAM,OACtC,uCAAyCA,EAC9C8oB,CACT,EACA,OAASvf,GAAiB,CACxB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,cACxBA,EAAO,iDACLA,CACT,EACA,OAASvf,GAAiB,CACxB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,WACxBA,EAAO,iCACLA,CACT,EACA,QAAUvf,GAAiB,CACzB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,kBACxBA,EAAO,sEACLA,CACT,EAEA,aAAevf,GAAiB,CAC9B,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,kBACxBA,EAAO,6CACLA,CACT,EAEA,KAAOvf,GAAiB,CACtB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,yBACxBA,EAAO,+DACLA,CACT,EACA,MAAQvf,GAAiB,CACvB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,aACxBA,EAAO,+BACLA,CACT,EACA,MAAQvf,GAAiB,CACvB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,WACxBA,EAAO,gCACLA,CACT,EACA,UAAYvf,GAAiB,CAC3B,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,kCACxBA,EAAO,mCACLA,CACT,EACA,GAAKvf,GAAiB,CACpB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,aACxBA,EAAO,mCACLA,CACT,EACA,IAAMvf,GAAiB,CACrB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,cACxBA,EAAO,6BACLA,CACT,EACA,SAAWvf,GAAiB,CAC1B,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,mBACxBA,EAAO,qCACLA,CACT,EACA,IAAMvf,GAAiB,CACrB,IAAIuf,EAAO,GACX,OAAIvf,IAAS,QAASuf,EAAO,mBACxBA,EAAO,uCACLA,CACT,CACF,ECrFMC,GAAY,SAAU5tB,EAAK,CAC/B,GAAIA,IAAQ,MAAQA,EAAI,SAAW,EAAG,MAAO,GAC7C,IAAIoB,EAAGysB,EACPA,EAAM,EAEN,IAAIxoB,EAAIrF,EAER,IADI,MAAM,QAAQA,CAAG,IAAGqF,EAAIrF,EAAI,KAAK,GAAG,GACnCoB,EAAI,EAAGA,EAAIiE,EAAE,OAAQjE,IACpBiE,EAAE,WAAWjE,CAAC,GAAK,IAAMiE,EAAE,WAAWjE,CAAC,GAAK,IAAKysB,EAAMA,EAAM,IACtDA,EAAM,EACnB,OAAOA,CACT,EAEMC,GAAQ,CACZ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,MACJ,GAAI,KACJ,GAAI,KACJ,GAAI,MACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,IACN,EAEMC,GAAe,SAAU/tB,EAAKguB,EAAY,CAC9C,IAAI3oB,EAAIrF,EAAM,GACd,OAAIqF,GAAKA,EAAE,QAAQ,GAAG,EAAI,GACxBA,EAAIA,EAAE,OAAOA,EAAE,QAAQ,GAAG,EAAI,EAAGA,EAAE,MAAM,EACrCA,EAAE,QAAU2oB,GAEJ,EAChB,EAEMC,GAAgB,SAAUC,EAAM,CACpC,MAAMC,EAAWD,EAAK,OAAO,EAAG,CAAC,EACjC,OAAIJ,GAAMK,CAAQ,IAAM,MAG1B,EAGMC,GAAiB,SAAUC,EAAcvW,EAAewW,EAAaC,EAAgB,CAEzF,MAAMC,MADU,KAAA,EACK,YAAA,EAErB,GAAID,EAAS,YAAA,IAAkB,CAACF,GAAQE,EAAS,SAAA,EAAa,IAAM,CAACzW,GAASyW,EAAS,QAAA,IAAc,CAACD,EAAK,CAEzG,MAAMG,EAAOD,EAAW,OAAOH,CAAI,EACnC,OAAII,GAAQ,GAAKA,GAAQ,GAE3B,CACA,MAAO,EACT,EAGMC,GAAgB,SAAUR,EAAM,CACpC,MAAMrpB,EAAMqpB,EAAK,OAEjB,GAAIrpB,IAAQ,GAAI,CACd,MAAM8pB,EAAa,wCACbC,EAAWV,EAAK,MAAMS,CAAU,EAChCN,EAAOO,EAAS,CAAC,EACjB9W,EAAQ8W,EAAS,CAAC,EAClBN,EAAMM,EAAS,CAAC,EAChBL,MAAe,KAAK,KAAOF,EAAO,IAAMvW,EAAQ,IAAMwW,CAAG,EAC/D,OAAOF,GAAe,EAAO,KAAOC,GAAOvW,EAAOwW,EAAKC,CAAQ,CACjE,CAEA,GAAI1pB,IAAQ,GAAI,CACd,MAAMgqB,EAAc,iDACdD,EAAWV,EAAK,MAAMW,CAAW,EACjCR,EAAOO,EAAS,CAAC,EACjB9W,EAAQ8W,EAAS,CAAC,EAClBN,EAAMM,EAAS,CAAC,EAChBL,EAAW,IAAI,KAAKF,EAAO,IAAMvW,EAAQ,IAAMwW,CAAG,EACxD,OAAOF,GAAeC,EAAMvW,EAAOwW,EAAKC,CAAQ,CAClD,CACA,MAAO,EACT,EAEMO,GAA0B,SAAUZ,EAAM,CAC9C,GAAIA,EAAK,SAAW,GAAI,CACtB,MAAMa,EAAS,CAAC,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,CAAC,EAC7DC,EAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACpE,IAAIC,EAAW,EACX7tB,EAEJ,IADA8sB,EAAOA,EAAK,OAAO,EAAG,CAAC,EAAI,KAAOA,EAAK,OAAO,EAAGA,EAAK,OAAS,CAAC,EAC3D9sB,EAAI,EAAGA,EAAI,GAAIA,IAAK6tB,GAAYf,EAAK,OAAO9sB,EAAG,CAAC,EAAI2tB,EAAO3tB,CAAC,EAEjE,OAAA8sB,GAAQc,EAAMC,EAAW,EAAE,EACpBf,CACT,CACA,OAAOA,CACT,EAGMgB,GAAc,SAAUhB,EAAM,CAIlC,GAFAA,EAAOY,GAAwBZ,CAAI,EACvBA,EAAK,SACL,GAAI,CACd,MAAMa,EAAS,CAAC,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,CAAC,EAC7DC,EAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACpE,IAAIC,EAAW,EACXE,EAAS,GACb,QAAS/tB,EAAI,EAAGA,EAAI,GAAIA,IAAK6tB,GAAYf,EAAK,OAAO9sB,EAAG,CAAC,EAAI2tB,EAAO3tB,CAAC,EAGrE,OADA+tB,EAASH,EAAMC,EAAW,EAAE,EACxBE,IAAWjB,EAAK,OAAO,GAAI,CAAC,CAGlC,CACA,MAAO,EACT,EAEMkB,GAAa,CACjB,SAAU,CAACC,EAAMxwB,EAAOywB,IAAa,CACnC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,EAAU,IAAAxwB,EAAM,EAAA,EAAOswB,EACnBzB,GAAU/uB,CAAK,EACjBE,EAAKuwB,EAAS,IAAI,MAAM5B,GAAQ,OAAO6B,EAAUxwB,CAAG,CAAC,CAAC,EAC3DuwB,EAAA,CACP,CACF,EACA,SAAU,CAACD,EAAMxwB,EAAOywB,IAAa,CACnC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,MAAMtsB,EAAM,oBACN,CAAE,SAAAusB,EAAU,QAAAnqB,EAAU,CAAA,EAAMiqB,EAC7BrsB,EAAI,KAAKnE,CAAK,EACVkvB,GAAalvB,EAAOuG,CAAO,EAAGkqB,EAAA,EAClCA,EAAS,IAAI,MAAM5B,GAAQ,QAAQ6B,EAAUnqB,CAAO,CAAC,CAAC,EAFrCkqB,EAAS,IAAI,MAAM5B,GAAQ,OAAO6B,CAAQ,CAAC,CAAC,CAGpE,CACF,EACA,SAAU,CAACF,EAAMxwB,EAAOywB,IAAa,CACnC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EAET,2CACH,KAAKxwB,CAAK,EACVovB,GAAcpvB,CAAK,IAAM,GAEhCywB,EAAS,IAAI,MAAM5B,GAAQ,OAAO6B,CAAQ,CAAC,CAAC,EACrCb,GAAc7vB,CAAK,IAAM,GAEhCywB,EAAS,IAAI,MAAM5B,GAAQ,OAAO6B,CAAQ,CAAC,CAAC,EACrCL,GAAYrwB,CAAK,IAAM,GAE9BywB,EAAS,IAAI,MAAM5B,GAAQ,OAAO6B,CAAQ,CAAC,CAAC,EACzCD,EAAA,EAViBA,EAAS,IAAI,MAAM5B,GAAQ,OAAO6B,CAAQ,CAAC,CAAC,CAWpE,CACF,EAEA,QAAS,CAACF,EAAMxwB,EAAOywB,IAAa,CAClC,KAAM,CAAE,SAAAC,GAAaF,EACrB,GAAIxwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,YAAaywB,EAAA,EAAS,GACjEzwB,EAAM,SAAW,EAExB,GAAI,CADY,iFACH,KAAKA,CAAK,EAAGywB,EAAS,IAAI,MAAM5B,GAAQ,MAAM6B,CAAQ,CAAC,CAAC,cACzDD,EAAA,UAGR,CADa,4GACH,KAAKzwB,CAAK,EAAGywB,EAAS,IAAI,MAAM5B,GAAQ,MAAM6B,CAAQ,CAAC,CAAC,cAC1DD,EAAA,CAEhB,EAEA,QAAS,CAACD,EAAMxwB,EAAOywB,IAAa,CAClC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,YAAaywB,EAAA,EAC5D,CACH,KAAM,CAAE,SAAAC,EAAU,IAAAxwB,CAAA,EAAQswB,EAEpB7qB,EAAU,sCACVxE,EAAMnB,EAAQ,GAEpB,GAAI,CAAC2F,EAAQ,KAAKxE,CAAG,EAAGsvB,EAAS,IAAI,MAAM5B,GAAQ,MAAM6B,CAAQ,CAAC,CAAC,UAC1DvvB,EAAI,QAAQ,GAAG,EAAI,EAC1B,GAAIA,EAAI,MAAM,GAAG,EAAE,CAAC,EAAE,OAASjB,EAAM,EAEnCuwB,EAAS,IAAI,MAAM5B,GAAQ,SAAS6B,EAAUxwB,EAAM,CAAC,CAAC,CAAC,cAC7CuwB,EAAA,UACLzwB,EAAM,OAASE,EAAM,EAAGuwB,EAAS,IAAI,MAAM5B,GAAQ,SAAS6B,EAAUxwB,EAAM,CAAC,CAAC,CAAC,cAC5EuwB,EAAA,CACd,CACF,EAEA,WAAY,CAACD,EAAMxwB,EAAOywB,IAAa,CACrC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EAET,sDACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,MAAM6B,CAAQ,CAAC,CAAC,CAEnE,CACF,EAEA,SAAU,CAACF,EAAMxwB,EAAOywB,IAAa,CACnC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EACT,cACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,OAAO6B,CAAQ,CAAC,CAAC,CAEpE,CACF,EAEA,SAAU,CAACF,EAAMxwB,EAAOywB,IAAa,CACnC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EACT,mBACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,OAAO6B,CAAQ,CAAC,CAAC,CAEpE,CACF,EAEA,UAAW,CAACF,EAAMxwB,EAAOywB,IAAa,CACpC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EACT,mBACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,QAAQ6B,CAAQ,CAAC,CAAC,CAErE,CACF,EAEA,eAAgB,CAACF,EAAMxwB,EAAOywB,IAAa,CACzC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EACT,mEACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,aAAa6B,CAAQ,CAAC,CAAC,CAE1E,CACF,EAEA,OAAQ,CAACF,EAAMxwB,EAAOywB,IAAa,CACjC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EACT,uCACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,KAAK6B,CAAQ,CAAC,CAAC,CAElE,CACF,EAEA,QAAS,CAACF,EAAMxwB,EAAOywB,IAAa,CAClC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,UAE5C,2DACH,KAAKzwB,CAAK,EAGZywB,EAAA,MAHe,CACpB,KAAM,CAAE,SAAAC,EAAW,OAAA,EAAYF,EAC/BC,EAAS,IAAI,MAAM5B,GAAQ,MAAM6B,CAAQ,CAAC,CAAC,CAC7C,CAEJ,EAEA,QAAS,CAACF,EAAMxwB,EAAOywB,IAAa,CAElC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EAET,0JACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,MAAM6B,CAAQ,CAAC,CAAC,CAEnE,CACF,EAEA,YAAa,CAACF,EAAMxwB,EAAOywB,IAAa,CACtC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EACT,iBACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,UAAU6B,CAAQ,CAAC,CAAC,CAEvE,CACF,EAEA,WAAY,CAACF,EAAMxwB,EAAOywB,IAAa,CACrC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EACT,kFACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,SAAS6B,CAAQ,CAAC,CAAC,CAEtE,CACF,EAEA,KAAM,CAACF,EAAMxwB,EAAOywB,IAAa,CAC/B,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EACT,2IACH,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,GAAG6B,CAAQ,CAAC,CAAC,CAEhE,CACF,EAEA,MAAO,CAACF,EAAMxwB,EAAOywB,IAAa,CAChC,GAAIzwB,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,MACrD,CACH,KAAM,CAAE,SAAAC,GAAaF,EAEnB,8TACO,KAAKxwB,CAAK,EACdywB,EAAA,EADiBA,EAAS,IAAI,MAAM5B,GAAQ,IAAI6B,CAAQ,CAAC,CAAC,CAEjE,CACF,EAEA,MAAO,CAACF,EAAMxwB,EAAOywB,IAAa,CAChC,KAAM,CAAE,SAAAC,GAAaF,EACfrsB,EAAM,cACRnE,IAAU,IAAMA,IAAU,QAAaA,GAAS,KAAMywB,EAAA,EACjDzwB,EAAM,SAAW,GAAKA,EAAM,SAAW,GAAIywB,EAAS,IAAI,MAAM5B,GAAQ,IAAI6B,CAAQ,CAAC,CAAC,EACnFvsB,EAAI,KAAKnE,CAAK,EACnBywB,EAAA,EADsBA,EAAS,IAAI,MAAM5B,GAAQ,IAAI6B,CAAQ,CAAC,CAAC,CAEtE,CACF,EC5W6J,SAAAllB,GAAAC,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAC,OAAAC,UAAA1K,SAAA2K,KAAAH,CAAA,IAAA,mBAAA,CAAAI,EAAAA,QAAAJ,CAAA,CAAA,CAC3J,KAAM,CAAE1M,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,MAAM,0BAEN,CAC7BW,KAAM,SACNC,MAAO,CACLmR,QAAS,CACPjR,KAAMC,OACNiR,SAAU,IAEZ4f,QAAS,CACP9wB,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEXigB,UAAW,CACT/wB,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX+S,SAAU,CACRjT,KAAMkT,MACNhC,SAAU,GACVhR,QAASA,IAAM,CAAA,GAEjB2Q,KAAM,CACJ7Q,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEXkgB,WAAY,CACVhxB,KAAM,CAACI,OAAQH,MAAM,EACrBC,QAAS,KAEX+wB,UAAW,CAETjxB,KAAM,CAAC6L,MAAM,EACbqF,SAAU,GACVhR,QAASA,IAAM,CAAC,GAElBgxB,SAAU,CAERlxB,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,EACX,GAEFS,MAAMb,EAAO,CAAEc,MAAAA,EAAOuwB,OAAAA,CAAO,EAAG,iBAC9B,MAAMC,EAAwBzkB,MAAI,EAAI,EAEtC0kB,UAAQ,UAAWvxB,EAAMmR,OAAO,EAChCogB,UAAQ,WAAYvxB,EAAMmT,QAAQ,EAClCoe,EAAAA,QAAQ,wBAAyBD,CAAqB,EAGtD,MAAMnlB,EAAWC,GAAAA,YAAW,EACtBgb,EAAYC,GAAAA,aAAY,EACxB,CAAE1a,EAAAA,GAAMzN,GAAa,EAErBgU,EAAiBrG,EAAAA,IAAI,EAAE,EACvBwB,EAAWC,qBAAqBA,EAAAA,qBAAwB,CAAEzE,OAAQ,MAElE2nB,EAAW3kB,MAAyC,CAAA,CAAE,EACtD4kB,EAAY5kB,MAAyB,IAAI,EAEzC6kB,EAAc9d,GAA4B,CAC9C6d,EAAUpxB,MAAQuT,EACdA,GAAM5T,EAAMmR,UAASqgB,EAASnxB,MAAML,EAAMmR,OAAO,EAAIyC,EAC3D,EACMjC,EAAaC,EAAAA,gBAAgB,MAAM,EACnC+f,EAAgB9kB,MAAI,CAAA,CAAE,EACtBoF,EAASpF,MAAI,EAAI,EACjB+kB,EAAQ/kB,MAAI,CAAA,CAAE,EACdglB,EAAkBhlB,MAAI,EAAK,EAC3BilB,EAAajlB,MAAI,CAAC,EAClBklB,EAAcllB,MAAI,EAAK,EACvBmlB,GAAWnlB,MAAI,EAAK,EACpB4G,EAAQ5G,MAAI,CAAA,CAAE,EACdolB,EAAWplB,MAAI,EAAK,EACpBqlB,EAAcrlB,MAAI,CAAC,EACnBslB,EAAWtlB,MAAI,GAAG,EAClBulB,EAASvlB,MAAI,CAAA,CAAE,EAGfwlB,EAAWrqB,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EACvG2gB,EAAgBtqB,EAAAA,SAAS,IAAMmE,EAASmmB,aAAa,EACrDC,EAAgBvqB,EAAAA,SAAS,IAAMmE,EAASomB,aAAa,EACrD7H,GAAO1iB,EAAAA,SAAmB,IAAMmE,EAAS2e,OAAO,EAChDL,GAAYziB,EAAAA,SAAS,IAAMof,EAAUqD,SAAS,EAGpD4G,EAAO,CACLne,eAAAA,EACAwe,WAAAA,CACF,CAAC,EAED,MAAMc,GAAcA,CAAC5iB,EAAc8C,IAAW,CAC5C,IAAI7L,EAAI,GACR,OAAQ+I,EAAI,CACV,IAAK,QACH/I,EAAI6L,EAAE/F,EACN,MACF,IAAK,KACH9F,EAAI6L,EAAEzP,EACN,MACF,IAAK,KACH4D,EAAI6L,EAAE6V,GACN,MACF,IAAK,KACH1hB,EAAI6L,EAAE8V,GACN,MACF,QACE3hB,EAAI6L,EAAE/F,EACN,KACJ,CACA,OAAK9F,IAAGA,EAAI6L,EAAE/F,GACP9F,CACT,EAOM4rB,EAAkBpR,GAAkB,CACxCpP,EAAO5R,MAAQghB,CACjB,EAEMqR,EAAa1qB,EAAAA,SAAS,IAAM,OAChC,OAAIlH,EAAAA,EAAM6xB,UAAN7xB,MAAAA,EAAAA,KAAAA,GACFC,EAAAA,YAAA6xB,EAAAA,MAAA,CAAA,WAEc5yB,EAAMmR,QAAO,MAAA,iBAAA,EAAA,CAAA/Q,QAAAA,IAAAA,OAAA,QAEtBU,EAAAA,EAAM6xB,UAAN7xB,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,EAGZ,IACd,CAAC,EAEK+xB,GAAa7qB,EAAAA,SAAS,IAAM,CAChC,IAAI8qB,EAA8B,KAClC,GAAIP,EAAclyB,QAAU,GAAO,CACjC,IAAI0yB,EACA/yB,EAAMgxB,QAAS+B,EAAe/yB,EAAMgxB,QACnC+B,EAAepmB,EAAE,qBAAqB,EACvC3M,EAAMixB,YACR6B,EAAY/xB,EAAAA,YAAAkgB,GAAA,CAAA,MAED8R,EAAY,OACX/yB,EAAMmR,QAAO,QACZc,EAAO5R,MAAK,iBACHoyB,GAAc,IAAA,EAGxC,CAEA,OAAOK,CACT,CAAC,EAQKE,GAAgB1I,GAA2B,OAC/C,IAAI/jB,EAAM,CAAA,EACV,MAAM0sB,GAAsCxI,EAAAA,GAAUpqB,QAAVoqB,YAAAA,EAAkBH,GAC9D,GAAI2I,EAAc1sB,EAAM0sB,MACnB,CAEH,MAAMC,EAAiCxI,GAAKrqB,MAAMiqB,CAAG,EACrD,GAAI4I,EAAS,CACX,MAAMtI,EAAQ,CAAA,EACdA,EAAM,IAASN,EACfM,EAAM,KAAUsI,EAChB9L,EAAUyD,aAAaD,CAAyC,EAEhErkB,EAAM2sB,CACR,CACF,CACA,OAAO3sB,CACT,EAOM4sB,EAAgBC,GAAoC,cACxD,MAAMxB,EAAwB,CAAA,EACxBzX,EAAqCiZ,EAAMjZ,OAGjD,GADIiZ,EAAMlzB,OAAS,YACf,CAACia,EAAQ,OAAOyX,EAECtxB,OAAO6Z,EAAO,CAAC,CAAC,IAChB,GAAK,CAACiZ,EAAM1yB,QAC/BkxB,EAAMxH,KAAK,CACThZ,SAAU,GACVX,QAAS,GAAG9D,EAAE,oBAAoB,CAAC,KAAIymB,GAAAA,EAAMnc,QAANmc,KAAAA,GAAe,EAAE,GACxD/d,QAAS,MACX,CAAC,EAEH,IAAIge,EAAc,QACdlZ,EAAO,CAAC,IAAGkZ,EAAc7vB,GAAOrD,OAAOga,EAAO,CAAC,CAAC,CAAC,GACrD,MAAMmZ,EAAShzB,QAAO6Z,GAAAA,EAAO,CAAC,IAARA,KAAAA,GAAa,EAAE,EAC/BvT,EAAUuT,EAAOvH,QAAU,EAAItS,QAAO6Z,GAAAA,EAAO,CAAC,IAARA,KAAAA,GAAa,CAAC,EAAI,EACxDoZ,EAAYC,GAAWH,CAAU,EACnCE,GAAaF,IAAgB,SAC/BzB,EAAMxH,KAAK,CACTmJ,UAAWA,EACXle,QAAS,CAAC,SAAU,MAAM,EAE1B0b,SAAU3J,EAAU2J,SACpBxwB,IAAK+yB,EACL1sB,QAAAA,CACF,CAAiB,EAEnB,MAAM6sB,GAAW,CAAC,SAAU,aAAc,SAAU,OAAO,EAC3D,OAAItZ,EAAO,CAAC,GAAK,CAACsZ,GAAStY,SAASkY,CAAW,GAC7CzB,EAAMxH,KAAK,CACT2G,SAAU3J,EAAU2J,SACpBxwB,IAAK+yB,EACLC,UAAWC,GAAW,SACtBne,QAAS,CAAC,SAAU,MAAM,CAC5B,CAAiB,EACZuc,CACT,EACM8B,GAAmBA,CAACllB,EAAYkF,EAAelS,EAAKmyB,EAASnmB,IAAa,CAC1EA,GACAhM,IAAQmyB,IACVnlB,EAAMqS,eAAc,EACpBpN,EAAMpT,MAAMqT,CAAK,EAAI,GAEzB,EACMkgB,GAAyBrY,GAAY,CACzCnY,GAAM,GAAG,EAAE+Q,KAAK,IAAM,CACpB7P,GAASiX,EAAGsY,IAAI7T,QAAQ,uBAAuB,EAAG,WAAW,CAC/D,CAAC,CACH,EACM8T,GAAwBvY,GAAY,CACxChX,GAAYgX,EAAGsY,IAAI7T,QAAQ,uBAAuB,EAAG,WAAW,CAClE,EAUM+T,GAAyBA,CAAC7zB,EAAcsB,EAAoBkS,IAAwB,CAExF,GAAIxT,IAAS,KACPsB,GAAOiS,EAAMpT,MAAMqT,EAAQ,MAAM,EAAG,CACtC,MAAMsgB,EAAU,IAAI9Z,KAAKzG,EAAMpT,MAAMqT,EAAQ,MAAM,CAAW,EAAE0H,QAAO,EACrD,IAAIlB,KAAK1Y,CAAG,EAAE4Z,QAAO,GACtB4Y,IACfvgB,EAAMpT,MAAMqT,EAAQ,MAAM,EAAI,GAC9BD,EAAMpT,MAAM,CAAC,EAAI,OAErB,CAEF,GAAIH,IAAS,KACPsB,GAAOiS,EAAMpT,MAAMqT,EAAQ,QAAQ,EAAG,CACxC,MAAMugB,EAAY,IAAI/Z,KAAKzG,EAAMpT,MAAMqT,EAAQ,QAAQ,CAAW,EAAE0H,QAAO,EACrE4Y,EAAU,IAAI9Z,KAAK1Y,CAAG,EAAE4Z,QAAO,EACjC6Y,GAAaD,IACfvgB,EAAMpT,MAAMqT,EAAQ,QAAQ,EAAI,GAEhCD,EAAMpT,MAAM,CAAC,EAAI,OAErB,CAEF,GAAI,CAACqT,EAAO,OACZ,MAAMwgB,EAAazgB,EAAMpT,MAAMqT,CAAK,EACpC,IAAIygB,EAAU,IAAI/gB,MAAM,CAAC,EACrBA,MAAMxR,QAAQsyB,CAAU,GACtBh0B,IAAS,IAAKg0B,EAAW,CAAC,EAAI1yB,EAC7B0yB,EAAW,CAAC,EAAI1yB,EAChB0yB,EAAW,CAAC,IAAGA,EAAW,CAAC,EAAI,QAC/BA,EAAW,CAAC,IAAGA,EAAW,CAAC,EAAI,QACpCzgB,EAAMpT,MAAMqT,CAAK,EAAIwgB,EAAW3d,KAAK,GAAG,IAEpC2d,GAAc,OAAOA,GAAe,WAAUC,EAAUD,EAAWzhB,MAAM,GAAG,GAChF0hB,EAAQ,CAAC,EAAI1gB,EAAMpT,MAAMqT,EAAQ,QAAQ,EACzCygB,EAAQ,CAAC,EAAI1gB,EAAMpT,MAAMqT,EAAQ,MAAM,EAClCygB,EAAQ,CAAC,IAAGA,EAAQ,CAAC,EAAI,QACzBA,EAAQ,CAAC,IAAGA,EAAQ,CAAC,EAAI,QAC9B1gB,EAAMpT,MAAMqT,CAAK,EAAIygB,EAAQ5d,KAAK,GAAG,EAEzC,EAUM6d,GAAyB,CAAO5yB,EAAKkS,EAAOoT,EAAStV,IAAOlO,GAAA,sBAChE,OAAQwjB,EAAO,CACb,IAAK,OACCtlB,IAAQ,GAAMiS,EAAMpT,MAAMqT,CAAK,EAAI,SAClCD,EAAMpT,MAAMqT,CAAK,EAAI,SAC1B,MACF,IAAK,KACClS,IAAQ,GAAMiS,EAAMpT,MAAMqT,CAAK,EAAI,SAClCD,EAAMpT,MAAMqT,CAAK,EAAI,SAC1B,KACJ,CACA,GAAIlC,EACF,GAAI,CACF,MAAMA,EAAGhQ,EAAKkS,EAAOoT,CAAO,CAC9B,OAASuN,EAAO,CACdtI,QAAQC,IAAIqI,CAAK,CACnB,CACJ,GAUMC,GAAwB,CAAO9yB,EAAKkS,EAAOoT,EAA6BtV,IAAuBlO,GAAA,sBACnG,GAAIkO,EACF,GAAI,CACF,MAAMA,EAAGhQ,EAAKkS,EAAOoT,CAAO,CAC9B,OAASuN,EAAO,CACdtI,QAAQC,IAAIqI,CAAK,CACnB,CACJ,GAIME,GAAqBlhB,GAAkB,SAC3C,GAAI8e,EAAS9xB,QAAU,KAAO,CAACixB,EAAsBjxB,MAAO,OAC5D,MAAMmS,GAAO1R,GAAAA,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,KAAAA,YAAAA,EAAoB,GAC3B0zB,EAAYhiB,GAAAA,YAAAA,EAAMxS,MACxB,IAAIw0B,GAAAA,YAAAA,EAAWC,UAAW,GAAO,OACjC,MAAMC,EAAiBvoB,EAASwoB,iBAAmB,EAAI,EAAI,EAC3D,GAAIthB,GAASqhB,EAAiB,EAAG,MAAO,qBAE1C,EASME,GAAiBA,CAACxB,EAAiByB,IAA0B,CAAA,IAAAC,EACjE,KAAM,CACJ50B,KAAAA,EAAO,OACP+W,MAAAA,EACAvD,MAAAA,EACAhT,OAAAA,EAAS,GACT8M,SAAAA,EACA2M,OAAAA,GAAS,CAAA,EACTlF,YAAAA,GACAoQ,SAAAA,GAAW,GACX7R,SAAAA,GAAW,OACXsT,QAAAA,GACAxT,WAAAA,GACAyhB,QAAAA,GAAU,EACVta,iBAAAA,GACAC,aAAAA,GACAC,SAAAA,GAAW,GACXpF,SAAAA,GAAW,GACXhC,UAAAA,GACAxC,KAAAA,GAAOshB,EAAShyB,MAChBuQ,QAAAA,GAAU,GAEVokB,UAAAA,GAAY,GACZjO,UAAAA,GACAvV,GAAAA,GACAwV,MAAAA,GACAzB,KAAAA,GACAC,SAAAA,GACA1N,IAAAA,GACAvX,IAAAA,GACA+lB,KAAAA,GACAE,UAAAA,GACAyO,KAAAA,GAAOA,IAAM,CAAC,EACd9P,WAAAA,GACAD,WAAAA,GACAgQ,MAAAA,GAAQA,IAAM,CAAC,EACfC,OAAAA,GAASA,IAAM,CAAC,EAChB9a,YAAAA,GACA4M,SAAAA,GAAW,GACXjS,QAAAA,GAAU,CAAA,EACVQ,KAAAA,GAAO,GACPC,SAAAA,GAAWA,IAAM,CAAC,EAClB2f,OAAAA,EACF,EAAIhC,EACJ,IAAIiC,GACJ,MAAMC,GAAW50B,IAAW,GACtB4yB,GAASnZ,GAAO,CAAC,GAAK,GAC5B,IAAIob,GAAQr1B,EAEZ,MAAMs1B,GAAehyB,GAAOrD,OAAOga,GAAO,CAAC,GAAK,EAAE,CAAC,EACnD,IAAIsb,GAAYjiB,GACZgb,GAAU,GACVkH,GAAa/wB,GAAiBoU,KAAKqB,YACnCA,EAAczV,GAAiBoU,KAAKqB,YACpCqb,KAAc,aAAeA,KAAc,iBAAmBA,KAAc,cAAgBA,KAAc,mBACxGD,KAAiB,WAAUD,GAAQ,QACnCC,KAAiB,eACnBD,GAAQ,WACRE,GAAY,YAEVD,KAAiB,WAAUD,GAAQ,SAGrCE,KAAc,cAAajH,GAAU,IAEzC,IAAImH,EAAK1gB,GACL2gB,EAAUjpB,EAAE,kBAAkB,EAC9BkpB,EAAQlpB,EAAE,gBAAgB,EAG1BmpB,EAAOf,GAAU,EAAI,EAAIA,IACzBU,KAAc,iBAAmBA,KAAc,oBAAkBK,EAAO,GAExEvgB,KAAa,IAAQwf,KAAY/jB,SAAW8kB,EAAO,GACvD,IAAIxb,GACAmb,KAAc,aAAeA,KAAc,cAAgBA,KAAc,oBAAkBnb,EAAiB3N,EAAE,cAAc,GAChI,MAAMopB,EAAY,GAClB,IAAIC,EAAY,GACZC,EAAY,EAEZC,EAAY,EACZjE,EAAS5xB,QAAU,KAAM61B,EAAY,GACzC,IAAIC,EAAY,EACZlE,EAAS5xB,QAAU,KAAM81B,EAAY,GACrCjE,EAAY7xB,QAAU,GACpB6xB,EAAY7xB,QAAU,KAAIy1B,EAAOf,GAAU,EAAI,EAAIA,IACnD7C,EAAY7xB,QAAU,IAAGy1B,EAAOf,GAAU,EAAI,EAAIA,KAClD7C,EAAY7xB,QAAU,GAAK6xB,EAAY7xB,QAAU,KAAGy1B,EAAOf,GAAU,EAAI,EAAIA,IACjFiB,EAAYF,EAAO5D,EAAY7xB,MAAQ,GAAK,GAAKy1B,EAAO5D,EAAY7xB,MACpE41B,EAAYH,EAAO5D,EAAY7xB,MAAQ,GAAK,GAAKy1B,EAAO5D,EAAY7xB,MACpE61B,EAAYJ,EAAO5D,EAAY7xB,MAAQ,GAAK,GAAKy1B,EAAO5D,EAAY7xB,MACpE81B,EAAYL,EAAO5D,EAAY7xB,MAAQ,GAAK,GAAKy1B,EAAO5D,EAAY7xB,QAEpE21B,EAAYF,EAAOE,EAAY,GAAK,GAAKF,EAAOE,EAChDC,EAAYH,EAAOG,EAAY,GAAK,GAAKH,EAAOG,EAChDC,EAAYJ,EAAOI,EAAY,GAAK,GAAKJ,EAAOI,EAChDC,EAAYL,EAAOK,EAAY,GAAK,GAAKL,EAAOK,GAElD,IAAIvvB,GAAU,EACVC,GAAI,GACR,GAAI,CAAC8uB,EACH,OAAQH,GAAY,CAClB,IAAK,UACHG,EAAK,OACL,MACF,IAAK,aACHA,EAAK,WACL,MACF,IAAK,UACHA,EAAK,YACL,MACF,IAAK,WAEH,IADIxb,GAAOvH,QAAU,IAAGhM,GAAUuT,GAAO,CAAC,GAAK,GACxCvT,GAAU,GACfC,GAAI,IAAMA,GACVD,KAEF+uB,EAAK,MAAQ9uB,GACb,MACF,IAAK,SACC4uB,KAAc,QAChBE,EAAKhpB,EAAE,mBAAmB,EAC1B+oB,GAAa/wB,GAAiByxB,KAAKV,YAC1BD,KAAc,SAAWA,KAAc,cAChDE,EAAKhpB,EAAE,oBAAoB,EAC3BipB,EAAUD,EACVE,EAAQF,EACRD,GAAa/wB,GAAiB2U,MAAMoc,WACpCtb,EAAczV,GAAiB2U,MAAMc,aAC5Bqb,KAAc,QACvBE,EAAKhpB,EAAE,mBAAmB,EAC1B+oB,GAAa/wB,GAAiBkrB,KAAK6F,WACnCtb,EAAczV,GAAiBkrB,KAAKzV,cAC3Bqb,KAAc,aAAeA,KAAc,gBAAcE,EAAKhpB,EAAE,mBAAmB,GAC9F,MACF,IAAK,cACC8oB,KAAc,iBAAmBA,KAAc,oBACjDG,EAAUjpB,EAAE,kBAAkB,EAC9BkpB,EAAQlpB,EAAE,gBAAgB,GAE5BgpB,EAAKhpB,EAAE,mBAAmB,EAC1B+oB,GAAa/wB,GAAiB0xB,SAASX,WACvCtb,EAAczV,GAAiB0xB,SAASjc,YACxC,KACJ,CACF,IAAIkc,GAAY3b,IAEZF,IAAoBC,MAAc4b,GAAY,IAClD,IAAI1K,EACA2K,GAAa,GACbr2B,IAAS,OACP4mB,KACF8E,EAAMoH,GAAalM,EAAO,EACtBA,GAAQnU,QAAQ,IAAI,GAAK,IAAG4jB,GAAa,KAIjD,IAAIC,GAASvf,EACTkb,EAAS9xB,QAAU,MACrBm2B,GAASrqB,EAASsqB,kBAAoB,GAAOxf,EAAQjG,OACjD7E,EAASsqB,kBAAoB,KAAMd,EAAK1e,IAG9C,MAAMyf,GAAmB7pB,EAAAA,IAAI,EAAE,EACzB8pB,GAAiBpC,GAAkBM,CAAM,EAC/C,OAAQU,GAAK,CACX,IAAK,QACHF,8BAESR,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,KAELljB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA,MAAA,CAAA,MAAA,4CAAA,EAAA,CAAA81B,EAAAA,gBAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAKhB,MACF,IAAK,UACHxB,8BAESR,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtC,GAAE,GACF,GAAE,GACF,GAAE,GACF,GAAE,GACF,EAAE,EAAA,CAAAl1B,QAAAA,IAAA,CAAAW,EAAAA,YAAAkgB,GAAA,CAAA,MACYuV,EAAM,EAAA,IAAA,CAAA,EAAA,EAG5B,MACF,IAAK,SACHnB,8BAESR,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CACTg1B,IAAAA,YAAAA,GAAS3hB,EAAMpT,MAAMqT,CAAK,EAAGA,EAAM,CAAA,CAAA,CAAA,EAAA,EAI1C,MACF,IAAK,OACH2hB,GAAUzkB,GAER7P,EAAAA,YAAA4X,EAAAA,MAAA,CAAA,IAEOkc,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA+1B,YAAA,CAAA,SAEE,CAACrjB,EAAMpT,MAAMqT,CAAK,EAAC,QACpBD,EAAMpT,MAAMqT,CAAK,EAAID,EAAMpT,MAAMqT,CAAK,EAAI,GAAK,KAAI,OAAA,OAAA,UAAA,MAAA,UAGjD,GAAI,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAAslB,GAAA,CAAA,KAAA,OAAA,KAGP3S,EAAK,KACLA,EAAK,WACFD,EAAMpT,MAAMqT,CAAK,EAAC,sBAAAkD,GAAlBnD,EAAMpT,MAAMqT,CAAK,EAACkD,EAAA,MACpBnD,EAAMpT,MAAMqT,CAAK,EAAC,SACflG,EAAQ,UACP8lB,GAAM,KACXviB,GAAG,YACI4kB,EAAE,QACN/kB,GAAO,SACNyU,GAAQ,OACV4P,GAAI,QACHC,GAAK,WACF/P,GAAU,WACVD,EAAU,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAK5B,KACJ,MACF,IAAK,WACHmQ,GAAUzkB,GAER7P,EAAAA,YAAA4X,EAAAA,MAAA,CAAA,IAEOkc,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA+1B,YAAA,CAAA,SAEE,CAACrjB,EAAMpT,MAAMqT,CAAK,EAAC,QACpBD,EAAMpT,MAAMqT,CAAK,EAAID,EAAMpT,MAAMqT,CAAK,EAAI,GAAK,KAAI,OAAA,OAAA,UAAA,MAAA,UAGjD,GAAI,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAAslB,GAAA,CAAA,KAEP3S,EAAK,KACLA,EAAK,KAAA,WAAA,WAEFD,EAAMpT,MAAMqT,CAAK,EAAC,sBAAAkD,GAAlBnD,EAAMpT,MAAMqT,CAAK,EAACkD,EAAA,MACpBnD,EAAMpT,MAAMqT,CAAK,EAAC,KACnB3C,GAAG,SACCvD,EAAQ,UACP8lB,GAAM,YACJqC,EAAE,QACN/kB,GAAO,SACNyU,GAAQ,KACZE,GAAI,SACAC,GAAQ,OACVyP,GAAI,QACHC,EAAK,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAKpB,KACJ,MACF,IAAK,OACHG,GAAUzkB,8BAEDikB,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA+1B,YAAA,CAAA,SAEE,CAACrjB,EAAMpT,MAAMqT,CAAK,EAAC,QACpBD,EAAMpT,MAAMqT,CAAK,EAAID,EAAMpT,MAAMqT,CAAK,EAAI,GAAK,KAAI,OAAA,OAAA,UAAA,MAAA,UAGjD,GAAI,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAAkuB,GAAA,CAAA,WAEJxb,EAAMpT,MAAMqT,CAAK,EAAC,sBAAAkD,GAAlBnD,EAAMpT,MAAMqT,CAAK,EAACkD,EAAA,KACrBlD,EAAK,KACLA,EAAK,SACDlG,EAAQ,SACR8oB,GAAS,YACNX,EAAE,QACNnH,GAAO,eACAlU,CAAc,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAOpC,KACJ,MACF,IAAK,OACL,IAAK,WACCmb,KAAc,cAAgBA,KAAc,iBAC9CJ,GAAUzkB,8BAEDikB,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAAgb,GAAA,CAAA,WAECtI,EAAMpT,MAAMqT,CAAK,EAAC,sBAAAkD,GAAlBnD,EAAMpT,MAAMqT,CAAK,EAACkD,EAAA,KAErBlD,EAAK,YACAA,EAAK,aACJ,QAAO,KACb+hB,GAAS,OACPC,GAAU,eACJtb,EAAW,SACf5M,EAAQ,iBACAiN,GAAgB,aACpBC,GAAY,SAChB4b,GAAS,YACNX,EAAE,eACDtb,GAAW,iBACPub,EAAO,eACTC,EAAK,eACPjlB,GAAO,SACXukB,EAAM,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAIpB,KAEJE,GAAUzkB,8BAEDikB,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA,MAAA,CAAA,MAAA,uBAAA,MAAA,eAAA,QAICg2B,IAAAA,IAAY,CAAAh2B,EAAAA,YAAAgb,GAAA,CAAA,WAEVtI,EAAMpT,MAAMqT,EAAQ,QAAQ,EAAC,sBAAAkD,GAA7BnD,EAAMpT,MAAMqT,EAAQ,QAAQ,EAACkD,EAAA,KAEhClD,EAAQ,SAAQ,YACXA,EAAQ,SAAQ,aACf,QAAO,KACb+hB,KAAc,aAAe,OAAS,WAAU,OAC9CC,GAAU,eACJtb,EAAW,SACf5M,EAAQ,iBACAiN,GAAgB,aACpBC,GAAY,SAChB4b,GAAS,YACNV,EAAO,eACNvb,GAAW,eACXzJ,GAAO,MACd,CAAE6M,MAAO,kBAAkB,MAAA,4BAAA,SAEvBjc,GAAQuyB,GAAuB,IAAKvyB,EAAKkS,CAAK,EAAC,QAChD6H,GAAOqY,GAAsBrY,CAAE,EAAC,OACjCA,GAAOuY,GAAqBvY,CAAE,CAAC,EAAA,IAAA,EAAAxa,EAAAA,YAAA,OAAA,CAAA,MAAA,gCAAA,EAAA,CAEIuZ,CAAc,CAAA,EAAAvZ,EAAAA,YAAAgb,GAAA,CAAA,WAEjDtI,EAAMpT,MAAMqT,EAAQ,MAAM,EAAC,sBAAAkD,GAA3BnD,EAAMpT,MAAMqT,EAAQ,MAAM,EAACkD,EAAA,KAE9BlD,EAAQ,OAAM,YACTA,EAAQ,OAAM,aACb,QAAO,KACb+hB,KAAc,aAAe,OAAS,WAAU,OAC9CC,GAAU,eACJtb,EAAW,SACf5M,EAAQ,iBACAiN,GAAgB,aACnB1B,GACT0c,KAAc,aAAqB1c,EAAKqC,QAAO,GAAM,IAAIlB,KAAKzG,EAAMpT,MAAMqT,EAAQ,QAAQ,CAAC,EAAE0H,QAAO,EAAK,MACjGrC,EAAKqC,QAAO,GAAM,IAAIlB,KAAKzG,EAAMpT,MAAMqT,EAAQ,QAAQ,CAAC,EAAE0H,QAAO,EAAK,MACnF,SACSkb,GAAS,YACNT,EAAK,eACJxb,GAAW,eACXzJ,GAAO,MAAA,0BAAA,SAEVpP,GAAQuyB,GAAuB,IAAKvyB,EAAKkS,CAAK,EAAC,QAChD6H,GAAOqY,GAAsBrY,CAAE,EAAC,OACjCA,GAAOuY,GAAqBvY,CAAE,CAAC,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAK9C,KACN,MACF,IAAK,MACH,OAAQuL,GAAO,CACb,IAAK,OACC,OAAOrT,EAAMpT,MAAMqT,CAAK,GAAM,SAAUgjB,GAAiBr2B,MAAQoT,EAAMpT,MAAMqT,CAAK,EAAErT,MAAQoT,EAAMpT,MAAMqT,CAAK,EAAErT,MAAQ,SACtHq2B,GAAiBr2B,MAAQoT,EAAMpT,MAAMqT,CAAK,EAAID,EAAMpT,MAAMqT,CAAK,EAAI,SACxE,MACF,IAAK,KACC,OAAOD,EAAMpT,MAAMqT,CAAK,GAAM,SAAUgjB,GAAiBr2B,MAAQoT,EAAMpT,MAAMqT,CAAK,EAAErT,MAAQoT,EAAMpT,MAAMqT,CAAK,EAAErT,MAAQ,SACtHq2B,GAAiBr2B,MAAQoT,EAAMpT,MAAMqT,CAAK,EAAID,EAAMpT,MAAMqT,CAAK,EAAI,SACxE,KACJ,CACA,GAAI6iB,KAAe,IAAShhB,KAAa,IAAS4c,EAAS9xB,QAAU,KAAOurB,GAAOA,EAAIhZ,SAAW,IAAMkU,KAAY,MAAQA,KAAY,QAEtIuO,GAAUzkB,8BAEDikB,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAAstB,GAAA,CAAA,MAEDqI,GAAiBr2B,MAAK,UAClBqT,EAAK,SACNlG,EAAQ,OACVsZ,KAAY,OAAS,SAAW,SAAQ,SACrCtlB,GAAQ4yB,GAAuB5yB,EAAKkS,EAAOoT,GAAStV,EAAE,CAAC,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAGtE,aACG+kB,KAAe,IAAShhB,KAAa,IAAS4c,EAAS9xB,QAAU,KAAOurB,GAAOA,EAAIhZ,SAAW,EAErGyiB,GAAUzkB,8BAEDikB,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAAklB,UAAA,CAAA,GAEJ,GAAGvS,CAAK,gBAAe,WAAA,GAAA,SAAA,GAAA,cAGZ,GAAK,SACV,GAAE,cACC,GAAI,MACV,CACL+M,SAAU,WACVhD,MAAO,MACPC,OAAQ,MACRsZ,QAAS,EACTC,OAAQ,EACR/f,OAAQ,EACRggB,KAAM,mBACNC,SAAU,SACVC,WAAY,QACd,GAAC,IAAA,EAAAr2B,EAAAA,YAAAs2B,eAAA,CAAA,aAGWb,GAAM,KACZ9iB,EAAK,WACFD,EAAMpT,MAAMqT,CAAK,EAAErT,MAAK,sBAAAuW,GAAxBnD,EAAMpT,MAAMqT,CAAK,EAAErT,MAAKuW,EAAA,SACtBpV,GAAQ8yB,GAAsB9yB,EAAKkS,EAAOoT,GAAStV,EAAE,GAAC3F,GAAAipB,EAChElJ,EAAIre,IAAKmF,GAAC,CAAA,IAAA5E,GAAAwpB,GAAA,OACTnd,GAAO,CAAC,IAAM,EAAApZ,EAAAA,YAAAw2B,EAAAA,QAAA,CAAA,MAEH7kB,EAAEmW,EAAC,SACArb,EAAQ,SACPgB,IAAUklB,GAAiBllB,GAAOkF,EAAOhB,EAAEmW,EAAGpV,EAAMpT,MAAMqT,CAAK,EAAGlG,CAAQ,CAAC,EAAA3B,GAAAiC,GACrF0kB,GAAYpL,EAAU2J,SAAUre,CAAC,CAAC,EAAA5E,GAAA,CAAA1N,QAAAA,IAAA,CAAA0N,EAAA,EAAA,EAAA/M,EAAAA,YAAAy2B,gBAAA,CAAA,MAI5B9kB,EAAEmW,EAAC,SACArb,CAAQ,EAAA3B,GAAAyrB,GACjB9E,GAAYpL,EAAU2J,SAAUre,CAAC,CAAC,EAAA4kB,GAAA,CAAAl3B,QAAAA,IAAA,CAAAk3B,EAAA,EAAA,CAEtC,CACH,CAAC,EAAAxC,EAAA,CAAA10B,QAAAA,IAAA,CAAA00B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAIL,SACD,CAEH,IAAIjuB,EACJ,MAAM4wB,GAAKhkB,EAAMpT,MAAMqT,CAAK,EACxB,OAAO+jB,IAAO,SACZrkB,MAAMxR,QAAQ61B,EAAE,EAClBA,GAAGjtB,QAAQ,CAACkI,GAAGW,KAAU,QACnBX,KACE7L,EACE6L,GAAEuE,MAAOpQ,GAAK,IAAM6L,GAAEuE,MACrBpQ,GAAK,KAAO0M,IAAAA,MAAAA,GAAYF,IAASE,GAAUF,EAAK,EAAIX,IAClDA,GAAEuE,MAAOpQ,EAAI6L,GAAEuE,MACnBpQ,GAAI0M,GAAAA,IAAAA,YAAAA,GAAYF,MAAZE,KAAAA,GAAsBb,GACnC,CAAC,EAEG+kB,KAAI5wB,EAAI4wB,GAAGxgB,OAEdpQ,EAAI4wB,GACT,IAAIC,GAAW7wB,EACX0M,KAAWmkB,GAAWnkB,IAE1B8hB,GAAUzkB,8BAEDikB,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA+1B,YAAA,CAAA,SAEE,CAACjwB,EAAC,QACH6wB,GAAWA,GAAW,GAAK,KAAI,OAAA,OAAA,UAAA,MAAA,UAG7B,GAAI,EAAA,CAAAt3B,QAAAA,IAAA,CAAAW,EAAAA,YAAA+sB,GAAA,CAAA,WAEJra,EAAMpT,MAAMqT,CAAK,EAAC,sBAAAkD,IAAlBnD,EAAMpT,MAAMqT,CAAK,EAACkD,GAAA,MACpBnD,EAAMpT,MAAMqT,CAAK,EAAC,MAClBuD,EAAK,UACD1D,GAAS,KACdG,EAAK,SACD6B,GAAQ,QACTuR,IAAAA,KAAAA,GAAW,GAAE,KAChB/V,GAAG,SACCvD,EAAQ,YACLmoB,EAAE,WACHriB,GAAU,QACb1C,GAAO,UACL,OAAOmW,IAAc,WAAaA,GAAY/V,OAAS,GAC9DQ,GAAE,MACCwV,GAAK,SACFC,EAAQ,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAKxB,IACN,CAEA,MACF,IAAK,SACHoO,GAAUzkB,8BAEDikB,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA+1B,YAAA,CAAA,SAEE,CAACrjB,EAAMpT,MAAMqT,CAAK,EAAC,QACpBD,EAAMpT,MAAMqT,CAAK,EAAID,EAAMpT,MAAMqT,CAAK,EAAI,GAAK,KAAI,OAAA,OAAA,UAAA,MAAA,UAGjD,GAAI,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA8lB,GAAA,CAAA,KAEPnT,EAAK,KACLA,EAAK,GACPA,EAAK,WACAD,EAAMpT,MAAMqT,CAAK,EAAC,sBAAAkD,GAAlBnD,EAAMpT,MAAMqT,CAAK,EAACkD,EAAA,MACpBnD,EAAMpT,MAAMqT,CAAK,EAAC,SACflG,EAAQ,YACLmoB,EAAE,QACN/kB,GAAO,KACVG,GAAG,IACJ+G,GAAG,IACHvX,GAAG,KACF+lB,GAAI,UACCE,GAAS,OACZyO,GAAI,QACHC,EAAK,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAKpB,KACJ,MACF,IAAK,QACHG,GAAUzkB,8BAEDikB,EAAM,MACJ8B,GAAc,MACd,CAAEriB,QAASghB,GAAW,OAAS,IAAI,GACtCS,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,EAAS,GACTC,CAAS,EAAA,CAAA/1B,QAAAA,IAAA,CAAAW,EAAAA,YAAA61B,aAAA,CAAA,MAEJJ,GAAM,KACP9iB,EAAK,IACNA,CAAK,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAA+1B,YAAA,CAAA,SAEE,CAACrjB,EAAMpT,MAAMqT,CAAK,EAAC,QACpBD,EAAMpT,MAAMqT,CAAK,EAAID,EAAMpT,MAAMqT,CAAK,EAAI,GAAK,KAAI,OAAA,OAAA,UAAA,MAAA,UAGjD,GAAI,EAAA,CAAAtT,QAAAA,IAAA,CAAAW,EAAAA,YAAAgW,GAAA,CAAA,KAEPrD,EAAK,WACFD,EAAMpT,MAAMqT,CAAK,EAAC,sBAAAkD,GAAlBnD,EAAMpT,MAAMqT,CAAK,EAACkD,EAAA,MACpBnD,EAAMpT,MAAMqT,CAAK,EAAC,SACflG,EAAQ,YACLmoB,EAAE,KACT5kB,GAAG,KACHyE,GAAI,SACAD,GAAQ,SACRE,GAAQ,QACT7E,GAAO,QACPoE,GAAO,OACRigB,GAAI,SACFE,EAAM,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAKtB,KACJ,KAGJ,CACA,OAAIH,KAAc,GAAMj0B,EAAAA,YAAA42B,EAAAA,iBAAA,QAAA,EAAA,KAAA9rB,GAAgBwpB,EAAO,EAAPA,GAAO,CAAAj1B,QAAAA,IAAA,CAAPi1B,EAAO,EAAA,EACnCA,EACd,EAEMuC,GAAW5vB,EAAAA,SAAS,IAAM,CAC9B,MAAM0D,EAAe,CAAA,EACrB1L,OAAAA,EAAMmT,SAAS3I,QAAQ,CAAC7E,EAAgB0N,IAAkB,CACxD3H,EAAI0e,KAAKwK,GAAejvB,EAAM0N,CAAK,CAAC,CACtC,CAAC,EACM3H,CACT,CAAC,EAGKgU,GAAgBmY,GAAqC,CACzD,GAAIhG,EAAgBxxB,MAAOyxB,EAAWzxB,MAAQ,UACrCL,EAAMoxB,WAAa,GAAOU,EAAWzxB,MAAQ,UAC5C0xB,EAAY1xB,MAiBjByxB,EAAWzxB,MAAQ,UAhBjB2xB,GAAS3xB,MAePyxB,EAAWzxB,MAAQ,UAdpBw3B,GAAW,OAAOA,EAAQ7X,SAAY,WAAY,CACpD,MAAM8X,EAAUD,GAAAA,YAAAA,EAAS7X,QAAQ,YACjC,GAAI8X,EAAS,CACX,MAAMC,EAAYD,EAAQE,UAAUC,SAAS,eAAe,EAAI,IAAM,IACtEnG,EAAWzxB,MAAQuf,SAASC,gBAAgBC,eAAgB+X,GAAAA,YAAAA,EAASE,YAAa,KAAMD,GAAAA,YAAAA,EAASC,YAAa,GAAKA,CACrH,MACiBF,GAAAA,YAAAA,EAAS7X,QAAQ,eAKzB8R,EAAWzxB,MAAQuf,SAASC,gBAAgBC,aAAe+X,EAAQE,UAAY,IAHrEF,GAAAA,MAAAA,EAAS7X,QAAQ,gBACnB8R,EAAWzxB,MAAQuf,SAASC,gBAAgBC,aAAe+X,EAAQE,UAAY,GAIlG,CAGN,EAEMG,GAAoBA,IAAM,QAC9B1G,EAAAA,EAASnxB,MAAML,EAAMmR,OAAO,IAA5BqgB,MAAAA,EAA+B2G,eACjC,EAOMC,GAAeA,IAAM,OACzB,IAAIC,EAEJ,GAAIr4B,EAAMmxB,UAAW,CACnBkH,EAAar4B,EAAMmxB,UACnB,IAAI1T,EAAQ4a,EAAW5a,OAAS,EAC5BC,EAAS2a,EAAW3a,QAAU,EAQ9BD,EAAM6a,YAAY,GAAG,IAAM,IAE7B7a,EAAQ8a,SAAS9a,CAAK,EAClBA,IAAU,IACRA,EAAQ,IAEVyU,EAAY7xB,MAAQ,GACbod,EAAQ,IAEfyU,EAAY7xB,MAAQ,GACbod,EAAQ,KAEfyU,EAAY7xB,MAAQ,EACbod,EAAQ,KAEfyU,EAAY7xB,MAAQ,EACjB6xB,EAAY7xB,MAAQ,EAEzBsxB,EAActxB,MAAM,MAAWod,EAAQ,MAErCC,IAAW,QAAUA,IAAW,IAClCA,EAAS6a,SAAS7a,CAAM,EACxBiU,EAActxB,MAAM,OAAYqd,EAAS,OAEtCiU,EAActxB,MAAM,MAAWod,CACxC,KAAO,CACL,MAAM9J,GAAStF,EAAAA,GAAAA,YAAAA,EAAU3I,QAAV2I,YAAAA,EAAiBuF,GAC1B4kB,EAAc7kB,GAAAA,YAAAA,EAAQ6kB,YAExBA,IAAgB,IACdA,EAAc,IAEhBtG,EAAY7xB,MAAQ,GACbm4B,EAAc,IAErBtG,EAAY7xB,MAAQ,GACbm4B,EAAc,KAErBtG,EAAY7xB,MAAQ,EACbm4B,EAAc,KAErBtG,EAAY7xB,MAAQ,EACjB6xB,EAAY7xB,MAAQ,EAEzBsxB,EAActxB,MAAM,MAAWm4B,EAAc,KAEjD,CACApG,EAAO/xB,MAAQg4B,CACjB,EAQMI,GAAcv4B,GAAiBoD,GAAA,sBAEnC,MAAMo1B,EAAY,CAAA,EACZC,EAAW,CAAA,EACjB34B,EAAMmT,SAAS3I,QAAS7E,GAAmB,CACzC,IAAIkB,EACA3G,IAAS,SAAU2G,EAAIlB,EAAKtF,MAC3BwG,EAAI4M,EAAMpT,MAAMsF,EAAK+N,KAAK,IAAM1C,OAAYrL,EAAKtF,MAAQoT,EAAMpT,MAAMsF,EAAK+N,KAAK,EACpFglB,EAAU/yB,EAAK+N,KAAK,EAAI7M,GACpBlB,EAAK6N,WAAa,cAAgB7N,EAAK6N,WAAa,oBAClDJ,MAAMxR,QAAQiF,CAAC,GACjB6xB,EAAU/yB,EAAK+N,MAAQ,QAAQ,EAAI7M,EAAE,CAAC,IAAM,OAASmK,OAAYnK,EAAE,CAAC,EACpE6xB,EAAU/yB,EAAK+N,MAAQ,MAAM,EAAI7M,EAAE,CAAC,IAAM,OAASmK,OAAYnK,EAAE,CAAC,IAElE6xB,EAAU/yB,EAAK+N,MAAQ,QAAQ,EAAI,GACnCglB,EAAU/yB,EAAK+N,MAAQ,MAAM,EAAI,KAGrCilB,EAAShzB,EAAK+N,KAAK,EAAIyf,EAAaxtB,CAAI,EAExCA,EAAKtF,MAAQwG,CACf,CAAC,EAED4M,EAAMpT,MAAQq4B,GACVx4B,IAAS,UACJA,IAAS,WAAS0xB,EAAMvxB,MAAQs4B,GAEzC,MAAM3Z,WAAQ,EACdoZ,GAAY,EAEZF,GAAiB,CACnB,GAEMU,GAAaA,CAAC5iB,EAAQ/P,IAAW,CACrC,IAAI4yB,EAAO,GACX,UAAW91B,KAAOiT,EAAQ,CACxB,MAAM8iB,EAAW9iB,EAAOjT,CAAG,EACrBg2B,EAAS9yB,EAAOlD,CAAG,EACzB,GAAI+1B,IAAa9nB,OACZ,GAAK+nB,EAGH,CACL,MAAMC,EAAejtB,OAAOkD,KAAK6pB,CAAQ,EACzC,UAAWG,KAAQD,EACjB,GACEA,EAAaC,CAAI,IAAM,SACvBD,EAAaC,CAAI,IAAM,UACvBD,EAAaC,CAAI,IAAM,YACvBD,EAAaC,CAAI,IAAM,UACvBD,EAAaC,CAAI,IAAM,YACvBD,EAAaC,CAAI,IAAM,cACvBD,EAAaC,CAAI,IAAM,YACvBD,EAAaC,CAAI,IAAM,aACvBD,EAAaC,CAAI,IAAM,WAEvB,GAAID,EAAaC,CAAI,IAAM,SAAU,CACnC,GAAIH,EAASE,EAAaC,CAAI,CAAC,EAAE,CAAC,IAAMF,EAAOC,EAAaC,CAAI,CAAC,EAAE,CAAC,EAAG,CACrEJ,EAAO,GACP,KACF,CACA,GAAIC,EAASE,EAAaC,CAAI,CAAC,EAAE,CAAC,IAAMF,EAAOC,EAAaC,CAAI,CAAC,EAAE,CAAC,EAAG,CACrEJ,EAAO,GACP,KACF,CACA,GAAIC,EAASE,EAAaC,CAAI,CAAC,EAAE,CAAC,IAAMF,EAAOC,EAAaC,CAAI,CAAC,EAAE,CAAC,EAAG,CACrEJ,EAAO,GACP,KACF,CAKF,SAAWC,EAASE,EAAaC,CAAI,CAAC,IAAMF,EAAOC,EAAaC,CAAI,CAAC,EAAG,CAItEJ,EAAO,GACP,KACF,EACN,KAzCkB,CAChBA,EAAO,GACP,KACF,CAyCF,CAEA,OAAOA,CACT,EAGAjrB,EAAAA,MACE,IAAM5N,EAAMmT,SACZ,CAAC+lB,EAAWC,IAAc,EAEpB/lB,MAAMxR,QAAQs3B,CAAS,GAAK9lB,MAAMxR,QAAQu3B,CAAS,GAAKD,EAAUtmB,SAAWumB,EAAUvmB,QAClFgmB,GAAWM,EAAWhmB,EAAe7S,KAAK,IAAGo4B,GAAK,OAAO,CACpE,EACA,CACE9L,KAAM,EACR,CACF,EACA/e,EAAAA,MACE,IAAMkkB,EAAWzxB,MAChB2V,GAAW,CAEN+b,EAAY1xB,QAAU,IACpB2xB,GAAS3xB,QAAU,GAAOyxB,EAAWzxB,MAAQ2V,EAE9C8b,EAAWzxB,MAAQ,CAC1B,CACF,EAIA,MAAM+4B,IAAYt4B,IAAAA,GAAAA,EAAMV,UAANU,YAAAA,GAAAA,KAAAA,KAAAA,YAAAA,GAAoB,GACtC,GAAI,OAAOs4B,IAAAA,YAAAA,GAAWl5B,OAAS,UAAY,SAAUk5B,GAAUl5B,QAAQk5B,GAAAA,IAAAA,YAAAA,GAAWl5B,OAAXk5B,YAAAA,GAAiBr5B,QAAS,cAAe,CAC9GoyB,EAAS9xB,MAAQ,IACjB,MAAMm0B,EAAY4E,GAAUp5B,OACxBw0B,GAAAA,YAAAA,EAAWC,UAAW,KAAOnD,EAAsBjxB,MAAQ,GACjE,MAAO8xB,EAAS9xB,MAAQ,IAExB6S,EAAe7S,MAAQwrB,KAAKC,MAAMD,KAAKwN,UAAUr5B,EAAMmT,QAAQ,CAAC,EAChEslB,GAAK,QAAQ,EAEb,MAAMptB,GAAagD,GAAAA,YAAAA,EAAUxE,OAE7B,OAAIwB,MAAcA,GAAAA,GAAWnL,OAAXmL,YAAAA,GAAiBtL,QAAS,WAAYkyB,EAAS5xB,MAAQ,GACpE4xB,EAAS5xB,MAAQ,GAGtB+f,EAAAA,UAAU,IAAM,CACdpB,EAAAA,SAAS,IAAM,OAEb,MAAMrL,GAAStF,EAAAA,GAAAA,YAAAA,EAAU3I,QAAV2I,YAAAA,EAAiBuF,GAGhC,GAAID,GAAU,OAAOA,EAAOqM,SAAY,WAAY,CAC9CrM,EAAOqM,QAAQ,iBAAiB,IAAGgS,GAAS3xB,MAAQ,IACxD,MAAMi5B,EAAa3lB,EAAOqM,QAAQ,yBAAyB,EAC3D,GAAIsZ,EAAYvH,EAAY1xB,MAAQoE,GAAa60B,CAAU,MACtD,CACH,MAAMC,EAAc5lB,EAAOqM,QAAQ,yBAAyB,EACxDuZ,IAAaxH,EAAY1xB,MAAQoE,GAAa80B,CAAW,EAC/D,CACI5lB,EAAOqM,QAAQ,qBAAqB,IAAG6R,EAAgBxxB,MAAQ,IAGnEqf,GAAa/L,CAAM,EAEnBuM,OAAOG,iBAAiB,SAAU,IAAMX,GAAa/L,CAAM,CAAC,CAC9D,CACF,CAAC,CACH,CAAC,EAGM,IAAA5S,EAAAA,YAAA,MAAA,CAAA,MAEIxB,GAAS,MACTgL,GAAA,GAAKonB,IAAe,CAC1Be,EAAWryB,MACXwyB,GAAWxyB,MAAKU,EAAAA,YAAAy4B,aAAA,CAAA,KAAA,gBAAA,EAAA,CAAAp5B,QAAAA,IAAA,CAAAq5B,iBAAA14B,EAAAA,YAAA,MAAA,CAAA,IAAA,eAAA,MAKN,GAAGxB,EAAS,oBAAkB,CAAAwB,EAAAA,YAAA24B,SAAA,CAAA,IAE9BhI,EAAU,MACRje,EAAMpT,MAAK,KACZgyB,EAAShyB,MAAK,OACZ,GAAK,iBACGiyB,EAAcjyB,MAAK,cACtB,GAAGL,EAAMkxB,UAAU,KAAI,MAC7BU,EAAMvxB,MAAK,MACXyK,GAAAP,GAAA,GACF6nB,EAAO/xB,OADL,CAELod,MAAO,OACPK,UAAWgU,EAAWzxB,QAAU,EAAI2Q,OAAY8gB,EAAWzxB,MAAQ,IACrE,EAAC,EAAA,CAAAD,QAAAA,IAAA,CAAAW,EAAAA,YAAA6xB,QAAA,CAAA,WAEW5yB,EAAMmR,QAAO,MAChB,CAAEmD,QAAS,OAAQqlB,SAAU,MAAO,CAAC,EAAA,CAAAv5B,QAAAA,IAAAA,SAAA,OAC3Cw3B,GAASv3B,QACTS,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,KAAgBC,EAAAA,YAAA,MAAA,CAAA,MAAiB,CAAE64B,KAAM,EAAGC,SAAU,CAAE,CAAC,EAAA,EAAG/4B,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,CAAA,CAAO,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAAg5B,EAAAA,MApBjF7nB,EAAO5R,KAAK,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CA2B9B,CACF,CAAC,qCCv3CG05B,GAAe,CACnB,QAAQn6B,EAAgB,OACtBA,EAAI,WAAUwB,EAAA44B,GAAO,OAAP,KAAA54B,EAAe,SAAU44B,EAAM,CAC/C,CACF,8ICsBE,KAAM,CAAE,aAAA56B,CAAA,EAAiBE,YAAA,EAEnBC,EAAYH,EAAa,WAAW,EAEpC+M,EAAWC,GAAAA,YAAA,EACX6tB,EAAWjyB,EAAAA,SAAS,IAAMmE,EAAS,gBAAgB,EAMnD+tB,EAAW,IAAY52B,GAAA,sBAC3B,GAAI,CACF,MAAM6I,EAAS,YAAA,CACjB,OAAQlJ,EAAA,CAER,CACF,GAEMk3B,EAAmB,IAAY72B,GAAA,sBACnC,GAAI,CACF,MAAM6I,EAAS,iBAAA,CACjB,OAAQlJ,EAAA,CAER,CACF,GAEMm3B,EAAiB,IAAM,CAC3B,MAAMC,EAAYhtB,EAAAA,MAAM4sB,CAAQ,EAChC9tB,EAAS,iBAAiB,CAACkuB,CAAS,CACtC,EAIAja,OAAAA,EAAAA,UAAU,IAAY9c,GAAA,sBAEpB,MAAMg3B,EAAcnuB,EAAS,KACvBouB,EAAoBpuB,EAAS,WAC/B,CAACmuB,GAAe,OAAO,KAAKA,CAAW,EAAE,SAAW,EAAG,MAAMJ,EAAA,EACxD,CAACK,GAAsB,IAAG,MAAML,EAAA,GACzC,MAAMM,EAAsBruB,EAAS,aACjCquB,GAAuBA,EAAoB,SAAW,UAASL,EAAA,EACrE,EAAC,wBAGD1xB,EAAAA,mBAiBM,MAAA,CAhBH,uBAAOhJ,QAAAF,CAAA,CAAS,EAChB,QAAO66B,CAAA,GACRzxB,EAAAA,mBAaM,MAbNC,GAaM,CAZJ7H,cAWStB,EAAAA,MAAAoJ,EAAAA,MAAA,EAAA,CAVN,KAAM,GACN,0BAAUpJ,EAAAA,MAAAF,CAAA,CAAS,QAAA,CAAA,qBACpB,IAG8B,CAFrB06B,EAAA,qBAGTz6B,EAAAA,YAG8BC,EAAAA,MAAAg7B,GAAAA,IAAA,EAAA,OAD3B,0BAAUh7B,EAAAA,MAAAF,CAAA,CAAS,QAAA,EACnB,8BAAgBuI,EAAA,MAAK,CAAA,4CAPxBtI,EAAAA,YAG8BC,EAAAA,MAAAi7B,GAAAA,MAAA,EAAA,OAD3B,0BAAUj7B,EAAAA,MAAAF,CAAA,CAAS,QAAA,EACnB,8BAAgBuI,EAAA,MAAK,CAAA,uGCjF1B6yB,GAAoB,CACxB,QAAQ/6B,EAAgB,OACtBA,EAAI,WAAUwB,EAAAw5B,GAAY,OAAZ,KAAAx5B,EAAoB,cAAew5B,EAAW,CAC9D,CACF,+HCwBE,KAAM,CAAE,aAAAx7B,CAAA,EAAiBE,YAAA,EACnBC,EAAYH,EAAa,aAAa,EAEtCgoB,EAAYC,GAAAA,aAAA,EACZwT,EAAcC,GAAAA,eAAA,EACdC,EAAU/yB,EAAAA,SAAS,IAAM6yB,EAAY,YAAY,EACjDG,EAAchzB,EAAAA,SAAS,IAAM6yB,EAAY,gBAAgB,EAEzD/X,EAASpW,GAAAA,UAAA,EAETuuB,EAAuBrrB,GAAwBtM,GAAA,sBACnD,GAAIsM,IAASvC,EAAAA,MAAM2tB,CAAW,EAAE,KAAM,OAEtC,KAAM,CAAE,aAAAE,CAAA,EAAiBC,aAAA,EACzB/T,EAAU,YAAYxX,CAAI,EAC1B,MAAMsrB,EAAatrB,CAAI,EAEvBkT,EAAO,GAAG,CAAC,CACb,2EAIAtjB,EAAAA,YAoBaC,EAAAA,MAAA27B,EAAAA,UAAA,EAAA,CAnBV,MAAKvW,EAAAA,eAAA,CAAEplB,EAAAA,MAAAF,CAAA,EAEF,eAAe,CAAA,EADrB,QAAQ,QAEP,UAAS07B,CAAA,GAMC,mBACT,IAOiB,CAPjBl6B,EAAAA,YAOiBtB,EAAAA,MAAA47B,gBAAA,EAAA,KAAA,mBALb,IAAuB,kBADzB5yB,EAAAA,mBAKiBub,EAAAA,SAAA,KAAAC,EAAAA,WAJA8W,EAAA,MAARp1B,kBADTnG,EAAAA,YAKiBC,EAAAA,MAAA67B,EAAAA,cAAA,EAAA,CAHd,IAAK31B,EAAK,KACV,QAASA,EAAK,IAAA,qBACf,IAAe,CAAZkxB,EAAAA,gBAAAhT,EAAAA,gBAAAle,EAAK,IAAI,EAAA,CAAA,CAAA,8DAXlB,IAIM,CAJNgD,EAAAA,mBAIM,MAAA,KAAA,CAHJ5H,EAAAA,YAEyBw6B,EAAA,CADtB,mCAAkCzzB,EAAA,SAAS,GAC5C,YAAU,UAAA,mDC1DZ0zB,GAAqB,CACzB,QAAQ57B,EAAgB,OACtBA,EAAI,WAAU67B,EAAAA,GAAa,OAAbA,KAAAA,EAAqB,eAAgBA,EAAY,CACjE,CACF,ECaQ,CAAEr8B,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,SAAS,0BAET,CAC7BW,KAAM,YACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS4Q,QAEXJ,QAAS,CACP1Q,KAAMO,QACNL,QAAS,IAEXuN,MAAO,CACLzN,KAAMC,OACNC,QAAS4Q,QAEXiG,MAAO,CACL/W,KAAMC,OACNC,QAAS4Q,QAEX0qB,UAAW,CACTx7B,KAAMC,OACNC,QAAS,gBAEXiV,QAAS,CACPnV,KAAMC,OACNC,QAAS,SAEXu7B,aAAc,CACZz7B,KAAMO,QACNL,QAAS,IAEXklB,WAAY,CACVplB,KAAMC,OACNC,QAAS4Q,QAEX4qB,WAAY,CACV17B,KAAMC,OACNC,QAAS4Q,MACX,GAGF7C,MAAO,CAAC,iBAAkB,OAAQ,MAAM,EAExCtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAE5B,MAAMmR,EAASpF,EAAAA,IAAa7M,EAAM4Q,OAAO,EAGzChD,EAAAA,MACE,IAAM5N,EAAM4Q,QACXpP,GAAQ,CACPyQ,EAAO5R,MAAQmB,CACjB,CACF,EAGA,MAAMq6B,EAAW7zB,WAAS,IAAOhI,EAAM27B,aAAe,GAAGp8B,EAAS,iBAAmBA,EAAU,EAIzFu8B,EAAuBt6B,GAAiB,CAC5CyQ,EAAO5R,MAAQmB,EACf4M,EAAK,iBAAkB5M,CAAG,CAC5B,EAEMu6B,EAAaA,IAAM,CACvB3tB,EAAK,OAAQpO,EAAMslB,UAAU,CAC/B,EAEM0W,EAAaA,IAAM,CACvB5tB,EAAK,OAAQpO,EAAMslB,UAAU,CAC/B,EAEM2W,EAAwBh5B,GAAkB,CAC9CA,EAAE6d,gBAAe,CAQnB,EAEMob,EAAmBA,IAAAn7B,EAAAA,YAAA,OAAA,CAAA,MAAA,wBAAA,CAEpBf,EAAMiX,OAASjX,EAAM2N,MAAK5M,EAAAA,YAAAkI,GAAA,CAAA,SAAA,KAAA,SAAA,aAAA,IAAA,CAAA,CAAA,EAS/B,MAAO,IAAAlI,EAAAA,YAAA,MAAA,CAAA,MAEIxB,GAAS,QACP08B,GAAoB,CAAAl7B,EAAAA,YAAAo7B,YAAA,CAAA,IAEtBn8B,EAAMC,MAAQ,aAAY,QACtBgS,EAAO5R,MAAK,mBACHy7B,EAAmB,MAC9B97B,EAAM2N,MAAK,UACP3N,EAAM07B,UAAS,QACjB17B,EAAMqV,QAAO,UACX,GAAI,YACF,cAAcwmB,EAASx7B,KAAK,GAAE,WAAA,iBAAA,gBAE5B07B,EAAU,gBACVC,CAAU,EAAA,CAUvB57B,QAASA,IAAAA,OAAMU,OAAAA,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,IACf4N,UAAWA,IAAMwtB,EAAgB,EAAE,CAAA,CAAA,CAK7C,CACF,CAAC,qCClJGE,GAAkB,CACtB,QAAQx8B,EAAgB,OACtBA,EAAI,WAAUwB,EAAAi7B,GAAU,OAAV,KAAAj7B,EAAkB,YAAai7B,EAAS,CACxD,CACF,ECWQ,CAAEj9B,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,OAAO,0BAEP,CAC7BW,KAAM,UACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXL,KAAM,CACJG,KAAMC,OACNC,QAAS4Q,QAEXD,KAAM,CACJ7Q,KAAMC,OACNC,QAAS,WAEXC,MAAO,CACLH,KAAM,CAACC,OAAQG,OAAQG,OAAO,EAC9BL,QAAS4Q,QAEXiG,MAAO,CACL/W,KAAM,CAACC,OAAQG,OAAQG,OAAO,EAC9BL,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACNL,QAAS,IAEX8W,OAAQ,CACNhX,KAAMO,QACNL,QAAS,EACX,GAGF+N,MAAO,CAAC,oBAAqB,QAAQ,EAErCtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAE5B,MAAM6Q,EAAaC,EAAAA,gBAAgB,MAAM,EACnC0qB,EAAazvB,EAAAA,IAAI7M,EAAMK,KAAK,EAC5Bk8B,EAAYv0B,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAG9G/D,EAAAA,MACE,IAAM5N,EAAMK,MACX2V,GAAW,CACVsmB,EAAWj8B,MAAQ2V,CACrB,CACF,EAGA,MAAMqB,EAAgB7V,GAAqB,CACzC86B,EAAWj8B,MAAQmB,EACnB4M,EAAK,oBAAqB5M,CAAG,CAC/B,EAEMyU,EAAgBzU,GAAqB,CACzC4M,EAAK,SAAU5M,CAAG,CACpB,EAGA,MAAO,IAAA,OAAAT,OAAAA,EAAAA,YAAAw2B,UAAA,CAAA,WAES+E,EAAWj8B,MAAK,sBACPgX,EAAY,KAC3BrX,EAAMD,KAAI,OACTC,EAAAA,EAAMK,QAANL,KAAAA,EAAeA,EAAMiX,MAAK,SACvBjX,EAAMwN,SAAQ,OAChBxN,EAAMkX,OAAM,SACVjB,EAAY,KAChBsmB,EAAUl8B,MAAK,MACdd,EAAS,EAAA,CAAAa,QAAAA,IAAAA,OAAA,QACfU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,EAGxB,CACF,CAAC,qCC7FG07B,GAAgB,CACpB,QAAQ58B,EAAgB,OACtBA,EAAI,WAAUwB,EAAAq7B,GAAQ,OAAR,KAAAr7B,EAAgB,UAAWq7B,EAAO,CAClD,CACF,ECUQ,CAAEr9B,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,cAAc,0BAEd,CAC7BW,KAAM,gBACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXC,MAAO,CACLH,KAAM,CAACC,OAAQG,OAAQG,OAAO,EAC9BL,QAAS4Q,QAEXiG,MAAO,CACL/W,KAAMC,OACNC,QAAS4Q,QAEXjR,KAAM,CACJG,KAAMC,OACNC,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACNL,QAAS,EACX,GAEF+N,MAAO,CAAC,oBAAqB,QAAQ,EACrCtN,MAAMb,EAAO,CAAEc,MAAAA,CAAM,EAAG,CAEtB,MAAMw7B,EAAazvB,EAAAA,IAAI7M,EAAMK,KAAK,EAGlCuN,OAAAA,EAAAA,MACE,IAAM5N,EAAMK,MACX2V,GAAW,CACVsmB,EAAWj8B,MAAQ2V,CACrB,CACF,EASO,IAAA,OAAAjV,OAAAA,EAAAA,YAAAy2B,gBAAA,CAAA,OAEIx3B,EAAAA,EAAMK,QAANL,KAAAA,EAAeA,EAAMiX,MAAK,WACrBqlB,EAAWj8B,MAAK,KACtBL,EAAMD,KAAI,SACNC,EAAMwN,SAAQ,MACjBjO,EAAS,EAAA,CAAAa,QAAAA,IAAAA,OAAA,QACfU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,EAGxB,CACF,CAAC,qCCxEG47B,GAAsB,CAC1B,QAAQ98B,EAAgB,OACtBA,EAAI,WAAUwB,EAAAu7B,GAAc,OAAd,KAAAv7B,EAAsB,eAAgBu7B,EAAa,CACnE,CACF,ECWQ,CAAEv9B,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,aAAa,0BAEb,CAC7BW,KAAM,eACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXC,MAAO,CACLH,KAAM,CAACC,OAAQG,OAAQG,OAAO,EAC9BL,QAAS4Q,QAEXD,KAAM,CACJ7Q,KAAMC,OACNC,QAAS4Q,QAEXiG,MAAO,CACL/W,KAAMC,OACNC,QAAS4Q,MACX,GAIF7C,MAAO,CAAC,oBAAqB,QAAQ,EAErCtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,OAE5B,MAAM6Q,EAAaC,EAAAA,gBAAgB,MAAM,EACnC0qB,EAAazvB,EAAAA,KAAkC7M,EAAAA,EAAMK,QAANL,KAAAA,EAAegR,MAAS,EACvE4rB,EAAiB50B,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAGnH/D,EAAAA,MACE,IAAM5N,EAAMK,MACX2V,GAAW,CACVsmB,EAAWj8B,MAAQ2V,CACrB,CACF,EAGA,MAAMqB,EAAgB7V,GAA0B,CAC9C86B,EAAWj8B,MAAQmB,EACnB4M,EAAK,oBAAqB5M,CAAG,CAC/B,EAEMyU,EAAgBzU,GAA0B,CAC9C4M,EAAK,SAAU5M,CAAG,CACpB,EAGA,MAAO,IAAAT,EAAAA,YAAAs2B,eAAA,CAAA,MAEI93B,GAAS,aACJS,EAAMiX,MAAK,WACXqlB,EAAWj8B,MAAK,sBACPgX,EAAY,KAC3BulB,EAAev8B,MAAK,SAChB4V,CAAY,EAAA,CAAA7V,QAAAA,IAAAA,OAAA,QACrBU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,CAGxB,CACF,CAAC,qCC/EG+7B,GAAqB,CACzB,QAAQj9B,EAAgB,OACtBA,EAAI,WAAUwB,EAAA07B,GAAa,OAAb,KAAA17B,EAAqB,eAAgB07B,EAAY,CACjE,CACF,ECUQ,CAAE19B,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,KAAK,EAEpC29B,qBAA+B,CAC7Bh9B,KAAM,QACNC,MAAO,CACLg9B,OAAQ,CACN98B,KAAMI,OACNF,QAAS,GAEXsE,IAAK,CACHxE,KAAMC,OACNC,QAAS,KACX,GAEFS,MAAMb,EAAO,CAAEc,MAAAA,CAAM,EAAG,CACtB,MAAO,IAAAC,EAAAA,YAAA6xB,QAAA,CAAA,MAEIrzB,GAAS,OACRS,EAAMg9B,OAAM,IACfh9B,EAAM0E,GAAG,EAAA,CAAAtE,QAAAA,IAAAA,OAAA,QACbU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,CAGxB,CACF,CAAC,ECvCGm8B,GAAc,CAClB,QAAQr9B,EAAgB,OACtBA,EAAI,WAAUs9B,EAAAA,GAAM,OAANA,KAAAA,EAAc,QAASA,EAAK,CAC5C,CACF,uFCUE,KAAM,CAAE,aAAA99B,CAAA,EAAiBE,YAAA,EAEnBC,EAAYH,EAAa,YAAY,EAMrC,CAAE,OAAA+9B,EAAQ,aAAAC,CAAA,EAAiBC,iBAAA,EAE3BC,EAAmB,IAAM,CAC7BH,EAAA,CACF,0EAIA10B,EAAAA,mBAIM,MAAA,CAHH,uBAAOhJ,QAAAF,CAAA,CAAS,EAChB,QAAO+9B,CAAA,GACRv8B,EAAAA,YAAuEw6B,EAAA,CAA9D,YAAW97B,EAAAA,MAAA29B,CAAA,EAAY,kBAAA,YAAA,4ECjC9BG,GAAqB,CACzB,QAAQ39B,EAAgB,OACtBA,EAAI,WAAUwB,EAAAo8B,GAAa,OAAb,KAAAp8B,EAAqB,eAAgBo8B,EAAY,CACjE,CACF,ECaQ,CAAEp+B,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,YAAY,0BACZ,CAC7BW,KAAM,cACNC,MAAO,CACLy0B,OAAQ,CACNv0B,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,EACX,GAEFS,MAAMb,EAAO,CAAEc,MAAAA,CAAM,EAAG,OAEtB,MAAMqL,EAAWC,GAAAA,YAAW,EACtB,CAAEO,EAAAA,GAAMzN,GAAa,EAErB0R,EAAU/D,EAAAA,IAAI7M,EAAMy0B,MAAM,EAC1BnD,EAAwBmM,EAAAA,OAA2B,wBAAyB5wB,EAAAA,IAAI,EAAI,CAAC,EAErFsE,EAAUssB,EAAAA,OAAO,SAAS,EAEhC,IAAIC,EADapvB,EAAAA,qBAEjB,KAAOovB,KAAYA,EAAAA,EAASx9B,OAATw9B,YAAAA,EAAe39B,QAAS,UAAU29B,EAAWA,GAAAA,YAAAA,EAAU7zB,OAE1E,MAAM8zB,EAAY9wB,EAAAA,IAAW,EAAE,EAEzB6nB,EADiBvoB,EAASwoB,iBACU,EAAI,EAAI,EAElDvU,EAAAA,UAAU,IAAM,CACdpB,EAAAA,SAAS,IAAM,CAEb2e,EAAUt9B,MAAQq9B,EAAS3qB,QAAQ6qB,MACrC,CAAC,CACH,CAAC,EAUD,MAAMC,EAAeA,IAAM,CACzBvM,EAAsBjxB,MAAQ,GAC9BuQ,EAAQvQ,MAAQ,EAClB,EAMMy9B,EAAeA,IAAM,CACzBxM,EAAsBjxB,MAAQ,GAC9BuQ,EAAQvQ,MAAQ,EAClB,EAMM09B,EAAkB/1B,EAAAA,SAAS,IAAM,SACrC,GAAI,GAAC21B,EAAAA,EAAUt9B,QAAVs9B,MAAAA,EAAiB/qB,QAAQ,OAAO,KACrC,MAAMorB,EAAmB,CAAA,EACnB9f,EAAc/R,EAAS+R,YACvBoD,EAAanV,EAASmV,WACtB2c,IAAcn9B,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,GACpB,GAAIm9B,KACFA,GAAYzzB,QAAS9E,GAAU,CAC7B,MAAM4Z,EAAY5Z,EAAM1F,MAClBE,EAAOwF,EAAMxF,KACnB,GAAI,OAAOA,GAAS,UAAY,SAAUA,GAAQA,EAAKH,OAAS,WAAY,CAC1E,IAAI8Q,EAAOpL,GAAaC,CAAK,EACzBw4B,EAAgB,GAEhBrtB,IAASlE,EAAE,kBAAkB,GAC3BuR,IAAarN,EAAOlE,EAAE,mBAAmB,GAC7CuxB,EAAgB,GACZ5e,IACFA,EAAUzO,KAAOA,EACjByO,EAAUxO,MAAQnE,EAAE,kBAAkB,EAClC2U,IAAYhC,EAAUrb,KAAO,kBACjCqb,EAAUhO,QAAU,WAEbT,IAASlE,EAAE,gBAAgB,GAChCuR,IAAarN,EAAOlE,EAAE,iBAAiB,GAC3CuxB,EAAgB,GACZ5e,IACFA,EAAUzO,KAAOA,EACjByO,EAAUxO,MAAQnE,EAAE,gBAAgB,EAChC2U,IAAYhC,EAAUrb,KAAO,kBACjCqb,EAAUhO,QAAU,WAEbT,IAASlE,EAAE,iBAAiB,GACjCuR,IAAarN,EAAOlE,EAAE,kBAAkB,GAC5CuxB,EAAgB,GACZ5e,IACFA,EAAUzO,KAAOA,EACjByO,EAAUxO,MAAQnE,EAAE,iBAAiB,EACjC2U,IAAYhC,EAAUrb,KAAO,kBACjCqb,EAAUhO,QAAU,WAEbT,IAASlE,EAAE,iBAAiB,IACjCuR,IAAarN,EAAOlE,EAAE,kBAAkB,GACxC2S,IACFA,EAAUzO,KAAOA,EACjByO,EAAUxO,MAAQnE,EAAE,iBAAiB,EACjC2U,IAAYhC,EAAUrb,KAAO,uBACjCqb,EAAUhO,QAAU,UAIpB4sB,GAAiB5e,GAAaA,EAAUpf,OAAS8Q,SAAWsO,EAAUpf,KAAO,WAE7Eof,IAAWA,EAAUnO,QAAUA,EACrC,CACA6sB,EAAU5T,KAAK1kB,CAAK,CACtB,CAAC,EAIkBi4B,EAAUt9B,MAAMgK,OAAQqI,GAAM,CAC/C,GAAIA,EAAEmhB,IAAInzB,SAAW,GAAM,MAAO,EACpC,CAAC,EAEckS,OAAS8hB,GAAgB,CACtC,IAAIyJ,EAAa,GAAGxxB,EAAE,kBAAkB,CAAC,GACrCuR,IAAaigB,EAAa,GAAGxxB,EAAE,kBAAkB,CAAC,OACtD,IAAIyxB,EAAa,GAAGzxB,EAAE,kBAAkB,CAAC,GACrCuR,IAAakgB,EAAa,GAAGzxB,EAAE,kBAAkB,CAAC,OACtD,MAAM8nB,EAAK1zB,EAAAA,YAAA0T,GAAA,CAAA,KAED,GAAI,QAAA,SAAA,QAED7D,EAAQvQ,MAAK,QACbw9B,CAAY,EAAA,CAAAz9B,QAAAA,IAAA,CACpB+9B,EAAUtH,EAAAA,gBAAA,IAAA,EAAA91B,EAAAA,YAAAkI,GAAA,CAAA,SAAA,KAAA,SAAA,WAAA,EAAA,IAAA,CAAA,EAAA,EAOf+0B,EAAU5T,KAAKqK,CAAM,EACrB,MAAM4J,EAAKt9B,EAAAA,YAAA0T,GAAA,CAAA,KAED,GAAI,QAAA,SAAA,QAED,CAAC7D,EAAQvQ,MAAK,QACdy9B,CAAY,EAAA,CAAA19B,QAAAA,IAAA,CACpBg+B,EAAUvH,EAAAA,gBAAA,IAAA,EAAA91B,EAAAA,YAAAkI,GAAA,CAAA,SAAA,KAAA,SAAA,SAAA,EAAA,IAAA,CAAA,EAAA,EAOf+0B,EAAU5T,KAAKiU,CAAM,CACvB,CAGF,OAAOL,CACT,CAAC,EAID,MAAO,IAAAj9B,EAAAA,YAAA,MAAA,CAAA,MAAkBxB,IAAS,CAAGw+B,EAAgB19B,KAAK,CAAA,CAC5D,CACF,CAAC,qCCzLGi+B,GAAoB,CACxB,QAAQ1+B,EAAgB,OACtBA,EAAI,WAAUwB,EAAAm9B,GAAY,OAAZ,KAAAn9B,EAAoB,cAAem9B,EAAW,CAC9D,CACF,ECQaC,GAAqB,CAAC30B,EAA2BH,EAAgC,CAAA,IAA2B,CACvH,MAAM+0B,EAAe5xB,EAAAA,IAAA,EAEf6xB,EAAkBh1B,EAAS,OAAQ7C,GAAM,OAE7C,QADazF,EAAAyF,EAAE,OAAF,KAAAzF,EAAU,CAAA,GACd,OAAe,IAGtBq9B,EAAa,MAAQ53B,EACd,GAEX,CAAC,EAGD,OAAI63B,EAAgB,SAAW,EACtB,CACL,gBAAiB,GACjB,aAAcrxB,EAAAA,MAAMoxB,CAAY,CAAA,EAI/BC,EAAgB,OAQd,CACL,gBAAiB,GACjB,aAAcrxB,EAAAA,MAAMoxB,CAAY,CAAA,GAThCA,EAAa,MAAQ3zB,GAAAP,GAAA,GAAKV,GAAL,CAAa,KAAM,GAAI,kBAAmB,EAAA,GACxD,CACL,gBAAiB,GACjB,aAAcwD,EAAAA,MAAMoxB,CAAY,CAAA,EAQtC,EC7CaE,GAAqBA,KAoBzB,CACLC,gBApBuBhzB,GAAoB,CAC3C,KAAM,CAAEe,EAAAA,GAAMkO,WAAO,EACrB,GAAI,CAACjP,EACH,OAAA7K,EAAAA,YAAA,OAAA,CAAA,MAAA,mEAAA,EAAA,CAAA81B,EAAAA,gBAAA,UAAA,CAAA,CAAA,EAEF,KAAM,CAAElpB,MAAAA,EAAQ,mBAAoB1J,KAAAA,CAAK,EAAI2H,EAE7C,OAAO3H,EAAIlD,EAAAA,YAAAijB,EAAAA,SAAA,KAAA,CAAAjjB,EAAAA,YAAAkI,GAAA,CAAA,SAGK2C,EAAK3H,MAAQ,GAAE,UAAA,aAAA,EAAA,IAAA,EAAAlD,EAAAA,YAAA,OAAA,CAAA,MAAA,mEAAA,EAAA,CAEsD4L,EAAEgB,CAAe,CAAC,KAAA5M,EAAAA,YAAA,OAAA,CAAA,MAAA,mEAAA,EAAA,CAGpB4L,EAAEgB,CAAe,CAAC,CAAA,CAEvG,ICHI,CAAEvO,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,SAAS,EAElC,CAAEw/B,gBAAAA,EAAgB,EAAID,GAAkB,EAEjCE,GAAqBC,GAEhC,CACE,MAAMC,EAAiBA,CAAChyB,EAA8BtF,EAAa,MAC7D,CAACsF,GAAW,CAACA,EAAQ6F,OAAe,KACjC7F,EACJ1C,OAAQxD,UAAM,SAACA,EAAAA,EAAE+E,OAAF/E,MAAAA,EAAQnG,QAAM,EAC7B6M,IAAK1G,GAAM,OACV,MAAM+E,GAAO/E,EAAAA,EAAE+E,OAAF/E,KAAAA,EAAU,CAAA,EACjB,CAAEm4B,gBAAAA,EAAiBP,aAAAA,GAAiBD,GAAmB33B,EAAGA,EAAE6C,QAAQ,EACpEu1B,EAAWj8B,GAAM6D,EAAEnF,IAAI,EAAIvB,OAAO0G,EAAEnF,IAAI,EAAI8F,GAAYC,EAAYZ,EAAEnF,IAAI,EAChF,OAAIs9B,IAAoB,EAACP,GAAAA,MAAAA,EAAc/0B,WAAY+0B,GAAAA,MAAAA,EAAcS,oBAAsB,EAACtzB,GAAAA,MAAAA,EAAMuzB,YAC5Fp+B,EAAAA,YAAAq+B,EAAAA,WAAA,CAAA,MACqBX,EAAej3B,GAAYy3B,EAAUR,EAAa/8B,IAAI,EAAIu9B,CAAQ,EAAA,CAEjF7+B,QAASA,IAAAA,OAAMw+B,OAAAA,GAAgBH,IAAgBA,EAAAA,EAAa7yB,OAAb6yB,KAAAA,EAA6B7yB,CAAI,EAAC,CAAA,EAKvF7K,EAAAA,YAAAs+B,EAAAA,UAAA,CAAA,MAEWJ,EAAQ,WAAA,GAAA,MAAA,YAAA,YAGF5xB,EAAAA,MAAMyxB,CAAQ,IAAM,WAAa,GAAGv/B,EAAS,oBAAsB,EAAE,EAAA,CAEhFoO,MAAOA,IAAMixB,GAAgBhzB,CAAI,EACjCxL,QAASA,IAAM2+B,EAAel4B,EAAE6C,SAAWu1B,CAAQ,CAAC,CAAA,CAK9D,CAAC,EAEL,MAAO,CACLF,eAAAA,EAEJ,ECxCmC,SAAAlzB,GAAAC,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAC,OAAAC,UAAA1K,SAAA2K,KAAAH,CAAA,IAAA,mBAAA,CAAAI,EAAAA,QAAAJ,CAAA,CAAA,CAEnC,KAAM,CAAE1M,aAAAA,EAAa,EAAIE,YAAQ,EAE3BC,GAAYH,GAAa,SAAS,0BAET,CAC7BW,KAAM,YACNC,MAAO,CACLs/B,WAAY,CACVp/B,KAAMuR,SACNrR,QAAS4Q,MACX,GAEFnQ,MAAMb,EAAO,CACX,MAAMmM,EAAWC,GAAAA,YAAW,EACtBmzB,EAASv3B,EAAAA,SAAS,IAAMmE,EAASqzB,SAAS,EAC1C,CAAEpV,KAAAA,EAAM3d,aAAAA,GAAiBC,aAAS,EAClCL,EAAYC,GAAAA,cAAa,EACzBwyB,EAAW92B,EAAAA,SAAS,IACO,CAAC,UAAW,UAAW,SAAS,EAElDmT,SAAS9N,QAAMkyB,CAAM,CAAC,EAAU,WACjC,YACb,EAEKxyB,EAAU/E,EAAAA,SAAS,KAAOqF,EAAAA,MAAMkyB,CAAM,IAAM,UAAYlzB,EAAUW,WAAkC,EAIpGitB,EAAWjyB,EAAAA,SAAS,IAAMmE,EAASszB,gBAAgB,EAEnDC,EAAuB13B,EAAAA,SAAS,IAAMmE,EAASwzB,uBAAuB,EAEtEC,EAAa53B,EAAAA,SAAS,IAAM,CAChC,KAAM,CAAE4D,KAAAA,EAAMlK,KAAAA,CAAK,EAAI2L,EAAAA,MAAMZ,CAAY,EAEzC,OAAIb,EAAKg0B,WAAmBh0B,EAAKg0B,WAE1Bl+B,CACT,CAAC,EAEK49B,EAAcjsB,GAAkB,OAIpC,IAHArT,EAAAA,EAAMs/B,aAANt/B,MAAAA,EAAAA,KAAAA,EAAmBqT,GAGfrQ,GAAMqQ,CAAK,EAAG,CAChB6M,OAAO2f,KAAKxsB,CAAK,EACjB,MACF,CACA+W,EAAK/W,CAAK,CACZ,EAEMysB,EAAaA,IAAA/+B,EAAAA,YAAAg/B,SAAA,CAAA,cAEA1yB,EAAAA,MAAMuyB,CAAU,EAAC,KAC1BvyB,EAAAA,MAAMyxB,CAAQ,EAAC,SACXzxB,EAAAA,MAAMkyB,CAAM,IAAM,OAASlyB,EAAAA,MAAMkyB,CAAM,IAAM,UAAY,GAAQlyB,EAAAA,MAAM4sB,CAAQ,EAAC,aAC5E5sB,EAAAA,MAAMkyB,CAAM,IAAM,MAAQ,GAAQlyB,EAAAA,MAAMqyB,CAAoB,EAAC,gBAAA,4BAAA,UAAA,8BAAA,gBAAA,qCAAA,YAI9DryB,EAAAA,MAAMyxB,CAAQ,IAAM,WAAa,GAAGv/B,EAAS,oBAAsB,GAAGA,EAAS,sBAAqB,SACvG+/B,CAAU,EAAA,CAElBl/B,QAASA,IAAM,CACb,KAAM,CAAE2+B,eAAAA,CAAe,EAAIF,GAAkBC,CAAQ,EAErD,OAAOC,EAAe1xB,QAAMN,CAAO,CAAC,CACtC,EAAC,EAIDizB,EAAiBA,IAAM,CAAA,IAAAlyB,EAC3B,OAAIT,EAAAA,MAAMkyB,CAAM,IAAM,MAAcO,EAAU,EACzC/+B,EAAAA,YAAAk/B,EAAAA,YAAA,KAAAp0B,GAAAiC,EAAqBgyB,EAAU,CAAE,EAAAhyB,EAAA,CAAA1N,QAAAA,IAAA,CAAA0N,CAAA,CAAA,CAAA,CACxC,EACA,MAAO,IAAA/M,EAAAA,YAAA,MAAA,CAAA,GAAA,aAAA,MAGI,CACL,GAAGxB,EAAS,IAAIA,EAAS,KAAK8N,QAAMyxB,CAAQ,CAAC,GAC7C,mEACA,CACE,iCAAkCzxB,EAAAA,MAAM4sB,CAAQ,GAAK5sB,EAAAA,MAAMkyB,CAAM,IAAM,UACvE,iCAAkC,CAAClyB,EAAAA,MAAM4sB,CAAQ,GAAK5sB,EAAAA,MAAMkyB,CAAM,IAAM,UACzE,GACF,CACAS,EAAc,CAAE,CAAA,CAGvB,CACF,CAAC,qCC9GGE,GAAkB,CACtB,QAAQtgC,EAAgB,OACtBA,EAAI,WAAUwB,EAAA++B,GAAU,OAAV,KAAA/+B,EAAkB,YAAa++B,EAAS,CACxD,CACF,ECPAC,GAAe,uiuBCiBb,KAAM,CAAE,aAAAhhC,CAAA,EAAiBE,YAAA,EACnBC,EAAYH,EAAa,MAAM,EAE/B+M,EAAWC,GAAAA,YAAA,EAEXiV,EAAOxU,EAAAA,IAAI,EAAI,EACfc,EAAQ3F,EAAAA,SAAS,IAAMmE,EAAS,QAAQ,EACxCozB,EAASv3B,EAAAA,SAAS,IAAMmE,EAAS,SAAS,EAC1CgS,EAAgBnW,EAAAA,SAAS,IAAMmE,EAAS,gBAAgB,EAE9DyB,OAAAA,EAAAA,MACE,IAAMuQ,EAAc,MACnB8b,GAAsB,CACrB,GAAI5sB,EAAAA,MAAMkyB,CAAM,IAAM,WAAalyB,EAAAA,MAAMkyB,CAAM,IAAM,UAAW,CAC9Dle,EAAK,MAAQ,GACb,MACF,CACAA,EAAK,MAAQ,CAAC4Y,CAChB,CAAA,EAGFrsB,EAAAA,MACE,IAAM2xB,EAAO,MACZA,GAAW,CACNA,IAAW,OAASA,IAAW,YAAgB,MAAQ,GAClDlyB,EAAAA,MAAM8Q,CAAa,EAAGkD,EAAK,MAAQ,KAClC,MAAQ,EACpB,CAAA,EAGFjB,EAAAA,UAAU,IAAM,CACV/S,EAAAA,MAAM8Q,CAAa,IAAGkD,EAAK,MAAQ,GACzC,CAAC,yEAID5Y,qBAmBM,MAAA,KAAA,CAlBJ1H,EAAAA,YAiBc0jB,EAAA,CAhBX,MAAKI,EAAAA,eAAA,CAAGplB,EAAAA,MAAAF,CAAA,EAAWggC,EAAA,qBAA0B9/B,EAAAA,MAAAF,CAAA,CAAS,QAAA,GAAA,4GAAA,CAAA,EACvD,GAAG,GAAA,qBACH,IAEgF,aAFhFoJ,EAAAA,mBAEgF,MAAA,CAD9E,IAAAy3B,GACA,MAAM,qEAAA,YAEA/e,EAAA,qBADR5Y,EAAAA,mBAUM,MAAA,OARH,MAAKoc,EAAAA,eAAA,+HAAqK0a,EAAA,QAAM,gDAAmEA,EAAA,QAAM,WAAkBA,EAAA,QAAM,OAAcA,EAAA,QAAM,SAAA,uBAOnS5xB,EAAA,KAAK,EAAA,CAAA,yDClEV0yB,GAAsB,CAC1B,QAAQzgC,EAAgB,OACtBA,EAAI,WAAU0gC,EAAAA,GAAc,OAAdA,KAAAA,EAAsB,gBAAiBA,EAAa,CACpE,CACF,ECUQ,CAAElhC,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,WAAW,0BACX,CAC7BW,KAAM,aACNC,MAAO,CACL4Q,QAAS,CACP1Q,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,EACX,GAEFS,MAAMb,EAAO,CAAEc,MAAAA,CAAM,EAAG,CAEtB,MAAMqL,EAAWC,GAAAA,YAAW,EACtBiC,EAAWC,EAAAA,mBAAkB,EAC7B,CAAE3B,EAAAA,GAAMzN,GAAa,EAIrBqhC,EAAiBA,IAAM,OAC3B,MAAMC,EAAoB,CAAA,EACpBC,GAAe3/B,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,GACrB,GAAI2/B,EAAc,CAChB,MAAMp1B,EAAagD,GAAAA,YAAAA,EAAUxE,OACvBsH,EAAU9F,GAAAA,YAAAA,EAAYzD,MAAM,YAE5BsW,EAAc/R,EAAS+R,YACvBoD,EAAanV,EAASmV,YACLmf,EAAa,CAAC,EAAE/2B,UAAwB,CAAA,GACjDc,QAAS9E,GAAiB,OACtC,MAAM4Z,EAAY5Z,EAAM1F,OAAS,CAAA,EACjC,GAAI4F,GAAaF,CAAK,IAAM,WAAY,CACtC,MAAMmL,EAAOpL,GAAaC,CAAK,EAC3BmL,EAAK8B,QAAQhG,EAAE,eAAe,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,cAAc,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IACvKkE,IAASlE,EAAE,cAAc,GAAKuR,GAChCoB,EAAUzO,KAAOlE,EAAE,eAAe,EAClC2S,EAAUxO,MAAQD,GACbyO,EAAUzO,KAAOA,EACpByQ,IAAYhC,EAAUrb,KAAO,wBACjCqb,EAAUhO,QAAU,QACXgO,EAAUhO,UAAY,UAC3BgQ,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUzO,KAAOA,GACRA,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IAC7C2U,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUhO,QAAU,UACpBgO,EAAUzO,KAAOlE,EAAE,kBAAkB,GAC5BkE,EAAK8B,QAAQhG,EAAE,2BAA2B,CAAC,IAAM,IACtD2U,IAAYhC,EAAUrb,KAAO,uCACjCqb,EAAUhO,QAAU,oBACXT,EAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAE9C2U,IAAYhC,EAAUrb,KAAO,sCACjCqb,EAAUhO,QAAU,WACpBgO,EAAUzO,KAAOA,GACRA,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAE5C2U,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUhO,QAAU,WACpBgO,EAAUzO,KAAOA,GACRA,EAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IAE/C2U,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,aACXT,EAAK8B,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,IAE3C2U,IAAYhC,EAAUrb,KAAO,mCACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,SACXT,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IAE7C2U,IAAYhC,EAAUrb,KAAO,mCACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,WACXgO,EAAUhO,UAAY,UAE3BgQ,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,UACXT,EAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAE9C2U,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,YACXT,EAAK8B,QAAQhG,EAAE,cAAc,CAAC,IAAM,IAEzC2U,IAAYhC,EAAUrb,KAAO,iCACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,OACXT,EAAK8B,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,IAE3C2U,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,SACXT,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAC5C2U,IAAYhC,EAAUrb,KAAO,0BACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,UACXT,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,IACzF2U,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUzO,KAAOA,EACjByO,EAAUhO,QAAU,WACXT,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUhO,QAAU,WACXT,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAChD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUhO,QAAU,UAObT,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,YAAY,CAAC,IAAM,IACtF2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUhO,QAAU,UACXT,EAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUhO,QAAU,YACXT,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQ,IAAI,IAAM,IAC7E2M,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,2BACjCqb,EAAUhO,QAAU,UACXT,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IAC3I2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,kBACjCqb,EAAUhO,QAAU,UACXT,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAC1I2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,wBACjCqb,EAAUhO,QAAU,UACXT,EAAK8B,QAAQhG,EAAE,eAAe,CAAC,IAAM,IAC9C2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUhO,QAAU,UACXT,EAAK8B,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,IAC/C2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,mCACjCqb,EAAUhO,QAAU,OACXT,EAAK8B,QAAQhG,EAAE,cAAc,CAAC,IAAM,IAC7C2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,6BACjCqb,EAAUhO,QAAU,OACXT,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,kCACjCqb,EAAUhO,QAAU,OACXT,EAAK8B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,GAC/C2U,EAEFhC,EAAUrb,KAAO,iCACV4M,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,KAE3C2U,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUhO,QAAU,MACpBgO,EAAUzO,KAAOA,GAEVA,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IAAMkE,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAC9F2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUhO,QAAU,UACXT,EAAK8B,QAAQhG,EAAE,eAAe,CAAC,IAAM,IAC9C2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,mCACjCqb,EAAUhO,QAAU,QACXT,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,+BACjCqb,EAAUhO,QAAU,WACXT,EAAK8B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,IAChD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUhO,QAAU,WACXT,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,0BACjCqb,EAAUhO,QAAU,WACXT,EAAK8B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,IAClD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,4BACjCqb,EAAUhO,QAAU,WACXT,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IACjD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,eACjCqb,EAAUhO,QAAU,WACXT,EAAK8B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,KACjD2S,EAAUzO,KAAOA,EACbyQ,IAAYhC,EAAUrb,KAAO,kBACjCqb,EAAUhO,QAAU,WAEtBgO,EAAUnO,QAAUA,CACtB,SAAWvL,GAAaF,CAAK,IAAM,aAAc,CAC/C,MAAMg7B,GAAah7B,EAAAA,GAAAA,YAAAA,EAAOgE,WAAPhE,YAAAA,EAAkB,GAC/BmL,EAAOpL,GAAai7B,CAAU,EACpCphB,EAAUzO,KAAOA,EACjByO,EAAUrb,MAAOy8B,GAAAA,YAAAA,EAAY1gC,MAAMiE,OAAQ,EAC7C,CACAu8B,EAASpW,KAAK1kB,CAAK,CACrB,CAAC,CACH,CACA,OAAO86B,GAAY,CAAA,CACrB,EAMA,MAAO,IAAOxgC,EAAM4Q,QAAM7P,EAAAA,YAAA,MAAA,CAAA,MAAgBxB,EAAS,EAAA,CAAGghC,GAAgB,CAAA,EAAU,IAClF,CACF,CAAC,qCCtNK,CAAEnhC,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,KAAK,0BAEL,CAC7BW,KAAM,QACNC,MAAO,CACLE,KAAM,CACJA,KAAMC,OACNC,QAAS,WAEXugC,SAAU,CACRzgC,KAAMO,QACNL,QAAS,IAEXwgC,OAAQ,CACN1gC,KAAMC,OACNC,QAAS,SAEX2Q,KAAM,CACJ7Q,KAAMC,OACNC,QAAS,WAEXygC,MAAO,CACL3gC,KAAMO,QACNL,QAAS,EACX,GAIF+N,MAAO,CAAC,QAAS,OAAO,EAExBtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAE5B,MAAM6Q,EAAaC,EAAAA,gBAAgB,MAAM,EACnCkvB,EAAU94B,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,CAAU,EAAmB,EAItGmB,EAAetE,GAAsB,CACzCJ,EAAK,QAASI,CAAK,CACrB,EAEMyQ,EAAezQ,GAAiB,CACpCJ,EAAK,QAASI,CAAK,CACrB,EAGA,MAAO,IAAAzN,EAAAA,YAAAggC,QAAA,CAAA,KAEG/gC,EAAME,KAAI,KACV4gC,EAAQzgC,MAAK,MACZL,EAAM6gC,MAAK,SACR7gC,EAAM2gC,SAAQ,OAChB3gC,EAAM4gC,OAAM,MACbrhC,GAAS,QACPuT,EAAW,QACXmM,CAAW,EAAA,CAAA7e,QAAAA,IAAAA,OAAA,QACnBU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,GAAA,CAGxB,CACF,CAAC,qCCzDUkgC,GAAkBC,GAA4B,CACzD,MAAMC,EAAqB,CACzB,eAAgB,EAChB,eAAgB,GAChB,UAAW,EACX,UAAW,CAAA,EAEPC,EAAiBF,GAAMA,EAAG,eAAoBA,EAAG,eAAoB,EACrEG,EAAiBH,GAAMA,EAAG,eAAoBA,EAAG,eAAoB,GACrEI,EAAYJ,GAAMA,EAAG,UAAeA,EAAG,UAAe,EACtDK,EAAYL,GAAMA,EAAG,UAAeA,EAAG,UAAe,EAC5D,OAAAC,EAAS,eAAoBC,EAC7BD,EAAS,eAAoBE,EAC7BF,EAAS,UAAeG,EACxBH,EAAS,UAAeI,EACjBJ,CACT,EASaK,GAAW,SAAUC,EAAgBn3B,EAAiE,SACjH,MAAMo3B,EAA2D,CAAA,EAwDjE,GAvDKj/B,GAAQ6H,CAAM,GACjB,OAAO,KAAKA,CAAM,EAAE,QAASqI,GAAc,CACzC,IAAIlR,EAAc,GACdkgC,EAAK,OACT,GAAI,CAACl/B,GAAQ6H,EAAOqI,CAAC,CAAC,EAAG,CACvB,IAAIivB,EAAM,IACV,GAAI,OAAOt3B,EAAOqI,CAAC,GAAM,SACvB,GAAI,MAAM,QAAQrI,EAAOqI,CAAC,CAAU,EAAG,CAErC,IAAIkvB,EAAM,GACNvrB,EAAS,GACZhM,EAAOqI,CAAC,EAAY,QAASA,GAAM,CAC9BkvB,GACFA,GAAO,IAAMlvB,EAAE,MACf2D,GAAU,IAAM3D,EAAE,QAElBkvB,EAAMlvB,EAAE,MACR2D,EAAS3D,EAAE,MAEf,CAAC,EACDgvB,EAAKE,EACLpgC,EAAM6U,CACR,KAAO,CACL,MAAMxP,EAAIwD,EAAOqI,CAAC,EAClBgvB,EAAK76B,EAAE,MACPrF,EAAMqF,EAAE,KACV,CACFrF,EAAMA,EAAM,GACRA,EAAI,QAAQ,GAAG,EAAI,IAAGA,EAAMA,EAAI,QAAQ,KAAM,GAAG,GAEjDA,EAAI,QAAQ,GAAG,EAAI,GAAOmgC,IAAQ,MAAQA,IAAQ,WAAUA,EAAM,MACtE,MAAME,EAAKl+B,GAAO+O,CAAC,EACbovB,EAA6B,CACjC,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,OACJ,GAAI,OACJ,GAAI,MAAA,EAEN,IAAI5hC,EAAO,OACPA,IAAS,QAAUwS,EAAE,QAAQ,IAAI,GAAK,GAAKA,EAAE,QAAQ,IAAI,GAAK,KAAIxS,EAAO,UAE7E4hC,EAAU,GAAQpvB,EAClBovB,EAAU,GAAQD,EAClBC,EAAU,GAAQtgC,EAAI,KAAA,EACtBsgC,EAAU,GAAQJ,EAClBI,EAAU,GAAQH,GAAO,OACzBG,EAAU,GAAQ,OAClBA,EAAU,GAAQ5hC,EAClBuhC,EAAiB/uB,CAAC,EAAIovB,CACxB,CACF,CAAC,EAECN,EAAS,CACX,MAAMP,EAAe,CACnB,eAAgB,EAChB,eAAgB,GAChB,UAAW,EACX,UAAW,CAAA,EAEbA,EAAG,gBAAoB5d,GAAAjiB,EAAAogC,EAAQ,QAAR,YAAApgC,EAAgB,WAAhB,KAAAiiB,EAA+B,GACtDoe,EAAiB,SAAcT,GAAeC,CAAE,CAClD,CACA,OAAOQ,CACT,EAUaM,GAAiB,CAAC5uB,EAAsB9I,EAAyBm3B,IAAmE,SAC/I,MAAMC,EAA2D,CAAA,EAEjE,UAAW97B,KAAQwN,EAAU,CAC3B,MAAMjT,EAAOyF,EAAK,KAClB,GAAIzF,IAAS,QAAS,CACpB,MAAM4hC,EAA6B,CACjC,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,OACJ,GAAI,OACJ,GAAI,MAAA,EAEA,CAAE,OAAAE,EAAQ,MAAAtuB,EAAO,GAAAyW,EAAK,OAAQ,MAAA8X,EAAQ,GAAO,UAAA1uB,EAAW,SAAAC,CAAA,EAAa7N,EAC3E,GAAIq8B,IAAW,SAAU,SACzB,IAAIxgC,EAAM6I,EAAOqJ,CAAK,EAClBguB,EAAK,OAGT,GAFIl/B,GAAQhB,CAAG,GAEX,MAAM,QAAQA,CAAG,GAAOgB,GAAQhB,EAAI,CAAC,CAAC,EAAG,SAI7C,IAAImgC,EAAMxX,EACV,GAAIjqB,IAAS,MAAO,CAClB,GAAI,MAAM,QAAQsB,CAAG,EAAG,CAEtB,IAAIogC,EAAM,GACNvrB,EAAS,GACZ7U,EAAc,QAASkR,GAAM,CACxBkvB,GACFA,GAAO,IAAMlvB,EAAE,MACf2D,GAAU,IAAM3D,EAAE,QAElBkvB,EAAMlvB,EAAE,MACR2D,EAAS3D,EAAE,MAEf,CAAC,EACDgvB,EAAKE,EACLpgC,EAAM6U,CACR,SAAW9C,EAETmuB,EAAKlgC,EAAM,GACXA,EAAM+R,MACD,CACL,MAAM1M,EAAIrF,EACVkgC,EAAK76B,EAAE,MACPrF,EAAMqF,EAAE,KACV,CAEA86B,EAAM,GACR,MAAWzhC,IAAS,QAAUA,IAAS,YAAcA,IAAS,QACxDiqB,IAAO,SAAQwX,EAAM,MACrBnuB,IAAa,aAAeA,IAAa,iBAAmBA,IAAa,aAAeA,IAAa,gBAAchS,EAAOA,EAAc,KAAK,GAAG,IAC3ItB,IAAS,WAAUyhC,EAAM,KAEpC,IAAIO,EAAQhiC,EACRsT,IAAa,eAAc0uB,EAAQ,SAEvC1gC,EAAMA,EAAM,GACR,CAACwgC,GAAUxgC,EAAI,QAAQ,GAAG,EAAI,IAAGA,EAAMA,EAAI,QAAQ,KAAM,GAAG,GAE5DA,EAAI,QAAQ,GAAG,EAAI,GAAOmgC,IAAQ,MAAQA,IAAQ,WAAUA,EAAM,MAEtEA,EAAMA,EAAI,QAAQ,MAAO,MAAM,EAC/BA,EAAMA,EAAI,QAAQ,MAAO,MAAM,EAC/B,IAAIE,GAAKl+B,GAAO+P,CAAK,EAEjBmuB,GAAG,QAAQ,GAAG,EAAI,IAAGA,GAAKA,GAAG,QAAQ,IAAK,GAAG,GAE7CI,IAAU,KACRP,GAAMA,IAAO,SAAQA,EAAKA,EAAG,YAAA,GACjClgC,EAAMA,EAAI,YAAA,EAEVqgC,GAAK,SAAWA,GAAK,KAGvBC,EAAU,GAAQpuB,EAClBouB,EAAU,GAAQD,GAClBC,EAAU,GAAQtgC,EAAI,KAAA,EACtBsgC,EAAU,GAAQJ,EAClBI,EAAU,GAAQH,GAAO,OACzBG,EAAU,GAAQE,GAAU,OAC5BF,EAAU,GAAQI,GAAS,OAC3BT,EAAiB/tB,CAAK,EAAIouB,CAC5B,CACF,CAEA,GAAIN,EAAS,CACX,MAAMP,EAAe,CACnB,eAAgB,EAChB,eAAgB,GAChB,UAAW,EACX,UAAW,CAAA,EAEbA,EAAG,gBAAqB5d,GAAAjiB,EAAAogC,EAAQ,EAAE,QAAV,YAAApgC,EAAkB,WAAlB,KAAAiiB,EAA4C,GACpEoe,EAAiB,SAAcT,GAAeC,CAAE,CAClD,CACA,OAAOQ,CACT,EASaU,GAAe,CAAChvB,EAAsB9I,IAA6C,CAC9F,MAAMo3B,EAAmB,CAAA,EAEzB,GAAI,CACF,UAAW97B,KAAQwN,EAAU,CAC3B,MAAMjT,EAAOyF,EAAK,KAClB,GAAIzF,IAAS,QAAS,CACpB,KAAM,CAAE,OAAA8hC,EAAQ,MAAAtuB,EAAO,UAAAH,CAAA,EAAc5N,EACrC,GAAIq8B,IAAW,SAAU,SACzB,IAAIxgC,EAAM6I,EAAOqJ,CAAK,EAClBguB,EAAK,OACT,GAAyBlgC,GAAQ,KAAM,SACvC,GAAItB,IAAS,MACX,GAAIqT,EACF,GAAI,MAAM,QAAQ/R,CAAG,EAAG,CAEtB,IAAIogC,EAAM,GAEVpgC,EAAI,QAASkR,GAAM,CACjB,IAAI7L,EACA,OAAO6L,GAAM,SAAU7L,EAAI6L,EAAE,QACxBA,EAAI,GACTkvB,KAAY,IAAM/6B,EACjB+6B,EAAM/6B,CACb,CAAC,EACD66B,EAAKE,EACLpgC,EAAM,EACR,MAAW,OAAOA,GAAQ,UACxBkgC,EAAKlgC,EAAI,MACTA,EAAMA,EAAI,QAEVkgC,EAAKlgC,EAAM,GACXA,EAAM+R,WAED,MAAM,QAAQ/R,CAAG,EAAG,CAE3B,IAAIogC,EAAM,GACNvrB,EAAS,GACb7U,EAAI,QAASkR,GAAM,CACbkvB,GACFA,GAAO,IAAMlvB,EAAE,MACf2D,GAAU,IAAM3D,EAAE,QAElBkvB,EAAMlvB,EAAE,MACR2D,EAAS3D,EAAE,MAEf,CAAC,EACDgvB,EAAKE,EACLpgC,EAAM6U,CACR,MAAW,OAAO7U,GAAQ,UACxBkgC,EAAKlgC,EAAI,MACTA,EAAMA,EAAI,OAMVkgC,EAAKlgC,OAEPA,EAAMA,EAAM,GACZkgC,EAAKlgC,EAAM,GAEb,GAAIkgC,GAAO,KACT,MAAAjxB,GAAQ,IAAMiD,EAAQ,wBAAyB,OAAO,EAChD,IAAI,MAAM,IAAMA,EAAQ,uBAAuB,EAEnD,CAACsuB,GAAUN,EAAG,QAAQ,GAAG,EAAI,IAAGA,EAAKA,EAAG,QAAQ,KAAM,GAAG,GAC7D,MAAMG,EAAKr+B,GAAOkQ,CAAK,EAEvB+tB,EAAiBI,CAAE,EAAIH,CACzB,CACF,CACF,OAASrN,EAAO,CACd,cAAQ,IAAIA,CAAK,EACX,IAAI,MAAM,uBAAyBA,CAAK,CAChD,CACA,OAAOoN,CACT,EC/RMW,GAAY,CAAOC,EAAgB33B,IAA4BpH,GAAA,sBACnE,IAAI8B,EAAS,CAAA,EACb,aAAMi9B,EAAM33B,CAAI,EAAE,KAAMgB,GAAQ,CAC9BtG,EAASsG,EAAI,KACf,CAAC,EAEMtG,CACT,GAOMk9B,GAAS,CAAOD,EAAgB33B,EAAW63B,EAAS,GAAM9yB,IAA+BnM,GAAA,sBAC7F,IAAI8B,EAAS,CAAA,EACT8K,EACJ,GAAIT,EAAKS,EAAOT,MACX,CACH,KAAM,CAAE,WAAAE,CAAA,EAAeb,GAAW,cAAc,EACnCa,EAAW,MAAM,IACjB,QAASO,EAAO,OACxBA,EAAO,sBACd,CACA,aAAMmyB,EAAM33B,CAAI,EAAE,KAAMgB,GAAQ,CAC9BtG,EAASsG,EAAI,MACT62B,GAAQ9xB,GAAQP,EAAM,SAAS,CACrC,CAAC,EAEM9K,CACT,GAMMo9B,GAAa,CAAOhB,EAAca,EAAgB33B,IAAcpH,GAAA,sBACpE,IAAI8B,EAAS,CAAA,EACb,MAAM08B,EAAYP,GAASC,EAAS92B,CAAI,EACxC,OAAI82B,IACFA,EAAQ,iBAAmBM,EAC3BN,EAAQ,MAAQa,GAEdb,KAAiB,aAAA,EACrB,MAAMa,EAAMP,CAAS,EAClB,KAAMp2B,GAAQ,CACbtG,EAASsG,EAAI,KACf,CAAC,EACA,MAAO2oB,GAAU,CAChB5jB,GAAQ4jB,EAAO,OAAO,EACtB,QAAQ,IAAIA,CAAK,CACnB,CAAC,EACCmN,KAAiB,YAAA,EACdp8B,CACT,GAOMq9B,GAAoBC,GAA4Bp/B,GAAA,gCACpD,GAA6Bo/B,GAAY,KACvC,OAAAjyB,GAAQ,sBAAuB,OAAO,EAC/B,GAET,IAAIrL,EAAS,GACb,UAAWu9B,KAAUD,EAAS,CAE5B,MAAME,GAAgBxhC,EADFuhC,EAAO,EACO,UAAZ,YAAAvhC,EAAqB,SACrCyhC,EAAqB,MAAM,QAAQD,CAAa,EAAIA,EAAgB,CAAA,EAC1E,UAAWt3B,KAAWu3B,EACpB,KAAIxf,EAAA/X,GAAA,YAAAA,EAAS,OAAT,YAAA+X,EAAe,eAAgB,aAAc,CAC/C,MAAMyf,EAAUx3B,EAAQ,UAAU,QAAQ,UAAU,QAAQ,SAAS,CAAC,IAClEy3B,EAAAD,GAAA,YAAAA,EAAS,OAAT,YAAAC,EAAe,QAAS,WAC1B,MAAMD,EAAQ,UAAU,QACrB,SAAA,EACA,KAAK,IAAM,CAEZ,CAAC,EACA,MAAM,IAAM,CAEX19B,EAAS,GACT,QAAQ,OAAO,4BAA4B,CAC7C,CAAC,EACP,CACJ,CAEA,OAAOA,CACT,GAOM49B,GAAO,CAAOL,EAAsBN,EAAgBY,EAAQ,GAAMxzB,IAAiBnM,GAAA,gCACvF,GAA4Bq/B,GAAW,KACrC,OAAAlyB,GAAQ,sBAAuB,OAAO,EAC/B,GAET,IAAIrL,EAAS,CAAA,EACb,MAAM89B,EAAcP,EAAO,EACrBC,GAAgBxhC,EAAA8hC,EAAY,UAAZ,YAAA9hC,EAAqB,SACrCyhC,EAAqB,MAAM,QAAQD,CAAa,EAAIA,EAAgB,CAAA,EACpEzvB,EAAW+vB,EAAY,MAAM,SACnC,IAAIhzB,EACJ,GAAIT,EAAKS,EAAOT,MACX,CACH,KAAM,CAAE,WAAAE,CAAA,EAAeb,GAAW,cAAc,EACnCa,EAAW,MAAM,IACjB,QAASO,EAAO,OACxBA,EAAO,UACd,CACA,UAAW5E,KAAWu3B,EACpB,KAAIxf,EAAA/X,GAAA,YAAAA,EAAS,OAAT,YAAA+X,EAAe,eAAgB,aAAc,CAC/C,MAAMyf,EAAUx3B,EAAQ,UAAU,QAAQ,UAAU,QAAQ,SAAS,CAAC,EACtE,KAAIy3B,EAAAD,GAAA,YAAAA,EAAS,OAAT,YAAAC,EAAe,QAAS,SAC1B,GAAIE,IAAU,GAAO,CAGnB,MAAM54B,EADQy4B,EAAQ,MACD,MAIrB,IAAIK,EAAa,CAAA,EACjB,GAAI,CACFA,EAAahB,GAAahvB,EAAU9I,CAAM,EAC1C,MAAMg4B,EAAMc,CAAU,EACnB,KAAMz3B,GAAQ,CACbtG,EAASsG,EAAI,MACb+E,GAAQP,EAAM,SAAS,CACzB,CAAC,EACA,MAAOmkB,GAAU,CAChB5jB,GAAQ4jB,EAAO,OAAO,EACtB,QAAQ,IAAIA,CAAK,CACnB,CAAC,CACL,OAAQpxB,EAAA,CACN,OAAAwN,GAAQ,mBAAoB,OAAO,EAE5B,IACT,CACF,MACE,MAAMqyB,EAAQ,UAAU,QACrB,SAAA,EACA,KAAK,IAAYx/B,GAAA,sBAGhB,MAAM+G,EADQy4B,EAAQ,MACD,MAIrB,IAAIK,EAAa,CAAA,EACjB,GAAI,CACFA,EAAahB,GAAahvB,EAAU9I,CAAM,EAC1C,MAAMg4B,EAAMc,CAAU,EACnB,KAAMz3B,GAAQ,CACbtG,EAASsG,EAAI,MACb+E,GAAQP,EAAM,SAAS,CACzB,CAAC,EACA,MAAOmkB,GAAU,CAChB5jB,GAAQ4jB,EAAO,OAAO,EACtB,QAAQ,IAAIA,CAAK,CACnB,CAAC,CACL,OAAQpxB,EAAA,CACNwN,GAAQ,mBAAoB,OAAO,EACnC,MACF,CACF,EAAC,EACA,MAAM,IAAM,CAEX,QAAQ,OAAO,4BAA4B,EAC3CrL,EAAS,CAAA,CACX,CAAC,CACT,CAEF,OAAOA,CACT,GAOMg+B,GAAS,CAAOT,EAAsBl5B,EAAY44B,EAAiBY,EAAQ,GAAMxzB,IAAiBnM,GAAA,gCACtG,GAA4Bq/B,GAAW,KACrC,OAAAlyB,GAAQ,sBAAuB,OAAO,EAC/B,GAET,GAAIjO,GAAQiH,CAAE,EACZ,OAAAgH,GAAQ,aAAc,OAAO,EACtB,GAET,IAAIrL,EAAS,CAAA,EACb,MAAM89B,EAAcP,EAAO,EACrBC,GAAgBxhC,EAAA8hC,EAAY,UAAZ,YAAA9hC,EAAqB,SACrCyhC,EAAqB,MAAM,QAAQD,CAAa,EAAIA,EAAgB,CAAA,EACpEzvB,EAAW+vB,EAAY,MAAM,SACnC,IAAIhzB,EACJ,GAAIT,EAAKS,EAAOT,MACX,CACH,KAAM,CAAE,WAAAE,CAAA,EAAeb,GAAW,cAAc,EACnCa,EAAW,MAAM,IACjB,QAASO,EAAO,OACxBA,EAAO,UACd,CACA,UAAW5E,KAAWu3B,EACpB,KAAIxf,EAAA/X,GAAA,YAAAA,EAAS,OAAT,YAAA+X,EAAe,eAAgB,aAAc,CAC/C,MAAMyf,EAAUx3B,EAAQ,UAAU,QAAQ,UAAU,QAAQ,SAAS,CAAC,EACtE,KAAIy3B,EAAAD,GAAA,YAAAA,EAAS,OAAT,YAAAC,EAAe,QAAS,SAC1B,GAAIE,IAAU,GAAO,CAEnB,MAAM54B,EAASy4B,EAAQ,MAAM,MAGvBK,EAAahB,GAAahvB,EAAU9I,CAAM,EAGhD,MAAMg4B,EAAM54B,EAAI05B,CAAU,EACvB,KAAMz3B,GAAQ,CACbtG,EAASsG,EAAI,MACb+E,GAAQP,EAAM,SAAS,CACzB,CAAC,EACA,MAAOmkB,GAAU,CAChB5jB,GAAQ4jB,EAAO,OAAO,EACtB,QAAQ,IAAIA,CAAK,CACnB,CAAC,CACL,MACE,MAAMyO,EAAQ,UAAU,QACrB,SAAA,EACA,KAAK,IAAYx/B,GAAA,sBAEhB,MAAM+G,EAASy4B,EAAQ,MAAM,MAGvBK,EAAahB,GAAahvB,EAAU9I,CAAM,EAEhD,MAAMg4B,EAAM54B,EAAI05B,CAAU,EACvB,KAAMz3B,GAAQ,CACbtG,EAASsG,EAAI,MACb+E,GAAQP,EAAM,SAAS,CACzB,CAAC,EACA,MAAOmkB,GAAU,CAChB5jB,GAAQ4jB,EAAO,OAAO,EACtB,QAAQ,IAAIA,CAAK,CACnB,CAAC,CACL,EAAC,EACA,MAAM,IAAM,CACXjvB,EAAS,CAAA,CACX,CAAC,CACT,CAEF,OAAOA,CACT,GAOMi+B,GAAS,CAAOV,EAAsBnB,EAAwBa,IAAmB/+B,GAAA,8BAKrF,GAJ4Bq/B,GAAW,MAIVnB,GAAY,KACvC,OAAA/wB,GAAQ,sBAAuB,OAAO,EAC/B,GAET,IAAIrL,EAAS,CAAA,EACb,MAAM89B,EAAcP,EAAO,EAErB5vB,EADeyuB,EAAQ,EACA,QACvBoB,GAAgBxhC,EAAA8hC,EAAY,UAAZ,YAAA9hC,EAAqB,SACrCyhC,EAAqB,MAAM,QAAQD,CAAa,EAAIA,EAAgB,CAAA,EACpEzvB,EAAW+vB,EAAY,MAAM,SACnC,UAAW53B,KAAWu3B,EACpB,KAAIxf,EAAA/X,GAAA,YAAAA,EAAS,OAAT,YAAA+X,EAAe,eAAgB,aAAc,CAC/C,MAAMyf,EAAUx3B,EAAQ,UAAU,QAAQ,UAAU,QAAQ,SAAS,CAAC,EAEtE,MAAMw3B,EAAQ,UAAU,QACrB,SAAA,EACA,KAAK,IAAYx/B,GAAA,sBAEhB,MAAM+G,EAASy4B,EAAQ,MAAM,MAGvBrB,EAAmBM,GAAe5uB,EAAU9I,EAAQm3B,CAAO,EAIjEzuB,EAAQ,iBAAmB0uB,EAC3B1uB,EAAQ,MAAQsvB,EAChBtvB,EAAQ,aAAA,EAER,MAAMsvB,EAAMZ,CAAgB,EACzB,KAAM/1B,GAAQ,SACbtG,EAASsG,EAAI,MAGb,MAAM43B,KADgBliC,EAAAogC,EAAgB,UAAhB,YAAApgC,EAAyB,WAAY,CAAA,GACtB,OAAQsR,GAAa,CACxD,GAAI9M,GAAa8M,CAAC,IAAM,WAAY,MAAO,EAC7C,CAAC,EACG4wB,EAAgB,CAAC,IAAGA,EAAgB,CAAC,EAAE,WAAa,IAExD,MAAMC,GAAU/B,EAAQ,IAClBgC,EAAcD,GAAQ,cAAc,uDAAuD,EAC3FE,EAAmBF,GAAQ,cAAc,6DAA6D,EACtGG,EAAUF,GAAA,YAAAA,EAAa,iBAAiB,mBACxCn9B,GAAMq9B,GAAA,YAAAA,EAAS,SAAU,EAC/B,QAAS9gC,EAAI,EAAGA,EAAIyD,EAAKzD,IAAK,CAC5B,MAAM+gC,GAAItgB,EAAAqgB,GAAA,YAAAA,EAAU9gC,KAAV,YAAAygB,EAAc,cAAc,mBAClCsgB,GAAOA,EAAE,SAAS,CAAC,GAAGA,EAAE,SAAS,CAAC,EAAE,UAAU,OAAO,aAAa,CACxE,CACA,GAAIF,EAAkB,CACpB,MAAMG,EAAeH,EAAiB,iBAAiB,iBAAiB,EAClEI,EAAWD,EAAa,OAC9B,QAAShhC,GAAI,EAAGA,GAAIihC,EAAUjhC,KAAK,CACjC,MAAM+gC,GAAIC,EAAahhC,EAAC,EAAE,cAAc,iBAAiB,EACrD+gC,IAAOA,GAAE,SAAS,CAAC,GAAGA,GAAE,SAAS,CAAC,EAAE,UAAU,OAAO,aAAa,CACxE,CACF,CACF,CAAC,EACA,MAAOtP,GAAU,CAChB5jB,GAAQ4jB,EAAO,OAAO,EACtB,QAAQ,IAAIA,CAAK,CACnB,CAAC,EACHthB,EAAQ,YAAA,CACV,EAAC,EACA,MAAM,IAAM,CACXA,EAAQ,YAAA,CACV,CAAC,CACL,CAEF,OAAO3N,CACT,GAUM0+B,GAAa,CAAOtC,EAAca,EAAgB33B,IAAcpH,GAAA,sBACpE,GAA6Bk+B,GAAY,KACvC,OAAA/wB,GAAQ,sBAAuB,OAAO,EAC/B,GAET,IAAIrL,EAAS,CAAA,EACb,MAAM08B,EAAYP,GAASC,EAAS92B,CAAI,EAIxC,OAAA82B,EAAQ,iBAAmBM,EAC3BN,EAAQ,MAAQa,EAChBb,EAAQ,aAAA,EACR,MAAMa,EAAMP,CAAS,EAClB,KAAMp2B,GAAQ,OACbtG,EAASsG,EAAI,MAGb,MAAM43B,KADgBliC,EAAAogC,EAAgB,UAAhB,YAAApgC,EAAyB,WAAY,CAAA,GACtB,OAAQsR,GAAM,OACjD,KAAItR,EAAAsR,GAAA,YAAAA,EAAG,OAAH,YAAAtR,EAAS,QAAS,WAAY,MAAO,EAC3C,CAAC,EACGkiC,EAAgB,CAAC,IAAGA,EAAgB,CAAC,EAAE,WAAa,GAC1D,CAAC,EACA,MAAOjP,GAAU,CAChB5jB,GAAQ4jB,EAAO,OAAO,EACtB,QAAQ,IAAIA,CAAK,CACnB,CAAC,EACHmN,EAAQ,YAAA,EACDp8B,CACT,GAWM2+B,GAAkB,CAAOvC,EAA2CC,EAAmCY,EAAgBnB,IAAuB59B,GAAA,8BAClJ,GAAsCm+B,GAAqB,KACzD,eAAQ,IAAI,iBAAkB,OAAO,EAC9B,GAET,GAA2BY,GAAU,KACnC,OAAA5xB,GAAQ,+CAAgD,OAAO,EACxD,GAET,IAAIrL,EAA0B,CAAA,GAC9BhE,EAAAogC,GAAA,YAAAA,EAAS,UAAT,MAAApgC,EAAkB,eAClB,MAAMF,EAAMugC,GAAoB,CAAA,EAChC,OAAIvgC,EAAI,WAAgB,SAAWA,EAAI,SAAc8/B,GAAA,GAErD9/B,EAAI,SAAY,eAAiBggC,EAAS,eAC1ChgC,EAAI,SAAY,eAAiBggC,EAAS,eAC1C,MAAMmB,EAAMZ,CAAgB,EACzB,KAAM/1B,GAAQ,CACbtG,EAASsG,EAAI,KACf,CAAC,EACA,MAAO2oB,GAAU,CAChB,QAAQ,IAAIA,CAAK,CACnB,CAAC,GACHhR,EAAAme,GAAA,YAAAA,EAAS,UAAT,MAAAne,EAAkB,cACXje,CACT,GAQM4+B,GAAS5+B,GAAWA,EASpB6+B,GAAe,CAACC,EAAiB9+B,IACjC8+B,GAAe,MAIf,CAAC,MAAM,QAAQA,EAAW,OAAO,GACnCzzB,GAAQ,sBAAuB,OAAO,EAC/B,IAELrL,GAAW,KAEN,IAEL,MAAM,QAAQA,CAAM,EAAG8+B,EAAW,QAAQ,OAAO,EAAG,EAAG,GAAG9+B,CAAM,EASlE8+B,EAAW,QAAQ,OAAO,EAAG,EAAGF,GAAM5+B,CAAM,CAAC,EAExC,IAWH++B,GAAe,CAACD,EAAiB9+B,EAAag/B,IAAoB,CAKtE,GAJIF,GAAe,MAIf,CAAC,MAAM,QAAQA,EAAW,OAAO,EACnC,OAAAzzB,GAAQ,sBAAuB,OAAO,EAC/B,GAET,GAAIrL,GAAW,KAEb,MAAO,GACT,GAAI,MAAM,QAAQA,CAAM,EAAG8+B,EAAW,QAAQ,OAAO,EAAG,EAAG,GAAG9+B,CAAM,MAC/D,CAIH,MAAMi/B,EAHgBH,EAAW,QAAQ,OAAQxxB,GAAW,CAC1D,GAAIA,EAAE,UAAY0xB,EAAS,MAAO,EACpC,CAAC,EACgC,CAAC,EAClC,OAAO,KAAKh/B,CAAM,EAAE,QAASsN,GAAM,CAC7BA,IAAM,YAAW2xB,EAAW3xB,CAAC,EAAItN,EAAOsN,CAAC,EAC/C,CAAC,CACH,CAEA,MAAO,EACT,EASM4xB,GAAe,CAACJ,EAAiB7wB,IACjC6wB,GAAe,MAIf,CAAC,MAAM,QAAQA,EAAW,OAAO,GACnCzzB,GAAQ,sBAAuB,OAAO,EAC/B,KAETyzB,EAAW,QAAQ,OAAO7wB,EAAO,CAAC,EAE9B6wB,EAAW,QAAOA,EAAW,MAAQA,EAAW,MAAQ,GACrD,IAUHK,GAAsB,CAACC,EAA0B50B,IAAiC,2BACtF,GAAI,CAAC40B,GAAW,OAAOA,GAAY,SAAU,MAAO,GAEpD,OADe50B,EACP,CACN,IAAK,KACH,OAAOmzB,GAAA1f,GAAAjiB,EAAAojC,EAAQ,IAAR,KAAApjC,EAAaojC,EAAQ,IAArB,KAAAnhB,EAA0BmhB,EAAQ,IAAlC,KAAAzB,EAAuC,GAChD,IAAK,KACH,OAAO0B,GAAAC,GAAAC,EAAAH,EAAQ,KAAR,KAAAG,EAAcH,EAAQ,KAAtB,KAAAE,EAA4BF,EAAQ,IAApC,KAAAC,EAAyC,GAClD,IAAK,KACH,OAAOG,GAAAC,GAAAC,EAAAN,EAAQ,KAAR,KAAAM,EAAcN,EAAQ,KAAtB,KAAAK,EAA4BL,EAAQ,IAApC,KAAAI,EAAyC,GAClD,IAAK,QACL,QACE,OAAOG,GAAAC,EAAAR,EAAQ,IAAR,KAAAQ,EAAaR,EAAQ,IAArB,KAAAO,EAA0B,EAAA,CAEvC,EAqKME,GAAO,CACX,UAAA7C,GACA,OAAAE,GACA,WAAAE,GACA,KAAAQ,GACA,OAAAI,GACA,OAAAC,GACA,WAAAS,GACA,gBAAAC,GACA,aAAAE,GACA,aAAAE,GACA,aAAAG,GACA,aAxKmB,CAACnxB,EAAsB+xB,IAA6B,CAEvE,GAAI/xB,GAAa,KACf,OAAA1C,GAAQ,sBAAuB,OAAO,EAC/B,GAET,GAAIy0B,GAAY,KACd,OAAAz0B,GAAQ,mBAAoB,OAAO,EAC5B,GAET,KAAM,CAAE,WAAAd,CAAA,EAAeb,GAAW,cAAc,EAC1Cc,EAAOD,EAAW,MAAM,GAAK,QAC/B,OAAO,KAAKu1B,CAAO,EAAE,SAAW,GAClC/xB,EAAS,QAAST,GAAM,OACtB,MAAMyyB,EAAaD,EAAQxyB,EAAE,KAAK,EAClC,GAAIyyB,IAAe,QACbzyB,EAAE,OAAS,SAAWA,EAAE,OAAS,GAEnC,OAAQA,EAAE,KAAA,CACR,IAAK,OACL,IAAK,WACL,IAAK,SACCyyB,IAAe,MAAQ,OAAOA,GAAe,SAAUzyB,EAAE,MAAQyyB,EAAW,IACzE,MAAQA,EACf,MACF,IAAK,OACCzyB,EAAE,WAAa,YAAaA,EAAE,MAAQyyB,EAAaA,EAAW,MAAM,GAAG,EAAI,OACxE,MAAQA,EACf,MACF,IAAK,WACCzyB,EAAE,WAAa,gBAAiBA,EAAE,MAAQyyB,EAAaA,EAAW,MAAM,GAAG,EAAI,OAC5E,MAAQA,EACf,MACF,IAAK,OACCzyB,EAAE,WAAa,YAAaA,EAAE,MAAQyyB,EAAaA,EAAW,MAAM,GAAG,EAAI,OACxE,MAAQA,EACf,MACF,IAAK,QACH,GAAI,MAAM,QAAQA,CAAU,IAAK,MAAQA,UAChCA,EAAY,CAGnB,MAAM3a,EAFM2a,EAAW,MAAM,GAAG,EAEf,IAAKzyB,GACf,MAAM,SAASA,CAAC,CAAC,EACVA,EADoBA,EAAI,CAErC,EACDA,EAAE,MAAQ8X,CAEZ,MAAO9X,EAAE,MAAQ,CAAA,EAEjB,MACF,IAAK,MAMH,GAAIA,EAAE,SAAWA,EAAE,QAAQ,QAAQ,IAAI,GAAK,GAC1C,GAAI,OAAOA,EAAE,OAAU,SAAU,CAE/B,MAAM0yB,EADQ1yB,EAAE,QAAQ,MAAM,GAAG,EACb,CAAC,EAAE,MAAM,GAAG,EAEhC,QAAS9P,EAAI,EAAGA,EAAIwiC,EAAM,OAAQxiC,IAAK,CACrC,MAAMyiC,EAAYD,EAAMxiC,CAAC,EAAE,MAAM,GAAG,EACpC,GAAIyiC,EAAU,CAAC,IAAMF,EAAa,GAAI,CACpCzyB,EAAE,MAAQyyB,EACVzyB,EAAE,UAAY2yB,EAAU,CAAC,EACzB,KACF,CACF,CACF,UACS3yB,EAAE,SACX,GAAIyyB,IAAe,MAEjB,GAAI,OAAOA,GAAe,SAAU,CAClC,MAAMX,EAAUW,EACVtc,EAAI2b,EAAQ,EACZ39B,EAAI09B,GAAoBC,EAAS50B,CAAI,EAE3C,GAAIiZ,EAAG,CACL,MAAMyc,EAAQzc,EAAE,MAAM,GAAG,EACnBxS,EAASxP,EAAIA,EAAE,MAAM,GAAG,EAAI,CAAA,EAClC6L,EAAE,MAAQ4yB,EAAM,IAAI,CAACtiB,EAAcpgB,IAAA,OAAe,OAChD,MAAOogB,EACP,OAAO5hB,EAAAiV,EAAOzT,CAAC,IAAR,KAAAxB,EAAa4hB,CAAA,EACpB,EACFtQ,EAAE,UAAY2D,CAChB,MACE3D,EAAE,MAAQ,CAAA,EACVA,EAAE,UAAY,CAAA,CAElB,SAAW,OAAOyyB,GAAe,SAAU,CACzC,MAAMtc,EAAIsc,EACV,GAAItc,EAAG,CACL,MAAMsB,EAAK,CAAA,EACXtB,EAAE,MAAM,GAAG,EAAE,QAASnW,GAAM,CAC1B,MAAM2W,EAAqB,CAAA,EAC3BA,EAAE,MAAQ3W,EACTyX,EAAyB,KAAKd,CAAC,CAClC,CAAC,EACD3W,EAAE,MAAQyX,CACZ,MAAOzX,EAAE,MAAQ,CAAA,CACnB,SACO,MAAQyyB,UACVA,IAAe,MAAQ,OAAOA,GAAe,SAAU,CAC9D,MAAMX,EAAUW,EACVniB,EAAO,QAAO5hB,EAAAojC,EAAQ,IAAR,KAAApjC,EAAa,EAAE,EAAE,KAAA,EAC/B6V,EAAQstB,GAAoBC,EAAS50B,CAAI,EAAE,KAAA,EAC7C,CAACoT,GAAQ,CAAC/L,GACZvE,EAAE,MAAQ,GACVA,EAAE,UAAY,KAEdA,EAAE,MAAQ,CAAE,MAAOsQ,EAAM,MAAO/L,GAAS+L,CAAA,EACzCtQ,EAAE,UAAYuE,GAAS+L,EAE3B,QAAS,MAAQmiB,EAEjB,MACF,QACEzyB,EAAE,MAAQyyB,EACV,KAAA,CAEV,CAAC,CAEL,EA6CE,eArCsBhyB,GAAyB,CAC/C,GAAIA,GAAa,KACf,OAAA1C,GAAQ,sBAAuB,OAAO,EAC/B,GAET0C,EAAS,QAAST,GAAM,CACtB,GAAIA,EAAE,OAAS,SAAWA,EAAE,OAAS,GACnC,OAAQA,EAAE,KAAA,CACR,IAAK,OACL,IAAK,WACL,IAAK,SACHA,EAAE,MAAQ,GACV,MACF,IAAK,OACHA,EAAE,MAAQ,GACV,MACF,IAAK,MACHA,EAAE,MAAQ,GACVA,EAAE,UAAY,GACd,KAAA,CAER,CAAC,CACH,EAgBE,WAAA+vB,EACF,ECjrBwI,SAAA52B,GAAAC,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAC,OAAAC,UAAA1K,SAAA2K,KAAAH,CAAA,IAAA,mBAAA,CAAAI,EAAAA,QAAAJ,CAAA,CAAA,CAGtI,KAAM,CAAE1M,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,OAAO,EAEhCmmC,GAAoC,CACxC9nB,MAAO,cACPoc,SAAU,QACV2L,SAAU,kBACZ,0BAC+B,CAC7BzlC,KAAM,UACNC,MAAO,CACLylC,SAAU,CACRvlC,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEX00B,UAAW,CACTxlC,KAAMkT,MACNhC,SAAU,GACVhR,QAASA,IAAM,CAAA,GAEjBulC,UAAW,CACTzlC,KAAM6L,OACNqF,SAAU,GACVhR,QAASA,IAAM,CAAC,GAElBsd,OAAQ,CACNxd,KAAM,CAACI,OAAQH,MAAM,EACrBiR,SAAU,GACVhR,QAAS4Q,QAEX8M,UAAW,CACT5d,KAAM,CAACI,OAAQH,OAAQ6Q,MAAS,EAChCI,SAAU,GACVhR,QAAS4Q,QAEXw0B,SAAU,CACRtlC,KAAM,CAACI,OAAQH,MAAM,EACrBiR,SAAU,GACVhR,QAAS4Q,QAEXJ,QAAS,CACP1Q,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXwlC,SAAU,CACR1lC,KAAMI,OACN8Q,SAAU,GACVhR,QAAS,IAEXylC,aAAc,CACZ3lC,KAAMuR,SACNL,SAAU,GACVhR,QAASA,IAAM,CAAC,GAElB0lC,SAAU,CACR5lC,KAAMuR,SACNL,SAAU,GACVhR,QAASA,IAAM,CAAC,GAElB2lC,WAAY,CACV7lC,KAAMuR,SACNL,SAAU,GACVhR,QAASA,IAAM,CAAC,GAElB4lC,UAAW,CACT9lC,KAAMuR,SACNL,SAAU,GACVhR,QAASA,IAAM,CAAC,GAYlB6lC,UAAW,CACT/lC,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEXk1B,UAAW,CACThmC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS4Q,QAEXm1B,SAAU,CACRjmC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS4Q,QAEXwvB,SAAU,CACRtgC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX8W,OAAQ,CACNhX,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXgmC,WAAY,CACVlmC,KAAMuR,SACNL,SAAU,GACVhR,QAASA,IAAM,CAAC,GAElBimC,MAAO,CAELnmC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXm/B,OAAQ,CACNr/B,KAAMC,OACNiR,SAAU,GACVhR,QAAS,2CAEXkmC,WAAY,CACVpmC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXmmC,MAAO,CACLrmC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX2Q,KAAM,CACJ7Q,KAAMC,OACNiR,SAAU,GACVhR,QAAS,WAEXomC,UAAW,CACTtmC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXqmC,aAAc,CACZvmC,KAAMuR,SACNL,SAAU,GACVhR,QAAS4Q,QAEX01B,YAAa,CACXxmC,KAAM6L,OACNqF,SAAU,GACVhR,QAAS4Q,QAEX21B,QAAS,CACPzmC,KAAMuR,SACNL,SAAU,GACVhR,QAAS4Q,QAEX41B,cAAe,CACb1mC,KAAMkT,MACNhC,SAAU,GACVhR,QAAS4Q,QAEX61B,YAAa,CACX3mC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX0mC,YAAa,CACX5mC,KAAMC,OACNiR,SAAU,GACVhR,QAAS,QAEX2mC,gBAAiB,CACf7mC,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,EACX,GAEF+N,MAAO,CAAC,cAAc,EAEtBtN,MAAMb,EAAO,CAAEc,MAAAA,EAAOuwB,OAAAA,EAAQjjB,KAAAA,EAAMxG,MAAAA,CAAM,EAAG,QAE3C,MAAMuE,EAAWC,GAAAA,YAAW,EACtBgb,EAAYC,GAAAA,aAAY,EACxB,CAAE1X,WAAAA,CAAW,EAAIb,GAAAA,WAAW,cAAc,EAC1CT,EAAWC,EAAAA,mBAAkB,EACnC,IAAIsB,EAAO,QACX,MAAMo3B,EAAe76B,EAAS26B,aAAe9mC,EAAM8mC,YAC7CG,EAAmB96B,EAAS46B,gBAC5BG,EAAgB/6B,EAAS2F,cACzBq1B,EAAqCH,IAAiB,OAAS,cAAgB,aACrF,IAAII,EAAapnC,EAAMimC,UACnBoB,EAAmCrnC,EAAM0lC,UACzC4B,EAA8B,CAAA,EAClC,MAAMrnC,EAAO,YAAcD,EAAMylC,SAC3B,CAAE94B,EAAAA,GAAMzN,GAAa,EACrByS,GAAaC,EAAAA,gBAAgB,MAAM,EAEnC21B,EAAUvnC,EAAM0d,OAChBoU,EAAajlB,EAAAA,IAAI7M,EAAM8d,SAAS,EAChC0pB,EAAY36B,EAAAA,IAAI7M,EAAMwlC,UAAY,MAAM,EACxCt0B,EAAUrE,EAAAA,IAAI,EAAK,EACzB,IAAI46B,EAAc,GAClB,MAAMvG,EAAWr0B,EAAAA,IAAc,CAC7Bs0B,eAAgB,EAChBC,eAAgB,GAChBC,UAAW,EACXC,UAAW,CACb,CAAC,EACKG,EAAsC,CAAA,EAC5C,IAAIiG,EAAY1nC,EAAM4lC,SAEtB,MAAM+B,GAAa96B,EAAAA,IAAI7M,EAAM2lC,SAAS,EAChCiC,GAAc/6B,EAAAA,MAAI7M,GAAAA,EAAM2lC,YAAN3lC,YAAAA,GAAiB6nC,UAAW,CAAA,CAAE,EAChDC,GAAY,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC5C,IAAIC,EAAwB,CAAA,EAC5B,MAAMC,EAAiBn7B,MAAI,CAAA,CAAE,EACvBo7B,GAAoBp7B,MAAI,EAAI,EAC5Bq7B,GAAmBr7B,MAAI,EAAK,EAC5Bs7B,EAAmBt7B,MAAI,EAAK,EAC5Bu7B,GAAgBv7B,MAAI,CAAC,EACrBw7B,GAAmBx7B,MAAI,EAAK,EAC5By7B,GAAmBz7B,MAAI,EAAK,EAC5B07B,GAAY17B,EAAAA,IAAI7M,EAAMwgC,QAAQ,EAC9BgI,GAAYr8B,EAASq0B,SACrBiI,GAAkB57B,MAAI,EAAK,EAC3B67B,GAAa77B,EAAAA,IAAI7M,EAAMkmC,SAAS,EAChCyC,GAAY97B,EAAAA,IAAI7M,EAAMmmC,QAAQ,EAC9ByC,GAAoB,KACpBC,GAAah8B,EAAAA,IAAI7M,EAAMu/B,MAAM,EACnC,IAAIuJ,GAAsB,EACtBC,GAAuC,KAC3C,MAAMC,GAAan8B,MAAa,CAAA,CAAE,EAC5Bo8B,GAAiBp8B,EAAAA,IAAa,EAAE,EAGhCq8B,GAA8B,CAAA,EAC9BC,GAAkBt8B,MAAI,CAAA,CAAE,EAE9B,IAAImlB,GAAW,GACXD,GAAc,GACdF,GAAkB,GACtB,MAAMuX,GAAiBv8B,MAAI,CAAA,CAAE,EACvBw8B,EAAoBx8B,MAAc,CAAA,CAAE,EACpCy8B,EAAatpC,EAAMylC,SAAW,IAAMre,EAAUmiB,aACpD,IAAIC,EAAe,GACfC,EACJ,MAAMC,EAAY78B,MAA0C,CAAA,CAAE,EACxD88B,EAAW98B,MAA0B,IAAI,EAGzC+8B,EAAY5hC,EAAAA,SAAoC,IAAA,OAAOhI,OAAAA,EAAAA,EAAM+Q,OAAN/Q,KAAAA,EAAcqN,EAAAA,MAAMsE,EAAU,EAAmB,EAMxGk4B,EAAc7hC,EAAAA,SAAS,IAAgB,CAC3C,MAAMi5B,EAAe,CACnBE,eAAgB,EAChBC,eAAgB,GAChBC,UAAW,EACXC,UAAW,GAEb,OAAIqG,GAAWtnC,OAASsnC,GAAWtnC,MAAMwnC,UAAY72B,SACnDiwB,EAAG,eAAoB0G,GAAWtnC,MAAMypC,QACxC7I,EAAG,UAAe0G,GAAWtnC,MAAM0pC,MAInC9I,EAAG,eAAoB0G,GAAWtnC,MAAM0Q,KACxCkwB,EAAG,UAAe0G,GAAWtnC,MAAMkmC,OAE9BtF,CACT,CAAC,EAIK+I,GAAep2B,GAA6B,CAChD+1B,EAAStpC,MAAQuT,EACbA,GAAM5T,EAAMylC,WAAUiE,EAAUrpC,MAAMJ,CAAI,EAAI2T,EACpD,EAEMglB,GAAaA,CAAC5iB,EAAQ/P,IAAW,CACrC,IAAI4yB,EAAO,GACX,UAAW91B,KAAOiT,EAChB,GAAI,CAACvT,GAAQuT,EAAOjT,CAAG,EAAGkD,EAAOlD,CAAG,CAAC,EAAG,CACtC81B,EAAO,GACP,KACF,CAEF,OAAOA,CACT,EAQMoR,GAAmBC,GAAsB,CAC7C,MAAMC,EAAO5/B,GAAA,GAAKy9B,EAAe3nC,OACjC0L,OAAOkD,KAAKk7B,CAAI,EAAE3/B,QAASzH,GAAQ,CAC7BA,IAAQmnC,IAAUC,EAAKpnC,CAAG,EAAI,GACpC,CAAC,EACDilC,EAAe3nC,MAAQ8pC,CACzB,EAEMC,GAAoBC,GAAoB,CACxCrC,EAAe3nC,MAAMgqC,CAAO,IAAMr5B,SAAWg3B,EAAe3nC,MAAQyK,GAAAP,GAAA,GAAKy9B,EAAe3nC,OAApB,CAA2B,CAACgqC,CAAO,EAAG,KAChH,EAEMpO,GAAwBh5B,GAAkB,CAC9CA,EAAE6d,gBAAe,CACnB,EAGMwpB,GAAyBC,GAAWxpC,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,YAGxBkC,GAAkBA,EAAE6d,gBAAe,EAAE,QACzC7d,GAAkBA,EAAE6d,gBAAe,CAAE,EAAA,CAC9CypB,CAAI,CAAA,EAGHC,GAAgBA,IAAM,CAC1BP,GAAe,CACjB,EAEMQ,GAAeA,IAAM,CACzBv5B,EAAQ7Q,MAAQ,EAClB,EACMqqC,GAAcA,IAAM,CACxBx5B,EAAQ7Q,MAAQ,EAClB,EAQMqf,GAAgB/L,GAAoC,SACxD,GAAI3T,EAAM6mC,aACJ,CAAChV,IACH,GAAKE,GAwCAD,EAAWzxB,MAAQ2Q,eAvCjBghB,GAsCEF,EAAWzxB,MAAQ2Q,eArCpBhR,EAAMimC,YAAc,SACtB,GAAIjmC,EAAMimC,YAAc,SAAUnU,EAAWzxB,MAAQ2Q,eAC5ChR,EAAM8d,UAIbgU,EAAWzxB,MAAQL,EAAM8d,cACtB,CAGH,MAAMga,EAAUnkB,GAAAA,YAAAA,EAAQqM,QAAQ,gBAE5B8X,GAEE93B,EAAMsmC,WAAYxU,EAAWzxB,MAAQy3B,EAAQhY,aAAe,IAC3DgS,EAAWzxB,MAAQy3B,EAAQhY,aAAe,IAEhCnM,GAAAA,MAAAA,EAAQqM,QAAQ,eAEdrM,GAAAA,MAAAA,EAAQqM,QAAQ,iBAG7B8R,EAAWzxB,MAAQ2Q,UAIR2C,GAAAA,YAAAA,EAAQqM,QAAQ,eAQ1B8R,EAAWzxB,MAAQuf,SAASC,gBAAgBC,eAAgBnM,EAAAA,GAAAA,YAAAA,EAAQokB,YAARpkB,KAAAA,EAAqB,GAAK,IAN1EA,GAAAA,MAAAA,EAAQqM,QAAQ,gBAGlB8R,EAAWzxB,MAAQuf,SAASC,gBAAgBC,eAAgBnM,EAAAA,GAAAA,YAAAA,EAAQokB,YAARpkB,KAAAA,EAAqB,GAAK,IAKzG,EAGNme,EAAWzxB,OAASC,OAAOwxB,EAAWzxB,KAAK,EAAI,MAAKyxB,EAAWzxB,MAAQ2Q,OAC7E,EAQM25B,GAAgBC,GAAwB,CACxChD,GAAYvnC,OAASunC,GAAYvnC,MAAMuS,OAAS,GAAKg1B,GAAYvnC,MAAM,CAAC,EAAE,YAC5E0oC,GAAYnB,GAAYvnC,MAAM,CAAC,EAAE,UACjCunC,GAAYvnC,MAAMwqC,OAAO,EAAG,CAAC,GAG3BD,IAAe,UAAY5qC,EAAM2mC,SAAS3mC,EAAM2mC,QAAQiB,GAAYvnC,MAAOsnC,GAAWtnC,KAAK,CACjG,EAOMyqC,GAAeA,IAAM,CACrB9qC,EAAMymC,aACJzmC,EAAMymC,aAAazmC,EAAMylC,SAAU6B,EAAYtnC,EAAM2lC,SAAS,GAChE2C,GAAiBjoC,MAAQ,GAEzB8nC,EAAiB9nC,MAAQ,IACpBioC,GAAiBjoC,MAAQ,IAEhCioC,GAAiBjoC,MAAQ,GAEzB8nC,EAAiB9nC,MAAQ,GAE7B,EAEM0qC,GAAeA,IAAM,CACzB1C,GAAiBhoC,MAAQ,GAEzB6nC,GAAiB7nC,MAAQ,EAC3B,EAOM2qC,GAAehjC,EAAAA,SAAS,IAAM,eAClC,IAAIlH,EAAAA,EAAMmqC,SAANnqC,MAAAA,EAAAA,KAAAA,GAAkB,CACpB,IAAIoqC,EAAav+B,EAAE,iBAAiB,GAChC7L,GAAAA,EAAAA,EAAMmqC,SAANnqC,YAAAA,EAAAA,KAAAA,GAAiB,GAAGd,QAApBc,MAAAA,EAA4B,iBAAgBoqC,GAAapqC,GAAAA,EAAAA,EAAMmqC,SAANnqC,YAAAA,EAAAA,KAAAA,GAAiB,GAAGd,QAApBc,YAAAA,EAA4B,gBACzF,MAAM+L,EAAM,aAAe7M,EAAMylC,SACjC,OAAA1kC,EAAAA,YAAA0T,GAAA,CAAA,QAAA,SAAA,IAGS5H,EAAG,QACCi+B,GAAY,QACZ3C,EAAiB9nC,KAAK,EAAAwL,GAC9Bq/B,CAAU,EAAVA,EAAU,CAAA9qC,QAAAA,IAAA,CAAV8qC,CAAU,CAAA,CAAA,CAGjB,KAAO,QAAO,IAChB,CAAC,EAQKC,GAAenjC,EAAAA,SAAS,IAAM,eAClC,IAAIlH,EAAAA,EAAMsqC,SAANtqC,MAAAA,EAAAA,KAAAA,GAAkB,CACpB,IAAIoqC,EAAav+B,EAAE,eAAe,GAC9B7L,GAAAA,EAAAA,EAAMsqC,SAANtqC,YAAAA,EAAAA,KAAAA,GAAiB,GAAGd,QAApBc,MAAAA,EAA4B,iBAAgBoqC,GAAapqC,GAAAA,EAAAA,EAAMsqC,SAANtqC,YAAAA,EAAAA,KAAAA,GAAiB,GAAGd,QAApBc,YAAAA,EAA4B,gBACzF,MAAM+L,EAAM,aAAe7M,EAAMylC,SACjC,OAAA1kC,EAAAA,YAAA0T,GAAA,CAAA,QAAA,SAAA,IAGS5H,EAAG,QACCk+B,GAAY,QACZ7C,GAAiB7nC,MAAK,SACrB4nC,GAAkB5nC,KAAK,EAAAwL,GAChCq/B,CAAU,EAAVA,EAAU,CAAA9qC,QAAAA,IAAA,CAAV8qC,CAAU,CAAA,CAAA,CAGjB,KAAO,QAAO,IAChB,CAAC,EAOKG,GAAgB,IAAY/nC,GAAA,8BAChC,MAAMgoC,IAAMj9B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBozB,mBAAwCA,GAAoB,CAAA,EACrF8J,IAAcl9B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBg0B,QAASriC,EAAMomC,WACtD,GAAI,CAACmF,EAAS,CACZ96B,GAAQ9D,EAAE,sBAAsB,CAAC,EACjC,MACF,CACA,MAAMvH,EAAS,MAAM6/B,GAAKlB,gBAAgB11B,EAAUi9B,EAAIC,EAASrK,EAAS7gC,KAAK,EAC3E+E,IACFuiC,GAAWtnC,MAAQ+E,EACnBwiC,GAAYvnC,MAAQ+E,EAAOyiC,QAC3B8C,GAAY,EAEhB,GAEMa,GAA0BhqC,GAAgB8B,GAAA,4BAC9C,MAAMqQ,GAAStF,EAAAA,GAAAA,YAAAA,EAAU3I,QAAV2I,YAAAA,EAAiBuF,GAChC8L,GAAa/L,CAAM,EACnButB,EAAS7gC,MAAM+gC,eAAiB5/B,EAChC0/B,EAAS7gC,MAAM8gC,eAAiB,EAChCuG,EAAYlmC,EACZ,MAAM6pC,GAAa,CACrB,GAEMI,GAA6BjqC,GAAgB8B,GAAA,sBACjD49B,EAAS7gC,MAAM8gC,eAAiB3/B,EAChC,MAAM6pC,GAAa,CACrB,GAQMK,GAA0BlqC,GAAQ,CACtCioC,EAAejoC,CAAG,CACpB,EAQMmqC,GAA2BnqC,GAAgB8B,GAAA,8BAC/C,MAAMsoC,EAAK,CAAA,EACX,IAAIC,EAAQ,GACZ9D,EAAYv9B,QAASkI,GAAc,CAEjC,IAAIo5B,EAAIp5B,EACJo5B,EAAEn5B,QAAQ,GAAG,EAAI,IAAGm5B,EAAIA,EAAEz5B,QAAQ,IAAK,GAAG,GAC1Cw5B,IAAU,GAAIA,EAAQloC,GAAOmoC,CAAC,EAC7BD,GAAS,IAAMloC,GAAOmoC,CAAC,CAC9B,CAAC,EACD,MAAMjlC,EAAIrF,EAAM,GAChBoqC,EAAG,OAAYC,EACfD,EAAG,IAAS/kC,EAAEyiB,KAAI,EAClB,MAAMgiB,IAAMj9B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBozB,mBAAwCA,GAAoB,CAAA,EAC3F6J,EAAG,aAAkBM,EAErB,MAAMvJ,IAAYh0B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBg0B,QAASriC,EAAMomC,WACpD,GAAI,CAAC/D,EAAO,CACV5xB,GAAQ9D,EAAE,sBAAsB,CAAC,EACjC,MACF,CAGAu0B,EAAS7gC,MAAM8gC,eAAiB,EAChC,MAAM/7B,EAAS,MAAM6/B,GAAKlB,gBAAgB11B,EAAUi9B,EAAIjJ,EAAOnB,EAAS7gC,KAAK,EACzE+E,GAAUA,EAAOyiC,UACnBF,GAAWtnC,MAAQ+E,EACnBwiC,GAAYvnC,MAAQ+E,EAAOyiC,QAC3B8C,GAAY,EAEhB,GAMMoB,GAAiBA,IACrBtD,GAAgBpoC,QAAU,GAAGU,EAAAA,YAAA,MAAA,CAAA,MAAA,oBAAA,CAAAA,EAAAA,YAAAslB,GAAA,CAAA,GAAA,kBAAA,YAIV,GAAG1Z,EAAE,mBAAmB,CAAC,QAAO,WAAA,iBAAA,KAAA,UAAA,MAAA,yBAAA,QAIpC++B,EAAsB,EAAA,IAAA,CAAA,CAAA,EAEjC,KAOAM,GAAoBA,IAAM,CAC9BhtB,EAAAA,SAAS,IAAM,eACb,MAAMrL,GAAStF,EAAAA,GAAAA,YAAAA,EAAU3I,QAAV2I,YAAAA,EAAiBuF,GAChC,GAAID,EAAQ,CACV,MAAMs4B,EAAWrsB,SAAS9L,iBAAiB,qBAAqB,EAC1Do4B,GAAkBv4B,EAAAA,EAAOK,cAAc,0CAA0C,IAA/DL,YAAAA,EAAkFw4B,MAAM1uB,MAC1G+a,EAAc5Y,SAAS2qB,KAAK/R,YAAc,IAAM,GACtD,QAAS51B,EAAI,EAAGA,EAAIqpC,EAASr5B,OAAQhQ,IACnC,GAAKqpC,EAASrpC,CAAC,EAAkBupC,MAAM73B,UAAY,OAAQ,CACzD,MAAM83B,EAAcz4B,EAAOK,cAAc,yBAAyB,GAC9Do4B,EAAAA,GAAAA,YAAAA,EAAaC,aAAbD,MAAAA,EACDH,EAASrpC,CAAC,EAAkBupC,MAAM9uB,KAAOkb,SAAS2T,CAAc,EAAI1T,EAAcD,SAAU0T,EAASrpC,CAAC,EAAkBupC,MAAM9uB,IAAI,IAAK+uB,EAAAA,GAAAA,YAAAA,EAAaC,aAAbD,KAAAA,EAA2B,GAAK,KACpKH,EAASrpC,CAAC,EAAkBupC,MAAM9uB,KAAOkb,SAAU0T,EAASrpC,CAAC,EAAkBupC,MAAM9uB,IAAI,IAAK+uB,EAAAA,GAAAA,YAAAA,EAAaC,aAAbD,KAAAA,EAA2B,GAAK,IACtI,CACJ,CACF,CAAC,CACH,EACME,GAAoBA,IAAM,CAC9B,EAUIC,GAAuBA,CAAC7I,EAAS8I,IACrC9I,EAAQn2B,IAAKk/B,GAAW,CACtB,MAAM9rB,EAASpW,GAAA,GAAKkiC,GACpB,OAAI9rB,EAAOzgB,OAAS,UAAYygB,EAAOzgB,OAAS,WAAUygB,EAAO+rB,UAAY,CAACF,EAAYrxB,SAASwF,EAAO9c,IAAI,GACvG8c,CACT,CAAC,EAUGgsB,GAA0BA,CAACjiC,EAAMkiC,EAASC,IAAiB,CAC/D,MAAML,EAAc,KAAKM,MAAM,sBAAsB,EAAEC,UAAU,CAAC,EAAEC,eAAc,EAC5EC,EAAWV,GAAqBjF,EAAYkF,CAAW,EAE7DxD,GAAW3oC,MAAQ6sC,GAAe,WAAYD,CAAQ,EAEtDE,cAAcX,EAAaI,EAASliC,CAAI,CAC1C,EAOM0iC,GAAqB,IAAY9pC,GAAA,gCAErC,MAAMsQ,GAAKvF,EAAAA,GAAAA,YAAAA,EAAU3I,QAAV2I,YAAAA,EAAiBuF,GAC5B,GAAIA,EAAI,CACN,MAAMy5B,EAAcz5B,EAAGI,cAAc,0CAA0C,EAC/E,GAAIq5B,GAAeA,EAAYhtC,QAAU2Q,QAAaq8B,EAAYhtC,QAAU,MAAQgtC,EAAYhtC,QAAU,GACxGgtC,EAAYhtC,MAAQ,GACpBsrC,GAAkB,EAAE,MACf,CACL,MAAML,IAAMj9B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBozB,mBAAwCA,GAAoB,CAAA,EAErFY,IAAYh0B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBg0B,QAASriC,EAAMomC,WAEpDlF,EAAS7gC,MAAM8gC,eAAiB,EAChC,MAAM/7B,EAAS,MAAM6/B,GAAKlB,gBAAgB11B,EAAUi9B,EAAIjJ,EAAOnB,EAAS7gC,KAAK,EACzE+E,GAAUA,EAAOyiC,UACnBF,GAAWtnC,MAAQ+E,EACnBwiC,GAAYvnC,MAAQ+E,EAAOyiC,QAC3B8C,GAAY,EAEhB,CACF,CACF,GAOM2C,GAAcA,IAAM,WACxB,MAAMC,EAAc,CAAA,EACd9M,GAAe3/B,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,GACjB2/B,GAAgBA,EAAa7tB,OAAS,GACxC6tB,EAAaj2B,QAASkI,GAAa,CAE7B,OAAOA,EAAExS,MAAS,UAAYwS,EAAExS,OAAS,MAAQ,SAAUwS,EAAExS,MAAQwS,EAAExS,KAAKH,OAAS,YAAYwtC,EAAKnjB,KAAK1X,CAAC,CAClH,CAAC,EAEH,MAAM86B,GAAc1sC,EAAAA,EAAMsqC,SAANtqC,YAAAA,EAAAA,KAAAA,GAChB0sC,GAAeA,EAAY56B,OAAS,GACtC46B,EAAYhjC,QAAQ,IAAM,CACxB+iC,EAAKnjB,KAAK+gB,GAAa9qC,KAAK,CAC9B,CAAC,EAGH,MAAMotC,GAAc3sC,EAAAA,EAAMmqC,SAANnqC,YAAAA,EAAAA,KAAAA,GACpB,OAAI2sC,GAAeA,EAAY76B,OAAS,GACtC66B,EAAYjjC,QAAQ,IAAM,CACxB+iC,EAAKnjB,KAAK4gB,GAAa3qC,KAAK,CAC9B,CAAC,EAGIktC,CACT,EAOMG,GAAYA,IAAM,CACtB,IAAIC,EAAY,GAChB,OAAIhF,GAAUtoC,QAAU2Q,SAAW28B,EAAYhF,GAAUtoC,QACrDL,EAAMimC,YAAc,UAAYjmC,EAAMimC,YAAc,UAAYjmC,EAAMimC,YAAc,UAAYjmC,EAAMimC,YAAc,YAAU0H,EAAY,IAE1IlG,IAAgB,KAAMkG,EAAY,IAC/BA,IAAc,GAAG5sC,EAAAA,YAAA,MAAA,CAAA,MAAA,oBAAA,CAAAA,EAAAA,YAAA6sC,EAAAA,cAAA,KAAA,CAAAxtC,QAAAA,IAAA,CAAAW,EAAAA,YAAAwT,WAAA,CAAA,MAAA,cAAA,KAKVq1B,EAAUvpC,MAAK,KACfwtC,GAAAA,QAAO,QACJT,IAAkB,IAAA,EAAArsC,EAAAA,YAAAo7B,YAAA,CAAA,UAAA,aAAA,MAAA,MAAA,QAAA,OAAA,EAAA,CAOzBztB,UAAWA,IAAA3N,EAAAA,YAAAwT,WAAA,CAAA,KAEDq1B,EAAUvpC,MAAK,MACd,CAAEod,MAAO,QAAQ,KAClBqwB,GAAAA,WAAS,IAAA,EAGnB1tC,QAASA,IAAAW,EAAAA,YAAAgtC,SAAA,CAAA,IAAA,uBAAA,WAAA,aAAA,YAIM3E,GAAc,sBACJ,GAAI,uBACHC,EAAkBhpC,MAAK,gBAAA,GAAA,UAAA,GAAA,kBAG5BssC,GAAuB,MACjC,CAAE7uB,UAAW,QAASqZ,SAAU,eAAe,MAAA,sBAAA,EAAA,IAAA,CAGzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAKP,IACN,EAOM6W,GAAeA,IAAM,CAAA,IAAAlgC,EAAAwpB,EACrBqW,EAAY,GAChB,OAAIjF,GAAWroC,QAAU2Q,OAAW28B,EAAYjF,GAAWroC,MACtDstC,EAAY3tC,EAAMimC,YAAc,SAC9B0H,IAAc,GAAG5sC,EAAAA,YAAA,MAAA,CAAA,MAAA,qBAAA,MAGb,CAAEktC,YAAa,GAAGxF,GAAgBpoC,QAAU,GAAO,OAAS,GAAG,EAAG,CAAC,EAAA,CAAAU,EAAAA,YAAA,IAAA,CAAA,MAAA,2BAAA,IAAA,EAAAA,EAAAA,YAAAs2B,eAAA,CAAA,WAG5D+Q,GAAc/nC,MAAK,sBACTmB,GAAgB,CACpC4mC,GAAc/nC,MAAQmB,CACxB,EAAC,IAAA,mBAAA,EAAA,CAAApB,QAAAA,IAAAA,OAAA,OAAAW,EAAAA,YAAAw2B,UAAA,CAAA,MAEe,GAAC1rB,GAAAiC,EAAGnB,EAAE,oBAAoB,CAAC,EAAAmB,EAAA,CAAA1N,QAAAA,IAAA,CAAA0N,CAAA,EAAA,EAAA/M,EAAAA,YAAAw2B,UAAA,CAAA,MAElC,EAAC,WACE2J,EAAAA,EAAS7gC,QAAT6gC,YAAAA,EAAgBI,aAAc,GAACz1B,GAAAyrB,EACxC3qB,EAAE,YAAY,CAAC,EAAA2qB,EAAA,CAAAl3B,QAAAA,IAAA,CAAAk3B,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAIpB,IACN,EAUM4W,GAAsB,CAAOjrC,EAAekrC,EAAmBjuC,IAAiBoD,GAAA,8BACpF,MAAM8qC,EAAcnrC,EAAE0d,OAAOX,QAAQ,gBAAgB,EAC/C9Y,EAAYknC,EAAYp6B,cAAc,4BAA4B,EAClEq6B,EAAYD,EAAYt6B,iBAAiB,cAAc,EACvDw6B,EAAcF,EAAYt6B,iBAAiB,gCAAgC,EACjF,IAAIy6B,EAAc,GAClB,OAAQruC,EAAI,CACV,IAAK,OACL,IAAK,SAEH,GADAquC,EAAcrnC,EAAU7G,MACpBkuC,EAAY37B,SAAW,EAEzB,OAEF,MACF,IAAK,OACH27B,EAAcD,EAAY,CAAC,EAAEjuC,MAAQ,IAAMiuC,EAAY,CAAC,EAAEjuC,MAC1D,MACF,IAAK,MACH,GAAIguC,IAAc,KAChB,UAAWpL,KAASoL,EACdlqC,GAAS8+B,EAAO,YAAY,GAC1BA,EAAMuL,YAAc7hC,EAAE,iBAAiB,IACzC4hC,EAAcA,IAAgB,GAAKA,EAAc,IAAMtL,EAAMjvB,cAAc,wBAAwB,EAAE3T,MAAQ4iC,EAAMjvB,cAAc,wBAAwB,EAAE3T,OAEnK,KACJ,CACA,GAAIkuC,EAAY37B,SAAW,GAAK27B,IAAgB,IAAK,CACnD99B,GAAQ9D,EAAE,wBAAwB,CAAC,EACnC,MACF,CAEA,GAAIzM,IAAS,QAEP,CADY,wCACH8qB,KAAKujB,CAAW,EAAG,CAC9B99B,GAAQ9D,EAAE,4BAA4B,CAAC,EACvC,MACF,CAGF,GAAIwhC,IAAc,KAAM,CACtB,MAAMvC,EAAK,CAAA,EACXA,EAAGjoC,GAAOwqC,EAAU97B,QAAQ,IAAK,GAAG,CAAC,EAAI,IAAMnS,CAAI,EAAIquC,EACvD,MAAMjD,KAAMj9B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBozB,mBAAwCA,GAAoB,CAAA,EAC3F6J,GAAGjrC,MAAM,WAAgB0L,OAAO0iC,OAAOnD,GAAGjrC,MAAM,YAAiB,CAAA,EAAIurC,CAAE,EACvE,MAAMvJ,KAAYh0B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBg0B,QAASriC,EAAMomC,WAEpD4B,EAAe3nC,MAAM8tC,CAAS,EAAI,GAClCvuB,SAAS2qB,KAAKr2B,MAAK,EAEnB,MAAM9O,GAAS,MAAM6/B,GAAKlB,gBAAgB,KAAMuH,GAAIjJ,GAAOnB,EAAS7gC,KAAK,EACrE+E,IAAUA,GAAOyiC,UACnBF,GAAWtnC,MAAQ+E,GACnBwiC,GAAYvnC,MAAQ+E,GAAOyiC,QAC3B8C,GAAY,GAId,MAAMjH,GADc,KAAK7P,IAAI7f,cAAc,uDAAuD,EACtEF,iBAAiB,iBAAiB,EACxDzN,GAAMq9B,GAAQ9wB,OACpB,QAAShQ,GAAI,EAAGA,GAAIyD,GAAKzD,KAAK,CAC5B,MAAM+gC,EAAID,GAAQ9gC,EAAC,EAAEoR,cAAc,iBAAiB,EAChD2vB,GAAKA,EAAEj6B,SAAS,CAAC,GAAKi6B,EAAEj6B,SAAS,CAAC,EAAEglC,aAAa,YAAY,IAAMP,GAAWxK,EAAEj6B,SAAS,CAAC,EAAEsuB,UAAU2W,IAAI,aAAa,CAC7H,CAEA,MAAMC,GAAiB,KAAK/a,IAAI7f,cAAc,6DAA6D,EAC3G,GAAI46B,KAAmB,KAAM,CAC3B,MAAMC,GAAaD,GAAe96B,iBAAiB,iBAAiB,EACpE,GAAI+6B,KAAe,KAAM,CACvB,MAAMC,EAASD,GAAWj8B,OAC1B,QAAShQ,GAAI,EAAGA,GAAIksC,EAAQlsC,KAAK,CAC/B,MAAM+gC,GAAIkL,GAAWjsC,EAAC,EAAEoR,cAAc,iBAAiB,EACnD2vB,IAAKA,GAAEj6B,SAAS,CAAC,GAAKi6B,GAAEj6B,SAAS,CAAC,EAAEglC,aAAa,YAAY,IAAMP,GAAWxK,GAAEj6B,SAAS,CAAC,EAAEsuB,UAAU2W,IAAI,aAAa,CAC7H,CACF,CACF,CACF,CACF,GAOMI,GAA2B,CAAO9rC,EAAekrC,EAAmBjuC,IAAqBoD,GAAA,8BAC7F,MAAM8qC,EAAcnrC,EAAE0d,OAAOX,QAAQ,gBAAgB,EAC/C9Y,EAAYknC,EAAYp6B,cAAc,4BAA4B,EAClEq6B,EAAYD,EAAYt6B,iBAAiB,cAAc,EACvDw6B,EAAcF,EAAYt6B,iBAAiB,gCAAgC,EACjF,OAAQ5T,EAAI,CACV,IAAK,OACL,IAAK,SACHgH,EAAU7G,MAAQ,GAClB,MACF,IAAK,OACHiuC,EAAY,CAAC,EAAEjuC,MAAQ,GACvBiuC,EAAY,CAAC,EAAEjuC,MAAQ,GACvB,MACF,IAAK,MACH,GAAIguC,IAAc,KAChB,UAAWpL,KAASoL,EACdlqC,GAAS8+B,EAAO,YAAY,IAE9BA,EAAMjvB,cAAc,wBAAwB,EAAE44B,QAAU,GACxD3J,EAAMjvB,cAAc,qBAAqB,EAAEgkB,UAAUgX,OAAO,YAAY,GAG9E,KACJ,CAEA,GAAIb,IAAc,KAAM,CACtB,MAAM7C,IAAMj9B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBozB,mBAAwCA,GAAoB,CAAA,EACrFmK,EAAKN,EAAGjrC,MAAM,WAChBurC,IAAO56B,QAAa46B,GAAM,MAAM,OAAOA,EAAGjoC,GAAOwqC,EAAU97B,QAAQ,IAAK,GAAG,CAAC,EAAI,IAAMnS,CAAI,EAE9ForC,EAAGjrC,MAAM,WAAgB0L,OAAO0iC,OAAOnD,EAAGjrC,MAAM,YAAiB,CAAA,EAAIurC,CAAE,EAEvE,MAAMvJ,KAAYh0B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBg0B,QAASriC,EAAMomC,WAMpD,GAHA4B,EAAe3nC,MAAM8tC,CAAS,EAAI,GAClCvuB,SAAS2qB,KAAKr2B,MAAK,EAEfhU,IAAS,OAAQ,CACnB,MAAM+uC,GAAab,EAAYp6B,cAAc,qBAAqB,EAClEi7B,GAAWC,aAAa,WAAY,UAAU,EAC9CD,GAAWjX,UAAU2W,IAAI,aAAa,CACxC,CAGA,MAAMvpC,GAAS,MAAM6/B,GAAKlB,gBAAgB,KAAMuH,EAAIjJ,GAAOnB,EAAS7gC,KAAK,EACzEsnC,GAAWtnC,MAAQ+E,GACnBwiC,GAAYvnC,MAAQ+E,GAAOyiC,QAC3B8C,GAAY,EAGZ,MAAMjH,EADc,KAAK7P,IAAI7f,cAAc,uDAAuD,EACtEF,iBAAiB,iBAAiB,EACxDzN,GAAMq9B,EAAQ9wB,OACpB,QAAShQ,GAAI,EAAGA,GAAIyD,GAAKzD,KAAK,CAC5B,MAAM+gC,GAAID,EAAQ9gC,EAAC,EAAEoR,cAAc,iBAAiB,EAChD2vB,IAAOA,GAAEj6B,SAAS,CAAC,GAAOi6B,GAAEj6B,SAAS,CAAC,EAAEglC,aAAa,YAAY,IAAMP,GAAWxK,GAAEj6B,SAAS,CAAC,EAAEsuB,UAAUgX,OAAO,aAAa,CACpI,CACA,MAAMvL,GAAmB,KAAK5P,IAAI7f,cAAc,6DAA6D,EAE7G,GAAIyvB,GAAkB,CACpB,MAAMG,GAAeH,GAAiB3vB,iBAAiB,iBAAiB,EAClE+vB,GAAWD,GAAahxB,OAC9B,QAAShQ,EAAI,EAAGA,EAAIihC,GAAUjhC,IAAK,CACjC,MAAM+gC,GAAIC,GAAahhC,CAAC,EAAEoR,cAAc,iBAAiB,EACrD2vB,IAAOA,GAAEj6B,SAAS,CAAC,GAAOi6B,GAAEj6B,SAAS,CAAC,EAAEglC,aAAa,YAAY,IAAMP,GAAWxK,GAAEj6B,SAAS,CAAC,EAAEsuB,UAAUgX,OAAO,aAAa,CACpI,CACF,CACF,CACF,GAUMG,GAAcA,CAACl4B,EAAeb,EAAgBg5B,IAAkB,CACpE,GAAI,CAACn4B,EAAO,OACZ,IAAIo4B,EAASp4B,EACTrH,IAAS,OAAMy/B,EAASp4B,EAAMgR,YAAW,GAC7C,IAAIqnB,EAAS,EACb,OAAID,EAAO18B,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI2iC,EAAS,IAC5CD,EAAO18B,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI2iC,EAAS,IACnDD,EAAO18B,QAAQhG,EAAE,aAAa,CAAC,IAAM,GAAI2iC,EAAS,GAClDD,EAAO18B,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI2iC,EAAS,IACjDD,EAAO18B,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,GAAI2iC,EAAS,IACzDD,EAAO18B,QAAQhG,EAAE,YAAY,CAAC,IAAM,IACpC0iC,EAAO18B,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,GADH2iC,EAAS,IAEjDr4B,IAAUtK,EAAE,oBAAoB,EAAG2iC,EAAS,IAC5CD,EAAO18B,QAAQhG,EAAE,eAAe,CAAC,IAAM,IACvC0iC,EAAO18B,QAAQhG,EAAE,aAAa,CAAC,IAAM,IACrCsK,IAAUtK,EAAE,gBAAgB,EAFe2iC,EAAS,IAGpDD,EAAO18B,QAAQhG,EAAE,aAAa,CAAC,IAAM,GAAI2iC,EAAS,IAClDr4B,EAAMtE,QAAQhG,EAAE,eAAe,CAAC,IAAM,IACtCsK,IAAUtK,EAAE,oBAAoB,GAChCsK,IAAUtK,EAAE,mBAAmB,EAFW2iC,EAAS,IAGnDD,IAAW1iC,EAAE,cAAc,GAC3B0iC,EAAO18B,QAAQhG,EAAE,cAAc,CAAC,IAAM,GADR2iC,EAAS,GAEvCr4B,IAAUtK,EAAE,WAAW,EAAG2iC,EAAS,IACnCr4B,IAAUtK,EAAE,aAAa,EAAG2iC,EAAS,IACrCD,EAAO18B,QAAQhG,EAAE,aAAa,CAAC,IAAM,GAAI2iC,EAAS,IAClDD,EAAO18B,QAAQhG,EAAE,WAAW,CAAC,IAAM,GAAI2iC,EAAS,IAChDr4B,IAAUtK,EAAE,WAAW,EAAG2iC,EAAS,GACnCD,EAAO18B,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI2iC,EAAS,IACjDD,EAAO18B,QAAQhG,EAAE,cAAc,CAAC,IAAM,IACtC0iC,EAAO18B,QAAQhG,EAAE,aAAa,CAAC,IAAM,IACrC0iC,EAAO18B,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAFG2iC,EAAS,IAGnDD,EAAO18B,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,GAAI2iC,EAAS,GACtDD,EAAO18B,QAAQhG,EAAE,aAAa,CAAC,IAAM,GAAI2iC,EAAS,IAClDD,EAAO18B,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI2iC,EAAS,IACnDD,EAAO18B,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI2iC,EAAS,IACjDD,EAAO18B,QAAQhG,EAAE,WAAW,CAAC,IAAM,GAAI2iC,EAAS,IAChDD,EAAO18B,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI2iC,EAAS,IACjDD,EAAO18B,QAAQ,GAAG,IAAM,GAAI28B,EAAS,GACrCD,EAAO18B,QAAQ,GAAG,IAAM,GAAI28B,EAAS,IACrCD,EAAO18B,QAAQ,GAAG,IAAM,GAAI28B,EAAS,IACrCD,EAAO18B,QAAQhG,EAAE,aAAa,CAAC,IAAM,GAAI2iC,EAAS,IAClDD,EAAO18B,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IAC1C0iC,EAAO18B,QAAQhG,EAAE,eAAe,CAAC,IAAM,GADO2iC,EAAS,IAEvDD,EAAO18B,QAAQ,MAAM,IAAM,GAAI28B,EAAS,IACxCD,IAAW1iC,EAAE,aAAa,GAC1BsK,IAAUtK,EAAE,cAAc,GAC1BsK,IAAUtK,EAAE,cAAc,EAFG2iC,EAAS,IAGtCr4B,IAAU,OAAQq4B,EAAS,IAC3BD,EAAO18B,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI2iC,EAAS,IACjDD,EAAO18B,QAAQhG,EAAE,aAAa,CAAC,IAAM,KAAI2iC,EAASF,IAAS,GAAO,IAAM,KAE7Eh5B,IAAU,IAAQk5B,EAAS,IAAGA,GAAU,IAGxCF,IAAS,IAAQE,EAAS,IAAGA,GAAU,IACpCA,CACT,EAWMC,GAAkBA,CAACxmB,EAAK0jB,EAAQ+C,EAAWn8B,IAG3Cm8B,GAAa,MAAQA,EAAU3oC,IAAMmK,OAAkBw+B,EAAU3oC,EACzD2oC,IAAcx+B,OAAY,GAAKw+B,EASvCC,GAAsBjuC,GAAgB,CAC1C,MAAMkuC,EAAkBt8B,MAAMu8B,KAAK/vB,SAAS2qB,KAAKz2B,iBAA8B,qBAAqB,CAAC,EACrG,IAAIs6B,EACJ,UAAWwB,KAAOF,EAChB,GAAIE,EAAIzD,MAAM73B,UAAY,OAAQ,CAChC85B,EAAcwB,EACd,KACF,CACF,GAAI,CAACxB,EAAa,OAClB,MAAMa,EAAab,EAAYp6B,cAA2B,qBAAqB,EAC1Ei7B,IACoBztC,GAAQ,MAAQA,IAAQ,IAC/CytC,EAAWY,gBAAgB,UAAU,EACrCZ,EAAWjX,UAAUgX,OAAO,aAAa,IAEzCC,EAAWC,aAAa,WAAY,UAAU,EAC9CD,EAAWjX,UAAU2W,IAAI,aAAa,GAE1C,EAWMmB,GAAmBA,CAAC5vC,EAAc+W,EAAepT,EAAcijB,EAA6BxT,IAAmC,CAAA,IAAAwhB,EAAAib,EAAAC,EAAAC,EAC/H7a,EAAuB,KACvB8a,EAAK58B,IAAetC,OAAYsC,EAAa,GACjD,OAAQpT,EAAI,CACV,IAAK,OACL,IAAK,SACHk1B,0DAGmB,GAAGzoB,EAAE,cAAc,CAAC,MAAMsK,CAAK,GAAE,KACxC2yB,EAAUvpC,MAAK,QACZovC,GAAkB,KACrB5rC,CAAI,EAAA,IAAA,EAAA9C,EAAAA,YAAA,MAAA,CAAA,MAAA,kBAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,KAAA,UAAA,KAIFm1B,EAAUvpC,MAAK,QACX4C,IAAMirC,GAAoBjrC,GAAGY,EAAM3D,CAAI,GAAC2L,GAAAipB,EACjDnoB,EAAE,cAAc,CAAC,EAAAmoB,EAAA,CAAA10B,QAAAA,IAAA,CAAA00B,CAAA,EAAA,EAAA/zB,EAAAA,YAAA0T,GAAA,CAAA,KAGZm1B,EAAUvpC,MAAK,QACX4C,IAAM8rC,GAAyB9rC,GAAGY,EAAM3D,CAAI,GAAC2L,GAAAkkC,EACtDpjC,EAAE,aAAa,CAAC,EAAAojC,EAAA,CAAA3vC,QAAAA,IAAA,CAAA2vC,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAKzB,MACF,IAAK,OACH3a,0DAGmB,GAAGzoB,EAAE,cAAc,CAAC,MAAMsK,CAAK,GAAE,KACxC2yB,EAAUvpC,MAAK,KAAA,YAAA,OAEbymB,EAAO,eACDA,EAAO,KAEfjjB,CAAI,EAAA,IAAA,EAAA9C,EAAAA,YAAA,MAAA,CAAA,MAAA,kBAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,KAAA,UAAA,KAKFm1B,EAAUvpC,MAAK,QACX4C,IAAMirC,GAAoBjrC,GAAGY,EAAM3D,CAAI,GAAC2L,GAAAmkC,EACjDrjC,EAAE,cAAc,CAAC,EAAAqjC,EAAA,CAAA5vC,QAAAA,IAAA,CAAA4vC,CAAA,EAAA,EAAAjvC,EAAAA,YAAA0T,GAAA,CAAA,KAGZm1B,EAAUvpC,MAAK,QACX4C,IAAM8rC,GAAyB9rC,GAAGY,EAAM3D,CAAI,GAAC2L,GAAAokC,EACtDtjC,EAAE,aAAa,CAAC,EAAAsjC,EAAA,CAAA7vC,QAAAA,IAAA,CAAA6vC,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAKzB,MACF,IAAK,MACH,GAAInpB,EAAS,CACX,IAAIvgB,GAAM,CAAA,EACV,MAAM+jB,GAAMxD,EAAQmB,YAAW,EAC/B,IAAIwC,GAEJ,GADI,KAAK0lB,QAAU,KAAKA,OAAOC,UAAS3lB,GAAY,KAAK0lB,OAAOC,QAAQ3lB,UAAUH,EAAG,GACjFxD,IAAY,QAAU2D,GAAWlkB,GAAMkkB,WAElC3D,IAAY,OAAQ,CACvB7P,EAAMtE,QAAQ,GAAG,GAAK,IAAGu9B,EAAK,SAMlC,IAAIxlB,GAEJ,GADI,KAAKylB,QAAU,KAAKA,OAAOC,UAAS1lB,GAAO,KAAKylB,OAAOC,QAAQC,cAC/D3lB,GAAM,CACR,MAAME,GAAQ,CAAA,EACdA,GAAM,IAAS,OACfA,GAAM,KAAUF,GAChB,KAAKylB,OAAOG,SAAS,oBAAqB1lB,EAAK,EAC/CrkB,GAAMmkB,EACR,CACF,KAAO,CACL,IAAIA,GAEJ,GADI,KAAKylB,QAAU,KAAKA,OAAOC,UAAS1lB,GAAO,KAAKylB,OAAOC,QAAQ1lB,KAAKJ,EAAG,GACvEI,GAAM,CACR,MAAME,GAAQ,CAAA,EACdA,GAAM,IAASN,GACfM,GAAM,KAAUF,GAChB,KAAKylB,OAAOG,SAAS,oBAAqB1lB,EAAK,EAC/CrkB,GAAMmkB,EACR,CACF,CAEA,IAAI6lB,EAAOhqC,GACX,GAAI2pC,EAAI,CACN,MAAM1rC,GAAM,IAAIumB,OAAOmlB,EAAI,GAAG,EAC9BK,EAAOhqC,GAAI8D,OAAQqI,IAAMlO,GAAIwmB,KAAKtY,GAAEmW,CAAC,CAAC,CACxC,CAMA,GAAI0nB,GAAQA,EAAK39B,SAAW5B,QAAau/B,EAAK39B,OAAS,EAAG,CAAA,IAAA49B,GAAAC,GAAAC,GACxDH,EAAK1F,OAAO,EAAE,EACdzV,0FAIiB,GAAK,IAAA,WAAA,MAEPzoB,EAAE,iBAAiB,EAAC,MACpB,CAAE2H,QAAS,SAAS,cACZ60B,GAAgBtlC,CAAI,EAAC,SAC1B8sC,mBAAkB,MAAA,eAAA9kC,GAAA2kC,GAE3B7jC,EAAE,iBAAiB,CAAC,EAAA6jC,GAAA,CAAApwC,QAAAA,IAAA,CAAAowC,EAAA,EAAA,EAAAzvC,EAAAA,YAAAggB,YAAA,CAAA,MAAA,mBAAA,IAAA,EAGtBwvB,EAAKhjC,IAAKmF,IAAC3R,EAAAA,YAAAuW,aAAA,CAAA,QAEC,GAAK,IACT5E,GAAEmW,EAAC,MACDnW,GAAEmW,EAAC,MACH,CAAEvU,QAAS,SAAS,SACjBs8B,gBAAe,MAAA,aAAA,EAAA,CAAAxwC,QAAAA,IAAA,CAExBwP,IAAS,QAAU8C,GAAE/F,EAAI+F,GAAEzP,CAAC,EAAA,CAEhC,CAAC,GAAAlC,EAAAA,YAAA,MAAA,CAAA,MAAA,kBAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,KAAA,UAAA,KAKMm1B,EAAUvpC,MAAK,SAAA,OAAA,QAEX4C,IAAMirC,GAAoBjrC,GAAGY,EAAM3D,CAAI,GAAC2L,GAAA4kC,GACjD9jC,EAAE,cAAc,CAAC,EAAA8jC,GAAA,CAAArwC,QAAAA,IAAA,CAAAqwC,EAAA,EAAA,EAAA1vC,EAAAA,YAAA0T,GAAA,CAAA,KAGZm1B,EAAUvpC,MAAK,QACX4C,IAAM8rC,GAAyB9rC,GAAGY,EAAM3D,CAAI,GAAC2L,GAAA6kC,GACtD/jC,EAAE,aAAa,CAAC,EAAA+jC,GAAA,CAAAtwC,QAAAA,IAAA,CAAAswC,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAK3B,MAAOtb,EAAS,IAClB,MAAOA,EAAS,KAEhB,KACJ,CACA,OAAOA,EAASkV,GAAsBlV,CAAM,EAAI,IAClD,EAcMyb,GAAyBA,CAACriC,EAAmB3K,IAAiB,CAClE2K,GAAAA,MAAAA,EAAOsS,kBACPmpB,GAAgBpmC,CAAI,CACtB,EAOMitC,GAAmBA,CAACnrC,EAAqB0N,EAAeu3B,EAAgCmG,IAAmC,CAC/H,KAAM,CACJltC,KAAAA,EACAoT,MAAAA,EACA+5B,MAAAA,EACAvzB,MAAAA,EACAoc,SAAAA,EAAW,IACXoX,MAAAA,EAAQ,OACRC,UAAAA,EACAhxC,KAAAA,GAAO,OACP4mB,QAAAA,GACA1Q,MAAAA,GAAQ,GACRgf,OAAAA,EACAga,KAAAA,GAAO,GACPj1B,OAAAA,GACAg3B,SAAAA,GACAC,UAAAA,GACAC,WAAAA,EACA3wC,OAAAA,GAAS,GACTgsC,UAAAA,GAAY,GACZp5B,WAAAA,GACAC,UAAAA,GACAwT,UAAAA,GACAE,SAAAA,GAAW,GACXzV,GAAAA,GACA+D,SAAAA,GAAW,GACX/B,SAAAA,GAAW,OACX89B,WAAAA,GACAx5B,IAAAA,GACAvX,IAAAA,GACA4mB,aAAAA,GAAe,GACfoqB,cAAAA,GACAC,aAAAA,GAAe,GACfC,WAAAA,GAAa,GACbC,MAAAA,GACAxc,MAAAA,EACF,EAAIvvB,EACJ,IAAIgsC,GAAmB,GACnBL,KAAYK,GAAmB,IACnC,IAAIC,GAAU,GAGd,GAFIlxC,KAAW,KAAMkxC,GAAU,IAC3BlF,KAAc,KAAMkF,GAAU,IAC9BA,KAAY,GAAM,OAAO,KAE7B,IAAIpb,GAASvf,EACT46B,GAAQhuC,EACRA,GAAQA,EAAK8O,QAAQ,GAAG,EAAI,IAAGk/B,GAAQhuC,EAAK4O,MAAM,GAAG,EAAE,CAAC,GAC5D,MAAM1P,GAAM6nC,IAAe,SAAWkH,KAAKC,OAAM,EAAKF,GAEtD,IAAInW,GAA+B,eAC/BroB,GAASi0B,EAAW10B,OAAS,IAAG8oB,GAAY,cAChD,IAAIsW,GAAS5K,IAAe,SAAWp2B,OAAYggC,EAC/CD,IAAe,MAAKiB,GAAShhC,QAC7Bg2B,IAAiB,UAASgL,GAAShhC,QAEnCghC,KAAQxb,GAASA,GAAS,IAC1BpgB,KAAU,KACZogB,GAASA,GAAS,MAClBuR,EAAY3d,KAAKvmB,CAAI,EACrB4kC,GAAgBpoC,MAAQ,IAE1B+pC,GAAiBvmC,CAAI,EACrB,MAAMouC,GAAW7K,IAAe,SAAW,GAAQ,SAEnD,IAAIkI,GAOJ,GANI7xB,IAAU,SACRA,EAAO6xB,GAAS7xB,EACf6xB,GAASH,GAAYl4B,EAAOb,GAAOg5B,EAAI,GAC1C3H,IAAgB,IAAS2H,KAAS,KAAM3H,EAAc,IAGtDgK,IAAcA,KAAe,IAC/B,GAAIC,IAASt+B,MAAMxR,QAAQ8vC,EAAK,EAAG,CACjC,MAAMQ,GAAuB,CAAA,EAC7BR,OAAAA,GAAMlnC,QAASkI,IAAM,CACnB,MAAMy/B,GAAQz/B,GAAExS,MAAQ,OACxB,IAAIkyC,GAAU1/B,GAAEuE,MACZo7B,GAAS3/B,GAAE7O,KACX6O,GAAE7O,MAAQ6O,GAAE7O,KAAK8O,QAAQ,GAAG,EAAI,IAAG0/B,GAAS3/B,GAAE7O,KAAK4O,MAAM,GAAG,EAAE,CAAC,GACnE,MAAM6/B,GAAO1H,IAAe,SAAWkH,KAAKC,OAAM,EAAKM,GAEvD,IAAIE,GAAUnL,IAAe,SAAWp2B,OAAY0B,GAAEs+B,MAClDD,IAAe,MAAKwB,GAAUvhC,QAE9BuhC,KAASH,GAAUA,GAAU,IAC7B1/B,GAAE0D,QAAU,KACdg8B,GAAUA,GAAU,MACpBrK,EAAY3d,KAAK1X,GAAE7O,IAAI,EACvB4kC,GAAgBpoC,MAAQ,IAE1B,IAAImyC,GAAoB,GACpB9/B,GAAE4+B,aAAYkB,GAAoB,IAEtCpI,GAAiB13B,GAAE7O,IAAI,EACvB,MAAM4uC,GAAYrL,IAAe,SAAW,GAAQ,SAEpD,IAAIsL,GACAhgC,GAAE+K,QAAU,SACV/K,GAAE+K,MAAOi1B,GAAUhgC,GAAE+K,MACpBi1B,GAAUvD,GAAYz8B,GAAEuE,MAAOvE,GAAE0D,MAAO1D,GAAE08B,IAAI,GACrD8C,GAAY9nB,KAAIrpB,EAAAA,YAAA4xC,gBAAA,CAAA,MAELJ,GAAO,KACRF,GAAM,MACLD,GAAO,MACPM,GAAO,MACPhgC,GAAEu+B,MAAK,aACFoB,GAAM,IACbC,GAAI,wBACc,GAAI,UAChBpB,EAAYA,EAAU3B,EAAe,EAAIA,GAAe,YACxD1V,EAAQ,SACT4Y,GAAS,WACP//B,GAAE4+B,WAAU,iBACNkB,GAAiB,eACrB9/B,GAAEu+B,OAAS,OAAM,MACxB,CAAE38B,QAASs9B,GAAU,OAAS,IAAI,cAC5B,CAAC,YAAa,YAAY,CAAC,EAAA,CAEtCh9B,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,QAEMkC,IAAMg5B,GAAqBh5B,EAAC,EAAC,MAAA,kBAAA,CAAAlC,EAAAA,YAAAo7B,YAAA,CAAA,QAG5B6L,EAAe3nC,MAAMqS,GAAE7O,IAAI,EAAC,mBAClBrC,IAAiB,CAClCwmC,EAAe3nC,MAAQyK,GAAAP,GAAA,GAAKy9B,EAAe3nC,OAApB,CAA2B,CAACqS,GAAE7O,IAAI,EAAGrC,IAC9D,EAAC,QAAA,QAAA,MAAA,OAAA,YAGY+jC,GAAiC,UACnC,GAAI,UACJ7J,GAAS,YACP,0CAA0C17B,EAAMylC,QAAQ,GAAE,gBACxDuG,GAAiB,gBACjBM,EAAiB,EAAA,CAE9BlsC,QAASA,IAAM0vC,GAAiBqC,GAAOz/B,GAAEuE,MAAOvE,GAAE7O,KAAM6O,GAAEoU,QAASpU,GAAEY,UAAU,EAC/E5E,UAAWA,IAAA3N,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,QAGGkC,IAAM4tC,GAAuB5tC,GAAGyP,GAAE7O,IAAI,CAAC,EAAA,CAChDuuC,GAAOrxC,EAAAA,YAAAkI,GAAA,CAAA,SAAA,KAAA,SAAA,WAAA,EAAA,IAAA,CAAA,CAAA,CAKX,CAAA,CAAA,CAAA,CAIR,CAAA,CAGP,CACF,CAAC,EACDlI,EAAAA,YAAA4xC,EAAAA,cAAA,CAAA,MAA6BlB,GAAa,EAAE,EAAA5lC,GAAGqmC,EAAW,EAAXA,GAAW,CAAA9xC,QAAAA,IAAA,CAAX8xC,EAAW,CAAA,CAAA,CAC5D,UACS,OAAO9c,GAAW,WAAY,CAEvC,IAAIrN,GAAY,kBAChB,OAAIqnB,KAAS,KAAMrnB,IAAa,oBAChChnB,EAAAA,YAAA4xC,EAAAA,cAAA,CAAA,MAGW,CAAEr+B,QAASs9B,GAAU,OAAS,IAAI,KACnCC,GAAK,MACJrb,GAAM,MACN8Y,GAAM,MACN2B,EAAK,IACPluC,GAAG,aACI8uC,GAAK,wBACM,GAAK,UACjBX,EAAYA,EAAU3B,EAAe,EAAIA,GAAe,YACxD1V,EAAQ,SACToY,GAAQ,eACJhB,GAAS,OAAM,cAChB,CAAC,YAAa,YAAY,EAAC,aAC5BlpB,EAAS,EAAA,CAEnB3nB,QAAUwyC,IACQxd,EAAOwd,GAAOf,EAAK,EAGrCj9B,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,MAAA,gBAAA,EAAA,CAAmCkW,CAAK,CAAA,CAAO,CAAA,CAI/D,KAAO,QAAIm4B,KAAS,GAClBruC,EAAAA,YAAA4xC,EAAAA,cAAA,CAAA,MAEW,CAAEr+B,QAASs9B,GAAU,OAAS,IAAI,MAClCI,GAAM,KACPH,GAAK,MACJrb,GAAM,MACN8Y,GAAM,MACN2B,EAAK,IACPluC,GAAG,aACI8uC,GAAK,wBACM,GAAK,UACjBX,EAAYA,EAAU3B,EAAe,EAAIA,GAAe,YACxD1V,EAAQ,SACToY,GAAQ,eACJhB,GAAS,OAAM,cAChB,CAAC,YAAa,YAAY,EAAC,aAAA,iBAAA,EAAA,CAMtC7wC,QAAUwyC,IAEQC,cACdD,GACA37B,EACA46B,GACAhuC,EACA3D,GACA4mB,GACA3M,GACAg3B,GACAC,GACA99B,GACAC,GACAwT,GACAE,GACAzV,GACA+D,GACA/B,GACA4hB,EACAic,EACAv5B,GACAvX,GACA4mB,GACAoqB,GACArc,EACF,EAGFtgB,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,MAAA,gBAAA,EAAA,CAAmCkW,CAAK,CAAA,CAAO,CAAA,EAItD/W,KAAS,MAEhBa,EAAAA,YAAA4xC,EAAAA,cAAA,CAAA,MAEWX,GAAM,MACN,CAAE19B,QAASs9B,GAAU,OAAS,IAAI,KACnCC,GAAK,MACJrb,GAAM,MACN8Y,GAAM,MACN2B,EAAK,IACPY,GAAK,aACEA,GAAK,wBACM,GAAI,UAChBX,EAAYA,EAAU3B,EAAe,EAAIA,GAAe,YACxD1V,EAAQ,SACToY,GAAQ,eACJhB,GAAS,OAAM,cAChB,CAAC,YAAa,YAAY,EAAC,aAAA,iBAAA,EAAA,CAGtC7wC,QAAUwyC,IACRA,GAAM7pB,IAAI8oB,EAAK,IAAM,MAAQ,OAAOe,GAAM7pB,IAAI8oB,EAAK,GAAM,SACvDe,GAAM7pB,IAAI8oB,EAAK,EAAEhrC,sCACP+rC,GAAM7pB,IAAI8oB,EAAK,EAAEhrC,CAAC,EAAA,EACxB,KACF+rC,GAAM7pB,IAAI8oB,EAAK,sCACTe,GAAM7pB,IAAI8oB,EAAK,CAAC,CAAA,CAAA,EACtB,KACNj9B,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,MAAA,gBAAA,EAAA,CAAmCy1B,EAAM,CAAA,CAAO,CAAA,EAK9D1P,KAAY,WACZA,KAAY,QACZA,KAAY,QACZ7P,EAAMtE,QAAQ,GAAG,IAAM,IACvBsE,EAAMtE,QAAQ,IAAI,IAAM,IACxBsE,EAAMtE,QAAQ,KAAK,IAAM,IACzB3S,EAAMimC,YAAc,QACpBjmC,EAAMimC,YAAc,UACpBjmC,EAAMimC,YAAc,UACpBjmC,EAAMimC,YAAc,SAEhBuL,KAAiB,GAEjBzwC,EAAAA,YAAA4xC,EAAAA,cAAA,CAAA,MAESX,GAAM,MACN,CAAE19B,QAASs9B,GAAU,OAAS,IAAI,KACnCC,GAAK,MACJrb,GAAM,MACN8Y,GAAM,MACN2B,EAAK,aACAY,GAAK,IACZ9uC,GAAG,wBACe,GAAI,UAChBmuC,EAAYA,EAAU3B,EAAe,EAAIA,GAAe,YACxD1V,EAAQ,SACToY,GAAQ,WACNX,GAAU,iBACJK,GAAgB,eACpBV,GAAS,OAAM,cAChB,CAAC,YAAa,YAAY,CAAC,EAAA,CAGtCr8B,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,MAAA,gBAAA,EAAA,CAAmCy1B,EAAM,CAAA,CAAO,CAAA,EAM5Dz1B,EAAAA,YAAA4xC,EAAAA,cAAA,CAAA,MAESX,GAAM,MACN,CAAE19B,QAASs9B,GAAU,OAAS,IAAI,KACnCC,GAAK,MACJrb,GAAM,MACN8Y,GAAM,MACN2B,EAAK,aACAY,GAAK,IACZ9uC,GAAG,wBACe,GAAI,UAChBmuC,EAAYA,EAAU3B,EAAe,EAAIA,GAAe,YACxD1V,EAAQ,SACToY,GAAQ,WACNX,GAAU,iBACJK,GAAgB,eACpBV,GAAS,OAAM,cAChB,CAAC,YAAa,YAAY,CAAC,EAAA,CAGtCr8B,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,QAEMkC,IAAMg5B,GAAqBh5B,EAAC,EAAC,MAAA,kBAAA,CAAAlC,EAAAA,YAAAo7B,YAAA,CAAA,QAG5B6L,EAAe3nC,MAAMwD,CAAI,EAAC,mBAChBrC,IAAiB,CAClCwmC,EAAe3nC,MAAQyK,GAAAP,GAAA,GAAKy9B,EAAe3nC,OAApB,CAA2B,CAACwD,CAAI,EAAGrC,IAC5D,EAAC,QAAA,QAAA,MAAA,OAAA,YAGY+jC,GAAiC,UACnC,GAAI,UACJ7J,GAAS,YACP,0CAA0C17B,EAAMylC,QAAQ,GAAE,gBACxDuG,GAAiB,gBACjBM,EAAiB,EAAA,CAE9BlsC,QAASA,IAAM0vC,GAAiB5vC,GAAM+W,EAAOpT,EAAMijB,GAASxT,EAAU,EACtE5E,UAAWA,IAAA3N,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,QAGGkC,IAAM4tC,GAAuB5tC,GAAGY,CAAI,CAAC,EAAA,CAC9C2yB,GAAMz1B,EAAAA,YAAAkI,GAAA,CAAA,SAAA,KAAA,SAAA,WAAA,EAAA,IAAA,CAAA,CAAA,CAKV,CAAA,CAAA,CAAA,CAIR,CAAA,EAKTlI,EAAAA,YAAA4xC,gBAAA,CAAA,MAEWX,GAAM,KACPH,GAAK,MACJ,CAAEv9B,QAASs9B,GAAU,OAAS,IAAI,MAClCpb,GAAM,MACN8Y,GAAM,MACN2B,EAAK,IACPY,GAAK,WACEP,GAAU,iBACJK,GAAgB,aACtBE,GAAK,wBACM,GAAI,UAChBX,EAAYA,EAAU3B,EAAe,EAAIA,GAAe,YACxD1V,EAAQ,SACToY,GAAQ,eACJhB,GAAS,OAAM,cAChB,CAAC,YAAa,YAAY,CAAC,EAAA,CAEtCr8B,OAAQA,IAAA7T,EAAAA,YAAA,MAAA,CAAA,MAAA,kBAAA,CAAmCf,EAAMimC,YAAc,OAASzP,GAASvf,CAAK,CAAA,CAAO,CAAA,CAIvG,EAOM67B,GAAeA,CAACF,EAAOG,EAAmB/Q,EAAe5M,EAAwB4d,EAAuBC,IAAsB,CAClI,IAAIC,EAAWH,EACf,OAAI3d,IAAQ8d,EAAW9d,EAAOwd,EAAOG,CAAO,GAC5ChyC,EAAAA,YAAA,MAAA,CAAA,MAAA,QAAA,CAEKmyC,EAAS3lC,IAAI,CAAC5H,EAAc0N,IAAkB,CAC7C,IAAIX,EAAI/M,EACJ4kB,EAAK,IACL/c,GAAW,GACf,GAAI7H,EAAKgN,QAAQ,GAAG,EAAI,EAAG,CACzB,MAAME,GAAMlN,EAAK8M,MAAM,GAAG,EAC1BC,EAAIG,GAAI,CAAC,EACLA,GAAI,CAAC,IAAM,MACb0X,EAAK,IACL/c,GAAW,GAGf,CAEA,IAAI2lC,GAAW,GACXH,IAAYG,GAAWH,EAAW3/B,CAAK,GAC3C,IAAI+/B,GAAS,GACTnvC,EAAO,GAEPovC,GAAa,GAuFjB,OAtFI3gC,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,IAAM+F,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,IAAM+F,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,eACnHyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,IAAM+F,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,IAC/E1I,EAAO,iBACPkvC,GAAW,IACFzgC,EAAEC,QAAQhG,EAAE,WAAW,CAAC,IAAM,GAAI1I,EAAO,cAC3CyO,EAAEC,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,IAAM+F,EAAEC,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,GAAI1I,EAAO,eAC3FyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,IACxC0mC,GAAa,IACbpvC,EAAO,mBACEyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,IAGnC+F,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,IAF3C1I,EAAO,mBACPkvC,GAAW,IAIFzgC,EAAEC,QAAQhG,EAAE,aAAa,CAAC,IAAM,IACzC1I,EAAO,uBACPkvC,GAAW,IACFzgC,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,IAC1C1I,EAAO,iBACPmvC,GAAS,IACA1gC,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,IAC3C1I,EAAO,iBACPmvC,GAAS,IACA1gC,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,IAAM+F,EAAEC,QAAQhG,EAAE,aAAa,CAAC,IAAM,IACvE+F,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,IAC/B+F,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAFyC1I,EAAO,eAGlFyO,EAAEC,QAAQhG,EAAE,aAAa,CAAC,IAAM,IAChC+F,EAAEC,QAAQhG,EAAE,aAAa,CAAC,IAAM,GADI1I,EAAO,iBAE3CyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,4BAC9CyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,4BAC5CyO,EAAEC,QAAQhG,EAAE,oBAAoB,CAAC,IAAM,IAAM+F,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,2BAC3FyO,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,IAAM+F,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,iBACnFyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,IAAM+F,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,iBACnFyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,iBAC9CyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,iBAC5CyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,kBAC5CyO,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI1I,EAAO,6BAC1CyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,kBAC5CyO,EAAEC,QAAQhG,EAAE,aAAa,CAAC,IAAM,GAAI1I,EAAO,sCAC3CyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,kBAC9CyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,kBAC5CyO,EAAEC,QAAQhG,EAAE,aAAa,CAAC,IAAM,GAAI1I,EAAO,iBAC3CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,qBAC7CyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,mCAC9CyO,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI1I,EAAO,kBAC1CyO,EAAEC,QAAQhG,EAAE,aAAa,CAAC,IAAM,GAAI1I,EAAO,kBAC3CyO,EAAEC,QAAQhG,EAAE,WAAW,CAAC,IAAM,GAAI1I,EAAO,sBACzCyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,eAC7CyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,kBAC9CyO,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI1I,EAAO,mBAC1CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,kBAC7CyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,wBAC5CyO,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI1I,EAAO,yBAC1CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,iBAC7CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,eAC7CyO,EAAEC,QAAQhG,EAAE,UAAU,CAAC,IAAM,IAC7B+F,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GADA1I,EAAO,iBAExCyO,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI1I,EAAO,eAC1CyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,iBAC5CyO,EAAEC,QAAQhG,EAAE,cAAc,CAAC,IAAM,GAAI1I,EAAO,kBAC5CyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,gBAC9CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,cAC7CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,iBAC7CyO,EAAEC,QAAQhG,EAAE,sBAAsB,CAAC,IAAM,GAAI1I,EAAO,oBACpDyO,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,GAAI1I,EAAO,wBAC1CyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,wBAC9CyO,EAAEC,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,GAAI1I,EAAO,qBACjDyO,EAAEC,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,GAAI1I,EAAO,iBAC/CyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,wBAC9CyO,EAAEC,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,GAAI1I,EAAO,wBACjDyO,EAAEC,QAAQhG,EAAE,gBAAgB,CAAC,IAAM,GAAI1I,EAAO,oBAC9CyO,EAAEC,QAAQhG,EAAE,iBAAiB,CAAC,IAAM,GAAI1I,EAAO,kBAC/CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,kBAC7CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,eAC7CyO,EAAEC,QAAQhG,EAAE,eAAe,CAAC,IAAM,GAAI1I,EAAO,uBAC7CyO,EAAEC,QAAQhG,EAAE,kBAAkB,CAAC,IAAM,GAAI1I,EAAO,oBAChDyO,EAAEC,QAAQhG,EAAE,mBAAmB,CAAC,IAAM,GAAI1I,EAAO,qBACjDyO,EAAEC,QAAQhG,EAAE,YAAY,CAAC,IAAM,IACtC1I,EAAO,kBACPovC,GAAa,KACRpvC,EAAO,wBAGVgvC,GAAW7/B,MAAMxR,QAAQqxC,CAAO,GAAKA,EAAQrgC,OAASS,GAAS4/B,EAAQ5/B,CAAK,IAAGpP,EAAOgvC,EAAQ5/B,CAAK,GACnG4zB,IAAqB,KAAOhjC,EAAO,IACnCkvC,KAAa,GACXjM,IAAkB,GACbjjC,EAAGlD,EAAAA,YAAA+1B,EAAAA,UAAA,CAAA,QAEGpkB,EAAC,OAAA,OAAA,UAAA,MAAA,UAGC,GAAI,EAAA,CAAAtS,QAAAA,IAAA,CAAAW,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,EAAA,CAAAA,EAAAA,YAAA,OAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,MAIF9O,EAAI,KACL+M,EAAC,KACDk3B,EAAUvpC,MAAK,KACf4D,EAAI,SACAuJ,GAAQ,QACT8lC,IAAM,CAEbrjC,QAAQ,KAAK,EAAEkE,KACb,IAAM,CACJ,GAAIy+B,EAAMW,OAASviC,QAAa4hC,EAAMW,OAAS,GAAO,CACpD,GAAIriC,EAAQ7Q,QAAU,GAAM,OAC5BoqC,GAAY,EACZmI,EAAMW,KAAO,GACbvR,EAAO3uB,CAAK,EAAEu/B,EAAM7pB,IAAK6pB,EAAMY,MAAM,EAAEr/B,KACrC,IAAM,CACJu2B,GAAW,EACXkI,EAAMW,KAAO,EACf,EACA,IAAM,CACJ7I,GAAW,EACXkI,EAAMW,KAAO,EACf,CACF,CACF,CACF,EACA,IAAM,CACJ7I,GAAW,EACXkI,EAAMW,KAAO,EACf,CACF,CACF,CAAC,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAAxyC,EAAAA,YAAA+1B,YAAA,CAAA,QAMEpkB,EAAC,OAAA,OAAA,UAAA,MAAA,UAGC,GAAI,EAAA,CAAAtS,QAAAA,IAAA,CAAAW,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,EAAA,CAAAA,EAAAA,YAAA,OAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,MAIF9O,EAAI,KACL+M,EAAC,KACDk3B,EAAUvpC,MAAK,KAAA,OAAA,SAEXmN,GAAQ,QACT8lC,IAAM,CAEbrjC,QAAQ,GAAGtD,EAAE,iBAAiB,CAAC,IAAI+F,CAAC,IAAI/F,EAAE,cAAc,CAAC,IAAI,EAAEwH,KAC7D,IAAM,CACJ,GAAIy+B,EAAMW,OAASviC,QAAa4hC,EAAMW,OAAS,GAAO,CACpD,GAAIriC,EAAQ7Q,QAAU,GAAM,OAC5BoqC,GAAY,EACZmI,EAAMW,KAAO,GACbvR,EAAO3uB,CAAK,EAAEu/B,EAAM7pB,IAAK6pB,EAAMY,MAAM,EAAEr/B,KACrC,IAAM,CACJu2B,GAAW,EACXkI,EAAMW,KAAO,EACf,EACA,IAAM,CACJ7I,GAAW,EACXkI,EAAMW,KAAO,EACf,CACF,CACF,CACF,EACA,IAAM,CACJ7I,GAAW,EACXkI,EAAMW,KAAO,EACf,CACF,CACF,CAAC,EAAA1nC,GACA6G,CAAC,EAADA,EAAC,CAAAtS,QAAAA,IAAA,CAADsS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAOZ3R,EAAAA,YAAA6N,GAAA,CAAA,MAEW,GAAGjC,EAAE,iBAAiB,CAAC,IAAI+F,CAAC,IAAI/F,EAAE,cAAc,CAAC,KAAI,UACjD8mC,IAAM,CACf,GAAIb,EAAMW,OAASviC,QAAa4hC,EAAMW,OAAS,GAAO,CACpD,GAAIriC,EAAQ7Q,QAAU,GAAM,OAC5BoqC,GAAY,EACZmI,EAAMW,KAAO,GACbvR,EAAO3uB,CAAK,EAAEu/B,EAAM7pB,IAAK6pB,EAAMY,MAAM,EAAEr/B,KACrC,IAAM,CACJu2B,GAAW,EACXkI,EAAMW,KAAO,EACf,EACA,IAAM,CACJ7I,GAAW,EACXkI,EAAMW,KAAO,EACf,CACF,CACF,CACF,CAAC,EAAA,CAEC7kC,UAAWA,IAAA3N,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,EAAA,CAENkD,EAAGlD,EAAAA,YAAA+1B,YAAA,CAAA,QAESpkB,EAAC,OAAA,OAAA,UAAA,MAAA,UAGC,GAAI,EAAA,CAAAtS,QAAAA,IAAA,CAAAW,cAAA,OAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,MAGJ9O,EAAI,KACL+M,EAAC,KACDk3B,EAAUvpC,MAAK,KACf4D,EAAI,SACAuJ,GAAQ,QACT8lC,IAAM,CACb,CACD,EAAA,IAAA,CAAA,CAAA,CAAA,EAAA,EAAAvyC,EAAAA,YAAA+1B,YAAA,CAAA,QAKIpkB,EAAC,OAAA,OAAA,UAAA,MAAA,UAGC,GAAI,EAAA,CAAAtS,QAAAA,IAAA,CAAAW,cAAA,OAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,MAGJ9O,EAAI,KACL+M,EAAC,KACDk3B,EAAUvpC,MAAK,KAAA,OAAA,SAEXmN,GAAQ,QACT8lC,IAAM,CACb,CACD,EAAAznC,GACA6G,CAAC,EAADA,EAAC,CAAAtS,QAAAA,IAAA,CAADsS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAIT,CAAA,CAEJ,CAAA,EAIF0gC,KAAW,GAClBryC,EAAAA,YAAAo7B,EAAAA,UAAA,CAAA,MAEWzpB,EAAC,UACGy0B,EAAe,QAAA,QAAA,UAEf,GAAI,gBACAuM,IAAMC,wBAAwB3R,EAAQ3uB,EAAOu/B,EAAM7pB,IAAK6pB,EAAMY,MAAM,EAAC,YAAA,eAAA,EAAA,CAGlF9kC,UAAWA,IAAA3N,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,EAAA,CAENkD,EAAGlD,EAAAA,YAAA+1B,YAAA,CAAA,QAESpkB,EAAC,OAAA,OAAA,UAAA,MAAA,UAGC,GAAI,EAAA,CAAAtS,QAAAA,IAAA,CAAAW,cAAA,OAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,MAGJ9O,EAAI,KACL+M,EAAC,KACDk3B,EAAUvpC,MAAK,KACf4D,EAAI,SACAuJ,GAAQ,QACT8lC,IAAM,CACb,CACD,EAAA,IAAA,CAAA,CAAA,CAAA,EAAA,EAAAvyC,EAAAA,YAAA+1B,YAAA,CAAA,QAKIpkB,EAAC,OAAA,OAAA,UAAA,MAAA,UAGC,GAAI,EAAA,CAAAtS,QAAAA,IAAA,CAAAW,cAAA,OAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,MAGJ9O,EAAI,KACL+M,EAAC,KACDk3B,EAAUvpC,MAAK,KAAA,OAAA,SAEXmN,GAAQ,QACT8lC,IAAM,CACb,CACD,EAAAznC,GACA6G,CAAC,EAADA,EAAC,CAAAtS,QAAAA,IAAA,CAADsS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIT,CAAA,EAGLtS,QAASA,IAAMwoC,GAAiB,EAM/B3kC,EAAGlD,EAAAA,YAAA+1B,YAAA,CAAA,QAEGpkB,EAAC,OAAA,OAAA,UAAA,MAAA,UAGC,GAAI,EAAA,CAAAtS,QAAAA,IAAA,CAAAW,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,EAAA,CAAAA,EAAAA,YAAA,OAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,MAIF9O,EAAI,QACF4kB,IAAO,IAAG,SACT/c,GAAQ,KACZkF,EAAC,KACDk3B,EAAUvpC,MAAK,QACZizC,IAAM,CAGb,GAAID,KAAe,KACjB,GAAIO,aAAahB,EAAMY,MAAM,EAC3B,GAAI,CACF/I,GAAY,EACZzI,EAAO3uB,CAAK,EAAEu/B,EAAM7pB,IAAK6pB,EAAMY,MAAM,EAAEr/B,KACrC,IAAM,CACJu2B,GAAW,CACb,EACA,IAAM,CACJA,GAAW,CACb,CACF,CACF,OAAQznC,GAAA,CACNynC,GAAW,CACb,MAEF,IAAI,CACFD,GAAY,EACZzI,EAAO3uB,CAAK,EAAEu/B,EAAM7pB,IAAK6pB,EAAMY,MAAM,EAAEr/B,KACrC,IAAM,CACJu2B,GAAW,CACb,EACA,IAAM,CACJA,GAAW,CACb,CACF,CACF,OAAQznC,GAAA,CACNynC,GAAW,CACb,CACJ,EAAC,KACKzmC,CAAI,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAAlD,EAAAA,YAAA+1B,YAAA,CAAA,QAMPpkB,EAAC,OAAA,OAAA,UAAA,MAAA,UAGC,GAAI,EAAA,CAAAtS,QAAAA,IAAA,CAAAW,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,EAAA,CAAAA,EAAAA,YAAA,OAAA,KAAA,CAAAA,EAAAA,YAAA0T,GAAA,CAAA,MAIF9O,EAAI,QACF4kB,IAAO,IAAG,SACT/c,GAAQ,KACZkF,EAAC,KACDk3B,EAAUvpC,MAAK,KAAA,OAAA,QAEZizC,IAAM,CAIb,GADA7I,GAAY,EACR4I,KAAe,KACjB,GAAIO,aAAahB,EAAMY,MAAM,EAC3B,GAAI,CACFxR,EAAO3uB,CAAK,EAAEu/B,EAAM7pB,IAAK6pB,EAAMY,MAAM,EAAEr/B,KACrC,IAAM,CACJu2B,GAAW,CACb,EACA,IAAM,CACJA,GAAW,CACb,CACF,CACF,OAAQznC,GAAA,CACNynC,GAAW,CACb,MAEF,IAAI,CACF1I,EAAO3uB,CAAK,EAAEu/B,EAAM7pB,IAAK6pB,EAAMY,MAAM,EAAEr/B,KACrC,IAAM,CACJu2B,GAAW,CACb,EACA,IAAM,CACJA,GAAW,CACb,CACF,CACF,OAAQznC,GAAA,CACNynC,GAAW,CACb,CACJ,CAAC,EAAA7+B,GACA6G,CAAC,EAADA,EAAC,CAAAtS,QAAAA,IAAA,CAADsS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAMhB,CAAC,CAAC,CAAA,CAGR,EASMw6B,GAAiBA,CAACtC,EAAqBiJ,IAAmC,OAC9E,MAAMnoC,EAAe,CAAA,EAGrB,GAFA47B,EAAasD,IAAe,WAAaiJ,EAAgB7zC,EAAM0lC,UAE3DkF,IAAe,WACjBpB,EAAe75B,EAAW25B,CAAU,EAChCE,GAAc,CAChB,MAAMsK,EAAuB,CAAA,EACvBC,EAAkBvK,EAAa/2B,MAAM,GAAG,EAC9C,IAAIuhC,EAAa,EACb1M,EAAW,CAAC,EAAEpnC,OAAS,UACzB4zC,EAAI,CAAC,EAAIvpC,GAAA,GAAK+8B,EAAW,CAAC,GAC1B0M,EAAa,EACT1M,EAAW,CAAC,EAAEpnC,OAAS,WAAU4zC,EAAI,CAAC,EAAIvpC,GAAA,GAAK+8B,EAAW,CAAC,IAC/D0M,EAAa,GACJ1M,EAAW,CAAC,EAAEpnC,OAAS,WAChC8zC,EAAa,EACbF,EAAI,CAAC,EAAIvpC,GAAA,GAAK+8B,EAAW,CAAC,IAG5ByM,EAAgBvpC,QAAQ,CAACkI,GAAWW,KAAkB,CACpD,MAAMkX,GAAK7X,GAAED,MAAM,GAAG,EAChBwhC,EAAK3M,EAAWj9B,OAAQ6pC,IAAMA,GAAErwC,OAAS0mB,GAAG,CAAC,CAAC,EACpD,GAAI0pB,EAAGrhC,OAAS,EAAG,CACjB,GAAIqhC,EAAG,CAAC,EAAEvzC,SAAW,GAAM,CACzBuzC,EAAG,CAAC,EAAEvH,UAAYniB,GAAG,CAAC,IAAM,IAC5B,MAAM4pB,GAAW,CACf7uB,WAAY2uB,EAAG,CAAC,EAAEpwC,KAClBoT,MAAOg9B,EAAG,CAAC,EAAEh9B,OAEX2zB,IAAe,WAChBxB,GAAe/oC,MAAgB+pB,KAAK+pB,EAAQ,EACzCF,EAAG,CAAC,EAAEvH,YAAc,IAAQniB,GAAG,CAAC,IAAM,KAAK8e,EAAkBhpC,MAAM+pB,KAAK6pB,EAAG,CAAC,EAAEpwC,IAAI,EAE1F,CACAiwC,EAAIzgC,GAAQ2gC,CAAU,EAAIzpC,GAAA,GAAK0pC,EAAG,CAAC,EACrC,CACF,CAAC,EACD3M,EAAawM,CACf,CAKF,IAAI9C,EAA4BhK,EAC5BM,EAAW,CAAC,EAAEpnC,OAAS,WACzB8wC,EAAQhgC,OACRo2B,EAAa,UAGXA,IAAe,WAAU4J,EAAQhgC,QAErC,IAAI+/B,EAAa,IACbzJ,EAAW5wB,KAAMhE,GAAMA,EAAE6C,WAAa,EAAI,IAC5Cw7B,EAAa,IACbC,EAAQhgC,QAGNhR,EAAMqmC,QAAU,KAClB2K,EAAQhgC,OACR+/B,EAAa,KAIXzJ,EAAW,CAAC,EAAEpnC,OAAS,UACzBwL,EAAI0e,KAAIrpB,EAAAA,YAAA4xC,gBAAA,CAAA,KAAA,SAAA,IAAA,SAAA,aAAA,SAAA,KAAA,SAAA,MAAA,KAAA,MAOG3B,CAAK,EAAA,CACT5wC,QAAUwyC,GAAU,SAAKtL,OAAAA,GAAAA,EAAAA,EAAW,CAAC,GAAElS,SAAdkS,YAAAA,EAAAA,KAAAA,EAAuBsL,GAAK,CAAA,CAE5D,EACF,IAAIwB,EAAc,MACdlT,EAAAA,EAAS7gC,QAAT6gC,MAAAA,EAAgBC,iBACdD,EAAS7gC,MAAM8gC,eAAiBD,EAAS7gC,MAAMihC,UAAY,IAAO8S,EAAc,KAC3ElT,EAAS7gC,MAAM8gC,eAAiBD,EAAS7gC,MAAMihC,UAAY,MAAM8S,EAAc,OAEtFpD,IAAU,OACZtlC,EAAI0e,KAAIrpB,EAAAA,YAAA4xC,EAAAA,cAAA,CAAA,MAEG3B,EAAK,IAAA,UAAA,aAAA,UAAA,MAILrkC,EAAE,eAAe,EAAC,MAClBynC,EAAW,YACPA,CAAW,EAAA,CAEpBh0C,QAAUwyC,GAAU,OAGlB,OAAI1R,EAAAA,EAAS7gC,QAAT6gC,MAAAA,EAAgBC,gBAAwBD,EAAS7gC,MAAM8gC,iBAAmB,GAAK,EAAID,EAAS7gC,MAAM8gC,eAAiB,GAAKD,EAAS7gC,MAAMihC,UAAYsR,EAAMY,OAAS,EAC1JZ,EAAMY,OAAS,CAC7B,EAAC,CAGP,EAEA9nC,EAAI0e,KAAIrpB,EAAAA,YAAA4xC,EAAAA,cAAA,CAAA,IAAA,UAAA,aAAA,UAAA,MAKGhmC,EAAE,eAAe,EAAC,MAClBynC,EAAW,YACPA,CAAW,EAAA,CAEpBh0C,QAAUwyC,GAAU,OAClB,OAAI1R,EAAAA,EAAS7gC,QAAT6gC,MAAAA,EAAgBC,gBAAwBD,EAAS7gC,MAAM8gC,iBAAmB,GAAK,EAAID,EAAS7gC,MAAM8gC,eAAiB,GAAKD,EAAS7gC,MAAMihC,UAAYsR,EAAMY,OAAS,EAC1JZ,EAAMY,OAAS,CAC7B,CAAC,CAAA,CAGP,EAEExzC,EAAMqmC,QAAU,KACd2K,IAAU,OACZtlC,EAAI0e,KAAIrpB,EAAAA,YAAA4xC,gBAAA,CAAA,MAAA,OAAA,KAAA,QAAA,IAAA,QAAA,KAAA,YAAA,MAAA,MAAA,IAAA,CAOR,EAEAjnC,EAAI0e,KAAIrpB,EAAAA,YAAA4xC,gBAAA,CAAA,KAAA,QAAA,IAAA,QAAA,KAAA,YAAA,MAAA,IAAA,EAAA,IAAA,CAMR,GAEJ,MAAM0B,EAAa/M,EAAWj9B,OAAQqI,GAAMA,EAAExS,OAAS,QAAQ,EAC/D,GAAI8mC,IAAiB,QACfqN,EAAWzhC,OAAS,EAAG,CACzB,MAAMmgC,EAAUsB,EAAW,CAAC,EAAEtB,SAAW,CAAA,EACnC/Q,EAASqS,EAAW,CAAC,EAAErS,QAAU,CAAA,EACjC5M,EAASif,EAAW,CAAC,EAAEjf,OACvB4d,GAAaqB,EAAW,CAAC,EAAEpkC,SAAW,CAAA,EACtChM,GAAOowC,EAAW,CAAC,EAAEpwC,MAAQ,CAAA,EAC/BowC,EAAW,CAAC,EAAE52B,MAAOqrB,GAAc,CAACuL,EAAW,CAAC,EAAE52B,MAC7CwpB,IAAqB,GACxB8L,EAAQngC,SAAW,EAErBk2B,GAAc,GACXA,GAAciK,EAAQngC,SAAW,EAAImgC,EAAQngC,OAAS,GAAKmgC,EAAQngC,OAAS,GAC1EmgC,EAAQngC,SAAW,EAAGk2B,GAAciK,EAAQx8B,KAAK,EAAE,EAAE3D,OAAS,GAC9DhD,IAAS,QAASk5B,GAAciK,EAAQx8B,KAAK,EAAE,EAAE3D,OAAS,GAC9Dk2B,GAAciK,EAAQx8B,KAAK,EAAE,EAAE3D,OAAS,GAE7C,MAAM0hC,wCAEK3nC,EAAE,cAAc,EAAC,IAAA,SAAA,aAAA,SAAA,KAAA,SAAA,MAIjBqkC,EAAK,MACLlI,EAAW,EAAA,CACf1oC,QAAUwyC,GAAeE,GAAaF,EAAOG,EAAS/Q,EAAQ5M,EAAQ4d,GAAY/uC,EAAI,IAG7FyH,EAAI0e,KAAKkqB,EAAY,CACvB,CAsBF,GApBAvM,EAAc,CAAA,EACdT,EAAW98B,QAAQ,CAAC7E,EAAqB0N,IAAkB,CACzD,GAAI1N,EAAKzF,OAAS,UAAYyF,EAAKzF,OAAS,SAAU,CACpD,MAAMq0C,EAAczD,GAAiBnrC,EAAM0N,EAAOu3B,EAAYmG,CAAU,EAExE,GADIwD,GAAa7oC,EAAI0e,KAAKmqB,CAAW,EACjC,CAAC/K,GAAgBoB,IAAe,UAC9BjlC,EAAKjF,SAAW,GAAM,CACxB,MAAMyzC,GAAW,CACf7uB,WAAY3f,EAAK9B,KACjBoT,MAAOtR,EAAKsR,OAEbmyB,GAAe/oC,MAAgB+pB,KAAK+pB,EAAQ,EAC7C9K,EAAkBhpC,MAAM+pB,KAAKzkB,EAAK9B,IAAI,CACxC,CACJ,CAKF,CAAC,EACGmjC,IAAiB,SACfqN,EAAWzhC,OAAS,EAAG,CACzB,MAAMmgC,EAAUsB,EAAW,CAAC,EAAEtB,SAAW,CAAA,EACnC/Q,EAASqS,EAAW,CAAC,EAAErS,QAAU,CAAA,EACjC5M,EAASif,EAAW,CAAC,EAAEjf,OACvB4d,GAAaqB,EAAW,CAAC,EAAEpkC,SAAW,CAAA,EACtChM,GAAOowC,EAAW,CAAC,EAAEpwC,MAAQ,CAAA,EAC/BowC,EAAW,CAAC,EAAE52B,MAAOqrB,GAAc,CAACuL,EAAW,CAAC,EAAE52B,MAC7CwpB,IAAqB,GACxB8L,EAAQngC,SAAW,EAErBk2B,GAAc,GACXA,GAAciK,EAAQngC,SAAW,EAAImgC,EAAQngC,OAAS,GAAKmgC,EAAQngC,OAAS,GAC1EmgC,EAAQngC,SAAW,EACtBhD,IAAS,QAASk5B,GAAciK,EAAQx8B,KAAK,EAAE,EAAE3D,OAAS,GACzDk2B,GAAciK,EAAQx8B,KAAK,EAAE,EAAE3D,OAAS,GACtChD,IAAS,QAASk5B,GAAciK,EAAQx8B,KAAK,EAAE,EAAE3D,OAAS,GAC9Dk2B,GAAciK,EAAQx8B,KAAK,EAAE,EAAE3D,OAAS,GAE7C,MAAM0hC,wCAEK3nC,EAAE,cAAc,EAAC,IAAA,SAAA,aAAA,SAAA,KAAA,SAAA,MAIjBqkC,EAAK,MACLlI,EAAW,EAAA,CACf1oC,QAAUwyC,GAAeE,GAAaF,EAAOG,EAAS/Q,EAAQ5M,EAAQ4d,GAAY/uC,EAAI,IAG7FyH,EAAI0e,KAAKkqB,EAAY,CACvB,CAGF,OAAO5oC,CACT,EAOM8oC,GAAoBC,GAAwHnxC,GAAA,MAAxHmxC,GAAwH,UAAxH,CAAEhI,OAAAA,EAAQ5oC,KAAAA,EAAM6wC,MAAAA,CAAkG,EAAM,WAChJ,MAAMC,EAAY9wC,IAAQ4oC,GAAAA,YAAAA,EAAQvC,UAC5B0K,GAAcF,EAAAA,GAAAA,KAAAA,EAASjI,GAAAA,YAAAA,EAAQiI,QAAjBA,KAAAA,EAA0B,KAC9C,GAAItM,GAAc/nC,QAAU,EAAG,CAE7B,IAAIw0C,EAAU,CAAA,EACdjN,GAAYvnC,MAAMmK,QAAS7E,GAAS,CAC9BA,EAAK5F,OAAS4M,EAAE,cAAc,IAAGkoC,EAAUlvC,EACjD,CAAC,EACGivC,IAAgB,KAClBhN,GAAYvnC,MAAQunC,GAAYvnC,MAAMy0C,KAAK,CAACpyC,EAAGC,KAAM,CACnD,IAAIoyC,GAAOryC,EAAE,QACTsyC,GAAOryC,GAAE,QAKb,OAHIoyC,GAAKluC,IAAGkuC,GAAOA,GAAKluC,GAEpBmuC,GAAKnuC,IAAGmuC,GAAOA,GAAKnuC,GACpB,CAACouC,MAAM30C,OAAOy0C,EAAI,CAAC,GAAK,CAACE,MAAM30C,OAAO00C,EAAI,CAAC,EAAUD,GAAOC,GACpDD,GAAKzzC,SAAQ,EAAG4zC,cAAcF,GAAK1zC,UAAU,CAC3D,CAAC,EACMszC,IAAgB,aAAeA,IAAgB,MAEtDhN,GAAYvnC,MAAQunC,GAAYvnC,MAAMy0C,KAAK,CAACpyC,EAAGC,KAAM,CACnD,IAAIoyC,GAAOryC,EAAEiyC,CAAS,GAAK,GACvBK,GAAOryC,GAAEgyC,CAAS,GAAK,GAK3B,OAHII,GAAKluC,IAAGkuC,GAAOA,GAAKluC,GAEpBmuC,GAAKnuC,IAAGmuC,GAAOA,GAAKnuC,GACpB,CAACouC,MAAM30C,OAAOy0C,EAAI,CAAC,GAAK,CAACE,MAAM30C,OAAO00C,EAAI,CAAC,EAAUD,GAAOC,GACpDD,GAAKzzC,SAAQ,EAAG4zC,cAAcF,GAAK1zC,UAAU,CAC3D,CAAC,EAEDsmC,GAAYvnC,MAAMmK,QAAQ,CAAC7E,EAAM0N,MAC3B1N,EAAK5F,OAAS4M,EAAE,cAAc,GAAGi7B,GAAYvnC,MAAMwqC,OAAOx3B,GAAO,CAAC,EAC/D1N,EACR,EACGoG,OAAOkD,KAAK4lC,CAAO,EAAEjiC,OAAS,GAAGg1B,GAAYvnC,MAAM+pB,KAAKyqB,CAAO,GAC1DD,IAAgB,eAEzBhN,GAAYvnC,MAAQunC,GAAYvnC,MAAMy0C,KAAK,CAACpyC,EAAGC,KAAM,CACnD,IAAIoyC,GAAOryC,EAAEiyC,CAAS,GAAK,GACvBK,GAAOryC,GAAEgyC,CAAS,GAAK,GAK3B,OAHII,GAAKluC,IAAGkuC,GAAOA,GAAKluC,GAEpBmuC,GAAKnuC,IAAGmuC,GAAOA,GAAKnuC,GACpB,CAACouC,MAAM30C,OAAOy0C,EAAI,CAAC,GAAK,CAACE,MAAM30C,OAAO00C,EAAI,CAAC,EAAUA,GAAOD,GACpDC,GAAK1zC,SAAQ,EAAG4zC,cAAcH,GAAKzzC,UAAU,CAC3D,CAAC,EACDsmC,GAAYvnC,MAAMkN,IAAI,CAAC5H,EAAM0N,MACvB1N,EAAK5F,OAAS4M,EAAE,kBAAkB,GAAGi7B,GAAYvnC,MAAMwqC,OAAOx3B,GAAO,CAAC,EACnE1N,EACR,EACGoG,OAAOkD,KAAK4lC,CAAO,EAAEjiC,OAAS,GAAGg1B,GAAYvnC,MAAM+pB,KAAKyqB,CAAO,EAEvE,KAAO,CAEL,MAAMvJ,IAAMj9B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBozB,mBAAwCA,GAAoB,CAAA,EACrF8J,IAAWl9B,EAAAA,GAAAA,YAAAA,EAAU0E,UAAV1E,YAAAA,EAAmBg0B,QAAgBriC,EAAMomC,WAC1D,GAAI,CAACmF,EAAS,CACZ96B,GAAQ9D,EAAE,sBAAsB,CAAC,EACjC,MACF,CACA,MAAMwoC,GAAyB,CAAA,EAE/BA,GAAG,YAAiBR,EACpBQ,GAAG,UAAeP,IAAgB,YAAc,MAAQ,OACxDtJ,EAAG,UAAe6J,GAClB,MAAM/vC,GAAS,MAAM6/B,GAAKlB,gBAAgB11B,EAAUi9B,EAAIC,EAASrK,EAAS7gC,KAAK,EAC3E+E,KACFuiC,GAAWtnC,MAAQ+E,GACnBwiC,GAAYvnC,MAAQ+E,GAAOyiC,QAC3B8C,GAAY,EAEhB,CAGA3C,EAAe3nC,MAAMs0C,CAAS,EAAI,GAClC/0B,SAAS2qB,KAAKr2B,MAAK,CACrB,GAUMkhC,GAAcA,CAACrsB,EAAsB0jB,EAAgDj+B,IAAsB,CAC/G,MAAMmS,EAASnS,EAAMmS,OACrB,GAAKA,GAEDA,EAAO00B,UAAY,IAClB,EACH,MAAMC,EAAO30B,EAAOX,QAAQ,iBAAiB,EAC7C,GAAIs1B,GAAQnxC,GAASmxC,EAAqB,yBAAyB,EAAG,MACxE,CACA,GAAI7N,IAAgB,GAClB,GAAI,OAAO7/B,EAAM2tC,eAAkB,WAAYnnC,EAAK,eAAgB2a,EAAK0jB,EAAQj+B,CAAK,MACjF,CACH,MAAMgnC,EAAK70B,EAAOX,QAAQ,gBAAgB,EAC1C,GAAI,CAACw1B,EAAI,OACT,MAAMC,EAAMD,EAAG9rC,SACf,IAAIgsC,EAA+B,KACnC,QAAS9yC,EAAI,EAAGA,EAAI6yC,EAAI7iC,OAAQhQ,IAAK,CACnC,MAAM+yC,EAASF,EAAI7yC,CAAC,EAAEkR,iBAA8B,wBAAwB,EAC5E,QAAS8hC,EAAI,EAAGA,EAAID,EAAO/iC,OAAQgjC,IAAK,CACtC,MAAMC,EAAMF,EAAOC,CAAC,EAEpB,GAAIC,GAAOA,EAAI1J,MAAM73B,UAAY,OAAQ,CACvCohC,EAAWG,EACX,KACF,CACF,CACA,GAAIH,EAAU,KAChB,CACAA,GAAAA,MAAAA,EAAUxhC,OACZ,EACJ,EA6DAtG,OAAAA,EAAAA,MACE,IAAM5N,EAAM0lC,UACZ,CAAC1vB,EAAQ8/B,IAAY,EACf9/B,EAAOpD,SAAWkjC,EAAQljC,QAEhBgmB,GAAW5iB,EAAQqxB,CAAe,IAClC,MAAM2B,GAAW3oC,MAAQ6sC,GAAc,EAEvD,CACF,EACAt/B,QACE,IAAMkkB,EAAWzxB,MACjB,IAAM,CACAL,EAAMimC,YAAc,WAClBlU,KAAgB,IACdC,KAAa,GACXuV,IAASzV,EAAWzxB,MAAQknC,GAE/BzV,EAAWzxB,MAAQ2Q,OAC5B,CACF,EACApD,EAAAA,MACE,IAAM5N,EAAM2lC,UACX/mB,GAAa,CACZ+oB,GAAWtnC,MAAQue,CACrB,CACF,EAEAhR,EAAAA,MACE,IAAM+5B,GAAWtnC,MAChBue,GAAa,CACRA,IACFgpB,GAAYvnC,MAAQue,EAASipB,SAAWjpB,GAEpCgpB,GAAYvnC,QAAU2Q,QAAa42B,GAAYvnC,MAAMuS,SAAW5B,UAAW42B,GAAYvnC,MAAQ,CAAA,GAC/FunC,GAAYvnC,MAAMuS,OAAS,GAAKg1B,GAAYvnC,MAAM,CAAC,EAAE,WACvD0oC,GAAYnB,GAAYvnC,MAAM,CAAC,EAAE,UACjCunC,GAAYvnC,MAAMwqC,OAAO,EAAG,CAAC,EACzB7B,GAAW3oC,MAAMuS,SAAW,IAC9B00B,EAAW98B,QAASkI,GAAqB,CACvC,IAAIm/B,EAAQn/B,EAAE7O,KACVguC,GAASA,EAAMl/B,QAAQ,GAAG,EAAI,IAAGk/B,EAAQA,EAAMp/B,MAAM,GAAG,EAAE,CAAC,GAC3DzS,EAAMumC,OACJ7zB,EAAE2c,MAAQ,KAEZ6Z,GAAkB9e,KAAK1X,EAAE9L,QAAU8L,EAAE9L,QAAU,CAAC,EAChD8L,EAAEu+B,MAAQ,SAGd,MAAMjN,EAA4B+E,IAAAA,YAAAA,GAAY8I,GAC9C,GAAI7N,EAAO,CACT,MAAM+R,EAAU/R,EAAMvxB,MAAM,GAAG,EAC/B,OAAQsjC,EAAQ,CAAC,EAAC,CAChB,IAAK,UACHrjC,EAAEoU,QAAU,UACZ,MACF,IAAK,OACHpU,EAAEoU,QAAU,OACZ,MACF,IAAK,OACHpU,EAAEoU,QAAU,OACZ,MACF,IAAK,MACHpU,EAAExS,KAAO,MACTwS,EAAEoU,QAAUivB,EAAQ,CAAC,EACrB,MACF,IAAK,WACHrjC,EAAExS,KAAO,MACTwS,EAAEoU,QAAU,OACZ,MACF,IAAK,OACHpU,EAAExS,KAAO,OACTwS,EAAEc,SAAWuiC,EAAQ,CAAC,EACtB,KACJ,CACF,CACF,CAAC,EACD/M,GAAW3oC,MAAQ6sC,GAAc,IAE9BlE,GAAW3oC,MAAQ6sC,GAAc,EACxChM,EAAS7gC,MAAQwpC,EAAYxpC,MAEzB6gC,EAAS7gC,MAAMihC,UAAY,EAAG8G,GAAc/nC,MAAQ,EACnD+nC,GAAc/nC,MAAQ,EAEvBunC,GAAYvnC,OAASunC,GAAYvnC,MAAMuS,OAAS,EAAGq1B,GAAkB5nC,MAAQ,GAC5E4nC,GAAkB5nC,MAAQ,IAKjC2e,EAAAA,SAAS,IAAM,SAEb,MAAMrL,GAAStF,EAAAA,GAAAA,YAAAA,EAAU3I,QAAV2I,YAAAA,EAAiBuF,GAChC8L,GAAa/L,CAAM,EAGf3T,EAAM2mC,SAAS3mC,EAAM2mC,QAAQiB,GAAYvnC,MAAOsnC,GAAWtnC,KAAK,GACpEspC,EAAAA,EAAStpC,QAATspC,MAAAA,EAAgBqM,UAClB,CAAC,CACH,CACF,EAGA3kB,EAAO,CACL2Y,YAAAA,GACA3H,MACAoI,aAAAA,GACAC,YAAAA,GACAjJ,iBAAAA,CACF,CAAC,EAIiBra,EAAU2J,WACV,OAAMnhB,EAAO,MAC/By3B,EAAkBxb,KAAKC,MAAMD,KAAKwN,UAAUr5B,EAAM0lC,SAAS,CAAC,EAGxD35B,OAAOkD,KAAKjP,EAAM2lC,SAAS,EAAE/yB,SAAW,IAAGq2B,GAAe5oC,MAAQ6sC,GAAe,QAAQ,GACzFltC,EAAMimC,YAAc,UACtByC,GAAWroC,MAAQ,GACnBkoC,GAAUloC,MAAQ,IACTL,EAAMimC,YAAc,WAAUgD,GAAe5oC,MAAQ6sC,GAAc,GAC1EltC,EAAM2lC,WAAa3lC,EAAM2lC,UAAU50B,OACrC22B,EAAY1nC,EAAM2lC,UAAU50B,KAExB/Q,EAAM2lC,UAAUoE,MAAQ,EAAG3B,GAAc/nC,MAAQ,EAChD+nC,GAAc/nC,MAAQ,GAIzBmoC,KAAc,KAChBE,GAAWroC,MAAQ,GACnBsoC,GAAUtoC,MAAQ,GAClBkoC,GAAUloC,MAAQ,IAIhBynC,GAAU3sB,SAASusB,CAAS,IAAM,KACpCI,GAAU+C,OAAO,EAAG,EAAGnD,CAAS,EAChCI,GAAUgN,KAAK,SAAU/kC,EAAGkmC,EAAG,CAC7B,OAAIlmC,EAAIkmC,EAAU,GACTlmC,EAAIkmC,EAAU,EACX,CACd,CAAC,GAGCj2C,EAAMimC,YAAc,UAEtB4C,GAAWxoC,MAAQ,2BAEnBmnC,EAAUnnC,MAAQ,SACTL,EAAMimC,YAAc,WAAeuB,EAAUnnC,QAAOmnC,EAAUnnC,MAAQ,QAGjFsqC,GAAa,QAAQ,EAGrBvqB,EAAAA,UAAU,IAAM,CACdqpB,EAAiB7kC,GAAS+mC,GAAmB,GAAG,EAChD3sB,EAAAA,SAAS,IAAM,OACb,MAAMrL,GAAStF,EAAAA,GAAAA,YAAAA,EAAU3I,QAAV2I,YAAAA,EAAiBuF,GAKhC,GAJAsM,OAAOG,iBAAiB,QAAS,IAAM,CACrC4pB,GAAe,CACjB,CAAC,EACD/pB,OAAOG,iBAAiB,SAAU,IAAMX,GAAa/L,CAAM,CAAC,EACxDA,EAAQ,CACV,MAAMuiC,EAAmBviC,EAAOK,cAAc,yBAAyB,EACnEkiC,GAAkBA,EAAiB71B,iBAAiB,SAAUmqB,GAAe,EAAK,EAClF72B,EAAOqM,QAAQ,iBAAiB,IAAGgS,GAAW,IAClD,MAAMsH,EAAa3lB,EAAOqM,QAAQ,yBAAyB,EACvDsZ,IAAYvH,GAActtB,GAAa60B,CAAU,GACjD3lB,EAAOqM,QAAQ,qBAAqB,IAAG6R,GAAkB,GAC/D,CACF,CAAC,CACH,CAAC,EAGM,IAAM,CAAA,IAAAskB,EACXjV,OAAAA,EAAS7gC,MAAQwpC,EAAYxpC,MACtBL,EAAM4Q,mCAEF5Q,EAAMimC,YAAc,SAAW,iDAAmD,sBAAqB,MACvG,CAAExoB,MAAO,OAAQoc,SAAU,MAAO2L,SAAUgC,EAAUnnC,KAAM,GAAC,CAAAU,EAAAA,YAAAq1C,GAAA,CAAA,QAC/C7N,GAAUloC,OAAKwL,GAAAsqC,EAAG7I,GAAW,CAAE,EAAA6I,EAAA,CAAA/1C,QAAAA,IAAA,CAAA+1C,CAAA,CAAA,CAAA,EACnDzI,GAAS,EACT3B,GAAc,EACdiC,GAAY,EAAEvU,EAAAA,eAAA14B,EAAAA,YAAA,MAAA,CAAA,MAAA,yBAAA,uBAAA,cAAA,CAAAA,EAAAA,YAAAs1C,UAAA,CAAA,IAMNp2C,EAAI,KAEH2nC,GAAYvnC,MAAK,OACfL,EAAMimC,YAAc,SAAW,GAAQjmC,EAAMkX,OAAM,wBACpC,GAAI,eAAA,QAAA,MAAA,cAAA,OAGnBqwB,EAAO,aACHzV,EAAWzxB,MAAK,OACpB,GAAI,UACF0oB,GAAaA,EAAIqb,QAAO,kBACjBpkC,EAAM4mC,cAAa,YACzB5mC,EAAM8lC,SAAQ,aACb9lC,EAAMgmC,UAAS,yBAAA,mBAAA,eAGbhmC,EAAMumC,MAAK,gBAIViO,GAAU,iBACTY,GAAW,MAKpBp1C,EAAMimC,YAAc,SAAW,oBAAsBjmC,EAAMkX,SAAW,GAAO,GAAG3X,EAAS,GAAK,mBAAmB,EAAA,CAAAa,QAAAA,IAAA,CACvHJ,EAAM2lC,WAAa55B,OAAOkD,KAAKjP,EAAM2lC,SAAS,EAAE/yB,OAAS,EAAIo2B,GAAW3oC,MAAQ4oC,GAAe5oC,KAAK,EAAA,CAAA,CAAA,EAAA,CAAA,CAAAi2C,EAAAA,4BA9B5FplC,EAAQ7Q,KAAK,CAAA,CAAA,EAAAU,EAAAA,YAAAw1C,EAAAA,aAAA,CAAA,MAkCjB,CAAEjiC,QAAStU,EAAMsmC,WAAa,GAAK,QAAQ,UACvCwB,GAAS,SACV5G,EAAS7gC,MAAM+gC,eAAc,OAC/ByH,GAAWxoC,MAAK,MACjB6gC,EAAS7gC,MAAMghC,UAAS,YAClBH,EAAS7gC,MAAM8gC,eAAc,iBACxB,GAAI,qBACFqK,GAAgB,wBACbC,GAAmB,MAAA,eAAA,EAAA,IAAA,CAAA,CAAA,EAG5C,IACN,CACF,CACF,CAAC,qCC1tFG+K,GAAgB,CACpB,QAAQ52C,EAAgB,OACtBA,EAAI,WAAUwB,EAAAq1C,GAAQ,OAAR,KAAAr1C,EAAgB,UAAWq1C,EAAO,CAClD,CACF,0BCUiC,CAC7B12C,KAAM,YACNC,MAAO,CACLD,KAAM,CACJG,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEXiG,MAAO,CACL/W,KAAMC,OACNiR,SAAU,GACVhR,QAAS4Q,QAEXxD,SAAU,CACRtN,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEX0d,UAAW,CACT5d,KAAM,CAACI,OAAQH,MAAM,EACrBiR,SAAU,GACVhR,QAAS4Q,QAEXJ,QAAS,CACP1Q,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,IAEXs2C,WAAY,CACVx2C,KAAMO,QACN2Q,SAAU,GACVhR,QAAS,EACX,GAIF+N,MAAO,CAAC,WAAW,EACnBtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAE5B,MAAMgxB,EAAa9xB,EAAM8d,UACnBkU,EAAWnlB,EAAAA,IAAI,EAAK,EACpBklB,EAAcllB,EAAAA,IAAI,EAAK,EACvBglB,EAAkBhlB,EAAAA,IAAI,EAAK,EAC3BwB,EAAWC,EAAAA,mBAAkB,EAMnC8R,OAAAA,EAAAA,UAAU,IAAM,CACdpB,EAAAA,SAAS,IAAM,OACb,MAAMrL,GAAStF,EAAAA,GAAAA,YAAAA,EAAUsoC,QAAVtoC,YAAAA,EAAiBwlB,IAC1ByF,EAAa3lB,EAAOqM,QAAQ,gDAAgD,EAQlF,GAPIsZ,IAAYvH,EAAY1xB,MAAQoE,GAAa60B,CAAU,GACvD3lB,EAAOqM,QAAQ,iBAAiB,IAAGgS,EAAS3xB,MAAQ,IACpDsT,EAAOqM,QAAQ,qBAAqB,IAAGgS,EAAS3xB,MAAQ,IACxDsT,EAAOqM,QAAQ,iBAAiB,IAAGgS,EAAS3xB,MAAQ,IACpDi5B,IAAYvH,EAAY1xB,MAAQoE,GAAa60B,CAAU,GACvD3lB,EAAOqM,QAAQ,iBAAiB,IAAGgS,EAAS3xB,MAAQ,IACpDsT,EAAOqM,QAAQ,qBAAqB,IAAG6R,EAAgBxxB,MAAQ,IAC/DL,EAAM02C,aAAe,IACnB7kB,EAAgBxxB,QAAU,IACxB0xB,EAAY1xB,QAAU,IACpB2xB,EAAS3xB,QAAU,IACjB,CAACyxB,EAAY,CAEf,MAAMiG,EADUpkB,EACUqkB,UAAUC,SAAS,eAAe,EAAI,GAAK,IAC/Dna,EAAY8B,SAASC,gBAAgBC,aAAenM,EAAOokB,UAAYA,EAC7EpkB,EAAOw4B,MAAMruB,UAAYA,EAAY,IACvC,CACV,CAAC,CACH,CAAC,EAEM,IAAA,OAAA/c,OAAAA,EAAAA,YAAA,MAAA,CAAA,YAEQf,EAAMD,KAAI,aACTC,EAAMiX,MAAK,gBACRjX,EAAMwN,SAAQ,MACtB,CAAE2pB,SAAU,cAAerZ,UAAW,GAAG9d,EAAM8d,SAAS,EAAG,CAAC,EAAA,EAClEhd,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,EAAiB,CAAA,EAGxB,CACF,CAAC,qCCjGG81C,GAAe,CACnB,QAAQh3C,EAAgB,OACtBA,EAAI,WAAUwB,EAAAy1C,GAAU,OAAV,KAAAz1C,EAAkB,YAAay1C,EAAS,CACxD,CACF,ECQuH,SAAAhrC,GAAAC,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAC,OAAAC,UAAA1K,SAAA2K,KAAAH,CAAA,IAAA,mBAAA,CAAAI,EAAAA,QAAAJ,CAAA,CAAA,CAErH,KAAM,CAAE1M,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,MAAM,0BACN,CAC7BW,KAAM,SACNC,MAAO,CACL82C,YAAa,CACX52C,KAAMC,OACNC,QAAS,QAEXC,MAAO,CACLH,KAAM,CAACI,OAAQH,MAAM,EACrBC,QAAS4Q,QAEX9Q,KAAM,CACJA,KAAMC,OACNC,QAAS4Q,QAEX2vB,SAAU,CACRzgC,KAAMO,QACNL,QAAS,IAEX22C,aAAc,CACZ72C,KAAM,CAACI,OAAQH,MAAM,EACrBC,QAAS4Q,MACX,GAIF7C,MAAO,CAAC,WAAW,EACnBtN,MAAMb,EAAO,CAAEoO,KAAAA,EAAMtN,MAAAA,CAAM,EAAG,CAE5B,MAAM6U,EAAa9I,EAAAA,IAAI7M,EAAMK,KAAK,EAC5B22C,EAAYnqC,EAAAA,IAAI,MAAM,EACtBmlB,EAAWnlB,EAAAA,IAAI,EAAK,EACpBklB,EAAcllB,EAAAA,IAAI,EAAK,EACvBoqC,EAAQpqC,EAAAA,IAAI,EAAE,EACdglB,EAAkBhlB,EAAAA,IAAI,EAAK,EAC3BwB,EAAWC,EAAAA,mBAAkB,EAGnCV,EAAAA,MACE,IAAM5N,EAAMK,MACX2V,GAAW,CACVL,EAAWtV,MAAQ2V,CACrB,CACF,EASA,MAAMkhC,EAAkBC,GAAU,CAChC,MAAMn3C,EAAQm3C,EAAMn3C,MACd6J,EAASstC,EAAMttC,OACfutC,EAAUp3C,EAAMD,KAClBq3C,IAASvtC,EAAO7J,MAAMK,MAAQ+2C,GAClChpC,EAAK,YAAa+oC,CAAK,CACzB,EAOME,EAAoBA,IAAM,SAC9B,OAAIJ,EAAM52C,MAAMuS,SAAW,IACrB9R,EAAAA,EAAMV,UAANU,MAAAA,EAAAA,KAAAA,MACFA,EAAAA,EAAMV,UAANU,MAAAA,EAAAA,KAAAA,GAAkB0J,QAAS9E,GAAU,CACnC,GAAIA,GAAS,OAAOA,EAAMxF,MAAS,UAAY,SAAUwF,EAAMxF,MAAQwF,EAAMxF,KAAKH,OAAS,YAAa,CACtG,MAAM+3B,EAAU,CAAA,EACV93B,EAAQ0F,EAAM1F,MACpB83B,EAAQ,MAAW93B,GAAAA,YAAAA,EAAOiX,MAC1B6gB,EAAQ,KAAU93B,GAAAA,YAAAA,EAAOD,KACzB+3B,EAAQ,WAAgBjG,EAAgBxxB,MACxC,IAAIuQ,EAAU,IACV5Q,GAAAA,YAAAA,EAAO4Q,WAAY,KAAOA,EAAU,IACxCknB,EAAQ,QAAalnB,EACpBqmC,EAAM52C,MAAgB+pB,KAAK0N,CAAO,CACrC,CACF,IACGmf,EAAM52C,OAAS,CAAA,CACxB,EAMMi3C,EAAgBA,IACpBD,EAAiB,EAAG9pC,IAAI,CAAC7H,EAAc2N,IAAU,CAC/C,MAAMrT,EAAQ0F,EAAM1F,MAEpB,OAAOA,GAAAA,MAAAA,EAAO4Q,sDAIJ5Q,GAAAA,YAAAA,EAAOD,KAAI,MACVC,GAAAA,YAAAA,EAAOiX,MAAK,MACZ,CAAEyG,OAAQ,GAAGs5B,EAAU32C,KAAK,aAAc,CAAC,EAAA,CAAAD,QAAAA,IAAAA,OAAA,QACjDU,EAAAA,EAAMV,UAANU,YAAAA,EAAAA,KAAAA,GAAkBuS,EAAM,EAAA,CAAA,EAEzB,IACN,CAAC,EAGH+M,OAAAA,EAAAA,UAAU,IAAM,CACdpB,EAAAA,SAAS,IAAM,SACb,MAAMrL,GAAStF,EAAAA,GAAAA,YAAAA,EAAUsoC,QAAVtoC,YAAAA,EAAiBwlB,IAC1ByF,EAAa3lB,GAAAA,YAAAA,EAAQqM,QAAQ,2BACnC,GAAIsZ,EAAYvH,EAAY1xB,MAAQoE,GAAa60B,CAAU,MACtD,CACH,MAAMie,EAAkB5jC,GAAAA,YAAAA,EAAQqM,QAAQ,iBACpCu3B,IAAiBxlB,EAAY1xB,MAAQoE,GAAa8yC,CAAe,EACvE,CAGA,GAFI5jC,GAAAA,MAAAA,EAAQqM,QAAQ,qBAAoBgS,EAAS3xB,MAAQ,IACrDsT,GAAAA,MAAAA,EAAQqM,QAAQ,yBAAwB6R,EAAgBxxB,MAAQ,IAChE,CAACwxB,EAAgBxxB,OACf0xB,EAAY1xB,QAAU,IACpB2xB,EAAS3xB,QAAU,GAGrB,GADesT,GAAAA,YAAAA,EAAQqM,QAAQ,cACnBg3B,EAAU32C,MAAQ,eAIbsT,GAAAA,YAAAA,EAAQqM,QAAQ,cACnBg3B,EAAU32C,MAAQ,WAGzB,CACH,MAAMsjC,GAAI/jB,SAASC,gBAAgBC,eAAgBnM,EAAAA,GAAAA,YAAAA,EAAQokB,YAARpkB,KAAAA,EAAqB,GAAK,GACzEgwB,GAAI,IAAKqT,EAAU32C,MAAQ,QAC1B22C,EAAU32C,MAAQsjC,GAAI,IAC7B,CAGV,CAAC,CACH,CAAC,EAEM,IAAA,CAAA,IAAA71B,EAAA,OAAA/M,EAAAA,YAAAgjB,EAAAA,OAAA,CAAA,IAAA,UAAA,WAGMpO,EAAWtV,MAAK,sBAAAuW,GAAhBjB,EAAWtV,MAAKuW,EAAA,eACX5W,EAAM82C,YAAW,KACzB92C,EAAME,KAAI,SACNF,EAAM2gC,SAAQ,eACVuW,EAAc,MACrB33C,IAASsM,GAAAiC,EACfwpC,EAAa,CAAE,EAAAxpC,EAAA,CAAA1N,QAAAA,IAAA,CAAA0N,CAAA,CAAA,CAAA,CAAA,CAGtB,CACF,CAAC,qCCxKG8oC,GAAe,CACnB,QAAQh3C,EAAgB,OACtBA,EAAI,WAAUwB,EAAAo2C,GAAO,OAAP,KAAAp2C,EAAe,SAAUo2C,EAAM,CAC/C,CACF,ECJMC,GAAc,CAClB,QAAQ73C,EAAgB,OACtBA,EAAI,WAAUwB,EAAAs2C,GAAM,OAAN,KAAAt2C,EAAc,QAASs2C,EAAK,CAC5C,CACF,ECe4E,SAAA7rC,GAAAC,EAAA,CAAA,OAAA,OAAAA,GAAA,YAAAC,OAAAC,UAAA1K,SAAA2K,KAAAH,CAAA,IAAA,mBAAA,CAAAI,EAAAA,QAAAJ,CAAA,CAAA,CAE1E,KAAM,CAAE1M,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,WAAW,0BACX,CAC7BW,KAAM,aACNc,OAAQ,CACN,MAAM+P,EAAU/D,EAAAA,IAAI,EAAK,EACnB4T,EAAWk3B,EAAAA,SAAS,CAAEjlC,EAAG,EAAGo5B,EAAG,CAAE,CAAC,EAClC8L,EAAa/qC,EAAAA,IAAI,EAAE,EAEnB,CAAEJ,aAAAA,EAAc2d,KAAAA,EAAM/X,QAAAA,GAAY3F,aAAS,EAC3CmrC,EAAYhrC,EAAAA,IAAYQ,EAAAA,MAAMZ,CAAY,EAAE/K,MAAQ,YAAY,EAChE,CAAEiL,EAAAA,GAAMzN,GAAa,EACrB44C,EAAgBC,GAAAA,iBAAgB,EAChCC,EAAa1rC,GAAAA,cAAa,EAE1B2rC,EAAejwC,EAAAA,SAAS,IAAM8vC,EAAcG,YAAY,EACxDC,EAAgBlwC,EAAAA,SAAS,IAAMgwC,EAAWE,aAAa,EAEvDC,EAAcz2C,GAAiBA,EAAKmM,WAAW,WAAW,EAC1DuqC,EAAYzsC,GAAUA,EAAMjK,OAAS2L,EAAAA,MAAMZ,CAAY,EAAE/K,KACzD22C,EAAW3zC,GAAQA,EAAIkH,MAAQlH,EAAIkH,KAAK0sC,MASxCC,EAAsBA,CAACC,EAAU71B,EAAW,MAAyC,CACzF,MAAM81B,GAA6C,CAAA,EAEnDD,OAAAA,EAASn4C,MAAMmK,QAASmB,IAAU,CAChC,GAAIA,GAAMC,MAAQD,GAAMC,KAAK0sC,QAAU,GAAM,CAC3C,MAAMI,EAAUlxC,GAAYmb,EAAUhX,GAAMjK,IAAI,EAChD+2C,GAAUruB,KAAK,CACb6U,SAAUyZ,EACVh3C,KAAMg3C,EACN34C,KAAM4L,GAAM5L,KACZ6L,KAAMD,GAAMC,KACZuB,QAAS,CAAA,EACTwrC,OAAQ,CAAA,EACRviC,MAAO,CAAA,EACPwiC,KAAM,GACNC,eAAgB7nC,MAClB,CAAC,CACH,CACF,CAAC,EACMynC,EACT,EAMMK,EAAeA,IAAM,CACzB,MAAML,EAAYF,EAAoBL,CAAa,EAEnD,UAAWa,KAAWN,EAAeM,EAAQh5C,MAAM+3C,EAAckB,eAAeD,CAAO,CACzF,EAMME,EAAiBA,IACrBhB,EAAa53C,MAAMkN,IAAK1G,GAAM,aAC5B,MAAMqyC,EAAQl1C,IAAS6C,EAAAA,EAAE+E,OAAF/E,YAAAA,EAAQsyC,KAAK,EAC9BxY,GAAWsX,EAAa53C,MAAMuS,OAAS,EACvCjF,GAAQhB,GAAE9F,IAAAA,GAAAA,EAAE+E,OAAF/E,YAAAA,GAAQ8G,QAAR9G,KAAAA,GAAiB,SAAS,EAC1C,OAAA9F,EAAAA,YAAAmjB,EAAAA,UAAA,CAAA,IAES/jB,OAAO0G,EAAEnF,IAAI,EAAC,KACbvB,OAAO0G,EAAEnF,IAAI,EAAC,MACbiM,GAAK,SACFgzB,EAAQ,EAAA,CAEhB1pB,MAAOA,IAAAlW,EAAAA,YAAA,OAAA,CAAA,MAAA,aAAA,CAEFm4C,GAAIn4C,EAAAA,YAAA,IAAA,CAAA,MAAem4C,CAAK,EAAA,IAAA,EACxBvrC,EAAK,CAAA,CAET,CAAA,CAIT,CAAC,EAQGyrC,EAAmBr2C,GAAgB,CACvC60C,EAAWv3C,MAAQ0C,EACnB6N,EAAQvQ,MAAQ,EAClB,EAMMg5C,GAAmBA,IAAM,CAC7BzoC,EAAQvQ,MAAQ,EAClB,EAOMi5C,EAAUC,GAAsB,CACpC,MAAMC,EAAavB,EAAa53C,MAAMuoB,KAAM/hB,IAAMA,GAAEnF,OAAS63C,CAAS,EACtE1B,EAAUx3C,MAAQk5C,GAAa,aAI7BnvB,EAFEovB,EAEG,CACH93C,KAAM83C,EAAW93C,KACjB0U,MAAOojC,EAAWpjC,OAAS,CAAA,CAC7B,EACQ,CAAE1U,KAAM63C,EAAWnjC,MAAO,CAAA,CAAG,CADpC,CAEL,EAQMqjC,EAAaA,CAACC,EAA8CC,IAA+C,CAC/G,MAAMC,GAAaF,EAAYtsC,MAAM,EAAE,EAAE,CAAC,EACtCssC,GACF7B,EAAUx3C,MAAQu5C,GAAWl4C,KAC7B0oB,EAAKwvB,GAAWl4C,IAAI,GACXi4C,EAAY55C,OAAS,YAAasS,EAAQ,CAAE3Q,KAAM,YAAci4C,EAAYj4C,IAAK,CAAC,EACxF0oB,EAAK,GAAG,CACf,EAMMyvB,EAAaA,IAAM,CACVptC,EAAapM,MAAMN,MACtB+3C,EAAcgC,WAAWrtC,EAAapM,KAAK,CACvD,EAEM05C,EAAoBC,GAAwC,CAChE,EASIC,EAAYC,GAAQ,CACxBZ,EAAOY,EAAIl6C,MAAMD,IAAI,CACvB,EAOMo6C,EAAyBC,GAAc92C,GAAA,sBAC3C,MAAM02C,EAAO/B,EAAa53C,MAAMgK,OAAQ2vC,IAASA,GAAKt4C,OAAS04C,CAAS,EACpE/B,EAAQ2B,EAAK,CAAC,CAAC,IAEnB,MAAMlC,EAAcuC,WAAW,CAAEL,KAAMA,EAAK,CAAC,CAAE,CAAC,EAK5C5B,EAAS4B,EAAK,CAAC,CAAC,GAAGP,EAAWxB,EAAa53C,MAAO25C,EAAK,CAAC,CAAC,EAC/D,GAMMM,EAAqB,IAAYh3C,GAAA,sBACrCw0C,EAAcyC,cAAcltC,QAAMZ,CAAY,CAAC,EAC/C,KAAM,CAAE/K,KAAAA,EAAM0U,MAAAA,CAAM,EAAI/I,EAAAA,MAAMZ,CAAY,EAC1C,MAAMuS,WAAQ,EACd3M,EAAQ,CACN3Q,KAAM,YAAcA,EACpB0U,MAAOA,CACT,CAAC,CACH,GACMokC,EAAkBA,IAAMvC,EAAa53C,MAAMo6C,UAAW/nC,GAAMA,EAAEhR,OAASk2C,EAAWv3C,KAAK,EAOvFq6C,GAAwBh6B,GAAc,CAC1C,MAAMrN,EAAQmnC,EAAe,EAC7B,GAAInnC,IAAU,GAAI,OAClB,IAAIsnC,GAAW,GACJC,GAAAA,UAAU3C,EAAa53C,KAAK,EACpCkN,IAAI,CAAC,CAAE7L,KAAAA,GAAQkB,KAAM,EAClB8d,IAAc,SAAW9d,GAAIyQ,GAGtBqN,IAAc,QAAU9d,GAAIyQ,KACjC3R,IAAS2L,EAAAA,MAAMwqC,CAAS,IAAG8C,GAAW,IAC1CR,EAAgBz4C,CAAI,EAExB,CAAC,EAEGi5C,IAAUrB,EAAOjsC,EAAAA,MAAMuqC,CAAU,CAAC,CACxC,EAMMiD,GAAkBA,IAAM,CACdL,EAAe,IACf,KACdpwB,EAAKwtB,EAAWv3C,KAAK,EAErBy3C,EAAcgD,eAAeruC,EAAapM,KAAK,EAAE8T,KAAK,IAAM,CAC1D4lC,EAAiB1sC,EAAAA,MAAMZ,CAAY,CAAC,CACtC,CAAC,EACH,EAEAmB,EAAAA,MACE,IAAM,CAACnB,EAAapM,MAAMqB,KAAM+K,EAAapM,MAAMN,IAAI,EACvD,CAAC,CAAC2B,EAAM3B,CAAI,EAAG,CAAA,CAAGg7C,EAAO,IAAM,CAE7B,GAAI5C,CAAAA,EAAWz2C,CAAc,EAI7B,IAFAm2C,EAAUx3C,MAASqB,GAAmB,aAElCq5C,KAAYh7C,EAAM,CACpB,MAAM2P,GAAWkQ,SAAS2qB,KAAKv2B,cAAc,uBAAuB,EAChEtE,IAAUA,GAASs/B,OAAM,CAC/B,CACA6K,EAAU,EAEZ,CACF,EAOA,MAAMmB,GAAanuC,EAAAA,IAAwB,IAAI,EAC/CouC,OAAAA,oBAAiBD,GAAY,cAAgBh0C,GAAmB,QAC9DA,EAAG6Z,eAAc,EAEjB,IAAIq6B,EAAiC,KACrC,MAAMtnC,GAAK5M,EAAG2Z,OAKd,GAHI/M,GAAGyhC,UAAY,OAAQ6F,EAAatnC,GAAGunC,cACtCD,EAAatnC,GAEdsnC,GAAAA,MAAAA,EAAYljB,UAAUC,SAAS,iBAAkB,CACnD,MAAMv2B,IAAOw5C,GAAAA,GAAAA,YAAAA,EAAYxM,aAAa,mBAAzBwM,YAAAA,GAA2C7oC,QAAQ,SAAU,MAAO,GAC7E3Q,IAAS2L,EAAAA,MAAMZ,CAAY,EAAE/K,MAAM43C,EAAO53C,CAAI,EAElD+e,EAAS/N,EAAI1L,EAAGo0C,SAAWp0C,EAAGq0C,MAC9B56B,EAASqrB,EAAI9kC,EAAGs0C,SAAWt0C,EAAGu0C,MAE9BnC,EAAgB13C,CAAI,CACtB,CACF,CAAC,EAMDu5C,oBAAiB/6B,OAAQ,QAAS,IAAM,CACtCm5B,GAAgB,CAClB,CAAC,EAGDj5B,EAAAA,UAAU,IAAM,CACd04B,EAAY,EACZe,EAAU,CACZ,CAAC,EACM,IAAA,CAAA,IAAA/rC,EAAA,OAAA/M,EAAAA,YAAA,MAAA,CAAA,IAEEi6C,GAAU,MACR,CAACz7C,GAAW,4DAA4D,GAAC,CAAAwB,EAAAA,YAAAgjB,SAAA,CAAA,MAAA,YAAA,KAAA,OAAA,WAIlE8zB,EAAUx3C,MAAK,sBACLwG,GAAegxC,EAAUx3C,MAAQwG,EAAE,WAC7CozC,EAAQ,YACPE,GAAetuC,GAAAiC,EAC3BmrC,EAAc,CAAE,EAAAnrC,EAAA,CAAA1N,QAAAA,IAAA,CAAA0N,CAAA,CAAA,CAAA,EAElB8C,EAAQvQ,OAAIU,EAAAA,YAAA,KAAA,CAAA,MAAA,uBAAA,MAGF,CAAEsc,KAAM,GAAGoD,EAAS/N,EAAI,EAAE,KAAM4K,IAAK,GAAGmD,EAASqrB,EAAI,EAAE,IAAK,CAAC,EAAA,CAAA/qC,EAAAA,YAAA,KAAA,CAAA,QACvDu5C,CAAkB,EAAA,CAAG3tC,EAAE,kBAAkB,CAAC,CAAA,EACtDirC,EAAWv3C,QAAU,cAAgB43C,EAAa53C,MAAMuS,SAAW,GAAA7R,EAAAA,YAAA,KAAA,CAAA,QAAkBuyC,IAAM6G,EAAgBvC,EAAWv3C,KAAK,CAAC,EAAA,CAAGsM,EAAE,gBAAgB,CAAC,GAClJirC,EAAWv3C,QAAU,cAAgB43C,EAAa53C,MAAMuS,OAAS,GAAK4nC,EAAe,EAAKvC,EAAa53C,MAAMuS,OAAS,GAAA7R,EAAAA,YAAA,KAAA,CAAA,QACxGuyC,IAAMoH,GAAqB,OAAO,GAAC,CAAG/tC,EAAE,qBAAqB,CAAC,CAAA,EAE5EirC,EAAWv3C,QAAU,cAAgB43C,EAAa53C,MAAMuS,OAAS,GAAK4nC,EAAe,EAAK,GAAAz5C,EAAAA,YAAA,KAAA,CAAA,QAAkBuyC,IAAMoH,GAAqB,MAAM,GAAC,CAAG/tC,EAAE,oBAAoB,CAAC,GACxKirC,EAAWv3C,QAAU,cAAgB43C,EAAa53C,MAAMuS,OAAS,GAAA7R,EAAAA,YAAA,KAAA,CAAA,QAAkB85C,IAAe,CAAGluC,EAAE,sBAAsB,CAAC,GAC9HirC,EAAWv3C,QAAU,cAAgB43C,EAAa53C,MAAMuS,OAAS,GAAA7R,EAAAA,YAAA,KAAA,CAAA,QAAkB85C,EAAe,EAAA,CAAGluC,EAAE,sBAAsB,CAAC,EAAM,CAAA,CAExI,CAAA,CAAA,CAGP,CACF,CAAC,qCCnVG6uC,GAAmB,CACvB,QAAQ57C,EAAgB,OACtBA,EAAI,WAAUwB,EAAAq6C,GAAW,OAAX,KAAAr6C,EAAmB,aAAcq6C,EAAU,CAC3D,CACF,iHCeE,KAAM,CAAE,aAAAr8C,CAAA,EAAiBE,YAAA,EAEnBC,EAAYH,EAAa,OAAO,EAMhC+M,EAAWC,GAAAA,YAAA,EACXsvC,EAAe1zC,EAAAA,SAAS,IAAMmE,EAAS,cAAc,EACrDwvC,EAAe3zC,EAAAA,SAAS,IAAMmE,EAAS,eAAe,EAEtDyvC,EAAiB,IAAM,CAE7B,0EAGAp8C,EAAAA,YAoBaC,EAAAA,MAAA27B,EAAAA,UAAA,EAAA,CAnBX,QAAQ,QACP,uBAAO37B,QAAAF,CAAA,CAAS,EAChB,UAASq8C,CAAA,GAMC,mBACT,IAQiB,CARjB76C,EAAAA,YAQiBtB,EAAAA,MAAA47B,gBAAA,EAAA,KAAA,mBANb,IAA4B,kBAD9B5yB,EAAAA,mBAMiBub,EAAAA,SAAA,KAAAC,EAAAA,WALAy3B,EAAA,MAAR/1C,kBADTnG,EAAAA,YAMiBC,EAAAA,MAAA67B,EAAAA,cAAA,EAAA,CAJd,IAAK31B,EAAK,MACV,SAAUg2C,EAAA,QAAiBh2C,EAAK,MAChC,QAASA,EAAK,KAAA,qBACf,IAAgB,CAAbkxB,EAAAA,gBAAAhT,EAAAA,gBAAAle,EAAK,KAAK,EAAA,CAAA,CAAA,yEAZnB,IAIM,CAJNgD,EAAAA,mBAIM,MAAA,KAAA,CAHJ5H,EAAAA,YAEqBw6B,EAAA,CADnB,MAAM,qBACN,SAAS,OAAA,yEC5CXsgB,GAAgB,CACpB,QAAQj8C,EAAgB,OACtBA,EAAI,WAAUwB,EAAA06C,GAAQ,OAAR,KAAA16C,EAAgB,UAAW06C,EAAO,CAClD,CACF,ECaQ,CAAE18C,aAAAA,EAAa,EAAIE,YAAQ,EAC3BC,GAAYH,GAAa,MAAM,0BAIN,CAC7BW,KAAM,SACNC,MAAO,CACLgL,SAAU,CACR9K,KAAMkT,MACNhT,QAASA,IAAM,CAAA,GAEjB27C,UAAW,CACT77C,KAAM6L,OACN3L,QAASA,KAAO,CAAA,IAElB47C,QAAS,CACP97C,KAAMC,OACNC,QAAS4Q,QAEXwE,KAAM,CACJtV,KAAMO,QACNL,QAAS,IAEX67C,KAAM,CACJ/7C,KAAMuR,SACNrR,QAAS4Q,QAEXkrC,aAAc,CACZh8C,KAAMO,QACNL,QAAS,IAEX+7C,UAAW,CACTj8C,KAAMO,QACNL,QAAS,IAEXg8C,oBAAqB,CACnBl8C,KAAMkT,MACNhT,QAASA,IAAM,CAAA,GAEjBi8C,mBAAoB,CAClBn8C,KAAMkT,MACNhT,QAASA,IAAM,CAAA,GAEjBk8C,UAAW,CACTp8C,KAAMC,OACNC,QAAS4Q,QAEXurC,iBAAkB,CAChBr8C,KAAMO,QACNL,QAAS,IAEXo8C,kBAAmB,CACjBt8C,KAAMO,QACNL,QAAS,IAEXq8C,iBAAkB,CAChBv8C,KAAMO,QACNL,QAAS,IAEXs8C,iBAAkB,CAChBx8C,KAAMuR,SACNrR,QAAS4Q,QAEX2rC,cAAe,CACbz8C,KAAMuR,SACNrR,QAAS4Q,MACX,GAIF7C,MAAO,CAAC,aAAc,cAAe,gBAAiB,QAAS,eAAgB,WAAW,EAE1FtN,MAAMb,EAAO,CAAEoO,KAAAA,CAAK,EAAG,CAGrB,MAAMwuC,EAAkBA,CAAClyC,EAAgBd,EAAYuqC,EAA4C3lC,IAAsB,CACrHJ,EAAK,aAAc1D,EAAMd,EAAMuqC,EAAU3lC,CAAK,CAChD,EAEMquC,EAAmBA,CAACnyC,EAAgBd,EAAYuqC,IAA+C,CACnG/lC,EAAK,cAAe1D,EAAMd,EAAMuqC,CAAQ,CAC1C,EAEM2I,EAAqBA,CAACpyC,EAAgBd,EAAYuqC,IAA+C,CACrG/lC,EAAK,gBAAiB1D,EAAMd,EAAMuqC,CAAQ,CAC5C,EAEM4I,EAAcA,CAClBryC,EACAsyC,IAMG,CACH5uC,EAAK,QAAS1D,EAAMsyC,CAAW,CACjC,EAEMC,EAAoBA,CAACvyC,EAAgBkiC,EAAkBC,IAA0B,CACrFz+B,EAAK,eAAgB1D,EAAMkiC,EAASC,CAAY,CAClD,EAEMqQ,EAA+BA,IAAI33C,IAAS,QAChDvF,EAAAA,EAAMi8C,OAANj8C,MAAAA,EAAAA,KAAAA,EAAa,GAAGuF,EAClB,EAEM43C,EAAiBA,CAACC,EAAoBC,EAAgBC,EAAwC9uC,IAAqB,CACvHJ,EAAK,YAAagvC,EAAcC,EAAUC,EAAU9uC,CAAK,CAC3D,EAGA,MAAO,IAAAzN,EAAAA,YAAAgtC,SAAA,CAAA,IAAA,UAAA,KAGG/tC,EAAMgL,SAAQ,MACbhL,EAAM+7C,UAAS,QACb/7C,EAAMg8C,QAAO,KAChBh8C,EAAMwV,KAAI,KACV0nC,EAAc,UACTl9C,EAAMm8C,UAAS,aACZn8C,EAAMk8C,aAAY,oBACXl8C,EAAMo8C,oBAAmB,mBAC1Bp8C,EAAMq8C,mBAAkB,KACtCr8C,EAAMs8C,UAAS,iBAAA,GAAA,iBAEHt8C,EAAMu8C,iBAAgB,kBACrBv8C,EAAMw8C,kBAAiB,iBACxBx8C,EAAMy8C,iBAAgB,iBACtBz8C,EAAM08C,iBAAgB,cACzB18C,EAAM28C,cAAa,MAC3Bp9C,GAAS,eACFq9C,EAAe,gBACdC,EAAgB,kBACdC,EAAkB,cACtBK,EAAc,QAClBJ,EAAW,iBACJE,GAAiB,IAAA,CAGvC,CACF,CAAC,qCC9JGM,GAAe,CACnB,QAAQ39C,EAAgB,OACtBA,EAAI,WAAUwB,EAAAo8C,GAAO,OAAP,KAAAp8C,EAAe,SAAUo8C,EAAM,CAC/C,CACF,ECMaz6C,GAAM,mBACN06C,GAAWC,GAAsB,CAC5C,MAAMC,EAASC,GAAS,IAAI,KAAK,MAAM76C,EAAG,EAC1C,IAAI86C,EACA,OAAOH,GAAS,SAAUG,EAAK,KAAK,UAAUH,CAAI,EACjDG,EAAKH,EACV,MAAMI,EAAOF,GAAS,IAAI,KAAK,MAAMC,CAAE,EAEvC,OADkBD,GAAS,IAAI,QAAQE,EAAMH,EAAQ,CAAE,KAAMC,GAAS,KAAK,IAAK,QAASA,GAAS,IAAI,MAAO,EAC5F,SAAA,CACnB,EACaG,GAAWL,GAAsB,CAC5C,MAAMC,EAASC,GAAS,IAAI,KAAK,MAAM76C,EAAG,EACpCg7C,EAAUH,GAAS,IAAI,QAAQF,EAAMC,EAAQ,CAAE,KAAMC,GAAS,KAAK,IAAK,QAASA,GAAS,IAAI,MAAO,EAC3G,OAAOA,GAAS,IAAI,KAAK,UAAUG,CAAO,EAAE,SAAA,CAC9C,EAEaC,GAAeC,GAAwB,CAClD,MAAMC,EAAU,iEAChB,IAAIn7C,EAAM,GACV,QAASH,EAAI,EAAGA,EAAIq7C,EAAKr7C,IAAK,CAC5B,MAAMu7C,EAAY,KAAK,MAAM,KAAK,OAAA,EAAWD,EAAQ,MAAM,EAC3Dn7C,GAAOm7C,EAAQ,UAAUC,EAAWA,EAAY,CAAC,CACnD,CACA,OAAOp7C,CACT,ECuBMq7C,GAAa,CACjBnhB,GACArkB,GACAjK,GACA6F,GACA6pC,GACAr1C,GACA4d,GACA9P,GACAsX,GACAsO,GACA9kB,GACAilB,GACA17B,GACAm9C,GACA1H,GACAj1B,GACA7M,GACA0hC,GACApa,GACAI,GACA3O,GACAmB,GACA/W,GACAV,GACAkgC,GACA8F,GACAxjB,GACAyB,GACA77B,GACAsO,GACA0sB,GACA4C,GACAe,GACA4B,GACAG,GACAwb,GACAt7B,GACAyE,GACAw2B,GACAx6B,GACAlF,EACF,EAOayiC,GAAU,CAAC3+C,EAAUoV,IAA4B,CACvDupC,GAAgB,YACpBA,GAAgB,UAAY,GAE7BC,GAAAA,eAAexpC,EAAQ,KAAK,EAC5BhW,GAAiBgW,CAAO,EAExBopC,GAAW,QAASv1B,GAAMA,EAAE,QAAQjpB,CAAG,CAAC,EAC1C,EAEM6+C,GAAU,CAAE,QAAAF,EAAA,EAAAG,EAAA,QAAAD,GAAAC,EAAA,UAAAC,GAAAD,EAAA,QAAAr9C,GAAAq9C,EAAA,aAAAxwC,GAAAwwC,EAAA,SAAAjqC,GAAAiqC,EAAA,OAAA3pC,GAAA2pC,EAAA,WAAA3nC,GAAA2nC,EAAA,WAAAlnC,GAAAknC,EAAA,iBAAA7mC,GAAA6mC,EAAA,gBAAAxmC,GAAAwmC,EAAA,MAAAvmC,GAAAumC,EAAA,aAAA3iC,GAAA2iC,EAAA,SAAAl+B,GAAAk+B,EAAA,UAAAz9B,GAAAy9B,EAAA,SAAA98B,GAAA88B,EAAA,aAAAz5B,GAAAy5B,EAAA,OAAA1kB,GAAA0kB,EAAA,YAAA9jB,GAAA8jB,EAAA,OAAAz1C,GAAAy1C,EAAA,QAAAr4B,GAAAq4B,EAAA,cAAA73B,GAAA63B,EAAA,aAAAE,GAAAF,EAAA,aAAA9vC,GAAA8vC,EAAA,UAAAriB,GAAAqiB,EAAA,QAAAjiB,GAAAiiB,EAAA,cAAA/hB,GAAA+hB,EAAA,aAAA5hB,GAAA4hB,EAAA,MAAA3hB,GAAA2hB,EAAA,aAAAlhB,GAAAkhB,EAAA,YAAAngB,GAAAmgB,EAAA,SAAA5wB,GAAA4wB,EAAA,UAAAve,GAAAue,EAAA,cAAAG,GAAAH,EAAA,SAAArwB,GAAAqwB,EAAA,UAAA7H,GAAA6H,EAAA,QAAAjI,GAAAiI,EAAA,OAAAlH,GAAAkH,EAAA,MAAAhH,GAAAgH,EAAA,WAAAjD,GAAAiD,EAAA,QAAA5C,GAAA4C,EAAA,aAAAzvB,GAAAyvB,EAAA,OAAAlB,GAAAkB,EAAA,SAAAp6C,GAAAo6C,EAAA,MAAAlvC,GAAAkvC,EAAA,aAAA/3C,GAAA+3C,EAAA,QAAAI,GAAAJ,EAAA,KAAAzZ,GAAAyZ,EAAA,iBAAA/5C,GAAA+5C,EAAA,SAAA95C,GAAA85C,EAAA,QAAAX,GAAAW,EAAA,SAAAxzC,GAAAwzC,EAAA,QAAAjB,GAAAiB,EAAA,OAAAr0C,GAAAq0C,EAAA,SAAA10C,GAAA00C,EAAA,YAAAz0C,GAAAy0C,EAAA,SAAAx0C,GAAAw0C,EAAA,YAAAt0C,GAAAs0C,EAAA,QAAAl0C,GAAAk0C,EAAA,YAAAV,GAAAU,EAAA,cAAA36C,GAAA26C,EAAA,aAAA94C,GAAA84C,EAAA,aAAAj5C,GAAAi5C,EAAA,SAAAv6C,GAAAu6C,EAAA,aAAAj6C,GAAAi6C,EAAA,QAAAH,GAAAG,EAAA,GAAAn9C,GAAAm9C,EAAA,QAAA98C,GAAA88C,EAAA,UAAAz8C,GAAAy8C,EAAA,OAAAp8C,GAAAo8C,EAAA,OAAA38C,GAAA28C,EAAA,UAAAv8C,GAAAu8C,EAAA,QAAAl8C,GAAAk8C,EAAA,QAAAj8C,GAAAi8C,EAAA,QAAA78C,GAAA68C,EAAA,WAAAj9C,GAAAi9C,EAAA,WAAAx8C,GAAAw8C,EAAA,UAAAr8C,GAAAq8C,EAAA,MAAAt8C,GAAAs8C,EAAA,OAAAn8C,GAAAm8C,EAAA,SAAA18C,GAAA08C,EAAA,SAAA58C,GAAA48C,EAAA,SAAA/8C,GAAA+8C,EAAA,MAAA17C,GAAA07C,EAAA,SAAA16C,GAAA06C,EAAA,IAAA37C,GAAA27C,EAAA,WAAAr1C,GAAAq1C,EAAA,QAAAjuC,GAAAiuC,EAAA,YAAAl3C,GAAAk3C,EAAA,UAAA38B,GAAA28B,EAAA,mBAAA74C,GAAA64C,EAAA,YAAAn6C,GAAAm6C,EAAA,cAAA96C,GAAA86C,EAAA,kBAAAx7C,GAAAw7C,EAAA,aAAA33C,GAAA23C,EAAA,MAAAt7C,GAAAs7C,EAAA,OAAAl7C,GAAAk7C,EAAA,OAAA/6C,GAAA+6C,EAAA,QAAA3zC,GAAA2zC,EAAA,YAAAj0C,GAAAi0C,EAAA,WAAA50C,GAAA40C,EAAA,UAAAz8B,GAAAy8B,EAAA,WAAA5vC,GAAA,OAAA,eAAA4vC,EAAA,OAAA,YAAA,CAAA,MAAA,QAAA,CAAA,CAAA,EAAA"}
1
+ {"version":3,"file":"guava-ui.umd.js","sources":["../packages/bridge/index.ts","../packages/GvBacktop/src/GvBacktop.vue","../packages/GvBacktop/index.ts","../packages/GvBadge/src/GvBadge.vue","../packages/GvBadge/index.ts","../packages/utils/index.ts","../packages/GvIcon/src/GvIcon.vue","../packages/GvIcon/index.ts","../packages/utils/gv.tree.ts","../packages/GvBreadCrumb/src/helper.ts","../packages/GvBreadCrumb/src/GvBreadCrumb.vue","../packages/GvBreadCrumb/index.ts","../packages/GvPopconfirm/src/GvPopconfirm.vue","../packages/GvPopconfirm/index.ts","../packages/hooks/web/useStorage.ts","../packages/utils/gv.notify.ts","../packages/GvButton/src/GvButton.vue","../packages/GvButton/index.ts","../packages/GvCard/src/GvCard.vue","../packages/GvCard/index.ts","../packages/GvCascader/src/GvCascader.vue","../packages/GvCascader/index.ts","../packages/GvCheckbox/src/GvCheckbox.vue","../packages/GvCheckbox/index.ts","../packages/GvCheckboxButton/src/GvCheckboxButton.vue","../packages/GvCheckboxButton/index.ts","../packages/GvCheckboxGroup/src/GvCheckboxGroup.vue","../packages/GvCheckboxGroup/index.ts","../packages/GvCol/src/GvCol.vue","../packages/GvCol/index.ts","../packages/GvDatePicker/src/datetime.ts","../packages/GvDatePicker/src/shortcuts.ts","../packages/GvDatePicker/src/GvDatePicker.vue","../packages/GvDatePicker/index.ts","../packages/GvDialog/src/drag.ts","../packages/GvDialog/src/GvDialog.vue","../packages/GvDialog/index.ts","../packages/GvDivider/src/GvDivider.vue","../packages/GvDivider/index.ts","../packages/GvDrawer/src/GvDrawer.vue","../packages/GvDrawer/index.ts","../packages/utils/gv.propTypes.ts","../packages/hooks/web/usePinyin.ts","../packages/GvExpandMenu/src/GvMenuList.vue","../packages/GvExpandMenu/src/GvExpandMenu.vue","../packages/GvExpandMenu/index.ts","../packages/GvInput/src/GvInput.vue","../packages/GvInput/index.ts","../packages/GvInputNumber/src/GvInputNumber.vue","../packages/GvInputNumber/index.ts","../packages/GvSelect/src/GvSelect.vue","../packages/GvSelect/index.ts","../packages/GvSwitch/src/GvSwitch.vue","../packages/GvSwitch/index.ts","../packages/GvTimePicker/src/GvTimePicker.vue","../packages/GvTimePicker/index.ts","../packages/utils/gv.infomsg.ts","../packages/utils/gv.validate.ts","../packages/GvForm/src/GvForm.vue","../packages/GvForm/index.ts","../packages/GvHamburger/src/GvHamburger.vue","../packages/GvHamburger/index.ts","../packages/GvLangSelect/src/GvLangSelect.vue","../packages/GvLangSelect/index.ts","../packages/GvPopover/src/GvPopover.vue","../packages/GvPopover/index.ts","../packages/GvRadio/src/GvRadio.vue","../packages/GvRadio/index.ts","../packages/GvRadioButton/src/GvRadioButton.vue","../packages/GvRadioButton/index.ts","../packages/GvRadioGroup/src/GvRadioGroup.vue","../packages/GvRadioGroup/index.ts","../packages/GvRow/src/GvRow.vue","../packages/GvRow/index.ts","../packages/GvScreenFull/src/GvScreenFull.vue","../packages/GvScreenFull/index.ts","../packages/GvSearchBar/src/GvSearchBar.vue","../packages/GvSearchBar/index.ts","../packages/GvSidebar/src/helper.ts","../packages/GvSidebar/src/components/useRenderMenuTitle.tsx","../packages/GvSidebar/src/components/useRenderMenuItem.tsx","../packages/GvSidebar/src/GvSidebar.vue","../packages/GvSidebar/index.ts","../src/assets/imgs/logo.png","../packages/GvSidebarLogo/src/GvSidebarLogo.vue","../packages/GvSidebarLogo/index.ts","../packages/GvTableBar/src/GvTableBar.vue","../packages/GvTag/src/GvTag.vue","../packages/utils/gv.table.ts","../packages/utils/gv.crud.ts","../packages/GvTable/src/GvTable.vue","../packages/GvTable/index.ts","../packages/GvTabPane/src/GvTabPane.vue","../packages/GvTabPane/index.ts","../packages/GvTabs/src/GvTabs.vue","../packages/GvTabs/index.ts","../packages/GvTag/index.ts","../packages/GvTagsView/src/GvTagsView.vue","../packages/GvTagsView/index.ts","../packages/GvTheme/src/GvTheme.vue","../packages/GvTheme/index.ts","../packages/GvTree/src/GvTree.vue","../packages/GvTree/index.ts","../packages/utils/gv.secret.ts","../packages/index.ts"],"sourcesContent":["// bridge/index.ts\nimport type { Router } from 'vue-router';\nimport type { Pinia } from 'pinia';\nimport type { Composer } from 'vue-i18n';\n\ninterface GlobalBridgeContext {\n router?: Router;\n i18n?: Composer;\n store?: Pinia;\n}\nconst globalBridgeKey = '__LIB_BRIDGE_CONTEXT__';\nconst getBridge = (): GlobalBridgeContext => {\n const g = globalThis as any;\n if (!g[globalBridgeKey]) g[globalBridgeKey] = {};\n\n return g[globalBridgeKey];\n};\nconst context: GlobalBridgeContext = {};\n\n// export function setBridgeContext(options: GlobalBridgeContext) {\n// if (options.router) context.router = options.router;\n// if (options.i18n) context.i18n = options.i18n;\n// if (options.pinia) context.pinia = options.pinia;\n// }\nexport const setBridgeContext = (ctx: GlobalBridgeContext) => {\n // console.log('setBridgeContext', ctx);\n Object.assign(getBridge(), ctx);\n};\n\nexport function useBridgeRouter(): Router {\n const router = getBridge().router;\n if (!router) throw new Error('[Bridge] router not set');\n return router;\n}\n// export function useBridgeRouter(): Router {\n// if (!context.router) throw new Error('[Bridge] Router is not injected');\n// return context.router;\n// }\n\nexport function useBridgeI18n(): Composer {\n const i18n = getBridge().i18n;\n if (!i18n) throw new Error('[Bridge] I18n is not injected');\n return i18n;\n}\n\n// export function useBridgeI18n(): Composer {\n// if (!context.i18n) throw new Error('[Bridge] I18n is not injected');\n// return context.i18n;\n// }\n\nexport function useBridgePinia(): Pinia {\n if (!context.store) throw new Error('[Bridge] Pinia is not injected');\n return context.store;\n}\n","<!--\n * @title: backtop\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:24:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-05-22 09:26:44\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { ElBacktop } from 'element-plus';\n import { useStyle } from '@/hook/web/useStyle';\n\n // --- define name and inheritAttrs ---\n defineOptions({\n name: 'GvBacktop', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n const { getPrefixCls, variables } = useStyle();\n\n const prefixCls = getPrefixCls('backtop');\n</script>\n\n<template>\n <ElBacktop\n :class=\"prefixCls\"\n :target=\"`.${variables.namespace}-layout-content-scrollbar .${variables.elNamespace}-scrollbar__wrap`\" />\n</template>\n","import type { App } from 'vue';\nimport GvBacktop from './src/GvBacktop.vue';\n// Define the install method on the GvButton component\nconst GvBacktopPlugin = {\n install(app: App): void {\n app.component(GvBacktop.name ?? 'GvBacktop', GvBacktop);\n },\n};\nexport default GvBacktopPlugin;\n\nexport { GvBacktop };\n","<!--\n * @title: badge component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 10:37:36\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:14:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElBadge } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { TBadgeType } from './types/index';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('badge');\n\n export default defineComponent({\n name: 'GvBadge',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: '',\n },\n max: {\n type: Number,\n default: 10,\n },\n isDot: {\n type: Boolean,\n default: false,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n showZero: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String,\n default: '',\n },\n type: {\n type: String as PropType<TBadgeType>,\n default: 'warning',\n },\n },\n\n setup(props, { slots }) {\n // @render\n return () => (\n <ElBadge\n value={props.value}\n max={props.max}\n type={props.type}\n hidden={props.hidden}\n isDot={props.isDot}\n showZero={props.showZero}\n color={props.color}\n class={prefixCls}>\n {slots.default?.()}\n </ElBadge>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-badge';\n .#{$prefixCls} {\n margin-top: 5px;\n margin-right: 25px;\n\n :deep(.el-badge__content) {\n height: 20px;\n line-height: 18px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvBadge from './src/GvBadge.vue';\n\nconst GvBadgePlugin = {\n install(app: App): void {\n app.component(GvBadge.name ?? 'GvBadge', GvBadge);\n },\n};\nexport default GvBadgePlugin;\n\nexport { GvBadge };\n","/*\n * @title: common utility func\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-02-27 13:25:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 15:00:33\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n// ------ is utils ------\nconst toString = Object.prototype.toString;\nexport const is = (val: unknown, type: string) => toString.call(val) === `[object ${type}]`;\n\nexport const isExternal = (path: string): boolean => /^(https?:|mailto:|tel:)/.test(path);\nexport const isString = (val: unknown): val is string => is(val, 'String');\nexport const isArray = (val: any): val is any[] => val && Array.isArray(val);\nexport const isError = (e: unknown): e is Error => typeof e === 'object' && e !== null && 'message' in e;\nexport const isObject = (val: any): val is Record<any, any> => val !== null && is(val, 'Object');\nexport const isDate = (val: unknown): val is Date => is(val, 'Date');\nexport const isNumber = (val: unknown): val is number => is(val, 'Number');\nexport const isBoolean = (val: unknown): val is boolean => is(val, 'Boolean');\nexport const isFunction = (val: unknown): val is (...args: any[]) => any => typeof val === 'function';\nexport const isElement = (val: unknown): val is Element => isObject(val) && !!val.tagName;\nexport const isMap = (val: unknown): val is Map<any, any> => is(val, 'Map');\nexport const isImgPath = (path: string): boolean => /(https?:\\/\\/|data:image\\/).*?\\.(png|jpg|jpeg|gif|svg|webp|ico)/gi.test(path);\nexport const isDark = (): boolean => window.matchMedia('(prefers-color-scheme: dark)').matches;\nexport const isNull = (val: unknown): val is null => val === null;\n\nexport const isEmpty = <T = unknown>(val: T): val is T => {\n if (isNull(val)) return true;\n if (val === undefined) return true;\n if (val === 'null') return true;\n if (isArray(val) || isString(val)) return val.length === 0;\n if (val instanceof Map || val instanceof Set) return val.size === 0;\n if (isObject(val)) return Object.keys(val).length === 0;\n return false;\n};\n\n/**\n * @todo: deep equal (plain object / array / date), functions compare by reference\n */\nexport const isEqual = (a: unknown, b: unknown): boolean => {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || a === undefined || b === undefined) return false;\n if (typeof a !== typeof b) return false;\n if (isFunction(a) || isFunction(b)) return a === b;\n if (isDate(a) && isDate(b)) return a.getTime() === b.getTime();\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (!isEqual(a[i], b[i])) return false;\n\n return true;\n }\n if (isObject(a) && isObject(b)) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!isEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return false;\n};\n\nexport const isUrl = (path: string): boolean => {\n try {\n new URL(path);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * @todo: set html lang attr\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-24 10:37:13\n * @param {LocaleType} locale\n */\nexport const setHtmlAttrByLang = (locale: LocaleType): void => {\n document.querySelector('html')?.setAttribute('lang', locale);\n};\n\n/**\n * @todo: sleep async function\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 12:01:37\n * @param {*} timeLen\n */\nexport const sleep = async (timeLen: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, timeLen));\n/**\n * @todo: underline to camel case\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 15:21:09\n * @param {*} name\n */\nexport const toHump = (name: string): string => {\n if (!name) return '';\n // eslint-disable-next-line no-useless-escape\n return name.replace(/\\_(\\w)/g, function (all, letter) {\n return letter.toUpperCase();\n });\n};\n\n/**\n * @todo: camel case to underline\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 15:21:50\n * @param {*} name\n */\nexport const toLine = (name: string): string => name.replace(/([A-Z])/g, '_$1').toLowerCase();\n\n/**\n * 设置css style\n * @param prop\n * @param val\n * @param dom\n */\nexport const setDomCssProp = (prop: string, val: any, dom = document.documentElement): void => {\n dom.style.setProperty(prop, val);\n};\n\n/**\n * get css style\n * @param prop\n * @param dom\n * @returns\n */\nexport const getDomCssProp = (prop: string, dom = document.documentElement): string => getComputedStyle(dom).getPropertyValue(prop);\n\n/**\n * join icon class\n * @param icon\n * @returns\n */\nexport const joinIcon = function (icon) {\n let joinIcons = '';\n if (icon)\n if (icon.includes('el-icon')) joinIcons = icon;\n else if (icon.includes('gv-icon')) joinIcons = `iconfont ${icon}`;\n return joinIcons;\n};\n\n/**\n * Check if an element has a class\n * @param {HTMLElement} ele\n * @param {string} cls\n * @returns {boolean}\n */\nexport const hasClass = (ele: HTMLElement, cls: string): boolean => !!ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\n\n/**\n * Add class to element\n * @param {HTMLElement} ele\n * @param {string} cls\n */\nexport const addClass = (ele: HTMLElement, cls: string) => {\n if (!hasClass(ele, cls)) ele.className += ' ' + cls;\n};\n\n/**\n * Remove class from element\n * @param {HTMLElement} ele s s\n * @param {string} cls\n */\nexport const removeClass = (ele: HTMLElement, cls: string): void => {\n if (hasClass(ele, cls)) {\n const reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\n ele.className = ele.className.replace(reg, ' ');\n }\n};\n\n/**\n * @todo: html tag has scrollbar\n * @param {*} tag\n */\nexport const hasScrollbar = (tag: any) => tag.scrollHeight > (tag.innerHeight || tag.clientHeight);\n\n/**\n * date format settings\n */\nexport const dateFormatConfig = {\n date: {\n placeholder: '选择日期', // yyyy-mm-dd\n valueFormat: 'YYYY-MM-DD',\n dateFormat: 'YYYY-MM-DD',\n },\n exactdate: {\n placeholder: '选择日期', // yyyy-mm-dd\n valueFormat: 'YYYY-MM-dd HH:mm:ss',\n dateFormat: 'YYYY-MM-DD',\n },\n datetime: {\n placeholder: '选择时间', // yyyy-mm-dd hh:mm\n valueFormat: 'YYYY-MM-DD HH:mm',\n dateFormat: 'YYYY-MM-DD HH:mm',\n },\n week: {\n placeholder: '选择周',\n dateFormat: 'YYYY 第 WW 周',\n },\n month: {\n placeholder: '选择月份', // yyyy-mm\n valueFormat: 'YYYY-MM',\n dateFormat: 'YYYY-MM',\n },\n year: {\n placeholder: '选择年份', // yyyy\n valueFormat: 'YYYY',\n dateFormat: 'YYYY',\n },\n};\n\n/**\n * @todo: 防抖函数(一段时间内只响应最后一次操作,如:input框连续输入)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:58:21\n * @param {*} func\n * @param {*} wait\n * @param {*} immediate\n */\nexport const debounce = (func: Fn, wait = 100, immediate = false) => {\n let timeout: ReturnType<typeof setTimeout> | null;\n let arg: any[];\n let context: any;\n let timestamp: number;\n let result: ReturnType<Fn>;\n const later = function () {\n // 据上一次触发时间间隔\n const last = +new Date() - timestamp;\n // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait\n if (last < wait && last > 0) timeout = setTimeout(later, wait - last);\n else {\n timeout = null;\n // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用\n if (!immediate) {\n result = func.apply(context, arg);\n if (!timeout) context = arg = null as any;\n }\n }\n };\n return function (this: any, ...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n context = this;\n // fixme: 解决防抖函数无法传参的问题 2022-04-19\n arg = args;\n timestamp = +new Date();\n const callNow = immediate && !timeout;\n // 如果延时不存在,重新设定延时\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, arg);\n context = arg = null as any;\n }\n\n return result;\n };\n};\n\n/**\n * @todo: get vnode text\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 13:49:54\n * @param {VNode} vnode\n */\nexport const getVNodeText = (vnode: any): string => {\n if (!vnode) return '';\n // 1. 字符串\n if (typeof vnode === 'string') return vnode;\n // 2. 数字\n if (typeof vnode === 'number') return String(vnode);\n // 3. children 为字符串\n if (typeof vnode.children === 'string') return vnode.children.trim();\n // 4. children 为数组\n if (Array.isArray(vnode.children)) return vnode.children.map((item) => getVNodeText(item)).join('');\n // 5. slots(ElButton / 组件)\n if (vnode.children && typeof vnode.children === 'object') {\n const slots = vnode.children as Record<string, any>;\n // default slot\n if (typeof slots.default === 'function') {\n const slotNodes = slots.default();\n return slotNodes.map((item: any) => getVNodeText(item)).join('');\n }\n }\n\n return '';\n};\n\n/**\n * @todo: get vnode name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 17:24:24\n * @param {any} vnode\n */\nexport const getVNodeName = (vnode: any): string => {\n if (!vnode) return '';\n return typeof vnode.type === 'object' && vnode.type !== null && 'name' in vnode.type ? vnode.type.name : '';\n};\n\n/**\n * @todo: 去除金额格式化方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-24 14:14:55\n * @param {*} val\n */\nexport const removeAmountFormat = (val: string): string => {\n if (val) return val.replace(/,/g, '');\n else return '0.00';\n};\n\n// when val is 0.00, change it as 0 format\nfunction zeroFormat(val: string): string {\n if (val === '0.00') return '0';\n else return val;\n}\n\nfunction numberFormat(pattern, val) {\n const oldVal = val;\n if (val < 0) val = -val;\n const _nfPattern = '[0#]+[,]?[0#]*(\\\\.[0#]+)?';\n if (!pattern || !new RegExp(_nfPattern, 'g').test(pattern)) return '0.00';\n\n if (!isNumber((val + '').replace('.', ''))) return '0.00';\n\n const strAry = pattern.match(new RegExp(_nfPattern, 'g'));\n const p1 = strAry[0].indexOf('.');\n if (p1 > 0) {\n const len = strAry[0].length - p1 - 1;\n val = Math.round(val * Math.pow(10, len)) / Math.pow(10, len);\n } else val = Math.round(val);\n\n val = val + '';\n const p2 = val.indexOf('.');\n let ret = '';\n if (p1 > 0) {\n for (let i = p1 + 1; i < strAry[0].length; i++) {\n const ch = p2 > 0 && p2 + i - p1 < val.length ? val.charAt(p2 + i - p1) : '';\n if (strAry[0].charAt(i) === '0') ret = ret + (ch === '' ? '0' : ch);\n else ret = ret + (ch === '' ? '' : ch);\n }\n ret = ret === '' ? '' : '.' + ret;\n }\n const p3 = strAry[0].indexOf(',');\n if (p3 > 0) {\n const len = p1 > 0 ? p1 - p3 - 1 : strAry[0].length - p3 - 1;\n const len2 = p2 > 0 ? p2 - 1 : val.length - 1;\n for (let i = len2; i >= 0; i--) ret = ((len2 - i + 1) % len === 0 ? ',' : '') + val.charAt(i) + ret;\n\n ret = ret.charAt(0) === ',' ? ret.substring(1, ret.length) : ret;\n } else ret = val.substring(0, p2 > 0 ? p2 : val.length) + ret;\n\n if (oldVal < 0) ret = '-' + ret;\n\n return pattern.replace(strAry[0], ret);\n}\n\n/**\n * @todo: 千位符转换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-24 09:22:56\n * @param {*} val\n * @param {*} decimal 小数位数\n */\nexport const amountFormat = (val: string | number, decimal = 2): string => {\n let v = val + '';\n if (v === null || v === 'null' || v === '0' || v === undefined || v === 'undefined') return '0.00';\n if (v.indexOf(',') > 0) v = removeAmountFormat(v);\n let pattern = '#,###.';\n let decimalPattern = '00';\n if (decimal) decimalPattern = decimalPattern.padStart(decimal, '0');\n pattern = pattern + decimalPattern;\n return zeroFormat(numberFormat(pattern, v));\n};\n\n/**\n * @todo: set quick keys\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:38:53\n * @param {*} ev\n */\nexport const setQuickKeys = (ev) => {\n if (ev && ev.key)\n if (ev.key.toLowerCase() === 'q' && ev.ctrlKey === true) {\n // 绑定ctr + q\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-search__bar>.gv-button.search') as HTMLElement;\n if (btnHtml && btnHtml.style.display !== 'none') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.search') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 'r' && ev.ctrlKey === true) {\n // 绑定crt + r\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.reset') as HTMLElement;\n if (btnHtml && btnHtml.style.display !== 'none') if (btnHtml.getAttribute('refform')) btnHtml.click();\n } else if (ev.key.toLowerCase() === 'e' && ev.ctrlKey === true) {\n // 绑定crt + e\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.shrink') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.expand') as HTMLElement;\n if (btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 's' && ev.ctrlKey === true) {\n // 绑定crt + s\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-drawer__popup .gv-drawer .gv-drawer__footer>.gv-drawer__footer--inner .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 'n' && ev.ctrlKey === true) {\n // 绑定crt + n\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-table__container .gv-table__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === '=' && ev.ctrlKey === true) {\n // 绑定crt + '='\n ev.preventDefault();\n ev.stopPropagation();\n const inputHtml = document.body.querySelector('.main-container .gv-container .gv-table__container .gv-table__search .gv-table__search-input > .el-input__inner') as HTMLElement;\n if (inputHtml) inputHtml.focus();\n } else if (ev.key === 'Escape') {\n // 绑定esc关闭弹窗\n ev.preventDefault();\n ev.stopPropagation();\n const messageConfirmHtml = document.documentElement.querySelector('body>.el-message-box__wrapper') as HTMLElement;\n if (messageConfirmHtml && messageConfirmHtml.style.display !== 'none') {\n const bodyButtonHtml = messageConfirmHtml.querySelector('.el-message-box .el-message-box__btns button') as HTMLElement;\n bodyButtonHtml.click();\n } else {\n const bodyDialogHtml = document.documentElement.querySelector('body>.gv-dialog') as HTMLElement;\n if (bodyDialogHtml && bodyDialogHtml.style.display !== 'none') {\n const bodyButtonHtml = bodyDialogHtml.querySelector('.el-dialog__header button') as HTMLElement;\n bodyButtonHtml.click();\n } else {\n const dialogArr = document.body.querySelectorAll('.main-container .gv-container .gv-dialog__popup .gv-dialog') as NodeListOf<HTMLElement>;\n if (dialogArr)\n for (let i = 0; i < dialogArr.length; i++)\n if (dialogArr[i].style.display !== 'none') {\n const buttonHtml = dialogArr[i].querySelector('.el-dialog__header button') as HTMLElement;\n if (buttonHtml && buttonHtml.style.display !== 'none') {\n buttonHtml.click();\n return;\n }\n }\n\n const buttonDHtml = document.body.querySelector('.main-container .gv-container .gv-drawer__popup .gv-drawer .el-drawer__header button') as HTMLElement;\n if (buttonDHtml && buttonDHtml.style.display !== 'none') buttonDHtml.click();\n }\n }\n }\n};\n\nexport const pathResolve = (parentPath: string, path: string) => {\n if (isUrl(path)) return path;\n const childPath = path.startsWith('/') || !path ? path : `/${path}`;\n return `${parentPath}${childPath}`.replace(/\\/\\//g, '/').trim();\n};\n","<!--\n * @title: svg icon component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-01 17:02:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 10:50:13\n * @version: 1.0.8\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { isExternal } from '@@/utils';\n import * as Icons from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, useAttrs, type DefineComponent } from 'vue';\n const { variables } = useStyle();\n const preNameSpace = variables.namespace;\n const attrs = useAttrs();\n // --- define name and inheritAttrs ---\n defineOptions({\n name: 'GvIcon', // 定义组件名称\n inheritAttrs: false, // 默认继承属性\n });\n // --- transfer props and define default values ---\n const props = withDefaults(\n defineProps<{\n iconType?: string;\n iconName: string;\n className?: string;\n icon?: DefineComponent; // element-plus icon component\n size?: string; // 图标的font-size,单位是px\n }>(),\n {\n iconType: '', // svg | iconfont | el\n className: '',\n },\n );\n // @computed\n const isLocal = computed(() => isExternal(props.iconName));\n const iconType = computed(() => {\n if (props.iconType === 'svg') return 'svg';\n else if (props.iconType === 'iconfont') return 'iconfont';\n else if (props.iconType === 'el') return 'el';\n else if (props.iconType === '')\n if (props.iconName.startsWith('el-icon')) return 'el';\n else if (props.iconName.startsWith('gv-')) return 'iconfont';\n else return 'svg';\n else return 'svg';\n });\n const iconName = computed(() => {\n if (iconType.value === 'svg') return `#${preNameSpace}-icon-${props.iconName}`;\n else if (iconType.value === 'iconfont') return 'iconfont ' + props.iconName;\n else if (iconType.value === 'el') return props.iconName;\n else return `#${props.iconName}`;\n });\n\n // @method\n const svgClass = computed(() => {\n if (iconType.value === 'svg') return props.className ? 'svg-icon ' + props.className : 'svg-icon';\n else return props.className;\n });\n const styleExternalIcon = computed(() => ({\n mask: `url(${props.iconName}) no-repeat 50% 50%`,\n '-webkit-mask': `url(${props.iconName}) no-repeat 50% 50%`,\n }));\n\n /**\n * @todo: get element-plus icon component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:18:16\n * @param {*} computed\n */\n const iconComponent = computed(() => {\n // console.log(iconType.value);\n // console.log(props.iconName);\n if (iconType.value !== 'el') return null;\n const name = props.iconName;\n let compName = '';\n if (name.startsWith('el-icon')) {\n compName = name.replace('el-icon-', '');\n compName = compName.charAt(0).toUpperCase() + compName.slice(1);\n } else compName = name.charAt(0).toUpperCase() + name.slice(1);\n\n return Icons[compName as keyof typeof Icons];\n });\n</script>\n<template>\n <div\n v-if=\"isLocal\"\n :style=\"styleExternalIcon\"\n class=\"svg-external-icon svg-icon\"\n v-bind=\"attrs\"></div>\n <svg\n v-else-if=\"iconType === 'svg'\"\n :class=\"svgClass\"\n aria-hidden=\"true\"\n v-bind=\"attrs\">\n <use :href=\"iconName\" />\n </svg>\n <i\n v-else-if=\"iconType === 'iconfont'\"\n :class=\"[iconName, svgClass]\"\n v-bind=\"attrs\">\n </i>\n <ElIcon\n v-else-if=\"iconComponent\"\n :class=\"svgClass\">\n <component :is=\"iconComponent\" />\n </ElIcon>\n <svg\n v-else\n :class=\"svgClass\"\n :style=\"{ 'font-size': size + 'px' }\"\n aria-hidden=\"true\"\n v-bind=\"attrs\">\n <use :xlink:href=\"iconName\" />\n </svg>\n</template>\n\n<style lang=\"scss\" scoped>\n .svg-icon {\n width: 1em;\n height: 1em;\n overflow: hidden;\n vertical-align: -0.15em;\n fill: currentcolor;\n }\n\n .svg-external-icon {\n display: inline-block;\n background-color: currentcolor;\n mask-size: cover !important;\n }\n</style>\n","import type { App } from 'vue';\nimport GvIcon from './src/GvIcon.vue';\nconst GvIconPlugin = {\n install(app: App): void {\n app.component(GvIcon.name ?? 'GvIcon', GvIcon);\n },\n};\nexport default GvIconPlugin;\n\nexport { GvIcon };\n","interface TreeHelperConfig {\n id: string;\n children: string;\n pid: string;\n}\nconst DEFAULT_CONFIG: TreeHelperConfig = {\n id: 'id',\n children: 'children',\n pid: 'pid',\n};\nconst getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config);\n// tree from list\nexport const listToTree = <T = any>(list: any[], config: Partial<TreeHelperConfig> = {}): T[] => {\n const conf = getConfig(config) as TreeHelperConfig;\n const nodeMap = new Map();\n const result: T[] = [];\n const { id, children, pid } = conf;\n\n for (const node of list) {\n node[children] = node[children] || [];\n nodeMap.set(node[id], node);\n }\n for (const node of list) {\n const parent = nodeMap.get(node[pid]);\n (parent ? parent.children : result).push(node);\n }\n return result;\n};\n\nexport const treeToList = <T = any>(tree: any, config: Partial<TreeHelperConfig> = {}): T => {\n config = getConfig(config);\n const { children } = config;\n const result: any = [...tree];\n for (let i = 0; i < result.length; i++) {\n if (!result[i][children!]) continue;\n result.splice(i + 1, 0, ...result[i][children!]);\n }\n return result;\n};\n\nexport const findNode = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | null => {\n config = getConfig(config);\n const { children } = config;\n const list = [...tree];\n for (const node of list) {\n if (func(node)) return node;\n node[children!] && list.push(...node[children!]);\n }\n return null;\n};\n\nexport const findNodeAll = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T[] => {\n config = getConfig(config);\n const { children } = config;\n const list = [...tree];\n const result: T[] = [];\n for (const node of list) {\n func(node) && result.push(node);\n node[children!] && list.push(...node[children!]);\n }\n return result;\n};\n\nexport const findPath = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | T[] | null => {\n config = getConfig(config);\n const path: T[] = [];\n const list = [...tree];\n const visitedSet = new Set();\n const { children } = config;\n while (list.length) {\n const node = list[0];\n if (visitedSet.has(node)) {\n path.pop();\n list.shift();\n } else {\n visitedSet.add(node);\n node[children!] && list.unshift(...node[children!]);\n path.push(node);\n if (func(node)) return path;\n }\n }\n return null;\n};\n\nexport const findPathAll = (tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}) => {\n config = getConfig(config);\n const path: any[] = [];\n const list = [...tree];\n const result: any[] = [];\n const visitedSet = new Set();\n const { children } = config;\n while (list.length) {\n const node = list[0];\n if (visitedSet.has(node)) {\n path.pop();\n list.shift();\n } else {\n visitedSet.add(node);\n node[children!] && list.unshift(...node[children!]);\n path.push(node);\n func(node) && result.push([...path]);\n }\n }\n return result;\n};\n\nexport const filter = <T = any>(tree: T[], func: (n: T) => boolean, config: Partial<TreeHelperConfig> = {}): T[] => {\n config = getConfig(config);\n const children = config.children as string;\n function listFilter(list: T[]) {\n return list\n .map((node: any) => ({ ...node }))\n .filter((node) => {\n node[children] = node[children] && listFilter(node[children]);\n return func(node) || (node[children] && node[children].length);\n });\n }\n return listFilter(tree);\n};\n\nexport const forEach = <T = any>(tree: T[], func: (n: T) => any, config: Partial<TreeHelperConfig> = {}): void => {\n config = getConfig(config);\n const list: any[] = [...tree];\n const { children } = config;\n for (let i = 0; i < list.length; i++) {\n // func 返回true就终止遍历,避免大量节点场景下无意义循环,引起浏览器卡顿\n if (func(list[i])) return;\n\n children && list[i][children] && list.splice(i + 1, 0, ...list[i][children]);\n }\n};\n/**\n * @description: Extract tree specified structure\n */\nexport const treeMapEach = (data: any, { children = 'children', conversion }: { children?: string; conversion: Fn }) => {\n const haveChildren = Array.isArray(data[children]) && data[children].length > 0;\n const conversionData = conversion(data) || {};\n if (haveChildren)\n return {\n ...conversionData,\n [children]: data[children].map((i: number) =>\n treeMapEach(i, {\n children,\n conversion,\n }),\n ),\n };\n else\n return {\n ...conversionData,\n };\n};\n/**\n * @description: Extract tree specified structure\n */\nexport const treeMap = <T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[] => treeData.map((item) => treeMapEach(item, opt));\n\n/**\n * 递归遍历树结构\n * @param treeDatas 树\n * @param callBack 回调\n * @param parentNode 父节点\n */\nexport const eachTree = (treeDatas: any[], callBack: Fn, parentNode = {}) => {\n treeDatas.forEach((element) => {\n const newNode = callBack(element, parentNode) || element;\n if (element.children) eachTree(element.children, callBack, newNode);\n });\n};\n","/*\n * @title: breadcrumb helper func\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-07-15 12:55:48\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-01-30 12:12:40\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pathResolve } from '../../utils/index';\n\nexport const filterBreadcrumb = (routes: AppRouteRecordRaw[], parentPath = ''): AppRouteRecordRaw[] => {\n const res: AppRouteRecordRaw[] = [];\n\n for (const route of routes) {\n const meta = route?.meta;\n if (route.name !== 'Root' && meta?.hidden && !meta.canTo) continue;\n\n const data: AppRouteRecordRaw = !meta?.alwaysShow && route.children?.length === 1 ? { ...route.children[0], path: pathResolve(route.path, route.children[0].path) } : { ...route };\n\n data.path = pathResolve(parentPath, data.path);\n\n if (data.children) data.children = filterBreadcrumb(data.children, data.path);\n\n if (data) res.push(data);\n }\n return res;\n};\n","<!--\n * @title: breadcrumb \n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:13:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-06 14:28:48\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { usePermsStore } from '@/store/modules/perms';\n import { useBridgeI18n } from '@@/bridge';\n import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus';\n import { computed, defineComponent, ref, TransitionGroup, unref, watch } from 'vue';\n import { useRouter } from 'vue-router';\n import { GvIcon } from '../../GvIcon';\n import { filter, treeToList } from '../../utils/gv.tree';\n import { filterBreadcrumb } from './helper';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('breadcrumb');\n\n export default defineComponent({\n name: 'GvBreadCrumb',\n setup() {\n const appStore = useAppStore();\n const permStore = usePermsStore();\n // if you want to use the icon in breadcrumb, you can set it in appStore\n const showBreadcrumbIcon = computed(() => appStore.getShowBreadcrumbIcon);\n const { currentRoute } = useRouter();\n\n const { t } = useBridgeI18n();\n\n const levelList = ref<AppRouteRecordRaw[]>([]);\n const menuRouters = computed(() => {\n const routers = permStore.getRouters;\n return filterBreadcrumb(routers);\n });\n\n const getBreadcrumb = () => {\n const currentPath = currentRoute.value.matched.slice(-1)[0].path;\n levelList.value = filter<AppRouteRecordRaw>(unref(menuRouters), (node: AppRouteRecordRaw) => node.path === currentPath);\n };\n\n const renderBreadcrumb = () => {\n const breadcrumbList = treeToList<AppRouteRecordRaw[]>(unref(levelList));\n return breadcrumbList.map((v) => {\n const disabled = !v.redirect || v.redirect === 'noredirect';\n const meta = v.meta;\n return (\n <ElBreadcrumbItem\n to={{ path: disabled ? '' : v.path }}\n key={v.name}>\n {meta?.icon && showBreadcrumbIcon.value ? (\n <>\n <GvIcon\n iconType=\"iconfont\"\n iconName={meta.icon}\n className=\"text-[13px]\"></GvIcon>{' '}\n {t(v?.meta?.title || '')}\n </>\n ) : (\n t(v?.meta?.title || '')\n )}\n </ElBreadcrumbItem>\n );\n });\n };\n // @watch\n watch(\n () => currentRoute.value.path,\n (path) => {\n if (path.startsWith('/redirect/')) return;\n\n getBreadcrumb();\n },\n {\n immediate: true,\n },\n );\n // @created\n\n // @render\n return () => (\n <ElBreadcrumb\n separator=\"/\"\n class={`${prefixCls} flex items-center h-full ml-[10px]`}>\n <TransitionGroup\n appear\n enter-active-class=\"animate__animated animate__fadeInRight\">\n {renderBreadcrumb()}\n </TransitionGroup>\n </ElBreadcrumb>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-breadcrumb';\n .#{$prefixCls} {\n user-select: none;\n :deep(.el-breadcrumb__item) {\n display: flex;\n .el-breadcrumb__inner {\n display: flex;\n align-items: center;\n color: #afb3b9;\n cursor: text;\n //color: var(--top-header-text-color);\n //&:hover {\n // color: var(--el-color-primary);\n //}\n &.is-link {\n font-weight: 500;\n }\n }\n .iconfont {\n //font-size: $textSizeSecondary;\n }\n }\n :deep(.el-breadcrumb__item):last-child {\n .el-breadcrumb__inner:hover {\n color: #afb3b9;\n cursor: text;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvBreadCrumb from './src/GvBreadCrumb.vue';\nconst GvBreadCrumbPlugin = {\n install(app: App): void {\n app.component(GvBreadCrumb.name ?? 'GvBreadCrumb', GvBreadCrumb);\n },\n};\nexport default GvBreadCrumbPlugin;\n\nexport { GvBreadCrumb };\n","<!--\n * @title: popconfirm component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 16:43:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-22 16:32:45\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElPopconfirm } from 'element-plus';\n import { defineComponent, getCurrentInstance } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popconfirm');\n\n export default defineComponent({\n name: 'GvPopconfirm',\n props: {\n title: {\n type: String,\n default: '',\n },\n },\n\n emits: ['confirm'],\n\n setup(props, { emit, slots }) {\n const instance = getCurrentInstance();\n\n const handleConfirm = (event: MouseEvent) => {\n emit('confirm', event, instance);\n };\n\n return () => (\n <ElPopconfirm\n title={props.title}\n onConfirm={handleConfirm}\n class={prefixCls}>\n {{\n reference: () => slots.reference?.(),\n }}\n </ElPopconfirm>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popconfirm';\n .#{$prefixCls} {\n display: inline-block;\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopconfirm from './src/GvPopconfirm.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvPopconfirm.name ?? 'GvPopconfirm', GvPopconfirm);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvPopconfirm };\n","/*\n * @title: sessionStorage and localStorage hook\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-19 16:32:15\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-04-24 17:11:28\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n// 获取传入的值的类型\nconst getValueType = (value: any): string => {\n const type = Object.prototype.toString.call(value);\n return type.slice(8, -1);\n};\n\nexport const useStorage = (type: 'sessionStorage' | 'localStorage' = 'sessionStorage'): IWebStorage => {\n const setStorage = (key: string, value: any): void => {\n const valueType = getValueType(value);\n window[type].setItem(key, JSON.stringify({ type: valueType, value }));\n };\n\n const getStorage = (key: string): any => {\n const value = window[type].getItem(key);\n if (value) {\n const { value: val } = JSON.parse(value);\n return val;\n } else return value;\n };\n\n const removeStorage = (key: string): void => {\n window[type].removeItem(key);\n };\n\n const clear = (excludes?: string[]): void => {\n // 获取排除项\n const keys = Object.keys(window[type]);\n const defaultExcludes = ['dynamicRouter', 'serverDynamicRouter'];\n const excludesArr = excludes ? [...excludes, ...defaultExcludes] : defaultExcludes;\n const excludesKeys = excludesArr ? keys.filter((key) => !excludesArr.includes(key)) : keys;\n // 排除项不清除\n excludesKeys.forEach((key) => {\n window[type].removeItem(key);\n });\n // window[type].clear()\n };\n\n return {\n setStorage,\n getStorage,\n removeStorage,\n clear,\n };\n};\n","/*\n * @title: message alert confirm\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 11:47:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:50:11\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport { ElMessage, ElMessageBox, ElNotification } from 'element-plus';\n// import { useLocaleStoreWithOut } from '@/store/modules/locale';\nimport { isError, sleep } from './index';\n// const localeStore = useLocaleStoreInstance();\n// const { lang } = localeStore.getCurrentLocale;\n\nconst notificationTime = 5000;\nconst notificationTimeError = 6000;\nconst messageTime = 2000;\nconst messageTimeError = 5000;\ninterface ConfirmOptions {\n title?: string;\n message: string;\n confirmButtonText?: string;\n cancelButtonText?: string;\n type?: 'success' | 'warning' | 'info' | 'error';\n showCancelButton?: boolean;\n}\n/**\n * @todo: Notification - MessageBox\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 13:48:24\n * @param {unknown} msg\n * @param {MessageType} type\n * @param {string} title\n */\ntype MessageType = 'success' | 'info' | 'warning' | 'error';\n\nexport const alert = async (msg: unknown, type: MessageType = 'success') => {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n let promptMsg = '提示信息';\n if (lang === 'en') promptMsg = 'Hint';\n const duration = type === 'error' ? notificationTimeError : notificationTime;\n let m = 'No message...';\n if (isError(msg)) m = msg.message || 'No message...';\n else if (typeof msg === 'string' || typeof msg === 'number' || typeof msg === 'boolean') m = String(msg);\n else if (typeof msg === 'object') m = JSON.stringify(msg);\n\n ElNotification({\n title: promptMsg,\n message: m,\n type,\n duration: duration,\n });\n await sleep(duration);\n};\n/**\n * @todo: confirm - MessageBox\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 12:03:27\n * @param {*} msg\n * @param {*} type\n */\nexport const confirm = async (msg: string, type: MessageType = 'warning') => {\n if (document.body.querySelector('body>.el-confirm')) return;\n // 返回 Promise 对象\n let msgs: string;\n const showCancelButton = true;\n msgs = '是否确定此操作?';\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n let hint = '提示信息';\n let ok = '确定';\n let cancel = '取消';\n if (msg) msgs = msg;\n else if (lang === 'en') {\n msgs = 'Are you sure you want to proceed?';\n hint = 'Hint';\n ok = 'Ok';\n cancel = 'Cancel';\n }\n\n return new Promise((resolve, reject) => {\n ElMessageBox.confirm(msgs, hint, {\n confirmButtonText: ok,\n cancelButtonText: cancel,\n type,\n showCancelButton,\n } as ConfirmOptions)\n .then(() => {\n resolve(true);\n })\n .catch(() => {\n reject(false);\n });\n });\n};\n\nexport const message = async (msg: unknown, type: MessageType = 'warning', tableedit: boolean = false) => {\n if (tableedit === false) {\n const messageObj = document.body.querySelector('body>.el-message');\n // if (messageObj) messageObj.style.display = 'none';\n if (messageObj) return;\n const notifyObj = document.body.querySelector('body>.el-notification');\n if (notifyObj) return;\n }\n let m = 'No message...';\n if (isError(msg)) m = msg.message || 'No message...';\n else if (typeof msg === 'string' || typeof msg === 'number' || typeof msg === 'boolean') m = String(msg);\n else if (typeof msg === 'object') m = JSON.stringify(msg);\n const duration = type === 'error' ? messageTimeError : messageTime;\n ElMessage({\n message: m,\n showClose: true,\n type,\n duration: duration,\n });\n await sleep(duration);\n};\n","<!--\n * @title: button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 16:43:34\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-09 16:16:19\n * @version: 1.1.0\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import { getVNodeText } from '@@/utils';\n import { confirm } from '@@/utils/gv.notify';\n import { ElButton, useGlobalConfig, type ButtonType, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, ref, unref, watch, type Component, type PropType } from 'vue';\n import { useRoute } from 'vue-router';\n import type { BizType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('button');\n\n export default defineComponent({\n name: 'GvButton',\n props: {\n visible: {\n type: Boolean,\n default: true,\n },\n text: {\n type: String,\n default: '',\n },\n otext: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n type: {\n type: String as PropType<ButtonType>,\n default: 'default',\n },\n link: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: [Boolean, String] as PropType<boolean | string>,\n default: false,\n },\n refForm: {\n type: String,\n required: false,\n default: undefined,\n },\n icon: {\n // type: [String, Object] as PropType<string | DefineComponent>,\n type: String,\n default: '',\n },\n nativeType: {\n type: String,\n default: 'button',\n },\n bizType: {\n type: String as PropType<BizType>,\n default: undefined,\n },\n args: {\n type: String,\n default: undefined,\n },\n confirm: {\n type: [Boolean, String],\n default: false,\n },\n perms: {\n type: String,\n default: undefined,\n },\n cb: {\n type: Function as PropType<(args?: any) => void>,\n default: () => {},\n },\n },\n\n // @emits\n emits: ['click', 'confirm'],\n\n setup(props, { emit, slots }) {\n // @data\n // const attrs = useAttrs();\n const { t } = useBridgeI18n();\n const route = useRoute();\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const globalSize = useGlobalConfig('size');\n const buttonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const buttonConfirm = computed(() => appStore.buttonConfirm);\n const loadings = ref(props.loading);\n const locked = ref(false);\n const isShow = ref(props.visible);\n const isIf = ref(true);\n\n // @computed\n const getSlots = computed(() => {\n if (props.text && props.otext) return props.text;\n else return slots.default?.();\n });\n\n // @watch\n watch(\n () => props.loading,\n (v) => (loadings.value = v),\n );\n watch(\n () => props.visible,\n (v) => (isShow.value = v),\n );\n\n // @method\n\n const invokeClick = async (e: MouseEvent) => {\n const raw = instance?.vnode?.props?.onClick as ((event: MouseEvent, args?: string) => unknown) | ((event: MouseEvent, args?: string) => unknown)[] | undefined;\n const handlers = raw ? (Array.isArray(raw) ? raw : [raw]) : [];\n if (handlers.length === 0) {\n emit('click', e, props.args);\n return;\n }\n for (const handler of handlers) await handler(e, props.args);\n };\n\n const withLoading = async (task: () => void | Promise<void>) => {\n if (props.loading) {\n await task();\n return;\n }\n loadings.value = true;\n try {\n await task();\n } finally {\n loadings.value = false;\n }\n };\n\n const setIconStyle = () => {\n if (!props.icon) return '';\n if (props.icon.startsWith('el-icon'))\n return (\n <GvIcon\n iconType=\"el\"\n iconName={props.icon.replace('el-icon-', '')}\n />\n );\n else if (props.icon.startsWith('iconfont') || props.icon.startsWith('gv-icon'))\n return (\n <GvIcon\n iconType=\"iconfont\"\n iconName={props.icon.replace('iconfont', '')}\n />\n );\n else return <GvIcon iconName={props.icon} />;\n // 父组件如果传递了图标组件,就使用图标组件,如果传递了ep图标名称,就使用ep图标名称\n // if (typeof props.icon === 'string')\n // return (\n // <GvIcon\n // iconName={props.icon}\n // className={props.icon}\n // />\n // );\n // else {\n // const Icons = props.icon;\n // return <Icons />;\n // }\n };\n\n const checkPerms = () => {\n if (route) {\n const meta = route.meta;\n if (meta) {\n const pm = meta.pm || '';\n if (pm) {\n let filter: string = props.text || '';\n if (props.otext) filter = props.otext;\n if (filter === '') {\n const slot = slots.default?.();\n if (slot && slot[0]) filter = getVNodeText(slot[0]) || '';\n }\n if (filter) {\n const pmArr = pm.split(',');\n const perms = pmArr.filter((x) => x.indexOf(filter) !== -1);\n if (perms.length > 0) {\n const p = perms[0];\n const arr = p.split('|');\n if (arr[0] !== ' ' && arr[1] && arr[1] === 'f') {\n isShow.value = false;\n isIf.value = false;\n }\n }\n }\n }\n }\n }\n };\n\n const handleClick = async (e: MouseEvent, type?: string) => {\n // 判断是否是reset\n if (props.bizType === 'reset') {\n let parent: any = instance?.parent; // form\n while (parent && parent.type?.name !== 'ElForm') parent = parent.parent;\n await parent.exposed.resetFields?.();\n\n while (parent && parent.type?.name !== 'GvForm') parent = parent.parent;\n const rootForm = parent;\n // console.log(rootForm);\n const originFormList = rootForm?.exposed.originFormList.value;\n const formList = rootForm?.props.formList;\n // console.log(parent.props.model.value);\n if (originFormList && Array.isArray(originFormList))\n originFormList.forEach((x: any, index: number) => {\n if (x.type === 'dic') formList[index]['filtercode'] = x.filtercode; // 重置字典的filtercode\n formList[index]['value'] = x.value;\n formList[index]['showLabel'] = x.showLabel;\n formList[index]['hidden'] = x.hidden;\n formList[index]['disabled'] = x.disabled;\n // 重置日期\n if (x.dateType === 'daterange2' || x.dateType === 'datetimerange2') {\n parent.props.model.value[x.field + '-start'] = undefined;\n parent.props.model.value[x.field + '-end'] = undefined;\n parent.props.model.value[x.field] = undefined;\n }\n });\n // 重置按钮自定义回调\n await props.cb?.(props.args);\n\n const rootEl = parent?.vnode.el as HTMLElement;\n // 重置日期\n const dateRangeSingles = rootEl?.querySelectorAll('.gv-daterange__single') as NodeListOf<HTMLElement>;\n if (dateRangeSingles)\n for (let i = 0; i < dateRangeSingles.length; i++) {\n const startInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-start .el-input__inner') as HTMLInputElement | null;\n if (startInput) startInput.value = '';\n const endInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-end .el-input__inner') as HTMLInputElement | null;\n if (endInput) endInput.value = '';\n }\n // update: 重置后执行查询方法 2022-04-17\n await withLoading(async () => {\n const searchBtn = parent?.vnode.el?.querySelector('.gv-search-bar .el-button--primary') as HTMLElement | undefined;\n searchBtn?.click();\n });\n return;\n } else if (props.bizType === 'import' || props.bizType === 'export') {\n emit('click', e, props.args);\n return;\n }\n\n await withLoading(async () => {\n if (type === 'confirm' && buttonConfirm.value === false)\n try {\n await confirm(t('common.confirmMsg'));\n } catch {\n return;\n }\n\n if (!locked.value) {\n locked.value = true;\n try {\n await invokeClick(e);\n } finally {\n locked.value = false;\n }\n }\n });\n };\n\n // @created\n\n // @mounted\n // onMounted(() => {\n // checkPerms();\n // });\n\n // @render\n /** ===== render 渲染 ===== */\n return () => {\n // validate btn perms\n checkPerms();\n\n const classz = props.bizType ? `${prefixCls} ${props.bizType}` : `${prefixCls}`;\n if (isIf.value) {\n let renderBtn: Component;\n if (props.confirm === 'true' || props.confirm === true)\n if (buttonConfirm.value === false)\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e, 'confirm')}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n else\n renderBtn = (\n <GvPopconfirm\n title={t('common.confirmMsg')}\n onConfirm={(e: MouseEvent) => handleClick(e, 'confirm')}>\n {{\n reference: () => (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n class={classz}>\n {getSlots.value}\n </ElButton>\n ),\n }}\n </GvPopconfirm>\n );\n else\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e)}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n return renderBtn;\n } else return null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-button';\n .#{$prefixCls} {\n :deep(i + span) {\n margin-left: 5px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvButton from './src/GvButton.vue';\n\nconst GvButtonPlugin = {\n install(app: App): void {\n app.component(GvButton.name ?? 'GvButton', GvButton);\n },\n};\nexport default GvButtonPlugin;\n\nexport { GvButton };\n","<!--\n * @title: card component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 09:39:53\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:18:37\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCard } from 'element-plus';\n import { defineComponent } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('card');\n\n export default defineComponent({\n name: 'GvCard',\n props: {},\n setup(_props, { slots }) {\n // @method\n /**\n *@todo: 设置header标题\n *@author: bugcao\n *@date: 2026-05-09 09:31:12\n *@version: v0.0.1\n */\n const getCardHeader = () => {\n if (slots.header?.()) return <div class=\"clearfix\">{slots.header?.()}</div>;\n else return null;\n };\n\n // @render\n return () => (\n <ElCard class={prefixCls}>\n {{\n header: () => getCardHeader(),\n default: () => slots.default?.(),\n }}\n </ElCard>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-card';\n .#{$prefixCls} {\n .clearfix::before,\n .clearfix::after {\n display: table;\n content: '';\n }\n .clearfix::after {\n clear: both;\n }\n :deep(.el-card__body) {\n padding: 10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCard from './src/GvCard.vue';\n\nconst GvCardPlugin = {\n install(app: App): void {\n app.component(GvCard.name ?? 'GvCard', GvCard);\n },\n};\nexport default GvCardPlugin;\n\nexport { GvCard };\n","<!--\n * @title: cascader component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:07\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElCascader, useGlobalConfig, type CascaderOption, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('cascader');\n\n export default defineComponent({\n name: 'GvCascader',\n props: {\n vref: {\n type: String,\n required: false,\n default: '',\n },\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n id: {\n type: String,\n required: false,\n default: undefined,\n },\n value: {\n type: Array,\n required: false,\n default: () => [],\n },\n options: {\n type: Array as PropType<CascaderOption[]>,\n required: false,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n placeholder: {\n type: String,\n required: false,\n default: 'All', // 请选择\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n clearable: {\n type: Boolean,\n required: false,\n default: true,\n },\n showAllLevels: {\n type: Boolean,\n required: false,\n default: true,\n },\n separator: {\n type: String,\n required: false,\n default: ' / ',\n },\n trigger: {\n type: String,\n required: false,\n default: 'hover',\n },\n filterable: {\n type: Boolean,\n required: false,\n default: true,\n },\n multiple: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazy: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazyLoad: {\n type: Function as PropType<(node: any, resolve: (data: any[]) => void, reject: () => void) => void>,\n required: false,\n default: () => {},\n },\n },\n // @emit\n emits: ['input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const sOps = props.options;\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n\n // @computed\n const cascaderSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n\n // 回调参数:(value: string | number)\n // const handleInput = (val) => {\n // emit('input', val);\n // };\n const handleChange = (val) => {\n emit('change', val);\n };\n const handleBlur = (event) => {\n emit('blur', event);\n };\n /**\n * @todo: 搜索\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-10-07 15:48:09\n * @param {*} node\n * @param {*} query\n */\n const handleFilterMethod = (node, query) => {\n // console.log(node);\n const path = node.path;\n const labels = node.pathLabels;\n const data = node.data;\n if (query) {\n if (path.join(',').indexOf(query) >= 0) return true;\n if (labels.join(',').indexOf(query) >= 0) return true;\n if (data.spell)\n if (data.spell.indexOf(query) >= 0) return true;\n else {\n const pathNodes = node.pathNodes;\n return pathNodes.some((x) => {\n if (x.data.spell && x.data.spell.indexOf(query) >= 0) return true;\n });\n }\n }\n };\n\n // @render\n return (\n <ElCascader\n ref={props.vref || 'gv-cascader'}\n id={resolvedInputId.value}\n {...(props.name ? { name: props.name } : {})}\n class={prefixCls}\n v-model={inputValue.value}\n style={{ display: props.value ? '' : 'none' }}\n size={cascaderSize.value}\n placeholder={sPlaceHolder.value}\n options={sOps}\n disabled={getDisabled.value}\n show-all-levels={props.showAllLevels}\n clearable={props.clearable}\n separator={props.separator}\n filterable={props.filterable}\n filter-method={handleFilterMethod}\n debounce={400}\n onBlur={handleBlur}\n onChange={handleChange}\n collapse-tags\n props={{\n expandTrigger: props.trigger as 'click' | 'hover',\n lazy: props.lazy,\n lazyLoad: props.lazyLoad,\n multiple: props.multiple,\n }}></ElCascader>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-cascader';\n .#{$prefixCls} {\n width: 100%;\n\n :deep(.el-input) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-input__inner {\n height: 30px !important;\n line-height: 30px;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCascader from './src/GvCascader.vue';\nconst GvCascaderPlugin = {\n install(app: App): void {\n app.component(GvCascader.name ?? 'GvCascader', GvCascader);\n },\n};\nexport default GvCascaderPlugin;\n\nexport { GvCascader };\n","<!--\n * @title: checkbox component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 15:50:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:51:56\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckbox, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TCheckboxValueType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox');\n\n export default defineComponent({\n name: 'GvCheckbox',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Boolean, String, Number] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n const checkboxValue = ref(props.value);\n const checkboxSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新值 */\n const handleUpdate = (val: TCheckboxValueType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxValueType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckbox\n class={prefixCls}\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n border={props.border}\n size={checkboxSize.value}\n style={{ display: props.visible ? '' : 'none' }}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckbox>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n //font-size: $appTextSize;\n\n :deep(.el-checkbox__input) {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-focus {\n .el-checkbox__inner {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked {\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n\n &:hover {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n\n :deep(.el-checkbox__input.is-checked + .el-checkbox__label) {\n color: var(--primaryColor, $primaryColor);\n }\n\n :deep(.el-checkbox__label) {\n //font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckbox from './src/GvCheckbox.vue';\n\nconst GvCheckboxPlugin = {\n install(app: App): void {\n app.component(GvCheckbox.name ?? 'GvCheckbox', GvCheckbox);\n },\n};\nexport default GvCheckboxPlugin;\n\nexport { GvCheckbox };\n","<!--\n * @title: checkbox button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:41:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:52:18\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxButton, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxButtonValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-button');\n\n export default defineComponent({\n name: 'GvCheckboxButton',\n inheritAttrs: false,\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n required: false,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n /** 内部值 */\n const checkboxValue = ref(props.value);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @computed\n /** checkbox尺寸 */\n const checkboxButtonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @method\n /** 更新v-model */\n const handleUpdate = (val: TCheckboxButtonValue) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n\n // @render\n return () => (\n <ElCheckboxButton\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n value={props.value}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n size={checkboxButtonSize.value}\n class={prefixCls}\n border={props.border}\n style={{ display: props.visible ? '' : 'none' }}>\n {slots.default?.()}\n </ElCheckboxButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-button';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n //font-size: $appTextSize;\n\n :deep(.el-checkbox-button__inner) {\n //font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxButton from './src/GvCheckboxButton.vue';\n\nconst GvCheckboxButtonPlugin = {\n install(app: App): void {\n app.component(GvCheckboxButton.name ?? 'GvCheckboxButton', GvCheckboxButton);\n },\n};\nexport default GvCheckboxButtonPlugin;\n\nexport { GvCheckboxButton };\n","<!--\n * @title: checkbox group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:08:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:26:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxGroupType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-group');\n\n export default defineComponent({\n name: 'GvCheckboxGroup',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: Array as PropType<TCheckboxGroupType>,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n\n const checkboxValue = ref(props.value);\n\n // @computed\n const checkboxGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新 v-model */\n const handleUpdate = (val: TCheckboxGroupType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxGroupType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckboxGroup\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n size={checkboxGroupSize.value}\n aria-label={props.label}\n min={props.min}\n max={props.max}\n disabled={props.disabled}\n class={prefixCls}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckboxGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxGroup from './src/GvCheckboxGroup.vue';\n\nconst GvCheckboxGroupPlugin = {\n install(app: App): void {\n app.component(GvCheckboxGroup.name ?? 'GvCheckboxGroup', GvCheckboxGroup);\n },\n};\nexport default GvCheckboxGroupPlugin;\n\nexport { GvCheckboxGroup };\n","<!--\n * @title: col component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 10:00:33\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:24:29\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCol } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('col');\n\n export default defineComponent({\n name: 'GvCol',\n props: {\n span: {\n type: Number,\n default: 24,\n },\n offset: {\n type: Number,\n default: 0,\n },\n xs: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n sm: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n md: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n lg: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n xl: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n tag: {\n type: String,\n default: 'div',\n },\n visible: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @render\n return () => (\n <ElCol\n ref=\"gv-col\"\n style={{ display: props.visible ? '' : 'none' }}\n xs={props.xs}\n sm={props.sm}\n md={props.md}\n lg={props.lg}\n xl={props.xl}\n span={props.span}\n offset={props.offset}\n tag={props.tag}\n class={prefixCls}>\n {slots.default?.()}\n </ElCol>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvCol from './src/GvCol.vue';\n\nconst GvColPlugin = {\n install(app: App): void {\n app.component(GvCol.name ?? 'GvCol', GvCol);\n },\n};\nexport default GvColPlugin;\n\nexport { GvCol };\n","/*\n * 日期工具函数(Vue3 + TS 重构版)\n */\n\nexport type LocaleType = 'zh' | 'en' | 'english';\n\nconst localLabels = {\n monthes: {\n english: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n en: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n zh: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n },\n weekdays: {\n english: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n en: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n zh: ['日', '一', '二', '三', '四', '五', '六'],\n },\n meridians: {\n english: ['a.m.', 'p.m.'],\n en: ['AM', 'PM'],\n zh: ['上午', '下午'],\n },\n dayagos: {\n english: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n en: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n zh: ['今天', '昨天', '明天', '天前', '天后'],\n },\n};\n\nexport const toMidnight = (date: Date): Date => {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nexport const daysAgo = (date: Date, days = 0, midnight = false): Date => {\n const result = new Date(date.getTime() - days * 8.64e7);\n return midnight ? toMidnight(result) : result;\n};\n\nexport const monthBegin = (date: Date, offset = 0): Date => {\n const days = date.getDate() - 1 - offset;\n return daysAgo(date, days, true);\n};\n\nexport const quarterBegin = (date: Date): Date => {\n const month = date.getMonth() - (date.getMonth() % 3);\n return toMidnight(new Date(date.getFullYear(), month, 1));\n};\n\nexport const yearBegin = (date: Date): Date => toMidnight(new Date(date.getFullYear(), 0, 1));\n\nconst padZero = (value: string | number, len = 2): string => String(value).padStart(len, '0');\n\nexport const strftime = (date: Date, format?: string, local: LocaleType = 'zh'): string => {\n if (!format) {\n const str = new Date(date.getTime() + 2.88e7).toISOString();\n return str.substring(0, 16).replace('T', ' ');\n }\n\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n format = format.replace('%F', '%Y-%m-%d');\n format = format.replace(/%D|%x/g, '%m/%d/%y');\n format = format.replace(/%T|%X/g, '%H:%M:%S');\n format = format.replace('%R', '%H:%M');\n\n return format.replace(/%[A-Za-z%]/g, (f) => {\n let ans: string | number = f;\n\n switch (f) {\n case '%%':\n ans = '%';\n break;\n\n case '%Y':\n ans = date.getFullYear();\n break;\n\n case '%y':\n ans = date.getFullYear() % 100;\n break;\n\n case '%m':\n ans = date.getMonth() + 1;\n break;\n\n case '%d':\n ans = date.getDate();\n break;\n\n case '%H':\n ans = date.getHours();\n break;\n\n case '%M':\n ans = date.getMinutes();\n break;\n\n case '%S':\n ans = date.getSeconds();\n break;\n\n case '%b':\n case '%B': {\n const key = f === '%B' && locale === 'en' ? 'english' : locale;\n ans = localLabels.monthes[key][date.getMonth()];\n break;\n }\n\n case '%a':\n case '%A': {\n const key = f === '%A' && locale === 'en' ? 'english' : locale;\n ans = localLabels.weekdays[key][date.getDay()];\n break;\n }\n\n default:\n break;\n }\n\n if (['%y', '%m', '%d', '%H', '%M', '%S'].includes(f)) return padZero(ans);\n\n return String(ans);\n });\n};\n\nexport const humanize = (date: Date, local: LocaleType = 'zh'): string => {\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n const result = strftime(date, '', locale);\n\n const today = toMidnight(new Date()).getTime();\n const current = toMidnight(date).getTime();\n\n const days = (today - current) / 8.64e7;\n\n if (days <= -10 || days >= 10) return result;\n\n const labels = localLabels.dayagos[locale];\n\n let lbl = '';\n\n if (days === 0) lbl = labels[0];\n else if (days === 1) lbl = labels[1];\n else if (days === -1) lbl = labels[2];\n else if (days >= 2) lbl = `${days}${labels[3]}`;\n else lbl = `${Math.abs(days)}${labels[4]}`;\n\n return lbl + result.substring(10, 16);\n};\n","/*\n * @title: 日期组件左侧选择日期快捷键(非区间模式)\n * @author: bugcao@163.com\n * @Date: 2022-05-14 08:33:20\n * @LastEditors: bugcao@163.com\n * @LastEditTime: 2022-05-14 08:33:20\n * @version: 0.0.1\n * @copyright: copyright (c) 2022 bugcao\n */\nimport { daysAgo, monthBegin, quarterBegin, yearBegin } from './datetime';\n\nexport interface ShortcutItem {\n text: string;\n value: Date | [Date, Date] | (() => Date | [Date, Date]);\n}\n\nconst now = () => new Date();\n\n/** 单日期快捷选择 */\nexport const dateShortcuts: ShortcutItem[] = [\n {\n text: '今天',\n value: () => now(),\n },\n {\n text: '昨天',\n value: () => daysAgo(now(), 1),\n },\n {\n text: '最近一周',\n value: () => daysAgo(now(), 7),\n },\n {\n text: '最近30天',\n value: () => daysAgo(now(), 30),\n },\n {\n text: '本月开始',\n value: () => monthBegin(now()),\n },\n {\n text: '本季开始',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 英文单日期快捷选择 */\nexport const dateShortcutsEn: ShortcutItem[] = [\n {\n text: 'Today',\n value: () => now(),\n },\n {\n text: 'Yesterday',\n value: () => daysAgo(now(), 1),\n },\n {\n text: 'Last week',\n value: () => daysAgo(now(), 7),\n },\n {\n text: 'Last 30 days',\n value: () => daysAgo(now(), 30),\n },\n {\n text: 'Month start',\n value: () => monthBegin(now()),\n },\n {\n text: 'Season Start',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 日期时间快捷选择 */\nexport const dateTimeShortcuts = dateShortcuts.slice(0, 3);\n\nexport const dateTimeShortcutsEn = dateShortcutsEn.slice(0, 3);\n\n/** 日期范围快捷选择 */\nexport const dateRangeShortcuts: ShortcutItem[] = [\n {\n text: '最近一周',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '最近30天',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本月至今',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本季至今',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '今年至今',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: '最近六个月',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 英文日期范围快捷选择 */\nexport const dateRangeShortcutsEn: ShortcutItem[] = [\n {\n text: 'Last week',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Last 30 days',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Month date',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Season date',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Year date',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: 'Last 6 mon',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 日历快捷选择 */\nexport const calendarShortcuts = [...dateShortcuts];\n","<!--\n * @title: 自定义日期选择组件\n * @author: bugcao@163.com\n * @date: 2026-06-08 14:52:11\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-09 13:45:54\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Bugcao\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDatePicker, useGlobalConfig, type ComponentSize, type DatePickerType } from 'element-plus';\n import { computed, defineComponent, ref, unref, useAttrs, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n import { dateRangeShortcuts, dateRangeShortcutsEn, dateShortcuts, dateShortcutsEn, dateTimeShortcuts, dateTimeShortcutsEn } from './shortcuts';\n import type { TDatePickerSize, TDatePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('datepicker');\n\n export default defineComponent({\n // @define name\n name: 'GvDatePicker',\n\n // @props\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, String, Array] as PropType<TDatePickerType>,\n default: undefined,\n },\n type: {\n type: String as PropType<DatePickerType>,\n default: 'date',\n },\n format: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n valueFormat: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n defaultTime: {\n type: Array,\n default: undefined,\n },\n size: {\n type: String as PropType<TDatePickerSize>,\n default: 'default',\n },\n rangeSeparator: {\n type: String,\n default: undefined,\n },\n startPlaceholder: {\n type: String,\n default: undefined,\n },\n endPlaceholder: {\n type: String,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n disabledDateFunc: {\n type: Array,\n default: () => [],\n },\n disabledDate: {\n type: Function,\n default: () => {},\n },\n editable: {\n type: Boolean,\n default: true,\n },\n unlink: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change', 'blur', 'focus', 'pick', 'input'],\n\n setup(props, { emit }) {\n // @hooks\n const { locale, t } = useI18n();\n const attrs = useAttrs();\n const globalSize = useGlobalConfig('size');\n\n // @data\n const inputValue = ref(props.modelValue);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @computed\n const datePickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n const getShortcuts = computed(() => {\n if (locale.value === 'en')\n if (props.type === 'date') return dateShortcutsEn;\n else if (props.type === 'datetime') return dateTimeShortcutsEn;\n else if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcutsEn;\n else return '';\n // fixme: 查看源码是'',如果是[],则依旧会出现左边栏\n else if (props.type === 'date') return dateShortcuts;\n else if (props.type === 'datetime') return dateTimeShortcuts;\n else if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcuts;\n else return ''; // fixme: 查看源码是'',如果是[],则依旧会出现左边栏\n });\n /**\n * @todo: 设置pickerOptions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 17:03:41\n */\n const getPickerOptions = computed(() => {\n const pickerOptions: any = {\n shortcuts: getShortcuts.value,\n };\n if (props.disabledDateFunc.includes('beforeToday'))\n // 禁止选择今天之前日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() < Date.now() - 8.64e7;\n if (props.disabledDateFunc.includes('afterToday'))\n // 禁止选择今天之后的日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() > Date.now();\n if (props.disabledDate) {\n const db = { disabledDate: props.disabledDate };\n return { ...pickerOptions, ...db };\n } else return { ...pickerOptions };\n });\n\n // @methods\n /**\n * @todo: 回调参数:(value: string | number)\n * @author: bugcao@163.com\n * @Date: 2026-06-08 16:03:12\n * @param {*} value\n */\n const handleInput = (value: TDatePickerType) => {\n emit('update:modelValue', value);\n emit('input', value);\n };\n /**\n * @todo: 变化时触发\n * @author: bugcao@163.com\n * @Date: 2026-06-08 15:05:50\n * @param {*} value\n */\n const handleChange = (value: string) => {\n emit('change', value);\n };\n /**\n * @todo: 失去焦点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 18:39:51\n * @param {*} vm 当前vue组件对象\n */\n const handleBlur = (vm: FocusEvent) => {\n // console.log(vm);\n // const val = vm.$el.querySelector('input').value;\n // if (val) {\n // const format = vm.format;\n // if (!this.userInput)\n // this.userInput = moment(val, format.toUpperCase()).format(format.toUpperCase());\n // if (this.userInput !== 'Invalid date')\n // vm.userInput = this.userInput;\n // // picker.vue中触发value的方法\n // // vm.handleChange();\n emit('blur', vm);\n // this.userInput = '';\n // }\n };\n /**\n * @todo: 获得焦点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 18:39:51\n * @param {*} vm 当前vue组件对象\n */\n const handleFocus = (vm: FocusEvent) => {\n emit('focus', vm);\n };\n /**\n * @todo: 选中日期回调:只有在range模式下有效\n * @author: bugcao@163.com\n * @Date: 2026-06-08 16:16:51\n * @param {*} maxDate\n * @param {*} minDate\n */\n const handlePick = (val: [Date, null | Date]) => {\n emit('pick', { maxDate: val[0], minDate: val[1] });\n };\n\n // @render\n return () => (\n <div class={prefixCls}>\n <ElDatePicker\n ref={props.vref || 'gv-datepicker'}\n id={resolvedInputId.value}\n name={props.name}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleInput}\n type={props.type}\n range-separator={props.rangeSeparator || t('common.until')}\n placeholder={props.placeholder || t('common.selectDate')}\n startPlaceholder={props.startPlaceholder || t('common.startDate')}\n endPlaceholder={props.endPlaceholder || t('common.endDate')}\n default-time={props.defaultTime}\n disabled-date={getPickerOptions.value?.disabledDate}\n shortcuts={getPickerOptions.value.shortcuts}\n format={props.format}\n clearable={props.clearable}\n valueFormat={props.valueFormat}\n {...({\n onCalendarChange: handlePick,\n onBlur: handleBlur,\n onFocus: handleFocus,\n onChange: handleChange,\n } as any)}\n size={datePickerSize.value}\n disabled={props.disabled}\n editable={props.editable}\n prefix-icon=\"\"\n unlink-panels={props.unlink}\n {...attrs}\n // { ...this.$listeners }\n ></ElDatePicker>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-datepicker';\n .#{$prefixCls} {\n width: 100% !important;\n vertical-align: middle;\n :deep(.el-date-editor) {\n width: 100%;\n }\n :deep(.el-input.is-disabled) {\n .el-input__inner {\n color: $textColor;\n }\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n //font-size: $appTextSize;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-range__close-icon {\n width: 20px;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-date-editor--daterange {\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDatePicker from './src/GvDatePicker.vue';\n\nconst GvDatePickerPlugin = {\n install(app: App): void {\n app.component(GvDatePicker.name ?? 'GvDatePicker', GvDatePicker);\n },\n};\nexport default GvDatePickerPlugin;\n\nexport { GvDatePicker };\n","/*\n * @title: dialog drag\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 10:50:25\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 10:52:45\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Directive } from 'vue';\n\n/** 使用 WeakSet 跟踪已绑定拖拽事件的 header 元素,避免内存泄漏 */\nconst boundElements = new WeakSet<HTMLElement>();\n\n/**\n * 初始化拖拽功能\n */\nconst initDrag = (el: HTMLElement, collapseMenu: boolean = false) => {\n /** Vue3 dialog - 支持 appendToBody 的情况 */\n let dragDom = el.querySelector('.el-dialog') as HTMLElement;\n if (!dragDom) dragDom = document.querySelector('.el-dialog') as HTMLElement;\n\n if (!dragDom) {\n console.warn('gv-drag-dialog: 未找到 dialog 元素');\n return false;\n }\n\n /** Vue3 dialog header - 支持自定义 header 和默认 header */\n let dialogHeaderEl: HTMLElement | null = null;\n dialogHeaderEl = dragDom.querySelector('.el-dialog__header') as HTMLElement;\n if (!dialogHeaderEl) dialogHeaderEl = dragDom.querySelector('.gv-dialog__title') as HTMLElement;\n\n if (!dialogHeaderEl) {\n console.warn('gv-drag-dialog: 未找到 dialog header 元素');\n return false;\n }\n\n /** 避免重复绑定 */\n if (boundElements.has(dialogHeaderEl)) return true;\n boundElements.add(dialogHeaderEl);\n\n /** 鼠标移动样式 */\n dialogHeaderEl.style.cursor = 'move';\n /** 初始化顶部 */\n dragDom.style.top = '0px';\n /** 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null) */\n const getStyle = (function () {\n if ((window.document as any).currentStyle) return (dom: HTMLElement, attr: string) => (dom as any).currentStyle[attr];\n else return (dom: HTMLElement, attr: string) => getComputedStyle(dom, null)[attr as any];\n })();\n\n dialogHeaderEl.onmousedown = (e: MouseEvent) => {\n /** 鼠标按下,计算当前元素距离可视区的距离 */\n const disX = e.clientX - dialogHeaderEl!.offsetLeft;\n const disY = e.clientY - dialogHeaderEl!.offsetTop;\n\n const dragDomWidth = dragDom.offsetWidth;\n const dragDomHeight = dragDom.offsetHeight;\n\n const screenWidth = document.body.clientWidth;\n const screenHeight = document.body.clientHeight;\n\n /** 左侧边界 */\n const minDragDomLeft = dragDom.offsetLeft;\n /** 右侧边界 */\n const menuWidth = collapseMenu ? 54 : 200;\n const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth - menuWidth;\n\n /** 上边界 */\n const minDragDomTop = dragDom.offsetTop;\n /** 下边界 */\n // 45: toolbar height;34: tags view height\n const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight - 45 - 34;\n\n /** 获取到的值带px 正则匹配替换 */\n let styL: string | number = getStyle(dragDom, 'left');\n let styT: string | number = getStyle(dragDom, 'top');\n\n /** 百分比转像素 */\n if (typeof styL === 'string' && styL.includes('%')) {\n styL = document.body.clientWidth * (+styL.replace(/%/g, '') / 100);\n styT = document.body.clientHeight * (+String(styT).replace(/%/g, '') / 100);\n } else {\n styL = +String(styL).replace(/\\px/g, '');\n styT = +String(styT).replace(/\\px/g, '');\n }\n\n /** 鼠标移动 */\n const onMouseMove = (ev: MouseEvent) => {\n /** 通过事件委托,计算移动的距离 */\n let left = ev.clientX - disX;\n let top = ev.clientY - disY;\n\n /** 边界处理 */\n if (-left > minDragDomLeft) left = -minDragDomLeft;\n else if (left > maxDragDomLeft) left = maxDragDomLeft;\n\n if (-top > minDragDomTop) top = -minDragDomTop;\n else if (top > maxDragDomTop) top = maxDragDomTop;\n\n /** 移动当前元素 */\n dragDom.style.left = `${left + Number(styL)}px`;\n dragDom.style.top = `${top + Number(styT)}px`;\n };\n\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n return true;\n};\n\nconst dragDialog: Directive = {\n /**\n * @title 挂载时调用\n * @param el 指令绑定的元素\n * @param binding 指令绑定的参数\n * @description Vue3 中需要使用 nextTick 等待 DOM 渲染完成,并通过 querySelector 查找 ElDialog 内部元素\n */\n // mounted(el: HTMLElement, binding: DirectiveBinding, vnode: VNode) {\n // // 使用 setTimeout 确保 ElDialog 已经渲染完成\n // setTimeout(() => {\n // // 尝试初始化,如果 dialog 还没打开,会在 opened 事件中再次尝试\n // initDrag(el);\n // }, 200);\n // },\n};\nexport default dragDialog;\nexport { initDrag };\n","<!--\n * @title: dialog component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:57:32\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-09 18:04:43\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDialog } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref, watch, type VNode } from 'vue';\n import { initDrag } from './drag';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('dialog');\n\n export default defineComponent({\n name: 'GvDialog',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n hasFooter: {\n type: Boolean,\n required: false,\n default: true,\n },\n width: {\n type: String,\n required: false,\n default: '75%',\n },\n height: {\n type: String,\n required: false,\n default: undefined,\n },\n nest: {\n type: Boolean,\n required: false,\n default: false,\n },\n appendToBody: {\n type: Boolean,\n required: false,\n default: false,\n },\n fullscreen: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: String,\n required: false,\n default: undefined,\n },\n closeOnClickModal: {\n type: Boolean,\n required: false,\n default: false,\n },\n closeOnPressEscape: {\n type: Boolean,\n required: false,\n default: true,\n },\n dialogClass: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n emits: ['open', 'opened', 'close', 'closed', 'cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n const buttonQuick = appStore.buttonQuick;\n const collapseMenus = appStore.collapseMenus;\n const instance = getCurrentInstance();\n\n let myDialogClass = props.dialogClass || prefixCls;\n let dialogVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-dialog';\n const dialogMaxHeight = ref(props.height);\n let sAppendToBody = props.appendToBody;\n const modalAppendToBody = ref(false);\n let sNest = props.nest;\n let modalMask = props.nest;\n\n // @watch\n watch(\n () => props.visible,\n (newValue) => {\n // fixme: watch中跟踪visible,解决如将ht-dialog在一个vue组件中,如不设置,则第二次无法显示\n dialogVisible = newValue;\n if (dialogVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n else maskVisible.value = false;\n },\n );\n\n // @method\n const handleVisible = (visible: boolean) => {\n dialogVisible = visible;\n };\n const handleOpen = () => {\n emit('open');\n };\n const handleOpened = () => {\n emit('opened');\n nextTick(() => {\n initDrag(instance?.vnode?.el as HTMLElement, collapseMenus);\n });\n };\n const handleClose = () => {\n dialogVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n emit('close');\n };\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event) => {\n dialogVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n /**\n * @todo: render footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 11:19:11\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x.children?.[0]) || '';\n // add: 增加text属性,判断权限使用 2023-04-18\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick) if (text === t('dialogBar.save')) propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n } else if (text.indexOf(t('dialogBar.add')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.add')) {\n propsData.text = t('dialogBar.add2');\n propsData.otext = t('dialogBar.add');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData.text = t('dialogBar.confirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.affirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n // if (text === t('dialogBar.download')) x.children[0].text = t('dialogBar.download2');\n propsData.bizType = 'download';\n propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1) {\n propsData.bizType = 'delete';\n propsData.icon = 'el-icon-delete';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-wangongqueren';\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n }\n });\n return footer;\n };\n\n /**\n * @todo: footer render\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:34:41\n */\n const getFooter = () => {\n if (props.hasFooter)\n if (slots.footer?.())\n return (\n <div>\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div>\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n\n /**\n * @todo: mask\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:38:59\n */\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n class=\"v-modal gv-dialog-modal z-[9]\"\n tabindex=\"0\"></div>\n );\n return mask;\n };\n\n const getMaxHeight = () => {\n if (!props.height) dialogMaxHeight.value = document.documentElement.clientHeight - 230 + 'px';\n else if (props.height.indexOf('%') === -1) dialogMaxHeight.value = parseFloat(props.height) - 180 + 'px';\n else dialogMaxHeight.value = props.height; // 百分比方式\n };\n\n // @created\n // fixme: 解决嵌套弹窗问题 2022-08-08\n const pEl = instance?.parent?.parent?.vnode.el;\n if (pEl)\n try {\n const p = pEl.closest('.gv-drawer,.gv-dialog');\n if (p) sNest = true;\n } catch {\n // error\n }\n if (sNest) {\n myDialogClass = props.dialogClass ? 'gv-dialog is-nested ' + props.dialogClass : 'gv-dialog is-nested';\n sAppendToBody = true;\n modalAppendToBody.value = true;\n modalMask = true;\n } else modalMask = false;\n\n onBeforeUnmount(() => {\n window.removeEventListener('resize', getMaxHeight);\n });\n\n // mounted\n onMounted(() => {\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (dialogVisible) maskVisible.value = true;\n\n nextTick(() => {\n window.addEventListener('resize', getMaxHeight);\n // 计算高度\n getMaxHeight();\n });\n });\n\n // @render\n return () => (\n <div class=\"gv-dialog__popup\">\n <ElDialog\n ref={vref}\n // route={this.route}\n modelValue={dialogVisible}\n onUpdate:modelValue={handleVisible}\n appendToBody={sAppendToBody}\n modal-append-to-body={modalAppendToBody.value}\n close-on-click-modal={props.closeOnClickModal}\n close-on-press-escape={props.closeOnPressEscape}\n showClose={true}\n destroy-on-close={true}\n fullscreen={props.fullscreen}\n modal={modalMask}\n // before-close={this.handleBeforeClose}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n onOpened={handleOpened}\n class={myDialogClass}\n width={props.width}\n style={{ height: `${props.height}` }}>\n {{\n header: () => (\n <div class=\"gv-dialog__title\">\n <span>\n <GvIcon\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"\n />\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div\n class=\"gv-dialog__body__inner\"\n style={{ maxHeight: `${dialogMaxHeight.value} !important` }}>\n {slots.default?.()}\n </div>\n ),\n footer: () => <div class=\"dialog-footer\">{getFooter()}</div>,\n }}\n </ElDialog>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-dialog__popup {\n :deep(.el-modal-dialog) {\n position: absolute !important;\n &.is-nested {\n top: 100px;\n left: 14%;\n }\n .el-overlay-dialog {\n position: absolute !important;\n overflow: hidden;\n .el-dialog {\n max-height: 93.5% !important;\n margin-top: 25px !important;\n padding: 0px;\n\n .el-dialog__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-dialog__title {\n //font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n //font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-dialog__headerbtn {\n width: 16px;\n height: 25px;\n top: 2px;\n right: 12px;\n font-size: 20px;\n font-weight: bolder;\n line-height: normal;\n\n &:hover .el-dialog__close {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-dialog__close {\n font-size: 16px;\n font-weight: bolder;\n }\n }\n }\n\n .el-dialog__body {\n padding: 5px 5px 5px 15px;\n overflow: hidden;\n\n .gv-dialog__body__inner {\n padding-right: 15px;\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .el-dialog__footer {\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button i + span {\n margin-left: 5px;\n }\n\n padding: 5px 15px;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n }\n\n .gv-tabs {\n .gv-dialog {\n top: -10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDialog from './src/GvDialog.vue';\nconst GvDialogPlugin = {\n install(app: App): void {\n app.component(GvDialog.name ?? 'GvDialog', GvDialog);\n },\n};\nexport default GvDialogPlugin;\n\nexport { GvDialog };\n","<!--\n * @title: divider component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:24:57\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:03:45\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDivider } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { DividerDirection } from './types';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('divider');\n\n export default defineComponent({\n name: 'GvDivider',\n emits: ['setDividerShow'],\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n label: {\n type: String,\n required: true,\n default: '栏目',\n },\n position: {\n type: String,\n required: false,\n default: 'left',\n },\n direction: {\n type: String as PropType<DividerDirection>,\n required: false,\n default: 'horizontal',\n },\n target: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n\n setup(props, { emit }) {\n /**\n * @todo: click divider — toggle form visibility via parent isShow\n */\n const clickDivider = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n emit('setDividerShow', !props.visible);\n };\n\n return () => (\n <div\n class={prefixCls}\n onClick={(event) => clickDivider(event)}>\n <ElDivider\n content-position={props.position}\n direction={props.direction}>\n <span class=\"title\">{props.label}</span>\n </ElDivider>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-divider';\n .#{$prefixCls} {\n width: 100%;\n height: 20px;\n margin: 5px 0 8px 0;\n overflow: hidden;\n user-select: none;\n\n // 禁止选中文本\n &:hover {\n cursor: pointer;\n }\n :deep(.el-divider--horizontal) {\n margin: 8px 0;\n .el-divider__text {\n padding: 0 $modulePadding;\n &.is-left {\n left: -$moduleMargin;\n }\n .title {\n display: inline-block;\n height: 20px;\n //font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 20px;\n color: $textColor;\n\n &::before {\n display: inline-block;\n width: 5px;\n height: 100%;\n margin-right: 8px;\n vertical-align: middle;\n content: '';\n background-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDivider from './src/GvDivider.vue';\nconst GvDividerPlugin = {\n install(app: App): void {\n app.component(GvDivider.name ?? 'GvDivider', GvDivider);\n },\n};\nexport default GvDividerPlugin;\n\nexport { GvDivider };\n","<!--\n * @title: drawer component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:58:21\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-10 09:01:23\n * @version: 1.0.7\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDrawer } from 'element-plus';\n import { defineComponent, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('drawer');\n\n export default defineComponent({\n name: 'GvDrawer',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n direction: {\n type: String as PropType<'rtl' | 'ltr' | 'ttb' | 'btt'>,\n required: false,\n default: 'rtl',\n },\n size: {\n type: [String, Number],\n required: false,\n default: '95%', // 95%\n },\n paddingHeight: {\n type: [Number],\n required: false,\n default: 100, // 100\n },\n },\n emits: ['close', 'closed', 'open', 'opened', 'cancel', 'resize', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n const drawerVisible = ref(props.visible);\n const maskVisible = ref(false);\n const vref = 'gv-drawer';\n const drawerMaxHeight = ref(0);\n const show = ref(false);\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const sPaddingHeight = appStore.drawerPaddingHeight ? appStore.drawerPaddingHeight : props.paddingHeight;\n\n // @watch\n watch(\n () => props.visible,\n (newVal) => {\n // fixme: watch中跟踪visible,解决如将ht-drawer在一个vue组件中,如不设置,则第二次无法显示\n drawerVisible.value = newVal;\n if (drawerVisible.value)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n else maskVisible.value = false;\n },\n );\n\n // @method\n\n const handleOpen = () => {\n // this.maskVisible = true;\n emit('open');\n };\n const handleOpened = () => {\n // this.maskVisible = true;\n emit('opened');\n };\n\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleResize = (evt: MouseEvent, size: number) => {\n emit('resize', evt, size);\n };\n\n const handleCancel = (event: Event) => {\n drawerVisible.value = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n\n const handleVisible = (visible: boolean) => {\n drawerVisible.value = visible;\n };\n\n const handleClose = () => {\n drawerVisible.value = false;\n maskVisible.value = false;\n emit('update:visible', false);\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n // this.$emit('close', event);\n };\n\n /**\n * @todo: set footer button shortcut\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:25:50\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x) || '';\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.save')) {\n propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData['otext'] = t('dialogBar.confirm');\n propsData.text = t('dialogBar.confirm2');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n if (buttonIcon) propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n if (buttonIcon) propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.pay')) !== -1) {\n propsData.bizType = 'pay';\n if (buttonIcon) propsData.icon = 'gv-icon-yingshoukuan';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n if (buttonIcon) propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n if (buttonIcon) propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n if (buttonIcon) propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n if (buttonIcon) propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.publish')) !== -1) {\n propsData.bizType = 'publish';\n if (buttonIcon) propsData.icon = 'gv-icon-fabu';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n propsData.bizType = 'download';\n // if (text === t('dialogBar.download')) children[0].text = '下 载';\n if (buttonIcon) propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1 || text.indexOf(t('dialogBar.obsolete')) !== -1) {\n propsData.bizType = 'delete';\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n if (buttonQuick) {\n if (text === t('dialogBar.obsolete')) {\n propsData.text = t('dialogBar.obsolete2');\n propsData.otext = t('dialogBar.obsolete');\n }\n if (text === t('dialogBar.delete')) {\n propsData.text = t('dialogBar.delete2');\n propsData.otext = t('dialogBar.delete');\n }\n }\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n propsData['otext'] = t('dialogBar.submit');\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.settlement')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-eduguanli';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-wangongqueren';\n }\n });\n\n return footer;\n };\n\n /**\n * @todo: get footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:38:54\n */\n const getFooter = () => {\n let returnIcon: string | undefined = 'iconfont gv-icon-fanhui2';\n if (!buttonIcon) returnIcon = undefined;\n if (slots.footer?.())\n return (\n <div class=\"gv-drawer__footer__inner\">\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div class=\"gv-drawer__footer__inner\">\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n const getMaxHeight = () => {\n drawerMaxHeight.value = document.documentElement.clientHeight - 225;\n };\n\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n tabindex=\"0\"\n class=\"v-modal gv-dialog-drawer z-[9]\"></div>\n );\n return mask;\n };\n // @created\n\n // @mounted\n onMounted(() => {\n // 实现esc按键绑定\n // this.bindListerOnEsc();\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (drawerVisible.value) {\n show.value = true;\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n }\n getMaxHeight();\n nextTick(() => {});\n });\n // @render\n return () => (\n <div class=\"gv-drawer__popup\">\n <ElDrawer\n class={prefixCls}\n ref={vref}\n modelValue={drawerVisible.value}\n onUpdate:modelValue={handleVisible}\n direction={props.direction}\n appendToBody={false}\n modal-append-to-body={false}\n close-on-press-escape={true}\n showClose={true}\n close-on-click-modal={false}\n modal={false}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n onOpened={handleOpened}\n onResize={handleResize}\n size={props.size}\n style={{ height: `calc(100vh - ${sPaddingHeight}px)` }}>\n {{\n header: () => (\n <div class=\"gv-drawer__title\">\n <span>\n <GvIcon\n style={{ display: buttonIcon ? '' : 'none' }}\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"></GvIcon>\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div style={{ overflow: 'hidden auto', maxHeight: `${drawerMaxHeight.value}px !important` }}>\n <div class=\"gv-drawer__body__inner\">{slots.default?.()}</div>\n </div>\n ),\n footer: () => <div class=\"gv-drawer__footer\">{getFooter()}</div>,\n }}\n </ElDrawer>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-drawer__popup {\n :deep(.el-modal-drawer) {\n position: absolute !important;\n top: 1px !important;\n height: calc(100vh - 100px) !important;\n .el-drawer {\n // width: 95% !important;\n height: 98% !important;\n margin-top: 1px !important;\n\n .el-drawer__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n margin-bottom: 1px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-drawer__title {\n //font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n //font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-drawer__close-btn {\n top: 10px;\n right: 12px;\n line-height: normal;\n\n i {\n font-size: 16px;\n font-weight: bolder;\n }\n\n &:hover i {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-drawer__close {\n font-weight: bolder;\n }\n }\n }\n\n .el-drawer__body {\n padding: 5px 15px;\n overflow: hidden;\n\n .gv-drawer__body__inner {\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .gv-drawer__footer {\n .gv-drawer__footer__inner {\n float: right;\n padding: 5px;\n\n .el-button i + span {\n margin-left: 5px;\n }\n }\n\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button--default {\n margin-left: 8px;\n }\n\n width: 100%;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n .gv-tabs {\n .gv-drawer {\n top: 10px;\n height: 93% !important;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDrawer from './src/GvDrawer.vue';\nconst GvDrawerPlugin = {\n install(app: App): void {\n app.component(GvDrawer.name ?? 'GvDrawer', GvDrawer);\n },\n};\nexport default GvDrawerPlugin;\n\nexport { GvDrawer };\n","import { type VueTypeValidableDef, type VueTypesInterface, createTypes, toValidableType } from 'vue-types';\nimport type { CSSProperties } from 'vue';\n\ntype PropTypes = VueTypesInterface & {\n readonly style: VueTypeValidableDef<CSSProperties>;\n};\nconst newPropTypes = createTypes({\n func: undefined,\n bool: undefined,\n string: undefined,\n number: undefined,\n object: undefined,\n integer: undefined,\n}) as PropTypes;\n\nclass propTypes extends newPropTypes {\n static get style(): VueTypeValidableDef<CSSProperties> {\n return toValidableType('style', {\n type: [String, Object],\n });\n }\n}\n\nexport { propTypes };\n","/*\n * @title: pinyin-pro 汉字转拼音组件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-10 11:21:59\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-10-10 11:22:02\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pinyin } from 'pinyin-pro';\n/**\n * usePinyin 组合式函数\n * 提供常见的中文转拼音功能\n */\nexport function usePinyin() {\n /**\n * 中文转拼音(默认无音调、空格分隔)\n * @param text 中文字符串\n * @param withTone 是否带音调(默认 false)\n */\n const toPinyin = (text: string, withTone = false): string => {\n if (!text) return '';\n return pinyin(text, {\n toneType: withTone ? 'symbol' : 'none',\n type: 'string',\n multiple: false,\n });\n };\n\n /**\n * 获取拼音首字母\n * @param text 中文字符串\n */\n const getFirstLetter = (text: string): string => {\n if (!text) return '';\n return pinyin(text, {\n pattern: 'first',\n toneType: 'none',\n type: 'string',\n }).replace(/\\s+/g, '');\n };\n\n /**\n * 获取拼音数组(按字分隔)\n * @param text 中文字符串\n */\n const getPinyinArray = (text: string): string[] => {\n if (!text) return [];\n return pinyin(text, {\n toneType: 'none',\n type: 'array',\n });\n };\n\n return {\n toPinyin,\n getFirstLetter,\n getPinyinArray,\n };\n}\n","<!--\n * @title: expand menu list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-04 12:37:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:26\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { usePinyin } from '@@/hooks/web/usePinyin';\n import { isExternal, pathResolve, sleep } from '@@/utils';\n import { Search, Star, StarFilled } from '@element-plus/icons-vue';\n import { ElAutocomplete, ElIcon, ElTabPane, ElTabs } from 'element-plus';\n import { computed, onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n';\n import type { RouteType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu-list');\n\n defineOptions({\n name: 'GvMenuList', // 定义组件名称\n });\n const { t } = useI18n();\n const permStore = usePermsStore();\n const pinYin = usePinyin();\n const routes = computed(() => permStore.getServerRouters);\n\n const emit = defineEmits(['close']);\n\n const menuList = ref<RouteType[]>();\n const menuPath = ref('');\n\n const fMenusList = ref<AppRouteRecordRaw[]>([]);\n\n // ------ watch hook------\n // watchEffect();\n // // [routes, menusList],\n // // [\n // // (n, o) => {\n // // this.menusList = this.generateRoutes(this.routes.value);\n // // },\n // // (list) => {\n // // // 转换拼音\n // // if (this.supportPinyinSearch) this.addPinyinField(list);\n // // },\n // // ],\n\n // ------ methods hook ------\n /**\n * @todo: generate routes\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-15 10:46:56\n * @param {*} sidebarRoutes\n * @param {*} basePath\n * @param {*} prefixTitle\n * @param {*} prefixCode\n */\n\n const generateRouter = (serverRoutes: AppRouteRecordRaw[], basePath = '/', prefixTitle: string[] = [], prefixCode: string[] = []): RouteType[] => {\n let res: RouteType[] = [];\n for (const router of serverRoutes) {\n if (router.redirect === '/404') continue;\n if (router.meta?.hidden) continue;\n const data: RouteType = {\n path: pathResolve(basePath, router.path),\n title: [...(prefixTitle as string[])],\n pinyinTitle: pinYin.getFirstLetter([...(prefixTitle as string[])].join('')),\n code: [...prefixCode],\n };\n if (router.meta && router.meta.title) {\n const i18ntitle = router.meta.title;\n const code = router.meta.code || '';\n data.title = [...data.title, i18ntitle];\n data.pinyinTitle = pinYin.getFirstLetter(data.title.join(''));\n data.code = [...data.code, String(code)];\n if (router.redirect !== 'noredirect') res.push(data);\n else if (basePath === '/') fMenusList.value.push(router);\n }\n if (router.children) {\n const tempRoutes = generateRouter(router.children, data.path, data.title);\n if (tempRoutes.length >= 1) res = [...res, ...tempRoutes];\n }\n }\n return res;\n };\n\n const handleCloseDrawer = () => {\n emit('close');\n };\n\n /**\n * @todo: click menu item handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-03-09 10:56:00\n * @param {*} item\n */\n const handleSelect = (item: RouteType) => {\n // push({ path: item.path });\n // handleCloseDrawer();\n sleep(200).then(() => {\n menuPath.value = '';\n });\n };\n\n const handleSearch = (query: string, cb: any) => {\n let res: RouteType[] = [];\n if (query !== '')\n if (Array.isArray(menuList.value))\n res = menuList.value.filter((item) => {\n if (item.title.join('').indexOf(query) !== -1) return item;\n else if (item.pinyinTitle.indexOf(query.toLowerCase()) !== -1) return item;\n else if (item.path.indexOf(query) !== -1) return item;\n });\n else res = menuList.value ?? [];\n else res = menuList.value ?? [];\n cb(res);\n };\n\n /**\n * @todo: star click handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-11 10:20:33\n * @param {*} star\n * @param {*} path\n * @param {*} title\n * @param {*} menuItem\n */\n const starClickHandle = (star, path, title, menuItem) => {};\n\n // ------ mounted hook ------\n onMounted(() => {\n menuList.value = generateRouter(routes.value);\n // console.log('routes', permStore.getServerRouters);\n // console.log('menuList', menuList.value);\n });\n</script>\n<template>\n <div :class=\"prefixCls\">\n <!-- search -->\n <div class=\"search\">\n <div class=\"top\">\n <ElAutocomplete\n v-model=\"menuPath\"\n value-key=\"path\"\n :fetch-suggestions=\"handleSearch\"\n :placeholder=\"t('sideBar.menuSearch')\"\n @select=\"handleSelect\">\n <template #prefix>\n <ElIcon>\n <Search />\n </ElIcon>\n </template>\n <template v-slot=\"{ item }\">\n <span class=\"name\">{{ item.title.join(' > ') }}</span>\n </template>\n </ElAutocomplete>\n </div>\n </div>\n <!-- main -->\n <div class=\"main\">\n <ElTabs tab-position=\"right\">\n <ElTabPane\n v-for=\"item in fMenusList\"\n :key=\"item.name\"\n :label=\"item.meta?.title\"\n lazy>\n <div class=\"column-wrap\">\n <div\n v-for=\"sub in item.children\"\n :key=\"sub.name\"\n class=\"box\">\n <template v-if=\"!sub.children || sub.children.length === 0\">\n <ul class=\"leaf\">\n <li>\n <ElIcon @click.stop=\"starClickHandle(sub.meta?.star, sub.path, sub.meta?.title, sub)\">\n <component :is=\"sub.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}`\"\n @click=\"handleCloseDrawer\">\n {{ sub.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ sub.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n <template v-else>\n <h4>{{ sub.meta?.title }}</h4>\n <ul>\n <li\n v-for=\"x in sub.children\"\n :key=\"x.name\">\n <ElIcon @click.stop=\"starClickHandle(x.meta?.star, x.name, x.meta?.title, x)\">\n <component :is=\"x.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}/${x.path}`\"\n @click=\"handleCloseDrawer\">\n {{ x.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ x.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n </div>\n </div>\n </ElTabPane>\n </ElTabs>\n </div>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu-list';\n .#{$prefixCls} {\n position: absolute;\n width: 650px;\n height: 100%;\n left: 0px;\n background: #272b2c;\n &::after {\n top: 0;\n right: 0;\n width: 150px;\n height: 100%;\n content: '';\n background: #272b2c;\n }\n :deep(.search) {\n height: 100px;\n width: 500px;\n background: #313538;\n .top {\n padding: 30px 0 0 100px;\n i {\n color: var(--left-menu-text-color);\n }\n .el-autocomplete {\n width: 300px;\n border-bottom: 1px solid #626466;\n border-radius: 0;\n .el-input {\n .el-input__wrapper {\n background: var(--left-menu-expand-bg-color);\n box-shadow: none;\n padding-left: 30px;\n .el-input__inner {\n //font-size: $appTextSize;\n color: #fff;\n border: none;\n line-height: 40px;\n height: 40px;\n }\n }\n }\n }\n }\n }\n :deep(.main) {\n position: relative;\n height: calc(100% - 100px);\n .el-tabs {\n height: 100%;\n overflow-y: auto;\n &::-webkit-scrollbar {\n display: none;\n }\n .el-tabs__header {\n position: absolute;\n top: 0;\n right: 0;\n .el-tabs__nav-wrap {\n padding: 0;\n .el-tabs__nav-scroll {\n overflow-y: auto;\n .el-tabs__nav {\n padding-bottom: $modulePadding;\n }\n }\n .el-tabs__item {\n height: 30px;\n padding: 0 0 0 15px;\n //font-size: $textSize;\n line-height: 30px;\n color: $menuText;\n &.is-active {\n font-weight: 500;\n color: #fff;\n }\n }\n &.is-right {\n width: 151px;\n }\n &::after {\n display: none;\n }\n }\n }\n .el-tabs__content {\n background: #313538;\n margin-right: 150px;\n .el-tab-pane {\n padding-right: 20px;\n }\n .column-wrap {\n column-count: 2;\n column-gap: 0;\n .box {\n padding-bottom: 10px;\n padding-left: 30px;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n break-inside: avoid;\n h4 {\n margin-bottom: 12px;\n height: 32px;\n //font-size: $textSize;\n font-weight: 500;\n line-height: 32px;\n color: $menuText;\n border-bottom: 1px solid #626466;\n }\n ul {\n padding-left: 0;\n margin-top: 8px;\n list-style: none;\n &.leaf {\n margin-top: 18px;\n }\n li {\n line-height: 26px;\n i {\n //font-size: 14px;\n cursor: pointer;\n top: 2px;\n }\n .el-icon {\n color: $menuText;\n }\n a {\n padding-left: 3px;\n //font-size: $textSize;\n color: $menuText;\n transition: all 0.3s ease;\n &:hover {\n color: var(--menuActiveText, $menuActiveText);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n</style>\n","<!--\n * @title: Expand Menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-02 09:39:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:12\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { propTypes } from '@@/utils/gv.propTypes';\n import { ElDrawer } from 'element-plus';\n import { computed, ref } from 'vue';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import GvMenuList from './GvMenuList.vue';\n\n defineOptions({\n name: 'GvExpandMenu', // 定义组件名称\n });\n\n const props = defineProps({\n collapse: propTypes.bool.def(true),\n });\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu');\n\n const { t } = useBridgeI18n();\n\n // console.log('t', t('sideBar.menuNav'));\n const visible = ref(false);\n const sideWidth = computed(() => (props.collapse ? '54px' : '200px'));\n const expandHandle = () => {\n visible.value = !visible.value;\n };\n</script>\n<template>\n <div :class=\"prefixCls\">\n <div\n class=\"expand-menu-title\"\n :class=\"{ selected: visible ? true : false }\"\n @click.stop=\"expandHandle\">\n <i :class=\"['iconfont', 'gv-icon-wangzhandaohang']\"></i>\n <span\n v-if=\"!collapse\"\n class=\"text\"\n >{{ t('sideBar.menuNav') }}</span\n >\n </div>\n <ElDrawer\n v-model=\"visible\"\n :style=\"{ left: sideWidth, paddingLeft: sideWidth }\"\n class=\"sidebar-expand-drawer\"\n :with-header=\"false\"\n :append-to-body=\"true\"\n direction=\"ltr\"\n resizable\n :modal-class=\"!collapse ? 'sidebar-expand-menu-collapse' : 'sidebar-expand-menu-unCollapse'\"\n size=\"650\">\n <GvMenuList @close=\"visible = false\" />\n </ElDrawer>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu';\n .#{$prefixCls} {\n height: 40px;\n background-color: $menuBg;\n\n .expand-menu-title {\n width: 100%;\n padding-left: 14px;\n line-height: 48px;\n color: $menuText;\n cursor: pointer;\n\n &.selected,\n &:hover {\n color: var(--left-menu-text-active-color);\n background-color: $menuHover;\n }\n\n i {\n width: 24px;\n font-size: 20px;\n font-weight: 500;\n color: var(--left-menu-text-color);\n text-align: center;\n vertical-align: middle;\n }\n\n .text {\n display: inline-block;\n line-height: 48px;\n margin-left: 10px;\n //font-size: $textSize;\n color: var(--left-menu-text-color);\n vertical-align: middle;\n &:hover {\n color: var(--left-menu-text-active-color);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvExpandMenu from './src/GvExpandMenu.vue';\nconst GvExpandMenuPlugin = {\n install(app: App): void {\n app.component(GvExpandMenu.name ?? 'GvExpandMenu', GvExpandMenu);\n },\n};\nexport default GvExpandMenuPlugin;\n\nexport { GvExpandMenu };\n","<!--\n * @title: input component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:22:45\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { ElInput, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { BizType, InputType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input');\n\n export default defineComponent({\n name: 'GvInput',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n value: {\n type: [String, Number, undefined] as PropType<string | number | undefined>,\n default: '',\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n prefixIcon: {\n type: String,\n default: '',\n },\n suffixIcon: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n maxlength: {\n type: Number,\n default: 30,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n type: {\n type: String as PropType<InputType>,\n default: 'text',\n },\n rows: {\n type: Number,\n default: 2,\n },\n autosize: {\n type: [Boolean, Object] as PropType<boolean | Record<string, any>>,\n default: false,\n },\n bizType: {\n type: String as PropType<BizType>,\n default: 'tableedit',\n },\n },\n\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'clear', 'keydown'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref(props.value);\n\n const showWordLimit = ref(false);\n\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceholder = computed(() => props.placeholder || t('common.pleaseInput'));\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @watch\n watch(\n () => props.value,\n (newValue) => {\n inputValue.value = newValue;\n },\n );\n\n // @methods\n\n const renderPrefixIcon = (): JSX.Element | null => {\n if (!props.prefixIcon) return null;\n return <GvIcon iconName={props.prefixIcon} />;\n };\n\n const renderSuffixIcon = (): JSX.Element | null => {\n if (!props.suffixIcon) return null;\n return <GvIcon iconName={props.suffixIcon} />;\n };\n\n const getDisabled = computed(() => {\n if (typeof props.disabled === 'boolean') return props.disabled;\n if (typeof props.disabled === 'string') return props.disabled !== '';\n return false;\n });\n\n const handleInput = (val: string | number) => {\n inputValue.value = val;\n emit('update:modelValue', val);\n emit('input', val);\n };\n\n const handleBlur = (event: FocusEvent) => {\n showWordLimit.value = false;\n if (props.bizType === 'tableedit') emit('blur', event, inputValue.value, props.columnProp);\n else emit('blur', event, inputValue.value, props.vref);\n };\n\n const handleFocus = (event: FocusEvent) => {\n (event.target as HTMLInputElement).select();\n if (props.bizType === 'tableedit') emit('focus', event, inputValue.value, props.columnProp);\n else emit('focus', event, inputValue.value, props.vref);\n };\n\n const handleClear = (event: any) => {\n emit('clear', event);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n showWordLimit.value = true;\n emit('keydown', event);\n };\n\n // @render\n return () => {\n if (!props.visible) return null;\n return (\n <ElInput\n ref={props.vref}\n id={resolvedInputId.value}\n name={props.name}\n type={props.type}\n modelValue={inputValue.value}\n modelModifiers={{ number: true }}\n readonly={props.readonly}\n rows={props.rows}\n autosize={props.autosize}\n size={inputSize.value}\n showWordLimit={showWordLimit.value}\n maxlength={props.maxlength}\n placeholder={sPlaceholder.value}\n disabled={getDisabled.value}\n clearable={props.clearable}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClear={handleClear}\n onKeydown={handleKeyDown}\n class={prefixCls}\n style={{ display: props.visible ? '' : 'none' }}>\n {{\n prefix: () => renderPrefixIcon(),\n suffix: () => renderSuffixIcon(),\n }}\n </ElInput>\n );\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-input';\n .#{$prefixCls} {\n display: flex;\n margin: 0;\n align-items: center;\n\n &.is-disabled {\n :deep(.el-input__inner) {\n color: $textColor;\n }\n }\n\n :deep(.el-input__inner) {\n &:focus {\n // border-color: var(--primaryColorHover, $primaryColorHover);\n }\n height: 30px;\n // padding-left: 10px;\n line-height: 30px;\n //font-size: $textSizeSecondary;\n }\n\n &.el-input--small {\n :deep(.el-input__inner) {\n height: 26px;\n line-height: 26px;\n }\n }\n\n :deep(.el-input__suffix .el-input__suffix-inner) {\n .el-input__count {\n font-size: 10px;\n padding-left: 5px;\n .el-input__count-inner {\n padding: 0;\n }\n }\n .el-input__icon {\n padding: 0;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInput from './src/GvInput.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvInput.name ?? 'GvInput', GvInput);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvInput };\n","<!--\n * @title: input number component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 11:02:44\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useI18n } from '@/hook/web/useI18n';\n import { useStyle } from '@/hook/web/useStyle';\n import { ElInputNumber, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input-number');\n\n export default defineComponent({\n name: 'GvInputNumber',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n value: {\n type: Number,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n step: {\n type: Number,\n default: 1,\n },\n stepStrictly: {\n type: Boolean,\n default: false,\n },\n precision: {\n type: Number,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n position: {\n type: String,\n default: undefined,\n },\n },\n // @emit\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useI18n();\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n const handleInput = (val) => {\n emit('update:modelValue', val, props.vref);\n emit('input', val, props.vref);\n };\n const handleBlur = ($event: FocusEvent) => {\n if (props.bizType === 'tableedit') emit('blur', $event, inputValue.value, props.columnProp);\n else emit('blur', $event, inputValue.value, props.vref);\n };\n\n const handleFocus = ($event: FocusEvent) => {\n if ($event.target) ($event.target as HTMLInputElement).select();\n\n if (props.bizType === 'tableedit') emit('focus', $event, inputValue.value, props.columnProp);\n else emit('focus', $event, inputValue.value, props.vref);\n };\n // const handleKeyDown = ($event: KeyboardEvent) => {\n // emit('keydown', $event);\n // };\n const handleChange = (currentValue: number, oldValue: number) => {\n emit('change', currentValue, oldValue);\n };\n\n // @render\n // 注意方法的传参必须使用箭头函数方式,避免每次 render 的时候都会自动执行一次方法\n return (\n // nativeOnkeydown={(e) => this.inputKeydown(e)}\n <ElInputNumber\n class={prefixCls}\n ref={props.vref || 'gv-input-number'}\n id={resolvedInputId.value}\n name={props.name}\n v-model={inputValue.value}\n style={{ display: props.visible ? '' : 'none' }}\n size={inputSize.value}\n placeholder={sPlaceHolder.value}\n disabled={getDisabled.value}\n controls-position={props.position}\n step={props.step}\n step-strictly={props.stepStrictly}\n precision={props.precision}\n min={props.min}\n max={props.max}\n // onKeydown={handleKeyDown}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onChange={handleChange}\n // { ...this.$attrs }\n // { ...this.$listeners }\n ></ElInputNumber>\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-input-number';\n .#{$prefixCls} {\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n height: 28px;\n line-height: 28px;\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-input-number__increase):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),\n :deep(.el-input-number__decrease):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n &.is-controls-right {\n // line-height: 34px; // 需要定义line-height,否则高度串行\n :deep(.el-input-number__decrease) {\n bottom: 1px;\n\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__increase) {\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n top: 1px;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInputNumber from './src/GvInputNumber.vue';\nconst GvInputNumberPlugin = {\n install(app: App): void {\n app.component(GvInputNumber.name ?? 'GvInputNumber', GvInputNumber);\n },\n};\nexport default GvInputNumberPlugin;\n\nexport { GvInputNumber };\n","<!--\n * @title: select component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:36:14\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:53:12\n * @version: 1.0.7\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useNotify } from '@/hook/web/useNotify';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { ElOption, ElSelect, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('select');\n export default defineComponent({\n name: 'GvSelect',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n value: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n showLabel: {\n type: [String, Array],\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined, // 请选择\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n filterable: {\n type: Boolean,\n default: true,\n },\n dicType: {\n type: String,\n required: true,\n },\n filtercode: {\n // 过滤字典码\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n dicRemote: {\n type: Function,\n default: () => {},\n },\n cb: {\n type: Function,\n default: () => {},\n },\n clear: {\n type: Function,\n default: () => {},\n },\n isreload: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n editRow: {\n type: Object,\n default: () => {},\n },\n collapseTags: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n },\n // define emit\n emits: ['update:modelValue', 'focus', 'clear', 'change'],\n setup(props, { emit }) {\n const userStore = useUserStore();\n const appStore = useAppStore();\n const { alert } = useNotify();\n const { t, locale } = useI18n();\n\n // @data\n const lang = locale.value;\n let dicIcon = 'iconfont gv-icon-shujuzidian3';\n const remote = ref(false);\n const loading = ref(false);\n const loadingText = ref('loading...');\n const sPlaceholder = computed(() => props.placeholder || t('common.all'));\n const externalValue = computed(() => (props.modelValue !== undefined ? props.modelValue : props.value));\n const inputValue = ref(externalValue.value);\n const inputShowLabel = ref(props.showLabel);\n const inputFilterable = ref(props.filterable);\n // let inputFilterable = props.filterable,\n type SelectModel = string | unknown[] | Record<string, unknown> | undefined;\n const selectValue = ref<SelectModel>(undefined);\n const options = ref<DicItem[]>([]);\n const originOptions = ref<DicItem[]>([]);\n const className = ref(`${prefixCls}`);\n const globalSize = useGlobalConfig('size');\n\n // 表选字典 t# 需在 setup 阶段识别,不能等 mounted\n const dicSrc = props.dicType?.toLowerCase() ?? '';\n if (dicSrc.startsWith('e#')) dicIcon = 'iconfont gv-icon-meiju';\n else if (dicSrc.startsWith('t#')) {\n dicIcon = 'iconfont gv-icon-24gl-table';\n remote.value = true;\n className.value = 'gv-select__table';\n }\n if (props.bizType === 'tableedit') className.value += ' tableedit';\n\n const valueCache = new Map<string, { value: string; label: string; row?: Record<string, unknown> }>();\n\n // @computed\n const selectSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @method\n\n const isEmptyLabel = (label: unknown) => label == null || label === '';\n\n const getDictItemLabel = (item: DicItem): string => {\n switch (locale.value) {\n case 'en':\n return item.e ?? item.t ?? '';\n case 'l1':\n return item.l1 ?? item.t ?? '';\n case 'l2':\n return item.l2 ?? item.t ?? '';\n default:\n return item.t ?? '';\n }\n };\n\n const formatOptionLabel = (label: string) => {\n if (!label) return '';\n return remote.value && label.includes('[') ? label.split('[')[0] : label;\n };\n\n const findLabelInOptions = (code: string, opts: DicItem[]) => {\n const item = opts.find((x) => String(x.c) === String(code));\n if (!item) return '';\n return formatOptionLabel(getDictItemLabel(item));\n };\n\n const getOptionValue = (code: string, label: string, row?: Record<string, unknown>) => {\n const key = String(code);\n const text = String(label || key);\n const cached = valueCache.get(key);\n if (cached && cached.label === text) {\n if (row) cached.row = row;\n return cached;\n }\n const obj = row ? { value: key, label: text, row } : { value: key, label: text };\n valueCache.set(key, obj);\n return obj;\n };\n\n const getSelectCode = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const code = o.value ?? o.c ?? o.code;\n return code == null || code === '' ? '' : String(code).trim();\n }\n return String(v).trim();\n };\n\n const getSelectLabel = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const label = o.label ?? o.v;\n return label == null || label === '' ? '' : String(label).trim();\n }\n return String(v).trim();\n };\n\n const isEmptySelectValue = (raw: unknown) => {\n if (raw == null || raw === '') return true;\n if (Array.isArray(raw)) {\n if (raw.length === 0) return true;\n return raw.every((item) => {\n if (item == null || item === '') return true;\n return !getSelectCode(item) && isEmptyLabel(getSelectLabel(item));\n });\n }\n if (typeof raw === 'object') return !getSelectCode(raw) && isEmptyLabel(getSelectLabel(raw));\n return false;\n };\n\n const syncEmptyToParent = () => {\n if (externalValue.value === '') return;\n emit('update:modelValue', '');\n };\n\n const elSelectModel = computed<SelectModel>(() => (isEmptySelectValue(selectValue.value) ? undefined : selectValue.value));\n\n /**\n * @todo: 远程搜索、聚焦、清空后保留当前选中项\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-04 10:52:44\n * @param {*} _opts\n */\n const mergeOptionsWithSelected = (_opts: DicItem[]) => {\n let merged = _opts ?? [];\n const append = (code: string, label: string) => {\n if (!code || merged.some((x) => x.c + '' === code)) return;\n merged = [{ c: code, t: label || code, s: '' } as DicItem, ...merged];\n };\n const sv = selectValue.value;\n if (Array.isArray(sv)) sv.forEach((item) => append(getSelectCode(item), getSelectLabel(item) || getSelectCode(item)));\n else if (sv && !isEmptySelectValue(sv)) append(getSelectCode(sv), getSelectLabel(sv) || getSelectCode(sv));\n return merged;\n };\n\n const pushDefaultOption = (op: DicItem) => {\n options.value.push(op);\n if (remote.value) originOptions.value.push({ ...op });\n };\n\n /**\n * @todo: load dict list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:31:44\n */\n const getSelectOptions = async () => {\n if (!props.dicType) return null;\n else {\n let ret: DicItem[] = [];\n const src = props.dicType.toLowerCase();\n if (src.startsWith('e#')) {\n // const pinyin = await require('js-pinyin');\n // 生成枚举类型字典\n const arr = src.split('#')[1].split(':');\n arr.forEach((x) => {\n const xx: DicItem = {\n c: '',\n t: '',\n s: '',\n };\n const arr2 = x.split('=');\n xx['c'] = arr2[0];\n xx['t'] = arr2[1];\n xx['s'] = '';\n ret.push(xx);\n });\n return ret;\n } else {\n const dictCache = userStore.dictCache?.[src];\n if (props.filtercode === undefined && dictCache) ret = dictCache;\n else if (props.dicType === 'xzqh') {\n // 生成字典列表\n const dict = appStore.getDictDivision;\n if (dict) {\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n ret = dict;\n }\n } else {\n const dict = appStore.getDict[src];\n\n if (dict) {\n // fixme: 解决字典缓存不能缓存多个问题 2022-04-13\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n\n ret = dict;\n }\n }\n\n // 设置是否可搜索\n // this.setFilterable(ret);\n // 增加字典码过滤\n let opts = ret;\n if (props.filtercode) {\n const reg = new RegExp(props.filtercode, 'i');\n opts = ret.filter((x) => reg.test(x.c));\n }\n return opts;\n }\n }\n };\n /**\n * @todo: 设置字典项目超过5个可搜索-- 弃用\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-10 09:42:19\n * @param {*} dict\n */\n // setFilterable(dict) {\n // if (dict && dict.length > 5)\n // inputFilterable.value = true;\n // },\n // 回调参数:(value: string | number)\n // 字典自定义过滤方法\n const filterMethod = (value) => {\n if (value)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts.filter((item) => {\n // console.log(item);\n if (\n item.c.indexOf(value) !== -1 || // value检索\n item.t?.indexOf(value) !== -1 || // label检索\n item.s.indexOf(value.toLowerCase()) !== -1 // 简拼检索\n )\n return true;\n });\n });\n else\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n };\n /**\n * @todo: handle clear event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:27\n */\n const handleClear = () => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n else options.value = mergeOptionsWithSelected(originOptions.value);\n\n props.clear(selectValue.value, props.vref, props.dicType);\n emit('clear');\n };\n /**\n * @todo: remote dict search method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:20:03\n * @param {*} query\n */\n const initialRemoteLoaded = ref(false);\n let pendingRemoteQuery: string | null = null;\n let pendingRemotePromise: Promise<void> | null = null;\n let remoteRequestSeq = 0;\n\n const filterOriginOptions = (query: string) =>\n originOptions.value.filter((x) => {\n if (x.t) {\n const f = x.t.split(']');\n if (f[0].indexOf(query) !== -1) return true;\n }\n if (x.c && x.c.indexOf(query) !== -1) return true;\n return false;\n });\n\n const remoteDictSearch = async (query = ''): Promise<void> => {\n if (pendingRemotePromise && pendingRemoteQuery === query) return pendingRemotePromise;\n\n const requestSeq = ++remoteRequestSeq;\n pendingRemoteQuery = query;\n\n pendingRemotePromise = (async () => {\n loading.value = true;\n try {\n const sDicType = props.dicType.substring(2);\n const { datas } = await props.dicRemote(sDicType, query, props.editRow);\n if (requestSeq !== remoteRequestSeq) return;\n\n const ops: DicItem[] = [];\n try {\n JSON.parse(datas).forEach((x: any) => {\n ops.push({ c: x.c, t: x.t, s: '' } as DicItem);\n });\n } catch (e) {\n console.log(e);\n }\n\n options.value = mergeOptionsWithSelected(ops);\n originOptions.value = [...options.value];\n initialRemoteLoaded.value = true;\n } finally {\n if (requestSeq === remoteRequestSeq) {\n loading.value = false;\n loadingText.value = options.value.length === 0 ? t('common.noData') : t('common.loading');\n }\n if (pendingRemoteQuery === query) {\n pendingRemoteQuery = null;\n pendingRemotePromise = null;\n }\n }\n })();\n\n return pendingRemotePromise;\n };\n /**\n * @todo: table dict remote load method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:11:51\n */\n const remoteMethod = async (query = ''): Promise<void> => {\n const q = String(query ?? '');\n\n if (q && originOptions.value.length > 0 && props.isreload === false) {\n const filtered = filterOriginOptions(q);\n if (filtered.length > 0) {\n options.value = mergeOptionsWithSelected(filtered);\n loading.value = false;\n return;\n }\n }\n\n const needFetch = q !== '' || props.isreload || !initialRemoteLoaded.value || originOptions.value.length === 0;\n if (!needFetch) {\n options.value = mergeOptionsWithSelected(originOptions.value);\n loading.value = false;\n return;\n }\n\n await remoteDictSearch(q);\n };\n\n const ensureDefaultOption = (code: string, text: string) => {\n if (!code) return;\n const existed = options.value.find((x) => String(x.c) === String(code));\n if (existed) {\n if (text && existed.t !== text) existed.t = text;\n return;\n }\n pushDefaultOption({ c: code, t: text || code, s: '' } as DicItem);\n };\n\n const resolveDisplayLabel = async (code: string, hint?: string): Promise<string> => {\n if (hint && hint !== code) return hint;\n const localOpts = (await getSelectOptions()) ?? [];\n let label = findLabelInOptions(code, localOpts);\n if (label) return label;\n\n label = findLabelInOptions(code, options.value);\n if (label) return label;\n\n if (remote.value && code) {\n // await remoteDictSearch(code);\n // label = findLabelInOptions(code, options.value);\n // if (label) return label;\n // await remoteDictSearch('');\n // label = findLabelInOptions(code, options.value);\n }\n\n return label || code;\n };\n\n const applySelectValue = async (raw: unknown) => {\n if (isEmptySelectValue(raw)) {\n inputValue.value = undefined as typeof inputValue.value;\n selectValue.value = undefined;\n syncEmptyToParent();\n return;\n }\n inputValue.value = raw as typeof inputValue.value;\n\n if (Array.isArray(raw)) {\n const resolved: ReturnType<typeof getOptionValue>[] = [];\n for (let index = 0; index < raw.length; index++) {\n const item = raw[index];\n if (item === '') continue;\n const code = getSelectCode(item);\n let hint = getSelectLabel(item);\n if (isEmptyLabel(hint) || hint === code) {\n const showLbl = Array.isArray(props.showLabel) ? props.showLabel[index] : undefined;\n if (showLbl && showLbl !== code) hint = String(showLbl);\n }\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof item === 'object' && item !== null ? ((item as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n resolved.push(getOptionValue(code, text, row));\n ensureDefaultOption(code, text);\n }\n selectValue.value = resolved;\n return;\n }\n\n const code = getSelectCode(raw);\n let hint = '';\n if (typeof raw === 'object' && raw !== null) {\n const o = raw as Record<string, unknown>;\n hint = String(o.label ?? o.v ?? '');\n } else if (typeof props.showLabel === 'string') hint = props.showLabel;\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof raw === 'object' && raw !== null ? ((raw as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n selectValue.value = getOptionValue(code, text, row);\n ensureDefaultOption(code, text);\n };\n\n watch(\n externalValue,\n (newValue) => {\n void applySelectValue(newValue);\n },\n { deep: true, immediate: true },\n );\n\n watch(\n () => props.showLabel,\n (newVal) => {\n inputShowLabel.value = newVal;\n if (!isEmptySelectValue(inputValue.value)) void applySelectValue(externalValue.value ?? inputValue.value);\n },\n );\n\n /**\n * @todo: handle focus event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:35\n * @param {*} event\n */\n const handleFocus = (event: FocusEvent) => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n if (remote.value === false)\n if (_opts === undefined || _opts === null || _opts.length === 0) {\n alert('The dict value does not exist', 'warning');\n return false;\n }\n options.value = _opts;\n });\n emit('focus', event);\n };\n\n /**\n * @todo: handle visible change event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:25:38\n * @param {*} val\n */\n const handleVisibleChange = () => {\n // console.log(val);\n };\n\n const handleBlur = () => {\n // // add: 解决无法重新加载问题 2022-04-10\n // if (this.remote === false)\n // this.getSelectOptions().then((_opts) => {\n // this.options = _opts;\n // });\n // else\n // this.options = this.originOptions;\n };\n\n /**\n * @todo: render select option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:37:58\n * @param {*} x\n */\n const renderSelectOption = (x: DicItem) => {\n let t = x.t;\n switch (lang) {\n case 'zh-CN':\n t = x.t;\n break;\n case 'en':\n t = x.e;\n break;\n case 'l1':\n t = x.l1;\n break;\n case 'l2':\n t = x.l2;\n break;\n default:\n t = x.t;\n break;\n }\n if (!t) t = x.t;\n return (\n <ElOption\n key={x.c + ''}\n label={t}\n value={getOptionValue(x.c + '', t ?? '')}>\n <span class=\"gv-select__option--label\">{t}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n </ElOption>\n );\n };\n\n /**\n * @todo: render table option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:44:34\n * @param {*} x\n */\n const renderTableOption = (x: DicItem) => {\n const t = x.t;\n let val = t;\n const columnTexts: string[] = [];\n const row: Record<string, string> = {};\n let multiColumn = false;\n if (t) {\n if (t.indexOf('[') !== -1) {\n // 多列显示\n multiColumn = true;\n const v1 = t.split('[');\n val = v1[0];\n let mm = v1[1];\n mm = mm.split(']')[0];\n const m2 = mm.split(',');\n for (let i = 0; i < m2.length; i++) {\n const m3 = m2[i];\n const m4 = m3.split(':');\n row[m4[0]] = m4[1];\n columnTexts.push(m4[1] === 'null' ? ' -- ' : m4[1]);\n }\n }\n if (t.indexOf('{') !== -1) {\n // 隐藏列\n const vv1 = t.split('{');\n if (multiColumn === false) val = vv1[0];\n let mmm = vv1[1];\n mmm = mmm.split('}')[0];\n const mm2 = mmm.split(',');\n for (let i = 0; i < mm2.length; i++) {\n const mm3 = mm2[i];\n const mm4 = mm3.split(':');\n row[mm4[0]] = mm4[1];\n }\n }\n }\n let key = x.c + '';\n if (props.multiple === true) key = x.val === undefined ? x.c + '' : String(x.val);\n return (\n <ElOption\n key={key}\n label={val}\n value={getOptionValue(x.c + '', val ?? '', row)}>\n <span class=\"gv-select__option--label\">{val}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n {columnTexts.map((text, index) => (\n <span\n key={index}\n class=\"gv-select__option--column\">\n {text}\n </span>\n ))}\n </ElOption>\n );\n };\n\n /**\n * @todo: selected call back\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:27:07\n * @param {*} val\n */\n const handleChange = async (val: any) => {\n if (isEmptySelectValue(val)) return;\n let labels: string = '';\n const labelArr: string[] = [];\n if (props.multiple === true)\n options.value.forEach((x) => {\n if (Array.isArray(val) && val.some((ele) => ele === x.c)) labelArr.push(x.t ?? '');\n });\n else if (typeof val === 'object') labels = val.label ?? '';\n else {\n const opArr = options.value.filter((x) => {\n const v = val + '';\n return x.c + '' === v;\n });\n labels = opArr[0]?.t ?? '';\n if (labels) labels = labels.split('[')[0];\n }\n if (props.bizType === 'tableedit')\n if (props.multiple === true) {\n emit('change', val, labelArr, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labelArr, props.editRow);\n } else {\n emit('change', val, labels, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labels, props.editRow);\n }\n else if (props.multiple === true) {\n emit('change', val, labelArr);\n await props.cb(val, props.vref, props.dicType);\n } else {\n emit('change', val, labels);\n await props.cb(val, props.vref, props.dicType);\n }\n };\n /**\n * @todo: handle update modelValue\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:29:17\n * @param {*} value\n */\n const handleUpdate = (value: any): void => {\n if (isEmptySelectValue(value)) {\n inputValue.value = undefined as typeof inputValue.value;\n selectValue.value = undefined;\n emit('update:modelValue', '');\n return;\n }\n inputValue.value = value;\n selectValue.value = value;\n emit('update:modelValue', value);\n };\n\n if (props.dicType === undefined || props.dicType === null) alert(`[ ${props.label} ] - The dicType needs to be set`, 'warning');\n\n // @render\n return () => {\n const render =\n remote.value === false ? (\n <ElSelect\n ref=\"gv-select\"\n id={resolvedInputId.value}\n name={props.name}\n modelValue={elSelectModel.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder.value}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n filterable={inputFilterable.value}\n filter-method={filterMethod}\n default-first-option={true}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onVisible-change={handleVisibleChange}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderSelectOption(x)),\n }}\n </ElSelect>\n ) : (\n <ElSelect\n ref=\"gv-select\"\n id={resolvedInputId.value}\n name={props.name}\n modelValue={elSelectModel.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder.value}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n default-first-option={true}\n filterable={inputFilterable.value}\n remote={true}\n remote-method={remoteMethod}\n debounce={300}\n loading={loading.value}\n loading-text={loadingText.value}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderTableOption(x)),\n }}\n </ElSelect>\n );\n return render;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-select';\n .#{$prefixCls} {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n //font-size: $appTextSize;\n }\n }\n\n .el-select__placeholder {\n //font-size: $appTextSize;\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n .el-select__input {\n padding-right: 5px !important;\n //font-size: $appTextSize;\n }\n\n .el-select__suffix {\n width: 0;\n }\n }\n }\n }\n\n .#{$gvNamespace}-select__table {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n //font-size: $appTextSize;\n }\n }\n .el-select__selection {\n //font-size: $appTextSize;\n }\n\n &.is-focus .el-select__input {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSelect from './src/GvSelect.vue';\n// Define the install method on the GvButton component\nconst GvSelectPlugin = {\n install(app: App): void {\n app.component(GvSelect.name ?? 'GvSelect', GvSelect);\n },\n};\nexport default GvSelectPlugin;\n\nexport { GvSelect };\n","<!--\n * @title: switch component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 13:26:26\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 09:55:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElSwitch } from 'element-plus';\n import { defineComponent, ref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('switch');\n export default defineComponent({\n name: 'GvSwitch',\n props: {\n value: {\n type: [Boolean, Number, String] as PropType<boolean | number | string>,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n columnKey: {\n type: String,\n required: false,\n default: undefined,\n },\n target: {\n type: [Number, String] as PropType<number | string>,\n require: false,\n default: '100201',\n },\n },\n\n // emit\n emits: ['change'],\n setup(props, { emit }) {\n // @data\n const val = ref(props.value);\n const switchType = ref(true);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n val.value = newVal;\n switchType.value = val.value === props.target;\n },\n );\n watch(\n () => switchType.value,\n (newVal) => {\n val.value === newVal;\n },\n );\n\n // @methods\n const handleChange = (newStatus) => {\n emit('change', newStatus, val.value);\n };\n\n // @created\n switchType.value = val.value === props.target;\n\n // @render\n return () => (\n <ElSwitch\n ref=\"gv-switch\"\n v-model={switchType.value}\n key={props.columnKey}\n disabled={props.disabled}\n // active-color='#13ce66'\n // inactive-color='#ff4949'\n onChange={handleChange}\n class={prefixCls}\n />\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-switch';\n .#{$prefixCls} {\n &.is-checked {\n :deep(.el-switch__core) {\n background-color: #13ce66;\n border-color: #13ce66;\n }\n }\n\n :deep(.el-switch__core) {\n background-color: #b3aaaa;\n border-color: #b3aaaa;\n //background-color:#ff4949;\n //border-color:#ff4949;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSwitch from './src/GvSwitch.vue';\n// Define the install method on the GvButton component\nconst GvSwitchPlugin = {\n install(app: App): void {\n app.component(GvSwitch.name ?? 'GvSwitch', GvSwitch);\n },\n};\nexport default GvSwitchPlugin;\n\nexport { GvSwitch };\n","<!--\n * @title: time picker\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:18:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-09 13:47:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElTimePicker, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TTimePickerSize, TTimePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('timepicker');\n\n export default defineComponent({\n name: 'GvTimePicker',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, Array, String] as PropType<TTimePickerType>,\n default: undefined,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<TTimePickerSize>,\n default: 'default',\n },\n isRange: {\n type: Boolean,\n default: false,\n },\n disabledHours: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledMinutes: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledSeconds: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n rangeSeparator: {\n type: String,\n default: '-',\n },\n format: {\n type: String,\n default: 'HH:mm',\n },\n valueFormat: {\n type: String,\n default: 'HH:mm',\n },\n placeholder: {\n type: String,\n default: '00:00',\n },\n startPlaceholder: {\n type: String,\n default: '',\n },\n endPlaceholder: {\n type: String,\n default: '',\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n },\n\n emits: ['update:modelValue', 'change', 'blur', 'focus'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref<TTimePickerType>(props.modelValue);\n const timepickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n /**\n *@todo: 更新v-model值\n *@author: bugcao\n *@date: 2026-05-07 15:45:52\n *@version: v0.0.1\n */\n const handleUpdate = (value: TTimePickerType) => {\n inputValue.value = value;\n emit('update:modelValue', value);\n };\n /**\n *@todo: 合并禁用小时\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledHours = () => props.disabledHours;\n /**\n *@todo: 合并禁用分钟\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledMinutes = () => props.disabledMinutes;\n /**\n *@todo: 合并禁用秒\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledSeconds = () => props.disabledSeconds;\n /**\n *@todo: 更新change事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:09\n *@version: v0.0.1\n */\n const handleChange = (value: TTimePickerType) => {\n emit('change', value);\n };\n /**\n *@todo: 更新blur事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleBlur = (e: FocusEvent) => {\n emit('blur', e);\n };\n /**\n *@todo: 更新focus事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleFocus = (e: FocusEvent) => {\n emit('focus', e);\n };\n\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @render\n return () => (\n <div class={prefixCls}>\n <ElTimePicker\n ref={props.vref || 'gv-timepicker'}\n id={resolvedInputId.value}\n name={props.name}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleUpdate}\n readonly={props.readonly}\n disabled={props.disabled}\n editable={props.editable}\n clearable={props.clearable}\n is-range={props.isRange}\n range-separator={props.rangeSeparator}\n size={timepickerSize.value}\n placeholder={props.placeholder || t('common.selectTime')}\n start-placeholder={props.startPlaceholder || t('common.startTime')}\n end-placeholder={props.endPlaceholder || t('common.endTime')}\n format={props.format}\n value-format={props.valueFormat}\n disabled-hours={mergedDisabledHours}\n disabled-minutes={mergedDisabledMinutes}\n disabled-seconds={mergedDisabledSeconds}\n {...({\n onChange: handleChange,\n onBlur: handleBlur,\n onFocus: handleFocus,\n } as any)}\n />\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-timepicker';\n .#{$prefixCls} {\n width: 100%;\n vertical-align: middle;\n :deep(.el-icon-time) {\n margin-left: 1px;\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__wrapper) {\n &:is(.is-focus) {\n box-shadow: 0 0 0 1px var(--primaryColorHover, $primaryColorHover) inset;\n }\n }\n :deep(.el-input__inner) {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range__close-icon) {\n width: 20px;\n }\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTimePicker from './src/GvTimePicker.vue';\n\nconst GvTimePickerPlugin = {\n install(app: App): void {\n app.component(GvTimePicker.name ?? 'GvTimePicker', GvTimePicker);\n },\n};\nexport default GvTimePickerPlugin;\n\nexport { GvTimePicker };\n","/*\n * @title: info message component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:10:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:01:59\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nconst infoMsg = {\n carNo: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '车牌号格式错误';\n else info = 'car number format error.';\n return info;\n },\n double: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入浮点数.';\n else info = 'please enter Double.';\n return info;\n },\n decimal: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '小数点位数不能超过: ' + len + ' 位';\n else info = 'Number of decimal places can not be more than:' + len + '.';\n return info;\n },\n idCard: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '身份证格式不正确';\n else info = 'id card format is not correct.';\n return info;\n },\n maxLen: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能超过 ' + Math.floor(len / 2) + '个汉字或 ' + len + ' 个字符';\n else info = 'Can not exceed ' + len + ' character.';\n return info;\n },\n money: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '非0开头的数字 小数最多两位.';\n else info = \"Only input Numbers, 0 can't start, the decimal two at the most.\";\n return info;\n },\n moneyMax: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '整数位最多只能是: ' + len + ' 位';\n else info = 'integer digits can only be at most: ' + len;\n return info;\n },\n letter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入字母以外的字符';\n else info = \"Can't input letters outside of the characters.\";\n return info;\n },\n number: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入正整数.';\n else info = 'Only enter a positive integer.';\n return info;\n },\n number0: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入不能以0开头的正整数.';\n else info = 'Only enter a non-zero positive integer, and cannot begin with zero.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n numberLetter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母以外的字符.';\n else info = 'Can not input Numbers, letters characters.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n name: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母、-、_和中文以外的字符.';\n else info = 'Can not enter Numbers, letters, -, _ and Chinese characters.';\n return info;\n },\n phone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '电话号码格式不正确.';\n else info = 'Phone format is not correct.';\n return info;\n },\n email: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '邮件格式不正确.';\n else info = 'E-mail format is not correct.';\n return info;\n },\n telephone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的固话(格式:区号+号码,如010-1234567)';\n else info = 'Telephone format is not correct.';\n return info;\n },\n ip: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的IP地址';\n else info = 'IpAddress format is not correct.';\n return info;\n },\n url: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的url地址';\n else info = 'Url format is not correct.';\n return info;\n },\n phoneTel: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的电话号码或者固话号码';\n else info = 'phone & tel format is not correct.';\n return info;\n },\n vin: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入后8位或17位(字母大写)';\n else info = 'must be 8 or 17 letters and Numbers.';\n return info;\n },\n};\nexport default infoMsg;\n","/*\n * @title: validate rules component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:09:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 20:32:12\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n/** ------------------- 验证规则 ------------------------\n * isAny: 默认规则,无校验\n * isAdmin: 验证是否是admin用户\n * isUrl: 验证url格式\n * isLowercase: 验证是否都是小写\n * isUppercase: 验证是否都是大写\n * isLetter: 验证是否都是字母( 不包括标点符号)\n * isEmail: 验证是否是email\n * isPhone: 验证电话号码\n * isIp: 验证是否是ip地址\n * isPhoneTel: 验证是否是手机号或者固定电话号\n * isTelephone: 验证是否是固定电话\n * isIdcard: 验证身份证号\n * isMoney:验证金额格式\n * isBigMoney: 验证金额格式(千位符格式)\n * isNumber: 验证是否是整数数字\n * isNumberLetter: 验证是否是数字和字母\n * isDouble: 验证浮点数格式\n * isName: 验证是否是名称格式\n * isVin: 验证vin码格式\n * isCarno: 验证车牌号(含新能源)\n ----------------------------------------------------\n*/\n\nimport infoMsg from './gv.infomsg';\n\n/**\n * @todo: 计算输入字符串的长度,汉字记为2 英文字母记为1\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 14:56:22\n * @param {*} val 对于多选字典,val是数组类型的字典码\n */\nconst calLength = function (val) {\n if (val === null || val.length === 0) return 0;\n let i, sum;\n sum = 0;\n // fixme: val有可能是数组,需要转化为字符串 2022-04-10\n let v = val;\n if (Array.isArray(val)) v = val.join(',');\n for (i = 0; i < v.length; i++)\n if (v.charCodeAt(i) >= 32 && v.charCodeAt(i) <= 126) sum = sum + 1;\n else sum = sum + 2;\n return sum;\n};\n\nconst vcity = {\n 11: '北京',\n 12: '天津',\n 13: '河北',\n 14: '山西',\n 15: '内蒙古',\n 21: '辽宁',\n 22: '吉林',\n 23: '黑龙江',\n 31: '上海',\n 32: '江苏',\n 33: '浙江',\n 34: '安徽',\n 35: '福建',\n 36: '江西',\n 37: '山东',\n 41: '河南',\n 42: '湖北',\n 43: '湖南',\n 44: '广东',\n 45: '广西',\n 46: '海南',\n 50: '重庆',\n 51: '四川',\n 52: '贵州',\n 53: '云南',\n 54: '西藏',\n 61: '陕西',\n 62: '甘肃',\n 63: '青海',\n 64: '宁夏',\n 65: '新疆',\n 71: '台湾',\n 81: '香港',\n 82: '澳门',\n 91: '国外',\n};\n// 校验浮点数位数\nconst checkDecimal = function (val, decimalLen) {\n let v = val + '';\n if (v && v.indexOf('.') > 0) {\n v = v.substr(v.indexOf('.') + 1, v.length);\n if (v.length <= decimalLen) return true;\n else return false;\n } else return true;\n};\n// 取身份证前两位,校验省份\nconst checkProvince = function (card) {\n const province = card.substr(0, 2);\n if (vcity[province] === undefined) return false;\n\n return true;\n};\n\n// 校验日期\nconst verifyBirthday = function (year: number, month: number, day: number, birthday: Date) {\n const now = new Date();\n const now_year = now.getFullYear();\n // 年月日是否合理\n if (birthday.getFullYear() === +year && birthday.getMonth() + 1 === +month && birthday.getDate() === +day) {\n // 判断年份的范围(3岁到100岁之间)\n const time = now_year - Number(year);\n if (time >= 3 && time <= 100) return true;\n return false;\n }\n return false;\n};\n\n// 检查生日是否正确\nconst checkBirthday = function (card) {\n const len = card.length;\n // 身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字\n if (len === 15) {\n const re_fifteen = /^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$/;\n const arr_data = card.match(re_fifteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date('19' + year + '/' + month + '/' + day);\n return verifyBirthday(Number('19' + year), month, day, birthday);\n }\n // 身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X\n if (len === 18) {\n const re_eighteen = /^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$/;\n const arr_data = card.match(re_eighteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date(year + '/' + month + '/' + day);\n return verifyBirthday(year, month, day, birthday);\n }\n return false;\n};\n// 15位转18位身份证号\nconst changeFivteenToEighteen = function (card) {\n if (card.length === 15) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let i;\n card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);\n for (i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n card += arrCh[cardTemp % 11];\n return card;\n }\n return card;\n};\n\n// 校验位的检测\nconst checkParity = function (card) {\n // 15位转18位\n card = changeFivteenToEighteen(card);\n const len = card.length;\n if (len === 18) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let valnum = '';\n for (let i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n valnum = arrCh[cardTemp % 11];\n if (valnum === card.substr(17, 1)) return true;\n\n return false;\n }\n return false;\n};\n\nconst htValidate = {\n isLength: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language, max = 30 } = rule;\n const len = calLength(value);\n if (len > max) callback(new Error(infoMsg.maxLen(language, max)));\n else callback();\n }\n },\n isDouble: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^(-)?\\d+(\\.\\d+)?$/;\n const { language, decimal = 2 } = rule;\n if (!reg.test(value)) callback(new Error(infoMsg.double(language)));\n else if (checkDecimal(value, decimal)) callback();\n else callback(new Error(infoMsg.decimal(language, decimal)));\n }\n },\n isIdcard: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // 校验长度\n const reg = /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/;\n if (!reg.test(value)) callback(new Error(infoMsg.idCard(language)));\n else if (checkProvince(value) === false)\n // 检查省份\n callback(new Error(infoMsg.idCard(language)));\n else if (checkBirthday(value) === false)\n // 校验生日\n callback(new Error(infoMsg.idCard(language)));\n else if (checkParity(value) === false)\n // 检验位的检测\n callback(new Error(infoMsg.idCard(language)));\n else callback();\n }\n },\n\n isCarno: (rule, value, callback) => {\n const { language } = rule;\n if (value === '' || value === undefined || value == null) return callback();\n else if (value.length === 7) {\n const pattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;\n if (!pattern.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n } else {\n const pattern2 = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DABCEFGHJK][A-HJ-NP-Z0-9][0-9]{4}$))/;\n if (!pattern2.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n }\n },\n\n isMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return callback();\n else {\n const { language, max } = rule;\n // eslint-disable-next-line no-useless-escape\n const pattern = /^[\\-\\+]?(([1-9]\\d*)|0)(\\.\\d{1,2})?$/;\n const val = value + '';\n // var rv = val.replace(/[,]/g, '');\n if (!pattern.exec(val)) callback(new Error(infoMsg.money(language)));\n else if (val.indexOf('.') > 0)\n if (val.split('.')[0].length > max - 3)\n // 校验整数位格式只能是maxLength -3\n callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n else if (value.length > max - 3) callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n }\n },\n\n isBigMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^[\\-\\+]?([0-9]\\d*|0|[1-9]\\d{0,2}(,\\d{3})*)(\\.\\d+)?$/;\n if (!reg.test(value)) callback(new Error(infoMsg.money(language)));\n else callback();\n }\n },\n\n isLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[A-Za-z]+$/;\n if (!reg.test(value)) callback(new Error(infoMsg.letter(language)));\n else callback();\n }\n },\n\n isNumber: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[0-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number(language)));\n else callback();\n }\n },\n\n isNumber0: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[1-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number0(language)));\n else callback();\n }\n },\n\n isNumberLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^([a-z]|[A-Z]|[ ]|[(]|[)]|[-]|[_]|[*]|[.]|[,]|[,]|[0-9]){0,200}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.numberLetter(language)));\n else callback();\n }\n },\n\n isName: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[a-zA-Z0-9-_. \\u4E00-\\u9FA5]{0,60}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.name(language)));\n else callback();\n }\n },\n\n isPhone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}$/;\n if (!reg.test(value)) {\n const { language = 'zh-CN' } = rule;\n callback(new Error(infoMsg.phone(language)));\n } else callback();\n }\n },\n\n isEmail: (rule, value, callback) => {\n // eslint-disable-next-line no-useless-escape\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.email(language)));\n else callback();\n }\n },\n\n isTelephone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /0\\d{2}-\\d{7,8}/;\n if (!reg.test(value)) callback(new Error(infoMsg.telephone(language)));\n else callback();\n }\n },\n\n isPhoneTel: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^((0\\d{2,3}-\\d{7,8})|(1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.phoneTel(language)));\n else callback();\n }\n },\n\n isIp: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n if (!reg.test(value)) callback(new Error(infoMsg.ip(language)));\n else callback();\n }\n },\n\n isUrl: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg =\n /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.?(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.url(language)));\n else callback();\n }\n },\n\n isVin: (rule, value, callback) => {\n const { language } = rule;\n const reg = /^[A-Z0-9]+$/;\n if (value === '' || value === undefined || value == null) callback();\n else if (value.length !== 8 && value.length !== 17) callback(new Error(infoMsg.vin(language)));\n else if (!reg.test(value)) callback(new Error(infoMsg.vin(language)));\n else callback();\n },\n};\n\nexport default htValidate;\n","<!--\n * @title: form component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:01:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-09 18:04:49\n * @version: 1.1.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvCascader } from '@@/GvCascader';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvDivider } from '@@/GvDivider';\n import { GvInput } from '@@/GvInput';\n import { GvInputNumber } from '@@/GvInputNumber';\n import { GvSelect } from '@@/GvSelect';\n import { GvSwitch } from '@@/GvSwitch';\n import { GvTimePicker } from '@@/GvTimePicker';\n import { addClass, dateFormatConfig, hasScrollbar, removeClass, sleep, toHump } from '@@/utils';\n import gvValidate from '@@/utils/gv.validate';\n import { ElCol, ElForm, ElFormItem, ElInput, ElRadio, ElRadioButton, ElRadioGroup, ElRow, ElTooltip, useGlobalConfig, type ComponentSize, type FormInstance, type FormItemRule } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, provide, ref, Transition, unref, watch, type PropType, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('form');\n\n export default defineComponent({\n name: 'GvForm',\n props: {\n refForm: {\n type: String,\n required: true,\n },\n divider: {\n type: String,\n required: false,\n default: undefined,\n },\n isDivider: {\n type: Boolean,\n required: false,\n default: true,\n },\n formList: {\n type: Array as PropType<FormItem[]>,\n required: true,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n labelWidth: {\n type: [Number, String] as PropType<number | string>,\n default: 100,\n },\n formStyle: {\n // 响应式布局 使用该参数定义width\n type: [Object],\n required: false,\n default: () => {},\n },\n scroller: {\n // 是否带有滚动条\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots, expose }) {\n const searchFieldsCollapsed = ref(true); // 查询 form 默认折叠超出行数字段\n // @provide\n provide('refForm', props.refForm);\n provide('formList', props.formList);\n provide('searchFieldsCollapsed', searchFieldsCollapsed);\n\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { t } = useBridgeI18n();\n\n const originFormList = ref([]);\n const instance = getCurrentInstance ? getCurrentInstance() : ({ parent: null } as any);\n\n const formRefs = ref<Record<string, FormInstance | null>>({}); // 表单实例引用,默认空对象\n const formElRef = ref<FormInstance | null>(null); // ElForm 元素引用\n\n const setFormRef = (el: FormInstance | null) => {\n formElRef.value = el;\n if (el && props.refForm) formRefs.value[props.refForm] = el;\n };\n const globalSize = useGlobalConfig('size');\n const rootNodeStyle = ref({}); // form组件根节点div样式\n const isShow = ref(true); // form表单show状态,默认显示\n const rules = ref({}); // 表单校验规则,默认空对象\n const isEditContainer = ref(false); // 是否是editContainer标签内,默认false\n const sMaxHeight = ref(0); // 表单最大高度,默认0\n const isScrollbar = ref(false); // 是否dialog中有滚动条\n const isAnchor = ref(false); // 是否锚点中列表\n const model = ref({}); // 表单数据,默认空对象\n const isDialog = ref(false); // 是否是dialog中form表单,默认false\n const colSpanNums = ref(0); // 根据form宽度或屏幕宽度计算显示列数,默认0\n const formType = ref('s'); // form类型:查询form:s、表单form:e\n const styles = ref({}); // form表单style样式,默认空对象\n\n // @computed\n const formSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const labelPosition = computed(() => appStore.labelPosition); // 表单label位置\n const searchDivider = computed(() => appStore.searchDivider); // search divider show,default: true\n const dict = computed<DicItems>(() => appStore.getDict); // 字典数据\n const dictCache = computed(() => userStore.dictCache); // 字典缓存\n\n // @exposed\n expose({\n originFormList,\n setFormRef,\n });\n // method\n const getLanguage = (lang: string, x: any) => {\n let v = '';\n switch (lang) {\n case 'zh-CN':\n v = x.t;\n break;\n case 'en':\n v = x.e;\n break;\n case 'l1':\n v = x.l1;\n break;\n case 'l2':\n v = x.l2;\n break;\n default:\n v = x.t;\n break;\n }\n if (!v) v = x.t;\n return v;\n };\n /**\n * @todo: set divider show status\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:12:34\n * @param {*} show\n */\n const setDividerShow = (show: boolean) => {\n isShow.value = show;\n };\n\n const getEditBar = computed(() => {\n if (slots.editbar?.())\n return (\n <ElRow\n ref-form={props.refForm}\n class=\"gv-form-editbar\">\n {slots.editbar?.()}\n </ElRow>\n );\n else return null;\n });\n\n const getDivider = computed(() => {\n let dividerRender: VNode | null = null;\n if (searchDivider.value !== false) {\n let dividerTitle: string;\n if (props.divider) dividerTitle = props.divider;\n else dividerTitle = t('common.dividerTitle');\n if (props.isDivider)\n dividerRender = (\n <GvDivider\n label={dividerTitle}\n target={props.refForm}\n visible={isShow.value}\n onSetDividerShow={setDividerShow}\n />\n );\n }\n\n return dividerRender;\n });\n\n /**\n * @todo: get dic item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:13:06\n * @param {*} src\n */\n const getDictItems = (src: string): DicItem[] => {\n let ret = [] as DicItem[];\n const dictCacheTmp: DicItem[] | undefined = dictCache.value?.[src];\n if (dictCacheTmp) ret = dictCacheTmp;\n else {\n // 生成字典列表\n const dictTmp: DicItem[] | undefined = dict.value[src];\n if (dictTmp) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dictTmp;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n\n ret = dictTmp;\n }\n }\n return ret;\n };\n /**\n * @todo: generate form item rules\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 20:31:59\n * @param {*} _item\n */\n const getItemRules = (_item: FormItem): FormItemRule[] => {\n const rules: FormItemRule[] = [];\n const format: FormItemFormat | undefined = _item.format;\n // 富文本不校验\n if (_item.type === 'richtext') return rules;\n if (!format) return rules;\n // ========== 必填校验 ==========\n const requiredFlag = Number(format[0]);\n if (requiredFlag === 1 && !_item.hidden)\n rules.push({\n required: true,\n message: `${t('common.pleaseInput')} ${_item.label ?? ''}`,\n trigger: 'blur',\n });\n // ========== 自定义校验 ==========\n let validateKey = 'isAny';\n if (format[1]) validateKey = toHump(String(format[1]));\n const maxLen = Number(format[2] ?? 30);\n const decimal = format.length >= 4 ? Number(format[3] ?? 0) : 0;\n const validator = gvValidate[validateKey as keyof typeof gvValidate];\n if (validator && validateKey !== 'isAny')\n rules.push({\n validator: validator,\n trigger: ['change', 'blur'],\n // Element Plus 透传参数(自定义字段)\n language: userStore.language,\n max: maxLen,\n decimal,\n } as FormItemRule);\n // ========== 长度校验 ==========\n const excluded = ['isDate', 'isDateTime', 'isTime', 'isDic'];\n if (format[2] && !excluded.includes(validateKey))\n rules.push({\n language: userStore.language,\n max: maxLen,\n validator: gvValidate['isLength'],\n trigger: ['change', 'blur'],\n } as FormItemRule);\n return rules;\n };\n const handleRadioInput = (event: any, field: string, val, formVal, disabled) => {\n if (disabled) return;\n if (val === formVal) {\n event.preventDefault();\n model.value[field] = '';\n }\n };\n const handleDateRange2Focus = (vm: any) => {\n sleep(100).then(() => {\n addClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n });\n };\n const handleDateRange2Blur = (vm: any) => {\n removeClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n };\n\n /**\n * @todo: 日期范围选择,单独选择开始日期、结束日期选择回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 19:49:03\n * @param {*} type\n * @param {*} val\n * @param {*} field\n */\n const handleDateRange2Change = (type: string, val: string | Date, field: string): void => {\n // 校验开始日期和结束日期大小\n if (type === 's')\n if (val && model.value[field + '-end']) {\n const endTime = new Date(model.value[field + '-end'] as string).getTime();\n const startTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-end'] = '';\n model.value[1] = 'null';\n }\n }\n\n if (type === 'e')\n if (val && model.value[field + '-start']) {\n const startTime = new Date(model.value[field + '-start'] as string).getTime();\n const endTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-start'] = '';\n // console.log(this.model);\n model.value[1] = 'null';\n }\n }\n\n if (!field) return;\n const datePicker = model.value[field];\n let dateArr = new Array(2);\n if (Array.isArray(datePicker)) {\n if (type === 's') datePicker[0] = val;\n else datePicker[1] = val;\n if (!datePicker[0]) datePicker[0] = 'null';\n if (!datePicker[1]) datePicker[1] = 'null';\n model.value[field] = datePicker.join(',');\n } else {\n if (datePicker && typeof datePicker === 'string') dateArr = datePicker.split(',');\n dateArr[0] = model.value[field + '-start'];\n dateArr[1] = model.value[field + '-end'];\n if (!dateArr[0]) dateArr[0] = 'null';\n if (!dateArr[1]) dateArr[1] = 'null';\n model.value[field] = dateArr.join(',');\n }\n };\n /**\n * @todo: switch框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-12-21 16:47:22\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleSwitchDictChange = async (val, field, dicType, cb) => {\n switch (dicType) {\n case 'yxzt':\n if (val === true) model.value[field] = '100201';\n else model.value[field] = '100202';\n break;\n case 'sf':\n if (val === true) model.value[field] = '100101';\n else model.value[field] = '100102';\n break;\n }\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: radio框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-22 15:50:15\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleRadioDictChange = async (val, field, dicType: string | undefined, cb: Fn | undefined) => {\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: 查询 form 列默认折叠 class(渲染时绑定,避免重渲染丢失)\n */\n const getSearchColClass = (index: number) => {\n if (formType.value !== 's' || !searchFieldsCollapsed.value) return undefined;\n const slot = slots.default?.()?.[0];\n const slotProps = slot?.props as Recordable | undefined;\n if (slotProps?.expand === false) return undefined;\n const showDefaultRow = appStore.searchFormRows === 1 ? 4 : 8;\n if (index >= showDefaultRow - 1) return 'gv-form-col--hidden';\n return undefined;\n };\n\n /**\n * @todo: render form item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:54:23\n * @param {*} _item\n * @param {*} _index\n */\n const renderFormItem = (_item: FormItem, _index: number): VNode => {\n const {\n type = 'text',\n label,\n field,\n hidden = false,\n disabled,\n format = [],\n placeholder,\n readonly = false,\n dateType = 'date',\n dicType,\n filtercode,\n colspan = 1,\n disabledDateFunc,\n disabledDate,\n editable = true,\n multiple = false,\n showLabel,\n size = formSize.value,\n visible = true,\n // offset,\n createRow = false, // 是否创建新row,\n dicRemote,\n cb, // 回调方法\n clear, // 清空回调\n rows, // textarea\n autosize, // textarea\n min, // input-number\n max, // input-number\n step, // input-number\n precision, // input-number\n blur = () => {},\n suffixIcon, // 后缀icon\n prefixIcon, // 前缀icon\n focus = () => {},\n change = () => {},\n defaultTime, // 时间的默认能够选择的时间\n isreload = true, // 表选字典是否重新加载\n options = [],\n lazy = false, // cascader是否懒加载\n lazyLoad = () => {}, // cascader懒加载方法\n render, // 自定义form样式\n } = _item;\n let renders;\n const isHidden = hidden === true;\n const maxLen = format[2] || 30;\n let cType = type;\n // const dateFormatConfig = dateFormatConfig;\n const validateRule = toHump(String(format[1] || ''));\n let sDateType = dateType;\n let isRange = false;\n let dateFormat = dateFormatConfig.date.valueFormat; // 日期显示格式\n let valueFormat = dateFormatConfig.date.valueFormat; // 日期绑定值格式\n if (sDateType !== 'daterange' && sDateType !== 'datetimerange' && sDateType !== 'daterange2' && sDateType !== 'datetimerange2') {\n if (validateRule === 'isDate') cType = 'date';\n if (validateRule === 'isDateTime') {\n cType = 'datetime';\n sDateType = 'datetime';\n }\n if (validateRule === 'isTime') cType = 'time';\n }\n\n if (sDateType === 'timerange') isRange = true;\n\n let ph = placeholder;\n let startPh = t('common.startDate');\n let endPh = t('common.endDate');\n // todo: 响应式布局计算\n // const cols = { span: colspan, offset: (_index) * 6 };\n let cols = colspan > 4 ? 4 : colspan; // fixme: 最大值不能超过4 2022-04-07\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') cols = 2;\n // update: 对于多选字典,默认占用列数为2列 2023-02-18\n if (multiple === true && colspan === undefined) cols = 2;\n let rangeSeparator;\n if (sDateType === 'timerange' || sDateType === 'daterange2' || sDateType === 'datetimerange2') rangeSeparator = t('common.until');\n const colSpanXs = 24;\n let colSpanSm = 12;\n let colSpanMd = 8;\n\n let colSpanLg = 6;\n if (isDialog.value === true) colSpanLg = 8;\n let colSpanXl = 4;\n if (isDialog.value === true) colSpanXl = 6;\n if (colSpanNums.value !== 0) {\n if (colSpanNums.value === 12) cols = colspan > 2 ? 2 : colspan;\n if (colSpanNums.value === 8) cols = colspan > 3 ? 3 : colspan;\n if (colSpanNums.value === 6 || colSpanNums.value === 4) cols = colspan > 4 ? 4 : colspan;\n colSpanSm = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanMd = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanLg = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanXl = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n } else {\n colSpanSm = cols * colSpanSm > 24 ? 24 : cols * colSpanSm;\n colSpanMd = cols * colSpanMd > 24 ? 24 : cols * colSpanMd;\n colSpanLg = cols * colSpanLg > 24 ? 24 : cols * colSpanLg;\n colSpanXl = cols * colSpanXl > 24 ? 24 : cols * colSpanXl;\n }\n let decimal = 2;\n let v = '';\n if (!ph)\n switch (validateRule) {\n case 'isMoney':\n ph = '0.00';\n break;\n case 'isBigMoney':\n ph = '0,000.00';\n break;\n case 'isEmail':\n ph = 'xx@xx.com';\n break;\n case 'isDouble':\n if (format.length >= 4) decimal = format[3] || 2;\n while (decimal > 0) {\n v = '0' + v;\n decimal--;\n }\n ph = '00.' + v;\n break;\n case 'isDate':\n if (sDateType === 'week') {\n ph = t('common.selectWeek'); // dateFormatConfig.week.placeholder;\n dateFormat = dateFormatConfig.week.dateFormat;\n } else if (sDateType === 'month' || sDateType === 'monthrange') {\n ph = t('common.selectMonth'); // dateFormatConfig.month.placeholder;\n startPh = ph;\n endPh = ph;\n dateFormat = dateFormatConfig.month.dateFormat;\n valueFormat = dateFormatConfig.month.valueFormat;\n } else if (sDateType === 'year') {\n ph = t('common.selectYear'); // dateFormatConfig.year.placeholder\n dateFormat = dateFormatConfig.year.dateFormat;\n valueFormat = dateFormatConfig.year.valueFormat;\n } else if (sDateType === 'daterange' || sDateType === 'daterange2') ph = t('common.selectDate');\n break;\n case 'isDateTime':\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') {\n startPh = t('common.startTime');\n endPh = t('common.endTime');\n }\n ph = t('common.selectTime'); // dateFormatConfig.datetime.placeholder;\n dateFormat = dateFormatConfig.datetime.dateFormat;\n valueFormat = dateFormatConfig.datetime.valueFormat;\n break;\n }\n let editables = editable;\n // 如果是带有禁用日期的,不可编辑,防止输入不一致问题\n if (disabledDateFunc || disabledDate) editables = false;\n let ops;\n let isTableDic = false;\n if (type === 'dic')\n if (dicType) {\n ops = getDictItems(dicType);\n if (dicType.indexOf('t#') >= 0) isTableDic = true;\n }\n\n // 设置label是否显示\n let sLabel = label;\n if (formType.value === 's') {\n sLabel = appStore.searchFormLabel === true ? label : undefined;\n if (appStore.searchFormLabel !== true) ph = label;\n }\n\n const switchDefaultVal = ref('');\n const searchColClass = getSearchColClass(_index);\n switch (cType) {\n case 'blank':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n prop={field}\n key={field}>\n <div class=\"el-input__inner gv-form__item__inner-blank\">&nbsp;</div>\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'divider':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={24}\n sm={24}\n md={24}\n lg={24}\n xl={24}>\n <GvDivider label={sLabel} />\n </ElCol>\n );\n break;\n case 'render':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n {render?.(model.value[field], field)}\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'text':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n type=\"text\"\n vref={field}\n name={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n maxlength={maxLen}\n size={size as ComponentSize}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n onBlur={blur}\n onFocus={focus}\n suffixIcon={suffixIcon}\n prefixIcon={prefixIcon}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'textarea':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n vref={field}\n name={field}\n type=\"textarea\"\n v-model={model.value[field]}\n value={model.value[field]}\n size={size as ComponentSize}\n disabled={disabled}\n maxlength={maxLen}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n rows={rows}\n autosize={autosize}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'time':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvTimePicker\n v-model={model.value[field]}\n vref={field}\n name={field}\n disabled={disabled}\n editable={editables}\n placeholder={ph}\n isRange={isRange}\n rangeSeparator={rangeSeparator}\n // format={dateFormat}\n // value-format={valueFormat}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'date':\n case 'datetime':\n if (sDateType !== 'daterange2' && sDateType !== 'datetimerange2')\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvDatePicker\n v-model={model.value[field]}\n modelValue={model.value[field]}\n vref={field}\n data-name={field}\n data-align={'right'}\n type={sDateType}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={ph}\n default-time={defaultTime}\n startPlaceholder={startPh}\n endPlaceholder={endPh}\n data-visible={visible}\n onChange={change}\n />\n </ElFormItem>\n </ElCol>\n ) : null;\n else\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <div\n class=\"gv-daterange__single\"\n style=\"width: 100%;\"\n onFocus={() => void 0}>\n <GvDatePicker\n v-model={model.value[field + '-start']}\n modelValue={model.value[field + '-start']}\n vref={field + '-start'}\n data-name={field + '-start'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={startPh}\n default-time={defaultTime}\n data-visible={visible}\n style={{ width: '96% !important' }}\n class=\"gv-datepicker-range-start\"\n onChange={(val) => handleDateRange2Change('s', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n <span class=\"gv-daterange__single-separator\">{rangeSeparator}</span>\n <GvDatePicker\n v-model={model.value[field + '-end']}\n modelValue={model.value[field + '-end'] as string}\n vref={field + '-end'}\n data-name={field + '-end'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={(date) => {\n if (sDateType === 'daterange2') return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n else return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n }}\n editable={editables}\n placeholder={endPh}\n default-time={defaultTime}\n data-visible={visible}\n class=\"gv-datepicker-range-end\"\n onChange={(val) => handleDateRange2Change('e', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n </div>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'dic':\n switch (dicType) {\n case 'yxzt':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100201';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100201';\n break;\n case 'sf':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100101';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100101';\n break;\n }\n if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2 && (dicType === 'sf' || dicType === 'yxzt'))\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvSwitch\n value={switchDefaultVal.value}\n columnKey={field}\n disabled={disabled}\n target={dicType === 'yxzt' ? '100201' : '100101'}\n onChange={(val) => handleSwitchDictChange(val, field, dicType, cb)}></GvSwitch>\n </ElFormItem>\n </ElCol>\n ) : null;\n else if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2)\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElInput\n id={`${field}__a11y-anchor`}\n modelValue=\"\"\n readonly\n validateEvent={false}\n tabindex={-1}\n aria-hidden={true}\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: 0,\n border: 0,\n clip: 'rect(0, 0, 0, 0)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n />\n <ElRadioGroup\n aria-label={sLabel}\n name={field}\n v-model={model.value[field].value}\n onChange={(val) => handleRadioDictChange(val, field, dicType, cb)}>\n {ops.map((x) =>\n format[0] === 0 ? (\n <ElRadio\n value={x.c}\n disabled={disabled}\n onChange={(event) => handleRadioInput(event, field, x.c, model.value[field], disabled)}>\n {getLanguage(userStore.language, x)}\n </ElRadio>\n ) : (\n <ElRadioButton\n value={x.c}\n disabled={disabled}>\n {getLanguage(userStore.language, x)}\n </ElRadioButton>\n ),\n )}\n </ElRadioGroup>\n </ElFormItem>\n </ElCol>\n ) : null;\n else {\n // form dic\n let v: string | undefined;\n const vv = model.value[field];\n if (typeof vv === 'object')\n if (Array.isArray(vv))\n vv.forEach((x, index) => {\n if (x)\n if (v)\n if (x.label) v += ',' + x.label;\n else v += ',' + (showLabel?.[index] ? showLabel[index] : x);\n else if (x.label) v = x.label;\n else v = showLabel?.[index] ?? x;\n });\n else {\n if (vv) v = vv.label;\n }\n else v = vv;\n let toolText = v; // 提示的文本\n if (showLabel) toolText = showLabel as string;\n\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!v}\n content={toolText ? toolText + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvSelect\n v-model={model.value[field]}\n value={model.value[field]}\n label={label}\n showLabel={showLabel}\n vref={field}\n multiple={multiple}\n dicType={dicType ?? ''}\n size={size as ComponentSize}\n disabled={disabled}\n placeholder={ph}\n filtercode={filtercode}\n visible={visible}\n dicRemote={typeof dicRemote === 'function' ? dicRemote : undefined}\n cb={cb}\n clear={clear}\n isreload={isreload}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n }\n\n break;\n case 'number':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInputNumber\n vref={field}\n name={field}\n id={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n visible={visible}\n size={size as ComponentSize}\n min={min}\n max={max}\n step={step}\n precision={precision}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'layer':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvCascader\n vref={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n size={size as ComponentSize}\n lazy={lazy}\n multiple={multiple}\n lazyLoad={lazyLoad}\n visible={visible}\n options={options}\n onBlur={blur}\n onChange={change}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n default:\n break;\n }\n if (createRow === true) return <el-row>{renders}</el-row>;\n else return renders;\n };\n\n const getItems = computed(() => {\n const res: VNode[] = [];\n props.formList.forEach((item: FormItem, index: number) => {\n res.push(renderFormItem(item, index));\n });\n return res;\n });\n\n // todo: 计算最大高度 需要增加弹出框判断逻辑,\n const getMaxHeight = (sRootEl: HTMLElement | undefined) => {\n if (isEditContainer.value) sMaxHeight.value = 0;\n else if (props.scroller === false) sMaxHeight.value = 0;\n else if (!isScrollbar.value)\n if (!isAnchor.value) {\n if (sRootEl && typeof sRootEl.closest === 'function') {\n const tabPane = sRootEl?.closest('.el-tabs') as HTMLElement | undefined;\n if (tabPane) {\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 215 : 275;\n sMaxHeight.value = document.documentElement.clientHeight - (sRootEl?.offsetTop || 0) - (tabPane?.offsetTop || 0) - offsetTop;\n } else {\n const dialog = sRootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = sRootEl?.closest('.gv-drawer');\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 75;\n // console.log(this.sMaxHeight);\n } else sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 265;\n }\n }\n } else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n };\n\n const clearFormValidate = () => {\n formRefs.value[props.refForm]?.clearValidate();\n };\n\n /**\n * @todo: 设置form表单样式\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-07 19:35:14\n */\n const setFormStyle = () => {\n let formStyle1;\n // console.log(props.formStyle);\n if (props.formStyle) {\n formStyle1 = props.formStyle;\n let width = formStyle1.width || 0;\n let height = formStyle1.height || 0;\n // fixme: 判断width是否是百分比\n // if (width.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持width定义百分比');\n // if (height.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持height定义百分比');\n // width = Math.round(this.getParentWidth * (parseInt(width) / 100) * 100) / 100;\n\n if (width.lastIndexOf('%') === -1) {\n // width固定值\n width = parseInt(width);\n if (width !== 0) {\n if (width < 762)\n // xs\n colSpanNums.value = 24;\n else if (width < 992)\n // sm\n colSpanNums.value = 12;\n else if (width < 1200)\n // md\n colSpanNums.value = 8;\n else if (width < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = width + 'px';\n }\n if (height !== '100%' && height !== 0) {\n height = parseInt(height);\n rootNodeStyle.value['height'] = height + 'px';\n }\n } else rootNodeStyle.value['width'] = width;\n } else {\n const rootEl = instance?.vnode?.el as HTMLElement;\n const clientWidth = rootEl?.clientWidth;\n // console.log(clientWidth);\n if (clientWidth !== 0) {\n if (clientWidth < 762)\n // xs\n colSpanNums.value = 24;\n else if (clientWidth < 992)\n // sm\n colSpanNums.value = 12;\n else if (clientWidth < 1200)\n // md\n colSpanNums.value = 8;\n else if (clientWidth < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = clientWidth + 'px';\n }\n }\n styles.value = formStyle1;\n };\n\n /**\n * @todo: form init\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 07:47:06\n * @param {*} type\n */\n const init = async (type: string) => {\n // alert(type);\n const formModel = {};\n const formRule = {};\n props.formList.forEach((item: FormItem, index: number) => {\n let v;\n if (type === 'create') v = item.value;\n else if (type === 'watch') {\n const originItem = originFormList.value[index] as FormItem | undefined;\n if (originItem && (item.value !== originItem.value || item.showLabel !== originItem.showLabel)) v = item.value;\n else v = model.value[item.field] === undefined ? item.value : model.value[item.field];\n } else v = model.value[item.field] === undefined ? item.value : model.value[item.field];\n formModel[item.field] = v;\n if (item.dateType === 'daterange2' || item.dateType === 'datetimerange2')\n if (Array.isArray(v)) {\n formModel[item.field + '-start'] = v[0] === 'null' ? undefined : v[0];\n formModel[item.field + '-end'] = v[1] === 'null' ? undefined : v[1];\n } else {\n formModel[item.field + '-start'] = '';\n formModel[item.field + '-end'] = '';\n }\n\n formRule[item.field] = getItemRules(item);\n // 设置 value属性为响应式数据\n item.value = v;\n });\n // 设置form model\n model.value = formModel;\n if (type === 'create') rules.value = formRule;\n else if (type === 'watch') rules.value = formRule;\n\n await nextTick();\n setFormStyle();\n // console.log(formRefs.value);\n clearFormValidate();\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal) {\n const fieldObj = newVal[key];\n const oldObj = oldVal[key];\n if (fieldObj === undefined) continue;\n else if (!oldObj) {\n diff = true;\n break;\n } else {\n const fieldObjKeys = Object.keys(fieldObj);\n for (const key2 in fieldObjKeys)\n if (\n fieldObjKeys[key2] === 'label' ||\n fieldObjKeys[key2] === 'hidden' ||\n fieldObjKeys[key2] === 'disabled' ||\n fieldObjKeys[key2] === 'format' ||\n fieldObjKeys[key2] === 'readonly' ||\n fieldObjKeys[key2] === 'filtercode' ||\n fieldObjKeys[key2] === 'multiple' ||\n fieldObjKeys[key2] === 'showLabel' ||\n fieldObjKeys[key2] === 'visible'\n )\n if (fieldObjKeys[key2] === 'format') {\n if (fieldObj[fieldObjKeys[key2]][0] !== oldObj[fieldObjKeys[key2]][0]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][1] !== oldObj[fieldObjKeys[key2]][1]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][2] !== oldObj[fieldObjKeys[key2]][2]) {\n diff = true;\n break;\n }\n // //if (!_.isEqual(fieldObj[fieldObjKeys[key2]], oldObj[fieldObjKeys[key2]])) {\n // diff = true;\n // break;\n // }\n } else if (fieldObj[fieldObjKeys[key2]] !== oldObj[fieldObjKeys[key2]]) {\n // console.log(key2);\n // console.log(fieldObj[fieldObjKeys[key2]]);\n // console.log(oldObj[fieldObjKeys[key2]]);\n diff = true;\n break;\n }\n }\n\n // if (!_.isEqual(newVal[key], oldVal[key]))\n }\n // console.log(diff);\n return diff;\n };\n\n // watch\n watch(\n () => props.formList,\n (nextProps, prevProps) => {\n // formList\n if (Array.isArray(nextProps) && Array.isArray(prevProps) && nextProps.length !== prevProps.length) init('watch');\n else if (difference(nextProps, originFormList.value)) init('watch');\n },\n {\n deep: true,\n },\n );\n watch(\n () => sMaxHeight.value,\n (newVal) => {\n // sMaxHeight\n if (isScrollbar.value === false)\n if (isAnchor.value === false) sMaxHeight.value = newVal;\n else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n },\n );\n\n // @created hook\n // console.log(slots.default);\n const firstSlot = slots.default?.()?.[0];\n if (typeof firstSlot?.type === 'object' && 'name' in firstSlot.type && firstSlot?.type?.name === 'GvSearchBar') {\n formType.value = 's';\n const slotProps = firstSlot.props as Recordable | undefined;\n if (slotProps?.expand === false) searchFieldsCollapsed.value = false;\n } else formType.value = 'e';\n // 解析formList\n originFormList.value = JSON.parse(JSON.stringify(props.formList));\n init('create');\n // 判断是否是dialog弹出框中的form\n const parentNode = instance?.parent;\n // console.log(parentNode.$?.type?.name);\n if (parentNode && parentNode.type?.name === 'ElDialog') isDialog.value = true;\n else isDialog.value = false;\n\n // @mounted hook\n onMounted(() => {\n nextTick(() => {\n // get root element\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n\n // 确保 rootEl 是 HTMLElement 并且有 closest 方法\n if (rootEl && typeof rootEl.closest === 'function') {\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n const dialogBody = rootEl.closest('.gv-drawer__body__inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogBody2 = rootEl.closest('.gv-dialog__body__inner');\n if (dialogBody2) isScrollbar.value = hasScrollbar(dialogBody2);\n }\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n\n // 计算maxheight;\n getMaxHeight(rootEl);\n\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n }\n });\n });\n\n // @render\n return () => (\n <div\n class={prefixCls}\n style={{ ...rootNodeStyle }}>\n {getEditBar.value}\n {getDivider.value}\n <Transition name=\"el-zoom-in-top\">\n <div\n v-show={isShow.value}\n key=\"gv-form-body\"\n class={`${prefixCls}-collapse__inner`}>\n <ElForm\n ref={setFormRef}\n model={model.value}\n size={formSize.value}\n inline={false}\n label-position={labelPosition.value}\n label-width={`${props.labelWidth}px`}\n rules={rules.value}\n style={{\n ...styles.value,\n width: '100%',\n maxHeight: sMaxHeight.value === 0 ? undefined : sMaxHeight.value + 'px',\n }}>\n <ElRow\n ref-form={props.refForm}\n style={{ display: 'flex', flexWrap: 'wrap' }}>\n {getItems.value}\n {slots.default?.() && <div style={{ flex: 1, minWidth: 1 }}>{slots.default?.()}</div>}\n </ElRow>\n </ElForm>\n </div>\n </Transition>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-form';\n .#{$prefixCls} {\n width: 100%;\n\n .#{$prefixCls}-form-editbar {\n // editbar bottom\n // border-bottom:1px solid #d9d9d9;\n // editbar top\n // border-top:1px solid #d9d9d9;\n // border-top: 1.5px solid var(--primaryColorHover, $primaryColorHover);\n padding: 0 0 2px;\n margin-top: -3px;\n }\n\n .#{$prefixCls}-collapse-wrap {\n overflow: hidden;\n }\n\n .#{$prefixCls}-collapse__inner {\n transform-origin: center top;\n }\n\n .el-form {\n overflow: hidden;\n }\n\n .el-col {\n min-height: 32px;\n margin-bottom: 12px;\n\n &[type='FIXED'] {\n height: 32px !important;\n }\n\n :deep(.el-form-item) {\n margin-bottom: 0;\n\n .el-form-item__label {\n height: 30px; // 32px\n padding-right: $modulePadding;\n //font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 30px; // 32px\n\n .label-wrap {\n display: inline-block;\n max-width: calc(100% - 10px);\n\n .el-input__inner {\n padding: 0 8px;\n border-color: $borderColor;\n\n & + span.el-input__suffix {\n right: 0;\n }\n }\n }\n }\n\n .el-form-item__content {\n line-height: 29px;\n height: 29px;\n .el-radio-group {\n .el-radio-button--small .el-radio-button__inner {\n padding: 7px;\n }\n\n .el-radio__label {\n //font-size: $appTextSize;\n }\n }\n\n .el-range-editor {\n width: 100%;\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .#{$prefixCls}__item__inner-blank {\n width: 100%;\n height: 20px;\n line-height: 5px;\n border: 0;\n }\n\n // 日期范围选择\n .el-range-editor.el-input__inner {\n padding: 3px 5px;\n }\n\n // 日期范围选择\n .el-range__close-icon {\n width: 20px;\n }\n\n .gv-daterange__single {\n display: inline-flex !important;\n height: 32px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n\n &:focus,\n &.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .el-input__suffix {\n right: 2px;\n }\n\n .el-input__inner {\n padding-right: 2px;\n padding-left: 25px;\n border: 0;\n }\n\n .gv-daterange__single-separator {\n height: 32px;\n //font-size: $appTextSize;\n line-height: 32px;\n }\n }\n\n .el-form-item__error {\n margin-top: 2px;\n transform: scale(0.9);\n transform-origin: 0 50%;\n }\n }\n\n .el-select {\n width: 100%;\n\n .el-select__tags {\n height: 24px;\n overflow-y: auto;\n\n .el-select__input {\n height: inherit;\n padding-left: 15px;\n }\n }\n }\n\n .el-autocomplete {\n width: 100%;\n }\n\n .el-textarea {\n display: block;\n\n .el-textarea__inner {\n padding: 0 10px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n overflow-y: auto;\n font-family: inherit;\n }\n\n .el-input__count {\n right: 6px;\n line-height: 1;\n }\n }\n\n .el-input-number {\n width: 100%;\n\n .el-input__inner {\n text-align: left !important;\n }\n\n .el-input-number__increase:hover ~ .el-input .el-input__inner:not(.is-disabled),\n .el-input-number__decrease:hover ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: $borderColor;\n }\n }\n\n .desc-icon {\n padding: 6px;\n font-size: 18px;\n vertical-align: middle;\n }\n\n .desc-text {\n //font-size: $textSizeSecondary;\n }\n\n &.is-required .el-form-item__label {\n // color: #f5222d;\n color: #606266;\n }\n }\n }\n .el-form--label-top {\n .el-form-item {\n .el-select,\n .el-input,\n .el-radio-group {\n width: 90% !important;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvForm from './src/GvForm.vue';\nconst GvFormPlugin = {\n install(app: App): void {\n app.component(GvForm.name ?? 'GvForm', GvForm);\n },\n};\nexport default GvFormPlugin;\n\nexport { GvForm };\n","<!--\n * @title: collapsed sidebar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-03 13:48:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 11:18:57\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { Expand, Fold } from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, onMounted, unref } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvHamburger', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('hamburger');\n\n const appStore = useAppStore();\n const collapse = computed(() => appStore.getCollapseMenus);\n\n // set quick keys\n\n // @method\n // load dict\n const loadDict = async () => {\n try {\n await appStore.loadAllDict();\n } catch {\n // empty\n }\n };\n // load division\n const loadDictDivision = async () => {\n try {\n await appStore.loadDictDivision();\n } catch {\n // empty\n }\n };\n\n const toggleCollapse = () => {\n const collapsed = unref(collapse);\n appStore.setCollapseMenus(!collapsed);\n };\n\n // @created\n // @mounted\n onMounted(async () => {\n // reload dict if needed\n const currentDict = appStore.dict;\n const currentReloadDict = appStore.isLoadDict;\n if (!currentDict || Object.keys(currentDict).length === 0) await loadDict();\n else if (+currentReloadDict === 1) await loadDict();\n const currentDictDivision = appStore.dictDivision;\n if (currentDictDivision && currentDictDivision.length === 0) await loadDictDivision();\n });\n</script>\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleCollapse\">\n <div class=\"trigger\">\n <ElIcon\n :size=\"20\"\n :class=\"`${prefixCls}__icon`\">\n <Expand\n v-if=\"!collapse\"\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n <Fold\n v-else\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n </ElIcon>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-hamburger';\n .#{$prefixCls} {\n position: relative;\n z-index: 3;\n line-height: $navHeadHeight;\n background-color: #fff;\n &:hover {\n background-color: rgb(0 0 0 / 3%);\n }\n .trigger {\n display: inline-block;\n line-height: 1px;\n cursor: pointer;\n transition: color 0.3s ease;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvHamburger from './src/GvHamburger.vue';\nconst GvHamburgerPlugin = {\n install(app: App): void {\n app.component(GvHamburger.name ?? 'GvHamburger', GvHamburger);\n },\n};\nexport default GvHamburgerPlugin;\n\nexport { GvHamburger };\n","<!--\n * @title: locale lang dropdown\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-25 11:43:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:09:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useLocale } from '@/hook/web/useLocale';\n import { useStyle } from '@/hook/web/useStyle';\n import { useLocaleStore } from '@/store/modules/locale';\n import { useUserStore } from '@/store/modules/user';\n import { computed, unref } from 'vue';\n import { useRouter } from 'vue-router';\n import { propTypes } from '../../utils/gv.propTypes';\n\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n\n defineOptions({\n name: 'GvLangSelect', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n defineProps({\n className: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('lang-select');\n\n const userStore = useUserStore();\n const localeStore = useLocaleStore();\n const langMap = computed(() => localeStore.getLocaleMap);\n const currentLang = computed(() => localeStore.getCurrentLocale);\n\n const router = useRouter();\n\n const handleSetLang = async (lang): Promise<void> => {\n if (lang === unref(currentLang).lang) return;\n\n const { switchLocale } = useLocale();\n userStore.setLanguage(lang);\n await switchLocale(lang);\n\n router.go(0);\n };\n</script>\n\n<template>\n <ElDropdown\n :class=\"prefixCls\"\n trigger=\"click\"\n class=\"international\"\n @command=\"handleSetLang\">\n <div>\n <GvIcon\n :class-name=\"`international-icon ${className}`\"\n icon-name=\"language\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item in langMap\"\n :key=\"item.lang\"\n :command=\"item.lang\">\n {{ item.name }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n","import type { App } from 'vue';\nimport GvLangSelect from './src/GvLangSelect.vue';\nconst GvLangSelectPlugin = {\n install(app: App): void {\n app.component(GvLangSelect.name ?? 'GvLangSelect', GvLangSelect);\n },\n};\nexport default GvLangSelectPlugin;\n\nexport { GvLangSelect };\n","<!--\n * @title: popover component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:04:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:33:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { GvIcon } from '@@/GvIcon';\n import { ElPopover } from 'element-plus';\n import { computed, defineComponent, ref, watch, type PropType } from 'vue';\n import type { TPopoverPlacement, TPopoverTrigger } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popover');\n\n export default defineComponent({\n name: 'GvPopover',\n props: {\n vref: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n placement: {\n type: String as PropType<TPopoverPlacement>,\n default: 'bottom-start',\n },\n trigger: {\n type: String as PropType<TPopoverTrigger>,\n default: 'click',\n },\n tablePopover: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n columnType: {\n type: String,\n default: undefined,\n },\n },\n\n emits: ['update:visible', 'show', 'hide'],\n\n setup(props, { emit, slots }) {\n // @data\n const isShow = ref<boolean>(props.visible);\n\n // @watch\n watch(\n () => props.visible,\n (val) => {\n isShow.value = val;\n },\n );\n\n // @computed\n const popClass = computed(() => (props.tablePopover ? `${prefixCls} table-popover` : prefixCls));\n\n // @methods\n\n const handleUpdateVisible = (val: boolean) => {\n isShow.value = val;\n emit('update:visible', val);\n };\n\n const handleShow = () => {\n emit('show', props.columnProp);\n };\n\n const handleHide = () => {\n emit('hide', props.columnProp);\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n // 关闭其他 popover\n // if (this.tablePopover === true)\n // this.$refs.array.forEach(element => {\n\n // });\n\n // this.$emit('click', e, this.columnProp);\n };\n\n const getReferenceSlot = () => (\n <span class=\"gv-popover-reference\">\n {props.label || props.title}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"\n />\n </span>\n );\n\n // @render\n return () => (\n <div\n class={prefixCls}\n onClick={handlePopoverWrapper}>\n <ElPopover\n ref={props.vref || 'gv-popover'}\n visible={isShow.value}\n onUpdate:visible={handleUpdateVisible}\n title={props.title}\n placement={props.placement}\n trigger={props.trigger}\n showArrow={true}\n popperClass={`gv-popover ${popClass.value}`}\n transition=\"el-zoom-in-top\"\n onAfter-enter={handleShow}\n onAfter-leave={handleHide}\n // append-to-body={false}\n // popper-options={{ // fixme: 增加该配置会导致各种问题,兼容性不行\n // boundariesElement: 'body',\n // // gpuAcceleration: true,\n // // positionFixed: true,\n // removeOnDestroy: true\n // }}\n >\n {{\n default: () => slots.default?.(),\n reference: () => getReferenceSlot(),\n }}\n </ElPopover>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popover';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopover from './src/GvPopover.vue';\n\nconst GvPopoverPlugin = {\n install(app: App): void {\n app.component(GvPopover.name ?? 'GvPopover', GvPopover);\n },\n};\nexport default GvPopoverPlugin;\n\nexport { GvPopover };\n","<!--\n * @title: radio component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:52:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:34:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadio, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio');\n\n export default defineComponent({\n name: 'GvRadio',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref(props.value);\n const radioSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadio\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n value={props.value ?? props.label}\n disabled={props.disabled}\n border={props.border}\n onChange={handleChange}\n size={radioSize.value}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadio>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadio from './src/GvRadio.vue';\n\nconst GvRadioPlugin = {\n install(app: App): void {\n app.component(GvRadio.name ?? 'GvRadio', GvRadio);\n },\n};\nexport default GvRadioPlugin;\n\nexport { GvRadio };\n","<!--\n * @title: radio button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:18:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:35:23\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioButton } from 'element-plus';\n import { defineComponent, ref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-button');\n\n export default defineComponent({\n name: 'GvRadioButton',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue', 'change'],\n setup(props, { slots }) {\n // @data\n const radioValue = ref(props.value);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n // const handleUpdate = (val) => {\n // radioValue.value = val;\n // emit('update:modelValue', val);\n // };\n\n // @render\n return () => (\n <ElRadioButton\n value={props.value ?? props.label}\n modelValue={radioValue.value}\n name={props.name}\n disabled={props.disabled}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadioButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-button';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioButton from './src/GvRadioButton.vue';\n\nconst GvRadioButtonPlugin = {\n install(app: App): void {\n app.component(GvRadioButton.name ?? 'GvRadioGroup', GvRadioButton);\n },\n};\nexport default GvRadioButtonPlugin;\n\nexport { GvRadioButton };\n","<!--\n * @title: radio group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:10:40\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 09:03:41\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioGroupValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-group');\n\n export default defineComponent({\n name: 'GvRadioGroup',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioGroupValue>,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref<TRadioGroupValue | undefined>(props.value ?? undefined);\n const radioGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioGroupValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioGroupValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadioGroup\n class={prefixCls}\n aria-label={props.label}\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n size={radioGroupSize.value}\n onChange={handleChange}>\n {slots.default?.()}\n </ElRadioGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioGroup from './src/GvRadioGroup.vue';\n\nconst GvRadioGroupPlugin = {\n install(app: App): void {\n app.component(GvRadioGroup.name ?? 'GvRadioGroup', GvRadioGroup);\n },\n};\nexport default GvRadioGroupPlugin;\n\nexport { GvRadioGroup };\n","<!--\n * @title: row component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:49:52\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:36:24\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRow } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('row');\n\n export default defineComponent({\n name: 'GvRow',\n props: {\n gutter: {\n type: Number,\n default: 0,\n },\n tag: {\n type: String as PropType<string>,\n default: 'div',\n },\n },\n setup(props, { slots }) {\n return () => (\n <ElRow\n class={prefixCls}\n gutter={props.gutter}\n tag={props.tag}>\n {slots.default?.()}\n </ElRow>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvRow from './src/GvRow.vue';\n\nconst GvRowPlugin = {\n install(app: App): void {\n app.component(GvRow.name ?? 'GvRow', GvRow);\n },\n};\nexport default GvRowPlugin;\n\nexport { GvRow };\n","<!--\n * @title: screenfull\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:15:43\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-11-17 10:55:25\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useFullscreen } from '@vueuse/core';\n import { propTypes } from '../../utils/gv.propTypes';\n import { useStyle } from '@/hook/web/useStyle';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('screenfull');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { toggle, isFullscreen } = useFullscreen();\n\n const toggleFullscreen = () => {\n toggle();\n };\n</script>\n\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleFullscreen\">\n <GvIcon :icon-name=\"isFullscreen ? 'exit-fullscreen' : 'fullscreen'\" />\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-screenfull';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvScreenFull from './src/GvScreenFull.vue';\n// Define the install method on the GvButton component\nconst GvScreenFullPlugin = {\n install(app: App): void {\n app.component(GvScreenFull.name ?? 'GvScreenFull', GvScreenFull);\n },\n};\nexport default GvScreenFullPlugin;\n\nexport { GvScreenFull };\n","<!--\n * @title: search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:02:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-09 16:14:17\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText } from '@@/utils';\n import { computed, defineComponent, getCurrentInstance, inject, nextTick, onMounted, ref } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('search-bar');\n export default defineComponent({\n name: 'GvSearchBar',\n props: {\n expand: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n const visible = ref(props.expand);\n const searchFieldsCollapsed = inject<{ value: boolean }>('searchFieldsCollapsed', ref(true));\n // const formList = inject('formList') as Recordable[];\n const refForm = inject('refForm') as string;\n const instance = getCurrentInstance(); // get current vnode\n let formNode: any = instance;\n while (formNode && formNode.type?.name !== 'ElForm') formNode = formNode?.parent;\n\n const fieldList = ref<any[]>([]);\n const searchFormRows = appStore.searchFormRows;\n const showDefaultRow = searchFormRows === 1 ? 4 : 8;\n // @mounted\n onMounted(() => {\n nextTick(() => {\n // console.log(formNode.exposed.fields);\n fieldList.value = formNode.exposed.fields;\n });\n });\n // const gvSearchExpand = ref(null);\n // const gvSearchShrink = ref(null);\n\n // @methods\n /**\n * @todo: expand search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:45:03\n */\n const expandFields = () => {\n searchFieldsCollapsed.value = false;\n visible.value = false;\n };\n /**\n * @todo: shrink search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:48:18\n */\n const shrinkFields = () => {\n searchFieldsCollapsed.value = true;\n visible.value = true;\n };\n /**\n * @todo: create search button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:17:17\n */\n const createSearchBar = computed(() => {\n if (!fieldList.value?.length) return null;\n const searchBar: any[] = [];\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const defaultSlot = slots.default?.();\n if (defaultSlot) {\n defaultSlot.forEach((vnode) => {\n if (!vnode.props) vnode.props = {};\n const propsData = vnode.props;\n\n const type = vnode.type;\n if (typeof type === 'object' && 'name' in type && type.name === 'GvButton') {\n let text = getVNodeText(vnode);\n let searchBtnFlag = false;\n\n if (text === t('searchBar.search')) {\n if (buttonQuick) text = t('searchBar.search2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.search');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.seek')) {\n if (buttonQuick) text = t('searchBar.seek2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.seek');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.query')) {\n if (buttonQuick) text = t('searchBar.query2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.query');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.reset')) {\n if (buttonQuick) text = t('searchBar.reset2');\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.reset');\n if (buttonIcon) propsData.icon = 'el-icon-refreshLeft';\n propsData.bizType = 'reset';\n }\n }\n\n if (searchBtnFlag && propsData && propsData.type === undefined) propsData.type = 'primary';\n\n if (propsData) propsData.refForm = refForm;\n }\n searchBar.push(vnode);\n });\n\n // if (this.expand) {\n // add: 判断是否需要增加展开按钮 2022-04-22\n const fieldList2 = fieldList.value.filter((x) => {\n if (x.$el.hidden !== true) return true;\n });\n\n if (fieldList2.length > showDefaultRow) {\n let expandText = `${t('searchBar.expand')}`;\n if (buttonQuick) expandText = `${t('searchBar.expand')}(E)`;\n let shrinkText = `${t('searchBar.shrink')}`;\n if (buttonQuick) shrinkText = `${t('searchBar.shrink')}(E)`;\n const expand = (\n <GvButton\n link={true}\n bizType=\"expand\"\n visible={visible.value}\n onClick={expandFields}>\n {expandText} &nbsp;\n <GvIcon\n iconType=\"el\"\n iconName=\"arrowDown\"\n />\n </GvButton>\n );\n searchBar.push(expand);\n const shrink = (\n <GvButton\n link={true}\n bizType=\"shrink\"\n visible={!visible.value}\n onClick={shrinkFields}>\n {shrinkText} &nbsp;\n <GvIcon\n iconType=\"el\"\n iconName=\"arrowUp\"\n />\n </GvButton>\n );\n searchBar.push(shrink);\n }\n // }\n }\n return searchBar;\n });\n // @created\n\n // @render\n return () => <div class={prefixCls}>{createSearchBar.value}</div>;\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-search-bar';\n .#{$prefixCls} {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n padding-top: 0px;\n margin: 0 1px 6px 0;\n }\n</style>\n","import type { App } from 'vue';\nimport GvSearchBar from './src/GvSearchBar.vue';\n// Define the install method on the GvButton component\nconst GvSearchBarPlugin = {\n install(app: App): void {\n app.component(GvSearchBar.name ?? 'GvSearchBar', GvSearchBar);\n },\n};\nexport default GvSearchBarPlugin;\n\nexport { GvSearchBar };\n","import { ref, unref } from 'vue';\nimport { findPath } from '../../utils/gv.tree';\n\ntype OnlyOneChildType = AppRouteRecordRaw & { noShowingChildren?: boolean };\n\ninterface HasOneShowingChild {\n oneShowingChild?: boolean;\n onlyOneChild?: OnlyOneChildType;\n}\n\nexport const getAllParentPath = <T = Recordable>(treeData: T[], path: string) => {\n const menuList = findPath(treeData, (n) => n.path === path) as AppRouteRecordRaw[];\n return (menuList || []).map((item) => item.path);\n};\n\nexport const hasOneShowingChild = (parent: AppRouteRecordRaw, children: AppRouteRecordRaw[] = []): HasOneShowingChild => {\n const onlyOneChild = ref<OnlyOneChildType>();\n\n const showingChildren = children.filter((v) => {\n const meta = v.meta ?? {};\n if (meta.hidden) return false;\n else {\n // Temp set(will be used if only has one showing child)\n onlyOneChild.value = v;\n return true;\n }\n });\n\n // When there is only one child router, the child router is displayed by default\n if (showingChildren.length === 1)\n return {\n oneShowingChild: true,\n onlyOneChild: unref(onlyOneChild),\n };\n\n // Show parent if there are no child router to display\n if (!showingChildren.length) {\n onlyOneChild.value = { ...parent, path: '', noShowingChildren: true };\n return {\n oneShowingChild: true,\n onlyOneChild: unref(onlyOneChild),\n };\n }\n\n return {\n oneShowingChild: false,\n onlyOneChild: unref(onlyOneChild),\n };\n};\n","import { useI18n } from '@/hook/web/useI18n';\nimport type { RouteMeta } from 'vue-router';\nimport { GvIcon } from '../../../GvIcon';\nexport const useRenderMenuTitle = () => {\n const renderMenuTitle = (meta: RouteMeta) => {\n const { t } = useI18n();\n if (!meta) {\n return <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">No Title</span>;\n }\n const { title = 'Please set title', icon } = meta;\n\n return icon ? (\n <>\n <GvIcon\n iconName={meta.icon || ''}\n className=\"sub-el-icon\"></GvIcon>\n <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">{t(title as string)}</span>\n </>\n ) : (\n <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">{t(title as string)}</span>\n );\n };\n\n return {\n renderMenuTitle,\n };\n};\n","/*\n * @title: render menu item - useRenderMenuItem\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-07-15 15:07:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 14:34:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { useStyle } from '@/hook/web/useStyle';\nimport { isUrl, pathResolve } from '@@/utils';\nimport { ElMenuItem, ElSubMenu } from 'element-plus';\nimport { unref } from 'vue';\nimport { hasOneShowingChild } from '../helper';\nimport { useRenderMenuTitle } from './useRenderMenuTitle';\nconst { getPrefixCls } = useStyle();\nconst prefixCls = getPrefixCls('submenu');\n\nconst { renderMenuTitle } = useRenderMenuTitle();\n\nexport const useRenderMenuItem = (menuMode) =>\n // allRouters: AppRouteRecordRaw[] = [],\n {\n const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => {\n if (!routers || !routers.length) return null;\n return routers\n .filter((v) => !v.meta?.hidden)\n .map((v) => {\n const meta = v.meta ?? {};\n const { oneShowingChild, onlyOneChild } = hasOneShowingChild(v, v.children);\n const fullPath = isUrl(v.path) ? String(v.path) : pathResolve(parentPath, v.path); // getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/')\n if (oneShowingChild && (!onlyOneChild?.children || onlyOneChild?.noShowingChildren) && !meta?.alwaysShow) {\n return (\n <ElMenuItem index={onlyOneChild ? pathResolve(fullPath, onlyOneChild.path) : fullPath}>\n {{\n default: () => renderMenuTitle(onlyOneChild ? (onlyOneChild.meta ?? meta) : meta),\n }}\n </ElMenuItem>\n );\n } else {\n return (\n <ElSubMenu\n index={fullPath}\n teleported\n class=\"nest-menu\"\n popperClass={unref(menuMode) === 'vertical' ? `${prefixCls}-popper--vertical` : ''}>\n {{\n title: () => renderMenuTitle(meta),\n default: () => renderMenuItem(v.children!, fullPath),\n }}\n </ElSubMenu>\n );\n }\n });\n };\n return {\n renderMenuItem,\n };\n };\n","<!--\n * @title: left menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-30 16:12:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 15:14:41\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useAppStore } from '@/store/modules/app';\n import { usePermsStore } from '@/store/modules/perms';\n import { ElMenu, ElScrollbar } from 'element-plus';\n import { computed, defineComponent, unref, type PropType } from 'vue';\n import { useRenderMenuItem } from './components/useRenderMenuItem';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useRouter } from 'vue-router';\n import { isUrl } from '../../utils';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('sidebar');\n\n export default defineComponent({\n name: 'GvSidebar',\n props: {\n menuSelect: {\n type: Function as PropType<(index: string) => void>,\n default: undefined,\n },\n },\n setup(props) {\n const appStore = useAppStore();\n const layout = computed(() => appStore.getLayout);\n const { push, currentRoute } = useRouter();\n const permStore = usePermsStore();\n const menuMode = computed((): 'vertical' | 'horizontal' => {\n const vertical: LayoutType[] = ['default', 'topLeft', 'cutMenu'];\n\n if (vertical.includes(unref(layout))) return 'vertical';\n else return 'horizontal';\n });\n\n const routers = computed(() => (unref(layout) === 'cutMenu' ? permStore.getRouters : permStore.getRouters));\n\n // console.log(routers.value);\n\n const collapse = computed(() => appStore.getCollapseMenus);\n\n const leftMenuUniqueOpened = computed(() => appStore.getLeftMenuUniqueOpened);\n\n const activeMenu = computed(() => {\n const { meta, path } = unref(currentRoute);\n // if set path, the sidebar will highlight the path you set\n if (meta.activeMenu) return meta.activeMenu as string;\n\n return path;\n });\n\n const menuSelect = (index: string) => {\n props.menuSelect?.(index);\n\n // 自定义事件\n if (isUrl(index)) {\n window.open(index);\n return;\n }\n push(index);\n };\n\n const renderMenu = () => (\n <ElMenu\n defaultActive={unref(activeMenu)}\n mode={unref(menuMode)}\n collapse={unref(layout) === 'top' || unref(layout) === 'cutMenu' ? false : unref(collapse)}\n uniqueOpened={unref(layout) === 'top' ? false : unref(leftMenuUniqueOpened)}\n backgroundColor=\"var(--left-menu-bg-color)\"\n textColor=\"var(--left-menu-text-color)\"\n activeTextColor=\"var(--left-menu-text-active-color)\"\n popperClass={unref(menuMode) === 'vertical' ? `${prefixCls}-popper--vertical` : `${prefixCls}-popper--horizontal`}\n onSelect={menuSelect}>\n {{\n default: () => {\n const { renderMenuItem } = useRenderMenuItem(menuMode);\n // console.log('renderMenu', routers.value);\n return renderMenuItem(unref(routers));\n },\n }}\n </ElMenu>\n );\n const renderMenuWrap = () => {\n if (unref(layout) === 'top') return renderMenu();\n else return <ElScrollbar>{renderMenu()}</ElScrollbar>;\n };\n return () => (\n <div\n id=\"gv-sidebar\"\n class={[\n `${prefixCls} ${prefixCls}__${unref(menuMode)}`,\n 'h-[100%] overflow-hidden flex-col bg-[var(--left-menu-bg-color)]',\n {\n 'w-[var(--left-menu-min-width)]': unref(collapse) && unref(layout) !== 'cutMenu',\n 'w-[var(--left-menu-max-width)]': !unref(collapse) && unref(layout) !== 'cutMenu',\n },\n ]}>\n {renderMenuWrap()}\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-sidebar';\n\n .#{$prefixCls} {\n position: relative;\n transition: width var(--transition-time-02);\n\n :deep(.#{$elNamespace}-menu) {\n width: 100% !important;\n border-right: none;\n --el-menu-bg-color: var(--left-menu-bg-color);\n --el-menu-text-color: var(--left-menu-text-color);\n --el-menu-hover-text-color: var(--left-menu-text-active-color);\n --el-menu-active-color: var(--left-menu-text-active-color);\n --el-menu-hover-bg-color: var(--left-menu-hover-bg-color);\n\n // 设置选中时子标题的颜色\n .is-active {\n & > .#{$elNamespace}-sub-menu__title {\n color: var(--left-menu-text-active-color) !important;\n }\n }\n\n // 设置子菜单悬停的高亮和背景色\n .#{$elNamespace}-sub-menu__title,\n .#{$elNamespace}-menu-item {\n &:hover {\n color: var(--left-menu-text-active-color) !important;\n background-color: var(--left-menu-bg-color) !important;\n }\n }\n\n // 设置选中时的高亮背景和高亮颜色\n .#{$elNamespace}-menu-item.is-active {\n color: var(--left-menu-text-active-color) !important;\n background-color: var(--left-menu-bg-active-color) !important;\n\n &:hover {\n background-color: var(--left-menu-bg-active-color) !important;\n }\n }\n\n .#{$elNamespace}-menu-item.is-active {\n position: relative;\n }\n\n // 设置子菜单的背景颜色\n .#{$elNamespace}-menu {\n .#{$elNamespace}-sub-menu__title {\n background-color: var(--left-menu-bg-color) !important;\n }\n .#{$elNamespace}-menu-item:not(.is-active) {\n background-color: var(--left-menu-item-bg-light-color) !important;\n }\n }\n }\n\n // 折叠时的最小宽度\n :deep(.#{$elNamespace}-menu--collapse) {\n width: var(--left-menu-min-width);\n\n & > .is-active,\n & > .is-active > .#{$elNamespace}-sub-menu__title {\n position: relative;\n background-color: var(--left-menu-collapse-bg-active-color) !important;\n }\n }\n\n // 折叠动画的时候,就需要把文字给隐藏掉\n :deep(.horizontal-collapse-transition) {\n .#{$prefixCls}__title {\n display: none;\n }\n }\n\n // 水平菜单\n &__horizontal {\n height: calc(var(--top-tool-height)) !important;\n\n :deep(.#{$elNamespace}-menu--horizontal) {\n height: calc(var(--top-tool-height));\n border-bottom: none;\n // 重新设置底部高亮颜色\n & > .#{$elNamespace}-sub-menu.is-active {\n .#{$elNamespace}-sub-menu__title {\n border-bottom-color: var(--el-color-primary) !important;\n }\n }\n\n .#{$elNamespace}-menu-item.is-active {\n position: relative;\n\n &::after {\n display: none !important;\n }\n }\n\n .#{$prefixCls}__title {\n /* stylelint-disable-next-line */\n max-height: calc(var(--top-tool-height) - 2px) !important;\n /* stylelint-disable-next-line */\n line-height: calc(var(--top-tool-height) - 2px);\n }\n }\n }\n }\n</style>\n\n<style lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-sidebar-popper';\n\n .#{$prefixCls}--vertical,\n .#{$prefixCls}--horizontal {\n // 设置选中时子标题的颜色\n .is-active {\n & > .el-sub-menu__title {\n color: var(--left-menu-text-active-color) !important;\n }\n }\n\n // 设置子菜单悬停的高亮和背景色\n .el-sub-menu__title,\n .el-menu-item {\n &:hover {\n color: var(--left-menu-text-active-color) !important;\n background-color: #545658 !important;\n }\n }\n\n // 设置选中时的高亮背景\n .el-menu-item.is-active {\n position: relative;\n background-color: var(--left-menu-bg-active-color) !important;\n\n &:hover {\n background-color: var(--left-menu-bg-active-color) !important;\n }\n }\n }\n\n $submenu-prefix-cls: '#{$gvNamespace}-submenu-popper';\n\n // 设置子菜单溢出时滚动样式\n .#{$submenu-prefix-cls}--vertical {\n max-height: 100%;\n overflow-y: auto;\n\n &::-webkit-scrollbar {\n width: 6px;\n background-color: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgb(144 147 153 / 30%);\n border-radius: 4px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSidebar from './src/GvSidebar.vue';\n// Define the install method on the GvButton component\nconst GvSidebarPlugin = {\n install(app: App): void {\n app.component(GvSidebar.name ?? 'GvSidebar', GvSidebar);\n },\n};\nexport default GvSidebarPlugin;\n\nexport { GvSidebar };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABaCAYAAAAilKGMAAAACXBIWXMAAAZ2AAAGdgEpJm+AAAAKDGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYTZhNjM5NjhhLCAyMDI0LzAzLzA2LTExOjUyOjA1ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmQxNjAxODBkLTVlZmUtZjc0MS1iY2RhLTdjMDBjNTc4ZTVkMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDE1ZDUxNC05YzkxLTQwNTYtYTgzNS05YjZlYmRlOTQ5ZmEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB0aWZmOkltYWdlV2lkdGg9IjYzNiIgdGlmZjpJbWFnZUxlbmd0aD0iNjYwIiB0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb249IjIiIHRpZmY6U2FtcGxlc1BlclBpeGVsPSIzIiB0aWZmOlhSZXNvbHV0aW9uPSIxNDQvMSIgdGlmZjpZUmVzb2x1dGlvbj0iMTQ0LzEiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6RXhpZlZlcnNpb249IjAyMzEiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSI2MzYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSI2NjAiIHhtcDpDcmVhdGVEYXRlPSIyMDI0LTExLTI5VDEyOjQ4OjMzKzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNC0xMS0yOVQxMjo1MToyNCswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNC0xMS0yOVQxMjo1MToyNCswODowMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZiNWYzMGIyLWJmODgtNDQ3My1iMDk0LWIzMGUzYjkyMzczZiIgc3RFdnQ6d2hlbj0iMjAyNC0xMS0yOVQxMjo0OToxNyswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjExIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2UvanBlZyB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGltYWdlL2pwZWcgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MDg4Y2NiMi05NDFlLTQ1YmItOGZhZi02YjA5Mjc0M2Q0MDciIHN0RXZ0OndoZW49IjIwMjQtMTEtMjlUMTI6NDk6MTcrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNS4xMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NWQxNWQ1MTQtOWM5MS00MDU2LWE4MzUtOWI2ZWJkZTk0OWZhIiBzdEV2dDp3aGVuPSIyMDI0LTExLTI5VDEyOjUxOjI0KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMTEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmZiNWYzMGIyLWJmODgtNDQ3My1iMDk0LWIzMGUzYjkyMzczZiIgc3RSZWY6ZG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiLz4gPHRpZmY6Qml0c1BlclNhbXBsZT4gPHJkZjpTZXE+IDxyZGY6bGk+ODwvcmRmOmxpPiA8cmRmOmxpPjg8L3JkZjpsaT4gPHJkZjpsaT44PC9yZGY6bGk+IDwvcmRmOlNlcT4gPC90aWZmOkJpdHNQZXJTYW1wbGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+WfjB/QAAOnxJREFUeJztvXe4XFd19//Z+9Tp5famq2rJVnE3trGxMcY0h2KMDSb04NBCDIQQQgukvKTwQAKEEkIS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\"","<!--\n * @title: sidebar logo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-15 14:11:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 11:46:47\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { computed, onMounted, ref, unref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('logo');\n\n const appStore = useAppStore();\n\n const show = ref(true);\n const title = computed(() => appStore.getTitle);\n const layout = computed(() => appStore.getLayout);\n const collapseMenus = computed(() => appStore.getCollapseMenus);\n\n watch(\n () => collapseMenus.value,\n (collapse: boolean) => {\n if (unref(layout) === 'topLeft' || unref(layout) === 'cutMenu') {\n show.value = true;\n return;\n }\n show.value = !collapse;\n },\n );\n\n watch(\n () => layout.value,\n (layout) => {\n if (layout === 'top' || layout === 'cutMenu') show.value = true;\n else if (unref(collapseMenus)) show.value = false;\n else show.value = true;\n },\n );\n\n onMounted(() => {\n if (unref(collapseMenus)) show.value = false;\n });\n</script>\n\n<template>\n <div>\n <router-link\n :class=\"[prefixCls, layout !== 'default' ? `${prefixCls}__Top` : '', 'flex !h-[var(--logo-height)] items-center cursor-pointer pl-[8px] relative decoration-none overflow-hidden']\"\n to=\"/\">\n <img\n src=\"@/assets/imgs/logo.png\"\n class=\"w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]\" />\n <div\n v-if=\"show\"\n :class=\"[\n 'block whitespace-nowrap ml-[45px] mr-[0px] mt-[-25px] mb-[0px] text-[16px] font-bold',\n {\n 'text-[var(--logo-title-text-color)]': layout === 'default',\n 'text-[var(--top-header-text-color)]': layout === 'topLeft' || layout === 'top' || layout === 'cutMenu',\n },\n ]\">\n {{ title }}\n </div>\n </router-link>\n </div>\n</template>\n<style lang=\"scss\" scoped></style>\n","import type { App } from 'vue';\nimport GvSidebarLogo from './src/GvSidebarLogo.vue';\n// Define the install method on the GvButton component\nconst GvSidebarLogoPlugin = {\n install(app: App): void {\n app.component(GvSidebarLogo.name ?? 'GvSidebarLogo', GvSidebarLogo);\n },\n};\nexport default GvSidebarLogoPlugin;\n\nexport { GvSidebarLogo };\n","<!--\n * @title: table bar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:46:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:53\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { getVNodeName, getVNodeText } from '@@/utils';\n import { defineComponent, getCurrentInstance, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table-bar');\n export default defineComponent({\n name: 'GvTableBar',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const { t } = useBridgeI18n();\n // @watch\n\n // @methods\n const createTableBar = () => {\n const tableBar: VNode[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots) {\n const parentNode = instance?.parent;\n const refForm = parentNode?.attrs['ref-form'];\n\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const childrenNodes = (defaultSlots[0].children as VNode[]) || [];\n childrenNodes.forEach((vnode: VNode) => {\n const propsData = vnode.props || {};\n if (getVNodeName(vnode) === 'GvButton') {\n const text = getVNodeText(vnode);\n if (text.indexOf(t('tableBar.save')) !== -1 || text.indexOf(t('tableBar.add')) !== -1 || text.indexOf(t('tableBar.append')) !== -1 || text.indexOf(t('tableBar.create')) !== -1) {\n if (text === t('tableBar.add') && buttonQuick) {\n propsData.text = t('tableBar.add2');\n propsData.otext = text;\n } else propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-add';\n propsData.bizType = 'save';\n } else if (propsData.bizType === 'export') {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-daochu1';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.refresh')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-shuaxin';\n propsData.bizType = 'refresh';\n propsData.text = t('tableBar.refresh');\n } else if (text.indexOf(t('tableBar.templateDownload')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-xiazaidaorumoban1x';\n propsData.bizType = 'downloadTemplate';\n } else if (text.indexOf(t('tableBar.dispatch')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-winfo-icon-zhipai';\n propsData.bizType = 'dispatch';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.assign')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhipai';\n propsData.bizType = 'dispatch';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.calculate')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jisuan';\n propsData.text = text;\n propsData.bizType = 'calculate';\n } else if (text.indexOf(t('tableBar.trace')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiankongguanli';\n propsData.text = text;\n propsData.bizType = 'trace';\n } else if (text.indexOf(t('tableBar.receive')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-piliangbianji1';\n propsData.text = text;\n propsData.bizType = 'receive';\n } else if (propsData.bizType === 'import') {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-daoru2';\n propsData.text = text;\n propsData.bizType = 'import';\n } else if (text.indexOf(t('tableBar.generate')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zujian';\n propsData.text = text;\n propsData.bizType = 'generate';\n } else if (text.indexOf(t('tableBar.pay')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-yingshoukuan';\n propsData.text = text;\n propsData.bizType = 'pay';\n } else if (text.indexOf(t('tableBar.check')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-xuanze';\n propsData.text = text;\n propsData.bizType = 'check';\n } else if (text.indexOf(t('tableBar.reject')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-bohui';\n propsData.text = text;\n propsData.bizType = 'reject';\n } else if (text.indexOf(t('tableBar.approve')) !== -1 || text.indexOf(t('tableBar.audit')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-shenpi2';\n propsData.text = text;\n propsData.bizType = 'approve';\n } else if (text.indexOf(t('tableBar.logging')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-rizhi1';\n propsData.bizType = 'logging';\n } else if (text.indexOf(t('tableBar.select')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-chaxun';\n propsData.bizType = 'search';\n }\n // else if (text.indexOf('派') !== -1) {\n // // propsData.text = text;\n // propsData.icon = 'el-icon-finished';\n // propsData.bizType = 'confirm';\n // }\n else if (text.indexOf(t('tableBar.detail')) !== -1 || text.indexOf(t('table.list')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-mingxi';\n propsData.bizType = 'detail';\n } else if (text.indexOf(t('tableBar.withdraw')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-fanhui5';\n propsData.bizType = 'withdraw';\n } else if (text.indexOf(t('tableBar.submit')) !== -1 || text.indexOf('提报') !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tijiao';\n propsData.bizType = 'submit';\n } else if (text.indexOf(t('tableBar.delete')) !== -1 || text.indexOf(t('tableBar.cancel')) !== -1 || text.indexOf(t('tableBar.cancel1')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n propsData.bizType = 'delete';\n } else if (text.indexOf(t('tableBar.change')) !== -1 || text.indexOf(t('tableBar.update')) !== -1 || text.indexOf(t('tableBar.modify')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-edit-outline';\n propsData.bizType = 'update';\n } else if (text.indexOf(t('tableBar.sync')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tongbu1';\n propsData.bizType = 'update';\n } else if (text.indexOf(t('tableBar.untop')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-quxiaozhiding1';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.top')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhiding1';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.deserum')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-quxiaozhiding';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.unitPrice')) !== -1) {\n if (buttonIcon)\n // propsData.text = text;\n propsData.icon = 'iconfont gv-icon-jiangjinguize';\n else if (text.indexOf(t('tableBar.essence')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhiding';\n propsData.bizType = 'top';\n propsData.text = text;\n }\n } else if (text.indexOf(t('tableBar.relieve')) !== -1 || text.indexOf(t('tableBar.unbind')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiekou1';\n propsData.bizType = 'unbind';\n } else if (text.indexOf(t('tableBar.bind')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiekoushuoming';\n propsData.bizType = 'bind';\n } else if (text.indexOf(t('tableBar.confirm')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tianshenpi';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.notify')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-huodong';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.payment')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiage';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.transfer')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-fanhui5';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.putaway')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-top';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.soldOut')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-bottom';\n propsData.bizType = 'confirm';\n }\n propsData.refForm = refForm;\n } else if (getVNodeName(vnode) === 'ElDropdown') {\n const firstChild = vnode?.children?.[0];\n const text = getVNodeText(firstChild);\n propsData.text = text;\n propsData.icon = firstChild?.props.icon || '';\n }\n tableBar.push(vnode);\n });\n }\n return tableBar || [];\n };\n // console.log(tableBar);\n\n // @mounted\n\n // @render\n return () => (props.visible ? <div class={prefixCls}>{createTableBar()}</div> : null);\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-table-bar';\n .#{$prefixCls} {\n display: inline-block;\n height: 30px;\n padding-top: 3px;\n\n .el-dropdown {\n float: left;\n\n i {\n padding-right: 3px;\n color: var(--tableBarColor, $tableBarColor);\n\n & + span {\n margin-left: 3px;\n }\n }\n }\n\n :deep(.el-button) {\n float: left;\n height: 25px;\n padding: 2px 8px;\n margin-bottom: 2px;\n margin-left: 2px;\n color: var(--tableBarColor, $tableBarColor);\n text-align: left;\n background: #fff !important;\n border: 0;\n\n i {\n padding-right: 3px;\n color: var(--tableBarColor, $tableBarColor);\n\n & + span {\n margin-left: 3px;\n }\n }\n\n &:hover {\n background-color: rgb(0 82 156 / 5%) !important;\n }\n }\n\n .el-button.is-disabled {\n color: $textColor;\n\n :deep(i) {\n color: $textColor;\n }\n }\n }\n</style>\n","<!--\n * @title: tag component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:43:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:37:24\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTag, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, unref, type PropType } from 'vue';\n import type { TTagEffect, TTagType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tag');\n\n export default defineComponent({\n name: 'GvTag',\n props: {\n type: {\n type: String as PropType<TTagType>,\n default: 'primary',\n },\n closable: {\n type: Boolean,\n default: false,\n },\n effect: {\n type: String as PropType<TTagEffect>,\n default: 'light',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n round: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emits\n emits: ['click', 'close'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const tagSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @methods\n\n const handleClick = (event: MouseEvent) => {\n emit('click', event);\n };\n\n const handleClose = (event: Event) => {\n emit('close', event);\n };\n\n // @render\n return () => (\n <ElTag\n type={props.type}\n size={tagSize.value}\n round={props.round}\n closable={props.closable}\n effect={props.effect}\n class={prefixCls}\n onClick={handleClick}\n onClose={handleClose}>\n {slots.default?.()}\n </ElTag>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tag';\n .#{$prefixCls} {\n }\n</style>\n","/*\n * @title: table utils\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-09 17:50:09\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-09 11:28:48\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { FilterCondition, PageInfo } from '@@/GvTable/src/types';\nimport type { TableInstance } from 'element-plus';\nimport { message } from './gv.notify';\nimport { isEmpty, toHump, toLine } from './index';\n/**\n * @todo: page info condition\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 09:09:54\n * @param {PageInfo} pi\n */\nexport const appendPageInfo = (pi?: PageInfo): PageInfo => {\n const pageInfo: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n const currentpagenum = pi && pi['currentpagenum'] ? pi['currentpagenum'] : 1;\n const recordsperpage = pi && pi['recordsperpage'] ? pi['recordsperpage'] : 10;\n const countrows = pi && pi['countrows'] ? pi['countrows'] : 0;\n const totalpage = pi && pi['totalpage'] ? pi['totalpage'] : 0;\n pageInfo['currentpagenum'] = currentpagenum;\n pageInfo['recordsperpage'] = recordsperpage;\n pageInfo['countrows'] = countrows;\n pageInfo['totalpage'] = totalpage;\n return pageInfo;\n};\n\n/**\n * @todo: common query combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:08:33\n * @param {TableInstance} tabNode\n * @param {Recordable} filter\n */\nexport const combined = (tabNode: TableInstance, filter: Recordable<any>): Recordable<FilterCondition | PageInfo> => {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n if (!isEmpty(filter))\n Object.keys(filter).forEach((x: string) => {\n let val: string = '';\n let co = 'null';\n if (!isEmpty(filter[x])) {\n let sOp = '=';\n if (typeof filter[x] === 'object')\n if (Array.isArray(filter[x] as any[])) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (filter[x] as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else {\n const v = filter[x] as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n val = val + '';\n if (val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n const ds = toLine(x);\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n let type = 'text';\n if (type !== 'dic' && (x.indexOf('id') >= 0 || x.indexOf('Id') >= 0)) type = 'number';\n\n condition['id'] = x;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = 'null';\n condition['ki'] = type;\n filterConditions[x] = condition;\n }\n });\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = (tabNode.$.props?.['pageSize'] as number) ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: form search combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:31:41\n * @param {FormItem} formList\n * @param {Recordable} filter\n * @param {VNode} tabNode\n */\nexport const searchCombined = (formList: FormItem[], filter: Recordable<any>, tabNode: TableInstance): Recordable<FilterCondition | PageInfo> => {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n // console.log(formList);\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n const { action, field, op = 'like', upper = false, showLabel, dateType } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (isEmpty(val)) continue;\n // 对于日期范围选择\n if (Array.isArray(val)) if (isEmpty(val[0])) continue;\n // if (type !== 'dic' && (field.indexOf('id') >= 0 || field.indexOf('Id') >= 0))\n // type = 'number';\n // console.log(val);\n let sOp = op;\n if (type === 'dic') {\n if (Array.isArray(val)) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (val as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (showLabel) {\n // 单选字典\n co = val + '';\n val = showLabel;\n } else {\n const v = val as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n\n sOp = '=';\n } else if (type === 'date' || type === 'datetime' || type === 'time') {\n if (op === 'like') sOp = '=';\n if (dateType === 'daterange' || dateType === 'datetimerange' || dateType === 'timerange' || dateType === 'monthrange') val = (val as any[]).join(',');\n } else if (type === 'number') sOp = '=';\n\n let sType = type;\n if (dateType === 'monthrange') sType = 'month';\n\n val = val + '';\n if (!action && val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n\n sOp = sOp.replace(/</gi, '&lt;');\n sOp = sOp.replace(/>/gi, '&gt;');\n let ds = toLine(field);\n // 多表关联判断是否带表别名 2022-06-23\n if (ds.indexOf('@') > 0) ds = ds.replace('@', '.');\n\n if (upper === true) {\n if (co && co !== 'null') co = co.toUpperCase();\n val = val.toUpperCase();\n // 将ds转为upper函数\n ds = 'upper(' + ds + ')';\n }\n\n condition['id'] = field;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = action || 'null';\n condition['ki'] = sType || 'text';\n filterConditions[field] = condition;\n }\n }\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = (tabNode.$.props?.['pageSize'] as number) ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: save combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:43:03\n * @param {FormItem} formList\n * @param {Recordable} filter\n */\nexport const saveCombined = (formList: FormItem[], filter: Recordable<any>): Recordable<any> => {\n const filterConditions = {};\n\n try {\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const { action, field, showLabel } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (val === undefined || val === null) continue;\n if (type === 'dic')\n if (showLabel)\n if (Array.isArray(val)) {\n // 多选字典\n let coo = '';\n const labels = '';\n val.forEach((x) => {\n let v: string;\n if (typeof x === 'object') v = x.value;\n else v = x + '';\n if (coo) coo += ',' + v;\n else coo = v;\n });\n co = coo;\n val = labels;\n } else if (typeof val === 'object') {\n co = val.value;\n val = val.label;\n } else {\n co = val + '';\n val = showLabel;\n }\n else if (Array.isArray(val)) {\n // 多选字典\n let coo = '';\n let labels = '';\n val.forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (typeof val === 'object') {\n co = val.value;\n val = val.label;\n } else\n // if (typeof val !== 'object' && item.dicType.indexOf('t#') >= 0) {\n // Notify.message('[' + field + ']: 字典值设置不正确', 'error');\n // throw new Error('[' + field + ']: 字典值设置不正确');\n // }\n co = val;\n else {\n val = val + ''; // fixme: 对于id等数字,转换为字符类型,防止indexOf出错\n co = val + '';\n }\n if (co === null || co === undefined) {\n message('[' + field + ']: dict value is null', 'error');\n throw new Error('[' + field + ']: dict value is null');\n }\n if (!action && co.indexOf(',') > 0) co = co.replace(/,/g, ',');\n const ds = toHump(field);\n\n filterConditions[ds] = co;\n }\n }\n } catch (error) {\n console.log(error);\n throw new Error('combined data error:' + error);\n }\n return filterConditions;\n};\n","/*\n * @title: crud methods utils\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-25 15:07:35\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-09 17:43:39\n * @version: 1.0.8\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { PageInfo } from '@@/GvTable/src/types/index';\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport type { FormInstance, TableInstance } from 'element-plus';\nimport type { ComponentInternalInstance, VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { appendPageInfo, combined, saveCombined, searchCombined } from './gv.table';\nimport { getVNodeName, isEmpty } from './index';\n/**\n * @todo: common fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:55:17\n * @param {function} fetch\n * @param {any} data\n */\nconst fetchData = async (fetch: AsyncFn, data: any): Promise<any> => {\n let result = {};\n await fetch(data).then((res) => {\n result = res.datas;\n });\n\n return result;\n};\n\n/**\n * @todo: common submit fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:39:01\n */\nconst submit = async (fetch: AsyncFn, data: any, hasMsg = true, msg?: string): Promise<any> => {\n let result = {};\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '操作成功';\n else msgs = 'Operate Ok';\n }\n await fetch(data).then((res) => {\n result = res.datas;\n if (hasMsg) message(msgs, 'success');\n });\n\n return result;\n};\n/**\n * @todo: common fetch table data(with pagination)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:40:36\n */\nconst fetchTable = async (tabNode: TableInstance, fetch: AsyncFn, data: any) => {\n if (tabNode === undefined || tabNode === null) {\n message('table object is null', 'error');\n return false;\n }\n let result = {};\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n\n const filterConditions = combined(tabNode, data);\n if (tabNode) {\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n }\n exposed.startLoading();\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.stopLoading();\n return result;\n};\n\n/**\n * @todo: validate form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:42:22\n */\nconst checkForms = async (fmNodes: FormInstance[]) => {\n if (fmNodes === undefined || fmNodes === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = true;\n for (const fmNode of fmNodes) {\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n await fmNode2.component.exposed\n .validate()\n .then(() => {\n // todo\n })\n .catch(() => {\n // throw new Error(e);\n result = false;\n Promise.reject('The form failed validation');\n });\n }\n }\n\n return result;\n};\n\n/**\n * @todo: save form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:45:03\n */\nconst save = async (fmNode: FormInstance, fetch: AsyncFn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result: Recordable<any> | null = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save OK.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n result = null;\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n return null;\n }\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n result = null;\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n result = null;\n return;\n }\n })\n .catch(() => {\n // throw new Error(e);\n Promise.reject('The form failed validation');\n result = null;\n });\n }\n\n return result;\n};\n\n/**\n * @todo: update form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:49:05\n */\nconst update = async (fmNode: FormInstance, id: number, fetch: Async2Fn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (isEmpty(id)) {\n message('pk is null', 'error');\n return false;\n }\n let result: Recordable<any> | null = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save Ok.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n result = null;\n console.log(error);\n });\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n result = null;\n console.log(error);\n });\n })\n .catch(() => {\n result = null;\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list with form and table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:11:42\n */\nconst search = async (fmNode: FormInstance, tabNode: TableInstance, fetch: AsyncFn) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (tabNode === undefined || tabNode === null) {\n message('table object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n // 解析检索条件\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 拼接查询条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(formList);\n const filterConditions = searchCombined(formList, filter, tabNode);\n // console.log(filterConditions);\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n exposed.startLoading();\n\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x: VNode) => {\n if (getVNodeName(x) === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n // fixme: 清空列表表头筛选框 2022-12-14\n const tableEl = tabNode.$el as HTMLElement;\n const tableHeader = tableEl.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const tableFixedHeader = tableEl.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n const columns = tableHeader?.querySelectorAll('.el-table__cell');\n const len = columns?.length || 0;\n for (let i = 0; i < len; i++) {\n const h = columns?.[i]?.querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n }\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.stopLoading();\n })\n .catch(() => {\n exposed.stopLoading();\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list without form but with table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:22:00\n * @param {*} tabNode\n * @param {*} fetch\n * @param {*} data\n */\nconst searchNoFm = async (tabNode: any, fetch: AsyncFn, data: any) => {\n if (tabNode === undefined || tabNode === null) {\n message('table object is null', 'error');\n return false;\n }\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n let result = {};\n const filterConditions = combined(tabNode, data);\n // console.log(JSON.stringify(filterConditions));\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n exposed.startLoading();\n\n exposed.startLoading();\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x: VNode) => {\n if (getVNodeName(x) === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.stopLoading();\n\n return result;\n};\n\n/**\n * @todo: jump to new page search\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:23:46\n * @param {*} tabNode\n * @param {*} filterConditions\n * @param {*} fetch\n * @param {*} pageInfo\n */\nconst toNewPageSearch = async (tabNode: ComponentInternalInstance | null, filterConditions: Recordable<any>, fetch: AsyncFn, pageInfo: PageInfo) => {\n if (filterConditions === undefined || filterConditions === null) {\n console.log('分页查询失败: 过滤条件为空', 'error');\n return false;\n }\n if (fetch === undefined || fetch === null) {\n message('Paging query failed: Request method is empty', 'error');\n return false;\n }\n let result: Recordable<any> = [];\n const exposed = tabNode?.exposed;\n exposed?.startLoading();\n\n const sfc = filterConditions || {};\n if (sfc['pageinfo'] === undefined) sfc['pageinfo'] = appendPageInfo() as PageInfo;\n // 更新pageinfo\n sfc['pageinfo'].currentpagenum = pageInfo.currentpagenum;\n sfc['pageinfo'].recordsperpage = pageInfo.recordsperpage;\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n console.log(error);\n });\n\n exposed?.stopLoading();\n\n return result;\n};\n\n/**\n * @todo: 转换单个结果集对象\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 10:11:53\n * @param {*} result\n */\nconst trans = (result) => result;\n\n/**\n * @todo: table insert row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:27:57\n * @param {*} searchData\n * @param {*} result\n */\nconst insertResult = (searchData: Recordable<any>, result: any) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return;\n }\n if (result === null || result === undefined) return false;\n\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else searchData.records.splice(0, 0, trans(result));\n\n return true;\n};\n\n/**\n * @todo: table update row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:28:33\n * @param {*} searchData\n * @param {*} result\n * @param {*} rownums\n */\nconst updateResult = (searchData: any, result: any, rownums: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined) return false;\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else {\n const currentRowArr = searchData.records.filter((x: any) => {\n if (x.rownums === rownums) return true;\n });\n const currentRow = currentRowArr[0];\n Object.keys(result).forEach((x) => {\n if (x !== 'rownums') currentRow[x] = result[x];\n });\n }\n return true;\n};\n\n/**\n * @todo: table remove row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:29:10\n * @param {*} searchData\n * @param {*} index\n */\nconst removeResult = (searchData: any, index: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n searchData.records.splice(index, 1);\n // 设置总条数 - 1\n if (searchData.total) searchData.total = searchData.total - 1;\n\n return true;\n};\n\n/**\n * @todo: 从后端字典对象 { c, v, e, l1, l2 } 取当前语言展示文本\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-03 18:21:13\n * @param {Recordable} dictObj\n * @param {string} lang\n */\nconst getDictDisplayLabel = (dictObj: Recordable<any>, lang?: string | null): string => {\n if (!dictObj || typeof dictObj !== 'object') return '';\n const locale = lang || 'zh-CN';\n switch (locale) {\n case 'en':\n return dictObj.e ?? dictObj.e ?? dictObj.v ?? '';\n case 'l1':\n return dictObj.l1 ?? dictObj.l1 ?? dictObj.v ?? '';\n case 'l2':\n return dictObj.l2 ?? dictObj.l2 ?? dictObj.v ?? '';\n case 'zh-CN':\n default:\n return dictObj.v ?? dictObj.c ?? '';\n }\n};\n\n/**\n * @todo: reset form edit\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:36:39\n * @param {FormItem[]} formList\n */\nconst resetEditValue = (formList: FormItem[]) => {\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n formList.forEach((x) => {\n if (x.type !== 'blank' && x.keep !== true)\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n x.value = '';\n break;\n case 'date':\n x.value = '';\n break;\n case 'dic':\n x.value = '';\n x.showLabel = '';\n break;\n }\n });\n};\n\n/**\n * @todo: table set form value\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:30:16\n * @param {*} formList\n * @param {*} rowData\n */\nconst setEditValue = (formList: FormItem[], rowData: Recordable<any>) => {\n // console.log(rowData);\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (rowData === null || rowData === undefined) {\n message('Set data is null', 'error');\n return false;\n }\n resetEditValue(formList);\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang') || 'zh-CN';\n if (Object.keys(rowData).length !== 0)\n formList.forEach((x) => {\n const fieldValue = rowData[x.field];\n if (fieldValue !== undefined)\n if (x.type !== 'blank' && x.keep !== true)\n // const dicType = x.dicType;\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n if (fieldValue !== null && typeof fieldValue === 'object') x.value = fieldValue.c;\n else x.value = fieldValue;\n break;\n case 'date':\n if (x.dateType === 'daterange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'datetime':\n if (x.dateType === 'datetimerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'time':\n if (x.dateType === 'timerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'layer':\n if (Array.isArray(fieldValue)) x.value = fieldValue;\n else if (fieldValue) {\n const arr = fieldValue.split(',');\n // const arr = [1, '2', 'a'];\n const arr2 = arr.map((x) => {\n if (!isNaN(parseInt(x))) return x * 1;\n else return x;\n });\n x.value = arr2;\n // console.log(x.value);\n } else x.value = [];\n\n break;\n case 'dic':\n // console.log(rowData[x.field]);\n // if (dicType && dicType.indexOf('t#') !== -1)\n // x.value = rowData[x.field];\n // else {\n // fixme: 增加枚举字典类型赋值 2022-11-07\n if (x.dicType && x.dicType.indexOf('e#') >= 0) {\n if (typeof x.value !== 'object') {\n const enums = x.dicType.split('#');\n const items = enums[1].split(':');\n\n for (let i = 0; i < items.length; i++) {\n const itemChild = items[i].split('=');\n if (itemChild[0] === fieldValue + '') {\n x.value = fieldValue;\n x.showLabel = itemChild[1];\n break;\n }\n }\n }\n } else if (x.multiple)\n if (fieldValue !== null) {\n // 多选字典\n if (typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const c = dictObj.c;\n const v = getDictDisplayLabel(dictObj, lang);\n\n if (c) {\n const codes = c.split(',');\n const labels = v ? v.split(',') : [];\n x.value = codes.map((code: string, i: number) => ({\n value: code,\n label: labels[i] ?? code,\n }));\n x.showLabel = labels;\n } else {\n x.value = [];\n x.showLabel = [];\n }\n } else if (typeof fieldValue === 'string') {\n const c = fieldValue;\n if (c) {\n const op = [];\n c.split(',').forEach((x) => {\n const o: Recordable<any> = {};\n o.value = x;\n (op as Recordable<any>[]).push(o);\n });\n x.value = op;\n } else x.value = [];\n }\n } else x.value = fieldValue;\n else if (fieldValue !== null && typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const code = String(dictObj.c ?? '').trim();\n const label = getDictDisplayLabel(dictObj, lang).trim();\n if (!code && !label) {\n x.value = '';\n x.showLabel = '';\n } else {\n x.value = { value: code, label: label || code };\n x.showLabel = label || code;\n }\n } else x.value = fieldValue;\n\n break;\n default:\n x.value = fieldValue;\n break;\n }\n });\n // formList = newList;\n};\n\nconst crud = {\n fetchData,\n submit,\n fetchTable,\n save,\n update,\n search,\n searchNoFm,\n toNewPageSearch,\n insertResult,\n updateResult,\n removeResult,\n setEditValue,\n resetEditValue,\n checkForms,\n};\n\nexport { crud };\n","<!--\n * @title: table component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:32:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:08:00\n * @version: 1.0.9\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStorage } from '@/hook/web/useStorage';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvIcon } from '@@/GvIcon';\n import { GvInput } from '@@/GvInput';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import type { TPopoverPlacement } from '@@/GvPopover/src/types';\n import { GvTableBar } from '@@/GvTableBar';\n import GvTag from '@@/GvTag/src/GvTag.vue';\n import { debounce, hasClass, hasScrollbar, isEqual, toLine } from '@@/utils';\n import { crud } from '@@/utils/gv.crud';\n import { message } from '@@/utils/gv.notify';\n import { Operation, Refresh } from '@element-plus/icons-vue';\n import {\n ElButton,\n ElButtonGroup,\n ElCheckbox,\n ElDivider,\n ElPagination,\n ElPopover,\n ElRadio,\n ElRadioGroup,\n ElTable,\n ElTableColumn,\n ElTooltip,\n ElTree,\n useGlobalConfig,\n type ComponentSize,\n type TableColumnCtx,\n type TableInstance,\n } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, ref, unref, watch, type PropType, type VNode } from 'vue';\n import type { FilterCondition, PageInfo } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table');\n /** 表头筛选 Popover:覆盖 EP 默认 150px,按内容自适应宽度 */\n const tableHeadFilterPopoverPopperStyle = {\n width: 'max-content',\n minWidth: '180px',\n maxWidth: 'min(420px, 90vw)',\n };\n export default defineComponent({\n name: 'GvTable',\n props: {\n refTable: {\n type: String,\n required: false,\n default: undefined,\n },\n tableHead: {\n type: Array as PropType<TableHeadItem[]>,\n required: true,\n default: () => [],\n },\n tableData: {\n type: Object as PropType<Recordable<any>>,\n required: false,\n default: () => {},\n },\n height: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n maxHeight: {\n type: [Number, String, undefined] as PropType<number | string | undefined>,\n required: false,\n default: undefined,\n },\n maxWidth: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n pageSize: {\n type: Number,\n required: false,\n default: 10,\n },\n rowClassName: {\n type: Function,\n required: false,\n default: () => {},\n },\n rowStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n spanMethod: {\n type: Function,\n required: false,\n default: () => {},\n },\n cellStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n // tableImport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n // tableExport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n tableType: {\n type: String,\n required: false,\n default: undefined,\n },\n tableSort: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableKit: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableBar: {\n type: Boolean,\n required: false,\n default: true,\n },\n border: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableFetch: {\n type: Function,\n required: false,\n default: () => {},\n },\n multi: {\n // 是否多选\n type: Boolean,\n required: false,\n default: false,\n },\n layout: {\n type: String,\n required: false,\n default: 'total, sizes, prev, pager, next, jumper',\n },\n isShowPage: {\n type: Boolean,\n required: false,\n default: true,\n },\n total: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: 'default',\n },\n tableInit: {\n type: Boolean,\n required: false,\n default: false,\n },\n beforeImport: {\n type: Function,\n required: false,\n default: undefined,\n },\n tableFilter: {\n type: Object,\n required: false,\n default: undefined,\n },\n tableCb: {\n type: Function,\n required: false,\n default: undefined,\n },\n expandRowKeys: {\n type: Array,\n required: false,\n default: undefined,\n },\n limitHeight: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableAction: {\n type: String,\n required: false,\n default: 'left',\n },\n tableActionIcon: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n emits: ['row-dblclick'],\n // emit\n setup(props, { slots, expose, emit, attrs }) {\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { getStorage } = useStorage('localStorage');\n const instance = getCurrentInstance();\n let lang = 'zh-CN';\n const sTableAction = appStore.tableAction || props.tableAction;\n const sTableActionIcon = appStore.tableActionIcon;\n const sTableConfirm = appStore.buttonConfirm;\n const detailPlacement: TPopoverPlacement = sTableAction === 'left' ? 'right-start' : 'left-start';\n let sTableType = props.tableType;\n let originTableHead: TableHeadItem[] = props.tableHead;\n let tableHeads: TableHeadItem[] = [];\n const vref = 'gv-table-' + props.refTable;\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n\n const sHeight = props.height;\n const sMaxHeight = ref(props.maxHeight);\n const sMaxWidth = ref(props.maxWidth || '100%');\n const loading = ref(false);\n let isEditTable = false; // 是否是编辑列表\n const pageInfo = ref<PageInfo>({\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n });\n const filterConditions: FilterCondition[] = [];\n let sPageSize = props.pageSize;\n\n const resultData = ref(props.tableData);\n const recordsList = ref(props.tableData?.records || []);\n const pageSizes = [10, 20, 50, 100, 200, 500];\n let filterHeads: string[] = []; // 表头Q过滤列缓存\n const popoverVisible = ref({}); // popover筛选使用\n const exportBtnDisabled = ref(true); // 导出按钮disabled\n const exportBtnLoading = ref(false); // 导出按钮loading\n const importBtnLoading = ref(false); // 导入按钮loading\n const tableSortMode = ref(1); // 列表默认排序方式\n const exportDialogShow = ref(false); // 导出列弹出框\n const importDialogShow = ref(false); // 导入弹出框\n const sTableBar = ref(props.tableBar); // 是否显示tablebar\n const gTableBar = appStore.tableBar;\n const tableSearchShow = ref(false); // 是否带有table search框\n const sTableSort = ref(props.tableSort); // 是否显示排序模式框\n const sTableKit = ref(props.tableKit); // 是否显示工具按钮\n const showPopoverDetail = null;\n const pageLayout = ref(props.layout);\n let actionWidth: number = 0; // 操作列宽度\n let transHash: Recordable<string> | null = null; // 列表列缓存\n const headColumn = ref<VNode[]>([]); // 列表列\n const headColumnInit = ref<VNode[]>([]);\n\n const columnSums: string[] = []; // 合计列\n const columnSumsDecimal: number[] = []; // 合计列位数\n const isIndeterminate = ref([]); // 表头筛选全选\n\n let isAnchor = false; // 是否锚点中列表\n let isScrollbar = false; // 是否dialog中有滚动条\n let isEditContainer = false; // 是否是editContainer标签内\n const columnTreeList = ref([]); // 列表显示、排序数组\n const columnCheckedKeys = ref<string[]>([]); // 列表显示、排序选中数组\n const storageKey = props.refTable + '-' + userStore.loginAccount; // localStorage存储列表字段key\n let lsTableHeads = '';\n let debounceSearch;\n const tableRefs = ref<Record<string, TableInstance | null>>({}); // 表单实例引用,默认空对象\n const tableRef = ref<TableInstance | null>(null); // ElForm 元素引用\n\n // @computed\n const tableSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n /**\n * @todo: pageinfo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:15:00\n */\n const getPageInfo = computed((): PageInfo => {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n if (resultData.value && resultData.value.records !== undefined) {\n pi['currentpagenum'] = resultData.value.current;\n pi['totalpage'] = resultData.value.pages;\n // if (this.sPageSize)\n // pi['size'] = this.sPageSize;\n // else\n pi['recordsperpage'] = resultData.value.size;\n pi['countrows'] = resultData.value.total;\n }\n return pi;\n });\n\n // @method\n\n const setTableRef = (el: TableInstance | null) => {\n tableRef.value = el;\n if (el && props.refTable) tableRefs.value[vref] = el;\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal)\n if (!isEqual(newVal[key], oldVal[key])) {\n diff = true;\n break;\n }\n\n return diff;\n };\n\n /**\n * @todo: close all filter popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 13:17:27\n * @param {*} property\n */\n const closeAllPopover = (property?: string) => {\n const next = { ...popoverVisible.value };\n Object.keys(next).forEach((key) => {\n if (key !== property) next[key] = false;\n });\n popoverVisible.value = next;\n };\n\n const ensurePopoverKey = (propKey: string) => {\n if (popoverVisible.value[propKey] === undefined) popoverVisible.value = { ...popoverVisible.value, [propKey]: false };\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n /** 阻止表头/表格事件冒泡,避免点击筛选面板内输入框时关闭 Popover */\n const wrapPopoverFilterBody = (body: VNode) => (\n <div\n class=\"table-popover__content\"\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onClick={(e: MouseEvent) => e.stopPropagation()}>\n {body}\n </div>\n );\n const getScrollLeft = () => {\n closeAllPopover();\n };\n\n const startLoading = () => {\n loading.value = true;\n };\n const stopLoading = () => {\n loading.value = false;\n };\n\n /**\n * @todo: calculate max height\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:16:19\n * @param {*} rootEl\n */\n const getMaxHeight = (rootEl: HTMLElement | undefined) => {\n if (props.limitHeight)\n if (!isEditContainer)\n if (!isScrollbar)\n if (!isAnchor) {\n if (props.tableType !== 'detail')\n if (props.tableType === 'import') sMaxHeight.value = undefined;\n else if (props.maxHeight)\n // if (this.sTableType === 'expand')\n // this.sMaxHeight = undefined;\n // else\n sMaxHeight.value = props.maxHeight;\n else {\n // tab table\n // const tabPane = this.$el.closest('.el-tabs');\n const tabPane = rootEl?.closest('.el-tab-pane');\n // alert(tabPane.clientHeight);\n if (tabPane) {\n // const offsetTop = tabPane.classList.contains('el-tabs--left') ? 235 : 295;\n if (props.isShowPage) sMaxHeight.value = tabPane.clientHeight - 135;\n else sMaxHeight.value = tabPane.clientHeight - 85;\n // sMaxHeight = document.documentElement.clientHeight - tabPane.offsetTop - offsetTop;\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer)\n // sMaxHeight = sMaxHeight + 30;\n sMaxHeight.value = undefined;\n } else sMaxHeight.value = undefined; // sMaxHeight = sMaxHeight + 30;\n } else {\n // common table\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n // console.log(document.documentElement.clientHeight);\n // console.log(rootEl?.offsetTop);\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 150;\n // console.log(sMaxHeight);\n } // dialog\n else sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 265;\n }\n }\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n if (sMaxHeight.value && Number(sMaxHeight.value) < 150) sMaxHeight.value = undefined;\n };\n\n /**\n * @todo: trans records\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:33:48\n * @param {*} loadAction\n */\n const transRecords = (loadAction?: string) => {\n if (recordsList.value && recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n }\n // add: 增加查询回调方法 2022-11-23\n if (loadAction !== 'create' && props.tableCb) props.tableCb(recordsList.value, resultData.value);\n };\n\n /**\n * @todo: handle import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:43:56\n */\n const handleImport = () => {\n if (props.beforeImport)\n if (props.beforeImport(props.refTable, tableHeads, props.tableData)) {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n } else importDialogShow.value = false;\n else {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n }\n };\n\n const handleExport = () => {\n exportDialogShow.value = true;\n // 设置loading\n exportBtnLoading.value = true;\n };\n\n /**\n * @todo: import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:41:45\n */\n const getImportBtn = computed(() => {\n if (slots.import?.()) {\n let buttonName = t('tableBar.import');\n if (slots.import?.()[0].props?.['import-name']) buttonName = slots.import?.()[0].props?.['import-name'];\n const ref = 'gv-import-' + props.refTable;\n return (\n <GvButton\n bizType=\"import\"\n ref={ref}\n onClick={handleImport}\n loading={importBtnLoading.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: get export btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:22:42\n * @param {*} computed\n */\n const getExportBtn = computed(() => {\n if (slots.export?.()) {\n let buttonName = t('common.export');\n if (slots.export?.()[0].props?.['export-name']) buttonName = slots.export?.()[0].props?.['export-name'];\n const ref = 'gv-export-' + props.refTable;\n return (\n <GvButton\n bizType=\"export\"\n ref={ref}\n onClick={handleExport}\n loading={exportBtnLoading.value}\n disabled={exportBtnDisabled.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: change page size\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 17:24:46\n */\n const runPageSearch = async () => {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n\n const handleSizeChange = async (val: number) => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n pageInfo.value.recordsperpage = val;\n pageInfo.value.currentpagenum = 1;\n sPageSize = val;\n await runPageSearch();\n };\n\n const handleCurrentChange = async (val: number) => {\n pageInfo.value.currentpagenum = val;\n await runPageSearch();\n };\n\n /**\n * @todo: 查询输入框输入响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-19 15:18:03\n * @param {*} val\n */\n const handleTableSearchInput = (val) => {\n debounceSearch(val);\n };\n\n /**\n * @todo: search table input event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-26 22:06:01\n * @param {*} val\n */\n const handleTableSearch = async (val: string) => {\n const fh = {};\n let strFh = '';\n filterHeads.forEach((x: string) => {\n // fixme: 转换@为. 2022-07-20\n let y = x;\n if (y.indexOf('@') > 0) y = y.replace('@', '.');\n if (strFh === '') strFh = toLine(y);\n else strFh += ',' + toLine(y);\n });\n const v = val + '';\n fh['fields'] = strFh;\n fh['val'] = v.trim();\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC['searchfilter'] = fh;\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetch) {\n message(t('table.execSearchWarn'));\n return;\n }\n\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n /**\n * @todo: 列表search框\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-30 17:24:09\n */\n const getTableSearch = () =>\n tableSearchShow.value === true ? (\n <div class=\"gv-table__search\">\n <GvInput\n id=\"gv-table-search\"\n placeholder={`${t('table.tableSearch')}(+)..`}\n prefixIcon=\"gv-icon-sousuo\"\n size=\"default\"\n class=\"gv-table__search-input\"\n onInput={handleTableSearchInput}></GvInput>\n </div>\n ) : null;\n\n /**\n * @todo: table head popover show\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-08 10:43:51\n */\n const handlePopoverShow = () => {\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n if (rootEl) {\n const popOvers = document.querySelectorAll('body>.table-popover');\n const tableBodyWidth = (rootEl.querySelector('.el-table__body-wrapper >.el-table__body') as HTMLElement)?.style.width;\n const clientWidth = document.body.clientWidth - 200 - 20;\n for (let i = 0; i < popOvers.length; i++)\n if ((popOvers[i] as HTMLElement).style.display !== 'none') {\n const bodyWrapper = rootEl.querySelector('.el-table__body-wrapper') as HTMLElement;\n if (bodyWrapper?.scrollLeft ?? 0)\n (popOvers[i] as HTMLElement).style.left = parseInt(tableBodyWidth) - clientWidth + parseInt((popOvers[i] as HTMLElement).style.left) - (bodyWrapper?.scrollLeft ?? 0) + 'px';\n else (popOvers[i] as HTMLElement).style.left = parseInt((popOvers[i] as HTMLElement).style.left) - (bodyWrapper?.scrollLeft ?? 0) + 'px';\n }\n }\n });\n };\n const handlePopoverHide = () => {\n // this.popoverVisible[prop] = false;\n };\n\n /**\n * @todo: 列选中状态切换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:44:01\n * @param {*} columns\n * @param {*} checkedKeys\n */\n const createChangedColumns = (columns, checkedKeys) =>\n columns.map((column) => {\n const target = { ...column };\n if (target.type !== 'action' && target.type !== 'expand') target.hasHidden = !checkedKeys.includes(target.prop);\n return target;\n });\n\n /**\n * @todo: 列顺序和选中方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:43:09\n * @param {*} data\n * @param {*} checked\n * @param {*} childChecked\n */\n const handleColumnCheckChange = (data, checked, childChecked) => {\n const checkedKeys = this.$refs['gv-table-column-tree'].$children[0].getCheckedKeys();\n const hColumns = createChangedColumns(tableHeads, checkedKeys);\n // console.log(hColumns);\n headColumn.value = getTableColumn('recreate', hColumns);\n // 存储到 localStorage\n setStoreLocal(checkedKeys, checked, data);\n };\n\n /**\n * @todo: table refresh btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:45:55\n */\n const handleTableRefresh = async () => {\n // 判断search框中是否有值\n const el = instance?.vnode?.el as HTMLElement | undefined;\n if (el) {\n const inputSearch = el.querySelector('.gv-table__search-input .el-input__inner');\n if (inputSearch && inputSearch.value !== undefined && inputSearch.value !== null && inputSearch.value !== '') {\n inputSearch.value = '';\n handleTableSearch('');\n } else {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n }\n };\n\n /**\n * @todo: tablebar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:21:41\n */\n const getTableBar = () => {\n const btns: any[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots && defaultSlots.length > 0)\n defaultSlots.forEach((x: VNode) => {\n // add table btn bar\n if (typeof x.type === 'object' && x.type !== null && 'name' in x.type && x.type.name === 'GvButton') btns.push(x);\n });\n // export btn\n const exportSlots = slots.export?.();\n if (exportSlots && exportSlots.length > 0)\n exportSlots.forEach(() => {\n btns.push(getExportBtn.value);\n });\n\n // import btn\n const importSlots = slots.import?.();\n if (importSlots && importSlots.length > 0)\n importSlots.forEach(() => {\n btns.push(getImportBtn.value);\n });\n\n // console.log(btns);\n return btns;\n };\n\n /**\n * @todo: get kit bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:41:30\n */\n const getKitBar = () => {\n let isVisible = true;\n if (sTableKit.value !== undefined) isVisible = sTableKit.value;\n if (props.tableType === 'import' || props.tableType === 'detail' || props.tableType === 'expand' || props.tableType === 'export') isVisible = false;\n // 行编辑去掉隐藏列功能\n if (isEditTable === true) isVisible = false;\n return isVisible === true ? (\n <div class=\"gv-table__kitbar\">\n <ElButtonGroup>\n <ElButton\n style=\"width: 37px\"\n size={tableSize.value}\n icon={Refresh}\n onClick={handleTableRefresh}\n />\n <ElPopover\n placement=\"bottom-end\"\n width=\"150\"\n trigger=\"click\">\n {{\n reference: () => (\n <ElButton\n size={tableSize.value}\n style={{ width: '37px' }}\n icon={Operation}\n />\n ),\n default: () => (\n <ElTree\n ref=\"gv-table-column-tree\"\n node-key=\"columnProp\"\n tree-data={columnTreeList}\n check-on-click-node={true}\n default-checked-keys={columnCheckedKeys.value}\n show-checkbox\n draggable\n on-check-change={handleColumnCheckChange}\n style={{ maxHeight: '450px', overflow: 'hidden auto' }}\n class=\"gv-table-column-tree\"\n />\n ),\n }}\n </ElPopover>\n </ElButtonGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: sort mode\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:17:36\n */\n const getSortModel = () => {\n let isVisible = true;\n if (sTableSort.value !== undefined) isVisible = sTableSort.value;\n else isVisible = props.tableType !== 'import';\n return isVisible === true ? (\n <div\n class=\"gv-table__sortmode\"\n style={{ marginRight: `${tableSearchShow.value === true ? '10px' : '0'}` }}>\n <i class=\"iconfont gv-icon-paixu2\" />\n <ElRadioGroup\n modelValue={tableSortMode.value}\n onUpdate:modelValue={(val: number) => {\n tableSortMode.value = val;\n }}\n ref=\"gv-table-sortmode\">\n <ElRadio value={1}>{t('common.currentPage')}</ElRadio>\n <ElRadio\n value={2}\n disabled={pageInfo.value?.totalpage === 1}>\n {t('common.all')}\n </ElRadio>\n </ElRadioGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: column filter handler\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:27:41\n * @param {*} e\n * @param {*} propField\n * @param {*} type\n */\n const columnFilterHandler = async (e: MouseEvent, propField: string, type: string) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n let filterValue = '';\n switch (type) {\n case 'text':\n case 'number':\n filterValue = inputHtml.value;\n if (filterValue.length === 0)\n // Notify.alert('请输入筛选内容', 'warning');\n return;\n\n break;\n case 'date':\n filterValue = dateHtmlArr[0].value + '|' + dateHtmlArr[1].value;\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked'))\n if (check.innerText !== t('common.checkAll'))\n filterValue = filterValue !== '' ? filterValue + '|' + check.querySelector('.el-checkbox__original').value : check.querySelector('.el-checkbox__original').value;\n\n break;\n }\n if (filterValue.length === 0 || filterValue === '|') {\n message(t('table.columnFilterWarn'));\n return;\n }\n\n if (type === 'date') {\n const pattern = /\\d{4}-\\d{2}-\\d{2}\\\\|\\d{4}-\\d{2}-\\d{2}/;\n if (!pattern.test(filterValue)) {\n message(t('table.columnFilterDateWarn'));\n return;\n }\n }\n\n if (propField !== null) {\n const fh = {};\n fh[toLine(propField.replace('@', '.')) + '|' + type] = filterValue;\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n // 标识筛选列(带fix)\n const tableFixHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n if (tableFixHeader !== null) {\n const fixColumns = tableFixHeader.querySelectorAll('.el-table__cell');\n if (fixColumns !== null) {\n const fixLen = fixColumns.length;\n for (let i = 0; i < fixLen; i++) {\n const h = fixColumns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n }\n }\n }\n };\n /**\n * @todo: 列表头筛选重置\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-20 10:05:08\n * @param {*} e\n */\n const columnFilterHandlerReset = async (e: MouseEvent, propField: string, type: stringType) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n switch (type) {\n case 'text':\n case 'number':\n inputHtml.value = '';\n break;\n case 'date':\n dateHtmlArr[0].value = '';\n dateHtmlArr[1].value = '';\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked')) {\n // check.classList.remove('is-checked');\n check.querySelector('.el-checkbox__original').checked = false;\n check.querySelector('.el-checkbox__input').classList.remove('is-checked');\n }\n\n break;\n }\n\n if (propField !== null) {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fh = fC.value['headfilter'];\n if (fh !== undefined && fh != null) delete fh[toLine(propField.replace('@', '.')) + '|' + type];\n\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n\n if (type !== 'date') {\n const primaryBtn = popoverHtml.querySelector('.el-button--primary');\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n const tableFixedHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n // fixed: 解决列表没有锁定列时报错问题 2023-10-07\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n }\n }\n };\n\n /**\n * @todo: set column width by column name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:12:01\n * @param {*} label\n * @param {*} query\n * @param {*} edit\n */\n const getColWidth = (label: string, query: boolean, edit: boolean) => {\n if (!label) return;\n let label2 = label;\n if (lang === 'en') label2 = label.toLowerCase();\n let sWidth = 0;\n if (label2.indexOf(t('table.date')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.month2')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.month')) !== -1) sWidth = 90;\n else if (label2.indexOf(t('table.time')) !== -1) sWidth = 130;\n else if (label2.indexOf(t('table.deliveryTime')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.name')) !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.userAccount')) !== -1) sWidth = 120;\n else if (label === t('table.customerName')) sWidth = 115;\n else if (label2.indexOf(t('table.approve')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.audit')) !== -1) sWidth = 110;\n else if (label === t('table.operator')) sWidth = 110;\n else if (label2.indexOf(t('table.staff')) !== -1) sWidth = 100;\n else if (label.indexOf(t('table.whether')) !== -1) sWidth = 110;\n else if (label === t('table.enableStatus')) sWidth = 110;\n else if (label === t('table.orderStatus')) sWidth = 110;\n else if (label2 === t('table.status')) sWidth = 90;\n else if (label2.indexOf(t('table.status')) !== -1) sWidth = 90;\n else if (label === t('table.vin')) sWidth = 185;\n else if (label === t('table.carNo')) sWidth = 105;\n else if (label2.indexOf(t('table.phone')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.tel')) !== -1) sWidth = 110;\n else if (label === t('table.sex')) sWidth = 90;\n else if (label2.indexOf(t('table.type')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.amount')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.money')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.balance')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.unitPrice')) !== -1) sWidth = 95;\n else if (label2.indexOf(t('table.times')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.number')) !== -1) sWidth = 140;\n else if (label2.indexOf(t('table.code')) !== -1) sWidth = 135;\n else if (label2.indexOf(t('table.odd')) !== -1) sWidth = 230;\n else if (label2.indexOf(t('table.unit')) !== -1) sWidth = 110;\n else if (label2.indexOf('省') !== -1) sWidth = 90;\n else if (label2.indexOf('市') !== -1) sWidth = 100;\n else if (label2.indexOf('区') !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.color')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.storageAge')) !== -1) sWidth = 105;\n else if (label2.indexOf(t('table.chassis')) !== -1) sWidth = 105;\n else if (label2.indexOf('排放标准') !== -1) sWidth = 115;\n else if (label2 === t('table.brand')) sWidth = 105;\n else if (label === t('table.series')) sWidth = 105;\n else if (label === t('table.strain')) sWidth = 105;\n else if (label === '运输方式') sWidth = 100;\n else if (label2.indexOf(t('table.rate')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.level')) !== -1) sWidth = edit === true ? 140 : 115;\n // fixme: 增加表头query宽度判断 2022-04-30\n if (query === true && sWidth > 0) sWidth += 15;\n\n // fixme: 增加表头edit宽度判断 2022-06-11\n if (edit === true && sWidth > 0) sWidth += 20;\n return sWidth;\n };\n\n /**\n * @todo: table cell formatter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:19:28\n * @param {*} row\n * @param {*} column\n * @param {*} cellValue\n * @param {*} index\n */\n const columnFormatter = (row, column, cellValue, index: number) => {\n // console.log(column);\n // console.log(cellValue);\n if (cellValue != null && cellValue.v !== undefined) return cellValue.v;\n else return cellValue === undefined ? '' : cellValue;\n };\n\n /**\n * @todo: table header search input change method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 09:55:46\n * @param {string} val\n */\n const handleColumnFilter = (val: string) => {\n const popoverHtmlList = Array.from(document.body.querySelectorAll<HTMLElement>('body>.table-popover'));\n let popoverHtml: HTMLElement | undefined;\n for (const pop of popoverHtmlList)\n if (pop.style.display !== 'none') {\n popoverHtml = pop;\n break;\n }\n if (!popoverHtml) return;\n const primaryBtn = popoverHtml.querySelector<HTMLElement>('.el-button--primary');\n if (!primaryBtn) return;\n if (val !== undefined && val !== null && val !== '') {\n primaryBtn.removeAttribute('disabled');\n primaryBtn.classList.remove('is-disabled');\n } else {\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n };\n /**\n * @todo: set header filter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:23:58\n * @param {string} type\n * @param {string} label\n * @param {string} prop\n * @param {string} dicType\n * @param {string} filtercode\n */\n const renderHeadFilter = (type: string, label: string, prop: string, dicType: string | undefined, filtercode: string | undefined) => {\n let render: VNode | null = null;\n let fc = filtercode !== undefined ? filtercode : '';\n switch (type) {\n case 'text':\n case 'number':\n render = (\n <div>\n <GvInput\n placeholder={`${t('table.search')} - ${label}`}\n size={tableSize.value}\n onInput={handleColumnFilter}\n vref={prop}></GvInput>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'date':\n render = (\n <div>\n <GvDatePicker\n placeholder={`${t('table.search')} - ${label}`}\n size={tableSize.value}\n type=\"daterange\"\n format={dicType}\n value-format={dicType}\n // onChange={handleColumnFilter}\n vref={prop}\n />\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'dic':\n if (dicType) {\n let ret = [];\n const src = dicType.toLowerCase();\n let dictCache;\n if (this.$store && this.$store.getters) dictCache = this.$store.getters.dictCache[src];\n if (dicType !== 'xzqh' && dictCache) ret = dictCache;\n // 生成字典列表\n else if (dicType === 'xzqh') {\n if (label.indexOf('省') >= 0) fc = '0000$';\n // else if (label.indexOf('市') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9]00$';\n // else if (label.indexOf('区') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9][0-9][1-9]$';\n\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dictDivision;\n if (dict) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n } else {\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dict[src];\n if (dict) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n }\n // 设置过滤\n let ret2 = ret;\n if (fc) {\n const reg = new RegExp(fc, 'i');\n ret2 = ret.filter((x) => reg.test(x.c));\n }\n // ret.map((x) => {\n // checkList.push(x.c);\n // });\n // console.log(checkList);\n // 最大显示100个\n if (ret2 && ret2.length !== undefined && ret2.length > 0) {\n ret2.splice(50);\n render = (\n <div>\n <div>\n <ElCheckbox\n checked={false}\n key=\"checkAll\"\n label={t('common.checkAll')}\n style={{ display: 'block' }}\n indeterminate={isIndeterminate[prop]}\n onChange={handleDictCheckAll}\n class=\"gv-checkbox\">\n {t('common.checkAll')}\n </ElCheckbox>\n <ElDivider style=\"margin: 5px 0px\" />\n {ret2.map((x) => (\n <ElCheckbox\n checked={false}\n key={x.c}\n label={x.c}\n style={{ display: 'block' }}\n onChange={handleDictCheck}\n class=\"gv-checkbox\">\n {lang === 'zh-CN' ? x.t : x.e}\n </ElCheckbox>\n ))}\n </div>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n disabled=\"true\"\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n } else render = null;\n } else render = null;\n\n break;\n }\n return render ? wrapPopoverFilterBody(render) : null;\n };\n\n /**\n * @todo: open popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:22:13\n * @param {*} type\n * @param {*} label\n * @param {*} prop\n * @param {*} dicType\n * @param {*} filtercode\n * @param {*} event\n */\n /** 点击表头筛选箭头:仅关闭其它列 Popover,开关由 ElPopover trigger=click + v-model 处理 */\n const handlePopoverSlotClick = (event: MouseEvent, prop: string) => {\n event?.stopPropagation();\n closeAllPopover(prop);\n };\n\n /**\n * @todo: render column item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:37:55\n */\n const renderColumnItem = (item: TableHeadItem, index: number, loadAction: string | undefined, tableFixed: string | undefined) => {\n const {\n prop,\n label,\n fixed,\n width,\n minWidth = 135,\n align = 'left',\n formatter,\n type = 'text',\n dicType,\n query = false,\n render,\n edit = false,\n format,\n cellBlur,\n cellEnter,\n cellChange,\n hidden = false,\n hasHidden = false,\n filtercode,\n showLabel,\n dicRemote,\n isreload = true,\n cb,\n multiple = false,\n dateType = 'date',\n selectable,\n min,\n max,\n collapseTags = false, // 多选字典tag是否折叠\n showLabelProp, // 表选showLabel列\n columnFilter = true, // 表头是否带筛选\n multiLabel = '', // 多级表头\n heads, // 多级表头\n focus,\n } = item;\n let reserveSelection = false;\n if (selectable) reserveSelection = true;\n let sHidden = false;\n if (hidden === true) sHidden = true;\n if (hasHidden === true) sHidden = true;\n if (sHidden === true) return null;\n\n let sLabel = label;\n let sProp = prop;\n if (prop && prop.indexOf('@') > 0) sProp = prop.split('@')[1];\n const key = loadAction === 'create' ? Math.random() : sProp;\n\n let placement: TPopoverPlacement = 'bottom-start';\n if (index >= tableHeads.length - 2) placement = 'bottom-end';\n let sFixed = sTableType === 'expand' ? undefined : fixed;\n if (tableFixed === 'n') sFixed = undefined;\n if (sTableAction === 'right') sFixed = undefined;\n // console.log(sFixed);\n if (sFixed) sLabel = sLabel + '';\n if (query === true) {\n sLabel = sLabel + '(Q)';\n filterHeads.push(prop);\n tableSearchShow.value = true;\n }\n ensurePopoverKey(prop);\n const sortable = sTableType === 'expand' ? false : 'custom';\n\n let sWidth;\n if (width !== 'auto')\n if (width) sWidth = width;\n else sWidth = getColWidth(label, query, edit);\n if (isEditTable === false && edit === true) isEditTable = true;\n\n // 多级表头\n if (multiLabel && multiLabel !== '') {\n if (heads && Array.isArray(heads)) {\n const multiLabels: VNode[] = [];\n heads.forEach((x) => {\n const hType = x.type || 'text';\n let hSLabel = x.label;\n let hSProp = x.prop;\n if (x.prop && x.prop.indexOf('@') > 0) hSProp = x.prop.split('@')[1];\n const hKey = loadAction === 'create' ? Math.random() : hSProp;\n\n let hSFixed = sTableType === 'expand' ? undefined : x.fixed;\n if (tableFixed === 'n') hSFixed = undefined;\n // console.log(sFixed);\n if (hSFixed) hSLabel = hSLabel + '';\n if (x.query === true) {\n hSLabel = hSLabel + '(Q)';\n filterHeads.push(x.prop);\n tableSearchShow.value = true;\n }\n let hReserveSelection = false;\n if (x.selectable) hReserveSelection = true;\n // 初始化 列的筛选popover都是隐藏的\n ensurePopoverKey(x.prop);\n const hSortable = sTableType === 'expand' ? false : 'custom';\n\n let hSWidth;\n if (x.width !== 'auto')\n if (x.width) hSWidth = x.width;\n else hSWidth = getColWidth(x.label, x.query, x.edit);\n multiLabels.push(\n <ElTableColumn\n fixed={hSFixed}\n prop={hSProp}\n label={hSLabel}\n width={hSWidth}\n align={x.align}\n column-key={hSProp}\n key={hKey}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={hSortable}\n selectable={x.selectable}\n reserveSelection={hReserveSelection}\n header-align={x.align || 'left'}\n style={{ display: sHidden ? 'none' : '' }}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[x.prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [x.prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(hType, x.label, x.prop, x.dicType, x.filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, x.prop)}>\n {hSLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>,\n );\n });\n return <ElTableColumn label={multiLabel + ''}>{multiLabels}</ElTableColumn>;\n }\n } else if (typeof render === 'function') {\n // 自定义字段 render\n let className = 'gv-cell__render';\n if (edit === true) className += ' gv-cell__isedit';\n return (\n <ElTableColumn\n // fixed = {fixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name={className}>\n {{\n default: (scope) => {\n const render1 = render(scope, sProp);\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n } else if (edit === true)\n return (\n <ElTableColumn\n style={{ display: sHidden ? 'none' : '' }}\n fixed={sFixed}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n // filters={this.columnFilters}\n // filter-method={this.filterHandler}\n // filter-placement='bottom-start'\n class-name=\"gv-cell__isedit\">\n {{\n default: (scope) => {\n // if (this.renderMap[`${scope.$index}-${sProp}`] === undefined) {\n const render1 = renderRowEdit(\n scope,\n label,\n sProp,\n prop,\n type,\n dicType,\n format,\n cellBlur,\n cellEnter,\n filtercode,\n showLabel,\n dicRemote,\n isreload,\n cb,\n multiple,\n dateType,\n render,\n cellChange,\n min,\n max,\n collapseTags,\n showLabelProp,\n focus,\n );\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n else if (type === 'tag')\n // 设置tag\n return (\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name=\"gv-cell__render\">\n {{\n default: (scope) =>\n scope.row[sProp] !== null && typeof scope.row[sProp] === 'object' ? (\n scope.row[sProp].v ? (\n <GvTag>{scope.row[sProp].v}</GvTag>\n ) : null\n ) : scope.row[sProp] ? (\n <GvTag>{scope.row[sProp]}</GvTag>\n ) : null,\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else if (\n dicType !== 'company' &&\n dicType !== 'dept' &&\n dicType !== 'user' &&\n label.indexOf('市') === -1 &&\n label.indexOf('区县') === -1 &&\n label.indexOf('区/县') === -1 &&\n props.tableType !== 'list' &&\n props.tableType !== 'detail' &&\n props.tableType !== 'expand' &&\n props.tableType !== 'import'\n )\n if (columnFilter !== true)\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(type, label, prop, dicType, filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, prop)}>\n {sLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>\n );\n else\n return (\n <ElTableColumn\n fixed={sFixed}\n prop={sProp}\n style={{ display: sHidden ? 'none' : '' }}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n selectable={selectable}\n reserveSelection={reserveSelection}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => <div class=\"render__header\">{props.tableType === 'list' ? sLabel : label}</div>,\n }}\n </ElTableColumn>\n );\n };\n\n /**\n * @todo: action column\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:08:55\n */\n const renderAction = (scope, content: string[], action: any[], render: Fn | undefined, confirmArr: boolean[], iconArr: string[]) => {\n let sContent = content;\n if (render) sContent = render(scope, content);\n return (\n <div class=\"flex\">\n {sContent.map((item: string, index: number) => {\n let x = item;\n let xx = 't';\n let disabled = false;\n if (item.indexOf('|') > 0) {\n const arr = item.split('|');\n x = arr[0];\n if (arr[1] === 'd') {\n xx = 't';\n disabled = true;\n // xx = arr[1];\n }\n }\n // console.log(item);\n let confirms = false;\n if (confirmArr) confirms = confirmArr[index];\n let detail = false;\n let icon = '';\n\n let actionType = '';\n if (x.indexOf(t('table.edit')) !== -1 || x.indexOf(t('table.modify')) !== -1 || x.indexOf(t('table.update')) !== -1) icon = 'el-icon-edit';\n else if (x.indexOf(t('table.delete')) !== -1 || x.indexOf(t('table.cancel')) !== -1) {\n icon = 'el-icon-delete';\n confirms = true;\n } else if (x.indexOf(t('table.add')) !== -1) icon = 'gv-icon-add';\n else if (x.indexOf(t('table.scheduling')) !== -1 || x.indexOf(t('table.production')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.append')) !== -1) {\n actionType = '1';\n icon = 'gv-icon-baocun2';\n } else if (x.indexOf(t('table.disabled')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.cancel1')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.close')) !== -1) {\n icon = 'el-icon-circle-close';\n confirms = true;\n } else if (x.indexOf(t('table.detail')) !== -1) {\n icon = 'gv-icon-mingxi';\n detail = true;\n } else if (x.indexOf(t('table.logging')) !== -1) {\n icon = 'gv-icon-daiban';\n detail = true;\n } else if (x.indexOf(t('table.info')) !== -1 || x.indexOf(t('table.infos')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.view')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.message')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.price')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.money')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.dispatch')) !== -1) icon = 'gv-icon-winfo-icon-zhipai';\n else if (x.indexOf(t('table.adjust')) !== -1) icon = 'gv-icon-wujiliandongdizhi';\n else if (x.indexOf(t('table.leaveFactory')) !== -1 || x.indexOf(t('table.delivery')) !== -1) icon = 'gv-icon-paichesonghuodan';\n else if (x.indexOf(t('table.quit')) !== -1 || x.indexOf(t('table.transfer')) !== -1) icon = 'gv-icon-zhipai';\n else if (x.indexOf(t('table.submit')) !== -1 || x.indexOf(t('table.report')) !== -1) icon = 'gv-icon-tijiao';\n else if (x.indexOf(t('table.download')) !== -1) icon = 'gv-icon-xiazai';\n else if (x.indexOf(t('table.upload')) !== -1) icon = 'gv-icon-fujian';\n else if (x.indexOf(t('table.notify')) !== -1) icon = 'gv-icon-huodong';\n else if (x.indexOf(t('table.send')) !== -1) icon = 'gv-icon-xiazaidaorumoban1x';\n else if (x.indexOf(t('table.freeze')) !== -1) icon = 'gv-icon-dongjie';\n else if (x.indexOf(t('table.apply')) !== -1) icon = 'gv-icon-biaoshilei_yuanchengshengji';\n else if (x.indexOf(t('table.unfreeze')) !== -1) icon = 'gv-icon-jiedong';\n else if (x.indexOf(t('table.qrcode')) !== -1) icon = 'gv-icon-erweima';\n else if (x.indexOf(t('table.build')) !== -1) icon = 'gv-icon-rocket';\n else if (x.indexOf(t('table.confirm')) !== -1) icon = 'gv-icon-tianshenpi';\n else if (x.indexOf(t('table.proxyPay')) !== -1) icon = 'gv-icon-bengchefenleijiageguanli';\n else if (x.indexOf(t('table.open')) !== -1) icon = 'gv-icon-addNode';\n else if (x.indexOf(t('table.audit')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.top')) !== -1) icon = 'gv-icon-zhidingxian';\n else if (x.indexOf(t('table.publish')) !== -1) icon = 'gv-icon-fabu';\n else if (x.indexOf(t('table.withdraw')) !== -1) icon = 'gv-icon-fanhui5';\n else if (x.indexOf(t('table.cost')) !== -1) icon = 'gv-icon-yingshou';\n else if (x.indexOf(t('table.approve')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.reject')) !== -1) icon = 'gv-icon-shenqingbohui';\n else if (x.indexOf(t('table.exec')) !== -1) icon = 'gv-icon-kaishi_yunhang';\n else if (x.indexOf(t('table.recover')) !== -1) icon = 'gv-icon-huifu1';\n else if (x.indexOf(t('table.dispose')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.ok')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.select')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.lock')) !== -1) icon = 'el-icon-lock';\n else if (x.indexOf(t('table.unLock')) !== -1) icon = 'el-icon-unlock';\n else if (x.indexOf(t('table.enable')) !== -1) icon = 'gv-icon-yunhang';\n else if (x.indexOf(t('table.transmit')) !== -1) icon = 'gv-icon-xiada';\n else if (x.indexOf(t('table.putaway')) !== -1) icon = 'el-icon-top';\n else if (x.indexOf(t('table.soldOut')) !== -1) icon = 'el-icon-bottom';\n else if (x.indexOf(t('table.transferPeople')) !== -1) icon = 'gv-icon-zhuanpai1';\n else if (x.indexOf(t('table.copy')) !== -1) icon = 'el-icon-copy-document';\n else if (x.indexOf(t('table.followUp')) !== -1) icon = 'gv-icon-mingdangenjin';\n else if (x.indexOf(t('table.circleCheck')) !== -1) icon = 'gv-icon-huanjiance';\n else if (x.indexOf(t('table.completed')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.finished')) !== -1) icon = 'gv-icon-wangongguanli';\n else if (x.indexOf(t('table.beCompleted')) !== -1) icon = 'gv-icon-wangongqueren';\n else if (x.indexOf(t('table.openCard')) !== -1) icon = 'gv-icon-daka-copy';\n else if (x.indexOf(t('table.closeCard')) !== -1) icon = 'gv-icon-guanqia';\n else if (x.indexOf(t('table.clockIn')) !== -1) icon = 'gv-icon-qiandao';\n else if (x.indexOf(t('table.preview')) !== -1) icon = 'el-icon-view';\n else if (x.indexOf(t('table.replace')) !== -1) icon = 'gv-icon-tihuantupian';\n else if (x.indexOf(t('table.settlement')) !== -1) icon = 'gv-icon-eduguanli';\n else if (x.indexOf(t('table.inWarehouse')) !== -1) icon = 'gv-icon-caituiruku';\n else if (x.indexOf(t('table.save')) !== -1) {\n icon = 'gv-icon-baocun1';\n actionType = '1';\n } else icon = 'el-icon-document-copy';\n\n // added by andy.ten@tom.com 2024-08-14 增加自定义按钮icon\n if (iconArr && Array.isArray(iconArr) && iconArr.length > index && iconArr[index]) icon = iconArr[index];\n if (sTableActionIcon === false) icon = '';\n if (confirms === true)\n if (sTableConfirm === false)\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm('是否?').then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm(`${t('table.isConfirm')} ${x} ${t('table.action')} ?`).then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n else\n return (\n <GvPopconfirm\n title={`${t('table.isConfirm')} ${x} ${t('table.action')} ?`}\n onConfirm={() => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n }}>\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n }}\n </GvPopconfirm>\n );\n else if (detail === true)\n return (\n <ElPopover\n title={x}\n placement={detailPlacement}\n trigger=\"click\"\n showArrow={true}\n onAfter-enter={() => handleDetailPopoverShow(action, index, scope.row, scope.$index)}\n popperClass=\"gv-popconfirm\">\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n default: () => showPopoverDetail,\n }}\n </ElPopover>\n );\n else\n // action btn\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size={tableSize.value}\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}\n icon={icon}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size={tableSize.value}\n type=\"text\"\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n startLoading();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n })}\n </div>\n );\n };\n\n /**\n * @todo: get table header columns\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 12:03:16\n * @param {*} loadAction\n * @param {*} tableColumns\n */\n const getTableColumn = (loadAction?: string, tableColumns?: TableHeadItem[]) => {\n const res: VNode[] = [];\n tableHeads = loadAction === 'recreate' ? tableColumns! : props.tableHead;\n // 从localStorage中获取已保存的列表显示信息\n if (loadAction === 'create') {\n lsTableHeads = getStorage(storageKey);\n if (lsTableHeads) {\n const thd: TableHeadItem[] = [];\n const lsTableHeadsArr = lsTableHeads.split(',');\n let startIndex = 0;\n if (tableHeads[0].type === 'expand') {\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n startIndex = 0;\n if (tableHeads[1].type === 'action') thd[1] = { ...tableHeads[1] } as TableHeadItem;\n startIndex = 1;\n } else if (tableHeads[0].type === 'action') {\n startIndex = 0;\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n }\n\n lsTableHeadsArr.forEach((x: string, index: number) => {\n const xx = x.split('|');\n const ff = tableHeads.filter((f) => f.prop === xx[0]);\n if (ff.length > 0) {\n if (ff[0].hidden !== true) {\n ff[0].hasHidden = xx[1] === 't';\n const treeNode = {\n columnProp: ff[0].prop,\n label: ff[0].label,\n };\n if (loadAction === 'create') {\n (columnTreeList.value as any[]).push(treeNode);\n if (ff[0].hasHidden !== true && xx[1] !== 't') columnCheckedKeys.value.push(ff[0].prop);\n }\n }\n thd[index + startIndex] = { ...ff[0] };\n }\n });\n tableHeads = thd;\n }\n }\n\n // 第一列为序号列\n // let fixed = this.tableType !== 'detail';\n let fixed: string | undefined = sTableAction;\n if (tableHeads[0].type === 'expand') {\n fixed = undefined as unknown as string;\n sTableType = 'expand';\n }\n\n if (sTableType === 'expand') fixed = undefined as unknown as string;\n // 如果是edit多选列表,则去掉列锁定\n let tableFixed = 'y';\n if (tableHeads.some((x) => x.multiple === true)) {\n tableFixed = 'n';\n fixed = undefined;\n }\n\n if (props.multi === true) {\n fixed = undefined;\n tableFixed = 'n';\n }\n\n // 添加展开列\n if (tableHeads[0].type === 'expand')\n res.push(\n <ElTableColumn\n type=\"expand\"\n key=\"expand\"\n column-key=\"expand\"\n prop=\"expand\"\n width=\"42\"\n fixed={fixed}>\n {{ default: (scope: any) => tableHeads[0].render?.(scope) }}\n </ElTableColumn>,\n );\n let rownumWidth = '55';\n if (pageInfo.value?.currentpagenum)\n if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 10000) rownumWidth = '65';\n else if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 1000) rownumWidth = '57';\n\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed={fixed}\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n // console.log(this.pageInfo.current);\n // console.log((this.pageInfo.current === -1 ? 0 : this.pageInfo.current - 1) * (this.pageInfo.size === -1 ? 0 : this.pageInfo.size));\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n // add: 第二列判断是否是多选框 2022-06-11\n if (props.multi === true)\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed=\"left\"\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n\n const actionHead = tableHeads.filter((x) => x.type === 'action');\n if (sTableAction === 'left')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1) actionWidth = content.join('').length * 30;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n filterHeads = [];\n tableHeads.forEach((item: TableHeadItem, index: number) => {\n if (item.type !== 'expand' && item.type !== 'action') {\n const columnVNode = renderColumnItem(item, index, loadAction, tableFixed);\n if (columnVNode) res.push(columnVNode);\n if (!lsTableHeads && loadAction === 'create')\n if (item.hidden !== true) {\n const treeNode = {\n columnProp: item.prop,\n label: item.label,\n };\n (columnTreeList.value as any[]).push(treeNode);\n columnCheckedKeys.value.push(item.prop);\n }\n }\n\n // this.$set(this.tableHead, index, item);\n // if (loadAction === 'create')\n // this.$set(this.resultData, index, item);\n });\n if (sTableAction === 'right')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1)\n if (lang === 'zh_CN') actionWidth = content.join('').length * 30;\n else actionWidth = content.join('').length * 18;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n // this.setDataLoaded(false);\n return res;\n };\n\n /**\n * @todo: table sort\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 17:45:10\n */\n const sortMethod = async ({ column, prop, order }: { column: Recordable<any>; prop: string | null; order: 'ascending' | 'descending' | null }) => {\n const fieldName = prop || column?.property;\n const sortingType = order ?? column?.order ?? null;\n if (tableSortMode.value === 1) {\n // 本页排序\n let sumData = {}; // 放置总计一行数据\n recordsList.value.forEach((item) => {\n if (item.name === t('common.total')) sumData = item;\n });\n if (sortingType === null)\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a['rownums'];\n let row2 = b['rownums'];\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n else if (sortingType === 'ascending' || sortingType === null) {\n // 正序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n // 删除table中的总计\n recordsList.value.forEach((item, index) => {\n if (item.name === t('common.total')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n } else if (sortingType === 'descending') {\n // 倒序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row2 - row1;\n else return row2.toString().localeCompare(row1.toString());\n });\n recordsList.value.map((item, index) => {\n if (item.name === t('common.aggregate')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n }\n } else {\n // 后端排序\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn = (instance?.exposed?.fetch as Fn) || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const oi: Recordable<string> = {};\n\n oi['orderfilter'] = fieldName;\n oi['ordertype'] = sortingType === 'ascending' ? 'asc' : 'desc';\n fC['orderinfo'] = oi;\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n\n // 隐藏popover\n popoverVisible.value[fieldName] = false;\n document.body.click();\n };\n\n /**\n * @todo: row dblclick event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-08 11:15:41\n * @param {*} row\n * @param {*} column\n * @param {*} event\n */\n const rowDblClick = (row: Recordable<any>, column: TableColumnCtx<Recordable<any>> | null, event: MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (!target) return;\n // fixme: 屏蔽行中带有icon图标双击事件 2022-12-12\n if (target.tagName === 'I') return;\n else {\n const cell = target.closest('.el-table__cell');\n if (cell && hasClass(cell as HTMLElement, 'el-table__expand-column')) return;\n }\n if (isEditTable === false)\n if (typeof attrs.onRowDblclick === 'function') emit('row-dblclick', row, column, event);\n else {\n const tr = target.closest('.el-table__row');\n if (!tr) return;\n const tds = tr.children;\n let firstBtn: HTMLElement | null = null;\n for (let i = 0; i < tds.length; i++) {\n const btnArr = tds[i].querySelectorAll<HTMLElement>('.cell button.gv-button');\n for (let j = 0; j < btnArr.length; j++) {\n const btn = btnArr[j];\n // fixme: 解决隐藏按钮后双击仍然调用问题 2022-10-09\n if (btn && btn.style.display !== 'none') {\n firstBtn = btn;\n break;\n }\n }\n if (firstBtn) break;\n }\n firstBtn?.click();\n }\n };\n\n /**\n * @todo: 合并表格行或合并列方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-16 14:27:07\n */\n // const handleSpanMethod = (columnObj) => {\n // props.spanMethod(columnObj);\n // };\n\n // const getSummaries = (param) => {\n // const { columns, data } = param;\n // const sums = [];\n // columns.forEach((column, index) => {\n // if (column.columnKey === 'rownums') {\n // sums[index] = t('common.total');\n // return;\n // }\n // if (column.property === 'multi' || column.columnKey === 'caozuo' || column.columnKey === 'expand') return;\n // const keyIndex = columnSums.indexOf(column.property);\n // if (keyIndex !== -1) {\n // const values = data.map((item) => Number(item[column.property]));\n // if (!values.every((value) => isNaN(value))) {\n // sums[index] = values.reduce((prev, curr) => {\n // const value = Number(curr);\n // if (!isNaN(value)) return prev + curr;\n // else return prev;\n // }, 0);\n // const decimal = columnSumsDecimal[keyIndex];\n // sums[index] = amountFormat(sums[index], decimal);\n // sums[index] += '';\n // } else sums[index] = '';\n // } else return;\n // });\n // return sums;\n // };\n\n /**\n * @todo: 拖动表头改变列宽度响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-01-07 10:16:42\n * @param {*} newWidth\n * @param {*} oldWidth\n * @param {*} column\n * @param {*} event\n */\n // const headerDragend = (newWidth, oldWidth, column, event) => {\n // // fixed: 解决fix table 表头列宽度改变时fix列高度不正确问题 2024-01-07\n // nextTick(() => {\n // // fixCellH.style.height = cellH.offsetHeight;\n // this.$refs[this.vref].doLayout();\n // const fixCellH = this.$refs[this.vref].$el.querySelector('.el-table__fixed-header-wrapper>.el-table__header .el-table__cell');\n // const cellH = this.$refs[this.vref].$el.querySelector('.el-table__header-wrapper>.el-table__header .el-table__cell');\n // // console.log(cellH.offsetHeight);\n // fixCellH.style.height = cellH.offsetHeight + 'px';\n // // console.log(fixCellH.style.height);\n // });\n // });\n\n // @watch\n watch(\n () => props.tableHead,\n (newVal, prevVal) => {\n if (newVal.length !== prevVal.length) headColumn.value = getTableColumn();\n else {\n const res = difference(newVal, originTableHead);\n if (res === true) headColumn.value = getTableColumn();\n }\n },\n );\n watch(\n () => sMaxHeight.value,\n () => {\n if (props.tableType !== 'import')\n if (isScrollbar === false)\n if (isAnchor === false) {\n if (sHeight) sMaxHeight.value = sHeight;\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n },\n );\n watch(\n () => props.tableData,\n (newValue) => {\n resultData.value = newValue;\n },\n );\n\n watch(\n () => resultData.value,\n (newValue) => {\n if (newValue) {\n recordsList.value = newValue.records || newValue;\n // fixme: 解决无法获取结果集时报错问题 2022-06-05\n if (recordsList.value === undefined || recordsList.value.length === undefined) recordsList.value = [];\n if (recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n if (headColumn.value.length === 0) {\n tableHeads.forEach((x: TableHeadItem) => {\n let sProp = x.prop;\n if (sProp && sProp.indexOf('@') > 0) sProp = sProp.split('@')[1];\n if (props.total)\n if (x.sum === true) {\n columnSums.push(sProp);\n columnSumsDecimal.push(x.decimal ? x.decimal : 2);\n x.align = 'right';\n }\n\n const trans: string | undefined = transHash?.[sProp];\n if (trans) {\n const typeArr = trans.split('|');\n switch (typeArr[0]) {\n case 'company':\n x.dicType = 'company';\n break;\n case 'dept':\n x.dicType = 'dept';\n break;\n case 'user':\n x.dicType = 'user';\n break;\n case 'dic':\n x.type = 'dic';\n x.dicType = typeArr[1];\n break;\n case 'division':\n x.type = 'dic';\n x.dicType = 'xzqh';\n break;\n case 'date':\n x.type = 'date';\n x.dateType = typeArr[1];\n break;\n }\n }\n });\n headColumn.value = getTableColumn();\n }\n } else headColumn.value = getTableColumn();\n pageInfo.value = getPageInfo.value;\n // 设置排序方式\n if (pageInfo.value.totalpage > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n // 设置导出按钮状态\n if (recordsList.value && recordsList.value.length > 0) exportBtnDisabled.value = false;\n else exportBtnDisabled.value = true;\n\n // 加载状态\n // this.sDataLoaded = true;\n }\n nextTick(() => {\n // 重新计算\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n\n // add: 增加查询回调方法 2022-11-23\n if (props.tableCb) props.tableCb(recordsList.value, resultData.value);\n tableRef.value?.doLayout();\n });\n },\n );\n\n // @exposed\n expose({\n setTableRef,\n fetch,\n startLoading,\n stopLoading,\n filterConditions,\n });\n\n // @created\n // get localStorage table column\n const loginLang = userStore.language;\n if (loginLang === 'en') lang = 'en';\n originTableHead = JSON.parse(JSON.stringify(props.tableHead));\n // fixme: 初始化时根据结果集赋值pagesize 解决后端设置pageSize后前端无法加载问题 2022-04-30\n // if (this.tableInit === true)\n if (Object.keys(props.tableData).length === 0) headColumnInit.value = getTableColumn('create');\n if (props.tableType === 'expand') {\n sTableSort.value = false;\n sTableBar.value = false;\n } else if (props.tableType === 'detail') headColumnInit.value = getTableColumn();\n if (props.tableData && props.tableData.size) {\n sPageSize = props.tableData.size;\n // 设置排序方式\n if (props.tableData.pages > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n }\n\n // 设置列表按钮以及右上角按钮的全局隐藏或显示\n if (gTableBar === false) {\n sTableSort.value = false;\n sTableKit.value = false;\n sTableBar.value = true;\n }\n\n // set pageSizes\n if (pageSizes.includes(sPageSize) === false) {\n pageSizes.splice(0, 0, sPageSize);\n pageSizes.sort(function (m, n) {\n if (m < n) return -1;\n else if (m > n) return 1;\n else return 0;\n });\n }\n\n if (props.tableType === 'detail') {\n // this.sMaxHeight = '200px';\n pageLayout.value = 'total, prev, pager, next';\n // 设置detail宽度\n sMaxWidth.value = '850px';\n } else if (props.tableType === 'expand') if (!sMaxWidth.value) sMaxWidth.value = '85%';\n // this.pageLayout = 'total, prev, pager, next';\n\n transRecords('create');\n\n // @mounted\n onMounted(() => {\n debounceSearch = debounce(handleTableSearch, 500);\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n window.addEventListener('click', () => {\n closeAllPopover();\n });\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n if (rootEl) {\n const tableBodyWrapper = rootEl.querySelector('.el-table__body-wrapper');\n if (tableBodyWrapper) tableBodyWrapper.addEventListener('scroll', getScrollLeft, false);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor = true;\n const dialogBody = rootEl.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-edit__container')) isEditContainer = true;\n }\n });\n });\n\n // @render\n return () => {\n pageInfo.value = getPageInfo.value;\n return props.visible ? (\n <div\n class={props.tableType === 'expand' ? 'gv-table__container gv-table__container-expand' : 'gv-table__container'}\n style={{ width: '100%', minWidth: '0px', maxWidth: sMaxWidth.value }}>\n <GvTableBar visible={sTableBar.value}>{getTableBar()}</GvTableBar>\n {getKitBar()}\n {getTableSearch()}\n {getSortModel()}\n <div\n class=\"gv-table__loading-wrap\"\n v-loading={loading.value}\n element-loading-text=\"Loading...\">\n <ElTable\n ref={vref}\n // element-loading-spinner='iconfont gv-icon-loading'\n data={recordsList.value}\n border={props.tableType === 'detail' ? false : props.border}\n highlight-current-row={true}\n table-layout=\"fixed\"\n style=\"width: 100%\"\n height={sHeight}\n max-height={sMaxHeight.value}\n stripe={true}\n row-key={(row: any) => row.rownums}\n expand-row-keys={props.expandRowKeys}\n row-style={props.rowStyle}\n cell-style={props.cellStyle}\n header-cell-class-name=\"headerStyleEvent\"\n //span-method={handleSpanMethod}\n show-summary={props.total}\n // summary-method={getSummaries}\n // toggleRowSelection\n // on-row-class-name={props.rowClassName} // 设置行class的回调方法\n onSort-change={sortMethod}\n onRow-dblclick={rowDblClick} // 设置行双击事件方法\n // on-row-click={props.handleRowClick} // 设置行单击事件方法\n // on-selection-change={handleSelectionChange} // 设置多选行事件\n // on-expand-change={handleExpandChange} // 行展开异步加载方法\n // on-header-dragend={headerDragend} // 列拖宽度方法\n class={props.tableType === 'detail' ? 'gv-table-noborder' : props.border === true ? `${prefixCls}` : 'gv-table-noborder'}>\n {props.tableData && Object.keys(props.tableData).length > 0 ? headColumn.value : headColumnInit.value}\n </ElTable>\n </div>\n <ElPagination\n style={{ display: props.isShowPage ? '' : 'none' }}\n pageSizes={pageSizes}\n pageSize={pageInfo.value.recordsperpage}\n layout={pageLayout.value}\n total={pageInfo.value.countrows}\n currentPage={pageInfo.value.currentpagenum}\n hideOnSinglePage={true}\n onUpdate:page-size={handleSizeChange}\n onUpdate:current-page={handleCurrentChange}\n class=\"gv-pagination\"></ElPagination>\n </div>\n ) : null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-table__container {\n width: 100%;\n height: calc(100% - 10em);\n margin-top: -2px;\n\n .gv-table__loading-wrap {\n position: relative;\n width: 100%;\n }\n .gv-table__sortmode {\n float: right;\n\n & i {\n padding-right: 15px;\n //font-size: 14px;\n }\n\n :deep(.el-radio) {\n margin-right: 12px;\n\n .el-radio__input {\n &.is-checked {\n .el-radio__inner {\n background: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .el-radio__label {\n //font-size: $tableThFontSize;\n }\n\n .el-radio__input.is-checked + .el-radio__label {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .gv-table__kitbar {\n position: relative;\n float: right;\n width: 74px;\n height: 28px;\n margin: 1px 0 0 8px;\n line-height: 28px;\n\n .el-button-group {\n height: 26px;\n line-height: 26px;\n\n .el-button {\n padding: 6px 8px 5px;\n }\n }\n }\n\n .gv-table__search {\n position: relative;\n float: right;\n width: 160px;\n margin-top: 3px;\n\n :deep(.gv-table__search-input) {\n // top: -30px;\n float: right;\n width: 150px;\n .el-input__wrapper {\n height: 28px;\n line-height: 28px;\n }\n .el-input__inner {\n font-size: 12px;\n padding-left: 1px !important;\n }\n }\n }\n\n .gv-table {\n border-top: 1px solid $tableBorderColor;\n border-bottom: 0;\n border-left: 1px solid $tableBorderColor;\n\n :deep(.ascending .sort-caret.ascending) {\n border-bottom-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.descending .sort-caret.descending) {\n border-top-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n padding-right: 3px;\n color: $textColor;\n font-weight: 500 !important;\n .render__header {\n font-weight: 500 !important;\n }\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 4px 2px 10px 89px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-tag {\n box-sizing: border-box;\n display: inline-block;\n height: 22px;\n padding: 0 5px;\n //font-size: $appTextSize;\n line-height: 22px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: auto;\n padding: 0 5px;\n\n .gv-input {\n height: 25px;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-input-number {\n width: 120px;\n height: 25px;\n line-height: 25px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n height: 25px;\n //font-size: $textSizeSecondary;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 25px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n width: 100%;\n\n .el-input {\n // line-height: 28px;\n // height: 25px;\n\n // height: 28px;\n //font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px !important;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .el-select__tags {\n .el-tag {\n height: 22px;\n margin: 1px 0 1px 6px;\n }\n }\n }\n\n .gv-select__table {\n width: 100%;\n vertical-align: inherit !important;\n .el-input {\n // height: 25px;\n //font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n // &.current-row{\n // td.el-table__cell{\n // background-color: var(--defaultHover,$defaultHover);\n // }\n // }\n\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n :deep(.el-table__footer-wrapper) {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n //font-size: $tableThFontSize;\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n height: 100% !important;\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n height: 28px;\n font-weight: 500 !important;\n // display: inline-block; // flex\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 2px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n .cell {\n // display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n // padding-left: 3px;\n .el-button {\n // margin-left: 5px;\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .gv-tag {\n box-sizing: border-box;\n\n // display: inline-block;\n height: 24px;\n padding: 0 5px;\n //font-size: $appTextSize;\n line-height: 24px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n // border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n .el-table__fixed-footer-wrapper {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n //font-size: $tableThFontSize;\n }\n }\n }\n }\n }\n\n .gv-table-noborder {\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n\n .cell {\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n }\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n\n .cell {\n display: inline-block; // flex\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n }\n }\n }\n }\n }\n }\n }\n\n // pageinfo\n :deep(.el-pagination) {\n float: right;\n\n .el-input__inner {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n\n &:hover {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n }\n\n .el-pagination__total {\n left: 15px;\n //font-size: $appTextSize !important;\n // position: absolute;\n margin-right: 20px;\n font-weight: 500;\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-pagination__sizes {\n // position: absolute;\n left: 65px;\n margin: 0px 10px 0 0;\n width: 100px;\n line-height: 28px;\n .el-select {\n width: 100px;\n line-height: 28px;\n .el-select__wrapper {\n //font-size: $appTextSize;\n min-height: 28px;\n }\n .el-input {\n width: 90px;\n\n .el-input__inner {\n height: 25px;\n line-height: 25px;\n }\n }\n }\n }\n\n .btn-prev,\n .btn-next {\n min-width: 25px;\n padding: 0;\n }\n\n .el-pager {\n li.active,\n li:hover {\n color: var(--primaryColor, $primaryColor);\n }\n .is-active number {\n //font-size: $appTextSize;\n }\n .number {\n min-width: 30px;\n //font-size: $appTextSize;\n font-weight: $fontWeight;\n }\n }\n\n .el-pagination__jump {\n .el-pagination__goto {\n //font-size: $appTextSize;\n }\n .el-pagination__classifier {\n //font-size: $appTextSize;\n }\n .el-pagination__editor {\n //font-size: $appTextSize;\n width: 45px;\n\n .el-input__inner {\n height: 24px;\n line-height: 24px;\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTable from './src/GvTable.vue';\n\nconst GvTablePlugin = {\n install(app: App): void {\n app.component(GvTable.name ?? 'GvTable', GvTable);\n },\n};\nexport default GvTablePlugin;\n\nexport { GvTable };\n","<!--\n * @title: tab pane component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:19:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 10:24:57\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { hasScrollbar } from '@@/utils';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref } from 'vue';\n\n // const { getPrefixCls } = useStyle();\n // const prefixCls = getPrefixCls('tab-pane');\n export default defineComponent({\n name: 'GvTabPane',\n props: {\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n autoHeight: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const sMaxHeight = props.maxHeight;\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n // @methods\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el;\n const dialogBody = rootEl.closest('<div className=\"gv\"></div>-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isAnchor.value = true;\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n if (props.autoHeight === false)\n if (isEditContainer.value === false)\n if (isScrollbar.value === false)\n if (isAnchor.value === false)\n if (!sMaxHeight) {\n const tabPane = rootEl;\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 95 : 165;\n const maxHeight = document.documentElement.clientHeight - rootEl.offsetTop - offsetTop;\n rootEl.style.maxHeight = maxHeight + 'px';\n }\n });\n });\n // @render\n return () => (\n <div\n data-name={props.name}\n data-label={props.label}\n data-disabled={props.disabled}\n style={{ overflow: 'hidden auto', maxHeight: `${props.maxHeight}` }}>\n {slots.default?.()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tab-pane';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabPane from './src/GvTabPane.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabPane.name ?? 'GvTabPane', GvTabPane);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabPane };\n","<!--\n * @title: tabs component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 09:50:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:54:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { hasScrollbar } from '@@/utils';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tabs');\n export default defineComponent({\n name: 'GvTabs',\n props: {\n tabPosition: {\n type: String,\n default: 'left',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: undefined,\n },\n type: {\n type: String as PropType<'card' | 'border-card'>,\n default: undefined, // card|border-card\n },\n closable: {\n type: Boolean,\n default: false,\n },\n tabMaxHeight: {\n type: [Number, String],\n default: undefined,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const inputValue = ref(props.value);\n const tabHeight = ref('auto');\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const panes = ref([]);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @methods\n /**\n * @todo: 点击tab页响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-09 09:16:37\n * @param {*} tabVm 被选中tab页实例\n */\n const handleTabClick = (tabVm) => {\n const props = tabVm.props;\n const parent = tabVm.parent;\n const tabName = props.name;\n if (tabName) parent.props.value = tabName;\n emit('tab-click', tabVm);\n };\n\n /**\n * @todo: created tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:05:03\n */\n const calcPaneInstances = () => {\n if (panes.value.length === 0)\n if (slots.default?.())\n slots.default?.().forEach((vnode) => {\n if (vnode && typeof vnode.type === 'object' && 'name' in vnode.type && vnode.type.name === 'GvTabPane') {\n const tabPane = {};\n const props = vnode.props;\n tabPane['label'] = props?.label;\n tabPane['name'] = props?.name;\n tabPane['autoHeight'] = isEditContainer.value;\n let visible = true;\n if (props?.visible === false) visible = false;\n tabPane['visible'] = visible;\n (panes.value as any[]).push(tabPane);\n }\n });\n return panes.value || [];\n };\n /**\n * @todo: 创建tabpanel\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-03 16:30:54\n */\n const createTabPane = () =>\n calcPaneInstances().map((vnode: VNode, index) => {\n const props = vnode.props;\n // console.log(vnode.name);\n return props?.visible ? (\n <ElTabPane\n // v-show={vnode.visible}\n ref=\"tabPane\"\n name={props?.name}\n label={props?.label}\n style={{ height: `${tabHeight.value} !important` }}>\n {slots.default?.()[index]}\n </ElTabPane>\n ) : null;\n });\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el as HTMLElement | undefined;\n const dialogBody = rootEl?.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogContainer = rootEl?.closest('.gv-container');\n if (dialogContainer) isScrollbar.value = hasScrollbar(dialogContainer);\n }\n if (rootEl?.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl?.closest('.gv-edit__container')) isEditContainer.value = true;\n if (!isEditContainer.value)\n if (isScrollbar.value === false)\n if (isAnchor.value === false) {\n // 设置tab页高度\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const dialog = rootEl?.closest('.gv-dialog');\n if (dialog) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const h = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 55;\n if (h < 384) tabHeight.value = '384px';\n else tabHeight.value = h + 'px';\n }\n }\n }\n });\n });\n // @render\n return () => (\n <ElTabs\n ref=\"gv-tabs\"\n v-model={inputValue.value}\n tab-position={props.tabPosition}\n type={props.type}\n closable={props.closable}\n on-tab-click={handleTabClick}\n class={prefixCls}>\n {createTabPane()}\n </ElTabs>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tabs';\n .#{$prefixCls} {\n :deep(.el-tabs__header) {\n &.is-top {\n margin: 0 0 6px;\n }\n\n .el-tabs__nav {\n .el-tabs__active-bar {\n background-color: var(--primaryColor, $primaryColor);\n }\n\n .el-tabs__item {\n //font-size: $appTextSize;\n\n &:hover {\n color: var(--primaryColor, $primaryColor);\n }\n\n &.is-active {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabs from './src/GvTabs.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabs.name ?? 'GvTabs', GvTabs);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabs };\n","import type { App } from 'vue';\nimport GvTag from './src/GvTag.vue';\n\nconst GvTagPlugin = {\n install(app: App): void {\n app.component(GvTag.name ?? 'GvTag', GvTag);\n },\n};\nexport default GvTagPlugin;\n\nexport { GvTag };\n","<!--\n * @title: navigation tags view\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-20 10:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:00:46\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { useTagsViewStore } from '@/store/modules/tagsView';\n import { useBridgeI18n } from '@@/bridge';\n import { joinIcon, pathResolve } from '@@/utils';\n import { useEventListener } from '@vueuse/core';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { cloneDeep } from 'lodash-es';\n import { computed, defineComponent, nextTick, onMounted, reactive, ref, unref, watch } from 'vue';\n import { useRouter, type RouteLocationNormalizedLoaded } from 'vue-router';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tags-view');\n export default defineComponent({\n name: 'GvTagsView',\n setup() {\n const visible = ref(false);\n const position = reactive({ x: 0, y: 0 });\n const currentKey = ref('');\n\n const { currentRoute, push, replace } = useRouter();\n const activeKey = ref<string>(unref(currentRoute).path || '/dashboard');\n const { t } = useBridgeI18n();\n const tagsViewStore = useTagsViewStore();\n const permsStore = usePermsStore();\n\n const visitedViews = computed(() => tagsViewStore.visitedViews);\n const mainAppRoutes = computed(() => permsStore.mainAppRoutes);\n\n const isRedirect = (path: string) => path.startsWith('/redirect');\n const isActive = (route) => route.path === unref(currentRoute).path;\n const isAffix = (tag) => tag.meta && tag.meta.affix;\n\n /**\n * @todo: filter affix nav menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:39:08\n * @param {*} mainAppRoutes\n * @param {*} basePath\n */\n const filterAffixNavMenus = (navMenus, basePath = '/'): RouteLocationNormalizedLoaded[] => {\n const affixTags: RouteLocationNormalizedLoaded[] = [];\n // console.log('navMenus:', navMenus.value);\n navMenus.value.forEach((route) => {\n if (route.meta && route.meta.affix === true) {\n const tagPath = pathResolve(basePath, route.path);\n affixTags.push({\n fullPath: tagPath,\n path: tagPath,\n name: route.name,\n meta: route.meta,\n matched: [],\n params: {},\n query: {},\n hash: '',\n redirectedFrom: undefined,\n });\n }\n });\n return affixTags;\n };\n /**\n * @todo: add affix tags\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:45:26\n */\n const addAffixTags = () => {\n const affixTags = filterAffixNavMenus(mainAppRoutes);\n\n for (const tagView of affixTags) if (tagView.name) tagsViewStore.addVisitedView(tagView);\n };\n /**\n * @todo: create tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:36:56\n */\n const createTabPanel = () =>\n visitedViews.value.map((v) => {\n const icons = joinIcon(v.meta?.picon);\n const closable = visitedViews.value.length > 1;\n const title = t(v.meta?.title ?? 'no-name');\n return (\n <ElTabPane\n key={String(v.path)}\n name={String(v.path)}\n label={title}\n closable={closable}>\n {{\n label: () => (\n <span class=\"tab-label\">\n {icons && <i class={icons}></i>}\n {title}\n </span>\n ),\n }}\n </ElTabPane>\n );\n });\n\n /**\n * @todo: show right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 17:22:53\n * @param {*} key\n */\n const showContextMenu = (key: string) => {\n currentKey.value = key;\n visible.value = true;\n };\n /**\n * @todo: close right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:31:06\n */\n const closeContextMenu = () => {\n visible.value = false;\n };\n /**\n * @todo: jump to link route\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 11:25:08\n * @param {*} routePath\n */\n const toLink = (routePath: string) => {\n const targetView = visitedViews.value.find((v) => v.path === routePath);\n activeKey.value = routePath || '/dashboard';\n\n if (targetView)\n // 使用完整的 route 对象跳转,保留 query 参数\n push({\n path: targetView.path,\n query: targetView.query || {},\n });\n else push({ path: routePath, query: {} });\n };\n /**\n * @todo: jump to last tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:31:01\n * @param {*} visitedView\n * @param {*} currentView\n */\n const toLastView = (visitedView: RouteLocationNormalizedLoaded[], currentView: RouteLocationNormalizedLoaded) => {\n const latestView = visitedView.slice(-1)[0];\n if (visitedView) {\n activeKey.value = latestView.path;\n push(latestView.path);\n } else if (currentView.name === 'Dashboard') replace({ path: '/redirect' + currentView.path });\n else push('/');\n };\n /**\n * @todo: add menu tab\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 10:27:35\n */\n const addNavMenu = () => {\n const name = currentRoute.value.name;\n if (name) tagsViewStore.addTagView(currentRoute.value);\n };\n\n const moveToCurrentTag = (view: RouteLocationNormalizedLoaded) => {\n // toLink(view.path);\n };\n\n /**\n * @todo: click tab event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 12:08:48\n * @param {*} tab\n */\n const clickTab = (tab) => {\n toLink(tab.props.name);\n };\n /**\n * @todo: close current tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:56:44\n * @param {*} targetKey\n */\n const closeCurrentTag = async (targetKey) => {\n const view = visitedViews.value.filter((view) => view.path === targetKey);\n if (isAffix(view[0])) return;\n\n await tagsViewStore.delTagView({ view: view[0] });\n\n // 清除缓存的search条件\n // currentRoute.value.meta.search = {};\n // 判断是否是当前标签页关闭\n if (isActive(view[0])) toLastView(visitedViews.value, view[0]);\n };\n /**\n * @todo: refresh selected tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:40:45\n */\n const refreshSelectedTag = async () => {\n tagsViewStore.delCachedView(unref(currentRoute));\n const { path, query } = unref(currentRoute);\n await nextTick();\n replace({\n path: '/redirect' + path,\n query: query,\n });\n };\n const findCurTagIndex = () => visitedViews.value.findIndex((x) => x.path === currentKey.value);\n /**\n * @todo: close right/left tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:42:33\n * @param {*} direction\n */\n const closeTagsOrientation = (direction) => {\n const index = findCurTagIndex();\n if (index === -1) return;\n let isClosed = false;\n const vV = cloneDeep(visitedViews.value);\n vV.map(({ path }, i) => {\n if (direction === 'right' && i > index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n } else if (direction === 'left' && i < index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n }\n });\n // 跳转至当前页\n if (isClosed) toLink(unref(currentKey));\n };\n /**\n * @todo: close other tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 11:04:12\n */\n const closeOthersTags = () => {\n const index = findCurTagIndex();\n if (index === -1) return;\n push(currentKey.value);\n\n tagsViewStore.delOthersViews(currentRoute.value).then(() => {\n moveToCurrentTag(unref(currentRoute));\n });\n };\n\n watch(\n () => [currentRoute.value.path, currentRoute.value.name],\n ([path, name], [, oldName]) => {\n // if /redirect\n if (isRedirect(path as string)) return;\n // 当前选中tab页\n activeKey.value = (path as string) || '/dashboard';\n // del notify msg\n if (oldName !== name) {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n }\n addNavMenu();\n // moveToCurrentTag(currentRoute.value);\n },\n );\n\n /**\n * @todo: bind right click event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 15:28:28\n */\n const tagsViewEl = ref<HTMLElement | null>(null);\n useEventListener(tagsViewEl, 'contextmenu', (ev: MouseEvent) => {\n ev.preventDefault();\n\n let targetNode: HTMLElement | null = null;\n const el = ev.target as HTMLElement;\n\n if (el.tagName === 'SPAN') targetNode = el.parentElement;\n else targetNode = el;\n\n if (targetNode?.classList.contains('el-tabs__item')) {\n const path = targetNode?.getAttribute('aria-controls')?.replace(/^pane-/, '') || '';\n if (path !== unref(currentRoute).path) toLink(path);\n\n position.x = ev.clientX || ev.pageX;\n position.y = ev.clientY || ev.pageY;\n\n showContextMenu(path);\n }\n });\n /**\n * @todo: close context menu on window click\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:39:46\n */\n useEventListener(window, 'click', () => {\n closeContextMenu();\n });\n\n // mounted hooks\n onMounted(() => {\n addAffixTags();\n addNavMenu();\n });\n return () => (\n <div\n ref={tagsViewEl}\n class={[prefixCls, 'flex w-full relative bg-[#fff] dark:bg-[var(--el-bg-color)']}>\n <ElTabs\n class=\"multi-tab\"\n type=\"card\"\n modelValue={activeKey.value}\n onUpdate:modelValue={(v: string) => (activeKey.value = v)}\n onTabClick={clickTab}\n onTabRemove={closeCurrentTag}>\n {createTabPanel()}\n </ElTabs>\n {visible.value && (\n <ul\n class=\"tagsView-contextmenu\"\n style={{ left: `${position.x + 10}px`, top: `${position.y - 10}px` }}>\n <li onClick={refreshSelectedTag}>{t('tagsView.refresh')}</li>\n {currentKey.value !== '/dashboard' && visitedViews.value.length === 2 && <li onClick={() => closeCurrentTag(currentKey.value)}>{t('tagsView.close')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 1 && findCurTagIndex() < visitedViews.value.length - 1 && (\n <li onClick={() => closeTagsOrientation('right')}>{t('tagsView.closeRight')}</li>\n )}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && findCurTagIndex() > 1 && <li onClick={() => closeTagsOrientation('left')}>{t('tagsView.closeLeft')}</li>}\n {currentKey.value === '/dashboard' && visitedViews.value.length > 1 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n </ul>\n )}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tags-view';\n\n .#{$prefixCls} {\n user-select: none; // 禁止选中文本\n\n .multi-tab {\n width: 100%;\n position: relative;\n :deep(.el-tabs__header) {\n margin: 0;\n border-bottom-color: $borderColor;\n height: 34px;\n line-height: 34px;\n .el-tabs__nav {\n border-color: $borderColor;\n .el-tabs__item {\n height: 34px; // 38px\n line-height: 34px; // 38px\n padding: 2px 10px 0 10px; // 0 10px\n //font-size: $textSize;\n border-left-color: $borderColor;\n\n &.is-active {\n & > span {\n font-weight: $fontWeight2;\n }\n color: var(--primaryColor, $primaryColor);\n }\n &:focus.is-focus:not(:active) {\n box-shadow: 0 0 1px 1px inset;\n }\n > span {\n font-weight: 500;\n > i {\n padding-right: 5px;\n //font-size: $textSize;\n }\n }\n }\n }\n .is-scrollable {\n .el-tabs__nav-next,\n .el-tabs__nav-prev {\n line-height: 42px;\n }\n\n i {\n font-size: 18px;\n color: rgba(0, 0, 0, 0.95);\n }\n }\n }\n .el-tabs__content {\n display: none !important;\n }\n }\n :deep(.tagsView-contextmenu) {\n position: fixed;\n top: $navHeadHeight;\n left: 300px;\n z-index: 9999;\n min-width: 90px;\n padding: 6px 0;\n list-style: none;\n background-color: #fff;\n border: 1px solid $borderColorSecondary;\n border-radius: $borderRadius;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n li {\n line-height: 27px;\n padding: 0 15px;\n //font-size: $appTextSize;\n &:hover,\n &:focus {\n background-color: $backgroundColor;\n color: var(--primaryColorHover, $primaryColorHover);\n cursor: pointer;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTagsView from './src/GvTagsView.vue';\n// Define the install method on the GvExpandMenu component\nconst GvTagsViewPlugin = {\n install(app: App): void {\n app.component(GvTagsView.name ?? 'GvTagsView', GvTagsView);\n },\n};\nexport default GvTagsViewPlugin;\n\nexport { GvTagsView };\n","<!--\n * @title: theme switcher\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-08-14 10:17:38\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-18 15:04:37\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n import { computed } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvTheme',\n inheritAttrs: true,\n });\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('theme');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const appStore = useAppStore();\n const themeOptions = computed(() => appStore.getSwitchTheme);\n const currentTheme = computed(() => appStore.getCurrentTheme);\n\n const handleSetTheme = () => {\n //appStore.setTheme(theme);\n };\n</script>\n<template>\n <ElDropdown\n trigger=\"click\"\n :class=\"prefixCls\"\n @command=\"handleSetTheme\">\n <div>\n <GvIcon\n class=\"international-icon\"\n iconName=\"theme\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item of themeOptions\"\n :key=\"item.value\"\n :disabled=\"currentTheme === item.value\"\n :command=\"item.value\">\n {{ item.label }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-theme';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvTheme from './src/GvTheme.vue';\nconst GvThemePlugin = {\n install(app: App): void {\n app.component(GvTheme.name ?? 'GvTheme', GvTheme);\n },\n};\nexport default GvThemePlugin;\n\nexport { GvTheme };\n","<!--\n * @title: tree component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 16:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:54:23\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTree } from 'element-plus';\n import type { Node } from 'element-plus/es/components/tree/src/model/node';\n import type { FilterNodeMethodFunction, LoadFunction, RenderContentFunction, TreeComponentProps, TreeNodeData } from 'element-plus/es/components/tree/src/tree.type';\n import { defineComponent, type ComponentInternalInstance, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tree');\n\n type TreeData = Record<string, unknown>;\n\n export default defineComponent({\n name: 'GvTree',\n props: {\n treeData: {\n type: Array as PropType<TreeData[]>,\n default: () => [],\n },\n treeProps: {\n type: Object as PropType<TreeComponentProps['props']>,\n default: () => ({}),\n },\n nodeKey: {\n type: String,\n default: undefined,\n },\n lazy: {\n type: Boolean,\n default: false,\n },\n load: {\n type: Function as PropType<LoadFunction>,\n default: undefined,\n },\n showCheckbox: {\n type: Boolean,\n default: false,\n },\n draggable: {\n type: Boolean,\n default: false,\n },\n defaultExpandedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n defaultCheckedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n iconClass: {\n type: String,\n default: undefined,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n expandOnClickNode: {\n type: Boolean,\n default: true,\n },\n checkOnClickNode: {\n type: Boolean,\n default: false,\n },\n filterNodeMethod: {\n type: Function as PropType<FilterNodeMethodFunction>,\n default: undefined,\n },\n renderContent: {\n type: Function as PropType<RenderContentFunction>,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['node-click', 'node-expand', 'node-collapse', 'check', 'check-change', 'node-drop'],\n\n setup(props, { emit }) {\n // @methods\n\n const handleNodeClick = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null, event: MouseEvent) => {\n emit('node-click', data, node, treeNode, event);\n };\n\n const handleNodeExpand = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-expand', data, node, treeNode);\n };\n\n const handleNodeCollapse = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-collapse', data, node, treeNode);\n };\n\n const handleCheck = (\n data: TreeData,\n checkedInfo: {\n checkedNodes: TreeNodeData[];\n checkedKeys: (string | number)[];\n halfCheckedNodes: TreeNodeData[];\n halfCheckedKeys: (string | number)[];\n },\n ) => {\n emit('check', data, checkedInfo);\n };\n\n const handleCheckChange = (data: TreeData, checked: boolean, childChecked: boolean) => {\n emit('check-change', data, checked, childChecked);\n };\n\n const handleLazyLoad: LoadFunction = (...args) => {\n props.load?.(...args);\n };\n\n const handleNodeDrop = (draggingNode: Node, dropNode: Node, dropType: 'before' | 'after' | 'inner', event: DragEvent) => {\n emit('node-drop', draggingNode, dropNode, dropType, event);\n };\n\n // @render\n return () => (\n <ElTree\n ref=\"gv-tree\"\n data={props.treeData}\n props={props.treeProps}\n nodeKey={props.nodeKey}\n lazy={props.lazy}\n load={handleLazyLoad}\n draggable={props.draggable}\n showCheckbox={props.showCheckbox}\n defaultExpandedKeys={props.defaultExpandedKeys}\n defaultCheckedKeys={props.defaultCheckedKeys}\n icon={props.iconClass}\n highlightCurrent\n defaultExpandAll={props.defaultExpandAll}\n expandOnClickNode={props.expandOnClickNode}\n checkOnClickNode={props.checkOnClickNode}\n filterNodeMethod={props.filterNodeMethod}\n renderContent={props.renderContent}\n class={prefixCls}\n onNode-click={handleNodeClick}\n onNode-expand={handleNodeExpand}\n onNode-collapse={handleNodeCollapse}\n onNode-drop={handleNodeDrop}\n onCheck={handleCheck}\n onCheck-change={handleCheckChange}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tree';\n .#{$prefixCls} {\n :deep(.el-tree-node) {\n .el-tree-node__content {\n .el-tree-node__label {\n //font-size: $appTextSize;\n }\n .el-checkbox__input {\n &.is-checked {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTree from './src/GvTree.vue';\n\nconst GvTreePlugin = {\n install(app: App): void {\n app.component(GvTree.name ?? 'GvTree', GvTree);\n },\n};\nexport default GvTreePlugin;\n\nexport { GvTree };\n","/*\r\n * @title: encrypt\r\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\r\n * @Date: 2023-12-16 08:07:24\r\n * @LastEditors: andy.ten@tom.com\r\n * @LastEditTime: 2025-04-07 13:54:00\r\n * @version: 1.0.1\r\n * @copyright: copyright (c) 2025 Andy Xu\r\n * node: you can not copy and/or use and/or modify this program free,\r\n * please reserve the segment above.Please mail me if you have any question.\r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nexport const key = 'abcdefgabcdefg12';\r\nexport const encrypt = (word: any): string => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n let ww;\r\n if (typeof word === 'object') ww = JSON.stringify(word);\r\n else ww = word;\r\n const srcs = CryptoJS.enc.Utf8.parse(ww);\r\n const encrypted = CryptoJS.AES.encrypt(srcs, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return encrypted.toString();\r\n};\r\nexport const decrypt = (word: string): any => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n const decrypt = CryptoJS.AES.decrypt(word, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return CryptoJS.enc.Utf8.stringify(decrypt).toString();\r\n};\r\n// Randomly generate a specified number of hexadecimal keys\r\nexport const generateKey = (num: number): string => {\r\n const library = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let key = '';\r\n for (let i = 0; i < num; i++) {\r\n const randomPoz = Math.floor(Math.random() * library.length);\r\n key += library.substring(randomPoz, randomPoz + 1);\r\n }\r\n return key;\r\n};\r\n","/*\n * @title: package lib entry\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-11-28 18:18:44\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 09:22:01\n * @version: 1.1.2\n * @copyright: copyright (c) 2024 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Pinia } from 'pinia';\nimport { setActivePinia } from 'pinia';\nimport 'uno.css'; // 引入 UnoCSS 样式\nimport type { App } from 'vue';\nimport type { Composer } from 'vue-i18n';\n\nimport { setBridgeContext } from './bridge';\nimport GvBacktopPlugin, { GvBacktop } from './GvBacktop';\nimport GvBadgePlugin, { GvBadge } from './GvBadge';\nimport GvBreadCrumbPlugin, { GvBreadCrumb } from './GvBreadCrumb';\nimport GvButtonPlugin, { GvButton } from './GvButton';\nimport GvCardPlugin, { GvCard } from './GvCard';\nimport GvCascaderPlugin, { GvCascader } from './GvCascader';\nimport GvCheckboxPlugin, { GvCheckbox } from './GvCheckbox';\nimport GvCheckboxButtonPlugin, { GvCheckboxButton } from './GvCheckboxButton';\nimport GvCheckboxGroupPlugin, { GvCheckboxGroup } from './GvCheckboxGroup';\nimport GvColPlugin, { GvCol } from './GvCol';\nimport GvDatePickerPlugin, { GvDatePicker } from './GvDatePicker';\nimport GvDialogPlugin, { GvDialog } from './GvDialog';\nimport GvDividerPlugin, { GvDivider } from './GvDivider';\nimport GvDrawerPlugin, { GvDrawer } from './GvDrawer';\nimport GvExpandMenuPlugin, { GvExpandMenu } from './GvExpandMenu';\nimport GvFormPlugin, { GvForm } from './GvForm';\nimport GvHamburgerPlugin, { GvHamburger } from './GvHamburger';\nimport GvIconPlugin, { GvIcon } from './GvIcon';\nimport GvInputPlugin, { GvInput } from './GvInput';\nimport GvInputNumberPlugin, { GvInputNumber } from './GvInputNumber';\nimport GvLangSelectPlugin, { GvLangSelect } from './GvLangSelect';\nimport GvPopconfirmPlugin, { GvPopconfirm } from './GvPopconfirm';\nimport GvPopoverPlugin, { GvPopover } from './GvPopover';\nimport GvRadioPlugin, { GvRadio } from './GvRadio';\nimport GvRadioButtonPlugin, { GvRadioButton } from './GvRadioButton';\nimport GvRadioGroupPlugin, { GvRadioGroup } from './GvRadioGroup';\nimport GvRowPlugin, { GvRow } from './GvRow';\nimport GvScreenFullPlugin, { GvScreenFull } from './GvScreenFull';\nimport GvSearchBarPlugin, { GvSearchBar } from './GvSearchBar';\nimport GvSelectPlugin, { GvSelect } from './GvSelect';\nimport GvSidebarPlugin, { GvSidebar } from './GvSidebar';\nimport GvSidebarLogoPlugin, { GvSidebarLogo } from './GvSidebarLogo';\nimport GvSwitchPlugin, { GvSwitch } from './GvSwitch';\nimport GvTablePlugin, { GvTable } from './GvTable';\nimport GvTabPanePlugin, { GvTabPane } from './GvTabPane';\nimport GvTabsPlugin, { GvTabs } from './GvTabs';\nimport GvTagPlugin, { GvTag } from './GvTag';\nimport GvTagsViewPlugin, { GvTagsView } from './GvTagsView';\nimport GvThemePlugin, { GvTheme } from './GvTheme';\nimport GvTimePickerPlugin, { GvTimePicker } from './GvTimePicker';\nimport GvTreePlugin, { GvTree } from './GvTree';\nconst components = [\n GvRowPlugin,\n GvColPlugin,\n GvInputPlugin,\n GvButtonPlugin,\n GvPopconfirmPlugin,\n GvIconPlugin,\n GvInputNumberPlugin,\n GvCascaderPlugin,\n GvSwitchPlugin,\n GvRadioButtonPlugin,\n GvCheckboxButtonPlugin,\n GvRadioGroupPlugin,\n GvBadgePlugin,\n GvTabPanePlugin,\n GvTabsPlugin,\n GvDrawerPlugin,\n GvCardPlugin,\n GvTablePlugin,\n GvPopoverPlugin,\n GvRadioPlugin,\n GvSelectPlugin,\n GvTimePickerPlugin,\n GvCheckboxGroupPlugin,\n GvCheckboxPlugin,\n GvTagPlugin,\n GvTreePlugin,\n GvFormPlugin,\n GvLangSelectPlugin,\n GvBacktopPlugin,\n GvBreadCrumbPlugin,\n GvHamburgerPlugin,\n GvScreenFullPlugin,\n GvSearchBarPlugin,\n GvSidebarPlugin,\n GvSidebarLogoPlugin,\n GvThemePlugin,\n GvDialogPlugin,\n GvExpandMenuPlugin,\n GvTagsViewPlugin,\n GvDividerPlugin,\n GvDatePickerPlugin,\n];\n\nexport type GuavaUIOptions = {\n store: Pinia;\n i18n: Composer;\n};\n\nexport const install = (app: App, options: GuavaUIOptions) => {\n if ((install as any).INSTALLED) return;\n (install as any).INSTALLED = true;\n\n setActivePinia(options.store);\n setBridgeContext(options);\n\n components.forEach((c) => c.install(app));\n};\n\nconst GuavaUI = { install };\n\n// 🔹 按需导出组件\nexport {\n GvBacktop,\n GvBadge,\n GvBreadCrumb,\n GvButton,\n GvCard,\n GvCascader,\n GvCheckbox,\n GvCheckboxButton,\n GvCheckboxGroup,\n GvCol,\n GvDatePicker,\n GvDialog,\n GvDivider,\n GvDrawer,\n GvExpandMenu,\n GvForm,\n GvHamburger,\n GvIcon,\n GvInput,\n GvInputNumber,\n GvLangSelect,\n GvPopconfirm,\n GvPopover,\n GvRadio,\n GvRadioButton,\n GvRadioGroup,\n GvRow,\n GvScreenFull,\n GvSearchBar,\n GvSelect,\n GvSidebar,\n GvSidebarLogo,\n GvSwitch,\n GvTable,\n GvTabPane,\n GvTabs,\n GvTag,\n GvTagsView,\n GvTheme,\n GvTimePicker,\n GvTree,\n};\n\n// 🔹 hooks / utils\nexport { crud } from '@@/utils/gv.crud';\n// export * from './hooks/web/useNotify';\nexport * from './hooks/web/usePinyin';\nexport * from './hooks/web/useStorage';\nexport * from './utils/gv.notify';\nexport * from './utils/gv.propTypes';\nexport * from './utils/gv.secret';\nexport * from './utils/gv.tree';\nexport * from './utils/index';\n\n// 🔹 默认导出统一安装对象\nexport { GuavaUI };\n"],"names":["globalBridgeKey","getBridge","g","setBridgeContext","ctx","useBridgeI18n","i18n","getPrefixCls","variables","useStyle","prefixCls","_createBlock","_unref","ElBacktop","GvBacktopPlugin","app","GvBacktop","_sfc_main$F","name","props","vref","type","String","default","value","Number","max","isDot","Boolean","hidden","showZero","color","setup","slots","_createVNode","ElBadge","_export_sfc","sfc","GvBadgePlugin","_a","GvBadge","toString","is","val","isExternal","path","isString","isArray","isError","isObject","isDate","isNumber","isBoolean","isFunction","isElement","isMap","isImgPath","isDark","isNull","isEmpty","isEqual","a","b","i","keysA","keysB","key","isUrl","e","setHtmlAttrByLang","locale","sleep","timeLen","__async","resolve","toHump","all","letter","toLine","setDomCssProp","prop","dom","getDomCssProp","joinIcon","icon","joinIcons","hasClass","ele","cls","addClass","removeClass","reg","hasScrollbar","tag","dateFormatConfig","debounce","func","wait","immediate","timeout","arg","context","timestamp","result","later","last","args","callNow","getVNodeText","vnode","item","getVNodeName","removeAmountFormat","zeroFormat","numberFormat","pattern","oldVal","_nfPattern","strAry","p1","len","p2","ret","ch","p3","len2","amountFormat","decimal","v","decimalPattern","setQuickKeys","ev","btnHtml","inputHtml","messageConfirmHtml","bodyDialogHtml","dialogArr","buttonHtml","buttonDHtml","pathResolve","parentPath","childPath","preNameSpace","attrs","useAttrs","__props","isLocal","computed","iconType","iconName","svgClass","styleExternalIcon","iconComponent","compName","Icons","_openBlock","_createElementBlock","_mergeProps","_createElementVNode","_hoisted_1","ElIcon","_resolveDynamicComponent","_hoisted_2","GvIconPlugin","GvIcon","DEFAULT_CONFIG","getConfig","config","listToTree","list","conf","nodeMap","id","children","pid","node","parent","treeToList","tree","findNode","findNodeAll","findPath","visitedSet","findPathAll","filter","listFilter","__spreadValues","forEach","treeMapEach","data","conversion","haveChildren","conversionData","__spreadProps","treeMap","treeData","opt","eachTree","treeDatas","callBack","parentNode","element","newNode","filterBreadcrumb","routes","res","route","meta","_isSlot","s","Object","prototype","call","_isVNode","appStore","useAppStore","permStore","usePermsStore","showBreadcrumbIcon","getShowBreadcrumbIcon","currentRoute","useRouter","t","levelList","ref","menuRouters","routers","getRouters","getBreadcrumb","currentPath","matched","slice","unref","renderBreadcrumb","map","disabled","redirect","ElBreadcrumbItem","title","watch","startsWith","_slot","ElBreadcrumb","TransitionGroup","GvBreadCrumbPlugin","GvBreadCrumb","emits","emit","instance","getCurrentInstance","handleConfirm","event","ElPopconfirm","reference","GvInputPlugin","GvPopconfirm","getValueType","useStorage","valueType","excludes","keys","defaultExcludes","excludesArr","notificationTime","notificationTimeError","messageTime","messageTimeError","alert","msg","alertObj","getStorage","lang","promptMsg","duration","m","ElNotification","confirm","msgs","showCancelButton","hint","ok","cancel","reject","ElMessageBox","message","tableedit","ElMessage","visible","text","otext","size","undefined","link","loading","refForm","required","nativeType","bizType","perms","cb","Function","useRoute","globalSize","useGlobalConfig","buttonSize","buttonConfirm","loadings","locked","isShow","isIf","getSlots","invokeClick","raw","onClick","handlers","Array","length","handler","withLoading","task","setIconStyle","replace","checkPerms","pm","slot","split","x","indexOf","arr","handleClick","exposed","resetFields","rootForm","originFormList","formList","index","filtercode","showLabel","dateType","model","field","rootEl","el","dateRangeSingles","querySelectorAll","startInput","querySelector","endInput","searchBtn","click","classz","renderBtn","display","ElButton","GvButtonPlugin","GvButton","_props","getCardHeader","header","ElCard","GvCardPlugin","GvCard","options","placeholder","clearable","showAllLevels","separator","trigger","filterable","multiple","lazy","lazyLoad","sOps","inputValue","cascaderSize","sPlaceHolder","getDisabled","resolvedInputId","newVal","handleChange","handleBlur","handleFilterMethod","query","labels","pathLabels","join","spell","pathNodes","some","ElCascader","$event","expandTrigger","GvCascaderPlugin","GvCascader","indeterminate","label","border","checkboxValue","checkboxSize","handleUpdate","ElCheckbox","GvCheckboxPlugin","GvCheckbox","inheritAttrs","checkboxButtonSize","ElCheckboxButton","GvCheckboxButtonPlugin","GvCheckboxButton","min","checkboxGroupSize","ElCheckboxGroup","GvCheckboxGroupPlugin","GvCheckboxGroup","_sfc_main$v","span","offset","xs","sm","md","lg","xl","ElCol","GvColPlugin","GvCol","toMidnight","date","d","daysAgo","days","midnight","monthBegin","quarterBegin","month","yearBegin","now","dateShortcuts","dateShortcutsEn","dateTimeShortcuts","dateTimeShortcutsEn","dateRangeShortcuts","start","end","dateRangeShortcutsEn","modelValue","Date","format","valueFormat","defaultTime","rangeSeparator","startPlaceholder","endPlaceholder","disabledDateFunc","disabledDate","editable","unlink","useI18n","datePickerSize","getShortcuts","getPickerOptions","pickerOptions","shortcuts","includes","getTime","db","handleInput","vm","handleFocus","handlePick","maxDate","minDate","ElDatePicker","onCalendarChange","onBlur","onFocus","onChange","GvDatePickerPlugin","GvDatePicker","boundElements","initDrag","collapseMenu","dragDom","dialogHeaderEl","getStyle","attr","disX","disY","dragDomWidth","dragDomHeight","screenWidth","screenHeight","minDragDomLeft","menuWidth","maxDragDomLeft","minDragDomTop","maxDragDomTop","styL","styT","onMouseMove","left","top","onMouseUp","hasFooter","width","height","nest","appendToBody","fullscreen","maxHeight","closeOnClickModal","closeOnPressEscape","dialogClass","buttonQuick","collapseMenus","myDialogClass","dialogVisible","maskVisible","dialogMaxHeight","sAppendToBody","modalAppendToBody","sNest","modalMask","newValue","then","handleVisible","handleOpen","handleOpened","nextTick","handleClose","handleClosed","handleCancel","renderFooterBtn","footer","propsData","getFooter","setMask","mask","getMaxHeight","parseFloat","document","documentElement","clientHeight","pEl","closest","onBeforeUnmount","window","removeEventListener","onMounted","addEventListener","ElDialog","GvDialogPlugin","GvDialog","position","direction","target","clickDivider","preventDefault","stopPropagation","ElDivider","GvDividerPlugin","GvDivider","paddingHeight","drawerVisible","drawerMaxHeight","show","buttonIcon","sPaddingHeight","drawerPaddingHeight","handleResize","evt","returnIcon","ElDrawer","overflow","GvDrawerPlugin","GvDrawer","newPropTypes","createTypes","propTypes","toValidableType","usePinyin","withTone","pinyin","pinYin","__emit","menuList","menuPath","fMenusList","generateRouter","serverRoutes","basePath","prefixTitle","prefixCode","router","i18ntitle","code","tempRoutes","handleCloseDrawer","handleSelect","handleSearch","_b","starClickHandle","star","menuItem","ElAutocomplete","Search","_withCtx","_hoisted_3","_toDisplayString","_hoisted_4","ElTabs","_Fragment","_renderList","ElTabPane","_hoisted_5","sub","_hoisted_6","StarFilled","Star","_hoisted_7","_component_router_link","_hoisted_8","sideWidth","expandHandle","_normalizeClass","_normalizeStyle","GvMenuList","GvExpandMenuPlugin","GvExpandMenu","prefixIcon","suffixIcon","maxlength","readonly","columnProp","rows","autosize","showWordLimit","inputSize","sPlaceholder","renderPrefixIcon","renderSuffixIcon","select","handleClear","handleKeyDown","ElInput","number","prefix","suffix","GvInput","step","stepStrictly","precision","currentValue","oldValue","ElInputNumber","GvInputNumberPlugin","GvInputNumber","dicType","dicRemote","clear","isreload","editRow","collapseTags","userStore","useUserStore","useNotify","dicIcon","remote","loadingText","externalValue","inputShowLabel","inputFilterable","selectValue","originOptions","className","dicSrc","toLowerCase","valueCache","Map","selectSize","isEmptyLabel","getDictItemLabel","l1","l2","formatOptionLabel","findLabelInOptions","opts","find","c","getOptionValue","row","cached","get","obj","set","getSelectCode","o","trim","getSelectLabel","isEmptySelectValue","every","syncEmptyToParent","elSelectModel","mergeOptionsWithSelected","_opts","merged","append","sv","pushDefaultOption","op","push","getSelectOptions","src","xx","arr2","dictCache","dict","getDictDivision","cache","addDictCache","getDict","RegExp","test","filterMethod","initialRemoteLoaded","pendingRemoteQuery","pendingRemotePromise","remoteRequestSeq","filterOriginOptions","remoteDictSearch","requestSeq","sDicType","substring","datas","ops","JSON","parse","console","log","remoteMethod","q","filtered","ensureDefaultOption","existed","resolveDisplayLabel","localOpts","applySelectValue","resolved","showLbl","deep","handleVisibleChange","renderSelectOption","ElOption","renderTableOption","columnTexts","multiColumn","v1","mm","m2","m4","vv1","mmm","mm2","mm4","labelArr","opArr","ElSelect","GvSelectPlugin","GvSelect","columnKey","require","switchType","newStatus","ElSwitch","GvSwitchPlugin","GvSwitch","isRange","disabledHours","disabledMinutes","disabledSeconds","timepickerSize","mergedDisabledHours","mergedDisabledMinutes","mergedDisabledSeconds","ElTimePicker","GvTimePickerPlugin","GvTimePicker","infoMsg","info","calLength","sum","vcity","checkDecimal","decimalLen","checkProvince","card","province","verifyBirthday","year","day","birthday","now_year","time","checkBirthday","re_fifteen","arr_data","re_eighteen","changeFivteenToEighteen","arrInt","arrCh","cardTemp","checkParity","valnum","htValidate","rule","callback","language","divider","isDivider","labelWidth","formStyle","scroller","expose","searchFieldsCollapsed","provide","formRefs","formElRef","setFormRef","rootNodeStyle","rules","isEditContainer","sMaxHeight","isScrollbar","isAnchor","isDialog","colSpanNums","formType","styles","formSize","labelPosition","searchDivider","getLanguage","setDividerShow","getEditBar","editbar","ElRow","getDivider","dividerRender","dividerTitle","getDictItems","dictCacheTmp","dictTmp","getItemRules","_item","validateKey","maxLen","validator","gvValidate","excluded","handleRadioInput","formVal","handleDateRange2Focus","$el","handleDateRange2Blur","handleDateRange2Change","endTime","startTime","datePicker","dateArr","handleSwitchDictChange","error","handleRadioDictChange","getSearchColClass","slotProps","expand","showDefaultRow","searchFormRows","renderFormItem","_index","_slot3","colspan","createRow","blur","focus","change","render","renders","isHidden","cType","validateRule","sDateType","dateFormat","ph","startPh","endPh","cols","colSpanXs","colSpanSm","colSpanMd","colSpanLg","colSpanXl","week","datetime","editables","isTableDic","sLabel","searchFormLabel","switchDefaultVal","searchColClass","ElFormItem","_createTextVNode","ElTooltip","padding","margin","clip","whiteSpace","ElRadioGroup","_slot2","ElRadio","ElRadioButton","vv","toolText","_resolveComponent","getItems","sRootEl","tabPane","offsetTop","classList","contains","clearFormValidate","clearValidate","setFormStyle","formStyle1","lastIndexOf","parseInt","clientWidth","init","formModel","formRule","originItem","difference","diff","fieldObj","oldObj","fieldObjKeys","key2","nextProps","prevProps","firstSlot","stringify","dialogBody","dialogBody2","Transition","_withDirectives","ElForm","flexWrap","flex","minWidth","_vShow","GvFormPlugin","GvForm","collapse","loadDict","loadDictDivision","toggleCollapse","collapsed","currentDict","currentReloadDict","currentDictDivision","Fold","Expand","GvHamburgerPlugin","GvHamburger","localeStore","useLocaleStore","langMap","currentLang","handleSetLang","switchLocale","useLocale","ElDropdown","ElDropdownMenu","ElDropdownItem","_component_GvIcon","GvLangSelectPlugin","GvLangSelect","placement","tablePopover","columnType","popClass","handleUpdateVisible","handleShow","handleHide","handlePopoverWrapper","getReferenceSlot","ElPopover","GvPopoverPlugin","GvPopover","radioValue","radioSize","GvRadioPlugin","GvRadio","GvRadioButtonPlugin","GvRadioButton","radioGroupSize","GvRadioGroupPlugin","GvRadioGroup","_sfc_main$c","gutter","GvRowPlugin","GvRow","toggle","isFullscreen","useFullscreen","toggleFullscreen","GvScreenFullPlugin","GvScreenFull","inject","formNode","fieldList","fields","expandFields","shrinkFields","createSearchBar","searchBar","defaultSlot","searchBtnFlag","expandText","shrinkText","shrink","GvSearchBarPlugin","GvSearchBar","hasOneShowingChild","onlyOneChild","showingChildren","useRenderMenuTitle","renderMenuTitle","useRenderMenuItem","menuMode","renderMenuItem","oneShowingChild","fullPath","noShowingChildren","alwaysShow","ElMenuItem","ElSubMenu","menuSelect","layout","getLayout","getCollapseMenus","leftMenuUniqueOpened","getLeftMenuUniqueOpened","activeMenu","open","renderMenu","ElMenu","renderMenuWrap","ElScrollbar","GvSidebarPlugin","GvSidebar","_imports_0","GvSidebarLogoPlugin","GvSidebarLogo","createTableBar","tableBar","defaultSlots","firstChild","closable","effect","round","tagSize","ElTag","appendPageInfo","pi","pageInfo","currentpagenum","recordsperpage","countrows","totalpage","combined","tabNode","filterConditions","co","sOp","coo","ds","condition","searchCombined","action","upper","sType","saveCombined","fetchData","fetch","submit","hasMsg","fetchTable","checkForms","fmNodes","fmNode","rawFmChildren","fmChildList","fmNode2","_c","save","check","fmInnerNode","conditions","update","search","searchInputNode","tableEl","tableHeader","tableFixedHeader","columns","h","columnsFixed","lenFixed","searchNoFm","toNewPageSearch","trans","insertResult","searchData","updateResult","rownums","currentRow","removeResult","getDictDisplayLabel","dictObj","_f","_e","_d","_i","_h","_g","_k","_j","resetEditValue","crud","rowData","fieldValue","items","itemChild","codes","tableHeadFilterPopoverPopperStyle","maxWidth","refTable","tableHead","tableData","pageSize","rowClassName","rowStyle","spanMethod","cellStyle","tableType","tableSort","tableKit","tableFetch","multi","isShowPage","total","tableInit","beforeImport","tableFilter","tableCb","expandRowKeys","limitHeight","tableAction","tableActionIcon","sTableAction","sTableActionIcon","sTableConfirm","detailPlacement","sTableType","originTableHead","tableHeads","sHeight","sMaxWidth","isEditTable","sPageSize","resultData","recordsList","records","pageSizes","filterHeads","popoverVisible","exportBtnDisabled","exportBtnLoading","importBtnLoading","tableSortMode","exportDialogShow","importDialogShow","sTableBar","gTableBar","tableSearchShow","sTableSort","sTableKit","showPopoverDetail","pageLayout","actionWidth","transHash","headColumn","headColumnInit","columnSumsDecimal","isIndeterminate","columnTreeList","columnCheckedKeys","storageKey","loginAccount","lsTableHeads","debounceSearch","tableRefs","tableRef","tableSize","getPageInfo","current","pages","setTableRef","closeAllPopover","property","next","ensurePopoverKey","propKey","wrapPopoverFilterBody","body","getScrollLeft","startLoading","stopLoading","transRecords","loadAction","splice","handleImport","handleExport","getImportBtn","import","buttonName","getExportBtn","export","runPageSearch","fC","fetchFn","handleSizeChange","handleCurrentChange","handleTableSearchInput","handleTableSearch","fh","strFh","y","getTableSearch","handlePopoverShow","popOvers","tableBodyWidth","style","bodyWrapper","scrollLeft","handlePopoverHide","createChangedColumns","checkedKeys","column","hasHidden","handleColumnCheckChange","checked","childChecked","$refs","$children","getCheckedKeys","hColumns","getTableColumn","setStoreLocal","handleTableRefresh","inputSearch","getTableBar","btns","exportSlots","importSlots","getKitBar","isVisible","ElButtonGroup","Refresh","Operation","ElTree","getSortModel","marginRight","columnFilterHandler","propField","popoverHtml","checkList","dateHtmlArr","filterValue","innerText","assign","getAttribute","add","tableFixHeader","fixColumns","fixLen","columnFilterHandlerReset","remove","primaryBtn","setAttribute","getColWidth","edit","label2","sWidth","columnFormatter","cellValue","handleColumnFilter","popoverHtmlList","from","pop","removeAttribute","renderHeadFilter","_slot4","_slot5","_slot6","fc","$store","getters","dictDivision","dispatch","ret2","_slot7","_slot8","_slot9","handleDictCheckAll","handleDictCheck","handlePopoverSlotClick","renderColumnItem","tableFixed","fixed","align","formatter","cellBlur","cellEnter","cellChange","selectable","showLabelProp","columnFilter","multiLabel","heads","reserveSelection","sHidden","sProp","Math","random","sFixed","sortable","multiLabels","hType","hSLabel","hSProp","hKey","hSFixed","hReserveSelection","hSortable","hSWidth","ElTableColumn","scope","renderRowEdit","renderAction","content","confirmArr","iconArr","sContent","confirms","detail","actionType","lock","$index","onConfirm","onAfter-enter","handleDetailPopoverShow","checkEditRow","tableColumns","thd","lsTableHeadsArr","startIndex","ff","f","treeNode","rownumWidth","actionHead","actionColumn","columnVNode","sortMethod","_0","order","fieldName","sortingType","sumData","sort","row1","row2","isNaN","localeCompare","oi","rowDblClick","tagName","cell","onRowDblclick","tr","tds","firstBtn","btnArr","j","btn","prevVal","typeArr","doLayout","n","tableBodyWrapper","_slot0","GvTableBar","ElTable","_resolveDirective","ElPagination","GvTablePlugin","GvTable","autoHeight","proxy","GvTabsPlugin","GvTabPane","tabPosition","tabMaxHeight","tabHeight","panes","handleTabClick","tabVm","tabName","calcPaneInstances","createTabPane","dialogContainer","GvTabs","GvTagPlugin","GvTag","reactive","currentKey","activeKey","tagsViewStore","useTagsViewStore","permsStore","visitedViews","mainAppRoutes","isRedirect","isActive","isAffix","affix","filterAffixNavMenus","navMenus","affixTags","tagPath","params","hash","redirectedFrom","addAffixTags","tagView","addVisitedView","createTabPanel","icons","picon","showContextMenu","closeContextMenu","toLink","routePath","targetView","toLastView","visitedView","currentView","latestView","addNavMenu","addTagView","moveToCurrentTag","view","clickTab","tab","closeCurrentTag","targetKey","delTagView","refreshSelectedTag","delCachedView","findCurTagIndex","findIndex","closeTagsOrientation","isClosed","cloneDeep","closeOthersTags","delOthersViews","oldName","tagsViewEl","useEventListener","targetNode","parentElement","clientX","pageX","clientY","pageY","GvTagsViewPlugin","GvTagsView","themeOptions","currentTheme","handleSetTheme","GvThemePlugin","GvTheme","treeProps","nodeKey","load","showCheckbox","draggable","defaultExpandedKeys","defaultCheckedKeys","iconClass","defaultExpandAll","expandOnClickNode","checkOnClickNode","filterNodeMethod","renderContent","handleNodeClick","handleNodeExpand","handleNodeCollapse","handleCheck","checkedInfo","handleCheckChange","handleLazyLoad","handleNodeDrop","draggingNode","dropNode","dropType","GvTreePlugin","GvTree","encrypt","word","keyStr","CryptoJS","ww","srcs","decrypt","generateKey","num","library","randomPoz","components","GvPopconfirmPlugin","GvTabPanePlugin","install","setActivePinia","GuavaUI","exports","_sfc_main$G","_sfc_main$h","_sfc_main$8","confirm$1"],"mappings":"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AIngB,IAAS,QAASmgB,EAAO,WACxBA,EAAO,iCACLA,CACT,EACA,OAAQ,CAACngB,EAAcvJ,IAAgB,CACrC,IAAI0pB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,QAAU,KAAK,MAAM1pB,EAAM,CAAC,EAAI,QAAUA,EAAM,OACxE0pB,EAAO,kBAAoB1pB,EAAM,cAC/B0pB,CACT,EACA,MAAQngB,GAAiB,CACvB,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,kBACxBA,EAAO,kEACLA,CACT,EACA,SAAU,CAACngB,EAAcvJ,IAAgB,CACvC,IAAI0pB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,aAAe1pB,EAAM,OACtC,uCAAyCA,EAC9C0pB,CACT,EACA,OAASngB,GAAiB,CACxB,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,cACxBA,EAAO,iDACLA,CACT,EACA,OAASngB,GAAiB,CACxB,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,WACxBA,EAAO,iCACLA,CACT,EACA,QAAUngB,GAAiB,CACzB,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,kBACxBA,EAAO,sEACLA,CACT,EAEA,aAAengB,GAAiB,CAC9B,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,kBACxBA,EAAO,6CACLA,CACT,EAEA,KAAOngB,GAAiB,CACtB,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,yBACxBA,EAAO,+DACLA,CACT,EACA,MAAQngB,GAAiB,CACvB,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,aACxBA,EAAO,+BACLA,CACT,EACA,MAAQngB,GAAiB,CACvB,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,WACxBA,EAAO,gCACLA,CACT,EACA,UAAYngB,GAAiB,CAC3B,IAAImgB,EAAO,GACX,OAAIngB,IAAS,QAASmgB,EAAO,kCACxBA,EAAO,mCACLA,CACT,EACA,GAAKngB,GAAiB,C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"}