@chase-shao/vue-component-lib 1.2.90 → 1.2.91

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":"index.es.js","sources":["../src/stores/useLibraryMainStore.ts","../src/assets/js/util.ts","../src/stores/libraryConfig.ts","../src/services/axios.ts","../src/services/dataGetter.ts","../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js","../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js","../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js","../src/components/data-gen/actions/types.ts","../src/services/dataGen.ts","../src/services/validation.ts","../src/components/data-gen/widgets/InputText.vue","../src/components/data-gen/widgets/InputNumber.vue","../src/components/data-gen/widgets/SelectList.vue","../src/components/data-gen/widgets/Cascader.vue","../src/components/data-gen/widgets/FileUpload.vue","../src/components/data-gen/widgets/TextArea.vue","../src/components/data-gen/widgets/CheckBox.vue","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/config-provider/context.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/_utils/global-config.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/_utils/is.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/_virtual/plugin-vue_export-helper.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/icon/icon-question-circle/icon-question-circle.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/icon/icon-question-circle/index.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/icon/icon-download/icon-download.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/icon/icon-download/index.js","../src/components/data-gen/widgets/ToolTip.vue","../src/components/data-gen/widgets/index.vue","../src/components/data-gen/actions/SubmitButton.vue","../src/components/data-gen/actions/DetailLink.vue","../src/components/data-gen/actions/index.vue","../src/composables/useRouter.ts","../src/composables/useTriggers.ts","../src/composables/usePinia.ts","../src/components/TopBar.vue","../src/assets/js/fieldsGroup.ts","../src/services/page.ts","../src/components/data-gen/views/CreateView.vue","../src/components/data-gen/views/UpdateView.vue","../src/composables/customComps.ts","../src/components/data-gen/views/DetailView.vue","../src/components/data-gen/views/ListView.vue","../src/main.ts"],"sourcesContent":["import { defineStore } from 'pinia'\nimport { ref } from 'vue'\n\nexport const useLibraryMainStore = defineStore('main', () => {\n const token = ref<string | undefined>(undefined)\n \n return {\n token\n }\n})\n","import type { Store } from 'pinia'\n\n/**\n * 该函数用于创建一个异步的延迟操作,使程序暂停执行指定的毫秒数。\n * @param tick - 延迟的毫秒数。\n * @returns 一个 Promise,在指定的毫秒数后解析。\n */\nexport const sleep = async (tick: number) => new Promise((resolve) => setTimeout(resolve, tick))\n\n/**\n * async get data from store, if store ie empty load from remote.\n * @param store Target Pinia store\n * @param key Data key\n * @param remoteFunction Remote load function\n * @param defaultValue data default value\n * @returns {Promise<*>}\n */\nexport const getStoreData = async (\n store: Record<string, any>,\n key: string,\n remoteFunction: Function,\n defaultValue = undefined\n) => {\n // if store data is undefined, store at initial state.\n // then set store data to null and load from remote\n if (store[key] === undefined) {\n try {\n store[key] = null\n store[key] = (await remoteFunction()) || defaultValue\n } catch (e) {\n // if remote hih uncaught error, then set store data to initial state.\n console.error(e)\n store[key] = undefined\n }\n }\n // if store data is null, then other threads is loading data from remote.\n // wait certain time to until data loaded. Mean to save http resource\n while (store[key] === null) {\n await sleep(100)\n }\n return store[key]\n}\n\n/**\n * Pat a 0 to left if input string length is 1\n * @param str\n * @returns {string}\n */\nexport const patLeft0 = (str: any): string => {\n const s = `0${str}`\n return s.substring(s.length - 2)\n}\n\n/**\n * Format date as input format.\n * @param date input date\n * @param format date format, default as 'yyyy-MM-dd hh:mm:ss'\n * @returns {string|*}\n */\nexport const formatDate = (date: Date | string, format = 'yyyy-MM-dd hh:mm:ss'): string => {\n if (!date || (typeof date === 'string' && date.length === 0)) {\n return ''\n }\n\n try {\n const _date = new Date(date)\n const meta = [\n ['yyyy', _date.getFullYear()],\n ['yy', _date.getFullYear().toString().substring(2)],\n ['MM', patLeft0(_date.getMonth() + 1)],\n ['M', _date.getMonth() + 1],\n ['dd', patLeft0(_date.getDate())],\n ['d', _date.getDate()],\n ['hh', patLeft0(_date.getHours())],\n ['h', _date.getHours()],\n ['mm', patLeft0(_date.getMinutes())],\n ['m', _date.getMinutes()],\n ['ss', patLeft0(_date.getSeconds())],\n ['s', _date.getSeconds()]\n ] as [string, string][]\n\n for (const [key, value] of meta) {\n format = format.replace(key, value)\n }\n\n return format\n } catch (e) {\n return date.toLocaleString()\n }\n}\n\nexport const downloadFile = (data: Blob | string, fileName: string) => {\n // data为blob格式\n let blob\n if (data instanceof Blob) {\n blob = data\n } else {\n blob = new Blob([data])\n }\n const downloadElement = document.createElement('a')\n const href = window.URL.createObjectURL(blob)\n downloadElement.href = href\n downloadElement.download = fileName\n downloadElement.click()\n window.URL.revokeObjectURL(href)\n}\n","// 全局配置\nexport interface LibraryConfig {\n apiBase?: string\n appSecret?: string\n fieldsGroup?: {\n name: string\n keys: string[]\n }[]\n}\n\nlet globalConfig: LibraryConfig = {}\n\nexport function setLibraryConfig(config: LibraryConfig) {\n globalConfig = { ...globalConfig, ...config }\n}\n\nexport function getLibraryConfig(): LibraryConfig {\n return globalConfig\n}","import { getCurrentInstance } from 'vue'\nimport { default as Axios } from 'axios'\nimport { useLibraryMainStore } from '@/stores/useLibraryMainStore'\nimport { getStoreData } from '../assets/js/util'\nimport { getLibraryConfig } from '@/stores/libraryConfig'\n\nconst instance = getCurrentInstance()\n\n// 获取配置,优先使用全局配置,回退到环境变量\nfunction getApiConfig() {\n const config = getLibraryConfig()\n return {\n apiBase: config.apiBase || import.meta.env.VITE_BPM_API_BASE || '',\n appSecret: config.appSecret || import.meta.env.VITE_BPM_APP_SECRET || ''\n }\n}\n\nfunction responseInterceptor(res: any) {\n if(!res?.data?.statusCode) {\n return res\n }\n switch (res.data.statusCode) {\n case 1:\n res.data.data = res.data.result\n return res.data\n case 0:\n default:\n instance?.appContext.config.globalProperties.$notification.error(res.data.msg)\n return null\n }\n}\n// 动态创建 axios 实例\nfunction createAxiosInstance() {\n const { apiBase } = getApiConfig()\n const axios = Axios.create({\n baseURL: apiBase,\n timeout: 20 * 1000, // 20s\n // headers: { 'Content-Type': 'application/json' },\n withCredentials: true\n })\n axios.interceptors.response.use(responseInterceptor)\n return axios\n}\n\ntype GetTokenRes = {\n token: string\n expireSeconds?: number\n}\n\nexport const getToken = async () => {\n const { apiBase, appSecret } = getApiConfig()\n const axios = createAxiosInstance()\n const mainStore = useLibraryMainStore()\n \n return await getStoreData(mainStore, 'token', async () => {\n const res = await axios.get<GetTokenRes>(`${apiBase}/GenerateToken`, {\n params: {\n appid: 'bpm',\n appsecret: appSecret,\n },\n })\n if (res?.data?.token) {\n // every 1 hour clear current token in case token expired\n setTimeout(() => {\n mainStore.token = undefined\n }, (res.data?.expireSeconds ?? 60 * 60) * 1000)\n }\n return res?.data?.token\n })\n}\n\nexport const getAxios = async () => {\n const token = await getToken()\n const axios = createAxiosInstance()\n axios.defaults.headers.common['Authorization'] = `Bearer ${token}`\n return axios\n}\n","export default {\n CurrentUserEmail: (store:any) => store.svrStore()?.userInfo?.email_address ?? 'test.email@dataGetter.ts',\n CurrentUserPositionCode: (store:any) => store.bpmStore()?.positionCode ?? 888,\n CurrentDatetime: () => new Date().toISOString(),\n ApproverEmail: (store:any) => store.svrStore()?.userInfo?.email_address ?? 'test.email@dataGetter.ts',\n ApproverPositionCode: (store:any) => store.bpmStore()?.positionCode ?? 999,\n RejectReason: () => 'Test Reject Reason',\n} as { [key: string]: Function }\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import type { RedirectType } from '@/types'\n\nenum ActionTypeEnum {\n Submit,\n Link,\n Button\n}\n\ntype ActionProps = {\n // title: string,\n url: string\n redirectType: RedirectType\n loading?: boolean\n}\n\n// type ActionType = 'submit' | 'link'\n\ntype ActionEmits = {\n (e: 'click', actionType: ActionTypeEnum, url: string, redirectType: RedirectType, title: string): void\n}\n\ntype ActionNoTypeEmits = {\n (e: 'click', url: string, redirectType: RedirectType): void\n}\n\nexport type {\n ActionProps,\n ActionEmits\n}\n\nexport { ActionTypeEnum, ActionNoTypeEmits }","import type { RedirectType } from '@/types'\nimport { getAxios } from './axios'\nimport { default as dataGetter } from './dataGetter'\nimport { v4 as uuidv4 } from 'uuid'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport type { FileItem } from '@arco-design/web-vue'\nimport { downloadFile } from '@/assets/js/util'\n\nexport type SelectOption = {\n value: string | number\n label: string\n [key: string]: unknown\n}\n\nexport type Tree = {\n title: string\n items: Tree[]\n}\n\nexport type WidgetConfig = {\n widget: string\n readonly: boolean\n title: string\n dataSourceProvider: string\n options?: SelectOption[]\n multiple?: boolean\n remote?: string\n uploadURL?: string\n files?: FileItem[]\n removeFile?: (attachmentId: string) => Promise<void>\n outputText?: Tree[],\n isVisible?: boolean,\n [key: string]: unknown\n}\n\nexport type ValidationConfig = {\n ruleName: string\n ruleParameter: any\n errorMessage: string\n}\n\nexport type Trigger = {\n event: string\n handlerName: string\n}\n\nexport type FieldConfig = {\n widget?: WidgetConfig\n order?: number\n validations: ValidationConfig[]\n modelValue?: any\n column?: boolean\n triggers?: Trigger[]\n uiFilters?: any[]\n isFiltered: boolean\n dependent: string\n fieldValue?: any\n operator?: string\n}\n\nexport type TabsConfig = {\n key: string\n title: string\n filters: Record<string, any>[]\n order: number\n}\n\nexport type Action = {\n redirectUrl: string,\n location: 'InTable' | 'InOperation',\n attributeType: 'UIControl',\n readonly: boolean,\n widget: ActionTypeEnum,\n title: string,\n isSubmit: boolean,\n requestUrl?: string\n redirectType?: 'Create' | 'Details' | 'Update',\n eventName?: string,\n}\n\nexport type PageConfig = {\n pageType: string\n fields: Record<string, FieldConfig>\n actions?: Action[]\n globalValidations: Array<{\n rule: string\n errorMessage: string\n param?: any\n appliesTo: string[]\n }>\n tabs?: TabsConfig[]\n banner: {\n title: string\n subTitle: string\n }\n}\n\ntype FieldData = {\n attributes: Object[]\n propertyValue?: any\n}\n\nexport enum PageActionType {\n Create = 0,\n Update = 1,\n Details = 2,\n List = 3,\n ReCreate = 5,\n}\n\nfunction mapPageData(input: any, type: PageActionType, store: { svrStore: any, bpmStore: any }): PageConfig {\n const config: PageConfig = {\n pageType: '',\n fields: {},\n globalValidations: [],\n banner: {\n title: '',\n subTitle: '',\n },\n }\n\n // 处理ClassAttributes\n input.__ClassAttributes?.forEach((attr: any) => {\n if (attr.attributeType === 'UIPageType') {\n config.pageType = attr.Type\n } else if (attr.attributeType === 'UIValidationControl') {\n config.globalValidations.push({\n rule: attr.ruleName,\n errorMessage: attr.errorMessage,\n param: attr.ruleParameter,\n appliesTo: attr.propertyNames || ['*'],\n })\n } else if (attr.attributeType === 'UIControl') {\n const showToRoles = attr.showToRoles.split(',').map((role: string) => role.trim())\n const hasRole = store.bpmStore().employeeInfo.roleList.some((role: { name: string }) => showToRoles.includes(role.name)) || attr.showToRoles === ''\n if (attr.widget === 'Tab') {\n if (!config.tabs) {\n config.tabs = []\n }\n if (hasRole) {\n config.tabs.push({\n key: uuidv4(),\n title: attr.title,\n filters: attr.filters ? JSON.parse(attr.filters) : [],\n order: attr.order,\n })\n }\n return\n }\n if (!config.actions) {\n config.actions = []\n }\n if (hasRole) {\n // 只有已退回的workflow才能看到重新提交按钮\n if (attr.title === 'Re-Submit') {\n if (input.status.propertyValue !== -1) {\n return\n }\n }\n config.actions.push({\n isSubmit: attr.isSubmit,\n requestUrl: attr.requestUrl,\n redirectUrl: attr.redirectUrl,\n redirectType: attr.redirectType,\n title: attr.title,\n widget: attr.widget === 'Link' ? ActionTypeEnum.Link : attr.widget === 'Submit' ? ActionTypeEnum.Submit : ActionTypeEnum.Button,\n location: attr.location,\n attributeType: attr.attributeType,\n readonly: attr.readonly,\n eventName: attr.eventName,\n })\n }\n } else if (attr.attributeType === 'Banner') {\n config.banner.title = attr.title\n if (type === PageActionType.Create) {\n config.banner.subTitle = attr.subTitle\n } else if (type === PageActionType.ReCreate) {\n config.banner.subTitle = attr.subTitle\n } else {\n config.banner.subTitle = replaceWorkflowId(attr.subTitle, input.workflowId.propertyValue)\n }\n }\n })\n if (config.tabs) {\n config.tabs = config.tabs.sort((a, b) => a.order - b.order)\n }\n\n // 处理字段配置\n Object.entries(input).forEach(([fieldName, fieldData]) => {\n if (fieldName === '__ClassAttributes' || fieldName === 'className') return\n if (fieldName === 'id' || fieldName === 'deleteFlag' || fieldName === 'status' || fieldName === 'workFlowReason') {\n return\n }\n if (type !== PageActionType.List) {\n if (fieldName === 'workflowId') {\n return\n }\n }\n const fieldConfig: FieldConfig = {\n validations: [],\n triggers: [],\n isFiltered: false,\n dependent: '',\n operator: '',\n }\n\n const { attributes, propertyValue } = fieldData as FieldData\n // 处理字段值\n switch (propertyValue) {\n case null:\n fieldConfig.modelValue = ''\n break\n case undefined:\n fieldConfig.modelValue = ''\n break\n default:\n fieldConfig.modelValue = propertyValue\n break\n }\n if (fieldName === 'onBehalf' && type === PageActionType.Create) {\n fieldConfig.modelValue = dataGetter.CurrentUserEmail(store)\n }\n\n if (type === PageActionType.Update || type === PageActionType.ReCreate) {\n if (fieldName === 'directReports' || fieldName === 'employeesInTheTeam') {\n if (fieldConfig.modelValue) {\n fieldConfig.modelValue = Number(fieldConfig.modelValue)\n }\n }\n }\n\n // 处理控件属性\n attributes?.forEach((attr: any) => {\n if (attr.order || attr.Order) {\n fieldConfig.order = (attr.order ?? attr.Order) as number\n } else if (attr.attributeType === 'UIControl') {\n attr.outputText = attr.outputText ? JSON.parse(attr.outputText) : []\n fieldConfig.widget = {\n ...attr,\n column: true,\n } as WidgetConfig\n } else if (attr.attributeType === 'UIValidationControl' && type !== PageActionType.List) {\n if (fieldConfig.widget?.widget !== 'CheckBox') {\n fieldConfig.validations.push(attr as ValidationConfig)\n }\n } else if (attr.attributeType === 'UIListed') {\n fieldConfig.widget = {\n ...attr,\n column: true,\n } as WidgetConfig\n } else if (attr.attributeType === 'UIFiltered') {\n fieldConfig.isFiltered = true\n fieldConfig.operator = attr.operatorType\n } else if (attr.dependentType) {\n fieldConfig.dependent = dataGetter[attr.dependentType] ? dataGetter[attr.dependentType](store) : ''\n } else if (attr.eventType === 'Change') {\n fieldConfig.triggers?.push({\n event: 'change',\n handlerName: attr.eventName\n })\n }\n })\n\n config.fields[fieldName] = fieldConfig\n })\n\n return config\n}\n\nexport const getPageData = async (\n type: PageActionType,\n className: string,\n store: {\n svrStore: any,\n bpmStore: any\n },\n opt?: {\n workflowId: string\n },\n) => {\n const axios = await getAxios()\n const res = await axios.get(`/General/${className}/${type}/page`, { params: opt })\n return mapPageData(res?.data, type, store)\n}\n\nexport const getBtnList = async (\n type: PageActionType,\n className: string,\n opt: {\n workflowId?: string\n email?: string\n },\n): Promise<{\n button: string,\n isShow: boolean\n}[]> => {\n const axios = await getAxios()\n const res = await axios.post(`/${className}/${type}/button/List`, null, { params: opt })\n return res?.data\n}\n\nexport type ListDataRes = {\n __ClassAttributes: {\n redirectUrl: string,\n location: 'InTable' | 'InOperation',\n attributeType: 'UIControl',\n readonly: boolean,\n widget: 'Link',\n title: 'Approve' | 'Create' | 'Update',\n isSubmit: boolean\n redirectType: RedirectType,\n }[],\n data: object[],\n totalCount: number\n}\n\nexport type Paging = {\n current: number,\n total: number,\n pageSize: number,\n defaultPageSize: number,\n showTotal: boolean,\n showPageSize: boolean,\n filters: Record<string, any>[],\n}\n\nexport async function getListData(\n className: string,\n params: {\n filters: object[]\n sorts: object[]\n pageNumber: number\n pageSize: number\n }\n) {\n const axios = await getAxios()\n const res = await axios.post<ListDataRes>(`/General/${className}/list`, params)\n return {\n data: res.data.data,\n totalCount: res.data.totalCount,\n // actions: res.data.__ClassAttributes.filter(item=> item.attributeType === 'UIControl').map((attr) => {\n // return {\n // redirectUrl: attr.redirectUrl,\n // location: attr.location,\n // attributeType: attr.attributeType,\n // redirectType: attr.redirectType,\n // readonly: attr.readonly,\n // widget: attr.widget,\n // title: attr.title,\n // isSubmit: attr.isSubmit,\n // }\n // }\n // ),\n }\n}\n\nexport async function createData(className: string, data: object, url: string) {\n const axios = await getAxios()\n const res = await axios.post<number[]>(url, data, {\n params: {\n className,\n },\n })\n return res.data\n}\n\nexport async function updateData(className: string, id: string, data: object, url: string) {\n const axios = await getAxios()\n const replacedUrl = replaceWorkflowId(url, id)\n const res = await axios.put(replacedUrl, data)\n return res?.data\n}\n\nfunction replaceWorkflowId(url: string, id: string): string {\n return url.replace(/{WorkflowId}/g, id)\n}\n\nfunction replaceEmail(url: string, email: string): string {\n return url.replace(/{ApproverEmail}/g, encodeURIComponent(email))\n}\n\nfunction replaceReason(url: string, reason: string): string {\n return url.replace(/{WorkFlowReason}/g, encodeURIComponent(reason))\n}\n\nfunction replaceStatus(url: string, status: string): string {\n return url.replace(/{Status}/g, status)\n}\n\nfunction replaceIsGlobal(url: string, ifGlobal: string): string {\n return url.replace(/{IfTriggerGlobal_RandP_Approval}/g, ifGlobal)\n}\n\nfunction replaceClassName(url: string, className: string): string {\n return url.replace(/{ClassName}/g, encodeURIComponent(className))\n}\n\nexport async function approveData(className: string, id: string, email: string, reason: string, data: object, url: string, status: string, ifGlobal: string) {\n const axios = await getAxios()\n let replacedUrl = replaceWorkflowId(url, id)\n replacedUrl = replaceEmail(replacedUrl, email)\n replacedUrl = replaceReason(replacedUrl, reason)\n replacedUrl = replaceStatus(replacedUrl, status)\n replacedUrl = replaceIsGlobal(replacedUrl, ifGlobal)\n replacedUrl = replaceClassName(replacedUrl, className)\n const res = await axios.put(replacedUrl, data)\n return res?.data\n}\n\nexport async function getOptions(url: string, value?: string): Promise<SelectOption[]> {\n const axios = await getAxios()\n const res = await axios.get(url, { params: { value } })\n const list = res?.data as { [key: string]: string }\n return Object.entries(list).map(([key, item]) => ({\n value: key,\n label: item,\n }))\n}\n\nexport async function submit(url: string, params: any = null): Promise<SelectOption[]> {\n const axios = await getAxios()\n const res = await axios.post(url, params)\n return res?.data\n}\n\nexport async function getProcess(className: string, workflowId: string): Promise<any[]> {\n const axios = await getAxios()\n const res = await axios.get(`/General/${className}/${workflowId}/process`)\n return res?.data\n}\n\nfunction convertToFileItem(file: any) {\n return {\n uid: file.id ?? uuidv4(),\n name: file.attachmentName ?? 'unknown',\n url: file.attachmentKey ?? '',\n }\n}\n\nexport async function getFiles(className: string, workflowId: string): Promise<{ [key: string]: any[] }> {\n const axios = await getAxios()\n const res = await axios.get(`/General/${className}/${workflowId}/upload/get`)\n //按category分组成对象数据结构\n const grouped = res?.data.reduce((acc: { [key: string]: any[] }, item: any) => {\n const { category } = item\n if (!acc[category]) {\n acc[category] = []\n }\n acc[category].push(convertToFileItem(item))\n return acc\n }, {})\n return grouped\n}\n\nexport async function removeFile(className: string, attachmentId: string): Promise<void> {\n const axios = await getAxios()\n return axios.post(`/General/${className}/${attachmentId}/delete/attachment`)\n}\n\nexport async function getApprovers(): Promise<{ label: string, value: string }[]> {\n const axios = await getAxios()\n const res = await axios.get('/Grading/dropdown/approvers')\n return Object.entries(res?.data).map(([label, value]) => ({\n label,\n value: value as string,\n }))\n}\n\nexport async function assignApprover(workflowId: string, email: string): Promise<void> {\n const axios = await getAxios()\n return await axios.post(`Grading/AssignComments/${workflowId}/${encodeURIComponent(email)}`)\n}\n\nexport async function addComments(workflowId: string, email: string, comments: string): Promise<void> {\n const axios = await getAxios()\n return await axios.post(`Grading/AddComments/${workflowId}/${encodeURIComponent(email)}`, comments, {\n headers: { 'Content-Type': 'application/json;charset=UTF-8' }\n })\n}\n\nexport async function getCommentsHistory(workflowId: string): Promise<{ associator: string, comments: string, createdAt: string }[]> {\n const axios = await getAxios()\n const res = await axios.get(`Grading/GetComments/${workflowId}`)\n return res?.data\n}\n\nexport async function getAssociator(workflowId: string): Promise<{ id: number, associator: string }[]> {\n const axios = await getAxios()\n const res = await axios.get(`Grading/GetAssociator/${workflowId}`)\n return res?.data\n}\n\nexport async function deleteAssociator(associatorId: string): Promise<void> {\n const axios = await getAxios()\n return await axios.delete(`Grading/DeleteAssociator/${associatorId}`)\n}\n\nexport async function download(url: string, params: any = null): Promise<void> {\n const axios = await getAxios()\n const res = await axios.post(url, params, {\n responseType: 'blob'\n })\n downloadFile(res?.data, 'WorkflowData.xlsx')\n}","import type { ValidationConfig } from './dataGen'\n\nexport const validateRules = (configs: ValidationConfig[], value: any) => {\n let errorMessages = ''\n const res = configs.every(config => {\n const isValid = vallidateRule(config, value)\n if (!isValid) {\n errorMessages = config.errorMessage\n }\n return isValid\n })\n return { res, errorMessages }\n}\n\nexport const vallidateRule = (config: ValidationConfig, value: any): boolean => {\n const { ruleName, ruleParameter } = config\n return validations[ruleName](ruleParameter, value as string)\n}\n\nconst validations = {\n Regex: (parameter: string, value: string): boolean => {\n const reg = new RegExp(parameter)\n return reg.test(value)\n },\n Required: (_: string, value: string): boolean => {\n return !!value\n }\n} as { [key: string]: Function }\n","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\nconst model = defineModel()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\nconst inputHandler = (v?: string | null): void => {\n emits('input', v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <AInput\n v-model=\"model\"\n allow-clear\n :disabled=\"props.readonly || props.config.Readonly\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n ></AInput>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\nconst model = defineModel()\n\nconst max = ref<number>(100)\nconst min = ref<number>(1)\nonMounted(() => {\n if (props.validations) {\n props.validations.forEach((v) => {\n if (v.ruleName === 'Max') {\n max.value = v.ruleParameter\n }\n if (v.ruleName === 'Min') {\n min.value = v.ruleParameter\n }\n })\n }\n})\n\nconst validate = (v?: number) => {\n return validateRules(props.validations!, v)\n}\n\nconst inputHandler = (v?: number): void => {\n emits('input', v)\n}\n\nconst changeHandler = (v?: number): void => {\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <AInputNumber\n v-model=\"model\"\n clearable\n :disabled=\"props.readonly\"\n :min=\"min\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n ></AInputNumber>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted, computed, readonly } from 'vue'\nimport { getOptions } from '@/services/dataGen'\nimport type { WidgetConfig, SelectOption, Trigger } from '@/services/dataGen'\nimport { validateRules } from '@/services/validation'\nimport type { FormCompProps } from './index'\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n // 添加动态事件类型\n (e: string, ...value: any[]): void\n}>()\n\nconst loading = ref<boolean>(false)\nconst _options = ref<SelectOption[]>(props.config.options ?? [])\n\nconst model = defineModel()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\n// 动态事件绑定对象\nconst eventHandlers = computed(() => {\n const handlers: Record<string, (v?: string) => void> = {}\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n handlers[trigger.event] = (v?: string) => {\n \n // 使用类型断言来绕过严格的事件类型检查\n emits(trigger.event, trigger.handlerName, v)\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n // emits('update:modelValue', v)\n }\n })\n }\n\n // handlers['change'] = (v?: string | number | null) => {\n // emits('update:modelValue', v)\n // emits('change', v)\n // }\n\n return handlers\n})\n\nconst loadOptions = async () => {\n if (props.config.dataSourceProvider) {\n _options.value = await getOptions(props.config.dataSourceProvider)\n }\n}\nonMounted(loadOptions)\n\nconst changeHandler = (v?: string) => {\n emits('update:modelValue', v)\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <ASelect allow-clear v-model=\"model\" :loading=\"loading\" :filter-option=\"true\" :allow-search=\"true\" :disabled=\"props.config.readonly\" @change=\"changeHandler\">\n <template v-for=\"item in _options\" :key=\"item.value\">\n <AOption :value=\"item.value\" :label=\"item.label\"></AOption>\n </template>\n </ASelect>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport type { WidgetConfig, SelectOption } from '@/services/dataGen'\nimport { getAxios } from '@/services/axios'\n\nconst props = defineProps<{\n modelValue: string\n config: WidgetConfig\n}>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n}>()\n\nconst _options = ref<SelectOption[]>(props.config.options ?? [])\n\nconst changeHandler = (v?: string | number | null) => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n\nonMounted(async () => {\n if (props.config) {\n const url = props.config.dataSourceProvider\n if (url) {\n const axios = await getAxios()\n const res = await axios.get(url)\n _options.value = res.data as SelectOption[]\n }\n }\n})\n\nconst fieldNames = { value: 'key', label: 'value' }\n\ndefineExpose({\n validate(){\n return true\n }\n})\n</script>\n\n<template>\n <ASpace direction=\"vertical\" size=\"large\">\n <ACascader\n :field-names=\"fieldNames\"\n :model-value=\"modelValue\"\n :options=\"_options\"\n :style=\"{ width: '320px' }\"\n placeholder=\"Please select ...\"\n @change=\"changeHandler\"\n />\n </ASpace>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, computed, nextTick, onMounted } from 'vue'\nimport { Modal, type UploadInstance, type FileItem } from '@arco-design/web-vue'\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\nimport { getLibraryConfig } from '@/stores/libraryConfig'\nimport { getToken } from '@/services/axios'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<{\n className: string\n} & FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst headers = ref<{ [key: string]: string }>({})\n\nonMounted(async () => {\n const token = await getToken()\n headers.value = {\n Authorization: `Bearer ${token}`\n }\n})\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\nconst config = getLibraryConfig()\nconst ApiBase = config.apiBase\nconst uploadRef = ref<UploadInstance | null>(null)\n\nconst id = ref<string>('')\n\nfunction replaceIdAndClassName(url: string, workflowId: string, className: string): string {\n return url.replace(/{WorkflowId}/g, workflowId).replace(/{ClassName}/g, className)\n}\n\nconst action = computed<string>(() => {\n if (props.config.uploadURL) {\n const url = ApiBase + props.config.uploadURL\n const replacedUrl = replaceIdAndClassName(url, id.value, props.className)\n return replacedUrl\n }\n return ''\n})\n\nconst submit = (e: any) => {\n e.stopPropagation();\n uploadRef.value.submit()\n};\n\nfunction onBeforeRemove(params: any) {\n const { file, name } = params\n const fileName = name ?? file.name\n return new Promise((resolve, reject) => {\n Modal.confirm({\n title: 'Confirm Delete',\n content: `Are you sure you want to delete ${fileName}?`,\n async onOk() {\n if (params.status !== 'init') {\n if (props.config.removeFile) {\n await props.config.removeFile(params.uid)\n return resolve(true)\n }\n }\n resolve(true)\n },\n onCancel: () => reject('cancel'),\n });\n });\n}\n\nconst uploadPromiseResolve = ref<((value: any) => void) | null>(null)\nconst uploadPromiseReject = ref<((reason?: any) => void) | null>(null)\n\n// 处理上传成功\nconst handleUploadSuccess = (fileItem: FileItem) => {\n if (uploadPromiseResolve.value) {\n uploadPromiseResolve.value(fileItem)\n uploadPromiseResolve.value = null\n uploadPromiseReject.value = null\n }\n}\n\n// 处理上传失败\nconst handleUploadError = (fileItem: FileItem) => {\n if (uploadPromiseReject.value) {\n uploadPromiseReject.value(fileItem)\n uploadPromiseResolve.value = null\n uploadPromiseReject.value = null\n }\n}\n\nconst readyFiles = ref<FileItem[]>([]);\nconst onChange = (fileList: FileItem[]) => {\n readyFiles.value = fileList.filter(file => file.status === 'init');\n};\n\ndefineExpose({\n submit(workflowId: string) {\n return new Promise((resolve, reject) => {\n if (uploadRef.value) {\n if (props.config.uploadURL) {\n id.value = workflowId\n }\n // 存储 Promise 的 resolve 和 reject 函数\n uploadPromiseResolve.value = resolve\n uploadPromiseReject.value = reject\n if (readyFiles.value.length) {\n nextTick(() => {\n uploadRef.value?.submit()\n })\n } else {\n // 如果没有文件需要上传,直接 resolve\n resolve(workflowId)\n }\n } else {\n // 如果没有 uploadRef,直接 resolve\n resolve(workflowId)\n }\n })\n },\n validate() {\n const defaultFiles = props.config.files ?? []\n const value = [...readyFiles.value, ...defaultFiles].length > 0 ? 'hasFile' : ''\n const valid = validate(value)\n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <a-upload ref=\"uploadRef\" :default-file-list=\"props.config.files\" :action=\"action\" :limit=\"props.config.allowedNumber\"\n :auto-upload=\"false\" name=\"files\" :headers=\"headers\" @change=\"onChange\" @before-remove=\"onBeforeRemove\"\n @success=\"handleUploadSuccess\" @error=\"handleUploadError\">\n <template #start-icon></template>\n <template #upload-button>\n <a-button type=\"primary\">Select File</a-button>\n </template>\n <!-- <template #upload-button>\n <a-button>select file</a-button>\n <a-button type=\"primary\" @click=\"submit\"> start upload</a-button>\n </template> -->\n </a-upload>\n</template>","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\nconst inputHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n emits('input', v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n const valid = validate(v)\n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <ATextarea\n :model-value=\"props.modelValue\"\n placeholder=\"Please enter something\"\n allow-clear\n :disabled=\"props.readonly\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n />\n</template>","<script lang=\"ts\" setup>\nimport { onMounted } from 'vue';\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\nconst model = defineModel()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <ACheckbox\n v-model=\"model\"\n clearable\n :disabled=\"props.readonly || props.config.Readonly\"\n @change=\"changeHandler\"\n >Yes</ACheckbox>\n</template>\n","const configProviderInjectionKey = Symbol(\"ArcoConfigProvider\");\nexport { configProviderInjectionKey };\n","import { getCurrentInstance, inject } from \"vue\";\nimport { configProviderInjectionKey } from \"../config-provider/context.js\";\nconst COMPONENT_PREFIX = \"A\";\nconst CLASS_PREFIX = \"arco\";\nconst GLOBAL_CONFIG_NAME = \"$arco\";\nconst getComponentPrefix = (options) => {\n var _a;\n return (_a = options == null ? void 0 : options.componentPrefix) != null ? _a : COMPONENT_PREFIX;\n};\nconst setGlobalConfig = (app, options) => {\n var _a;\n if (options && options.classPrefix) {\n app.config.globalProperties[GLOBAL_CONFIG_NAME] = {\n ...(_a = app.config.globalProperties[GLOBAL_CONFIG_NAME]) != null ? _a : {},\n classPrefix: options.classPrefix\n };\n }\n};\nconst getPrefixCls = (componentName) => {\n var _a, _b, _c;\n const instance = getCurrentInstance();\n const configProvider = inject(configProviderInjectionKey, void 0);\n const prefix = (_c = (_b = configProvider == null ? void 0 : configProvider.prefixCls) != null ? _b : (_a = instance == null ? void 0 : instance.appContext.config.globalProperties[GLOBAL_CONFIG_NAME]) == null ? void 0 : _a.classPrefix) != null ? _c : CLASS_PREFIX;\n if (componentName) {\n return `${prefix}-${componentName}`;\n }\n return prefix;\n};\nexport { getComponentPrefix, getPrefixCls, setGlobalConfig };\n","const opt = Object.prototype.toString;\nfunction isArray(obj) {\n return opt.call(obj) === \"[object Array]\";\n}\nfunction isNull(obj) {\n return opt.call(obj) === \"[object Null]\";\n}\nfunction isBoolean(obj) {\n return opt.call(obj) === \"[object Boolean]\";\n}\nfunction isObject(obj) {\n return opt.call(obj) === \"[object Object]\";\n}\nconst isPromise = (obj) => {\n return opt.call(obj) === \"[object Promise]\";\n};\nfunction isString(obj) {\n return opt.call(obj) === \"[object String]\";\n}\nfunction isNumber(obj) {\n return opt.call(obj) === \"[object Number]\" && obj === obj;\n}\nfunction isUndefined(obj) {\n return obj === void 0;\n}\nfunction isFunction(obj) {\n return typeof obj === \"function\";\n}\nfunction isEmptyObject(obj) {\n return isObject(obj) && Object.keys(obj).length === 0;\n}\nfunction isExist(obj) {\n return obj || obj === 0;\n}\nfunction isWindow(el) {\n return el === window;\n}\nconst isComponentInstance = (value) => {\n return (value == null ? void 0 : value.$) !== void 0;\n};\nconst isQuarter = (fromat) => {\n return /\\[Q]Q/.test(fromat);\n};\nfunction isDayjs(time) {\n return isObject(time) && \"$y\" in time && \"$M\" in time && \"$D\" in time && \"$d\" in time && \"$H\" in time && \"$m\" in time && \"$s\" in time;\n}\nexport { isArray, isBoolean, isComponentInstance, isDayjs, isEmptyObject, isExist, isFunction, isNull, isNumber, isObject, isPromise, isQuarter, isString, isUndefined, isWindow };\n","var _export_sfc = (sfc, props) => {\n for (const [key, val] of props) {\n sfc[key] = val;\n }\n return sfc;\n};\nexport { _export_sfc as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconQuestionCircle\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-question-circle`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _cache[1] || (_cache[1] = [\n createElementVNode(\"path\", { d: \"M42 24c0 9.941-8.059 18-18 18S6 33.941 6 24 14.059 6 24 6s18 8.059 18 18Z\" }, null, -1),\n createElementVNode(\"path\", { d: \"M24.006 31v4.008m0-6.008L24 28c0-3 3-4 4.78-6.402C30.558 19.195 28.288 15 23.987 15c-4.014 0-5.382 2.548-5.388 4.514v.465\" }, null, -1)\n ]), 14, _hoisted_1);\n}\nvar _IconQuestionCircle = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconQuestionCircle as default };\n","import _IconQuestionCircle from \"./icon-question-circle.js\";\nconst IconQuestionCircle = Object.assign(_IconQuestionCircle, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconQuestionCircle.name, _IconQuestionCircle);\n }\n});\nexport { IconQuestionCircle as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconDownload\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-download`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _cache[1] || (_cache[1] = [\n createElementVNode(\"path\", { d: \"m33.072 22.071-9.07 9.071-9.072-9.07M24 5v26m16 4v6H8v-6\" }, null, -1)\n ]), 14, _hoisted_1);\n}\nvar _IconDownload = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconDownload as default };\n","import _IconDownload from \"./icon-download.js\";\nconst IconDownload = Object.assign(_IconDownload, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconDownload.name, _IconDownload);\n }\n});\nexport { IconDownload as default };\n","<script lang=\"ts\" setup>\nimport { type Tree } from '@/services/dataGen'\nimport { IconQuestionCircle } from '@arco-design/web-vue/es/icon';\n\nconst props = defineProps<{\n isVisible: boolean,\n outputText: Tree[]\n}>()\n\n</script>\n\n<template>\n <a-tooltip v-if=\"props.isVisible\" background-color=\"#7A00E6\">\n <template #content>\n <template v-for=\"output in props.outputText\" :key=\"output.title\">\n <ul class=\"list-unstyled\">\n <li>\n <b>{{ output.title }}</b>\n <ul class=\"list-unstyled\">\n <li v-for=\"item in output.items\" :key=\"item.title\">\n <u>{{ item.title }}</u>\n <ul class=\"list-style-square\">\n <li v-for=\"subItem in item.items\">\n {{ subItem }}\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </template>\n </template>\n <IconQuestionCircle class=\"icon\" />\n </a-tooltip>\n</template>\n\n<style lang=\"stylus\" scoped>\n.list-unstyled {\n list-style: none inside\n}\n\n.list-style-square {\n list-style: disc inside\n}\n\n.icon {\n color: gray\n}\n</style>","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport type { FieldConfig } from '@/services/dataGen'\nimport { ref, watch, computed, useTemplateRef, onMounted } from 'vue'\nimport InputText from './InputText.vue'\nimport InputNumber from './InputNumber.vue'\nimport SelectList from './SelectList.vue'\nimport Cascader from './Cascader.vue'\nimport FileUpload from './FileUpload.vue'\nimport TextArea from './TextArea.vue'\nimport CheckBox from './CheckBox.vue'\nimport ToolTip from './ToolTip.vue'\n\ntype FieldCompProps = {\n config: FieldConfig\n className: string\n} & FormCompProps\n\nconst props = defineProps<FieldCompProps>()\nconst emits = defineEmits<FormCompEmits>()\nconst model = defineModel()\n\nconst widgetRef = useTemplateRef('widgetRef')\n\n// const _value = ref<string | number>(props.modelValue || props.config?.value)\n// watch(_value, (newValue) => {\n// emits('update:modelValue', newValue)\n// })\n\nconst curComp = computed(() => {\n switch (props.config?.widget?.widget) {\n case 'TextBox':\n return InputText\n case 'Number':\n return InputNumber\n case 'SelectList':\n return SelectList\n case 'Cascade':\n return Cascader\n case 'File':\n return FileUpload\n case 'TextArea':\n return TextArea\n case 'DropDown':\n return SelectList\n case 'CheckBox':\n return CheckBox\n default:\n return InputText\n }\n})\n\nconst errMsg = ref<string>('')\nconst errHandler = (v: string) => {\n errMsg.value = v\n}\n\nconst changeHandler = (handlerName: string, v: any): void => {\n emits('change', handlerName, v)\n}\n// const updateHandler = (v: any): void => emits('update:modelValue', v)\n\nfunction isFileUpload() {\n return props.config?.widget?.widget === 'File'\n}\n\nfunction formatTitle(title: string): string {\n if(title === 'OtherInformationText'){\n return 'Other Information'\n }\n if(title === 'Other Information'){\n return ''\n }\n return title\n}\n\ndefineExpose({\n isFileUpload(){\n return props.config?.widget?.widget === 'File'\n },\n submit(workflowId: string) {\n if (isFileUpload()) {\n return (widgetRef.value as InstanceType<typeof FileUpload>).submit(workflowId)\n }\n return Promise.resolve(workflowId)\n },\n validate(){\n return (widgetRef.value as InstanceType<typeof TextArea>)?.validate() \n },\n getCompName(){\n return props?.config?.widget?.title\n }\n})\n</script>\n\n<template>\n <div>\n <div class=\"title\">\n {{ formatTitle(props?.config?.widget?.title) }}\n <span class=\"required\" v-if=\"props.config.validations.length\">*</span>\n <ToolTip\n :is-visible=\"props.config.widget?.isVisible ?? false\"\n :output-text=\"props.config.widget?.outputText ?? []\"\n />\n </div>\n <div>\n <component\n ref=\"widgetRef\"\n :is=\"curComp\"\n v-model=\"model\"\n :field-key=\"props.fieldKey\"\n :config=\"props.config.widget\"\n :validations=\"props.config.validations\"\n :triggers=\"props.config.triggers\"\n :class-name=\"props.className\"\n @error=\"errHandler\"\n @change=\"changeHandler\"\n ></component>\n <div v-if=\"errMsg.length > 0\" class=\"err-msg\">{{ errMsg }}</div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.title {\n margin-bottom $gap-8\n}\n.err-msg {\n font-size $size-text-light\n color $color-red\n margin-top $gap-4\n}\n\n.required {\n color: $color-red\n font-size: $size-text-heavy\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { ActionProps, ActionNoTypeEmits } from '@/components/data-gen/actions/types'\n\nconst props = defineProps<ActionProps>()\n\nconst emits = defineEmits<ActionNoTypeEmits>()\n\nfunction clickHandler() {\n emits('click', props.url, props.redirectType)\n}\n</script>\n\n<template>\n <AButton :loading=\"loading\" type=\"primary\" @click=\"clickHandler\">\n <slot></slot>\n </AButton>\n</template>","<script setup lang=\"ts\">\nimport type { ActionProps, ActionNoTypeEmits } from '@/components/data-gen/actions/types'\n\nconst props = defineProps<ActionProps>()\n\nconst emits = defineEmits<ActionNoTypeEmits>()\n\nfunction clickHandler() {\n emits('click', props.url, props.redirectType)\n}\n</script>\n\n<template>\n<ALink @click=\"clickHandler\">\n <slot></slot>\n</ALink>\n</template>","<script setup lang=\"ts\">\nimport type { Action } from '@/services/dataGen'\nimport type { ActionEmits } from '@/components/data-gen/actions/types'\nimport { computed } from 'vue'\nimport SubmitButton from '@/components/data-gen/actions/SubmitButton.vue'\nimport DetailLink from '@/components/data-gen/actions/DetailLink.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport type { RedirectType } from '@/types'\n\nconst props = defineProps<{\n config: Action\n loading?: boolean\n}>()\n\nconst emits = defineEmits<ActionEmits>()\n\nfunction clickHandler(url: string, redirectType: RedirectType) {\n emits('click', props.config.widget, url, redirectType, props.config.title)\n}\n\nconst curComp = computed(() => {\n switch (props.config.location) {\n case 'InOperation':\n return SubmitButton\n case 'InTable':\n return DetailLink\n default:\n return SubmitButton\n }\n})\n\nconst curUrl = computed(() => {\n if (props.config.widget === ActionTypeEnum.Submit) {\n return props.config.requestUrl ?? ''\n } else if (props.config.widget === ActionTypeEnum.Link) {\n return props.config.redirectUrl ?? ''\n }\n return ''\n})\n\nconst redirectType = computed(() => {\n return props.config.redirectType ?? 'Details'\n})\n</script>\n\n<template>\n <component\n :is=\"curComp\"\n :url=\"curUrl\"\n :redirect-type=\"redirectType\"\n :loading=\"loading\"\n @click=\"clickHandler\"\n >\n {{ props.config.title }}\n </component>\n</template>\n\n<style lang=\"stylus\" scoped></style>\n","import { inject, type InjectionKey } from 'vue'\nimport { useRouter as useVueRouter } from 'vue-router'\nimport type { Router } from 'vue-router'\n\nexport const RouterKey: InjectionKey<Router> = Symbol('library-router')\n\nexport function useLibraryRouter(): Router {\n // 首先尝试从注入中获取宿主提供的 router\n const injectedRouter = inject(RouterKey, null)\n if (injectedRouter) {\n return injectedRouter\n }\n \n // 如果没有注入,回退到标准的 useRouter\n return useVueRouter()\n}\n","import { inject, type InjectionKey } from 'vue'\nimport { type Trigger } from '@/services/dataGen'\n\nexport const TriggersKey: InjectionKey<Record<string, (...args: any[]) => any>> = Symbol('library-triggers')\n\nexport function useTriggers(): Record<string, (...args: any[]) => any> {\n // 首先尝试从注入中获取宿主提供的 triggers\n const injectedTriggers = inject(TriggersKey, null)\n if (injectedTriggers) {\n return injectedTriggers\n }\n\n // 如果没有注入,返回一个空对象\n return {}\n}","import { inject, type InjectionKey } from 'vue'\nimport type { Pinia } from 'pinia'\n\nexport const PiniaKey: InjectionKey<Pinia> = Symbol('library-pinia')\n\nexport const BpmStoreKey: InjectionKey<Pinia> = Symbol('library-bpmStore')\n\nexport const SvrStoreKey: InjectionKey<Pinia> = Symbol('library-svrStore')\n\nexport function useLibraryPinia(): Pinia | null {\n // 从注入中获取宿主提供的 pinia\n return inject(PiniaKey, null)\n}\n\nexport function useBpmStore(): any {\n // 从注入中获取宿主提供的 bpmStore\n return inject(BpmStoreKey, null)\n}\n\nexport function useSvrStore(): any {\n // 从注入中获取宿主提供的 svrStore\n return inject(SvrStoreKey, null)\n}","<script lang=\"ts\" setup>\ndefineProps<{\n title: string\n subTitle: string\n email: string\n}>()\n</script>\n\n<template>\n <div class=\"top-bar\">\n <div class=\"banner-info\">\n <div class=\"page-title\">{{ title }}</div>\n <div class=\"page-subtitle\">{{ subTitle }}</div>\n </div>\n <div class=\"avatar-wrapper\">\n <a-popover trigger=\"click\">\n <template #content>\n <div class=\"user-email\">{{ email }}</div>\n </template>\n <a-avatar :size=\"48\" autoFixFontSize style=\"cursor:pointer; background:#165DFF; color:#fff;\">\n {{ email.charAt(0).toUpperCase() }}\n </a-avatar>\n </a-popover>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.top-bar {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding 16px\n}\n\n.banner-info {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.page-title {\n font-size: 24px;\n font-weight: bold;\n color: #1d2129;\n padding: 12px 0 0 0;\n}\n\n.page-subtitle {\n font-size: 16px;\n color: #6b778c;\n margin-top: 4px;\n}\n\n.avatar-wrapper {\n display: flex;\n align-items: flex-start;\n}\n\n.user-email {\n font-size: 14px;\n color: #1d2129;\n padding: 8px 12px;\n}\n</style>\n","import { type FieldConfig } from '@/services/dataGen';\nimport { getLibraryConfig } from '@/stores/libraryConfig'\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\n\n\nexport function genFieldsGroup(widget: WidgetConfig[]) {\n const config = getLibraryConfig()\n const groups: { name: string; fields: WidgetConfig[] }[] = []\n if (config.fieldsGroup) {\n config.fieldsGroup.forEach(item => {\n const fields = item.keys\n .map(key => widget.find(f => f.fieldKey === key))\n .filter(Boolean) as WidgetConfig[]\n if (fields.length) {\n groups.push({ name: item.name, fields })\n }\n })\n // 未分组的字段\n const groupedKeys = config.fieldsGroup.flatMap(g => g.keys)\n const others = widget.filter(item => !groupedKeys.includes(item.fieldKey))\n if (others.length) {\n groups.push({ name: 'Grading Review History (For example: re-submit the grading request)', fields: others })\n }\n\n return groups\n }\n}","import { getPageData, PageActionType, getBtnList, type PageConfig, getFiles, removeFile, getProcess, getCommentsHistory, getAssociator, getApprovers, assignApprover, addComments, deleteAssociator } from '@/services/dataGen'\n\ninterface IPageBuild {\n setWorkflowId(workflowId?: string): IPageBuild\n setPageActionType(pageActionType: PageActionType): IPageBuild\n setClassName(className: string): IPageBuild\n setStore(store: { svrStore: any, bpmStore: any }): IPageBuild\n setOpt(opt: { workflowId: string }): IPageBuild\n build(): IPage\n}\n\ninterface IPage {\n getPageData(): Promise<PageConfig>\n getBtnList(): Promise<{\n button: string,\n isShow: boolean\n }[]>\n getFiles(): Promise<{ [key: string]: any[] }>\n removeFile(attachmentId: string): Promise<void>\n getProcess(): Promise<any>\n getCommentsHistory(): Promise<{ associator: string, comments: string, createdAt: string }[]>\n getAssociator(): Promise<{ id: number, associator: string }[]>\n getApprovers(): Promise<{ label: string, value: string }[]>\n assignApprover(selectedApprover: string): Promise<void>\n addComments(comment: string): Promise<void>\n deleteAssociator(id: string): Promise<void>\n}\n\nclass PageBuilder implements IPageBuild {\n private pageActionType?: PageActionType\n private className: string = ''\n private store: { svrStore: any, bpmStore: any } = { svrStore: {}, bpmStore: {} }\n private opt: { workflowId: string } = { workflowId: '' }\n\n setWorkflowId(workflowId?: string) {\n if (!workflowId) {\n return this\n }\n this.opt.workflowId = workflowId\n return this\n }\n\n setPageActionType(pageActionType: PageActionType) {\n this.pageActionType = pageActionType\n return this\n }\n\n setClassName(className: string) {\n this.className = className\n return this\n }\n\n setStore(store: { svrStore: any, bpmStore: any }) {\n this.store = store\n return this\n }\n\n setOpt(opt: { workflowId: string }) {\n this.opt = opt\n return this\n }\n\n build() {\n // Default to Create or ReCreate if pageActionType is not set\n if (!this.pageActionType) {\n if (!this.opt.workflowId) {\n return new Page(PageActionType.Create, this.className, this.store)\n }\n return new Page(PageActionType.ReCreate, this.className, this.store, this.opt)\n }\n // List\n if (!this.opt.workflowId) {\n return new Page(this.pageActionType, this.className, this.store)\n }\n // Detail or Update with workflowId\n return new Page(this.pageActionType, this.className, this.store, this.opt)\n }\n}\n\nclass Page implements IPage {\n private pageActionType: PageActionType\n private className: string\n private store: { svrStore: any, bpmStore: any }\n private opt?: { workflowId: string }\n\n private getApproverEmail() {\n return this.store.svrStore()?.userInfo?.email_address ?? ''\n }\n\n private getWorkflowId() {\n return this.opt?.workflowId ?? ''\n }\n\n constructor(\n pageActionType: PageActionType,\n className: string,\n store: { svrStore: any, bpmStore: any },\n opt?: { workflowId: string }\n ) {\n this.pageActionType = pageActionType\n this.className = className\n this.store = store\n if (opt) {\n this.opt = opt\n }\n }\n\n getPageData() {\n if (this.opt) {\n return getPageData(this.pageActionType, this.className, this.store, this.opt)\n }\n return getPageData(this.pageActionType, this.className, this.store)\n }\n\n getBtnList() {\n return getBtnList(this.pageActionType, this.className, { workflowId: this.getWorkflowId(), email: this.getApproverEmail() })\n }\n\n getFiles() {\n if (!this.getWorkflowId()) {\n return Promise.resolve<{ [key: string]: any[] }>({})\n }\n return getFiles(this.className, this.getWorkflowId())\n }\n\n removeFile(attachmentId: string) {\n return removeFile(this.className, attachmentId)\n }\n\n getProcess() {\n return getProcess(this.className, this.getWorkflowId())\n }\n\n getCommentsHistory() {\n return getCommentsHistory(this.getWorkflowId())\n }\n\n getAssociator() {\n return getAssociator(this.getWorkflowId())\n }\n\n getApprovers() {\n return getApprovers()\n }\n\n assignApprover(selectedApprover: string) {\n return assignApprover(this.getWorkflowId(), selectedApprover)\n }\n\n addComments(comment: string) {\n return addComments(this.getWorkflowId(), this.getApproverEmail(), comment)\n }\n\n deleteAssociator(id: string) {\n return deleteAssociator(id)\n }\n}\n\nexport {\n PageBuilder,\n IPageBuild,\n IPage\n}","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, useTemplateRef, getCurrentInstance, type VNodeRef } from 'vue'\nimport { createData, type PageConfig, type FieldConfig, type Action } from '@/services/dataGen'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\nimport { useTriggers } from '@/composables/useTriggers'\nimport { useSvrStore, useBpmStore } from \"@/composables/usePinia\"\nimport TopBar from '@/components/TopBar.vue'\nimport { genFieldsGroup } from '@/assets/js/fieldsGroup'\nimport { PageBuilder } from '@/services/page'\n\nconst bpmStore = useBpmStore()\n// console.log(\"🚀 ~ bpmStore:\", bpmStore().positionCode)\n\nconst svrStore = useSvrStore()\n// console.log(\"🚀 ~ svrStore:\", svrStore().userInfo)\n\nconst router = useLibraryRouter()\n\nconst triggers = useTriggers()\n\nconst dataWidgetsRefs = useTemplateRef('dataWidgets')\n\n// 在 setup 中获取实例\nconst instance = getCurrentInstance()\n\nconst props = defineProps<{\n className: string\n workflowId?: string\n}>()\n\nconst pageData = ref<PageConfig>({\n pageType: '',\n fields: {},\n globalValidations: [],\n banner: {\n title: '',\n subTitle: '',\n }\n})\nconst _fields = ref<WidgetConfig[]>([])\nconst _dependent = ref<Record<string, any>>({})\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\n\nfunction genField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list: WidgetConfig[] = Object.entries(fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.widget !== 'Hidden')\n .filter((w) => !hiddenFields.value.includes(w.fieldKey))\n // .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n}\n\nfunction genDependentField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list = Object.entries(fields).filter(([_, value]) => value.dependent).reduce((acc, [key, value]) => {\n acc[key] = value.dependent\n return acc\n }, {} as Record<string, any>)\n return list\n}\n\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = ref<Record<string, any>>({})\nconst loading = ref(false)\n\nonMounted(async () => {\n loading.value = true\n const page = new PageBuilder()\n .setWorkflowId(props.workflowId)\n .setClassName(props.className)\n .setStore({ svrStore, bpmStore })\n .build()\n pageData.value = await page.getPageData()\n _fields.value = genField(pageData.value.fields)\n _dependent.value = genDependentField(pageData.value.fields)\n for (const key in pageData.value.fields) {\n if (pageData.value.fields[key].widget?.widget === 'File') {\n const filed = _fields.value.find(item => item.fieldKey === key)\n if (filed && filed.widget) {\n filed.widget.files = []\n }\n // continue\n }\n _data.value[key] = pageData.value.fields[key].modelValue\n }\n loading.value = false\n})\n\nfunction getApproverEmail() {\n return svrStore()?.userInfo?.email_address ?? ''\n}\n\nasync function clickHandler(action: Action, type: ActionTypeEnum, url: string, redirectType: RedirectType, title: string) {\n switch (type) {\n case ActionTypeEnum.Submit:\n // 遍历所有的widget组件\n let validateResult = true\n dataWidgetsRefs.value?.forEach((widget) => {\n if (widget?.validate) {\n if (!widget.validate()) {\n validateResult = false\n }\n }\n })\n if (!validateResult) {\n instance?.appContext.config.globalProperties.$message.error('form validation failed, please check the input fields')\n return\n }\n loading.value = true\n try {\n const res = await createData(props.className, { ..._data.value, ..._dependent.value }, url)\n // 并发执行所有的widget组件submit方法,等待全部完成\n const submitPromises = dataWidgetsRefs.value?.map((widget) => {\n if (widget?.submit) {\n return widget.submit(res.toString())\n }\n return Promise.resolve()\n }) || []\n await Promise.all(submitPromises)\n loading.value = false\n instance?.appContext.config.globalProperties.$notification.success(`Your grading request has been submitted, ID is ${res.toString()}.`)\n router.push({ name: 'Details', params: { workflowId: res.toString() } })\n } catch (error) {\n instance?.appContext.config.globalProperties.$notification.error(`Failed to submit your grading request`)\n loading.value = false\n }\n break\n case ActionTypeEnum.Link:\n try {\n await triggers[action.eventName || '']?.(_data.value, hiddenFields)\n router.push({ name: redirectType, params: { className: props.className } })\n } catch (error) {\n console.error('Error in link action trigger:', error)\n }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n\nconst newHiddenFields: string[] = ['jobScpope',\n 'currentWorkdayId',\n 'originalGrade',\n 'jobTitlePrevious',\n 'jobAttachmentPrevious',\n 'positionId']\n\nconst hiddenFields = ref<string[]>(newHiddenFields)\n\nfunction changeHandler(handlerName: string, fieldValue: string) {\n triggers[handlerName]?.({fieldValue, hiddenFields, formData: _data})\n if (pageData.value) {\n _fields.value = genField(pageData.value.fields)\n }\n}\n// 计算分组后的字段\nconst groupedFields = computed(() => {\n return genFieldsGroup(_fields.value)\n})\n</script>\n\n<template>\n <div class=\"page-container\">\n <!-- 页面头部 -->\n <TopBar :title=\"pageData.banner.title\" :subTitle=\"pageData.banner.subTitle\" :email=\"getApproverEmail()\" />\n\n <!-- 表单内容区域 -->\n <div class=\"page-body\">\n <a-spin :loading=\"loading\" class=\"form-container\">\n <div class=\"form-card\">\n <div class=\"form-fields-vertical\">\n <template v-for=\"group in groupedFields\" :key=\"group.name\">\n <a-card :title=\"group.name\" style=\"margin-bottom: 24px;\">\n <div class=\"form-fields\">\n <template v-for=\"value in group.fields\" :key=\"value.fieldKey\">\n <DataWidgets ref=\"dataWidgets\" :field-key=\"value.fieldKey\" :config=\"value\" :class-name=\"className\"\n v-model=\"_data[value.fieldKey]\" class=\"form-field\" @change=\"changeHandler\" />\n </template>\n </div>\n </a-card>\n </template>\n </div>\n\n <!-- 自定义内容插槽 -->\n <div v-if=\"$slots.content\" class=\"form-content\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </a-spin>\n </div>\n\n <!-- 操作按钮区域 -->\n <div class=\"page-footer\">\n <div class=\"action-container\">\n <slot name=\"action\"></slot>\n <div class=\"action-buttons\">\n <template v-for=\"action in reversedActions\" :key=\"action.title\">\n <ActionButton :loading=\"loading\" :config=\"action\" class=\"action-button\"\n @click=\"(...args) => clickHandler(action, ...args)\" />\n </template>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n min-height: 100vh\n background-color: #f5f5f5\n display: flex\n flex-direction: column\n}\n\n.page-body {\n flex: 1\n padding: 24px 32px\n overflow-y: auto\n}\n\n.form-container {\n width: 100%\n margin: 0 auto\n}\n\n.form-card {\n background: white\n border-radius: 8px\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06)\n overflow: hidden\n}\n\n.form-fields-vertical {\n display: flex\n flex-direction: column\n gap: 24px\n padding: 32px\n\n @media (max-width: 768px) {\n padding: 24px 16px\n gap: 20px\n }\n}\n\n/* 让每个 a-card 内部的字段依然是 grid 排列 */\n.form-fields {\n padding: 0\n display: grid\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr))\n column-gap: 72px\n row-gap: 24px\n\n @media (max-width: 768px) {\n grid-template-columns: 1fr\n gap: 20px\n }\n}\n\n.form-content {\n border-top: 1px solid #f0f0f0\n padding: 24px 32px\n background: #fafafa\n}\n\n.page-footer {\n background: white\n border-top: 1px solid #e8e8e8\n padding: 16px 32px\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06)\n \n @media (max-width: 768px) {\n padding: 16px 16px\n }\n}\n\n.action-container {\n max-width: 1200px\n margin: 0 auto\n display: flex\n justify-content: flex-end\n align-items: center\n gap: 12px\n}\n\n.action-buttons {\n display: flex\n gap: 12px\n align-items: center\n}\n\n.action-button {\n min-width: 88px\n height: 36px\n \n &:hover {\n transform: translateY(-1px)\n transition: transform 0.2s ease\n }\n}\n\n/* 响应式调整 */\n@media (max-width: 1024px) {\n .form-fields {\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))\n }\n}\n\n@media (max-width: 640px) {\n .page-body {\n padding: 16px\n }\n \n .form-fields-vertical {\n padding: 20px 16px\n }\n \n .form-fields {\n padding: 0\n }\n \n .action-container {\n flex-direction: column-reverse\n align-items: stretch\n }\n \n .action-buttons {\n justify-content: center\n }\n}\n</style>","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, useTemplateRef, getCurrentInstance, h } from 'vue'\nimport { updateData, PageActionType, type PageConfig, type FieldConfig, type Action } from '@/services/dataGen'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\nimport { useTriggers } from '@/composables/useTriggers'\nimport { useSvrStore, useBpmStore } from \"@/composables/usePinia\"\nimport TopBar from '@/components/TopBar.vue'\nimport { genFieldsGroup } from '@/assets/js/fieldsGroup'\nimport { PageBuilder } from '@/services/page'\n\nconst router = useLibraryRouter()\n\nconst triggers = useTriggers()\n\nconst svrStore = useSvrStore()\nconst bpmStore = useBpmStore()\n\nconst dataWidgetsRefs = useTemplateRef('dataWidgets')\n\n// 在 setup 中获取实例\nconst instance = getCurrentInstance()\n\nconst props = defineProps<{\n className: string,\n workflowId: string\n}>()\n\nconst pageData = ref<PageConfig>({\n pageType: '',\n fields: {},\n globalValidations: [],\n banner: {\n title: '',\n subTitle: '',\n }\n})\nconst _fields = ref<WidgetConfig[]>([])\nconst _dependent = ref<Record<string, any>>({})\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\n\nfunction genField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list: WidgetConfig[] = Object.entries(fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.widget !== 'Hidden')\n .filter((w) => !hiddenFields.value.includes(w.fieldKey))\n // .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n}\n\nfunction genDependentField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list = Object.entries(fields).filter(([_, value]) => value.dependent).reduce((acc, [key, value]) => {\n acc[key] = value.dependent\n return acc\n }, {} as Record<string, any>)\n return list\n}\n\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = ref<Record<string, any>>({})\nconst loading = ref(false)\n\nonMounted(async () => {\n loading.value = true\n const page = new PageBuilder()\n .setPageActionType(PageActionType.Update)\n .setClassName(props.className)\n .setStore({ svrStore, bpmStore })\n .setWorkflowId(props.workflowId)\n .build()\n pageData.value = await page.getPageData()\n const btnList = await page.getBtnList()\n const files = await page.getFiles()\n pageData.value.actions = pageData.value.actions?.filter(item => {\n const btn = btnList.find(btn => btn.button === item.title)\n if (!btn) {\n return true\n }\n return btn.isShow\n })\n const fieldValue = pageData.value.fields.requestType.modelValue\n triggers['Test']?.({ fieldValue, hiddenFields, formData: _data })\n _fields.value = genField(pageData.value.fields)\n _dependent.value = genDependentField(pageData.value.fields)\n for (const key in pageData.value.fields) {\n if (pageData.value.fields[key].widget?.widget === 'File') {\n const filed = _fields.value.find(item => item.fieldKey === key)\n if (filed && filed.widget) {\n filed.widget.files = files[key] ?? []\n filed.widget.removeFile = (attachmentId: string) => page.removeFile(attachmentId)\n }\n }\n _data.value[key] = pageData.value.fields[key].modelValue\n }\n loading.value = false\n})\n\nfunction getApproverEmail() {\n return svrStore()?.userInfo?.email_address ?? ''\n}\n\nasync function clickHandler(action: Action, type: ActionTypeEnum, url: string, redirectType: RedirectType, title: string) {\n switch (type) {\n case ActionTypeEnum.Submit:\n // 遍历所有的widget组件\n let validateResult = true\n dataWidgetsRefs.value?.forEach((widget) => {\n if (widget?.validate) {\n if (!widget.validate()) {\n validateResult = false\n }\n }\n })\n if (!validateResult) {\n instance?.appContext.config.globalProperties.$message.error('form validation failed, please check the input fields')\n return\n }\n loading.value = true\n try {\n const res = await updateData(props.className, props.workflowId, { ..._data.value, ..._dependent.value }, url)\n // 并发执行所有的widget组件submit方法,等待全部完成\n const submitPromises = dataWidgetsRefs.value?.map((widget) => {\n if (widget?.submit) {\n return widget.submit(res.toString())\n }\n return Promise.resolve()\n }) || []\n await Promise.all(submitPromises)\n loading.value = false\n instance?.appContext.config.globalProperties.$notification.success(`Your grading request has been submitted, ID is ${res.toString()}.`)\n // router.push({ name: 'List', params: { className: props.className } })\n } catch (error) {\n instance?.appContext.config.globalProperties.$notification.error(`Failed to submit your grading request`)\n loading.value = false\n }\n break\n case ActionTypeEnum.Link:\n try {\n await triggers[action.eventName || '']?.(_data.value, hiddenFields)\n router.push({ name: redirectType, params: { className: props.className } })\n } catch (error) { }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n\nconst hiddenFields = ref<string[]>([])\n\nfunction changeHandler(handlerName: string, fieldValue: string) {\n triggers[handlerName]?.({ fieldValue, hiddenFields, formData: _data })\n if (pageData.value) {\n _fields.value = genField(pageData.value.fields)\n }\n}\n\n// 计算分组后的字段\nconst groupedFields = computed(() => {\n return genFieldsGroup(_fields.value)\n})\n</script>\n\n<template>\n <div class=\"page-container\">\n <!-- 页面头部 -->\n <TopBar :title=\"pageData.banner.title\" :subTitle=\"pageData.banner.subTitle\" :email=\"getApproverEmail()\" />\n\n <!-- 表单内容区域 -->\n <div class=\"page-body\">\n <a-spin :loading=\"loading\" class=\"form-container\">\n <div class=\"form-card\">\n <div class=\"form-fields-vertical\">\n <template v-for=\"group in groupedFields\" :key=\"group.name\">\n <a-card :title=\"group.name\" style=\"margin-bottom: 24px;\">\n <div class=\"form-fields\">\n <template v-for=\"value in group.fields\" :key=\"value.fieldKey\">\n <DataWidgets ref=\"dataWidgets\" :field-key=\"value.fieldKey\" :config=\"value\" :class-name=\"className\"\n v-model=\"_data[value.fieldKey]\" class=\"form-field\" @change=\"changeHandler\" />\n </template>\n </div>\n </a-card>\n </template>\n </div>\n\n <!-- 自定义内容插槽 -->\n <div v-if=\"$slots.content\" class=\"form-content\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </a-spin>\n </div>\n\n <!-- 操作按钮区域 -->\n <div class=\"page-footer\">\n <div class=\"action-container\">\n <slot name=\"action\"></slot>\n <div class=\"action-buttons\">\n <template v-for=\"action in reversedActions\" :key=\"action.title\">\n <ActionButton :loading=\"loading\" :config=\"action\" class=\"action-button\"\n @click=\"(...args) => clickHandler(action, ...args)\" />\n </template>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n min-height: 100vh\n background-color: #f5f5f5\n display: flex\n flex-direction: column\n}\n\n.page-body {\n flex: 1\n padding: 24px 32px\n overflow-y: auto\n}\n\n.form-container {\n width: 100%\n margin: 0 auto\n}\n\n.form-card {\n background: white\n border-radius: 8px\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06)\n overflow: hidden\n}\n\n.form-fields-vertical {\n display: flex\n flex-direction: column\n gap: 24px\n padding: 32px\n\n @media (max-width: 768px) {\n padding: 24px 16px\n gap: 20px\n }\n}\n\n/* 让每个 a-card 内部的字段依然是 grid 排列 */\n.form-fields {\n padding: 0\n display: grid\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr))\n column-gap: 72px\n row-gap: 24px\n\n @media (max-width: 768px) {\n grid-template-columns: 1fr\n gap: 20px\n }\n}\n\n.form-content {\n border-top: 1px solid #f0f0f0\n padding: 24px 32px\n background: #fafafa\n}\n\n.page-footer {\n background: white\n border-top: 1px solid #e8e8e8\n padding: 16px 32px\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06)\n \n @media (max-width: 768px) {\n padding: 16px 16px\n }\n}\n\n.action-container {\n max-width: 1200px\n margin: 0 auto\n display: flex\n justify-content: flex-end\n align-items: center\n gap: 12px\n}\n\n.action-buttons {\n display: flex\n gap: 12px\n align-items: center\n}\n\n.action-button {\n min-width: 88px\n height: 36px\n \n &:hover {\n transform: translateY(-1px)\n transition: transform 0.2s ease\n }\n}\n\n/* 响应式调整 */\n@media (max-width: 1024px) {\n .form-fields {\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))\n }\n}\n\n@media (max-width: 640px) {\n .page-body {\n padding: 16px\n }\n \n .form-fields-vertical {\n padding: 20px 16px\n }\n \n .form-fields {\n padding: 0\n }\n \n .action-container {\n flex-direction: column-reverse\n align-items: stretch\n }\n \n .action-buttons {\n justify-content: center\n }\n}\n</style>","import { inject, type InjectionKey } from 'vue'\n\nexport const CustomCompsKey: InjectionKey<any> = Symbol('library-custom-comp')\n\nexport function useLibraryCustomComps(): any {\n return inject(CustomCompsKey, null)\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, getCurrentInstance } from 'vue'\nimport { approveData, PageActionType, type PageConfig, type FieldConfig, type Action } from '@/services/dataGen'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\nimport { useTriggers } from '@/composables/useTriggers'\nimport { useSvrStore, useBpmStore } from \"@/composables/usePinia\"\nimport { useLibraryCustomComps } from \"@/composables/customComps\"\nimport { IconDownload } from '@arco-design/web-vue/es/icon';\nimport TopBar from '@/components/TopBar.vue'\nimport { genFieldsGroup } from '@/assets/js/fieldsGroup'\nimport { formatDate } from '@/assets/js/util'\nimport { PageBuilder, IPage } from '@/services/page'\nimport ToolTip from '../widgets/ToolTip.vue'\n\nconst svrStore = useSvrStore()\nconst bpmStore = useBpmStore()\n\nconst triggers = useTriggers()\n\nconst router = useLibraryRouter()\n\nconst customComps = useLibraryCustomComps()\n\nconst instance = getCurrentInstance()\n\nconst props = defineProps<{\n className: string,\n workflowId: string\n}>()\n\nlet page: IPage\n\nconst pageData = ref<PageConfig>({\n pageType: '',\n fields: {},\n globalValidations: [],\n banner: {\n title: '',\n subTitle: '',\n }\n})\nconst _fields = ref<WidgetConfig[]>([])\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\n\nfunction genField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list: WidgetConfig[] = Object.entries(fields)\n .map(([key, value]) => {\n if (typeof value.modelValue === 'boolean') {\n value.fieldValue = value.modelValue ? 'Yes' : 'No'\n } else {\n value.fieldValue = value.modelValue\n }\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.widget !== 'Hidden')\n .filter((w) => !hiddenFields.value.includes(w.fieldKey))\n\n return list\n}\n\nconst groupedFields = computed(() => {\n return genFieldsGroup(_fields.value)\n})\n\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst loading = ref(true)\n\nconst mapWorkflowSteps = (process: any[], status: any) => {\n const currentIndex = process.findIndex(item => item.isCurrent)\n return process.map((p, index) => {\n const step = {\n id: p.id,\n title: '',\n proxy: '',\n sub: '',\n desc: '',\n status: 1,\n time: ''\n }\n step.title = p.workflowProcessApprovers[0]?.name\n const nodeApprover = p.workflowProcessApprovers[p.workflowProcessApprovers.length - 1]\n const history = p.workflowHistorys[p.workflowHistorys.length - 1]\n const actualApprover = history?.workflowHistoryApprovers[history?.workflowHistoryApprovers?.length - 1]\n if (nodeApprover && actualApprover && nodeApprover?.email?.toLowerCase() !== actualApprover?.approverEmail?.toLowerCase()) {\n step.title = `${actualApprover.name}`\n step.proxy = `Proxy: ${nodeApprover.name}`\n }\n if (p.sort > 1) {\n step.sub = 'Approver Role: ' + p.nodeName.replace('Submit', '').replace('Approve', '')\n } else {\n step.sub = 'Submit Application'\n }\n if (p.isCurrent && status !== -1) {\n step.desc = 'In Approval'\n step.status = 1\n } else {\n const history = p.workflowHistorys[p.workflowHistorys.length - 1]\n if (history && history.status === 100) {\n step.time = formatDate(history.takeActionAt, 'yyyy-MM-dd hh:mm:ss')\n step.status = 2\n step.desc = 'approve success!'\n } else if (history && history.status === 999) {\n step.time = formatDate(history.takeActionAt, 'yyyy-MM-dd hh:mm:ss')\n step.status = 0\n step.desc = 'approve reject!'\n } else if (history) {\n step.time = formatDate(history.takeActionAt, 'yyyy-MM-dd hh:mm:ss')\n if (p.sort === 1) {\n step.status = 2\n step.desc = ''\n } else {\n const historyApprover = history.workflowHistoryApprovers[0]\n step.status = 3\n step.desc = historyApprover?.reason ? `Rejected reason: ${historyApprover.reason}` : 'Rejected'\n }\n } else if (index < currentIndex || currentIndex === -1) {\n step.status = 0\n step.desc = 'Skipped'\n } else {\n step.status = 0\n step.desc = 'Pending Approval'\n }\n if (history && history.status !== 1) {\n } else {\n }\n }\n\n return step\n })\n}\n\n\nconst steps = ref<any[]>([])\nconst isGlobal = ref(false)\nconst isShowAssignSelect = ref(false)\nconst isShowAssignList = ref(false)\nconst isShowCommentTextArea = ref(false)\n\nasync function reloadButtonList() {\n const btnList = await page.getBtnList()\n pageData.value.actions = pageData.value.actions?.filter(item => {\n const btn = btnList.find(btn => btn.button === item.title)\n if (!btn) {\n return true\n }\n return btn.isShow\n })\n isGlobal.value = btnList.find(item => item.button === 'IsGlobal')?.isShow ?? false\n isShowAssignSelect.value = btnList.find(item => item.button === 'AssignButton')?.isShow ?? false\n isShowAssignList.value = btnList.find(item => item.button === 'AssignList')?.isShow ?? false\n isShowCommentTextArea.value = btnList.find(item => item.button === 'AddCommentsButton')?.isShow ?? false\n}\n\nconst hiddenFields = ref<string[]>([])\n\nasync function load() {\n loading.value = true\n page = new PageBuilder()\n .setPageActionType(PageActionType.Details)\n .setClassName(props.className)\n .setStore({ svrStore, bpmStore })\n .setWorkflowId(props.workflowId)\n .build()\n pageData.value = await page.getPageData()\n const files = await page.getFiles()\n approvers.value = await page.getApprovers()\n commentsHistory.value = await page.getCommentsHistory()\n associators.value = await page.getAssociator()\n reloadButtonList()\n const fieldValue = pageData.value.fields.requestType.modelValue\n triggers['Test']?.({fieldValue, hiddenFields})\n _fields.value = genField(pageData.value.fields)\n for (const key in pageData.value.fields) {\n if (pageData.value.fields[key].widget?.widget === 'File') {\n const filed = _fields.value.find(item => item.fieldKey === key)\n if (filed && filed.widget) {\n filed.widget.files = files[key] ?? []\n }\n }\n }\n const process = await page.getProcess()\n steps.value = mapWorkflowSteps(process, 0)\n\n loading.value = false\n}\nonMounted(load)\n\nasync function triggerFn(title: string, opt: any): Promise<any> {\n return triggers[title]?.(opt)\n}\n\nfunction getApproverEmail() {\n return svrStore()?.userInfo?.email_address ?? ''\n}\n\nasync function clickHandler(action: Action, type: ActionTypeEnum, url: string, redirectType: RedirectType, title: string) {\n try {\n switch (type) {\n case ActionTypeEnum.Submit:\n const { reason, ifGlobal } = await triggerFn(title, { isGlobal: isGlobal.value })\n loading.value = true\n const status = title === 'Approve' ? '100' : '-1'\n await approveData(props.className, props.workflowId, getApproverEmail(), reason, [Number(props.workflowId)], url, status, ifGlobal)\n loading.value = false\n const successContent = title === 'Approve' ? `Request ID ${props.workflowId} has been approved.` : `Request ID ${props.workflowId} has been rejected.`\n instance?.appContext.config.globalProperties.$notification.success(successContent)\n load()\n // router.push({ name: 'List', params: { className: props.className } })\n break\n case ActionTypeEnum.Link:\n try {\n await triggers[action.eventName || '']?.()\n router.push({ name: redirectType, params: { className: props.className, workflowId: props.workflowId } })\n } catch (error) {\n console.error('Error in link action trigger:', error)\n }\n break\n case ActionTypeEnum.Button:\n await triggers[action.eventName || '']?.({\n approvers,\n associators,\n isShowAssignSelect,\n isShowAssignList,\n assignCallback: onAssignApprover,\n deleteAssociatorCallback: onDeleteAssociator,\n })\n break\n default:\n console.warn('Unknown action type:', type)\n }\n } catch (error) {\n // console.error('Action failed:', error)\n }\n}\n\nconst comment = ref('')\nconst commentsHistory = ref<{ associator: string, comments: string, createdAt: string }[]>([])\nconst selectedApprover = ref<string>('')\nconst approvers = ref<{ label: string, value: string }[]>([])\nconst associators = ref<{ id: number, associator: string }[]>([])\nasync function onAssignApprover(approverEmail: string) {\n if (!approverEmail) {\n instance?.appContext.config.globalProperties.$message.error('Please select an approver')\n return\n }\n await confirmDialog('Confirm Assign Approver', 'Do you want to assign the selected approver?')\n try {\n await page.assignApprover(approverEmail)\n associators.value = await page.getAssociator()\n reloadButtonList()\n instance?.appContext.config.globalProperties.$notification.success('Assign Approver clicked!')\n } catch (error) {\n if ((error as any).status === 409) {\n instance?.appContext.config.globalProperties.$notification.error('This user is already an associator')\n return\n }\n instance?.appContext.config.globalProperties.$notification.error('Failed to assign approver')\n }\n}\n\nasync function confirmDialog(title: string, content: string) {\n const { Modal } = await import('@arco-design/web-vue');\n return new Promise((resolve, reject) => {\n let modalInstance = null;\n modalInstance = Modal.confirm({\n title,\n content,\n okText: 'OK',\n cancelText: 'Cancel',\n onOk: () => resolve(true),\n onCancel: () => reject()\n });\n });\n}\n\nasync function onDeleteAssociator(id: number) {\n try {\n await confirmDialog('Confirm Delete Associator', 'Do you want to delete this associator?')\n } catch (error) {\n return\n }\n try {\n await page.deleteAssociator(id.toString())\n associators.value = await page.getAssociator()\n instance?.appContext.config.globalProperties.$notification.success('Associator deleted successfully!')\n } catch (error) {\n instance?.appContext.config.globalProperties.$notification.error('Failed to delete associator')\n }\n}\n\nasync function onAddComment() {\n if (!comment.value.trim()) {\n instance?.appContext.config.globalProperties.$message.error('Comment cannot be empty')\n return\n }\n await page.addComments(comment.value.trim())\n comment.value = ''\n commentsHistory.value = await page.getCommentsHistory()\n instance?.appContext.config.globalProperties.$notification.success('Add Comment clicked!')\n}\n\nfunction formatTitle(title?: string): string {\n if(!title){\n return ''\n }\n if(title === 'OtherInformationText'){\n return 'Other Information'\n }\n if(title === 'Other Information'){\n return ''\n }\n return title\n}\n</script>\n\n<template>\n <div class=\"page-container\">\n <!-- 页面头部 -->\n <TopBar :title=\"pageData.banner.title\" :subTitle=\"pageData.banner.subTitle\" :email=\"getApproverEmail()\" />\n\n <!-- 详情内容区域 -->\n <div class=\"page-body\">\n <a-spin :loading=\"loading\" class=\"detail-container\">\n <div class=\"detail-card\">\n <component :is=\"customComps.Steps\" :steps=\"steps\" />\n <div class=\"form-fields-vertical\">\n <template v-for=\"group in groupedFields\" :key=\"group.name\">\n <a-card :title=\"group.name\" style=\"margin-bottom: 24px;\">\n <div class=\"detail-fields\">\n <template v-for=\"item in group.fields\" :key=\"item.fieldKey\">\n <div class=\"detail-field-wrapper\">\n <div class=\"detail-field\">\n <div class=\"field-label\">{{ formatTitle(item.widget?.title) }}\n <ToolTip\n :is-visible=\"item.widget?.isVisible ?? false\"\n :output-text=\"item.widget?.outputText ?? []\"\n />\n </div>\n <template v-if=\"item.widget?.widget === 'File'\">\n <div class=\"field-value\" v-for=\"file in item.widget.files\" :key=\"file.id\">\n <a-space>\n {{ file.name }}\n <a-link :href=\"file.url\" target=\"_blank\">\n <IconDownload :style=\"{ color: '#7A00E6' }\" />\n </a-link>\n </a-space>\n </div>\n </template>\n <template v-else>\n <div class=\"field-value\">{{ item.fieldValue }}</div>\n </template>\n </div>\n </div>\n </template>\n </div>\n </a-card>\n </template>\n <!-- <a-space v-if=\"isShowAssignSelect\"> -->\n <a-space v-if=\"false\">\n <a-select v-model=\"selectedApprover\">\n <a-option v-for=\"approver in approvers\" :key=\"approver.value\" :value=\"approver.value\">\n {{ approver.label }}\n </a-option>\n </a-select>\n <a-button type=\"primary\">Assign for comment</a-button>\n </a-space>\n\n <!-- <a-list v-if=\"isShowAssignList\"> -->\n <a-list v-if=\"false\">\n <template #header>\n Associators\n </template>\n <a-list-item v-for=\"item in associators\" :key=\"item.id\">\n <template #actions>\n <a-button type=\"text\" status=\"danger\" @click=\"onDeleteAssociator(item.id)\">\n Delete\n </a-button>\n </template>\n {{ item.associator }}\n </a-list-item>\n </a-list>\n\n <div class=\"detail-field-wrapper\" v-if=\"isShowCommentTextArea\">\n <div class=\"detail-field\">\n <div class=\"field-label\">Comment</div>\n <a-textarea v-model=\"comment\" />\n <a-button type=\"primary\" @click=\"onAddComment\">Add Comment</a-button>\n </div>\n </div>\n\n <a-list v-if=\"commentsHistory.length\">\n <template #header>\n Comments History\n </template>\n <a-list-item v-for=\"item in commentsHistory\" :key=\"item.associator\">\n {{ item.associator }}: {{ item.comments }} ({{ formatDate(item.createdAt) }})\n </a-list-item>\n </a-list>\n </div>\n\n <!-- 自定义内容插槽 -->\n <div v-if=\"$slots.content\" class=\"detail-content\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </a-spin>\n </div>\n\n <!-- 操作按钮区域 -->\n <div class=\"page-footer\">\n <div class=\"action-container\">\n <slot name=\"action\"></slot>\n <div class=\"action-buttons\">\n <template v-for=\"action in reversedActions\" :key=\"action.title\">\n <ActionButton :loading=\"loading\" :config=\"action\" class=\"action-button\"\n @click=\"(...args) => clickHandler(action, ...args)\" />\n </template>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n min-height: 100vh\n background-color: #f5f5f5\n display: flex\n flex-direction: column\n}\n\n.page-body {\n flex: 1\n padding: 24px 32px\n overflow-y: auto\n}\n\n.detail-container {\n width: 100%\n margin: 0 auto\n}\n\n.detail-card {\n background: white\n border-radius: 8px\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06)\n overflow: hidden\n padding-top: 20px\n}\n\n.form-fields-vertical {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 32px;\n\n @media (max-width: 768px) {\n padding: 24px 16px;\n gap: 20px;\n }\n}\n\n.detail-fields {\n padding: 32px\n display: grid\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr))\n gap: 24px\n \n @media (max-width: 768px) {\n grid-template-columns: 1fr\n padding: 24px 16px\n gap: 20px\n }\n}\n\n.detail-field-wrapper {\n .detail-field {\n width: 100%\n \n .field-label {\n font-weight: 500\n color: #262626\n margin-bottom: 8px\n font-size: 14px\n line-height: 1.4\n }\n \n .field-value {\n color: #595959\n padding: 8px 12px\n background-color: #fafafa\n border-radius: 4px\n min-height: 40px\n display: flex\n align-items: center\n font-size: 14px\n line-height: 1.5\n border: 1px solid #f0f0f0\n word-break: break-word\n }\n }\n}\n\n.detail-content {\n border-top: 1px solid #f0f0f0\n padding: 24px 32px\n background: #fafafa\n}\n\n.page-footer {\n background: white\n border-top: 1px solid #e8e8e8\n padding: 16px 32px\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06)\n \n @media (max-width: 768px) {\n padding: 16px 16px\n }\n}\n\n.action-container {\n max-width: 1200px\n margin: 0 auto\n display: flex\n justify-content: flex-end\n align-items: center\n gap: 12px\n}\n\n.action-buttons {\n display: flex\n gap: 12px\n align-items: center\n}\n\n.action-button {\n min-width: 88px\n height: 36px\n \n &:hover {\n transform: translateY(-1px)\n transition: transform 0.2s ease\n }\n}\n\n/* 响应式调整 */\n@media (max-width: 1024px) {\n .detail-fields {\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))\n }\n}\n\n@media (max-width: 640px) {\n .page-body {\n padding: 16px\n }\n \n .detail-fields {\n padding: 20px 16px\n }\n \n .action-container {\n flex-direction: column-reverse\n align-items: stretch\n }\n \n .action-buttons {\n justify-content: center\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onActivated, onMounted, reactive, ref, getCurrentInstance } from 'vue'\nimport { getListData, type PageConfig, type FieldConfig, type Action, type Paging, download, PageActionType } from '@/services/dataGen'\nimport { type TableColumnData } from '@arco-design/web-vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport { useSvrStore, useBpmStore } from \"@/composables/usePinia\"\nimport TopBar from '@/components/TopBar.vue'\nimport { PageBuilder } from '@/services/page'\n\nconst svrStore = useSvrStore()\nconst bpmStore = useBpmStore()\ndefineOptions({\n name: 'ListView'\n})\nconst router = useLibraryRouter()\n\n// 在 setup 中获取实例\nconst instance = getCurrentInstance()\n\nconst props = defineProps<{\n className: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\nconst paging = reactive<Paging>({\n current: 1,\n total: 0,\n pageSize: 10,\n defaultPageSize: 10,\n showTotal: true,\n showPageSize: true,\n filters: [],\n})\n\nfunction createListParams() {\n const searchFilters = Object.entries(searchForm.value)\n .filter(([, { value }]) => value && value !== '')\n .map(([key, { value, operator }]) => ({\n key,\n value,\n operator // 根据实际需要调整操作符\n }))\n return {\n pageNumber: paging.current,\n pageSize: paging.pageSize,\n filters: [...paging.filters, ...searchFilters],\n sorts: [{\n \"key\": \"workflowId\",\n \"type\": 1\n }],\n }\n}\n\n// 优化滚动配置 - 移除固定高度\nconst scroll = computed(() => {\n const columnCount = _columns.value.length\n const estimatedWidth = columnCount * 150 + 250 // 包含Actions列宽度\n return {\n x: estimatedWidth, // 只设置横向滚动\n // 移除 y 属性,让表格高度自适应\n }\n})\n\n// 优化列配置\nconst mapColumns = (fields: Record<string, FieldConfig>) => {\n const col = Object.entries(fields)\n .filter(([, item]) => item.widget?.column)\n .map(([key, value], index) => {\n return {\n title: value.widget!.title,\n dataIndex: key.charAt(0).toLowerCase() + key.slice(1),\n order: value.order,\n ellipsis: true,\n tooltip: true,\n width: 150,\n minWidth: 100, // 启用最小宽度\n resizable: true, // 启用列宽调整\n } as TableColumnData\n })\n .sort((a, b) => a.order - b.order)\n\n col.push({\n title: 'Actions',\n slotName: 'optional',\n align: 'center',\n width: 250,\n minWidth: 200,\n fixed: 'right',\n resizable: false,\n })\n _columns.value = col\n}\n\n// 优化数据加载,减少不必要的响应式\nconst _data = ref<object[]>([])\nconst _columns = ref<TableColumnData[]>([])\nconst loadingPage = ref(true)\nconst loadingTable = ref(true)\n\nconst actions = ref<Action[]>()\n\nconst loadData = async () => {\n loadingTable.value = true\n const res = await getListData(props.className, createListParams())\n _data.value = res.data\n paging.total = res.totalCount\n loadingTable.value = false\n}\n\nconst mounted = ref(false)\n\nonMounted(async () => {\n loadingPage.value = true\n const page = new PageBuilder()\n .setPageActionType(PageActionType.List)\n .setClassName(props.className)\n .setStore({ svrStore, bpmStore })\n .build()\n pageData.value = await page.getPageData()\n mapColumns(pageData.value.fields)\n mapSearchableFields(pageData.value.fields)\n initSearchForm()\n tabHandler(pageData.value?.tabs?.[0]?.key || '')\n actions.value = pageData.value.actions\n loadingPage.value = false\n mounted.value = true // 标记已挂载\n})\n\nonActivated(() => {\n // 只有不是首次挂载时才触发\n if (mounted.value) {\n loadData()\n }\n})\n\nconst pageChangeHandler = (page: number) => {\n paging.current = page\n loadData()\n}\n\nconst pageSizeChangeHandler = (pageSize: number) => {\n paging.pageSize = pageSize\n loadData()\n}\n\nfunction clickHandler(type: ActionTypeEnum, _: string, redirectType: RedirectType, title: string, workflowId: string) {\n switch (type) {\n case ActionTypeEnum.Link:\n router.push({ name: redirectType, params: { workflowId } })\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n\nfunction createHandler(actionType: ActionTypeEnum, requestUrl: string, redirectType: RedirectType) {\n switch (actionType) {\n case ActionTypeEnum.Submit:\n download(requestUrl, { filters: [{ key: \"approverList\", value: getApproverEmail(), operator: 2 }] })\n instance?.appContext.config.globalProperties.$notification.success(`submit success!`)\n break\n case ActionTypeEnum.Link:\n router.push({ name: redirectType })\n break\n default:\n console.warn('Unknown action type:', actionType)\n }\n}\n\nfunction getApproverEmail() {\n return svrStore()?.userInfo?.email_address ?? ''\n}\n\nfunction replaceEmail(url: string, email: string): string {\n if (typeof url !== 'string') {\n return url\n }\n if (url.indexOf('{currentUserEmail}') === -1) {\n return url\n }\n return url.replace(/{currentUserEmail}/g, email)\n}\n\nfunction tabHandler(key: string) {\n const filters = pageData.value?.tabs?.find(item => item.key === key)?.filters\n paging.filters = filters?.map(item => {\n return {\n ...item,\n value: replaceEmail(item.value, getApproverEmail())\n }\n }) || []\n paging.current = 1\n loadData()\n}\n\n// 添加查询表单数据\nconst searchForm = ref<Record<string, any>>({})\n\n// 计算可搜索的字段\nconst searchableFields = ref<{ fieldKey: string, fieldConfig: FieldConfig }[]>([])\n\nfunction mapSearchableFields(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n searchableFields.value = Object.entries(fields)\n .filter(([, item]) => item.isFiltered)\n .map(([fieldKey, fieldConfig]) => ({ fieldKey, fieldConfig }))\n}\n\n// 初始化查询表单\nconst initSearchForm = () => {\n const form: Record<string, any> = {}\n searchableFields.value.forEach(({ fieldKey, fieldConfig }) => {\n form[fieldKey] = {}\n form[fieldKey].value = fieldConfig.modelValue\n form[fieldKey].operator = fieldConfig.operator\n })\n searchForm.value = form\n}\n\n// 查询处理函数\nconst handleSearch = () => {\n paging.current = 1\n loadData()\n}\n\n// 重置查询\nconst handleReset = () => {\n // Object.keys(searchForm.value).forEach(key => {\n // searchForm.value[key] = ''\n // })\n\n if (pageData.value) {\n initSearchForm()\n }\n handleSearch()\n}\n\nfunction judgeHiddenActions(action: Action, record: any) {\n if (action.location !== 'InTable') {\n return false\n }\n if (action.title === 'Update') {\n if (record.status === 100) {\n return false\n }\n if (record.status === -1) {\n return false\n }\n }\n return true\n}\n</script>\n\n<template>\n <div class=\"list-container\">\n <TopBar :title=\"pageData?.banner.title ?? ''\" :subTitle=\"pageData?.banner.subTitle ?? ''\"\n :email=\"getApproverEmail()\" />\n <!-- 查询表单 -->\n <a-card>\n <div class=\"query-title\">\n <h3>Search Conditions</h3>\n <a-space size=\"medium\">\n <template v-for=\"action in actions\" :key=\"action.title\">\n <template v-if=\"action.location === 'InOperation'\">\n <ActionButton :config=\"action\" @click=\"createHandler\" />\n </template>\n </template>\n </a-space>\n </div>\n <a-row :gutter=\"[24, 20]\">\n <template v-for=\"item in searchableFields\" :key=\"item.fieldKey\">\n <a-col :span=\"6\" class=\"search-col\">\n <DataWidgets :name=\"item.fieldKey\" :config=\"item.fieldConfig\" v-model=\"searchForm[item.fieldKey].value\"\n class=\"form-field\" />\n </a-col>\n </template>\n <a-col :span=\"6\" class=\"search-col form-buttons\">\n <a-space size=\"medium\">\n <a-button type=\"primary\" size=\"medium\" @click=\"handleSearch\">\n Search\n </a-button>\n <a-button size=\"medium\" @click=\"handleReset\">\n Reset\n </a-button>\n </a-space>\n </a-col>\n </a-row>\n </a-card>\n\n <a-tabs size=\"large\" @tab-click=\"tabHandler\">\n <a-tab-pane v-for=\"tab in pageData?.tabs\" :key=\"tab.key\" :title=\"tab.title\" />\n </a-tabs>\n <a-table :columns=\"_columns\" :data=\"_data\" stripe border :pagination=\"{\n current: paging.current,\n total: paging.total,\n pageSize: paging.pageSize,\n showTotal: paging.showTotal,\n showPageSize: paging.showPageSize,\n pageSizeOptions: [10, 20, 50, 100]\n }\" :loading=\"loadingTable\" size=\"medium\" :scroll=\"scroll\" @page-change=\"pageChangeHandler\"\n @page-size-change=\"pageSizeChangeHandler\">\n\n <template #optional=\"{ record }\">\n <a-space size=\"small\">\n <template v-for=\"action in actions\" :key=\"action.title\">\n <template v-if=\"judgeHiddenActions(action, record)\">\n <ActionButton :config=\"action\" size=\"small\"\n @click=\"(...args) => clickHandler(...args, record.workflowId)\" />\n </template>\n </template>\n </a-space>\n </template>\n </a-table>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.list-container {\n :deep(.arco-table) {\n .arco-table-body {\n overflow-x: auto\n }\n }\n padding 16px\n}\n\n.query-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.field-label {\n font-weight: 500;\n margin-bottom: 8px;\n}\n\n.form-buttons {\n margin-top: 24px\n}\n</style>\n","import type { App } from 'vue'\nimport type { Router } from 'vue-router'\nimport type { Pinia } from 'pinia'\nimport CreateView from '@/components/data-gen/views/CreateView.vue'\nimport UpdateView from '@/components/data-gen/views/UpdateView.vue'\nimport DetailView from '@/components/data-gen/views/DetailView.vue'\nimport ListView from '@/components/data-gen/views/ListView.vue'\nimport { RouterKey } from '@/composables/useRouter'\nimport { PiniaKey, BpmStoreKey, SvrStoreKey} from '@/composables/usePinia'\nimport {TriggersKey} from '@/composables/useTriggers'\nimport { CustomCompsKey } from '@/composables/customComps'\nimport { type LibraryConfig, setLibraryConfig } from '@/stores/libraryConfig'\n// 导入样式文件\nimport '@/styles/index.styl'\n\n\n\ninterface PluginOptions {\n router?: Router\n pinia?: Pinia\n config?: LibraryConfig\n [key: string]: any\n}\n\nconst MyPlugin = {\n install(app: App, options: PluginOptions = {}) {\n // 设置全局配置\n if (options.config) {\n setLibraryConfig(options.config)\n }\n \n // 如果宿主提供了 router,注入它以便共享\n if (options.router) {\n app.provide(RouterKey, options.router)\n }\n \n // 如果宿主提供了 pinia,注入它以便共享\n if (options.pinia) {\n app.provide(PiniaKey, options.pinia)\n }\n\n // 如果宿主提供了 bpmStore,注入它以便共享\n if (options.useBpmStore) {\n app.provide(BpmStoreKey, options.useBpmStore)\n }\n\n // 如果宿主提供了 svrStore,注入它以便共享\n if (options.useSvrStore) {\n app.provide(SvrStoreKey, options.useSvrStore)\n }\n\n // 如果宿主提供了 triggers,注入它以便共享\n if (options.triggers) {\n app.provide(TriggersKey, options.triggers)\n }\n\n if (options.customComps) {\n app.provide(CustomCompsKey, options.customComps)\n }\n\n // 注册组件\n app.component('CreateView', CreateView)\n app.component('UpdateView', UpdateView)\n app.component('DetailView', DetailView)\n app.component('ListView', ListView)\n }\n}\n\nexport default MyPlugin"],"names":["useLibraryMainStore","defineStore","ref","sleep","tick","resolve","getStoreData","store","key","remoteFunction","defaultValue","e","patLeft0","str","s","formatDate","date","format","_date","meta","value","downloadFile","data","fileName","blob","downloadElement","href","globalConfig","setLibraryConfig","config","getLibraryConfig","instance","getCurrentInstance","getApiConfig","responseInterceptor","res","createAxiosInstance","apiBase","axios","Axios","getToken","appSecret","mainStore","getAxios","token","dataGetter","byteToHex","i","unsafeStringify","arr","offset","getRandomValues","rnds8","rng","randomUUID","native","v4","options","buf","rnds","ActionTypeEnum","PageActionType","mapPageData","input","type","attr","showToRoles","role","hasRole","uuidv4","replaceWorkflowId","a","b","fieldName","fieldData","fieldConfig","attributes","propertyValue","getPageData","className","opt","getBtnList","getListData","params","createData","url","updateData","id","replacedUrl","replaceEmail","email","replaceReason","reason","replaceStatus","status","replaceIsGlobal","ifGlobal","replaceClassName","approveData","getOptions","list","item","getProcess","workflowId","convertToFileItem","file","getFiles","acc","category","removeFile","attachmentId","getApprovers","label","assignApprover","addComments","comments","getCommentsHistory","getAssociator","deleteAssociator","associatorId","download","validateRules","configs","errorMessages","isValid","vallidateRule","ruleName","ruleParameter","validations","parameter","_","props","__props","emits","__emit","model","_useModel","validate","v","inputHandler","changeHandler","valid","trigger","__expose","_createBlock","_component_AInput","$setup","_cache","$event","max","min","onMounted","_component_AInputNumber","loading","_options","eventHandlers","computed","handlers","loadOptions","_component_ASelect","_openBlock","_createElementBlock","_Fragment","_renderList","_component_AOption","fieldNames","_component_ASpace","_createVNode","_component_ACascader","$props","headers","ApiBase","uploadRef","replaceIdAndClassName","action","submit","onBeforeRemove","name","reject","Modal","uploadPromiseResolve","uploadPromiseReject","handleUploadSuccess","fileItem","handleUploadError","readyFiles","onChange","fileList","nextTick","defaultFiles","_component_a_upload","_withCtx","_component_a_button","_createTextVNode","_component_ATextarea","_component_ACheckbox","configProviderInjectionKey","CLASS_PREFIX","GLOBAL_CONFIG_NAME","getPrefixCls","componentName","_a","_b","_c","configProvider","inject","isNumber","obj","_export_sfc","sfc","val","_sfc_main","defineComponent","ev","emit","prefixCls","cls","innerStyle","styles","_hoisted_1","_sfc_render","_ctx","$data","$options","openBlock","createElementBlock","normalizeClass","normalizeStyle","args","createElementVNode","_IconQuestionCircle","IconQuestionCircle","app","iconPrefix","_IconDownload","IconDownload","_hoisted_2","_component_a_tooltip","output","_createElementVNode","_toDisplayString","subItem","widgetRef","useTemplateRef","curComp","InputText","InputNumber","SelectList","Cascader","FileUpload","TextArea","CheckBox","errMsg","errHandler","handlerName","isFileUpload","formatTitle","title","_createCommentVNode","_resolveDynamicComponent","_hoisted_3","clickHandler","_component_AButton","_renderSlot","_component_ALink","redirectType","SubmitButton","DetailLink","curUrl","RouterKey","useLibraryRouter","injectedRouter","useVueRouter","TriggersKey","useTriggers","injectedTriggers","PiniaKey","BpmStoreKey","SvrStoreKey","useBpmStore","useSvrStore","_hoisted_4","_hoisted_5","_hoisted_6","_component_a_popover","_component_a_avatar","genFieldsGroup","widget","groups","fields","f","groupedKeys","g","others","PageBuilder","pageActionType","Page","selectedApprover","comment","bpmStore","svrStore","router","triggers","dataWidgetsRefs","pageData","_fields","_dependent","genField","w","hiddenFields","genDependentField","reversedActions","_data","page","filed","getApproverEmail","validateResult","submitPromises","error","newHiddenFields","fieldValue","groupedFields","_hoisted_7","_hoisted_8","_hoisted_9","_component_a_spin","group","_component_a_card","btnList","files","btn","CustomCompsKey","useLibraryCustomComps","customComps","mapWorkflowSteps","process","currentIndex","p","index","step","nodeApprover","history","actualApprover","historyApprover","steps","isGlobal","isShowAssignSelect","isShowAssignList","isShowCommentTextArea","reloadButtonList","load","approvers","commentsHistory","associators","triggerFn","successContent","onAssignApprover","onDeleteAssociator","approverEmail","confirmDialog","content","onAddComment","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_component_a_space","_component_a_link","_component_a_textarea","_component_a_list","_component_a_list_item","_hoisted_11","paging","reactive","createListParams","searchFilters","searchForm","operator","scroll","_columns","mapColumns","col","loadingPage","loadingTable","actions","loadData","mounted","mapSearchableFields","initSearchForm","tabHandler","onActivated","pageChangeHandler","pageSizeChangeHandler","pageSize","createHandler","actionType","requestUrl","filters","searchableFields","fieldKey","form","handleSearch","handleReset","judgeHiddenActions","record","_component_a_row","_component_a_col","_component_a_tabs","tab","_component_a_tab_pane","_component_a_table","MyPlugin","CreateView","UpdateView","DetailView","ListView"],"mappings":"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","x_google_ignoreList":[5,6,7,8,19,20,21,22,23,24,25,26]}
1
+ {"version":3,"file":"index.es.js","sources":["../src/stores/useLibraryMainStore.ts","../src/assets/js/util.ts","../src/stores/libraryConfig.ts","../src/services/axios.ts","../src/services/dataGetter.ts","../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js","../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js","../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js","../src/components/data-gen/actions/types.ts","../src/services/dataGen.ts","../src/services/validation.ts","../src/components/data-gen/widgets/InputText.vue","../src/components/data-gen/widgets/InputNumber.vue","../src/components/data-gen/widgets/SelectList.vue","../src/components/data-gen/widgets/Cascader.vue","../src/components/data-gen/widgets/FileUpload.vue","../src/components/data-gen/widgets/TextArea.vue","../src/components/data-gen/widgets/CheckBox.vue","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/config-provider/context.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/_utils/global-config.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/_utils/is.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/_virtual/plugin-vue_export-helper.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/icon/icon-question-circle/icon-question-circle.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/icon/icon-question-circle/index.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/icon/icon-download/icon-download.js","../node_modules/.pnpm/@arco-design+web-vue@2.57.0_vue@3.5.18_typescript@5.9.2_/node_modules/@arco-design/web-vue/es/icon/icon-download/index.js","../src/components/data-gen/widgets/ToolTip.vue","../src/components/data-gen/widgets/index.vue","../src/components/data-gen/actions/SubmitButton.vue","../src/components/data-gen/actions/DetailLink.vue","../src/components/data-gen/actions/index.vue","../src/composables/useRouter.ts","../src/composables/useTriggers.ts","../src/composables/usePinia.ts","../src/components/TopBar.vue","../src/assets/js/fieldsGroup.ts","../src/services/page.ts","../src/components/data-gen/views/CreateView.vue","../src/components/data-gen/views/UpdateView.vue","../src/composables/customComps.ts","../src/components/data-gen/views/DetailView.vue","../src/components/data-gen/views/ListView.vue","../src/main.ts"],"sourcesContent":["import { defineStore } from 'pinia'\nimport { ref } from 'vue'\n\nexport const useLibraryMainStore = defineStore('main', () => {\n const token = ref<string | undefined>(undefined)\n \n return {\n token\n }\n})\n","import type { Store } from 'pinia'\n\n/**\n * 该函数用于创建一个异步的延迟操作,使程序暂停执行指定的毫秒数。\n * @param tick - 延迟的毫秒数。\n * @returns 一个 Promise,在指定的毫秒数后解析。\n */\nexport const sleep = async (tick: number) => new Promise((resolve) => setTimeout(resolve, tick))\n\n/**\n * async get data from store, if store ie empty load from remote.\n * @param store Target Pinia store\n * @param key Data key\n * @param remoteFunction Remote load function\n * @param defaultValue data default value\n * @returns {Promise<*>}\n */\nexport const getStoreData = async (\n store: Record<string, any>,\n key: string,\n remoteFunction: Function,\n defaultValue = undefined\n) => {\n // if store data is undefined, store at initial state.\n // then set store data to null and load from remote\n if (store[key] === undefined) {\n try {\n store[key] = null\n store[key] = (await remoteFunction()) || defaultValue\n } catch (e) {\n // if remote hih uncaught error, then set store data to initial state.\n console.error(e)\n store[key] = undefined\n }\n }\n // if store data is null, then other threads is loading data from remote.\n // wait certain time to until data loaded. Mean to save http resource\n while (store[key] === null) {\n await sleep(100)\n }\n return store[key]\n}\n\n/**\n * Pat a 0 to left if input string length is 1\n * @param str\n * @returns {string}\n */\nexport const patLeft0 = (str: any): string => {\n const s = `0${str}`\n return s.substring(s.length - 2)\n}\n\n/**\n * Format date as input format.\n * @param date input date\n * @param format date format, default as 'yyyy-MM-dd hh:mm:ss'\n * @returns {string|*}\n */\nexport const formatDate = (date: Date | string, format = 'yyyy-MM-dd hh:mm:ss'): string => {\n if (!date || (typeof date === 'string' && date.length === 0)) {\n return ''\n }\n\n try {\n const _date = new Date(date)\n const meta = [\n ['yyyy', _date.getFullYear()],\n ['yy', _date.getFullYear().toString().substring(2)],\n ['MM', patLeft0(_date.getMonth() + 1)],\n ['M', _date.getMonth() + 1],\n ['dd', patLeft0(_date.getDate())],\n ['d', _date.getDate()],\n ['hh', patLeft0(_date.getHours())],\n ['h', _date.getHours()],\n ['mm', patLeft0(_date.getMinutes())],\n ['m', _date.getMinutes()],\n ['ss', patLeft0(_date.getSeconds())],\n ['s', _date.getSeconds()]\n ] as [string, string][]\n\n for (const [key, value] of meta) {\n format = format.replace(key, value)\n }\n\n return format\n } catch (e) {\n return date.toLocaleString()\n }\n}\n\nexport const downloadFile = (data: Blob | string, fileName: string) => {\n // data为blob格式\n let blob\n if (data instanceof Blob) {\n blob = data\n } else {\n blob = new Blob([data])\n }\n const downloadElement = document.createElement('a')\n const href = window.URL.createObjectURL(blob)\n downloadElement.href = href\n downloadElement.download = fileName\n downloadElement.click()\n window.URL.revokeObjectURL(href)\n}\n","// 全局配置\nexport interface LibraryConfig {\n apiBase?: string\n appSecret?: string\n fieldsGroup?: {\n name: string\n keys: string[]\n }[]\n}\n\nlet globalConfig: LibraryConfig = {}\n\nexport function setLibraryConfig(config: LibraryConfig) {\n globalConfig = { ...globalConfig, ...config }\n}\n\nexport function getLibraryConfig(): LibraryConfig {\n return globalConfig\n}","import { getCurrentInstance } from 'vue'\nimport { default as Axios } from 'axios'\nimport { useLibraryMainStore } from '@/stores/useLibraryMainStore'\nimport { getStoreData } from '../assets/js/util'\nimport { getLibraryConfig } from '@/stores/libraryConfig'\n\nconst instance = getCurrentInstance()\n\n// 获取配置,优先使用全局配置,回退到环境变量\nfunction getApiConfig() {\n const config = getLibraryConfig()\n return {\n apiBase: config.apiBase || import.meta.env.VITE_BPM_API_BASE || '',\n appSecret: config.appSecret || import.meta.env.VITE_BPM_APP_SECRET || ''\n }\n}\n\nfunction responseInterceptor(res: any) {\n if(!res?.data?.statusCode) {\n return res\n }\n switch (res.data.statusCode) {\n case 1:\n res.data.data = res.data.result\n return res.data\n case 0:\n default:\n instance?.appContext.config.globalProperties.$notification.error(res.data.msg)\n return null\n }\n}\n// 动态创建 axios 实例\nfunction createAxiosInstance() {\n const { apiBase } = getApiConfig()\n const axios = Axios.create({\n baseURL: apiBase,\n timeout: 20 * 1000, // 20s\n // headers: { 'Content-Type': 'application/json' },\n withCredentials: true\n })\n axios.interceptors.response.use(responseInterceptor)\n return axios\n}\n\ntype GetTokenRes = {\n token: string\n expireSeconds?: number\n}\n\nexport const getToken = async () => {\n const { apiBase, appSecret } = getApiConfig()\n const axios = createAxiosInstance()\n const mainStore = useLibraryMainStore()\n \n return await getStoreData(mainStore, 'token', async () => {\n const res = await axios.get<GetTokenRes>(`${apiBase}/GenerateToken`, {\n params: {\n appid: 'bpm',\n appsecret: appSecret,\n },\n })\n if (res?.data?.token) {\n // every 1 hour clear current token in case token expired\n setTimeout(() => {\n mainStore.token = undefined\n }, (res.data?.expireSeconds ?? 60 * 60) * 1000)\n }\n return res?.data?.token\n })\n}\n\nexport const getAxios = async () => {\n const token = await getToken()\n const axios = createAxiosInstance()\n axios.defaults.headers.common['Authorization'] = `Bearer ${token}`\n return axios\n}\n","export default {\n CurrentUserEmail: (store:any) => store.svrStore()?.userInfo?.email_address ?? 'test.email@dataGetter.ts',\n CurrentUserPositionCode: (store:any) => store.bpmStore()?.positionCode ?? 888,\n CurrentDatetime: () => new Date().toISOString(),\n ApproverEmail: (store:any) => store.svrStore()?.userInfo?.email_address ?? 'test.email@dataGetter.ts',\n ApproverPositionCode: (store:any) => store.bpmStore()?.positionCode ?? 999,\n RejectReason: () => 'Test Reject Reason',\n} as { [key: string]: Function }\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import type { RedirectType } from '@/types'\n\nenum ActionTypeEnum {\n Submit,\n Link,\n Button\n}\n\ntype ActionProps = {\n // title: string,\n url: string\n redirectType: RedirectType\n loading?: boolean\n}\n\n// type ActionType = 'submit' | 'link'\n\ntype ActionEmits = {\n (e: 'click', actionType: ActionTypeEnum, url: string, redirectType: RedirectType, title: string): void\n}\n\ntype ActionNoTypeEmits = {\n (e: 'click', url: string, redirectType: RedirectType): void\n}\n\nexport type {\n ActionProps,\n ActionEmits\n}\n\nexport { ActionTypeEnum, ActionNoTypeEmits }","import type { RedirectType } from '@/types'\nimport { getAxios } from './axios'\nimport { default as dataGetter } from './dataGetter'\nimport { v4 as uuidv4 } from 'uuid'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport type { FileItem } from '@arco-design/web-vue'\nimport { downloadFile } from '@/assets/js/util'\n\nexport type SelectOption = {\n value: string | number\n label: string\n [key: string]: unknown\n}\n\nexport type Tree = {\n title: string\n items: Tree[]\n}\n\nexport type WidgetConfig = {\n widget: string\n readonly: boolean\n title: string\n dataSourceProvider: string\n options?: SelectOption[]\n multiple?: boolean\n remote?: string\n uploadURL?: string\n files?: FileItem[]\n removeFile?: (attachmentId: string) => Promise<void>\n outputText?: Tree[],\n isVisible?: boolean,\n [key: string]: unknown\n}\n\nexport type ValidationConfig = {\n ruleName: string\n ruleParameter: any\n errorMessage: string\n}\n\nexport type Trigger = {\n event: string\n handlerName: string\n}\n\nexport type FieldConfig = {\n widget?: WidgetConfig\n order?: number\n validations: ValidationConfig[]\n modelValue?: any\n column?: boolean\n triggers?: Trigger[]\n uiFilters?: any[]\n isFiltered: boolean\n dependent: string\n fieldValue?: any\n operator?: string\n}\n\nexport type TabsConfig = {\n key: string\n title: string\n filters: Record<string, any>[]\n order: number\n}\n\nexport type Action = {\n redirectUrl: string,\n location: 'InTable' | 'InOperation',\n attributeType: 'UIControl',\n readonly: boolean,\n widget: ActionTypeEnum,\n title: string,\n isSubmit: boolean,\n requestUrl?: string\n redirectType?: 'Create' | 'Details' | 'Update',\n eventName?: string,\n}\n\nexport type PageConfig = {\n pageType: string\n fields: Record<string, FieldConfig>\n actions?: Action[]\n globalValidations: Array<{\n rule: string\n errorMessage: string\n param?: any\n appliesTo: string[]\n }>\n tabs?: TabsConfig[]\n banner: {\n title: string\n subTitle: string\n }\n}\n\ntype FieldData = {\n attributes: Object[]\n propertyValue?: any\n}\n\nexport enum PageActionType {\n Create = 0,\n Update = 1,\n Details = 2,\n List = 3,\n ReCreate = 5,\n}\n\nfunction mapPageData(input: any, type: PageActionType, store: { svrStore: any, bpmStore: any }): PageConfig {\n const config: PageConfig = {\n pageType: '',\n fields: {},\n globalValidations: [],\n banner: {\n title: '',\n subTitle: '',\n },\n }\n\n // 处理ClassAttributes\n input.__ClassAttributes?.forEach((attr: any) => {\n if (attr.attributeType === 'UIPageType') {\n config.pageType = attr.Type\n } else if (attr.attributeType === 'UIValidationControl') {\n config.globalValidations.push({\n rule: attr.ruleName,\n errorMessage: attr.errorMessage,\n param: attr.ruleParameter,\n appliesTo: attr.propertyNames || ['*'],\n })\n } else if (attr.attributeType === 'UIControl') {\n const showToRoles = attr.showToRoles.split(',').map((role: string) => role.trim())\n const hasRole = store.bpmStore().employeeInfo.roleList.some((role: { name: string }) => showToRoles.includes(role.name)) || attr.showToRoles === ''\n if (attr.widget === 'Tab') {\n if (!config.tabs) {\n config.tabs = []\n }\n if (hasRole) {\n config.tabs.push({\n key: uuidv4(),\n title: attr.title,\n filters: attr.filters ? JSON.parse(attr.filters) : [],\n order: attr.order,\n })\n }\n return\n }\n if (!config.actions) {\n config.actions = []\n }\n if (hasRole) {\n // 只有已退回的workflow才能看到重新提交按钮\n if (attr.title === 'Re-Submit') {\n if (input.status.propertyValue !== -1) {\n return\n }\n }\n config.actions.push({\n isSubmit: attr.isSubmit,\n requestUrl: attr.requestUrl,\n redirectUrl: attr.redirectUrl,\n redirectType: attr.redirectType,\n title: attr.title,\n widget: attr.widget === 'Link' ? ActionTypeEnum.Link : attr.widget === 'Submit' ? ActionTypeEnum.Submit : ActionTypeEnum.Button,\n location: attr.location,\n attributeType: attr.attributeType,\n readonly: attr.readonly,\n eventName: attr.eventName,\n })\n }\n } else if (attr.attributeType === 'Banner') {\n config.banner.title = attr.title\n if (type === PageActionType.Create) {\n config.banner.subTitle = attr.subTitle\n } else if (type === PageActionType.ReCreate) {\n config.banner.subTitle = attr.subTitle\n } else {\n config.banner.subTitle = replaceWorkflowId(attr.subTitle, input.workflowId.propertyValue)\n }\n }\n })\n if (config.tabs) {\n config.tabs = config.tabs.sort((a, b) => a.order - b.order)\n }\n\n // 处理字段配置\n Object.entries(input).forEach(([fieldName, fieldData]) => {\n if (fieldName === '__ClassAttributes' || fieldName === 'className') return\n if (fieldName === 'id' || fieldName === 'deleteFlag' || fieldName === 'status' || fieldName === 'workFlowReason') {\n return\n }\n if (type !== PageActionType.List) {\n if (fieldName === 'workflowId') {\n return\n }\n }\n const fieldConfig: FieldConfig = {\n validations: [],\n triggers: [],\n isFiltered: false,\n dependent: '',\n operator: '',\n }\n\n const { attributes, propertyValue } = fieldData as FieldData\n // 处理字段值\n switch (propertyValue) {\n case null:\n fieldConfig.modelValue = ''\n break\n case undefined:\n fieldConfig.modelValue = ''\n break\n default:\n fieldConfig.modelValue = propertyValue\n break\n }\n if (fieldName === 'onBehalf' && type === PageActionType.Create) {\n fieldConfig.modelValue = dataGetter.CurrentUserEmail(store)\n }\n\n if (type === PageActionType.Update || type === PageActionType.ReCreate) {\n if (fieldName === 'directReports' || fieldName === 'employeesInTheTeam') {\n if (fieldConfig.modelValue) {\n fieldConfig.modelValue = Number(fieldConfig.modelValue)\n }\n }\n }\n\n // 处理控件属性\n attributes?.forEach((attr: any) => {\n if (attr.order || attr.Order) {\n fieldConfig.order = (attr.order ?? attr.Order) as number\n } else if (attr.attributeType === 'UIControl') {\n attr.outputText = attr.outputText ? JSON.parse(attr.outputText) : []\n fieldConfig.widget = {\n ...attr,\n column: true,\n } as WidgetConfig\n } else if (attr.attributeType === 'UIValidationControl' && type !== PageActionType.List) {\n if (fieldConfig.widget?.widget !== 'CheckBox') {\n fieldConfig.validations.push(attr as ValidationConfig)\n }\n } else if (attr.attributeType === 'UIListed') {\n fieldConfig.widget = {\n ...attr,\n column: true,\n } as WidgetConfig\n } else if (attr.attributeType === 'UIFiltered') {\n fieldConfig.isFiltered = true\n fieldConfig.operator = attr.operatorType\n } else if (attr.dependentType) {\n fieldConfig.dependent = dataGetter[attr.dependentType] ? dataGetter[attr.dependentType](store) : ''\n } else if (attr.eventType === 'Change') {\n fieldConfig.triggers?.push({\n event: 'change',\n handlerName: attr.eventName\n })\n }\n })\n\n config.fields[fieldName] = fieldConfig\n })\n\n return config\n}\n\nexport const getPageData = async (\n type: PageActionType,\n className: string,\n store: {\n svrStore: any,\n bpmStore: any\n },\n opt?: {\n workflowId: string\n },\n) => {\n const axios = await getAxios()\n const res = await axios.get(`/General/${className}/${type}/page`, { params: opt })\n return mapPageData(res?.data, type, store)\n}\n\nexport const getBtnList = async (\n type: PageActionType,\n className: string,\n opt: {\n workflowId?: string\n email?: string\n },\n): Promise<{\n button: string,\n isShow: boolean\n}[]> => {\n const axios = await getAxios()\n const res = await axios.post(`/${className}/${type}/button/List`, null, { params: opt })\n return res?.data\n}\n\nexport type ListDataRes = {\n __ClassAttributes: {\n redirectUrl: string,\n location: 'InTable' | 'InOperation',\n attributeType: 'UIControl',\n readonly: boolean,\n widget: 'Link',\n title: 'Approve' | 'Create' | 'Update',\n isSubmit: boolean\n redirectType: RedirectType,\n }[],\n data: object[],\n totalCount: number\n}\n\nexport type Paging = {\n current: number,\n total: number,\n pageSize: number,\n defaultPageSize: number,\n showTotal: boolean,\n showPageSize: boolean,\n filters: Record<string, any>[],\n}\n\nexport async function getListData(\n className: string,\n params: {\n filters: object[]\n sorts: object[]\n pageNumber: number\n pageSize: number\n }\n) {\n const axios = await getAxios()\n const res = await axios.post<ListDataRes>(`/General/${className}/list`, params)\n return {\n data: res.data.data,\n totalCount: res.data.totalCount,\n // actions: res.data.__ClassAttributes.filter(item=> item.attributeType === 'UIControl').map((attr) => {\n // return {\n // redirectUrl: attr.redirectUrl,\n // location: attr.location,\n // attributeType: attr.attributeType,\n // redirectType: attr.redirectType,\n // readonly: attr.readonly,\n // widget: attr.widget,\n // title: attr.title,\n // isSubmit: attr.isSubmit,\n // }\n // }\n // ),\n }\n}\n\nexport async function createData(className: string, data: object, url: string) {\n const axios = await getAxios()\n const res = await axios.post<number[]>(url, data, {\n params: {\n className,\n },\n })\n return res.data\n}\n\nexport async function updateData(className: string, id: string, data: object, url: string) {\n const axios = await getAxios()\n const replacedUrl = replaceWorkflowId(url, id)\n const res = await axios.put(replacedUrl, data)\n return res?.data\n}\n\nfunction replaceWorkflowId(url: string, id: string): string {\n return url.replace(/{WorkflowId}/g, id)\n}\n\nfunction replaceEmail(url: string, email: string): string {\n return url.replace(/{ApproverEmail}/g, encodeURIComponent(email))\n}\n\nfunction replaceReason(url: string, reason: string): string {\n return url.replace(/{WorkFlowReason}/g, encodeURIComponent(reason))\n}\n\nfunction replaceStatus(url: string, status: string): string {\n return url.replace(/{Status}/g, status)\n}\n\nfunction replaceIsGlobal(url: string, ifGlobal: string): string {\n return url.replace(/{IfTriggerGlobal_RandP_Approval}/g, ifGlobal)\n}\n\nfunction replaceClassName(url: string, className: string): string {\n return url.replace(/{ClassName}/g, encodeURIComponent(className))\n}\n\nexport async function approveData(className: string, id: string, email: string, reason: string, data: object, url: string, status: string, ifGlobal: string) {\n const axios = await getAxios()\n let replacedUrl = replaceWorkflowId(url, id)\n replacedUrl = replaceEmail(replacedUrl, email)\n replacedUrl = replaceReason(replacedUrl, reason)\n replacedUrl = replaceStatus(replacedUrl, status)\n replacedUrl = replaceIsGlobal(replacedUrl, ifGlobal)\n replacedUrl = replaceClassName(replacedUrl, className)\n const res = await axios.put(replacedUrl, data)\n return res?.data\n}\n\nexport async function getOptions(url: string, value?: string): Promise<SelectOption[]> {\n const axios = await getAxios()\n const res = await axios.get(url, { params: { value } })\n const list = res?.data as { [key: string]: string }\n return Object.entries(list).map(([key, item]) => ({\n value: key,\n label: item,\n }))\n}\n\nexport async function submit(url: string, params: any = null): Promise<SelectOption[]> {\n const axios = await getAxios()\n const res = await axios.post(url, params)\n return res?.data\n}\n\nexport async function getProcess(className: string, workflowId: string): Promise<any[]> {\n const axios = await getAxios()\n const res = await axios.get(`/General/${className}/${workflowId}/process`)\n return res?.data\n}\n\nfunction convertToFileItem(file: any) {\n return {\n uid: file.id ?? uuidv4(),\n name: file.attachmentName ?? 'unknown',\n url: file.attachmentKey ?? '',\n }\n}\n\nexport async function getFiles(className: string, workflowId: string): Promise<{ [key: string]: any[] }> {\n const axios = await getAxios()\n const res = await axios.get(`/General/${className}/${workflowId}/upload/get`)\n //按category分组成对象数据结构\n const grouped = res?.data.reduce((acc: { [key: string]: any[] }, item: any) => {\n const { category } = item\n if (!acc[category]) {\n acc[category] = []\n }\n acc[category].push(convertToFileItem(item))\n return acc\n }, {})\n return grouped\n}\n\nexport async function removeFile(className: string, attachmentId: string): Promise<void> {\n const axios = await getAxios()\n return axios.post(`/General/${className}/${attachmentId}/delete/attachment`)\n}\n\nexport async function getApprovers(): Promise<{ label: string, value: string }[]> {\n const axios = await getAxios()\n const res = await axios.get('/Grading/dropdown/approvers')\n return Object.entries(res?.data).map(([label, value]) => ({\n label,\n value: value as string,\n }))\n}\n\nexport async function assignApprover(workflowId: string, email: string): Promise<void> {\n const axios = await getAxios()\n return await axios.post(`Grading/AssignComments/${workflowId}/${encodeURIComponent(email)}`)\n}\n\nexport async function addComments(workflowId: string, email: string, comments: string): Promise<void> {\n const axios = await getAxios()\n return await axios.post(`Grading/AddComments/${workflowId}/${encodeURIComponent(email)}`, comments, {\n headers: { 'Content-Type': 'application/json;charset=UTF-8' }\n })\n}\n\nexport async function getCommentsHistory(workflowId: string): Promise<{ associator: string, comments: string, createdAt: string }[]> {\n const axios = await getAxios()\n const res = await axios.get(`Grading/GetComments/${workflowId}`)\n return res?.data\n}\n\nexport async function getAssociator(workflowId: string): Promise<{ id: number, associator: string }[]> {\n const axios = await getAxios()\n const res = await axios.get(`Grading/GetAssociator/${workflowId}`)\n return res?.data\n}\n\nexport async function deleteAssociator(associatorId: string): Promise<void> {\n const axios = await getAxios()\n return await axios.delete(`Grading/DeleteAssociator/${associatorId}`)\n}\n\nexport async function download(url: string, params: any = null): Promise<void> {\n const axios = await getAxios()\n const res = await axios.post(url, params, {\n responseType: 'blob'\n })\n downloadFile(res?.data, 'WorkflowData.xlsx')\n}","import type { ValidationConfig } from './dataGen'\n\nexport const validateRules = (configs: ValidationConfig[], value: any) => {\n let errorMessages = ''\n const res = configs.every(config => {\n const isValid = vallidateRule(config, value)\n if (!isValid) {\n errorMessages = config.errorMessage\n }\n return isValid\n })\n return { res, errorMessages }\n}\n\nexport const vallidateRule = (config: ValidationConfig, value: any): boolean => {\n const { ruleName, ruleParameter } = config\n return validations[ruleName](ruleParameter, value as string)\n}\n\nconst validations = {\n Regex: (parameter: string, value: string): boolean => {\n const reg = new RegExp(parameter)\n return reg.test(value)\n },\n Required: (_: string, value: string): boolean => {\n return !!value\n }\n} as { [key: string]: Function }\n","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\nconst model = defineModel()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\nconst inputHandler = (v?: string | null): void => {\n emits('input', v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <AInput\n v-model=\"model\"\n allow-clear\n :disabled=\"props.readonly || props.config.Readonly\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n ></AInput>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\nconst model = defineModel()\n\nconst max = ref<number>(100)\nconst min = ref<number>(1)\nonMounted(() => {\n if (props.validations) {\n props.validations.forEach((v) => {\n if (v.ruleName === 'Max') {\n max.value = v.ruleParameter\n }\n if (v.ruleName === 'Min') {\n min.value = v.ruleParameter\n }\n })\n }\n})\n\nconst validate = (v?: number) => {\n return validateRules(props.validations!, v)\n}\n\nconst inputHandler = (v?: number): void => {\n emits('input', v)\n}\n\nconst changeHandler = (v?: number): void => {\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <AInputNumber\n v-model=\"model\"\n clearable\n :disabled=\"props.readonly\"\n :min=\"min\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n ></AInputNumber>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted, computed, readonly } from 'vue'\nimport { getOptions } from '@/services/dataGen'\nimport type { WidgetConfig, SelectOption, Trigger } from '@/services/dataGen'\nimport { validateRules } from '@/services/validation'\nimport type { FormCompProps } from './index'\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n // 添加动态事件类型\n (e: string, ...value: any[]): void\n}>()\n\nconst loading = ref<boolean>(false)\nconst _options = ref<SelectOption[]>(props.config.options ?? [])\n\nconst model = defineModel()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\n// 动态事件绑定对象\nconst eventHandlers = computed(() => {\n const handlers: Record<string, (v?: string) => void> = {}\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n handlers[trigger.event] = (v?: string) => {\n \n // 使用类型断言来绕过严格的事件类型检查\n emits(trigger.event, trigger.handlerName, v)\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n // emits('update:modelValue', v)\n }\n })\n }\n\n // handlers['change'] = (v?: string | number | null) => {\n // emits('update:modelValue', v)\n // emits('change', v)\n // }\n\n return handlers\n})\n\nconst loadOptions = async () => {\n if (props.config.dataSourceProvider) {\n _options.value = await getOptions(props.config.dataSourceProvider)\n }\n}\nonMounted(loadOptions)\n\nconst changeHandler = (v?: string) => {\n emits('update:modelValue', v)\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <ASelect allow-clear v-model=\"model\" :loading=\"loading\" :filter-option=\"true\" :allow-search=\"true\" :disabled=\"props.config.readonly\" @change=\"changeHandler\">\n <template v-for=\"item in _options\" :key=\"item.value\">\n <AOption :value=\"item.value\" :label=\"item.label\"></AOption>\n </template>\n </ASelect>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport type { WidgetConfig, SelectOption } from '@/services/dataGen'\nimport { getAxios } from '@/services/axios'\n\nconst props = defineProps<{\n modelValue: string\n config: WidgetConfig\n}>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n}>()\n\nconst _options = ref<SelectOption[]>(props.config.options ?? [])\n\nconst changeHandler = (v?: string | number | null) => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n\nonMounted(async () => {\n if (props.config) {\n const url = props.config.dataSourceProvider\n if (url) {\n const axios = await getAxios()\n const res = await axios.get(url)\n _options.value = res.data as SelectOption[]\n }\n }\n})\n\nconst fieldNames = { value: 'key', label: 'value' }\n\ndefineExpose({\n validate(){\n return true\n }\n})\n</script>\n\n<template>\n <ASpace direction=\"vertical\" size=\"large\">\n <ACascader\n :field-names=\"fieldNames\"\n :model-value=\"modelValue\"\n :options=\"_options\"\n :style=\"{ width: '320px' }\"\n placeholder=\"Please select ...\"\n @change=\"changeHandler\"\n />\n </ASpace>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, computed, nextTick, onMounted } from 'vue'\nimport { Modal, type UploadInstance, type FileItem } from '@arco-design/web-vue'\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\nimport { getLibraryConfig } from '@/stores/libraryConfig'\nimport { getToken } from '@/services/axios'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<{\n className: string\n} & FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst headers = ref<{ [key: string]: string }>({})\n\nonMounted(async () => {\n const token = await getToken()\n headers.value = {\n Authorization: `Bearer ${token}`\n }\n})\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\nconst config = getLibraryConfig()\nconst ApiBase = config.apiBase\nconst uploadRef = ref<UploadInstance | null>(null)\n\nconst id = ref<string>('')\n\nfunction replaceIdAndClassName(url: string, workflowId: string, className: string): string {\n return url.replace(/{WorkflowId}/g, workflowId).replace(/{ClassName}/g, className)\n}\n\nconst action = computed<string>(() => {\n if (props.config.uploadURL) {\n const url = ApiBase + props.config.uploadURL\n const replacedUrl = replaceIdAndClassName(url, id.value, props.className)\n return replacedUrl\n }\n return ''\n})\n\nconst submit = (e: any) => {\n e.stopPropagation();\n uploadRef.value.submit()\n};\n\nfunction onBeforeRemove(params: any) {\n const { file, name } = params\n const fileName = name ?? file.name\n return new Promise((resolve, reject) => {\n Modal.confirm({\n title: 'Confirm Delete',\n content: `Are you sure you want to delete ${fileName}?`,\n async onOk() {\n if (params.status !== 'init') {\n if (props.config.removeFile) {\n await props.config.removeFile(params.uid)\n return resolve(true)\n }\n }\n resolve(true)\n },\n onCancel: () => reject('cancel'),\n });\n });\n}\n\nconst uploadPromiseResolve = ref<((value: any) => void) | null>(null)\nconst uploadPromiseReject = ref<((reason?: any) => void) | null>(null)\n\n// 处理上传成功\nconst handleUploadSuccess = (fileItem: FileItem) => {\n if (uploadPromiseResolve.value) {\n uploadPromiseResolve.value(fileItem)\n uploadPromiseResolve.value = null\n uploadPromiseReject.value = null\n }\n}\n\n// 处理上传失败\nconst handleUploadError = (fileItem: FileItem) => {\n if (uploadPromiseReject.value) {\n uploadPromiseReject.value(fileItem)\n uploadPromiseResolve.value = null\n uploadPromiseReject.value = null\n }\n}\n\nconst readyFiles = ref<FileItem[]>([]);\nconst onChange = (fileList: FileItem[]) => {\n readyFiles.value = fileList.filter(file => file.status === 'init');\n};\n\ndefineExpose({\n submit(workflowId: string) {\n return new Promise((resolve, reject) => {\n if (uploadRef.value) {\n if (props.config.uploadURL) {\n id.value = workflowId\n }\n // 存储 Promise 的 resolve 和 reject 函数\n uploadPromiseResolve.value = resolve\n uploadPromiseReject.value = reject\n if (readyFiles.value.length) {\n nextTick(() => {\n uploadRef.value?.submit()\n })\n } else {\n // 如果没有文件需要上传,直接 resolve\n resolve(workflowId)\n }\n } else {\n // 如果没有 uploadRef,直接 resolve\n resolve(workflowId)\n }\n })\n },\n validate() {\n const defaultFiles = props.config.files ?? []\n const value = [...readyFiles.value, ...defaultFiles].length > 0 ? 'hasFile' : ''\n const valid = validate(value)\n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <a-upload ref=\"uploadRef\" :default-file-list=\"props.config.files\" :action=\"action\" :limit=\"props.config.allowedNumber\"\n :auto-upload=\"false\" name=\"files\" :headers=\"headers\" @change=\"onChange\" @before-remove=\"onBeforeRemove\"\n @success=\"handleUploadSuccess\" @error=\"handleUploadError\">\n <template #start-icon></template>\n <template #upload-button>\n <a-button type=\"primary\">Select File</a-button>\n </template>\n <!-- <template #upload-button>\n <a-button>select file</a-button>\n <a-button type=\"primary\" @click=\"submit\"> start upload</a-button>\n </template> -->\n </a-upload>\n</template>","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\nconst inputHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n emits('input', v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n const valid = validate(v)\n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <ATextarea\n :model-value=\"props.modelValue\"\n placeholder=\"Please enter something\"\n allow-clear\n :disabled=\"props.readonly\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n />\n</template>","<script lang=\"ts\" setup>\nimport { onMounted } from 'vue';\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\nconst model = defineModel()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n const valid = validate(v) \n emits('error', valid.res ? '' : valid.errorMessages)\n if (props.triggers && props.triggers.length > 0) {\n props.triggers.forEach(trigger => {\n if(trigger.event === 'change'){\n emits(trigger.event, trigger.handlerName, v)\n }\n })\n }\n}\n\ndefineExpose({\n validate(){\n const valid = validate(props.modelValue) \n emits('error', valid.res ? '' : valid.errorMessages)\n return valid.res\n }\n})\n</script>\n\n<template>\n <ACheckbox\n v-model=\"model\"\n clearable\n :disabled=\"props.readonly || props.config.Readonly\"\n @change=\"changeHandler\"\n >Yes</ACheckbox>\n</template>\n","const configProviderInjectionKey = Symbol(\"ArcoConfigProvider\");\nexport { configProviderInjectionKey };\n","import { getCurrentInstance, inject } from \"vue\";\nimport { configProviderInjectionKey } from \"../config-provider/context.js\";\nconst COMPONENT_PREFIX = \"A\";\nconst CLASS_PREFIX = \"arco\";\nconst GLOBAL_CONFIG_NAME = \"$arco\";\nconst getComponentPrefix = (options) => {\n var _a;\n return (_a = options == null ? void 0 : options.componentPrefix) != null ? _a : COMPONENT_PREFIX;\n};\nconst setGlobalConfig = (app, options) => {\n var _a;\n if (options && options.classPrefix) {\n app.config.globalProperties[GLOBAL_CONFIG_NAME] = {\n ...(_a = app.config.globalProperties[GLOBAL_CONFIG_NAME]) != null ? _a : {},\n classPrefix: options.classPrefix\n };\n }\n};\nconst getPrefixCls = (componentName) => {\n var _a, _b, _c;\n const instance = getCurrentInstance();\n const configProvider = inject(configProviderInjectionKey, void 0);\n const prefix = (_c = (_b = configProvider == null ? void 0 : configProvider.prefixCls) != null ? _b : (_a = instance == null ? void 0 : instance.appContext.config.globalProperties[GLOBAL_CONFIG_NAME]) == null ? void 0 : _a.classPrefix) != null ? _c : CLASS_PREFIX;\n if (componentName) {\n return `${prefix}-${componentName}`;\n }\n return prefix;\n};\nexport { getComponentPrefix, getPrefixCls, setGlobalConfig };\n","const opt = Object.prototype.toString;\nfunction isArray(obj) {\n return opt.call(obj) === \"[object Array]\";\n}\nfunction isNull(obj) {\n return opt.call(obj) === \"[object Null]\";\n}\nfunction isBoolean(obj) {\n return opt.call(obj) === \"[object Boolean]\";\n}\nfunction isObject(obj) {\n return opt.call(obj) === \"[object Object]\";\n}\nconst isPromise = (obj) => {\n return opt.call(obj) === \"[object Promise]\";\n};\nfunction isString(obj) {\n return opt.call(obj) === \"[object String]\";\n}\nfunction isNumber(obj) {\n return opt.call(obj) === \"[object Number]\" && obj === obj;\n}\nfunction isUndefined(obj) {\n return obj === void 0;\n}\nfunction isFunction(obj) {\n return typeof obj === \"function\";\n}\nfunction isEmptyObject(obj) {\n return isObject(obj) && Object.keys(obj).length === 0;\n}\nfunction isExist(obj) {\n return obj || obj === 0;\n}\nfunction isWindow(el) {\n return el === window;\n}\nconst isComponentInstance = (value) => {\n return (value == null ? void 0 : value.$) !== void 0;\n};\nconst isQuarter = (fromat) => {\n return /\\[Q]Q/.test(fromat);\n};\nfunction isDayjs(time) {\n return isObject(time) && \"$y\" in time && \"$M\" in time && \"$D\" in time && \"$d\" in time && \"$H\" in time && \"$m\" in time && \"$s\" in time;\n}\nexport { isArray, isBoolean, isComponentInstance, isDayjs, isEmptyObject, isExist, isFunction, isNull, isNumber, isObject, isPromise, isQuarter, isString, isUndefined, isWindow };\n","var _export_sfc = (sfc, props) => {\n for (const [key, val] of props) {\n sfc[key] = val;\n }\n return sfc;\n};\nexport { _export_sfc as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconQuestionCircle\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-question-circle`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _cache[1] || (_cache[1] = [\n createElementVNode(\"path\", { d: \"M42 24c0 9.941-8.059 18-18 18S6 33.941 6 24 14.059 6 24 6s18 8.059 18 18Z\" }, null, -1),\n createElementVNode(\"path\", { d: \"M24.006 31v4.008m0-6.008L24 28c0-3 3-4 4.78-6.402C30.558 19.195 28.288 15 23.987 15c-4.014 0-5.382 2.548-5.388 4.514v.465\" }, null, -1)\n ]), 14, _hoisted_1);\n}\nvar _IconQuestionCircle = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconQuestionCircle as default };\n","import _IconQuestionCircle from \"./icon-question-circle.js\";\nconst IconQuestionCircle = Object.assign(_IconQuestionCircle, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconQuestionCircle.name, _IconQuestionCircle);\n }\n});\nexport { IconQuestionCircle as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconDownload\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-download`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _cache[1] || (_cache[1] = [\n createElementVNode(\"path\", { d: \"m33.072 22.071-9.07 9.071-9.072-9.07M24 5v26m16 4v6H8v-6\" }, null, -1)\n ]), 14, _hoisted_1);\n}\nvar _IconDownload = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconDownload as default };\n","import _IconDownload from \"./icon-download.js\";\nconst IconDownload = Object.assign(_IconDownload, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconDownload.name, _IconDownload);\n }\n});\nexport { IconDownload as default };\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { type Tree } from '@/services/dataGen'\nimport { IconQuestionCircle } from '@arco-design/web-vue/es/icon';\n\nconst props = defineProps<{\n isVisible: boolean,\n outputText: Tree[] | string[]\n}>()\n\nconst isTreeArray = (value: Tree[] | string[]): value is Tree[] => {\n return value.length > 0 && typeof value[0] !== 'string'\n}\n\nconst stringOutput = computed<string[]>(() => {\n return isTreeArray(props.outputText) ? [] : props.outputText\n})\n\nconst treeOutput = computed<Tree[]>(() => {\n return isTreeArray(props.outputText) ? props.outputText : []\n})\n</script>\n\n<template>\n <a-tooltip v-if=\"props.isVisible\" background-color=\"#7A00E6\">\n <template #content>\n <template v-if=\"stringOutput.length\">\n <template v-for=\"output in stringOutput\" :key=\"output\">\n <p>{{ output }}</p>\n </template>\n </template>\n <template v-else>\n <template v-for=\"output in treeOutput\" :key=\"output.title\">\n <ul class=\"list-unstyled\">\n <li>\n <b>{{ output.title }}</b>\n <ul class=\"list-unstyled\">\n <li v-for=\"item in output.items\" :key=\"item.title\">\n <u>{{ item.title }}</u>\n <ul class=\"list-style-square\">\n <li v-for=\"subItem in item.items\">\n {{ subItem }}\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </template>\n </template>\n </template>\n <IconQuestionCircle class=\"icon\" />\n </a-tooltip>\n</template>\n\n<style lang=\"stylus\" scoped>\n.list-unstyled {\n list-style: none inside\n}\n\n.list-style-square {\n list-style: disc inside\n}\n\n.icon {\n color: gray\n}\n</style>","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport type { FieldConfig } from '@/services/dataGen'\nimport { ref, watch, computed, useTemplateRef, onMounted } from 'vue'\nimport InputText from './InputText.vue'\nimport InputNumber from './InputNumber.vue'\nimport SelectList from './SelectList.vue'\nimport Cascader from './Cascader.vue'\nimport FileUpload from './FileUpload.vue'\nimport TextArea from './TextArea.vue'\nimport CheckBox from './CheckBox.vue'\nimport ToolTip from './ToolTip.vue'\n\ntype FieldCompProps = {\n config: FieldConfig\n className: string\n} & FormCompProps\n\nconst props = defineProps<FieldCompProps>()\nconst emits = defineEmits<FormCompEmits>()\nconst model = defineModel()\n\nconst widgetRef = useTemplateRef('widgetRef')\n\n// const _value = ref<string | number>(props.modelValue || props.config?.value)\n// watch(_value, (newValue) => {\n// emits('update:modelValue', newValue)\n// })\n\nconst curComp = computed(() => {\n switch (props.config?.widget?.widget) {\n case 'TextBox':\n return InputText\n case 'Number':\n return InputNumber\n case 'SelectList':\n return SelectList\n case 'Cascade':\n return Cascader\n case 'File':\n return FileUpload\n case 'TextArea':\n return TextArea\n case 'DropDown':\n return SelectList\n case 'CheckBox':\n return CheckBox\n default:\n return InputText\n }\n})\n\nconst errMsg = ref<string>('')\nconst errHandler = (v: string) => {\n errMsg.value = v\n}\n\nconst changeHandler = (handlerName: string, v: any): void => {\n emits('change', handlerName, v)\n}\n// const updateHandler = (v: any): void => emits('update:modelValue', v)\n\nfunction isFileUpload() {\n return props.config?.widget?.widget === 'File'\n}\n\nfunction formatTitle(title: string): string {\n if(title === 'OtherInformationText'){\n return 'Other Information'\n }\n if(title === 'Other Information'){\n return ''\n }\n return title\n}\n\ndefineExpose({\n isFileUpload(){\n return props.config?.widget?.widget === 'File'\n },\n submit(workflowId: string) {\n if (isFileUpload()) {\n return (widgetRef.value as InstanceType<typeof FileUpload>).submit(workflowId)\n }\n return Promise.resolve(workflowId)\n },\n validate(){\n return (widgetRef.value as InstanceType<typeof TextArea>)?.validate() \n },\n getCompName(){\n return props?.config?.widget?.title\n }\n})\n</script>\n\n<template>\n <div>\n <div class=\"title\">\n {{ formatTitle(props?.config?.widget?.title) }}\n <span class=\"required\" v-if=\"props.config.validations.length\">*</span>\n <ToolTip\n :is-visible=\"props.config.widget?.isVisible ?? false\"\n :output-text=\"props.config.widget?.outputText ?? []\"\n />\n </div>\n <div>\n <component\n ref=\"widgetRef\"\n :is=\"curComp\"\n v-model=\"model\"\n :field-key=\"props.fieldKey\"\n :config=\"props.config.widget\"\n :validations=\"props.config.validations\"\n :triggers=\"props.config.triggers\"\n :class-name=\"props.className\"\n @error=\"errHandler\"\n @change=\"changeHandler\"\n ></component>\n <div v-if=\"errMsg.length > 0\" class=\"err-msg\">{{ errMsg }}</div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.title {\n margin-bottom $gap-8\n}\n.err-msg {\n font-size $size-text-light\n color $color-red\n margin-top $gap-4\n}\n\n.required {\n color: $color-red\n font-size: $size-text-heavy\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { ActionProps, ActionNoTypeEmits } from '@/components/data-gen/actions/types'\n\nconst props = defineProps<ActionProps>()\n\nconst emits = defineEmits<ActionNoTypeEmits>()\n\nfunction clickHandler() {\n emits('click', props.url, props.redirectType)\n}\n</script>\n\n<template>\n <AButton :loading=\"loading\" type=\"primary\" @click=\"clickHandler\">\n <slot></slot>\n </AButton>\n</template>","<script setup lang=\"ts\">\nimport type { ActionProps, ActionNoTypeEmits } from '@/components/data-gen/actions/types'\n\nconst props = defineProps<ActionProps>()\n\nconst emits = defineEmits<ActionNoTypeEmits>()\n\nfunction clickHandler() {\n emits('click', props.url, props.redirectType)\n}\n</script>\n\n<template>\n<ALink @click=\"clickHandler\">\n <slot></slot>\n</ALink>\n</template>","<script setup lang=\"ts\">\nimport type { Action } from '@/services/dataGen'\nimport type { ActionEmits } from '@/components/data-gen/actions/types'\nimport { computed } from 'vue'\nimport SubmitButton from '@/components/data-gen/actions/SubmitButton.vue'\nimport DetailLink from '@/components/data-gen/actions/DetailLink.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport type { RedirectType } from '@/types'\n\nconst props = defineProps<{\n config: Action\n loading?: boolean\n}>()\n\nconst emits = defineEmits<ActionEmits>()\n\nfunction clickHandler(url: string, redirectType: RedirectType) {\n emits('click', props.config.widget, url, redirectType, props.config.title)\n}\n\nconst curComp = computed(() => {\n switch (props.config.location) {\n case 'InOperation':\n return SubmitButton\n case 'InTable':\n return DetailLink\n default:\n return SubmitButton\n }\n})\n\nconst curUrl = computed(() => {\n if (props.config.widget === ActionTypeEnum.Submit) {\n return props.config.requestUrl ?? ''\n } else if (props.config.widget === ActionTypeEnum.Link) {\n return props.config.redirectUrl ?? ''\n }\n return ''\n})\n\nconst redirectType = computed(() => {\n return props.config.redirectType ?? 'Details'\n})\n</script>\n\n<template>\n <component\n :is=\"curComp\"\n :url=\"curUrl\"\n :redirect-type=\"redirectType\"\n :loading=\"loading\"\n @click=\"clickHandler\"\n >\n {{ props.config.title }}\n </component>\n</template>\n\n<style lang=\"stylus\" scoped></style>\n","import { inject, type InjectionKey } from 'vue'\nimport { useRouter as useVueRouter } from 'vue-router'\nimport type { Router } from 'vue-router'\n\nexport const RouterKey: InjectionKey<Router> = Symbol('library-router')\n\nexport function useLibraryRouter(): Router {\n // 首先尝试从注入中获取宿主提供的 router\n const injectedRouter = inject(RouterKey, null)\n if (injectedRouter) {\n return injectedRouter\n }\n \n // 如果没有注入,回退到标准的 useRouter\n return useVueRouter()\n}\n","import { inject, type InjectionKey } from 'vue'\nimport { type Trigger } from '@/services/dataGen'\n\nexport const TriggersKey: InjectionKey<Record<string, (...args: any[]) => any>> = Symbol('library-triggers')\n\nexport function useTriggers(): Record<string, (...args: any[]) => any> {\n // 首先尝试从注入中获取宿主提供的 triggers\n const injectedTriggers = inject(TriggersKey, null)\n if (injectedTriggers) {\n return injectedTriggers\n }\n\n // 如果没有注入,返回一个空对象\n return {}\n}","import { inject, type InjectionKey } from 'vue'\nimport type { Pinia } from 'pinia'\n\nexport const PiniaKey: InjectionKey<Pinia> = Symbol('library-pinia')\n\nexport const BpmStoreKey: InjectionKey<Pinia> = Symbol('library-bpmStore')\n\nexport const SvrStoreKey: InjectionKey<Pinia> = Symbol('library-svrStore')\n\nexport function useLibraryPinia(): Pinia | null {\n // 从注入中获取宿主提供的 pinia\n return inject(PiniaKey, null)\n}\n\nexport function useBpmStore(): any {\n // 从注入中获取宿主提供的 bpmStore\n return inject(BpmStoreKey, null)\n}\n\nexport function useSvrStore(): any {\n // 从注入中获取宿主提供的 svrStore\n return inject(SvrStoreKey, null)\n}","<script lang=\"ts\" setup>\ndefineProps<{\n title: string\n subTitle: string\n email: string\n}>()\n</script>\n\n<template>\n <div class=\"top-bar\">\n <div class=\"banner-info\">\n <div class=\"page-title\">{{ title }}</div>\n <div class=\"page-subtitle\">{{ subTitle }}</div>\n </div>\n <div class=\"avatar-wrapper\">\n <a-popover trigger=\"click\">\n <template #content>\n <div class=\"user-email\">{{ email }}</div>\n </template>\n <a-avatar :size=\"48\" autoFixFontSize style=\"cursor:pointer; background:#165DFF; color:#fff;\">\n {{ email.charAt(0).toUpperCase() }}\n </a-avatar>\n </a-popover>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.top-bar {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding 16px\n}\n\n.banner-info {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.page-title {\n font-size: 24px;\n font-weight: bold;\n color: #1d2129;\n padding: 12px 0 0 0;\n}\n\n.page-subtitle {\n font-size: 16px;\n color: #6b778c;\n margin-top: 4px;\n}\n\n.avatar-wrapper {\n display: flex;\n align-items: flex-start;\n}\n\n.user-email {\n font-size: 14px;\n color: #1d2129;\n padding: 8px 12px;\n}\n</style>\n","import { type FieldConfig } from '@/services/dataGen';\nimport { getLibraryConfig } from '@/stores/libraryConfig'\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\n\n\nexport function genFieldsGroup(widget: WidgetConfig[]) {\n const config = getLibraryConfig()\n const groups: { name: string; fields: WidgetConfig[] }[] = []\n if (config.fieldsGroup) {\n config.fieldsGroup.forEach(item => {\n const fields = item.keys\n .map(key => widget.find(f => f.fieldKey === key))\n .filter(Boolean) as WidgetConfig[]\n if (fields.length) {\n groups.push({ name: item.name, fields })\n }\n })\n // 未分组的字段\n const groupedKeys = config.fieldsGroup.flatMap(g => g.keys)\n const others = widget.filter(item => !groupedKeys.includes(item.fieldKey))\n if (others.length) {\n groups.push({ name: 'Grading Review History (For example: re-submit the grading request)', fields: others })\n }\n\n return groups\n }\n}","import { getPageData, PageActionType, getBtnList, type PageConfig, getFiles, removeFile, getProcess, getCommentsHistory, getAssociator, getApprovers, assignApprover, addComments, deleteAssociator } from '@/services/dataGen'\n\ninterface IPageBuild {\n setWorkflowId(workflowId?: string): IPageBuild\n setPageActionType(pageActionType: PageActionType): IPageBuild\n setClassName(className: string): IPageBuild\n setStore(store: { svrStore: any, bpmStore: any }): IPageBuild\n setOpt(opt: { workflowId: string }): IPageBuild\n build(): IPage\n}\n\ninterface IPage {\n getPageData(): Promise<PageConfig>\n getBtnList(): Promise<{\n button: string,\n isShow: boolean\n }[]>\n getFiles(): Promise<{ [key: string]: any[] }>\n removeFile(attachmentId: string): Promise<void>\n getProcess(): Promise<any>\n getCommentsHistory(): Promise<{ associator: string, comments: string, createdAt: string }[]>\n getAssociator(): Promise<{ id: number, associator: string }[]>\n getApprovers(): Promise<{ label: string, value: string }[]>\n assignApprover(selectedApprover: string): Promise<void>\n addComments(comment: string): Promise<void>\n deleteAssociator(id: string): Promise<void>\n}\n\nclass PageBuilder implements IPageBuild {\n private pageActionType?: PageActionType\n private className: string = ''\n private store: { svrStore: any, bpmStore: any } = { svrStore: {}, bpmStore: {} }\n private opt: { workflowId: string } = { workflowId: '' }\n\n setWorkflowId(workflowId?: string) {\n if (!workflowId) {\n return this\n }\n this.opt.workflowId = workflowId\n return this\n }\n\n setPageActionType(pageActionType: PageActionType) {\n this.pageActionType = pageActionType\n return this\n }\n\n setClassName(className: string) {\n this.className = className\n return this\n }\n\n setStore(store: { svrStore: any, bpmStore: any }) {\n this.store = store\n return this\n }\n\n setOpt(opt: { workflowId: string }) {\n this.opt = opt\n return this\n }\n\n build() {\n // Default to Create or ReCreate if pageActionType is not set\n if (!this.pageActionType) {\n if (!this.opt.workflowId) {\n return new Page(PageActionType.Create, this.className, this.store)\n }\n return new Page(PageActionType.ReCreate, this.className, this.store, this.opt)\n }\n // List\n if (!this.opt.workflowId) {\n return new Page(this.pageActionType, this.className, this.store)\n }\n // Detail or Update with workflowId\n return new Page(this.pageActionType, this.className, this.store, this.opt)\n }\n}\n\nclass Page implements IPage {\n private pageActionType: PageActionType\n private className: string\n private store: { svrStore: any, bpmStore: any }\n private opt?: { workflowId: string }\n\n private getApproverEmail() {\n return this.store.svrStore()?.userInfo?.email_address ?? ''\n }\n\n private getWorkflowId() {\n return this.opt?.workflowId ?? ''\n }\n\n constructor(\n pageActionType: PageActionType,\n className: string,\n store: { svrStore: any, bpmStore: any },\n opt?: { workflowId: string }\n ) {\n this.pageActionType = pageActionType\n this.className = className\n this.store = store\n if (opt) {\n this.opt = opt\n }\n }\n\n getPageData() {\n if (this.opt) {\n return getPageData(this.pageActionType, this.className, this.store, this.opt)\n }\n return getPageData(this.pageActionType, this.className, this.store)\n }\n\n getBtnList() {\n return getBtnList(this.pageActionType, this.className, { workflowId: this.getWorkflowId(), email: this.getApproverEmail() })\n }\n\n getFiles() {\n if (!this.getWorkflowId()) {\n return Promise.resolve<{ [key: string]: any[] }>({})\n }\n return getFiles(this.className, this.getWorkflowId())\n }\n\n removeFile(attachmentId: string) {\n return removeFile(this.className, attachmentId)\n }\n\n getProcess() {\n return getProcess(this.className, this.getWorkflowId())\n }\n\n getCommentsHistory() {\n return getCommentsHistory(this.getWorkflowId())\n }\n\n getAssociator() {\n return getAssociator(this.getWorkflowId())\n }\n\n getApprovers() {\n return getApprovers()\n }\n\n assignApprover(selectedApprover: string) {\n return assignApprover(this.getWorkflowId(), selectedApprover)\n }\n\n addComments(comment: string) {\n return addComments(this.getWorkflowId(), this.getApproverEmail(), comment)\n }\n\n deleteAssociator(id: string) {\n return deleteAssociator(id)\n }\n}\n\nexport {\n PageBuilder,\n IPageBuild,\n IPage\n}","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, useTemplateRef, getCurrentInstance, type VNodeRef } from 'vue'\nimport { createData, type PageConfig, type FieldConfig, type Action } from '@/services/dataGen'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\nimport { useTriggers } from '@/composables/useTriggers'\nimport { useSvrStore, useBpmStore } from \"@/composables/usePinia\"\nimport TopBar from '@/components/TopBar.vue'\nimport { genFieldsGroup } from '@/assets/js/fieldsGroup'\nimport { PageBuilder } from '@/services/page'\n\nconst bpmStore = useBpmStore()\n// console.log(\"🚀 ~ bpmStore:\", bpmStore().positionCode)\n\nconst svrStore = useSvrStore()\n// console.log(\"🚀 ~ svrStore:\", svrStore().userInfo)\n\nconst router = useLibraryRouter()\n\nconst triggers = useTriggers()\n\nconst dataWidgetsRefs = useTemplateRef('dataWidgets')\n\n// 在 setup 中获取实例\nconst instance = getCurrentInstance()\n\nconst props = defineProps<{\n className: string\n workflowId?: string\n}>()\n\nconst pageData = ref<PageConfig>({\n pageType: '',\n fields: {},\n globalValidations: [],\n banner: {\n title: '',\n subTitle: '',\n }\n})\nconst _fields = ref<WidgetConfig[]>([])\nconst _dependent = ref<Record<string, any>>({})\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\n\nfunction genField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list: WidgetConfig[] = Object.entries(fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.widget !== 'Hidden')\n .filter((w) => !hiddenFields.value.includes(w.fieldKey))\n // .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n}\n\nfunction genDependentField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list = Object.entries(fields).filter(([_, value]) => value.dependent).reduce((acc, [key, value]) => {\n acc[key] = value.dependent\n return acc\n }, {} as Record<string, any>)\n return list\n}\n\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = ref<Record<string, any>>({})\nconst loading = ref(false)\n\nonMounted(async () => {\n loading.value = true\n const page = new PageBuilder()\n .setWorkflowId(props.workflowId)\n .setClassName(props.className)\n .setStore({ svrStore, bpmStore })\n .build()\n pageData.value = await page.getPageData()\n _fields.value = genField(pageData.value.fields)\n _dependent.value = genDependentField(pageData.value.fields)\n for (const key in pageData.value.fields) {\n if (pageData.value.fields[key].widget?.widget === 'File') {\n const filed = _fields.value.find(item => item.fieldKey === key)\n if (filed && filed.widget) {\n filed.widget.files = []\n }\n // continue\n }\n _data.value[key] = pageData.value.fields[key].modelValue\n }\n loading.value = false\n})\n\nfunction getApproverEmail() {\n return svrStore()?.userInfo?.email_address ?? ''\n}\n\nasync function clickHandler(action: Action, type: ActionTypeEnum, url: string, redirectType: RedirectType, title: string) {\n switch (type) {\n case ActionTypeEnum.Submit:\n // 遍历所有的widget组件\n let validateResult = true\n dataWidgetsRefs.value?.forEach((widget) => {\n if (widget?.validate) {\n if (!widget.validate()) {\n validateResult = false\n }\n }\n })\n if (!validateResult) {\n instance?.appContext.config.globalProperties.$message.error('form validation failed, please check the input fields')\n return\n }\n loading.value = true\n try {\n const res = await createData(props.className, { ..._data.value, ..._dependent.value }, url)\n // 并发执行所有的widget组件submit方法,等待全部完成\n const submitPromises = dataWidgetsRefs.value?.map((widget) => {\n if (widget?.submit) {\n return widget.submit(res.toString())\n }\n return Promise.resolve()\n }) || []\n await Promise.all(submitPromises)\n loading.value = false\n instance?.appContext.config.globalProperties.$notification.success(`Your grading request has been submitted, ID is ${res.toString()}.`)\n router.push({ name: 'Details', params: { workflowId: res.toString() } })\n } catch (error) {\n instance?.appContext.config.globalProperties.$notification.error(`Failed to submit your grading request`)\n loading.value = false\n }\n break\n case ActionTypeEnum.Link:\n try {\n await triggers[action.eventName || '']?.(_data.value, hiddenFields)\n router.push({ name: redirectType, params: { className: props.className } })\n } catch (error) {\n console.error('Error in link action trigger:', error)\n }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n\nconst newHiddenFields: string[] = ['jobScpope',\n 'currentWorkdayId',\n 'originalGrade',\n 'jobTitlePrevious',\n 'jobAttachmentPrevious',\n 'positionId']\n\nconst hiddenFields = ref<string[]>(newHiddenFields)\n\nfunction changeHandler(handlerName: string, fieldValue: string) {\n triggers[handlerName]?.({fieldValue, hiddenFields, formData: _data})\n if (pageData.value) {\n _fields.value = genField(pageData.value.fields)\n }\n}\n// 计算分组后的字段\nconst groupedFields = computed(() => {\n return genFieldsGroup(_fields.value)\n})\n</script>\n\n<template>\n <div class=\"page-container\">\n <!-- 页面头部 -->\n <TopBar :title=\"pageData.banner.title\" :subTitle=\"pageData.banner.subTitle\" :email=\"getApproverEmail()\" />\n\n <!-- 表单内容区域 -->\n <div class=\"page-body\">\n <a-spin :loading=\"loading\" class=\"form-container\">\n <div class=\"form-card\">\n <div class=\"form-fields-vertical\">\n <template v-for=\"group in groupedFields\" :key=\"group.name\">\n <a-card :title=\"group.name\" style=\"margin-bottom: 24px;\">\n <div class=\"form-fields\">\n <template v-for=\"value in group.fields\" :key=\"value.fieldKey\">\n <DataWidgets ref=\"dataWidgets\" :field-key=\"value.fieldKey\" :config=\"value\" :class-name=\"className\"\n v-model=\"_data[value.fieldKey]\" class=\"form-field\" @change=\"changeHandler\" />\n </template>\n </div>\n </a-card>\n </template>\n </div>\n\n <!-- 自定义内容插槽 -->\n <div v-if=\"$slots.content\" class=\"form-content\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </a-spin>\n </div>\n\n <!-- 操作按钮区域 -->\n <div class=\"page-footer\">\n <div class=\"action-container\">\n <slot name=\"action\"></slot>\n <div class=\"action-buttons\">\n <template v-for=\"action in reversedActions\" :key=\"action.title\">\n <ActionButton :loading=\"loading\" :config=\"action\" class=\"action-button\"\n @click=\"(...args) => clickHandler(action, ...args)\" />\n </template>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n min-height: 100vh\n background-color: #f5f5f5\n display: flex\n flex-direction: column\n}\n\n.page-body {\n flex: 1\n padding: 24px 32px\n overflow-y: auto\n}\n\n.form-container {\n width: 100%\n margin: 0 auto\n}\n\n.form-card {\n background: white\n border-radius: 8px\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06)\n overflow: hidden\n}\n\n.form-fields-vertical {\n display: flex\n flex-direction: column\n gap: 24px\n padding: 32px\n\n @media (max-width: 768px) {\n padding: 24px 16px\n gap: 20px\n }\n}\n\n/* 让每个 a-card 内部的字段依然是 grid 排列 */\n.form-fields {\n padding: 0\n display: grid\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr))\n column-gap: 72px\n row-gap: 24px\n\n @media (max-width: 768px) {\n grid-template-columns: 1fr\n gap: 20px\n }\n}\n\n.form-content {\n border-top: 1px solid #f0f0f0\n padding: 24px 32px\n background: #fafafa\n}\n\n.page-footer {\n background: white\n border-top: 1px solid #e8e8e8\n padding: 16px 32px\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06)\n \n @media (max-width: 768px) {\n padding: 16px 16px\n }\n}\n\n.action-container {\n max-width: 1200px\n margin: 0 auto\n display: flex\n justify-content: flex-end\n align-items: center\n gap: 12px\n}\n\n.action-buttons {\n display: flex\n gap: 12px\n align-items: center\n}\n\n.action-button {\n min-width: 88px\n height: 36px\n \n &:hover {\n transform: translateY(-1px)\n transition: transform 0.2s ease\n }\n}\n\n/* 响应式调整 */\n@media (max-width: 1024px) {\n .form-fields {\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))\n }\n}\n\n@media (max-width: 640px) {\n .page-body {\n padding: 16px\n }\n \n .form-fields-vertical {\n padding: 20px 16px\n }\n \n .form-fields {\n padding: 0\n }\n \n .action-container {\n flex-direction: column-reverse\n align-items: stretch\n }\n \n .action-buttons {\n justify-content: center\n }\n}\n</style>","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, useTemplateRef, getCurrentInstance, h } from 'vue'\nimport { updateData, PageActionType, type PageConfig, type FieldConfig, type Action } from '@/services/dataGen'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\nimport { useTriggers } from '@/composables/useTriggers'\nimport { useSvrStore, useBpmStore } from \"@/composables/usePinia\"\nimport TopBar from '@/components/TopBar.vue'\nimport { genFieldsGroup } from '@/assets/js/fieldsGroup'\nimport { PageBuilder } from '@/services/page'\n\nconst router = useLibraryRouter()\n\nconst triggers = useTriggers()\n\nconst svrStore = useSvrStore()\nconst bpmStore = useBpmStore()\n\nconst dataWidgetsRefs = useTemplateRef('dataWidgets')\n\n// 在 setup 中获取实例\nconst instance = getCurrentInstance()\n\nconst props = defineProps<{\n className: string,\n workflowId: string\n}>()\n\nconst pageData = ref<PageConfig>({\n pageType: '',\n fields: {},\n globalValidations: [],\n banner: {\n title: '',\n subTitle: '',\n }\n})\nconst _fields = ref<WidgetConfig[]>([])\nconst _dependent = ref<Record<string, any>>({})\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\n\nfunction genField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list: WidgetConfig[] = Object.entries(fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.widget !== 'Hidden')\n .filter((w) => !hiddenFields.value.includes(w.fieldKey))\n // .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n}\n\nfunction genDependentField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list = Object.entries(fields).filter(([_, value]) => value.dependent).reduce((acc, [key, value]) => {\n acc[key] = value.dependent\n return acc\n }, {} as Record<string, any>)\n return list\n}\n\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = ref<Record<string, any>>({})\nconst loading = ref(false)\n\nonMounted(async () => {\n loading.value = true\n const page = new PageBuilder()\n .setPageActionType(PageActionType.Update)\n .setClassName(props.className)\n .setStore({ svrStore, bpmStore })\n .setWorkflowId(props.workflowId)\n .build()\n pageData.value = await page.getPageData()\n const btnList = await page.getBtnList()\n const files = await page.getFiles()\n pageData.value.actions = pageData.value.actions?.filter(item => {\n const btn = btnList.find(btn => btn.button === item.title)\n if (!btn) {\n return true\n }\n return btn.isShow\n })\n const fieldValue = pageData.value.fields.requestType.modelValue\n triggers['Test']?.({ fieldValue, hiddenFields, formData: _data })\n _fields.value = genField(pageData.value.fields)\n _dependent.value = genDependentField(pageData.value.fields)\n for (const key in pageData.value.fields) {\n if (pageData.value.fields[key].widget?.widget === 'File') {\n const filed = _fields.value.find(item => item.fieldKey === key)\n if (filed && filed.widget) {\n filed.widget.files = files[key] ?? []\n filed.widget.removeFile = (attachmentId: string) => page.removeFile(attachmentId)\n }\n }\n _data.value[key] = pageData.value.fields[key].modelValue\n }\n loading.value = false\n})\n\nfunction getApproverEmail() {\n return svrStore()?.userInfo?.email_address ?? ''\n}\n\nasync function clickHandler(action: Action, type: ActionTypeEnum, url: string, redirectType: RedirectType, title: string) {\n switch (type) {\n case ActionTypeEnum.Submit:\n // 遍历所有的widget组件\n let validateResult = true\n dataWidgetsRefs.value?.forEach((widget) => {\n if (widget?.validate) {\n if (!widget.validate()) {\n validateResult = false\n }\n }\n })\n if (!validateResult) {\n instance?.appContext.config.globalProperties.$message.error('form validation failed, please check the input fields')\n return\n }\n loading.value = true\n try {\n const res = await updateData(props.className, props.workflowId, { ..._data.value, ..._dependent.value }, url)\n // 并发执行所有的widget组件submit方法,等待全部完成\n const submitPromises = dataWidgetsRefs.value?.map((widget) => {\n if (widget?.submit) {\n return widget.submit(res.toString())\n }\n return Promise.resolve()\n }) || []\n await Promise.all(submitPromises)\n loading.value = false\n instance?.appContext.config.globalProperties.$notification.success(`Your grading request has been submitted, ID is ${res.toString()}.`)\n // router.push({ name: 'List', params: { className: props.className } })\n } catch (error) {\n instance?.appContext.config.globalProperties.$notification.error(`Failed to submit your grading request`)\n loading.value = false\n }\n break\n case ActionTypeEnum.Link:\n try {\n await triggers[action.eventName || '']?.(_data.value, hiddenFields)\n router.push({ name: redirectType, params: { className: props.className } })\n } catch (error) { }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n\nconst hiddenFields = ref<string[]>([])\n\nfunction changeHandler(handlerName: string, fieldValue: string) {\n triggers[handlerName]?.({ fieldValue, hiddenFields, formData: _data })\n if (pageData.value) {\n _fields.value = genField(pageData.value.fields)\n }\n}\n\n// 计算分组后的字段\nconst groupedFields = computed(() => {\n return genFieldsGroup(_fields.value)\n})\n</script>\n\n<template>\n <div class=\"page-container\">\n <!-- 页面头部 -->\n <TopBar :title=\"pageData.banner.title\" :subTitle=\"pageData.banner.subTitle\" :email=\"getApproverEmail()\" />\n\n <!-- 表单内容区域 -->\n <div class=\"page-body\">\n <a-spin :loading=\"loading\" class=\"form-container\">\n <div class=\"form-card\">\n <div class=\"form-fields-vertical\">\n <template v-for=\"group in groupedFields\" :key=\"group.name\">\n <a-card :title=\"group.name\" style=\"margin-bottom: 24px;\">\n <div class=\"form-fields\">\n <template v-for=\"value in group.fields\" :key=\"value.fieldKey\">\n <DataWidgets ref=\"dataWidgets\" :field-key=\"value.fieldKey\" :config=\"value\" :class-name=\"className\"\n v-model=\"_data[value.fieldKey]\" class=\"form-field\" @change=\"changeHandler\" />\n </template>\n </div>\n </a-card>\n </template>\n </div>\n\n <!-- 自定义内容插槽 -->\n <div v-if=\"$slots.content\" class=\"form-content\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </a-spin>\n </div>\n\n <!-- 操作按钮区域 -->\n <div class=\"page-footer\">\n <div class=\"action-container\">\n <slot name=\"action\"></slot>\n <div class=\"action-buttons\">\n <template v-for=\"action in reversedActions\" :key=\"action.title\">\n <ActionButton :loading=\"loading\" :config=\"action\" class=\"action-button\"\n @click=\"(...args) => clickHandler(action, ...args)\" />\n </template>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n min-height: 100vh\n background-color: #f5f5f5\n display: flex\n flex-direction: column\n}\n\n.page-body {\n flex: 1\n padding: 24px 32px\n overflow-y: auto\n}\n\n.form-container {\n width: 100%\n margin: 0 auto\n}\n\n.form-card {\n background: white\n border-radius: 8px\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06)\n overflow: hidden\n}\n\n.form-fields-vertical {\n display: flex\n flex-direction: column\n gap: 24px\n padding: 32px\n\n @media (max-width: 768px) {\n padding: 24px 16px\n gap: 20px\n }\n}\n\n/* 让每个 a-card 内部的字段依然是 grid 排列 */\n.form-fields {\n padding: 0\n display: grid\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr))\n column-gap: 72px\n row-gap: 24px\n\n @media (max-width: 768px) {\n grid-template-columns: 1fr\n gap: 20px\n }\n}\n\n.form-content {\n border-top: 1px solid #f0f0f0\n padding: 24px 32px\n background: #fafafa\n}\n\n.page-footer {\n background: white\n border-top: 1px solid #e8e8e8\n padding: 16px 32px\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06)\n \n @media (max-width: 768px) {\n padding: 16px 16px\n }\n}\n\n.action-container {\n max-width: 1200px\n margin: 0 auto\n display: flex\n justify-content: flex-end\n align-items: center\n gap: 12px\n}\n\n.action-buttons {\n display: flex\n gap: 12px\n align-items: center\n}\n\n.action-button {\n min-width: 88px\n height: 36px\n \n &:hover {\n transform: translateY(-1px)\n transition: transform 0.2s ease\n }\n}\n\n/* 响应式调整 */\n@media (max-width: 1024px) {\n .form-fields {\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))\n }\n}\n\n@media (max-width: 640px) {\n .page-body {\n padding: 16px\n }\n \n .form-fields-vertical {\n padding: 20px 16px\n }\n \n .form-fields {\n padding: 0\n }\n \n .action-container {\n flex-direction: column-reverse\n align-items: stretch\n }\n \n .action-buttons {\n justify-content: center\n }\n}\n</style>","import { inject, type InjectionKey } from 'vue'\n\nexport const CustomCompsKey: InjectionKey<any> = Symbol('library-custom-comp')\n\nexport function useLibraryCustomComps(): any {\n return inject(CustomCompsKey, null)\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, getCurrentInstance } from 'vue'\nimport { approveData, PageActionType, type PageConfig, type FieldConfig, type Action } from '@/services/dataGen'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\nimport { useTriggers } from '@/composables/useTriggers'\nimport { useSvrStore, useBpmStore } from \"@/composables/usePinia\"\nimport { useLibraryCustomComps } from \"@/composables/customComps\"\nimport { IconDownload } from '@arco-design/web-vue/es/icon';\nimport TopBar from '@/components/TopBar.vue'\nimport { genFieldsGroup } from '@/assets/js/fieldsGroup'\nimport { formatDate } from '@/assets/js/util'\nimport { PageBuilder, IPage } from '@/services/page'\nimport ToolTip from '../widgets/ToolTip.vue'\n\nconst svrStore = useSvrStore()\nconst bpmStore = useBpmStore()\n\nconst triggers = useTriggers()\n\nconst router = useLibraryRouter()\n\nconst customComps = useLibraryCustomComps()\n\nconst instance = getCurrentInstance()\n\nconst props = defineProps<{\n className: string,\n workflowId: string\n}>()\n\nlet page: IPage\n\nconst pageData = ref<PageConfig>({\n pageType: '',\n fields: {},\n globalValidations: [],\n banner: {\n title: '',\n subTitle: '',\n }\n})\nconst _fields = ref<WidgetConfig[]>([])\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\n\nfunction genField(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n const list: WidgetConfig[] = Object.entries(fields)\n .map(([key, value]) => {\n if (typeof value.modelValue === 'boolean') {\n value.fieldValue = value.modelValue ? 'Yes' : 'No'\n } else {\n value.fieldValue = value.modelValue\n }\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.widget !== 'Hidden')\n .filter((w) => !hiddenFields.value.includes(w.fieldKey))\n\n return list\n}\n\nconst groupedFields = computed(() => {\n return genFieldsGroup(_fields.value)\n})\n\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst loading = ref(true)\n\nconst mapWorkflowSteps = (process: any[], status: any) => {\n const currentIndex = process.findIndex(item => item.isCurrent)\n return process.map((p, index) => {\n const step = {\n id: p.id,\n title: '',\n proxy: '',\n sub: '',\n desc: '',\n status: 1,\n time: ''\n }\n step.title = p.workflowProcessApprovers[0]?.name\n const nodeApprover = p.workflowProcessApprovers[p.workflowProcessApprovers.length - 1]\n const history = p.workflowHistorys[p.workflowHistorys.length - 1]\n const actualApprover = history?.workflowHistoryApprovers[history?.workflowHistoryApprovers?.length - 1]\n if (nodeApprover && actualApprover && nodeApprover?.email?.toLowerCase() !== actualApprover?.approverEmail?.toLowerCase()) {\n step.title = `${actualApprover.name}`\n step.proxy = `Proxy: ${nodeApprover.name}`\n }\n if (p.sort > 1) {\n step.sub = 'Approver Role: ' + p.nodeName.replace('Submit', '').replace('Approve', '')\n } else {\n step.sub = 'Submit Application'\n }\n if (p.isCurrent && status !== -1) {\n step.desc = 'In Approval'\n step.status = 1\n } else {\n const history = p.workflowHistorys[p.workflowHistorys.length - 1]\n if (history && history.status === 100) {\n step.time = formatDate(history.takeActionAt, 'yyyy-MM-dd hh:mm:ss')\n step.status = 2\n step.desc = 'approve success!'\n } else if (history && history.status === 999) {\n step.time = formatDate(history.takeActionAt, 'yyyy-MM-dd hh:mm:ss')\n step.status = 0\n step.desc = 'approve reject!'\n } else if (history) {\n step.time = formatDate(history.takeActionAt, 'yyyy-MM-dd hh:mm:ss')\n if (p.sort === 1) {\n step.status = 2\n step.desc = ''\n } else {\n const historyApprover = history.workflowHistoryApprovers[0]\n step.status = 3\n step.desc = historyApprover?.reason ? `Rejected reason: ${historyApprover.reason}` : 'Rejected'\n }\n } else if (index < currentIndex || currentIndex === -1) {\n step.status = 0\n step.desc = 'Skipped'\n } else {\n step.status = 0\n step.desc = 'Pending Approval'\n }\n if (history && history.status !== 1) {\n } else {\n }\n }\n\n return step\n })\n}\n\n\nconst steps = ref<any[]>([])\nconst isGlobal = ref(false)\nconst isShowAssignSelect = ref(false)\nconst isShowAssignList = ref(false)\nconst isShowCommentTextArea = ref(false)\n\nasync function reloadButtonList() {\n const btnList = await page.getBtnList()\n pageData.value.actions = pageData.value.actions?.filter(item => {\n const btn = btnList.find(btn => btn.button === item.title)\n if (!btn) {\n return true\n }\n return btn.isShow\n })\n isGlobal.value = btnList.find(item => item.button === 'IsGlobal')?.isShow ?? false\n isShowAssignSelect.value = btnList.find(item => item.button === 'AssignButton')?.isShow ?? false\n isShowAssignList.value = btnList.find(item => item.button === 'AssignList')?.isShow ?? false\n isShowCommentTextArea.value = btnList.find(item => item.button === 'AddCommentsButton')?.isShow ?? false\n}\n\nconst hiddenFields = ref<string[]>([])\n\nasync function load() {\n loading.value = true\n page = new PageBuilder()\n .setPageActionType(PageActionType.Details)\n .setClassName(props.className)\n .setStore({ svrStore, bpmStore })\n .setWorkflowId(props.workflowId)\n .build()\n pageData.value = await page.getPageData()\n const files = await page.getFiles()\n approvers.value = await page.getApprovers()\n commentsHistory.value = await page.getCommentsHistory()\n associators.value = await page.getAssociator()\n reloadButtonList()\n const fieldValue = pageData.value.fields.requestType.modelValue\n triggers['Test']?.({fieldValue, hiddenFields})\n _fields.value = genField(pageData.value.fields)\n for (const key in pageData.value.fields) {\n if (pageData.value.fields[key].widget?.widget === 'File') {\n const filed = _fields.value.find(item => item.fieldKey === key)\n if (filed && filed.widget) {\n filed.widget.files = files[key] ?? []\n }\n }\n }\n const process = await page.getProcess()\n steps.value = mapWorkflowSteps(process, 0)\n\n loading.value = false\n}\nonMounted(load)\n\nasync function triggerFn(title: string, opt: any): Promise<any> {\n return triggers[title]?.(opt)\n}\n\nfunction getApproverEmail() {\n return svrStore()?.userInfo?.email_address ?? ''\n}\n\nasync function clickHandler(action: Action, type: ActionTypeEnum, url: string, redirectType: RedirectType, title: string) {\n try {\n switch (type) {\n case ActionTypeEnum.Submit:\n const { reason, ifGlobal } = await triggerFn(title, { isGlobal: isGlobal.value })\n loading.value = true\n const status = title === 'Approve' ? '100' : '-1'\n await approveData(props.className, props.workflowId, getApproverEmail(), reason, [Number(props.workflowId)], url, status, ifGlobal)\n loading.value = false\n const successContent = title === 'Approve' ? `Request ID ${props.workflowId} has been approved.` : `Request ID ${props.workflowId} has been rejected.`\n instance?.appContext.config.globalProperties.$notification.success(successContent)\n load()\n // router.push({ name: 'List', params: { className: props.className } })\n break\n case ActionTypeEnum.Link:\n try {\n await triggers[action.eventName || '']?.()\n router.push({ name: redirectType, params: { className: props.className, workflowId: props.workflowId } })\n } catch (error) {\n console.error('Error in link action trigger:', error)\n }\n break\n case ActionTypeEnum.Button:\n await triggers[action.eventName || '']?.({\n approvers,\n associators,\n isShowAssignSelect,\n isShowAssignList,\n assignCallback: onAssignApprover,\n deleteAssociatorCallback: onDeleteAssociator,\n })\n break\n default:\n console.warn('Unknown action type:', type)\n }\n } catch (error) {\n // console.error('Action failed:', error)\n }\n}\n\nconst comment = ref('')\nconst commentsHistory = ref<{ associator: string, comments: string, createdAt: string }[]>([])\nconst selectedApprover = ref<string>('')\nconst approvers = ref<{ label: string, value: string }[]>([])\nconst associators = ref<{ id: number, associator: string }[]>([])\nasync function onAssignApprover(approverEmail: string) {\n if (!approverEmail) {\n instance?.appContext.config.globalProperties.$message.error('Please select an approver')\n return\n }\n await confirmDialog('Confirm Assign Approver', 'Do you want to assign the selected approver?')\n try {\n await page.assignApprover(approverEmail)\n associators.value = await page.getAssociator()\n reloadButtonList()\n instance?.appContext.config.globalProperties.$notification.success('Assign Approver clicked!')\n } catch (error) {\n if ((error as any).status === 409) {\n instance?.appContext.config.globalProperties.$notification.error('This user is already an associator')\n return\n }\n instance?.appContext.config.globalProperties.$notification.error('Failed to assign approver')\n }\n}\n\nasync function confirmDialog(title: string, content: string) {\n const { Modal } = await import('@arco-design/web-vue');\n return new Promise((resolve, reject) => {\n let modalInstance = null;\n modalInstance = Modal.confirm({\n title,\n content,\n okText: 'OK',\n cancelText: 'Cancel',\n onOk: () => resolve(true),\n onCancel: () => reject()\n });\n });\n}\n\nasync function onDeleteAssociator(id: number) {\n try {\n await confirmDialog('Confirm Delete Associator', 'Do you want to delete this associator?')\n } catch (error) {\n return\n }\n try {\n await page.deleteAssociator(id.toString())\n associators.value = await page.getAssociator()\n instance?.appContext.config.globalProperties.$notification.success('Associator deleted successfully!')\n } catch (error) {\n instance?.appContext.config.globalProperties.$notification.error('Failed to delete associator')\n }\n}\n\nasync function onAddComment() {\n if (!comment.value.trim()) {\n instance?.appContext.config.globalProperties.$message.error('Comment cannot be empty')\n return\n }\n await page.addComments(comment.value.trim())\n comment.value = ''\n commentsHistory.value = await page.getCommentsHistory()\n instance?.appContext.config.globalProperties.$notification.success('Add Comment clicked!')\n}\n\nfunction formatTitle(title?: string): string {\n if(!title){\n return ''\n }\n if(title === 'OtherInformationText'){\n return 'Other Information'\n }\n if(title === 'Other Information'){\n return ''\n }\n return title\n}\n</script>\n\n<template>\n <div class=\"page-container\">\n <!-- 页面头部 -->\n <TopBar :title=\"pageData.banner.title\" :subTitle=\"pageData.banner.subTitle\" :email=\"getApproverEmail()\" />\n\n <!-- 详情内容区域 -->\n <div class=\"page-body\">\n <a-spin :loading=\"loading\" class=\"detail-container\">\n <div class=\"detail-card\">\n <component :is=\"customComps.Steps\" :steps=\"steps\" />\n <div class=\"form-fields-vertical\">\n <template v-for=\"group in groupedFields\" :key=\"group.name\">\n <a-card :title=\"group.name\" style=\"margin-bottom: 24px;\">\n <div class=\"detail-fields\">\n <template v-for=\"item in group.fields\" :key=\"item.fieldKey\">\n <div class=\"detail-field-wrapper\">\n <div class=\"detail-field\">\n <div class=\"field-label\">{{ formatTitle(item.widget?.title) }}\n <ToolTip\n :is-visible=\"item.widget?.isVisible ?? false\"\n :output-text=\"item.widget?.outputText ?? []\"\n />\n </div>\n <template v-if=\"item.widget?.widget === 'File'\">\n <div class=\"field-value\" v-for=\"file in item.widget.files\" :key=\"file.id\">\n <a-space>\n {{ file.name }}\n <a-link :href=\"file.url\" target=\"_blank\">\n <IconDownload :style=\"{ color: '#7A00E6' }\" />\n </a-link>\n </a-space>\n </div>\n </template>\n <template v-else>\n <div class=\"field-value\">{{ item.fieldValue }}</div>\n </template>\n </div>\n </div>\n </template>\n </div>\n </a-card>\n </template>\n <!-- <a-space v-if=\"isShowAssignSelect\"> -->\n <a-space v-if=\"false\">\n <a-select v-model=\"selectedApprover\">\n <a-option v-for=\"approver in approvers\" :key=\"approver.value\" :value=\"approver.value\">\n {{ approver.label }}\n </a-option>\n </a-select>\n <a-button type=\"primary\">Assign for comment</a-button>\n </a-space>\n\n <!-- <a-list v-if=\"isShowAssignList\"> -->\n <a-list v-if=\"false\">\n <template #header>\n Associators\n </template>\n <a-list-item v-for=\"item in associators\" :key=\"item.id\">\n <template #actions>\n <a-button type=\"text\" status=\"danger\" @click=\"onDeleteAssociator(item.id)\">\n Delete\n </a-button>\n </template>\n {{ item.associator }}\n </a-list-item>\n </a-list>\n\n <div class=\"detail-field-wrapper\" v-if=\"isShowCommentTextArea\">\n <div class=\"detail-field\">\n <div class=\"field-label\">Comment</div>\n <a-textarea v-model=\"comment\" />\n <a-button type=\"primary\" @click=\"onAddComment\">Add Comment</a-button>\n </div>\n </div>\n\n <a-list v-if=\"commentsHistory.length\">\n <template #header>\n Comments History\n </template>\n <a-list-item v-for=\"item in commentsHistory\" :key=\"item.associator\">\n {{ item.associator }}: {{ item.comments }} ({{ formatDate(item.createdAt) }})\n </a-list-item>\n </a-list>\n </div>\n\n <!-- 自定义内容插槽 -->\n <div v-if=\"$slots.content\" class=\"detail-content\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </a-spin>\n </div>\n\n <!-- 操作按钮区域 -->\n <div class=\"page-footer\">\n <div class=\"action-container\">\n <slot name=\"action\"></slot>\n <div class=\"action-buttons\">\n <template v-for=\"action in reversedActions\" :key=\"action.title\">\n <ActionButton :loading=\"loading\" :config=\"action\" class=\"action-button\"\n @click=\"(...args) => clickHandler(action, ...args)\" />\n </template>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n min-height: 100vh\n background-color: #f5f5f5\n display: flex\n flex-direction: column\n}\n\n.page-body {\n flex: 1\n padding: 24px 32px\n overflow-y: auto\n}\n\n.detail-container {\n width: 100%\n margin: 0 auto\n}\n\n.detail-card {\n background: white\n border-radius: 8px\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06)\n overflow: hidden\n padding-top: 20px\n}\n\n.form-fields-vertical {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 32px;\n\n @media (max-width: 768px) {\n padding: 24px 16px;\n gap: 20px;\n }\n}\n\n.detail-fields {\n padding: 32px\n display: grid\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr))\n gap: 24px\n \n @media (max-width: 768px) {\n grid-template-columns: 1fr\n padding: 24px 16px\n gap: 20px\n }\n}\n\n.detail-field-wrapper {\n .detail-field {\n width: 100%\n \n .field-label {\n font-weight: 500\n color: #262626\n margin-bottom: 8px\n font-size: 14px\n line-height: 1.4\n }\n \n .field-value {\n color: #595959\n padding: 8px 12px\n background-color: #fafafa\n border-radius: 4px\n min-height: 40px\n display: flex\n align-items: center\n font-size: 14px\n line-height: 1.5\n border: 1px solid #f0f0f0\n word-break: break-word\n }\n }\n}\n\n.detail-content {\n border-top: 1px solid #f0f0f0\n padding: 24px 32px\n background: #fafafa\n}\n\n.page-footer {\n background: white\n border-top: 1px solid #e8e8e8\n padding: 16px 32px\n box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.06)\n \n @media (max-width: 768px) {\n padding: 16px 16px\n }\n}\n\n.action-container {\n max-width: 1200px\n margin: 0 auto\n display: flex\n justify-content: flex-end\n align-items: center\n gap: 12px\n}\n\n.action-buttons {\n display: flex\n gap: 12px\n align-items: center\n}\n\n.action-button {\n min-width: 88px\n height: 36px\n \n &:hover {\n transform: translateY(-1px)\n transition: transform 0.2s ease\n }\n}\n\n/* 响应式调整 */\n@media (max-width: 1024px) {\n .detail-fields {\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))\n }\n}\n\n@media (max-width: 640px) {\n .page-body {\n padding: 16px\n }\n \n .detail-fields {\n padding: 20px 16px\n }\n \n .action-container {\n flex-direction: column-reverse\n align-items: stretch\n }\n \n .action-buttons {\n justify-content: center\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onActivated, onMounted, reactive, ref, getCurrentInstance } from 'vue'\nimport { getListData, type PageConfig, type FieldConfig, type Action, type Paging, download, PageActionType } from '@/services/dataGen'\nimport { type TableColumnData } from '@arco-design/web-vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport { useSvrStore, useBpmStore } from \"@/composables/usePinia\"\nimport TopBar from '@/components/TopBar.vue'\nimport { PageBuilder } from '@/services/page'\n\nconst svrStore = useSvrStore()\nconst bpmStore = useBpmStore()\ndefineOptions({\n name: 'ListView'\n})\nconst router = useLibraryRouter()\n\n// 在 setup 中获取实例\nconst instance = getCurrentInstance()\n\nconst props = defineProps<{\n className: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\nconst paging = reactive<Paging>({\n current: 1,\n total: 0,\n pageSize: 10,\n defaultPageSize: 10,\n showTotal: true,\n showPageSize: true,\n filters: [],\n})\n\nfunction createListParams() {\n const searchFilters = Object.entries(searchForm.value)\n .filter(([, { value }]) => value && value !== '')\n .map(([key, { value, operator }]) => ({\n key,\n value,\n operator // 根据实际需要调整操作符\n }))\n return {\n pageNumber: paging.current,\n pageSize: paging.pageSize,\n filters: [...paging.filters, ...searchFilters],\n sorts: [{\n \"key\": \"workflowId\",\n \"type\": 1\n }],\n }\n}\n\n// 优化滚动配置 - 移除固定高度\nconst scroll = computed(() => {\n const columnCount = _columns.value.length\n const estimatedWidth = columnCount * 150 + 250 // 包含Actions列宽度\n return {\n x: estimatedWidth, // 只设置横向滚动\n // 移除 y 属性,让表格高度自适应\n }\n})\n\n// 优化列配置\nconst mapColumns = (fields: Record<string, FieldConfig>) => {\n const col = Object.entries(fields)\n .filter(([, item]) => item.widget?.column)\n .map(([key, value], index) => {\n return {\n title: value.widget!.title,\n dataIndex: key.charAt(0).toLowerCase() + key.slice(1),\n order: value.order,\n ellipsis: true,\n tooltip: true,\n width: 150,\n minWidth: 100, // 启用最小宽度\n resizable: true, // 启用列宽调整\n } as TableColumnData\n })\n .sort((a, b) => a.order - b.order)\n\n col.push({\n title: 'Actions',\n slotName: 'optional',\n align: 'center',\n width: 250,\n minWidth: 200,\n fixed: 'right',\n resizable: false,\n })\n _columns.value = col\n}\n\n// 优化数据加载,减少不必要的响应式\nconst _data = ref<object[]>([])\nconst _columns = ref<TableColumnData[]>([])\nconst loadingPage = ref(true)\nconst loadingTable = ref(true)\n\nconst actions = ref<Action[]>()\n\nconst loadData = async () => {\n loadingTable.value = true\n const res = await getListData(props.className, createListParams())\n _data.value = res.data\n paging.total = res.totalCount\n loadingTable.value = false\n}\n\nconst mounted = ref(false)\n\nonMounted(async () => {\n loadingPage.value = true\n const page = new PageBuilder()\n .setPageActionType(PageActionType.List)\n .setClassName(props.className)\n .setStore({ svrStore, bpmStore })\n .build()\n pageData.value = await page.getPageData()\n mapColumns(pageData.value.fields)\n mapSearchableFields(pageData.value.fields)\n initSearchForm()\n tabHandler(pageData.value?.tabs?.[0]?.key || '')\n actions.value = pageData.value.actions\n loadingPage.value = false\n mounted.value = true // 标记已挂载\n})\n\nonActivated(() => {\n // 只有不是首次挂载时才触发\n if (mounted.value) {\n loadData()\n }\n})\n\nconst pageChangeHandler = (page: number) => {\n paging.current = page\n loadData()\n}\n\nconst pageSizeChangeHandler = (pageSize: number) => {\n paging.pageSize = pageSize\n loadData()\n}\n\nfunction clickHandler(type: ActionTypeEnum, _: string, redirectType: RedirectType, title: string, workflowId: string) {\n switch (type) {\n case ActionTypeEnum.Link:\n router.push({ name: redirectType, params: { workflowId } })\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n\nfunction createHandler(actionType: ActionTypeEnum, requestUrl: string, redirectType: RedirectType) {\n switch (actionType) {\n case ActionTypeEnum.Submit:\n download(requestUrl, { filters: [{ key: \"approverList\", value: getApproverEmail(), operator: 2 }] })\n instance?.appContext.config.globalProperties.$notification.success(`submit success!`)\n break\n case ActionTypeEnum.Link:\n router.push({ name: redirectType })\n break\n default:\n console.warn('Unknown action type:', actionType)\n }\n}\n\nfunction getApproverEmail() {\n return svrStore()?.userInfo?.email_address ?? ''\n}\n\nfunction replaceEmail(url: string, email: string): string {\n if (typeof url !== 'string') {\n return url\n }\n if (url.indexOf('{currentUserEmail}') === -1) {\n return url\n }\n return url.replace(/{currentUserEmail}/g, email)\n}\n\nfunction tabHandler(key: string) {\n const filters = pageData.value?.tabs?.find(item => item.key === key)?.filters\n paging.filters = filters?.map(item => {\n return {\n ...item,\n value: replaceEmail(item.value, getApproverEmail())\n }\n }) || []\n paging.current = 1\n loadData()\n}\n\n// 添加查询表单数据\nconst searchForm = ref<Record<string, any>>({})\n\n// 计算可搜索的字段\nconst searchableFields = ref<{ fieldKey: string, fieldConfig: FieldConfig }[]>([])\n\nfunction mapSearchableFields(fields: Record<string, FieldConfig>) {\n if (!fields) return []\n searchableFields.value = Object.entries(fields)\n .filter(([, item]) => item.isFiltered)\n .map(([fieldKey, fieldConfig]) => ({ fieldKey, fieldConfig }))\n}\n\n// 初始化查询表单\nconst initSearchForm = () => {\n const form: Record<string, any> = {}\n searchableFields.value.forEach(({ fieldKey, fieldConfig }) => {\n form[fieldKey] = {}\n form[fieldKey].value = fieldConfig.modelValue\n form[fieldKey].operator = fieldConfig.operator\n })\n searchForm.value = form\n}\n\n// 查询处理函数\nconst handleSearch = () => {\n paging.current = 1\n loadData()\n}\n\n// 重置查询\nconst handleReset = () => {\n // Object.keys(searchForm.value).forEach(key => {\n // searchForm.value[key] = ''\n // })\n\n if (pageData.value) {\n initSearchForm()\n }\n handleSearch()\n}\n\nfunction judgeHiddenActions(action: Action, record: any) {\n if (action.location !== 'InTable') {\n return false\n }\n if (action.title === 'Update') {\n if (record.status === 100) {\n return false\n }\n if (record.status === -1) {\n return false\n }\n }\n return true\n}\n</script>\n\n<template>\n <div class=\"list-container\">\n <TopBar :title=\"pageData?.banner.title ?? ''\" :subTitle=\"pageData?.banner.subTitle ?? ''\"\n :email=\"getApproverEmail()\" />\n <!-- 查询表单 -->\n <a-card>\n <div class=\"query-title\">\n <h3>Search Conditions</h3>\n <a-space size=\"medium\">\n <template v-for=\"action in actions\" :key=\"action.title\">\n <template v-if=\"action.location === 'InOperation'\">\n <ActionButton :config=\"action\" @click=\"createHandler\" />\n </template>\n </template>\n </a-space>\n </div>\n <a-row :gutter=\"[24, 20]\">\n <template v-for=\"item in searchableFields\" :key=\"item.fieldKey\">\n <a-col :span=\"6\" class=\"search-col\">\n <DataWidgets :name=\"item.fieldKey\" :config=\"item.fieldConfig\" v-model=\"searchForm[item.fieldKey].value\"\n class=\"form-field\" />\n </a-col>\n </template>\n <a-col :span=\"6\" class=\"search-col form-buttons\">\n <a-space size=\"medium\">\n <a-button type=\"primary\" size=\"medium\" @click=\"handleSearch\">\n Search\n </a-button>\n <a-button size=\"medium\" @click=\"handleReset\">\n Reset\n </a-button>\n </a-space>\n </a-col>\n </a-row>\n </a-card>\n\n <a-tabs size=\"large\" @tab-click=\"tabHandler\">\n <a-tab-pane v-for=\"tab in pageData?.tabs\" :key=\"tab.key\" :title=\"tab.title\" />\n </a-tabs>\n <a-table :columns=\"_columns\" :data=\"_data\" stripe border :pagination=\"{\n current: paging.current,\n total: paging.total,\n pageSize: paging.pageSize,\n showTotal: paging.showTotal,\n showPageSize: paging.showPageSize,\n pageSizeOptions: [10, 20, 50, 100]\n }\" :loading=\"loadingTable\" size=\"medium\" :scroll=\"scroll\" @page-change=\"pageChangeHandler\"\n @page-size-change=\"pageSizeChangeHandler\">\n\n <template #optional=\"{ record }\">\n <a-space size=\"small\">\n <template v-for=\"action in actions\" :key=\"action.title\">\n <template v-if=\"judgeHiddenActions(action, record)\">\n <ActionButton :config=\"action\" size=\"small\"\n @click=\"(...args) => clickHandler(...args, record.workflowId)\" />\n </template>\n </template>\n </a-space>\n </template>\n </a-table>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.list-container {\n :deep(.arco-table) {\n .arco-table-body {\n overflow-x: auto\n }\n }\n padding 16px\n}\n\n.query-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n}\n\n.field-label {\n font-weight: 500;\n margin-bottom: 8px;\n}\n\n.form-buttons {\n margin-top: 24px\n}\n</style>\n","import type { App } from 'vue'\nimport type { Router } from 'vue-router'\nimport type { Pinia } from 'pinia'\nimport CreateView from '@/components/data-gen/views/CreateView.vue'\nimport UpdateView from '@/components/data-gen/views/UpdateView.vue'\nimport DetailView from '@/components/data-gen/views/DetailView.vue'\nimport ListView from '@/components/data-gen/views/ListView.vue'\nimport { RouterKey } from '@/composables/useRouter'\nimport { PiniaKey, BpmStoreKey, SvrStoreKey} from '@/composables/usePinia'\nimport {TriggersKey} from '@/composables/useTriggers'\nimport { CustomCompsKey } from '@/composables/customComps'\nimport { type LibraryConfig, setLibraryConfig } from '@/stores/libraryConfig'\n// 导入样式文件\nimport '@/styles/index.styl'\n\n\n\ninterface PluginOptions {\n router?: Router\n pinia?: Pinia\n config?: LibraryConfig\n [key: string]: any\n}\n\nconst MyPlugin = {\n install(app: App, options: PluginOptions = {}) {\n // 设置全局配置\n if (options.config) {\n setLibraryConfig(options.config)\n }\n \n // 如果宿主提供了 router,注入它以便共享\n if (options.router) {\n app.provide(RouterKey, options.router)\n }\n \n // 如果宿主提供了 pinia,注入它以便共享\n if (options.pinia) {\n app.provide(PiniaKey, options.pinia)\n }\n\n // 如果宿主提供了 bpmStore,注入它以便共享\n if (options.useBpmStore) {\n app.provide(BpmStoreKey, options.useBpmStore)\n }\n\n // 如果宿主提供了 svrStore,注入它以便共享\n if (options.useSvrStore) {\n app.provide(SvrStoreKey, options.useSvrStore)\n }\n\n // 如果宿主提供了 triggers,注入它以便共享\n if (options.triggers) {\n app.provide(TriggersKey, options.triggers)\n }\n\n if (options.customComps) {\n app.provide(CustomCompsKey, options.customComps)\n }\n\n // 注册组件\n app.component('CreateView', CreateView)\n app.component('UpdateView', UpdateView)\n app.component('DetailView', DetailView)\n app.component('ListView', ListView)\n }\n}\n\nexport default MyPlugin"],"names":["useLibraryMainStore","defineStore","ref","sleep","tick","resolve","getStoreData","store","key","remoteFunction","defaultValue","e","patLeft0","str","s","formatDate","date","format","_date","meta","value","downloadFile","data","fileName","blob","downloadElement","href","globalConfig","setLibraryConfig","config","getLibraryConfig","instance","getCurrentInstance","getApiConfig","responseInterceptor","res","createAxiosInstance","apiBase","axios","Axios","getToken","appSecret","mainStore","getAxios","token","dataGetter","byteToHex","i","unsafeStringify","arr","offset","getRandomValues","rnds8","rng","randomUUID","native","v4","options","buf","rnds","ActionTypeEnum","PageActionType","mapPageData","input","type","attr","showToRoles","role","hasRole","uuidv4","replaceWorkflowId","a","b","fieldName","fieldData","fieldConfig","attributes","propertyValue","getPageData","className","opt","getBtnList","getListData","params","createData","url","updateData","id","replacedUrl","replaceEmail","email","replaceReason","reason","replaceStatus","status","replaceIsGlobal","ifGlobal","replaceClassName","approveData","getOptions","list","item","getProcess","workflowId","convertToFileItem","file","getFiles","acc","category","removeFile","attachmentId","getApprovers","label","assignApprover","addComments","comments","getCommentsHistory","getAssociator","deleteAssociator","associatorId","download","validateRules","configs","errorMessages","isValid","vallidateRule","ruleName","ruleParameter","validations","parameter","_","props","__props","emits","__emit","model","_useModel","validate","v","inputHandler","changeHandler","valid","trigger","__expose","_createBlock","_component_AInput","$setup","_cache","$event","max","min","onMounted","_component_AInputNumber","loading","_options","eventHandlers","computed","handlers","loadOptions","_component_ASelect","_openBlock","_createElementBlock","_Fragment","_renderList","_component_AOption","fieldNames","_component_ASpace","_createVNode","_component_ACascader","$props","headers","ApiBase","uploadRef","replaceIdAndClassName","action","submit","onBeforeRemove","name","reject","Modal","uploadPromiseResolve","uploadPromiseReject","handleUploadSuccess","fileItem","handleUploadError","readyFiles","onChange","fileList","nextTick","defaultFiles","_component_a_upload","_withCtx","_component_a_button","_createTextVNode","_component_ATextarea","_component_ACheckbox","configProviderInjectionKey","CLASS_PREFIX","GLOBAL_CONFIG_NAME","getPrefixCls","componentName","_a","_b","_c","configProvider","inject","isNumber","obj","_export_sfc","sfc","val","_sfc_main","defineComponent","ev","emit","prefixCls","cls","innerStyle","styles","_hoisted_1","_sfc_render","_ctx","$data","$options","openBlock","createElementBlock","normalizeClass","normalizeStyle","args","createElementVNode","_IconQuestionCircle","IconQuestionCircle","app","iconPrefix","_IconDownload","IconDownload","isTreeArray","stringOutput","treeOutput","_hoisted_2","_component_a_tooltip","output","_toDisplayString","_createElementVNode","subItem","widgetRef","useTemplateRef","curComp","InputText","InputNumber","SelectList","Cascader","FileUpload","TextArea","CheckBox","errMsg","errHandler","handlerName","isFileUpload","formatTitle","title","_createCommentVNode","_resolveDynamicComponent","_hoisted_3","clickHandler","_component_AButton","_renderSlot","_component_ALink","redirectType","SubmitButton","DetailLink","curUrl","RouterKey","useLibraryRouter","injectedRouter","useVueRouter","TriggersKey","useTriggers","injectedTriggers","PiniaKey","BpmStoreKey","SvrStoreKey","useBpmStore","useSvrStore","_hoisted_4","_hoisted_5","_hoisted_6","_component_a_popover","_component_a_avatar","genFieldsGroup","widget","groups","fields","f","groupedKeys","g","others","PageBuilder","pageActionType","Page","selectedApprover","comment","bpmStore","svrStore","router","triggers","dataWidgetsRefs","pageData","_fields","_dependent","genField","w","hiddenFields","genDependentField","reversedActions","_data","page","filed","getApproverEmail","validateResult","submitPromises","error","newHiddenFields","fieldValue","groupedFields","_hoisted_7","_hoisted_8","_hoisted_9","_component_a_spin","group","_component_a_card","btnList","files","btn","CustomCompsKey","useLibraryCustomComps","customComps","mapWorkflowSteps","process","currentIndex","p","index","step","nodeApprover","history","actualApprover","historyApprover","steps","isGlobal","isShowAssignSelect","isShowAssignList","isShowCommentTextArea","reloadButtonList","load","approvers","commentsHistory","associators","triggerFn","successContent","onAssignApprover","onDeleteAssociator","approverEmail","confirmDialog","content","onAddComment","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_component_a_space","_component_a_link","_component_a_textarea","_component_a_list","_component_a_list_item","_hoisted_11","paging","reactive","createListParams","searchFilters","searchForm","operator","scroll","_columns","mapColumns","col","loadingPage","loadingTable","actions","loadData","mounted","mapSearchableFields","initSearchForm","tabHandler","onActivated","pageChangeHandler","pageSizeChangeHandler","pageSize","createHandler","actionType","requestUrl","filters","searchableFields","fieldKey","form","handleSearch","handleReset","judgeHiddenActions","record","_component_a_row","_component_a_col","_component_a_tabs","tab","_component_a_tab_pane","_component_a_table","MyPlugin","CreateView","UpdateView","DetailView","ListView"],"mappings":";;;;;AAGO,MAAMA,KAAsBC,GAAY,QAAQ,OAG9C;AAAA,EACL,OAHYC,EAAwB,MAAS;AAG7C,EAEH,GCFYC,KAAQ,OAAOC,MAAiB,IAAI,QAAQ,CAACC,MAAY,WAAWA,GAASD,CAAI,CAAC,GAUlFE,KAAe,OAC1BC,GACAC,GACAC,GACAC,IAAe,WACZ;AAGH,MAAIH,EAAMC,CAAG,MAAM;AACjB,QAAI;AACF,MAAAD,EAAMC,CAAG,IAAI,MACbD,EAAMC,CAAG,IAAK,MAAMC,EAAA,KAAqBC;AAAA,IAC3C,SAASC,GAAG;AAEV,cAAQ,MAAMA,CAAC,GACfJ,EAAMC,CAAG,IAAI;AAAA,IACf;AAIF,SAAOD,EAAMC,CAAG,MAAM;AACpB,UAAML,GAAM,GAAG;AAEjB,SAAOI,EAAMC,CAAG;AAClB,GAOaI,KAAW,CAACC,MAAqB;AAC5C,QAAMC,IAAI,IAAID,CAAG;AACjB,SAAOC,EAAE,UAAUA,EAAE,SAAS,CAAC;AACjC,GAQaC,KAAa,CAACC,GAAqBC,IAAS,0BAAkC;AACzF,MAAI,CAACD,KAAS,OAAOA,KAAS,YAAYA,EAAK,WAAW;AACxD,WAAO;AAGT,MAAI;AACF,UAAME,IAAQ,IAAI,KAAKF,CAAI,GACrBG,IAAO;AAAA,MACX,CAAC,QAAQD,EAAM,aAAa;AAAA,MAC5B,CAAC,MAAMA,EAAM,YAAA,EAAc,WAAW,UAAU,CAAC,CAAC;AAAA,MAClD,CAAC,MAAMN,GAASM,EAAM,SAAA,IAAa,CAAC,CAAC;AAAA,MACrC,CAAC,KAAKA,EAAM,SAAA,IAAa,CAAC;AAAA,MAC1B,CAAC,MAAMN,GAASM,EAAM,QAAA,CAAS,CAAC;AAAA,MAChC,CAAC,KAAKA,EAAM,SAAS;AAAA,MACrB,CAAC,MAAMN,GAASM,EAAM,SAAA,CAAU,CAAC;AAAA,MACjC,CAAC,KAAKA,EAAM,UAAU;AAAA,MACtB,CAAC,MAAMN,GAASM,EAAM,WAAA,CAAY,CAAC;AAAA,MACnC,CAAC,KAAKA,EAAM,YAAY;AAAA,MACxB,CAAC,MAAMN,GAASM,EAAM,WAAA,CAAY,CAAC;AAAA,MACnC,CAAC,KAAKA,EAAM,WAAA,CAAY;AAAA,IAAA;AAG1B,eAAW,CAACV,GAAKY,CAAK,KAAKD;AACzB,MAAAF,IAASA,EAAO,QAAQT,GAAKY,CAAK;AAGpC,WAAOH;AAAA,EACT,QAAY;AACV,WAAOD,EAAK,eAAA;AAAA,EACd;AACF,GAEaK,KAAe,CAACC,GAAqBC,MAAqB;AAErE,MAAIC;AACJ,EAAIF,aAAgB,OAClBE,IAAOF,IAEPE,IAAO,IAAI,KAAK,CAACF,CAAI,CAAC;AAExB,QAAMG,IAAkB,SAAS,cAAc,GAAG,GAC5CC,IAAO,OAAO,IAAI,gBAAgBF,CAAI;AAC5C,EAAAC,EAAgB,OAAOC,GACvBD,EAAgB,WAAWF,GAC3BE,EAAgB,MAAA,GAChB,OAAO,IAAI,gBAAgBC,CAAI;AACjC;AC/FA,IAAIC,KAA8B,CAAA;AAE3B,SAASC,GAAiBC,GAAuB;AACtD,EAAAF,KAAe,EAAE,GAAGA,IAAc,GAAGE,EAAA;AACvC;AAEO,SAASC,KAAkC;AAChD,SAAOH;AACT;ACZA,MAAMI,KAAWC,GAAA;AAGjB,SAASC,KAAe;AACtB,QAAMJ,IAASC,GAAA;AACf,SAAO;AAAA,IACL,SAASD,EAAO,WAAW,UAAqC;AAAA,IAChE,WAAWA,EAAO,aAAa,UAAuC;AAAA,EAAA;AAE1E;AAEA,SAASK,GAAoBC,GAAU;AACrC,MAAG,CAACA,GAAK,MAAM;AACb,WAAOA;AAET,UAAQA,EAAI,KAAK,YAAA;AAAA,IACf,KAAK;AACH,aAAAA,EAAI,KAAK,OAAOA,EAAI,KAAK,QAClBA,EAAI;AAAA,IACb,KAAK;AAAA,IACL;AACE,aAAAJ,IAAU,WAAW,OAAO,iBAAiB,cAAc,MAAMI,EAAI,KAAK,GAAG,GACtE;AAAA,EAAA;AAEb;AAEA,SAASC,KAAsB;AAC7B,QAAM,EAAE,SAAAC,EAAA,IAAYJ,GAAA,GACdK,IAAQC,GAAM,OAAO;AAAA,IACzB,SAASF;AAAA,IACT,SAAS,KAAK;AAAA;AAAA;AAAA,IAEd,iBAAiB;AAAA,EAAA,CAClB;AACD,SAAAC,EAAM,aAAa,SAAS,IAAIJ,EAAmB,GAC5CI;AACT;AAOO,MAAME,KAAW,YAAY;AAClC,QAAM,EAAE,SAAAH,GAAS,WAAAI,EAAA,IAAcR,GAAA,GACzBK,IAAQF,GAAA,GACRM,IAAY1C,GAAA;AAElB,SAAO,MAAMM,GAAaoC,GAAW,SAAS,YAAY;AACxD,UAAMP,IAAM,MAAMG,EAAM,IAAiB,GAAGD,CAAO,kBAAkB;AAAA,MACnE,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,WAAWI;AAAA,MAAA;AAAA,IACb,CACD;AACD,WAAIN,GAAK,MAAM,SAEb,WAAW,MAAM;AACf,MAAAO,EAAU,QAAQ;AAAA,IACpB,IAAIP,EAAI,MAAM,iBAAiB,QAAW,GAAI,GAEzCA,GAAK,MAAM;AAAA,EACpB,CAAC;AACH,GAEaQ,IAAW,YAAY;AAClC,QAAMC,IAAQ,MAAMJ,GAAA,GACdF,IAAQF,GAAA;AACd,SAAAE,EAAM,SAAS,QAAQ,OAAO,gBAAmB,UAAUM,CAAK,IACzDN;AACT,GC5EAO,KAAe;AAAA,EACb,kBAAkB,CAACtC,MAAcA,EAAM,SAAA,GAAY,UAAU,iBAAiB;AAAA,EAC9E,yBAAyB,CAACA,MAAcA,EAAM,SAAA,GAAY,gBAAgB;AAAA,EAC1E,iBAAiB,OAAM,oBAAI,KAAA,GAAO,YAAA;AAAA,EAClC,eAAe,CAACA,MAAcA,EAAM,SAAA,GAAY,UAAU,iBAAiB;AAAA,EAC3E,sBAAsB,CAACA,MAAcA,EAAM,SAAA,GAAY,gBAAgB;AAAA,EACvE,cAAc,MAAM;AACtB,GCNMuC,IAAY,CAAA;AAClB,SAASC,IAAI,GAAGA,IAAI,KAAK,EAAEA;AACvB,EAAAD,EAAU,MAAMC,IAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAE7C,SAASC,GAAgBC,GAAKC,IAAS,GAAG;AAC7C,UAAQJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAC7BJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzBJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzBJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzB,MACAJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzBJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzB,MACAJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzBJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzB,MACAJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzBJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IACzB,MACAJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAC1BJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAC1BJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAC1BJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAC1BJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAC1BJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,GAAG,YAAW;AAChD;AC1BA,IAAIC;AACJ,MAAMC,KAAQ,IAAI,WAAW,EAAE;AAChB,SAASC,KAAM;AAC1B,MAAI,CAACF,IAAiB;AAClB,QAAI,OAAO,SAAW,OAAe,CAAC,OAAO;AACzC,YAAM,IAAI,MAAM,0GAA0G;AAE9H,IAAAA,KAAkB,OAAO,gBAAgB,KAAK,MAAM;AAAA,EACxD;AACA,SAAOA,GAAgBC,EAAK;AAChC;ACVA,MAAME,KAAa,OAAO,SAAW,OAAe,OAAO,cAAc,OAAO,WAAW,KAAK,MAAM,GACtGC,KAAe,EAAE,YAAAD,GAAU;ACE3B,SAASE,GAAGC,GAASC,GAAKR,GAAQ;AAC9B,MAAIK,GAAO,cAAsB,CAACE;AAC9B,WAAOF,GAAO,WAAU;AAE5B,EAAAE,IAAUA,KAAW,CAAA;AACrB,QAAME,IAAOF,EAAQ,UAAUA,EAAQ,MAAG,KAAQJ,GAAG;AACrD,MAAIM,EAAK,SAAS;AACd,UAAM,IAAI,MAAM,mCAAmC;AAEvD,SAAAA,EAAK,CAAC,IAAKA,EAAK,CAAC,IAAI,KAAQ,IAC7BA,EAAK,CAAC,IAAKA,EAAK,CAAC,IAAI,KAAQ,KAWtBX,GAAgBW,CAAI;AAC/B;ACvBA,IAAKC,sBAAAA,OACDA,EAAAA,EAAA,SAAA,CAAA,IAAA,UACAA,EAAAA,EAAA,OAAA,CAAA,IAAA,QACAA,EAAAA,EAAA,SAAA,CAAA,IAAA,UAHCA,IAAAA,KAAA,CAAA,CAAA,GCoGOC,uBAAAA,OACVA,EAAAA,EAAA,SAAS,CAAA,IAAT,UACAA,EAAAA,EAAA,SAAS,CAAA,IAAT,UACAA,EAAAA,EAAA,UAAU,CAAA,IAAV,WACAA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,WAAW,CAAA,IAAX,YALUA,IAAAA,MAAA,CAAA,CAAA;AAQZ,SAASC,GAAYC,GAAYC,GAAsBzD,GAAqD;AAC1G,QAAMsB,IAAqB;AAAA,IACzB,UAAU;AAAA,IACV,QAAQ,CAAA;AAAA,IACR,mBAAmB,CAAA;AAAA,IACnB,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,IAAA;AAAA,EACZ;AAIF,SAAAkC,EAAM,mBAAmB,QAAQ,CAACE,MAAc;AAC9C,QAAIA,EAAK,kBAAkB;AACzB,MAAApC,EAAO,WAAWoC,EAAK;AAAA,aACdA,EAAK,kBAAkB;AAChC,MAAApC,EAAO,kBAAkB,KAAK;AAAA,QAC5B,MAAMoC,EAAK;AAAA,QACX,cAAcA,EAAK;AAAA,QACnB,OAAOA,EAAK;AAAA,QACZ,WAAWA,EAAK,iBAAiB,CAAC,GAAG;AAAA,MAAA,CACtC;AAAA,aACQA,EAAK,kBAAkB,aAAa;AAC7C,YAAMC,IAAcD,EAAK,YAAY,MAAM,GAAG,EAAE,IAAI,CAACE,MAAiBA,EAAK,KAAA,CAAM,GAC3EC,IAAU7D,EAAM,SAAA,EAAW,aAAa,SAAS,KAAK,CAAC4D,MAA2BD,EAAY,SAASC,EAAK,IAAI,CAAC,KAAKF,EAAK,gBAAgB;AACjJ,UAAIA,EAAK,WAAW,OAAO;AACzB,QAAKpC,EAAO,SACVA,EAAO,OAAO,CAAA,IAEZuC,KACFvC,EAAO,KAAK,KAAK;AAAA,UACf,KAAKwC,GAAA;AAAA,UACL,OAAOJ,EAAK;AAAA,UACZ,SAASA,EAAK,UAAU,KAAK,MAAMA,EAAK,OAAO,IAAI,CAAA;AAAA,UACnD,OAAOA,EAAK;AAAA,QAAA,CACb;AAEH;AAAA,MACF;AAIA,UAHKpC,EAAO,YACVA,EAAO,UAAU,CAAA,IAEfuC,GAAS;AAEX,YAAIH,EAAK,UAAU,eACbF,EAAM,OAAO,kBAAkB;AACjC;AAGJ,QAAAlC,EAAO,QAAQ,KAAK;AAAA,UAClB,UAAUoC,EAAK;AAAA,UACf,YAAYA,EAAK;AAAA,UACjB,aAAaA,EAAK;AAAA,UAClB,cAAcA,EAAK;AAAA,UACnB,OAAOA,EAAK;AAAA,UACZ,QAAQA,EAAK,WAAW,SAASL,EAAe,OAAOK,EAAK,WAAW,WAAWL,EAAe,SAASA,EAAe;AAAA,UACzH,UAAUK,EAAK;AAAA,UACf,eAAeA,EAAK;AAAA,UACpB,UAAUA,EAAK;AAAA,UACf,WAAWA,EAAK;AAAA,QAAA,CACjB;AAAA,MACH;AAAA,IACF,MAAA,CAAWA,EAAK,kBAAkB,aAChCpC,EAAO,OAAO,QAAQoC,EAAK,OACvBD,MAAS,KAEFA,MAAS,IADlBnC,EAAO,OAAO,WAAWoC,EAAK,WAI9BpC,EAAO,OAAO,WAAWyC,GAAkBL,EAAK,UAAUF,EAAM,WAAW,aAAa;AAAA,EAG9F,CAAC,GACGlC,EAAO,SACTA,EAAO,OAAOA,EAAO,KAAK,KAAK,CAAC0C,GAAGC,MAAMD,EAAE,QAAQC,EAAE,KAAK,IAI5D,OAAO,QAAQT,CAAK,EAAE,QAAQ,CAAC,CAACU,GAAWC,CAAS,MAAM;AAKxD,QAJID,MAAc,uBAAuBA,MAAc,eACnDA,MAAc,QAAQA,MAAc,gBAAgBA,MAAc,YAAYA,MAAc,oBAG5FT,MAAS,KACPS,MAAc;AAChB;AAGJ,UAAME,IAA2B;AAAA,MAC/B,aAAa,CAAA;AAAA,MACb,UAAU,CAAA;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,UAAU;AAAA,IAAA,GAGN,EAAE,YAAAC,GAAY,eAAAC,EAAA,IAAkBH;AAEtC,YAAQG,GAAA;AAAA,MACN,KAAK;AACH,QAAAF,EAAY,aAAa;AACzB;AAAA,MACF,KAAK;AACH,QAAAA,EAAY,aAAa;AACzB;AAAA,MACF;AACE,QAAAA,EAAY,aAAaE;AACzB;AAAA,IAAA;AAEJ,IAAIJ,MAAc,cAAcT,MAAS,MACvCW,EAAY,aAAa9B,GAAW,iBAAiBtC,CAAK,KAGxDyD,MAAS,KAAyBA,MAAS,OACzCS,MAAc,mBAAmBA,MAAc,yBAC7CE,EAAY,eACdA,EAAY,aAAa,OAAOA,EAAY,UAAU,IAM5DC,GAAY,QAAQ,CAACX,MAAc;AACjC,MAAIA,EAAK,SAASA,EAAK,QACrBU,EAAY,QAASV,EAAK,SAASA,EAAK,QAC/BA,EAAK,kBAAkB,eAChCA,EAAK,aAAaA,EAAK,aAAa,KAAK,MAAMA,EAAK,UAAU,IAAI,CAAA,GAClEU,EAAY,SAAS;AAAA,QACnB,GAAGV;AAAA,QACH,QAAQ;AAAA,MAAA,KAEDA,EAAK,kBAAkB,yBAAyBD,MAAS,IAC9DW,EAAY,QAAQ,WAAW,cACjCA,EAAY,YAAY,KAAKV,CAAwB,IAE9CA,EAAK,kBAAkB,aAChCU,EAAY,SAAS;AAAA,QACnB,GAAGV;AAAA,QACH,QAAQ;AAAA,MAAA,IAEDA,EAAK,kBAAkB,gBAChCU,EAAY,aAAa,IACzBA,EAAY,WAAWV,EAAK,gBACnBA,EAAK,gBACdU,EAAY,YAAY9B,GAAWoB,EAAK,aAAa,IAAIpB,GAAWoB,EAAK,aAAa,EAAE1D,CAAK,IAAI,KACxF0D,EAAK,cAAc,YAC5BU,EAAY,UAAU,KAAK;AAAA,QACzB,OAAO;AAAA,QACP,aAAaV,EAAK;AAAA,MAAA,CACnB;AAAA,IAEL,CAAC,GAEDpC,EAAO,OAAO4C,CAAS,IAAIE;AAAA,EAC7B,CAAC,GAEM9C;AACT;AAEO,MAAMiD,KAAc,OACzBd,GACAe,GACAxE,GAIAyE,MAGG;AAEH,QAAM7C,IAAM,OADE,MAAMQ,EAAA,GACI,IAAI,YAAYoC,CAAS,IAAIf,CAAI,SAAS,EAAE,QAAQgB,EAAA,CAAK;AACjF,SAAOlB,GAAY3B,GAAK,MAAM6B,GAAMzD,CAAK;AAC3C,GAEa0E,KAAa,OACxBjB,GACAe,GACAC,OASY,OADE,MAAMrC,EAAA,GACI,KAAK,IAAIoC,CAAS,IAAIf,CAAI,gBAAgB,MAAM,EAAE,QAAQgB,GAAK,IAC3E;AA4Bd,eAAsBE,GACpBH,GACAI,GAMA;AAEA,QAAMhD,IAAM,OADE,MAAMQ,EAAA,GACI,KAAkB,YAAYoC,CAAS,SAASI,CAAM;AAC9E,SAAO;AAAA,IACL,MAAMhD,EAAI,KAAK;AAAA,IACf,YAAYA,EAAI,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAezB;AAEA,eAAsBiD,GAAWL,GAAmBzD,GAAc+D,GAAa;AAO7E,UALY,OADE,MAAM1C,EAAA,GACI,KAAe0C,GAAK/D,GAAM;AAAA,IAChD,QAAQ;AAAA,MACN,WAAAyD;AAAA,IAAA;AAAA,EACF,CACD,GACU;AACb;AAEA,eAAsBO,GAAWP,GAAmBQ,GAAYjE,GAAc+D,GAAa;AACzF,QAAM/C,IAAQ,MAAMK,EAAA,GACd6C,IAAclB,GAAkBe,GAAKE,CAAE;AAE7C,UADY,MAAMjD,EAAM,IAAIkD,GAAalE,CAAI,IACjC;AACd;AAEA,SAASgD,GAAkBe,GAAaE,GAAoB;AAC1D,SAAOF,EAAI,QAAQ,iBAAiBE,CAAE;AACxC;AAEA,SAASE,GAAaJ,GAAaK,GAAuB;AACxD,SAAOL,EAAI,QAAQ,oBAAoB,mBAAmBK,CAAK,CAAC;AAClE;AAEA,SAASC,GAAcN,GAAaO,GAAwB;AAC1D,SAAOP,EAAI,QAAQ,qBAAqB,mBAAmBO,CAAM,CAAC;AACpE;AAEA,SAASC,GAAcR,GAAaS,GAAwB;AAC1D,SAAOT,EAAI,QAAQ,aAAaS,CAAM;AACxC;AAEA,SAASC,GAAgBV,GAAaW,GAA0B;AAC9D,SAAOX,EAAI,QAAQ,qCAAqCW,CAAQ;AAClE;AAEA,SAASC,GAAiBZ,GAAaN,GAA2B;AAChE,SAAOM,EAAI,QAAQ,gBAAgB,mBAAmBN,CAAS,CAAC;AAClE;AAEA,eAAsBmB,GAAYnB,GAAmBQ,GAAYG,GAAeE,GAAgBtE,GAAc+D,GAAaS,GAAgBE,GAAkB;AAC3J,QAAM1D,IAAQ,MAAMK,EAAA;AACpB,MAAI6C,IAAclB,GAAkBe,GAAKE,CAAE;AAC3C,SAAAC,IAAcC,GAAaD,GAAaE,CAAK,GAC7CF,IAAcG,GAAcH,GAAaI,CAAM,GAC/CJ,IAAcK,GAAcL,GAAaM,CAAM,GAC/CN,IAAcO,GAAgBP,GAAaQ,CAAQ,GACnDR,IAAcS,GAAiBT,GAAaT,CAAS,IACzC,MAAMzC,EAAM,IAAIkD,GAAalE,CAAI,IACjC;AACd;AAEA,eAAsB6E,GAAWd,GAAajE,GAAyC;AAGrF,QAAMgF,KADM,OADE,MAAMzD,EAAA,GACI,IAAI0C,GAAK,EAAE,QAAQ,EAAE,OAAAjE,EAAA,GAAS,IACpC;AAClB,SAAO,OAAO,QAAQgF,CAAI,EAAE,IAAI,CAAC,CAAC5F,GAAK6F,CAAI,OAAO;AAAA,IAChD,OAAO7F;AAAA,IACP,OAAO6F;AAAA,EAAA,EACP;AACJ;AAQA,eAAsBC,GAAWvB,GAAmBwB,GAAoC;AAGtF,UADY,OADE,MAAM5D,EAAA,GACI,IAAI,YAAYoC,CAAS,IAAIwB,CAAU,UAAU,IAC7D;AACd;AAEA,SAASC,GAAkBC,GAAW;AACpC,SAAO;AAAA,IACL,KAAKA,EAAK,MAAMpC,GAAA;AAAA,IAChB,MAAMoC,EAAK,kBAAkB;AAAA,IAC7B,KAAKA,EAAK,iBAAiB;AAAA,EAAA;AAE/B;AAEA,eAAsBC,GAAS3B,GAAmBwB,GAAuD;AAYvG,UAVY,OADE,MAAM5D,EAAA,GACI,IAAI,YAAYoC,CAAS,IAAIwB,CAAU,aAAa,IAEvD,KAAK,OAAO,CAACI,GAA+BN,MAAc;AAC7E,UAAM,EAAE,UAAAO,MAAaP;AACrB,WAAKM,EAAIC,CAAQ,MACfD,EAAIC,CAAQ,IAAI,CAAA,IAElBD,EAAIC,CAAQ,EAAE,KAAKJ,GAAkBH,CAAI,CAAC,GACnCM;AAAA,EACT,GAAG,CAAA,CAAE;AAEP;AAEA,eAAsBE,GAAW9B,GAAmB+B,GAAqC;AAEvF,UADc,MAAMnE,EAAA,GACP,KAAK,YAAYoC,CAAS,IAAI+B,CAAY,oBAAoB;AAC7E;AAEA,eAAsBC,KAA4D;AAEhF,QAAM5E,IAAM,OADE,MAAMQ,EAAA,GACI,IAAI,6BAA6B;AACzD,SAAO,OAAO,QAAQR,GAAK,IAAI,EAAE,IAAI,CAAC,CAAC6E,GAAO5F,CAAK,OAAO;AAAA,IACxD,OAAA4F;AAAA,IACA,OAAA5F;AAAA,EAAA,EACA;AACJ;AAEA,eAAsB6F,GAAeV,GAAoBb,GAA8B;AAErF,SAAO,OADO,MAAM/C,EAAA,GACD,KAAK,0BAA0B4D,CAAU,IAAI,mBAAmBb,CAAK,CAAC,EAAE;AAC7F;AAEA,eAAsBwB,GAAYX,GAAoBb,GAAeyB,GAAiC;AAEpG,SAAO,OADO,MAAMxE,EAAA,GACD,KAAK,uBAAuB4D,CAAU,IAAI,mBAAmBb,CAAK,CAAC,IAAIyB,GAAU;AAAA,IAClG,SAAS,EAAE,gBAAgB,iCAAA;AAAA,EAAiC,CAC7D;AACH;AAEA,eAAsBC,GAAmBb,GAA4F;AAGnI,UADY,OADE,MAAM5D,EAAA,GACI,IAAI,uBAAuB4D,CAAU,EAAE,IACnD;AACd;AAEA,eAAsBc,GAAcd,GAAmE;AAGrG,UADY,OADE,MAAM5D,EAAA,GACI,IAAI,yBAAyB4D,CAAU,EAAE,IACrD;AACd;AAEA,eAAsBe,GAAiBC,GAAqC;AAE1E,SAAO,OADO,MAAM5E,EAAA,GACD,OAAO,4BAA4B4E,CAAY,EAAE;AACtE;AAEA,eAAsBC,GAASnC,GAAaF,IAAc,MAAqB;AAE7E,QAAMhD,IAAM,OADE,MAAMQ,EAAA,GACI,KAAK0C,GAAKF,GAAQ;AAAA,IACxC,cAAc;AAAA,EAAA,CACf;AACD,EAAA9D,GAAac,GAAK,MAAM,mBAAmB;AAC7C;ACrfO,MAAMsF,KAAgB,CAACC,GAA6BtG,MAAe;AACxE,MAAIuG,IAAgB;AAQpB,SAAO,EAAE,KAPED,EAAQ,MAAM,CAAA7F,MAAU;AACjC,UAAM+F,IAAUC,GAAchG,GAAQT,CAAK;AAC3C,WAAKwG,MACHD,IAAgB9F,EAAO,eAElB+F;AAAA,EACT,CAAC,GACa,eAAAD,EAAA;AAChB,GAEaE,KAAgB,CAAChG,GAA0BT,MAAwB;AAC9E,QAAM,EAAE,UAAA0G,GAAU,eAAAC,EAAA,IAAkBlG;AACpC,SAAOmG,GAAYF,CAAQ,EAAEC,GAAe3G,CAAe;AAC7D,GAEM4G,KAAc;AAAA,EAClB,OAAO,CAACC,GAAmB7G,MACb,IAAI,OAAO6G,CAAS,EACrB,KAAK7G,CAAK;AAAA,EAEvB,UAAU,CAAC8G,GAAW9G,MACb,CAAC,CAACA;AAEb;;;;;;;;;;;;;;;ACnBA,UAAM+G,IAAQC,GACRC,IAAQC,GACRC,IAAQC,GAAWJ,GAAA,YAAC,GAEpBK,IAAW,CAACC,MACTjB,GAAcU,EAAM,aAAcO,CAAC,GAGtCC,IAAe,CAACD,MAA4B;AAChD,MAAAL,EAAM,SAASK,CAAC;AAAA,IAClB,GAEME,IAAgB,CAACF,MAA4B;AACjD,YAAMG,IAAQJ,EAASC,CAAC;AACxB,MAAAL,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC/CV,EAAM,YAAYA,EAAM,SAAS,SAAS,KAC5CA,EAAM,SAAS,QAAQ,CAAAW,MAAW;AAChC,QAAGA,EAAQ,UAAU,YACnBT,EAAMS,EAAQ,OAAOA,EAAQ,aAAaJ,CAAC;AAAA,MAE/C,CAAC;AAAA,IAEL;AAEA,IAAAK,EAAa;AAAA,MACX,WAAU;AACR,cAAMF,IAAQJ,EAASN,EAAM,UAAU;AACvC,eAAAE,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC5CA,EAAM;AAAA,MACf;AAAA,IAAA,CACD;;;;;;;;;;;;cAICG,EAMUC,GAAA;AAAA,IAAA,YALCC,EAAA;AAAA,IAAA,uBAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAF,EAAA,QAAKE;AAAA,IACd,eAAA;AAAA,IACC,UAAUF,EAAA,MAAM,YAAYA,EAAA,MAAM,OAAO;AAAA,IACzC,SAAOA,EAAA;AAAA,IACP,UAAQA,EAAA;AAAA,EAAA,GAAA,MAAA,GAAA,CAAA,cAAA,UAAA,CAAA;;;;;;;;;;;;;;;;;ACtCb,UAAMf,IAAQC,GACRC,IAAQC,GACRC,IAAQC,GAAWJ,GAAA,YAAC,GAEpBiB,IAAMnJ,EAAY,GAAG,GACrBoJ,IAAMpJ,EAAY,CAAC;AACzB,IAAAqJ,GAAU,MAAM;AACd,MAAIpB,EAAM,eACRA,EAAM,YAAY,QAAQ,CAACO,MAAM;AAC/B,QAAIA,EAAE,aAAa,UACjBW,EAAI,QAAQX,EAAE,gBAEZA,EAAE,aAAa,UACjBY,EAAI,QAAQZ,EAAE;AAAA,MAElB,CAAC;AAAA,IAEL,CAAC;AAED,UAAMD,IAAW,CAACC,MACTjB,GAAcU,EAAM,aAAcO,CAAC,GAGtCC,IAAe,CAACD,MAAqB;AACzC,MAAAL,EAAM,SAASK,CAAC;AAAA,IAClB,GAEME,IAAgB,CAACF,MAAqB;AAC1C,YAAMG,IAAQJ,EAASC,CAAC;AACxB,MAAAL,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC/CV,EAAM,YAAYA,EAAM,SAAS,SAAS,KAC5CA,EAAM,SAAS,QAAQ,CAAAW,MAAW;AAChC,QAAGA,EAAQ,UAAU,YACnBT,EAAMS,EAAQ,OAAOA,EAAQ,aAAaJ,CAAC;AAAA,MAE/C,CAAC;AAAA,IAEL;AAEA,IAAAK,EAAa;AAAA,MACX,WAAU;AACR,cAAMF,IAAQJ,EAASN,EAAM,UAAU;AACvC,eAAAE,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC5CA,EAAM;AAAA,MACf;AAAA,IAAA,CACD;;;;;;;cAICG,EAOgBQ,GAAA;AAAA,IAAA,YANLN,EAAA;AAAA,IAAA,uBAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAF,EAAA,QAAKE;AAAA,IACd,WAAA;AAAA,IACC,UAAUF,EAAA,MAAM;AAAA,IAChB,KAAKA,EAAA;AAAA,IACL,SAAOA,EAAA;AAAA,IACP,UAAQA,EAAA;AAAA,EAAA,GAAA,MAAA,GAAA,CAAA,cAAA,YAAA,KAAA,CAAA;;;;;;;;;;;;;;;;;ACzDb,UAAMf,IAAQC,GACRC,IAAQC,GAORmB,IAAUvJ,EAAa,EAAK,GAC5BwJ,IAAWxJ,EAAoBiI,EAAM,OAAO,WAAW,CAAA,CAAE,GAEzDI,IAAQC,GAAWJ,GAAA,YAAC,GAEpBK,IAAW,CAACC,MACTjB,GAAcU,EAAM,aAAcO,CAAC,GAItCiB,IAAgBC,EAAS,MAAM;AACnC,YAAMC,IAAiD,CAAA;AACvD,aAAI1B,EAAM,YAAYA,EAAM,SAAS,SAAS,KAC5CA,EAAM,SAAS,QAAQ,CAAAW,MAAW;AAChC,QAAAe,EAASf,EAAQ,KAAK,IAAI,CAACJ,MAAe;AAGxC,UAAAL,EAAMS,EAAQ,OAAOA,EAAQ,aAAaJ,CAAC;AAC3C,gBAAMG,IAAQJ,EAASC,CAAC;AACxB,UAAAL,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa;AAAA,QAErD;AAAA,MACF,CAAC,GAQIgB;AAAA,IACT,CAAC,GAEKC,IAAc,YAAY;AAC9B,MAAI3B,EAAM,OAAO,uBACfuB,EAAS,QAAQ,MAAMvD,GAAWgC,EAAM,OAAO,kBAAkB;AAAA,IAErE;AACA,IAAAoB,GAAUO,CAAW;AAErB,UAAMlB,IAAgB,CAACF,MAAe;AACpC,MAAAL,EAAM,qBAAqBK,CAAC;AAC5B,YAAMG,IAAQJ,EAASC,CAAC;AACxB,MAAAL,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC/CV,EAAM,YAAYA,EAAM,SAAS,SAAS,KAC5CA,EAAM,SAAS,QAAQ,CAAAW,MAAW;AAChC,QAAGA,EAAQ,UAAU,YACnBT,EAAMS,EAAQ,OAAOA,EAAQ,aAAaJ,CAAC;AAAA,MAE/C,CAAC;AAAA,IAEL;AAEA,IAAAK,EAAa;AAAA,MACX,WAAU;AACR,cAAMF,IAAQJ,EAASN,EAAM,UAAU;AACvC,eAAAE,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC5CA,EAAM;AAAA,MACf;AAAA,IAAA,CACD;;;;;;;cAICG,EAIUe,GAAA;AAAA,IAJD,eAAA;AAAA,IAAA,YAAqBb,EAAA;AAAA,IAAA,uBAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAF,EAAA,QAAKE;AAAA,IAAG,SAASF,EAAA;AAAA,IAAU,iBAAe;AAAA,IAAO,gBAAc;AAAA,IAAO,UAAUA,QAAM,OAAO;AAAA,IAAW,UAAQA,EAAA;AAAA,EAAA,GAAA;AAAA,eAClI,MAAwB;AAAA,OAAAc,EAAA,EAAA,GAAlCC,EAEWC,GAAA,MAAAC,EAFcjB,EAAA,UAAQ,CAAhB7C,YACf2C,EAA2DoB,GAAA;AAAA,QAAA,KADpB/D,EAAK;AAAA,QAClC,OAAOA,EAAK;AAAA,QAAQ,OAAOA,EAAK;AAAA,MAAA,GAAA,MAAA,GAAA,CAAA,SAAA,OAAA,CAAA;;;;;;;;;;;;;AC3EhD,UAAM8B,IAAQC,GAIRC,IAAQC,GAKRoB,IAAWxJ,EAAoBiI,EAAM,OAAO,WAAW,CAAA,CAAE,GAEzDS,IAAgB,CAACF,MAA+B;AACpD,MAAAL,EAAM,qBAAqBK,CAAC,GAC5BL,EAAM,UAAUK,CAAC;AAAA,IACnB;AAEA,IAAAa,GAAU,YAAY;AACpB,UAAIpB,EAAM,QAAQ;AAChB,cAAM9C,IAAM8C,EAAM,OAAO;AACzB,YAAI9C,GAAK;AAEP,gBAAMlD,IAAM,OADE,MAAMQ,EAAA,GACI,IAAI0C,CAAG;AAC/B,UAAAqE,EAAS,QAAQvH,EAAI;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAMkI,IAAa,EAAE,OAAO,OAAO,OAAO,QAAA;AAE1C,IAAAtB,EAAa;AAAA,MACX,WAAU;AACR,eAAO;AAAA,MACT;AAAA,IAAA,CACD;;;;;;;cAICC,EASSsB,GAAA;AAAA,IATD,WAAU;AAAA,IAAW,MAAK;AAAA,EAAA,GAAA;AAAA,eAChC,MAOE;AAAA,MAPFC,EAOEC,GAAA;AAAA,QANC,eAAatB,EAAA;AAAA,QACb,eAAauB,EAAA;AAAA,QACb,SAASvB,EAAA;AAAA,QACT,OAAO,EAAA,OAAA,QAAA;AAAA,QACR,aAAY;AAAA,QACX,UAAQA,EAAA;AAAA,MAAA,GAAA,MAAA,GAAA,CAAA,eAAA,SAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;ACrCf,UAAMf,IAAQC,GAGRC,IAAQC,GAERoC,IAAUxK,EAA+B,EAAE;AAEjD,IAAAqJ,GAAU,YAAY;AACpB,YAAM3G,IAAQ,MAAMJ,GAAA;AACpB,MAAAkI,EAAQ,QAAQ;AAAA,QACd,eAAe,UAAU9H,CAAK;AAAA,MAAA;AAAA,IAElC,CAAC;AAED,UAAM6F,IAAW,CAACC,MACTjB,GAAcU,EAAM,aAAcO,CAAC,GAEtC7G,IAASC,GAAA,GACT6I,IAAU9I,EAAO,SACjB+I,IAAY1K,EAA2B,IAAI,GAE3CqF,IAAKrF,EAAY,EAAE;AAEzB,aAAS2K,EAAsBxF,GAAakB,GAAoBxB,GAA2B;AACzF,aAAOM,EAAI,QAAQ,iBAAiBkB,CAAU,EAAE,QAAQ,gBAAgBxB,CAAS;AAAA,IACnF;AAEA,UAAM+F,IAASlB,EAAiB,MAAM;AACpC,UAAIzB,EAAM,OAAO,WAAW;AAC1B,cAAM9C,IAAMsF,IAAUxC,EAAM,OAAO;AAEnC,eADoB0C,EAAsBxF,GAAKE,EAAG,OAAO4C,EAAM,SAAS;AAAA,MAE1E;AACA,aAAO;AAAA,IACT,CAAC,GAEK4C,IAAS,CAACpK,MAAW;AACzB,MAAAA,EAAE,gBAAA,GACFiK,EAAU,MAAM,OAAA;AAAA,IAClB;AAEA,aAASI,EAAe7F,GAAa;AACnC,YAAM,EAAE,MAAAsB,GAAM,MAAAwE,EAAA,IAAS9F,GACjB5D,IAAW0J,KAAQxE,EAAK;AAC9B,aAAO,IAAI,QAAQ,CAACpG,GAAS6K,MAAW;AACtC,QAAAC,GAAM,QAAQ;AAAA,UACZ,OAAO;AAAA,UACP,SAAS,mCAAmC5J,CAAQ;AAAA,UACpD,MAAM,OAAO;AACX,gBAAI4D,EAAO,WAAW,UAChBgD,EAAM,OAAO;AACf,2BAAMA,EAAM,OAAO,WAAWhD,EAAO,GAAG,GACjC9E,EAAQ,EAAI;AAGvB,YAAAA,EAAQ,EAAI;AAAA,UACd;AAAA,UACA,UAAU,MAAM6K,EAAO,QAAQ;AAAA,QAAA,CAChC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,UAAME,IAAuBlL,EAAmC,IAAI,GAC9DmL,IAAsBnL,EAAqC,IAAI,GAG/DoL,IAAsB,CAACC,MAAuB;AAClD,MAAIH,EAAqB,UACvBA,EAAqB,MAAMG,CAAQ,GACnCH,EAAqB,QAAQ,MAC7BC,EAAoB,QAAQ;AAAA,IAEhC,GAGMG,KAAoB,CAACD,MAAuB;AAChD,MAAIF,EAAoB,UACtBA,EAAoB,MAAME,CAAQ,GAClCH,EAAqB,QAAQ,MAC7BC,EAAoB,QAAQ;AAAA,IAEhC,GAEMI,IAAavL,EAAgB,EAAE,GAC/BwL,IAAW,CAACC,MAAyB;AACzC,MAAAF,EAAW,QAAQE,EAAS,OAAO,CAAAlF,MAAQA,EAAK,WAAW,MAAM;AAAA,IACnE;AAEA,IAAAsC,EAAa;AAAA,MACX,OAAOxC,GAAoB;AACzB,eAAO,IAAI,QAAQ,CAAClG,GAAS6K,MAAW;AACtC,UAAIN,EAAU,SACRzC,EAAM,OAAO,cACf5C,EAAG,QAAQgB,IAGb6E,EAAqB,QAAQ/K,GAC7BgL,EAAoB,QAAQH,GACxBO,EAAW,MAAM,SACnBG,GAAS,MAAM;AACb,YAAAhB,EAAU,OAAO,OAAA;AAAA,UACnB,CAAC,IAGDvK,EAAQkG,CAAU,KAIpBlG,EAAQkG,CAAU;AAAA,QAEtB,CAAC;AAAA,MACH;AAAA,MACA,WAAW;AACT,cAAMsF,IAAe1D,EAAM,OAAO,SAAS,CAAA,GACrC/G,IAAQ,CAAC,GAAGqK,EAAW,OAAO,GAAGI,CAAY,EAAE,SAAS,IAAI,YAAY,IACxEhD,IAAQJ,EAASrH,CAAK;AAC5B,eAAAiH,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC5CA,EAAM;AAAA,MACf;AAAA,IAAA,CACD;;;;;;;cAICG,EAWW8C,GAAA;AAAA,IAXD,KAAI;AAAA,IAAa,qBAAmB5C,QAAM,OAAO;AAAA,IAAQ,QAAQA,EAAA;AAAA,IAAS,OAAOA,QAAM,OAAO;AAAA,IACrG,eAAa;AAAA,IAAO,MAAK;AAAA,IAAS,SAASA,EAAA;AAAA,IAAU,UAAQA,EAAA;AAAA,IAAW,gBAAeA,EAAA;AAAA,IACvF,WAASA,EAAA;AAAA,IAAsB,SAAOA,EAAA;AAAA,EAAA,GAAA;AAAA,IAC5B,cAAU6C,EAArB,MAAiC5C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAA,EAAA;AAAA,IACtB,iBAAa4C,EACtB,MAA+C;AAAA,MAA/CxB,EAA+CyB,GAAA,EAArC,MAAK,UAAA,GAAS;AAAA,QAAA,SAAAD,EAAC,MAAW5C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,UAAA8C,GAAX,eAAW,EAAA;AAAA,QAAA,EAAA;AAAA;;;;;;;;;;;;;;;;;;;ACpI1C,UAAM9D,IAAQC,GACRC,IAAQC,GAERG,IAAW,CAACC,MACTjB,GAAcU,EAAM,aAAcO,CAAC,GAGtCC,IAAe,CAACD,MAA4B;AAChD,MAAAL,EAAM,qBAAqBK,CAAC,GAC5BL,EAAM,SAASK,CAAC;AAAA,IAClB,GAEME,IAAgB,CAACF,MAA4B;AACjD,MAAAL,EAAM,qBAAqBK,CAAC;AAC5B,YAAMG,IAAQJ,EAASC,CAAC;AACxB,MAAAL,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC/CV,EAAM,YAAYA,EAAM,SAAS,SAAS,KAC5CA,EAAM,SAAS,QAAQ,CAAAW,MAAW;AAChC,QAAGA,EAAQ,UAAU,YACnBT,EAAMS,EAAQ,OAAOA,EAAQ,aAAaJ,CAAC;AAAA,MAE/C,CAAC;AAAA,IAEL;AAEA,IAAAK,EAAa;AAAA,MACX,WAAU;AACR,cAAMF,IAAQJ,EAASN,EAAM,UAAU;AACvC,eAAAE,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC5CA,EAAM;AAAA,MACf;AAAA,IAAA,CACD;;;;;;;cAIGG,EAOEkD,GAAA;AAAA,IANG,eAAahD,EAAA,MAAM;AAAA,IACpB,aAAY;AAAA,IACZ,eAAA;AAAA,IACC,UAAUA,EAAA,MAAM;AAAA,IAChB,SAAOA,EAAA;AAAA,IACP,UAAQA,EAAA;AAAA,EAAA,GAAA,MAAA,GAAA,CAAA,eAAA,UAAA,CAAA;;;;;;;;;;;;;;;;;ACxCjB,UAAMf,IAAQC,GACRC,IAAQC,GACRC,IAAQC,GAAWJ,GAAA,YAAC,GAEpBK,IAAW,CAACC,MACTjB,GAAcU,EAAM,aAAcO,CAAC,GAGtCE,IAAgB,CAACF,MAA4B;AACjD,YAAMG,IAAQJ,EAASC,CAAC;AACxB,MAAAL,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC/CV,EAAM,YAAYA,EAAM,SAAS,SAAS,KAC5CA,EAAM,SAAS,QAAQ,CAAAW,MAAW;AAChC,QAAGA,EAAQ,UAAU,YACnBT,EAAMS,EAAQ,OAAOA,EAAQ,aAAaJ,CAAC;AAAA,MAE/C,CAAC;AAAA,IAEL;AAEA,IAAAK,EAAa;AAAA,MACX,WAAU;AACR,cAAMF,IAAQJ,EAASN,EAAM,UAAU;AACvC,eAAAE,EAAM,SAASQ,EAAM,MAAM,KAAKA,EAAM,aAAa,GAC5CA,EAAM;AAAA,MACf;AAAA,IAAA,CACD;;;;;;;cAICG,EAKgBmD,GAAA;AAAA,IAAA,YAJLjD,EAAA;AAAA,IAAA,uBAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAF,EAAA,QAAKE;AAAA,IACd,WAAA;AAAA,IACC,UAAUF,EAAA,MAAM,YAAYA,EAAA,MAAM,OAAO;AAAA,IACzC,UAAQA,EAAA;AAAA,EAAA,GAAA;AAAA,eACV,MAAGC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,MAAA8C,GAAH,OAAG,EAAA;AAAA,IAAA,EAAA;AAAA;;;;gFC5CAG,KAA6B,OAAO,oBAAoB,GCGxDC,KAAe,QACfC,KAAqB,SAcrBC,KAAe,CAACC,MAAkB;AACtC,MAAIC,GAAIC,GAAIC;AACZ,QAAM5K,IAAWC,GAAkB,GAC7B4K,IAAiBC,GAAOT,IAA4B,MAAM;AAG9D,SAAO,IAFOO,KAAMD,IAAuCE,GAAe,cAAc,OAAOF,KAAMD,IAAiC1K,GAAS,WAAW,OAAO,iBAAiBuK,EAAkB,MAAM,OAAO,SAASG,EAAG,gBAAgB,OAAOE,IAAKN,EAEzO,IAAIG,CAAa;AAGrC,GC3BMxH,KAAM,OAAO,UAAU;AAmB7B,SAAS8H,GAASC,GAAK;AACrB,SAAO/H,GAAI,KAAK+H,CAAG,MAAM,qBAAqBA,MAAQA;AACxD;ACrBA,IAAIC,KAAc,CAACC,GAAK9E,MAAU;AAChC,aAAW,CAAC3H,GAAK0M,CAAG,KAAK/E;AACvB,IAAA8E,EAAIzM,CAAG,IAAI0M;AAEb,SAAOD;AACT;ACDA,MAAME,KAAYC,EAAgB;AAAA,EAChC,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM,CAAC,QAAQ,MAAM;AAAA,IAC3B;AAAA,IACI,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA,IACI,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAChM,MACH,CAAC,QAAQ,SAAS,QAAQ,EAAE,SAASA,CAAK;AAAA,IAEzD;AAAA,IACI,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAACA,MACH,CAAC,QAAQ,SAAS,SAAS,cAAc,OAAO,EAAE,SAASA,CAAK;AAAA,IAE/E;AAAA,IACI,QAAQ;AAAA,IACR,MAAM;AAAA,EACV;AAAA,EACE,OAAO;AAAA,IACL,OAAO,CAACiM,MAAO;AAAA,EACnB;AAAA,EACE,MAAMlF,GAAO,EAAE,MAAAmF,KAAQ;AACrB,UAAMC,IAAYhB,GAAa,MAAM,GAC/BiB,IAAM5D,EAAS,MAAM,CAAC2D,GAAW,GAAGA,CAAS,oBAAoB,EAAE,CAAC,GAAGA,CAAS,OAAO,GAAGpF,EAAM,KAAI,CAAE,CAAC,GACvGsF,IAAa7D,EAAS,MAAM;AAChC,YAAM8D,IAAS,CAAA;AACf,aAAIvF,EAAM,SACRuF,EAAO,WAAWZ,GAAS3E,EAAM,IAAI,IAAI,GAAGA,EAAM,IAAI,OAAOA,EAAM,OAEjEA,EAAM,WACRuF,EAAO,YAAY,UAAUvF,EAAM,MAAM,SAEpCuF;AAAA,IACT,CAAC;AAID,WAAO;AAAA,MACL,KAAAF;AAAA,MACA,YAAAC;AAAA,MACA,SANc,CAACJ,MAAO;AACtB,QAAAC,EAAK,SAASD,CAAE;AAAA,MAClB;AAAA,IAKJ;AAAA,EACE;AACF,CAAC,GACKM,KAAa,CAAC,gBAAgB,kBAAkB,iBAAiB;AACvE,SAASC,GAAYC,GAAM1E,GAAQsB,GAAQvB,GAAQ4E,GAAOC,GAAU;AAClE,SAAOC,EAAS,GAAIC,EAAmB,OAAO;AAAA,IAC5C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAOC,GAAeL,EAAK,GAAG;AAAA,IAC9B,OAAOM,GAAeN,EAAK,UAAU;AAAA,IACrC,gBAAgBA,EAAK;AAAA,IACrB,kBAAkBA,EAAK;AAAA,IACvB,mBAAmBA,EAAK;AAAA,IACxB,SAAS1E,EAAO,CAAC,MAAMA,EAAO,CAAC,IAAI,IAAIiF,MAASP,EAAK,WAAWA,EAAK,QAAQ,GAAGO,CAAI;AAAA,EACxF,GAAKjF,EAAO,CAAC,MAAMA,EAAO,CAAC,IAAI;AAAA,IAC3BkF,EAAmB,QAAQ,EAAE,GAAG,4EAA2E,GAAI,MAAM,EAAE;AAAA,IACvHA,EAAmB,QAAQ,EAAE,GAAG,4HAA2H,GAAI,MAAM,EAAE;AAAA,EAC3K,IAAM,IAAIV,EAAU;AACpB;AACA,IAAIW,KAAsC,gBAAAtB,GAAYG,IAAW,CAAC,CAAC,UAAUS,EAAW,CAAC,CAAC;AC1E1F,MAAMW,KAAqB,OAAO,OAAOD,IAAqB;AAAA,EAC5D,SAAS,CAACE,GAAK/K,MAAY;AACzB,QAAIgJ;AACJ,UAAMgC,KAAchC,IAAgChJ,GAAQ,eAAe,OAAOgJ,IAAK;AACvF,IAAA+B,EAAI,UAAUC,IAAaH,GAAoB,MAAMA,EAAmB;AAAA,EAC1E;AACF,CAAC,GCHKnB,KAAYC,EAAgB;AAAA,EAChC,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM,CAAC,QAAQ,MAAM;AAAA,IAC3B;AAAA,IACI,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA,IACI,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAChM,MACH,CAAC,QAAQ,SAAS,QAAQ,EAAE,SAASA,CAAK;AAAA,IAEzD;AAAA,IACI,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAACA,MACH,CAAC,QAAQ,SAAS,SAAS,cAAc,OAAO,EAAE,SAASA,CAAK;AAAA,IAE/E;AAAA,IACI,QAAQ;AAAA,IACR,MAAM;AAAA,EACV;AAAA,EACE,OAAO;AAAA,IACL,OAAO,CAACiM,MAAO;AAAA,EACnB;AAAA,EACE,MAAMlF,GAAO,EAAE,MAAAmF,KAAQ;AACrB,UAAMC,IAAYhB,GAAa,MAAM,GAC/BiB,IAAM5D,EAAS,MAAM,CAAC2D,GAAW,GAAGA,CAAS,aAAa,EAAE,CAAC,GAAGA,CAAS,OAAO,GAAGpF,EAAM,KAAI,CAAE,CAAC,GAChGsF,IAAa7D,EAAS,MAAM;AAChC,YAAM8D,IAAS,CAAA;AACf,aAAIvF,EAAM,SACRuF,EAAO,WAAWZ,GAAS3E,EAAM,IAAI,IAAI,GAAGA,EAAM,IAAI,OAAOA,EAAM,OAEjEA,EAAM,WACRuF,EAAO,YAAY,UAAUvF,EAAM,MAAM,SAEpCuF;AAAA,IACT,CAAC;AAID,WAAO;AAAA,MACL,KAAAF;AAAA,MACA,YAAAC;AAAA,MACA,SANc,CAACJ,MAAO;AACtB,QAAAC,EAAK,SAASD,CAAE;AAAA,MAClB;AAAA,IAKJ;AAAA,EACE;AACF,CAAC,GACKM,KAAa,CAAC,gBAAgB,kBAAkB,iBAAiB;AACvE,SAASC,GAAYC,GAAM1E,GAAQsB,GAAQvB,GAAQ4E,GAAOC,GAAU;AAClE,SAAOC,EAAS,GAAIC,EAAmB,OAAO;AAAA,IAC5C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAOC,GAAeL,EAAK,GAAG;AAAA,IAC9B,OAAOM,GAAeN,EAAK,UAAU;AAAA,IACrC,gBAAgBA,EAAK;AAAA,IACrB,kBAAkBA,EAAK;AAAA,IACvB,mBAAmBA,EAAK;AAAA,IACxB,SAAS1E,EAAO,CAAC,MAAMA,EAAO,CAAC,IAAI,IAAIiF,MAASP,EAAK,WAAWA,EAAK,QAAQ,GAAGO,CAAI;AAAA,EACxF,GAAKjF,EAAO,CAAC,MAAMA,EAAO,CAAC,IAAI;AAAA,IAC3BkF,EAAmB,QAAQ,EAAE,GAAG,2DAA0D,GAAI,MAAM,EAAE;AAAA,EAC1G,IAAM,IAAIV,EAAU;AACpB;AACA,IAAIe,KAAgC,gBAAA1B,GAAYG,IAAW,CAAC,CAAC,UAAUS,EAAW,CAAC,CAAC;ACzEpF,MAAMe,KAAe,OAAO,OAAOD,IAAe;AAAA,EAChD,SAAS,CAACF,GAAK/K,MAAY;AACzB,QAAIgJ;AACJ,UAAMgC,KAAchC,IAAgChJ,GAAQ,eAAe,OAAOgJ,IAAK;AACvF,IAAA+B,EAAI,UAAUC,IAAaC,GAAc,MAAMA,EAAa;AAAA,EAC9D;AACF,CAAC;;;;;;;;ACFD,UAAMvG,IAAQC,GAKRwG,IAAc,CAACxN,MACZA,EAAM,SAAS,KAAK,OAAOA,EAAM,CAAC,KAAM,UAG3CyN,IAAejF,EAAmB,MAC/BgF,EAAYzG,EAAM,UAAU,IAAI,CAAA,IAAKA,EAAM,UACnD,GAEK2G,IAAalF,EAAiB,MAC3BgF,EAAYzG,EAAM,UAAU,IAAIA,EAAM,aAAa,CAAA,CAC3D;;;;;IAgBiBwF,KAAA,EAAA,OAAM,gBAAA,GAGFoB,KAAA,EAAA,OAAM,oBAAA;;;AAfT,SAAA7F,EAAA,MAAM,kBAAvBF,EA4BYgG,GAAA;AAAA,IAAA,KAAA;AAAA,IA5BsB,oBAAiB;AAAA,EAAA,GAAA;AAAA,IACtC,SAAOjD,EAChB,MAIW;AAAA,MAJK7C,eAAa,UAAAc,EAAA,EAAA,GAC3BC,EAEWC,GAAA,EAAA,KAAA,EAAA,GAAAC,EAFgBjB,EAAA,cAAY,CAAtB+F,YACfhF,EAAmB,KAAA,EAAA,KAD0BgF,EAAA,GAAMC,EAC7CD,CAAM,GAAA,CAAA,EAAA,GAAA,GAAA,MAAAjF,EAAA,EAAA,GAIdC,EAgBWC,GAAA,EAAA,KAAA,EAAA,GAAAC,EAhBgBjB,EAAA,YAAU,CAApB+F,YACfhF,EAcK,MAAA;AAAA,QAAA,KAfsCgF,EAAO;AAAA,QAC9C,OAAM;AAAA,MAAA,GAAA;AAAA,QACRE,EAYK,MAAA,MAAA;AAAA,UAXHA,EAAyB,KAAA,MAAAD,EAAnBD,EAAO,KAAK,GAAA,CAAA;AAAA,UAClBE,EASK,MATLxB,IASK;AAAA,aAAA3D,EAAA,EAAA,GARHC,EAOKC,GAAA,MAAAC,EAPc8E,EAAO,OAAK,CAApB5I,YAAX4D,EAOK,MAAA;AAAA,cAP6B,KAAK5D,EAAK;AAAA,YAAA,GAAA;AAAA,cAC1C8I,EAAuB,KAAA,MAAAD,EAAjB7I,EAAK,KAAK,GAAA,CAAA;AAAA,cAChB8I,EAIK,MAJLJ,IAIK;AAAA,iBAAA/E,EAAA,EAAA,GAHHC,EAEKC,GAAA,MAAAC,EAFiB9D,EAAK,OAAK,CAArB+I,OAAXpF,EAAA,GAAAC,EAEK,cADAmF,CAAO,GAAA,CAAA,EAAA,GAAA,GAAA;AAAA;;;;;;eAU5B,MAAmC;AAAA,MAAnC7E,EAAmCrB,EAAA,oBAAA,EAAf,OAAM,OAAA,CAAM;AAAA,IAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;ACjCpC,UAAMf,IAAQC,GACRC,IAAQC,GACRC,IAAQC,GAAWJ,GAAA,YAAC,GAEpBiH,IAAYC,GAAe,WAAW,GAOtCC,IAAU3F,EAAS,MAAM;AAC7B,cAAQzB,EAAM,QAAQ,QAAQ,QAAA;AAAA,QAC5B,KAAK;AACH,iBAAOqH;AAAA,QACT,KAAK;AACH,iBAAOC;AAAA,QACT,KAAK;AACH,iBAAOC;AAAA,QACT,KAAK;AACH,iBAAOC;AAAA,QACT,KAAK;AACH,iBAAOC;AAAA,QACT,KAAK;AACH,iBAAOC;AAAA,QACT,KAAK;AACH,iBAAOH;AAAA,QACT,KAAK;AACH,iBAAOI;AAAA,QACT;AACE,iBAAON;AAAA,MAAA;AAAA,IAEb,CAAC,GAEKO,IAAS7P,EAAY,EAAE,GACvB8P,IAAa,CAACtH,MAAc;AAChC,MAAAqH,EAAO,QAAQrH;AAAA,IACjB,GAEME,IAAgB,CAACqH,GAAqBvH,MAAiB;AAC3D,MAAAL,EAAM,UAAU4H,GAAavH,CAAC;AAAA,IAChC;AAGA,aAASwH,IAAe;AACtB,aAAO/H,EAAM,QAAQ,QAAQ,WAAW;AAAA,IAC1C;AAEA,aAASgI,EAAYC,GAAuB;AAC1C,aAAGA,MAAU,yBACJ,sBAENA,MAAU,sBACJ,KAEFA;AAAA,IACT;AAEA,IAAArH,EAAa;AAAA,MACX,eAAc;AACZ,eAAOZ,EAAM,QAAQ,QAAQ,WAAW;AAAA,MAC1C;AAAA,MACA,OAAO5B,GAAoB;AACzB,eAAI2J,MACMb,EAAU,MAA0C,OAAO9I,CAAU,IAExE,QAAQ,QAAQA,CAAU;AAAA,MACnC;AAAA,MACA,WAAU;AACR,eAAQ8I,EAAU,OAAyC,SAAA;AAAA,MAC7D;AAAA,MACA,cAAa;AACX,eAAOlH,GAAO,QAAQ,QAAQ;AAAA,MAChC;AAAA,IAAA,CACD;;;;IAKQwF,KAAA,EAAA,OAAM,QAAA;;EAEH,OAAM;;;EAmBkB,OAAM;;;cAtBxC1D,EAwBM,OAAA,MAAA;AAAA,IAvBJkF,EAOM,OAPNxB,IAOM;AAAA,MAAA1B,GAAAiD,EANDhG,cAAYA,EAAA,OAAO,QAAQ,QAAQ,KAAK,KAAI,KAC/C,CAAA;AAAA,MAA6BA,QAAM,OAAO,YAAY,eAAtDe,EAAsE,QAAtE8E,IAA8D,GAAC,KAAAsB,GAAA,IAAA,EAAA;AAAA,MAC/D9F,EAGErB,EAAA,SAAA;AAAA,QAFC,cAAYA,EAAA,MAAM,OAAO,QAAQ,aAAS;AAAA,QAC1C,eAAaA,EAAA,MAAM,OAAO,QAAQ,cAAU,CAAA;AAAA,MAAA,GAAA,MAAA,GAAA,CAAA,cAAA,aAAA,CAAA;AAAA;IAGjDiG,EAcM,OAAA,MAAA;AAAA,OAAAnF,EAAA,GAbJhB,EAWasH,GATNpH,EAAA,OAAO,GAAA;AAAA,QADZ,KAAI;AAAA,QAAA,YAEKA,EAAA;AAAA,QAAA,uBAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAF,EAAA,QAAKE;AAAA,QACb,aAAWF,EAAA,MAAM;AAAA,QACjB,QAAQA,QAAM,OAAO;AAAA,QACrB,aAAaA,QAAM,OAAO;AAAA,QAC1B,UAAUA,QAAM,OAAO;AAAA,QACvB,cAAYA,EAAA,MAAM;AAAA,QAClB,SAAOA,EAAA;AAAA,QACP,UAAQA,EAAA;AAAA,MAAA,GAAA,MAAA,IAAA,CAAA,cAAA,aAAA,UAAA,eAAA,YAAA,YAAA,CAAA;AAAA,MAEAA,EAAA,OAAO,SAAM,KAAAc,EAAA,GAAxBC,EAAgE,OAAhEsG,IAAgErB,EAAfhG,EAAA,MAAM,GAAA,CAAA,KAAAmH,GAAA,IAAA,EAAA;AAAA;;;;;;;;;;;;;ACnH7D,UAAMlI,IAAQC,GAERC,IAAQC;AAEd,aAASkI,IAAe;AACtB,MAAAnI,EAAM,SAASF,EAAM,KAAKA,EAAM,YAAY;AAAA,IAC9C;;;;;;;cAICa,EAEUyH,GAAA;AAAA,IAFA,SAAShG,EAAA;AAAA,IAAS,MAAK;AAAA,IAAW,SAAOvB,EAAA;AAAA,EAAA,GAAA;AAAA,eAChD,MAAa;AAAA,MAAbwH,GAAa7C,EAAA,QAAA,SAAA;AAAA,IAAA,CAAA;AAAA;;;;;;;;;;;;;ACXjB,UAAM1F,IAAQC,GAERC,IAAQC;AAEd,aAASkI,IAAe;AACtB,MAAAnI,EAAM,SAASF,EAAM,KAAKA,EAAM,YAAY;AAAA,IAC9C;;;;;;;cAIAa,EAEQ2H,GAAA,EAFA,SAAOzH,EAAA,gBAAY;AAAA,IAAA,SAAA6C,EACvB,MAAa;AAAA,MAAb2E,GAAa7C,EAAA,QAAA,SAAA;AAAA,IAAA,CAAA;AAAA;;;;;;;;;;;;ACLjB,UAAM1F,IAAQC,GAKRC,IAAQC;AAEd,aAASkI,EAAanL,GAAauL,GAA4B;AAC7D,MAAAvI,EAAM,SAASF,EAAM,OAAO,QAAQ9C,GAAKuL,GAAczI,EAAM,OAAO,KAAK;AAAA,IAC3E;AAEA,UAAMoH,IAAU3F,EAAS,MAAM;AAC7B,cAAQzB,EAAM,OAAO,UAAA;AAAA,QACnB,KAAK;AACH,iBAAO0I;AAAA,QACT,KAAK;AACH,iBAAOC;AAAA,QACT;AACE,iBAAOD;AAAA,MAAA;AAAA,IAEb,CAAC,GAEKE,IAASnH,EAAS,MAClBzB,EAAM,OAAO,WAAWvE,EAAe,SAClCuE,EAAM,OAAO,cAAc,KACzBA,EAAM,OAAO,WAAWvE,EAAe,OACzCuE,EAAM,OAAO,eAAe,KAE9B,EACR,GAEKyI,IAAehH,EAAS,MACrBzB,EAAM,OAAO,gBAAgB,SACrC;;;;;AAIC,SAAA6B,EAAA,GAAAhB,EAQYsH,GAPLpH,EAAA,OAAO,GAAA;AAAA,IACX,KAAKA,EAAA;AAAA,IACL,iBAAeA,EAAA;AAAA,IACf,SAASuB,EAAA;AAAA,IACT,SAAOvB,EAAA;AAAA,EAAA,GAAA;AAAA,eAEV,MAAwB;AAAA,MAAA+C,GAAAiD,EAArBhG,EAAA,MAAM,OAAO,KAAK,GAAA,CAAA;AAAA,IAAA,CAAA;AAAA;;;6ECjDV8H,KAAkC,OAAO,gBAAgB;AAE/D,SAASC,KAA2B;AAEzC,QAAMC,IAAiBrE,GAAOmE,IAAW,IAAI;AAC7C,SAAIE,KAKGC,GAAA;AACT;ACZO,MAAMC,KAAqE,OAAO,kBAAkB;AAEpG,SAASC,KAAuD;AAErE,QAAMC,IAAmBzE,GAAOuE,IAAa,IAAI;AACjD,SAAIE,KAKG,CAAA;AACT;ACXO,MAAMC,KAAgC,OAAO,eAAe,GAEtDC,KAAmC,OAAO,kBAAkB,GAE5DC,KAAmC,OAAO,kBAAkB;AAOlE,SAASC,KAAmB;AAEjC,SAAO7E,GAAO2E,IAAa,IAAI;AACjC;AAEO,SAASG,KAAmB;AAEjC,SAAO9E,GAAO4E,IAAa,IAAI;AACjC;;;;;;;;;;;;;ICbO9D,KAAA,EAAA,OAAM,UAAA,GACJoB,KAAA,EAAA,OAAM,cAAA,GACJwB,KAAA,EAAA,OAAM,aAAA,GACNqB,KAAA,EAAA,OAAM,gBAAA,GAERC,KAAA,EAAA,OAAM,iBAAA,GAGAC,KAAA,EAAA,OAAM,aAAA;;;AARnB,SAAA9H,EAAA,GAAAC,EAeM,OAfN0D,IAeM;AAAA,IAdJwB,EAGM,OAHNJ,IAGM;AAAA,MAFJI,EAAyC,OAAzCoB,IAAyCrB,EAAdzE,EAAA,KAAK,GAAA,CAAA;AAAA,MAChC0E,EAA+C,OAA/CyC,IAA+C1C,EAAjBzE,EAAA,QAAQ,GAAA,CAAA;AAAA,IAAA,CAAA;AAAA,IAExC0E,EASM,OATN0C,IASM;AAAA,MARJtH,EAOYwH,GAAA,EAPD,SAAQ,QAAA,GAAO;AAAA,QACb,SAAOhG,EAChB,MAAyC;AAAA,UAAzCoD,EAAyC,OAAzC2C,IAAyC5C,EAAdzE,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA,CAAA;AAAA,mBAElC,MAEW;AAAA,UAFXF,EAEWyH,GAAA;AAAA,YAFA,MAAM;AAAA,YAAI,iBAAA;AAAA,YAAgB,OAAA,EAAA,QAAA,WAAA,YAAA,WAAA,OAAA,OAAA;AAAA,UAAA,GAAA;AAAA,uBACnC,MAAmC;AAAA,cAAA/F,GAAAiD,EAAhCzE,EAAA,MAAM,OAAM,CAAA,EAAI,YAAA,CAAW,GAAA,CAAA;AAAA,YAAA,CAAA;AAAA;;;;;;;;;ACZjC,SAASwH,GAAeC,GAAwB;AACrD,QAAMrQ,IAASC,GAAA,GACTqQ,IAAqD,CAAA;AAC3D,MAAItQ,EAAO,aAAa;AACtB,IAAAA,EAAO,YAAY,QAAQ,CAAAwE,MAAQ;AACjC,YAAM+L,IAAS/L,EAAK,KACjB,IAAI,OAAO6L,EAAO,KAAK,CAAAG,MAAKA,EAAE,aAAa7R,CAAG,CAAC,EAC/C,OAAO,OAAO;AACjB,MAAI4R,EAAO,UACTD,EAAO,KAAK,EAAE,MAAM9L,EAAK,MAAM,QAAA+L,GAAQ;AAAA,IAE3C,CAAC;AAED,UAAME,IAAczQ,EAAO,YAAY,QAAQ,CAAA0Q,MAAKA,EAAE,IAAI,GACpDC,IAASN,EAAO,OAAO,CAAA7L,MAAQ,CAACiM,EAAY,SAASjM,EAAK,QAAQ,CAAC;AACzE,WAAImM,EAAO,UACTL,EAAO,KAAK,EAAE,MAAM,uEAAuE,QAAQK,GAAQ,GAGtGL;AAAA,EACT;AACF;ACDA,MAAMM,GAAkC;AAAA,EAC9B;AAAA,EACA,YAAoB;AAAA,EACpB,QAA0C,EAAE,UAAU,IAAI,UAAU,CAAA,EAAC;AAAA,EACrE,MAA8B,EAAE,YAAY,GAAA;AAAA,EAEpD,cAAclM,GAAqB;AACjC,WAAKA,KAGL,KAAK,IAAI,aAAaA,GACf,QAHE;AAAA,EAIX;AAAA,EAEA,kBAAkBmM,GAAgC;AAChD,gBAAK,iBAAiBA,GACf;AAAA,EACT;AAAA,EAEA,aAAa3N,GAAmB;AAC9B,gBAAK,YAAYA,GACV;AAAA,EACT;AAAA,EAEA,SAASxE,GAAyC;AAChD,gBAAK,QAAQA,GACN;AAAA,EACT;AAAA,EAEA,OAAOyE,GAA6B;AAClC,gBAAK,MAAMA,GACJ;AAAA,EACT;AAAA,EAEA,QAAQ;AAEN,WAAK,KAAK,iBAOL,KAAK,IAAI,aAIP,IAAI2N,GAAK,KAAK,gBAAgB,KAAK,WAAW,KAAK,OAAO,KAAK,GAAG,IAHhE,IAAIA,GAAK,KAAK,gBAAgB,KAAK,WAAW,KAAK,KAAK,IAP1D,KAAK,IAAI,aAGP,IAAIA,GAAK9O,GAAe,UAAU,KAAK,WAAW,KAAK,OAAO,KAAK,GAAG,IAFpE,IAAI8O,GAAK9O,GAAe,QAAQ,KAAK,WAAW,KAAK,KAAK;AAAA,EAUvE;AACF;AAEA,MAAM8O,GAAsB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,mBAAmB;AACzB,WAAO,KAAK,MAAM,SAAA,GAAY,UAAU,iBAAiB;AAAA,EAC3D;AAAA,EAEQ,gBAAgB;AACtB,WAAO,KAAK,KAAK,cAAc;AAAA,EACjC;AAAA,EAEA,YACED,GACA3N,GACAxE,GACAyE,GACA;AACA,SAAK,iBAAiB0N,GACtB,KAAK,YAAY3N,GACjB,KAAK,QAAQxE,GACTyE,MACF,KAAK,MAAMA;AAAA,EAEf;AAAA,EAEA,cAAc;AACZ,WAAI,KAAK,MACAF,GAAY,KAAK,gBAAgB,KAAK,WAAW,KAAK,OAAO,KAAK,GAAG,IAEvEA,GAAY,KAAK,gBAAgB,KAAK,WAAW,KAAK,KAAK;AAAA,EACpE;AAAA,EAEA,aAAa;AACX,WAAOG,GAAW,KAAK,gBAAgB,KAAK,WAAW,EAAE,YAAY,KAAK,cAAA,GAAiB,OAAO,KAAK,iBAAA,GAAoB;AAAA,EAC7H;AAAA,EAEA,WAAW;AACT,WAAK,KAAK,kBAGHyB,GAAS,KAAK,WAAW,KAAK,eAAe,IAF3C,QAAQ,QAAkC,EAAE;AAAA,EAGvD;AAAA,EAEA,WAAWI,GAAsB;AAC/B,WAAOD,GAAW,KAAK,WAAWC,CAAY;AAAA,EAChD;AAAA,EAEA,aAAa;AACX,WAAOR,GAAW,KAAK,WAAW,KAAK,eAAe;AAAA,EACxD;AAAA,EAEA,qBAAqB;AACnB,WAAOc,GAAmB,KAAK,eAAe;AAAA,EAChD;AAAA,EAEA,gBAAgB;AACd,WAAOC,GAAc,KAAK,eAAe;AAAA,EAC3C;AAAA,EAEA,eAAe;AACb,WAAON,GAAA;AAAA,EACT;AAAA,EAEA,eAAe6L,GAA0B;AACvC,WAAO3L,GAAe,KAAK,cAAA,GAAiB2L,CAAgB;AAAA,EAC9D;AAAA,EAEA,YAAYC,GAAiB;AAC3B,WAAO3L,GAAY,KAAK,cAAA,GAAiB,KAAK,iBAAA,GAAoB2L,CAAO;AAAA,EAC3E;AAAA,EAEA,iBAAiBtN,GAAY;AAC3B,WAAO+B,GAAiB/B,CAAE;AAAA,EAC5B;AACF;;;;;;;;;AC9IA,UAAMuN,IAAWpB,GAAA,GAGXqB,IAAWpB,GAAA,GAGXqB,IAAS/B,GAAA,GAETgC,IAAW5B,GAAA,GAEX6B,IAAkB5D,GAAe,aAAa,GAG9CvN,IAAWC,GAAA,GAEXmG,IAAQC,GAKR+K,IAAWjT,EAAgB;AAAA,MAC/B,UAAU;AAAA,MACV,QAAQ,CAAA;AAAA,MACR,mBAAmB,CAAA;AAAA,MACnB,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAAA;AAAA,IACZ,CACD,GACKkT,IAAUlT,EAAoB,EAAE,GAChCmT,IAAanT,EAAyB,EAAE;AAM9C,aAASoT,EAASlB,GAAqC;AACrD,aAAKA,IACwB,OAAO,QAAQA,CAAM,EAC/C,IAAI,CAAC,CAAC5R,GAAKY,CAAK,OACR;AAAA,QACL,UAAUZ;AAAA,QACV,GAAGY;AAAA,MAAA,EAEN,EACA,OAAO,CAACmS,MAAMA,EAAE,UAAUA,EAAE,OAAO,WAAW,QAAQ,EACtD,OAAO,CAACA,MAAM,CAACC,EAAa,MAAM,SAASD,EAAE,QAAQ,CAAC,IATrC,CAAA;AAAA,IAatB;AAEA,aAASE,EAAkBrB,GAAqC;AAC9D,aAAKA,IACQ,OAAO,QAAQA,CAAM,EAAE,OAAO,CAAC,CAAClK,GAAG9G,CAAK,MAAMA,EAAM,SAAS,EAAE,OAAO,CAACuF,GAAK,CAACnG,GAAKY,CAAK,OAClGuF,EAAInG,CAAG,IAAIY,EAAM,WACVuF,IACN,CAAA,CAAyB,IAJR,CAAA;AAAA,IAMtB;AAEA,UAAM+M,IAAkB9J,EAAS,MAC1BuJ,EAAS,OAAO,UACd,CAAC,GAAGA,EAAS,MAAM,OAAO,EAAE,QAAA,IADE,CAAA,CAEtC,GAEKQ,IAAQzT,EAAyB,EAAE,GACnCuJ,IAAUvJ,EAAI,EAAK;AAEzB,IAAAqJ,GAAU,YAAY;AACpB,MAAAE,EAAQ,QAAQ;AAChB,YAAMmK,IAAO,IAAInB,GAAA,EACd,cAActK,EAAM,UAAU,EAC9B,aAAaA,EAAM,SAAS,EAC5B,SAAS,EAAE,UAAA4K,GAAU,UAAAD,EAAA,CAAU,EAC/B,MAAA;AACH,MAAAK,EAAS,QAAQ,MAAMS,EAAK,YAAA,GAC5BR,EAAQ,QAAQE,EAASH,EAAS,MAAM,MAAM,GAC9CE,EAAW,QAAQI,EAAkBN,EAAS,MAAM,MAAM;AAC1D,iBAAW3S,KAAO2S,EAAS,MAAM,QAAQ;AACvC,YAAIA,EAAS,MAAM,OAAO3S,CAAG,EAAE,QAAQ,WAAW,QAAQ;AACxD,gBAAMqT,IAAQT,EAAQ,MAAM,KAAK,CAAA/M,MAAQA,EAAK,aAAa7F,CAAG;AAC9D,UAAIqT,KAASA,EAAM,WACjBA,EAAM,OAAO,QAAQ,CAAA;AAAA,QAGzB;AACA,QAAAF,EAAM,MAAMnT,CAAG,IAAI2S,EAAS,MAAM,OAAO3S,CAAG,EAAE;AAAA,MAChD;AACA,MAAAiJ,EAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,aAASqK,IAAmB;AAC1B,aAAOf,EAAA,GAAY,UAAU,iBAAiB;AAAA,IAChD;AAEA,mBAAevC,GAAa1F,GAAgB9G,GAAsBqB,GAAauL,GAA4BR,GAAe;AACxH,cAAQpM,GAAA;AAAA,QACN,KAAKJ,EAAe;AAElB,cAAImQ,IAAiB;AAQrB,cAPAb,EAAgB,OAAO,QAAQ,CAAChB,MAAW;AACzC,YAAIA,GAAQ,aACLA,EAAO,eACV6B,IAAiB;AAAA,UAGvB,CAAC,GACG,CAACA,GAAgB;AACnB,YAAAhS,GAAU,WAAW,OAAO,iBAAiB,SAAS,MAAM,uDAAuD;AACnH;AAAA,UACF;AACA,UAAA0H,EAAQ,QAAQ;AAChB,cAAI;AACF,kBAAMtH,IAAM,MAAMiD,GAAW+C,EAAM,WAAW,EAAE,GAAGwL,EAAM,OAAO,GAAGN,EAAW,MAAA,GAAShO,CAAG,GAEpF2O,KAAiBd,EAAgB,OAAO,IAAI,CAAChB,OAC7CA,IAAQ,SACHA,GAAO,OAAO/P,EAAI,SAAA,CAAU,IAE9B,QAAQ,QAAA,CAChB,KAAK,CAAA;AACN,kBAAM,QAAQ,IAAI6R,EAAc,GAChCvK,EAAQ,QAAQ,IAChB1H,GAAU,WAAW,OAAO,iBAAiB,cAAc,QAAQ,kDAAkDI,EAAI,SAAA,CAAU,GAAG,GACtI6Q,EAAO,KAAK,EAAE,MAAM,WAAW,QAAQ,EAAE,YAAY7Q,EAAI,SAAA,EAAS,GAAK;AAAA,UACzE,QAAgB;AACd,YAAAJ,GAAU,WAAW,OAAO,iBAAiB,cAAc,MAAM,uCAAuC,GACxG0H,EAAQ,QAAQ;AAAA,UAClB;AACA;AAAA,QACF,KAAK7F,EAAe;AAClB,cAAI;AACF,kBAAMqP,EAASnI,EAAO,aAAa,EAAE,IAAI6I,EAAM,OAAOH,CAAY,GAClER,EAAO,KAAK,EAAE,MAAMpC,GAAc,QAAQ,EAAE,WAAWzI,EAAM,UAAA,GAAa;AAAA,UAC5E,SAAS8L,GAAO;AACd,oBAAQ,MAAM,iCAAiCA,CAAK;AAAA,UACtD;AACA;AAAA,QACF;AACE,kBAAQ,KAAK,wBAAwBjQ,CAAI;AAAA,MAAA;AAAA,IAE/C;AAEA,UAAMkQ,IAA4B;AAAA,MAAC;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,GAEIV,IAAetT,EAAcgU,CAAe;AAElD,aAAStL,GAAcqH,GAAqBkE,GAAoB;AAC9D,MAAAlB,EAAShD,CAAW,IAAI,EAAC,YAAAkE,GAAY,cAAAX,GAAc,UAAUG,GAAM,GAC/DR,EAAS,UACXC,EAAQ,QAAQE,EAASH,EAAS,MAAM,MAAM;AAAA,IAElD;AAEA,UAAMiB,IAAgBxK,EAAS,MACtBqI,GAAemB,EAAQ,KAAK,CACpC;;;IAIMzF,KAAA,EAAA,OAAM,iBAAA,GAKJoB,KAAA,EAAA,OAAM,YAAA,GAEFwB,KAAA,EAAA,OAAM,YAAA,GACJqB,KAAA,EAAA,OAAM,uBAAA,GAGAC,KAAA,EAAA,OAAM,cAAA;;EAWU,OAAM;GAQlCwC,KAAA,EAAA,OAAM,cAAA,GACJC,KAAA,EAAA,OAAM,mBAAA,GAEJC,KAAA,EAAA,OAAM,iBAAA;;;AAjCjB,SAAAvK,EAAA,GAAAC,EAyCM,OAzCN0D,IAyCM;AAAA,IAvCJpD,EAA0GrB,EAAA,QAAA;AAAA,MAAjG,OAAOA,WAAS,OAAO;AAAA,MAAQ,UAAUA,WAAS,OAAO;AAAA,MAAW,OAAOA,EAAA,iBAAA;AAAA,IAAgB,GAAA,MAAA,GAAA,CAAA,SAAA,YAAA,OAAA,CAAA;AAAA,IAGpGiG,EAsBM,OAtBNJ,IAsBM;AAAA,MArBJxE,EAoBSiK,GAAA;AAAA,QApBA,SAAStL,EAAA;AAAA,QAAS,OAAM;AAAA,MAAA,GAAA;AAAA,mBAC/B,MAkBM;AAAA,UAlBNiG,EAkBM,OAlBNoB,IAkBM;AAAA,YAjBJpB,EAWM,OAXNyC,IAWM;AAAA,eAAA5H,EAAA,EAAA,GAVJC,EASWC,GAAA,MAAAC,EATejB,EAAA,eAAa,CAAtBuL,YACfzL,EAOS0L,GAAA;AAAA,gBAAA,KARoCD,EAAM;AAAA,gBAC1C,OAAOA,EAAM;AAAA,gBAAM,OAAA,EAAA,iBAAA,OAAA;AAAA,cAAA,GAAA;AAAA,2BAC1B,MAKM;AAAA,kBALNtF,EAKM,OALN0C,IAKM;AAAA,qBAAA7H,EAAA,EAAA,GAJJC,EAGWC,GAAA,MAAAC,EAHesK,EAAM,QAAM,CAArBrT,YACf4H,EAC+EE,EAAA,aAAA;AAAA,sBAAA,KAFnC9H,EAAM;AAAA,sBAAA,SAAA;AAAA,sBACrC,KAAI;AAAA,sBAAe,aAAWA,EAAM;AAAA,sBAAW,QAAQA;AAAA,sBAAQ,cAAYqJ,EAAA;AAAA,sBAAA,YAC7EvB,EAAA,MAAM9H,EAAM,QAAQ;AAAA,sBAAA,uBAAA,CAAAgI,MAApBF,EAAA,MAAM9H,EAAM,QAAQ,IAAAgI;AAAA,sBAAG,OAAM;AAAA,sBAAc,UAAQF,EAAA;AAAA,oBAAA,GAAA,MAAA,GAAA,CAAA,aAAA,UAAA,cAAA,cAAA,qBAAA,CAAA;;;;;;YAQ7D2E,EAAA,OAAO,WAAA7D,EAAA,GAAlBC,EAEM,OAFN6H,IAEM;AAAA,cADJpB,GAA4B7C,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,YAAA,CAAA,KAAAwC,GAAA,IAAA,EAAA;AAAA;;;;;IAOpClB,EAUM,OAVNkF,IAUM;AAAA,MATJlF,EAQM,OARNmF,IAQM;AAAA,QAPJ5D,GAA2B7C,EAAA,QAAA,UAAA,CAAA,GAAA,QAAA,EAAA;AAAA,QAC3BsB,EAKM,OALNoF,IAKM;AAAA,WAAAvK,EAAA,EAAA,GAJJC,EAGWC,GAAA,MAAAC,EAHgBjB,EAAA,iBAAe,CAAzB4B,YACf9B,EACwDE,EAAA,cAAA;AAAA,YAAA,KAFR4B,EAAO;AAAA,YACxC,SAAS5B,EAAA;AAAA,YAAU,QAAQ4B;AAAA,YAAQ,OAAM;AAAA,YACrD,SAAK,IAAMsD,MAASlF,EAAA,aAAa4B,GAAM,GAAKsD,CAAI;AAAA,UAAA,GAAA,MAAA,GAAA,CAAA,WAAA,UAAA,SAAA,CAAA;;;;;;;;;;;;;;AC1M/D,UAAM4E,IAAS/B,GAAA,GAETgC,IAAW5B,GAAA,GAEX0B,IAAWpB,GAAA,GACXmB,IAAWpB,GAAA,GAEXwB,IAAkB5D,GAAe,aAAa,GAG9CvN,IAAWC,GAAA,GAEXmG,IAAQC,GAKR+K,IAAWjT,EAAgB;AAAA,MAC/B,UAAU;AAAA,MACV,QAAQ,CAAA;AAAA,MACR,mBAAmB,CAAA;AAAA,MACnB,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAAA;AAAA,IACZ,CACD,GACKkT,IAAUlT,EAAoB,EAAE,GAChCmT,IAAanT,EAAyB,EAAE;AAM9C,aAASoT,EAASlB,GAAqC;AACrD,aAAKA,IACwB,OAAO,QAAQA,CAAM,EAC/C,IAAI,CAAC,CAAC5R,GAAKY,CAAK,OACR;AAAA,QACL,UAAUZ;AAAA,QACV,GAAGY;AAAA,MAAA,EAEN,EACA,OAAO,CAACmS,MAAMA,EAAE,UAAUA,EAAE,OAAO,WAAW,QAAQ,EACtD,OAAO,CAACA,MAAM,CAACC,EAAa,MAAM,SAASD,EAAE,QAAQ,CAAC,IATrC,CAAA;AAAA,IAatB;AAEA,aAASE,EAAkBrB,GAAqC;AAC9D,aAAKA,IACQ,OAAO,QAAQA,CAAM,EAAE,OAAO,CAAC,CAAClK,GAAG9G,CAAK,MAAMA,EAAM,SAAS,EAAE,OAAO,CAACuF,GAAK,CAACnG,GAAKY,CAAK,OAClGuF,EAAInG,CAAG,IAAIY,EAAM,WACVuF,IACN,CAAA,CAAyB,IAJR,CAAA;AAAA,IAMtB;AAEA,UAAM+M,IAAkB9J,EAAS,MAC1BuJ,EAAS,OAAO,UACd,CAAC,GAAGA,EAAS,MAAM,OAAO,EAAE,QAAA,IADE,CAAA,CAEtC,GAEKQ,IAAQzT,EAAyB,EAAE,GACnCuJ,IAAUvJ,EAAI,EAAK;AAEzB,IAAAqJ,GAAU,YAAY;AACpB,MAAAE,EAAQ,QAAQ;AAChB,YAAMmK,IAAO,IAAInB,KACd,kBAAkB5O,GAAe,MAAM,EACvC,aAAasE,EAAM,SAAS,EAC5B,SAAS,EAAE,UAAA4K,GAAU,UAAAD,EAAA,CAAU,EAC/B,cAAc3K,EAAM,UAAU,EAC9B,MAAA;AACH,MAAAgL,EAAS,QAAQ,MAAMS,EAAK,YAAA;AAC5B,YAAMe,IAAU,MAAMf,EAAK,WAAA,GACrBgB,IAAQ,MAAMhB,EAAK,SAAA;AACzB,MAAAT,EAAS,MAAM,UAAUA,EAAS,MAAM,SAAS,OAAO,CAAA9M,MAAQ;AAC9D,cAAMwO,IAAMF,EAAQ,KAAK,CAAAE,MAAOA,EAAI,WAAWxO,EAAK,KAAK;AACzD,eAAKwO,IAGEA,EAAI,SAFF;AAAA,MAGX,CAAC;AACD,YAAMV,IAAahB,EAAS,MAAM,OAAO,YAAY;AACrD,MAAAF,EAAS,OAAU,EAAE,YAAAkB,GAAY,cAAAX,GAAc,UAAUG,GAAO,GAChEP,EAAQ,QAAQE,EAASH,EAAS,MAAM,MAAM,GAC9CE,EAAW,QAAQI,EAAkBN,EAAS,MAAM,MAAM;AAC1D,iBAAW3S,KAAO2S,EAAS,MAAM,QAAQ;AACvC,YAAIA,EAAS,MAAM,OAAO3S,CAAG,EAAE,QAAQ,WAAW,QAAQ;AACxD,gBAAMqT,IAAQT,EAAQ,MAAM,KAAK,CAAA/M,MAAQA,EAAK,aAAa7F,CAAG;AAC9D,UAAIqT,KAASA,EAAM,WACjBA,EAAM,OAAO,QAAQe,EAAMpU,CAAG,KAAK,CAAA,GACnCqT,EAAM,OAAO,aAAa,CAAC/M,MAAyB8M,EAAK,WAAW9M,CAAY;AAAA,QAEpF;AACA,QAAA6M,EAAM,MAAMnT,CAAG,IAAI2S,EAAS,MAAM,OAAO3S,CAAG,EAAE;AAAA,MAChD;AACA,MAAAiJ,EAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,aAASqK,IAAmB;AAC1B,aAAOf,EAAA,GAAY,UAAU,iBAAiB;AAAA,IAChD;AAEA,mBAAevC,GAAa1F,GAAgB9G,GAAsBqB,GAAauL,GAA4BR,GAAe;AACxH,cAAQpM,GAAA;AAAA,QACN,KAAKJ,EAAe;AAElB,cAAImQ,IAAiB;AAQrB,cAPAb,EAAgB,OAAO,QAAQ,CAAChB,MAAW;AACzC,YAAIA,GAAQ,aACLA,EAAO,eACV6B,IAAiB;AAAA,UAGvB,CAAC,GACG,CAACA,GAAgB;AACnB,YAAAhS,GAAU,WAAW,OAAO,iBAAiB,SAAS,MAAM,uDAAuD;AACnH;AAAA,UACF;AACA,UAAA0H,EAAQ,QAAQ;AAChB,cAAI;AACF,kBAAMtH,IAAM,MAAMmD,GAAW6C,EAAM,WAAWA,EAAM,YAAY,EAAE,GAAGwL,EAAM,OAAO,GAAGN,EAAW,MAAA,GAAShO,CAAG,GAEtG2O,IAAiBd,EAAgB,OAAO,IAAI,CAAChB,OAC7CA,IAAQ,SACHA,GAAO,OAAO/P,EAAI,SAAA,CAAU,IAE9B,QAAQ,QAAA,CAChB,KAAK,CAAA;AACN,kBAAM,QAAQ,IAAI6R,CAAc,GAChCvK,EAAQ,QAAQ,IAChB1H,GAAU,WAAW,OAAO,iBAAiB,cAAc,QAAQ,kDAAkDI,EAAI,SAAA,CAAU,GAAG;AAAA,UAExI,QAAgB;AACd,YAAAJ,GAAU,WAAW,OAAO,iBAAiB,cAAc,MAAM,uCAAuC,GACxG0H,EAAQ,QAAQ;AAAA,UAClB;AACA;AAAA,QACF,KAAK7F,EAAe;AAClB,cAAI;AACF,kBAAMqP,EAASnI,EAAO,aAAa,EAAE,IAAI6I,EAAM,OAAOH,CAAY,GAClER,EAAO,KAAK,EAAE,MAAMpC,GAAc,QAAQ,EAAE,WAAWzI,EAAM,UAAA,GAAa;AAAA,UAC5E,QAAgB;AAAA,UAAE;AAClB;AAAA,QACF;AACE,kBAAQ,KAAK,wBAAwBnE,CAAI;AAAA,MAAA;AAAA,IAE/C;AAEA,UAAMwP,IAAetT,EAAc,EAAE;AAErC,aAAS0I,EAAcqH,GAAqBkE,GAAoB;AAC9D,MAAAlB,EAAShD,CAAW,IAAI,EAAE,YAAAkE,GAAY,cAAAX,GAAc,UAAUG,GAAO,GACjER,EAAS,UACXC,EAAQ,QAAQE,EAASH,EAAS,MAAM,MAAM;AAAA,IAElD;AAGA,UAAMiB,KAAgBxK,EAAS,MACtBqI,GAAemB,EAAQ,KAAK,CACpC;;;IAIMzF,KAAA,EAAA,OAAM,iBAAA,GAKJoB,KAAA,EAAA,OAAM,YAAA,GAEFwB,KAAA,EAAA,OAAM,YAAA,GACJqB,KAAA,EAAA,OAAM,uBAAA,GAGAC,KAAA,EAAA,OAAM,cAAA;;EAWU,OAAM;GAQlCwC,KAAA,EAAA,OAAM,cAAA,GACJC,KAAA,EAAA,OAAM,mBAAA,GAEJC,KAAA,EAAA,OAAM,iBAAA;;;AAjCjB,SAAAvK,EAAA,GAAAC,EAyCM,OAzCN0D,IAyCM;AAAA,IAvCJpD,EAA0GrB,EAAA,QAAA;AAAA,MAAjG,OAAOA,WAAS,OAAO;AAAA,MAAQ,UAAUA,WAAS,OAAO;AAAA,MAAW,OAAOA,EAAA,iBAAA;AAAA,IAAgB,GAAA,MAAA,GAAA,CAAA,SAAA,YAAA,OAAA,CAAA;AAAA,IAGpGiG,EAsBM,OAtBNJ,IAsBM;AAAA,MArBJxE,EAoBSiK,GAAA;AAAA,QApBA,SAAStL,EAAA;AAAA,QAAS,OAAM;AAAA,MAAA,GAAA;AAAA,mBAC/B,MAkBM;AAAA,UAlBNiG,EAkBM,OAlBNoB,IAkBM;AAAA,YAjBJpB,EAWM,OAXNyC,IAWM;AAAA,eAAA5H,EAAA,EAAA,GAVJC,EASWC,GAAA,MAAAC,EATejB,EAAA,eAAa,CAAtBuL,YACfzL,EAOS0L,GAAA;AAAA,gBAAA,KARoCD,EAAM;AAAA,gBAC1C,OAAOA,EAAM;AAAA,gBAAM,OAAA,EAAA,iBAAA,OAAA;AAAA,cAAA,GAAA;AAAA,2BAC1B,MAKM;AAAA,kBALNtF,EAKM,OALN0C,IAKM;AAAA,qBAAA7H,EAAA,EAAA,GAJJC,EAGWC,GAAA,MAAAC,EAHesK,EAAM,QAAM,CAArBrT,YACf4H,EAC+EE,EAAA,aAAA;AAAA,sBAAA,KAFnC9H,EAAM;AAAA,sBAAA,SAAA;AAAA,sBACrC,KAAI;AAAA,sBAAe,aAAWA,EAAM;AAAA,sBAAW,QAAQA;AAAA,sBAAQ,cAAYqJ,EAAA;AAAA,sBAAA,YAC7EvB,EAAA,MAAM9H,EAAM,QAAQ;AAAA,sBAAA,uBAAA,CAAAgI,MAApBF,EAAA,MAAM9H,EAAM,QAAQ,IAAAgI;AAAA,sBAAG,OAAM;AAAA,sBAAc,UAAQF,EAAA;AAAA,oBAAA,GAAA,MAAA,GAAA,CAAA,aAAA,UAAA,cAAA,cAAA,qBAAA,CAAA;;;;;;YAQ7D2E,EAAA,OAAO,WAAA7D,EAAA,GAAlBC,EAEM,OAFN6H,IAEM;AAAA,cADJpB,GAA4B7C,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,YAAA,CAAA,KAAAwC,GAAA,IAAA,EAAA;AAAA;;;;;IAOpClB,EAUM,OAVNkF,IAUM;AAAA,MATJlF,EAQM,OARNmF,IAQM;AAAA,QAPJ5D,GAA2B7C,EAAA,QAAA,UAAA,CAAA,GAAA,QAAA,EAAA;AAAA,QAC3BsB,EAKM,OALNoF,IAKM;AAAA,WAAAvK,EAAA,EAAA,GAJJC,EAGWC,GAAA,MAAAC,EAHgBjB,EAAA,iBAAe,CAAzB4B,YACf9B,EACwDE,EAAA,cAAA;AAAA,YAAA,KAFR4B,EAAO;AAAA,YACxC,SAAS5B,EAAA;AAAA,YAAU,QAAQ4B;AAAA,YAAQ,OAAM;AAAA,YACrD,SAAK,IAAMsD,MAASlF,EAAA,aAAa4B,GAAM,GAAKsD,CAAI;AAAA,UAAA,GAAA,MAAA,GAAA,CAAA,WAAA,UAAA,SAAA,CAAA;;;;;;oHCvNlD0G,KAAoC,OAAO,qBAAqB;AAEtE,SAASC,KAA6B;AAC3C,SAAOlI,GAAOiI,IAAgB,IAAI;AACpC;;;;;;;;;ACWA,UAAM/B,IAAWpB,GAAA,GACXmB,IAAWpB,GAAA,GAEXuB,IAAW5B,GAAA,GAEX2B,IAAS/B,GAAA,GAET+D,IAAcD,GAAA,GAEdhT,IAAWC,GAAA,GAEXmG,IAAQC;AAKd,QAAIwL;AAEJ,UAAMT,IAAWjT,EAAgB;AAAA,MAC/B,UAAU;AAAA,MACV,QAAQ,CAAA;AAAA,MACR,mBAAmB,CAAA;AAAA,MACnB,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,MAAA;AAAA,IACZ,CACD,GACKkT,IAAUlT,EAAoB,EAAE;AAMtC,aAASoT,EAASlB,GAAqC;AACrD,aAAKA,IACwB,OAAO,QAAQA,CAAM,EAC/C,IAAI,CAAC,CAAC5R,GAAKY,CAAK,OACX,OAAOA,EAAM,cAAe,YAC9BA,EAAM,aAAaA,EAAM,aAAa,QAAQ,OAE9CA,EAAM,aAAaA,EAAM,YAEpB;AAAA,QACL,UAAUZ;AAAA,QACV,GAAGY;AAAA,MAAA,EAEN,EACA,OAAO,CAACmS,MAAMA,EAAE,UAAUA,EAAE,OAAO,WAAW,QAAQ,EACtD,OAAO,CAACA,MAAM,CAACC,EAAa,MAAM,SAASD,EAAE,QAAQ,CAAC,IAdrC,CAAA;AAAA,IAiBtB;AAEA,UAAMa,IAAgBxK,EAAS,MACtBqI,GAAemB,EAAQ,KAAK,CACpC,GAEKM,IAAkB9J,EAAS,MAC1BuJ,EAAS,OAAO,UACd,CAAC,GAAGA,EAAS,MAAM,OAAO,EAAE,QAAA,IADE,CAAA,CAEtC,GAEK1J,IAAUvJ,EAAI,EAAI,GAElB+U,IAAmB,CAACC,GAAgBpP,MAAgB;AACxD,YAAMqP,IAAeD,EAAQ,UAAU,CAAA7O,MAAQA,EAAK,SAAS;AAC7D,aAAO6O,EAAQ,IAAI,CAACE,GAAGC,OAAU;AAC/B,cAAMC,IAAO;AAAA,UACX,IAAIF,EAAE;AAAA,UACN,OAAO;AAAA,UACP,OAAO;AAAA,UACP,KAAK;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,MAAM;AAAA,QAAA;AAER,QAAAE,EAAK,QAAQF,EAAE,yBAAyB,CAAC,GAAG;AAC5C,cAAMG,KAAeH,EAAE,yBAAyBA,EAAE,yBAAyB,SAAS,CAAC,GAC/EI,KAAUJ,EAAE,iBAAiBA,EAAE,iBAAiB,SAAS,CAAC,GAC1DK,KAAiBD,IAAS,yBAAyBA,IAAS,0BAA0B,SAAS,CAAC;AAUtG,YATID,MAAgBE,MAAkBF,IAAc,OAAO,kBAAkBE,IAAgB,eAAe,kBAC1GH,EAAK,QAAQ,GAAGG,GAAe,IAAI,IACnCH,EAAK,QAAQ,UAAUC,GAAa,IAAI,KAEtCH,EAAE,OAAO,IACXE,EAAK,MAAM,oBAAoBF,EAAE,SAAS,QAAQ,UAAU,EAAE,EAAE,QAAQ,WAAW,EAAE,IAErFE,EAAK,MAAM,sBAETF,EAAE,aAAatP,MAAW;AAC5B,UAAAwP,EAAK,OAAO,eACZA,EAAK,SAAS;AAAA,aACT;AACL,gBAAME,KAAUJ,EAAE,iBAAiBA,EAAE,iBAAiB,SAAS,CAAC;AAChE,cAAII,MAAWA,GAAQ,WAAW;AAChC,YAAAF,EAAK,OAAOvU,GAAWyU,GAAQ,cAAc,qBAAqB,GAClEF,EAAK,SAAS,GACdA,EAAK,OAAO;AAAA,mBACHE,MAAWA,GAAQ,WAAW;AACvC,YAAAF,EAAK,OAAOvU,GAAWyU,GAAQ,cAAc,qBAAqB,GAClEF,EAAK,SAAS,GACdA,EAAK,OAAO;AAAA,mBACHE;AAET,gBADAF,EAAK,OAAOvU,GAAWyU,GAAQ,cAAc,qBAAqB,GAC9DJ,EAAE,SAAS;AACb,cAAAE,EAAK,SAAS,GACdA,EAAK,OAAO;AAAA,iBACP;AACL,oBAAMI,KAAkBF,GAAQ,yBAAyB,CAAC;AAC1D,cAAAF,EAAK,SAAS,GACdA,EAAK,OAAOI,IAAiB,SAAS,oBAAoBA,GAAgB,MAAM,KAAK;AAAA,YACvF;AAAA,cACF,CAAWL,KAAQF,KAAgBA,MAAiB,MAClDG,EAAK,SAAS,GACdA,EAAK,OAAO,cAEZA,EAAK,SAAS,GACdA,EAAK,OAAO;AAEd,UAAIE,MAAWA,GAAQ;AAAA,QAGzB;AAEA,eAAOF;AAAA,MACT,CAAC;AAAA,IACH,GAGMK,IAAQzV,EAAW,EAAE,GACrB0V,KAAW1V,EAAI,EAAK,GACpB2V,IAAqB3V,EAAI,EAAK,GAC9B4V,IAAmB5V,EAAI,EAAK,GAC5B6V,KAAwB7V,EAAI,EAAK;AAEvC,mBAAe8V,IAAmB;AAChC,YAAMrB,IAAU,MAAMf,EAAK,WAAA;AAC3B,MAAAT,EAAS,MAAM,UAAUA,EAAS,MAAM,SAAS,OAAO,CAAA9M,MAAQ;AAC9D,cAAMwO,IAAMF,EAAQ,KAAK,CAAAE,MAAOA,EAAI,WAAWxO,EAAK,KAAK;AACzD,eAAKwO,IAGEA,EAAI,SAFF;AAAA,MAGX,CAAC,GACDe,GAAS,QAAQjB,EAAQ,KAAK,CAAAtO,MAAQA,EAAK,WAAW,UAAU,GAAG,UAAU,IAC7EwP,EAAmB,QAAQlB,EAAQ,KAAK,CAAAtO,MAAQA,EAAK,WAAW,cAAc,GAAG,UAAU,IAC3FyP,EAAiB,QAAQnB,EAAQ,KAAK,CAAAtO,MAAQA,EAAK,WAAW,YAAY,GAAG,UAAU,IACvF0P,GAAsB,QAAQpB,EAAQ,KAAK,CAAAtO,MAAQA,EAAK,WAAW,mBAAmB,GAAG,UAAU;AAAA,IACrG;AAEA,UAAMmN,IAAetT,EAAc,EAAE;AAErC,mBAAe+V,IAAO;AACpB,MAAAxM,EAAQ,QAAQ,IAChBmK,IAAO,IAAInB,KACR,kBAAkB5O,GAAe,OAAO,EACxC,aAAasE,EAAM,SAAS,EAC5B,SAAS,EAAE,UAAA4K,GAAU,UAAAD,EAAA,CAAU,EAC/B,cAAc3K,EAAM,UAAU,EAC9B,MAAA,GACHgL,EAAS,QAAQ,MAAMS,EAAK,YAAA;AAC5B,YAAMgB,IAAQ,MAAMhB,EAAK,SAAA;AACzB,MAAAsC,GAAU,QAAQ,MAAMtC,EAAK,aAAA,GAC7BuC,EAAgB,QAAQ,MAAMvC,EAAK,mBAAA,GACnCwC,GAAY,QAAQ,MAAMxC,EAAK,cAAA,GAC/BoC,EAAA;AACA,YAAM7B,IAAahB,EAAS,MAAM,OAAO,YAAY;AACrD,MAAAF,EAAS,OAAU,EAAC,YAAAkB,GAAY,cAAAX,GAAa,GAC7CJ,EAAQ,QAAQE,EAASH,EAAS,MAAM,MAAM;AAC9C,iBAAW3S,KAAO2S,EAAS,MAAM;AAC/B,YAAIA,EAAS,MAAM,OAAO3S,CAAG,EAAE,QAAQ,WAAW,QAAQ;AACxD,gBAAMqT,KAAQT,EAAQ,MAAM,KAAK,CAAA/M,MAAQA,EAAK,aAAa7F,CAAG;AAC9D,UAAIqT,MAASA,GAAM,WACjBA,GAAM,OAAO,QAAQe,EAAMpU,CAAG,KAAK,CAAA;AAAA,QAEvC;AAEF,YAAM0U,IAAU,MAAMtB,EAAK,WAAA;AAC3B,MAAA+B,EAAM,QAAQV,EAAiBC,GAAS,CAAC,GAEzCzL,EAAQ,QAAQ;AAAA,IAClB;AACA,IAAAF,GAAU0M,CAAI;AAEd,mBAAeI,EAAUjG,GAAepL,GAAwB;AAC9D,aAAOiO,EAAS7C,CAAK,IAAIpL,CAAG;AAAA,IAC9B;AAEA,aAAS8O,IAAmB;AAC1B,aAAOf,EAAA,GAAY,UAAU,iBAAiB;AAAA,IAChD;AAEA,mBAAevC,EAAa1F,GAAgB9G,GAAsBqB,GAAauL,GAA4BR,IAAe;AACxH,UAAI;AACF,gBAAQpM,GAAA;AAAA,UACN,KAAKJ,EAAe;AAClB,kBAAM,EAAE,QAAAgC,GAAQ,UAAAI,GAAA,IAAa,MAAMqQ,EAAUjG,IAAO,EAAE,UAAUwF,GAAS,OAAO;AAChF,YAAAnM,EAAQ,QAAQ;AAChB,kBAAM3D,KAASsK,OAAU,YAAY,QAAQ;AAC7C,kBAAMlK,GAAYiC,EAAM,WAAWA,EAAM,YAAY2L,KAAoBlO,GAAQ,CAAC,OAAOuC,EAAM,UAAU,CAAC,GAAG9C,GAAKS,IAAQE,EAAQ,GAClIyD,EAAQ,QAAQ;AAChB,kBAAM6M,KAAiBlG,OAAU,YAAY,cAAcjI,EAAM,UAAU,wBAAwB,cAAcA,EAAM,UAAU;AACjI,YAAApG,GAAU,WAAW,OAAO,iBAAiB,cAAc,QAAQuU,EAAc,GACjFL,EAAA;AAEA;AAAA,UACF,KAAKrS,EAAe;AAClB,gBAAI;AACF,oBAAMqP,EAASnI,EAAO,aAAa,EAAE,IAAA,GACrCkI,EAAO,KAAK,EAAE,MAAMpC,GAAc,QAAQ,EAAE,WAAWzI,EAAM,WAAW,YAAYA,EAAM,WAAA,GAAc;AAAA,YAC1G,SAAS8L,IAAO;AACd,sBAAQ,MAAM,iCAAiCA,EAAK;AAAA,YACtD;AACA;AAAA,UACF,KAAKrQ,EAAe;AAClB,kBAAMqP,EAASnI,EAAO,aAAa,EAAE,IAAI;AAAA,cACvC,WAAAoL;AAAA,cACA,aAAAE;AAAA,cACA,oBAAAP;AAAA,cACA,kBAAAC;AAAA,cACA,gBAAgBS;AAAA,cAChB,0BAA0BC;AAAA,YAAA,CAC3B;AACD;AAAA,UACF;AACE,oBAAQ,KAAK,wBAAwBxS,CAAI;AAAA,QAAA;AAAA,MAE/C,QAAgB;AAAA,MAEhB;AAAA,IACF;AAEA,UAAM6O,IAAU3S,EAAI,EAAE,GAChBiW,IAAkBjW,EAAmE,EAAE,GACvF0S,IAAmB1S,EAAY,EAAE,GACjCgW,KAAYhW,EAAwC,EAAE,GACtDkW,KAAclW,EAA0C,EAAE;AAChE,mBAAeqW,GAAiBE,GAAuB;AACrD,UAAI,CAACA,GAAe;AAClB,QAAA1U,GAAU,WAAW,OAAO,iBAAiB,SAAS,MAAM,2BAA2B;AACvF;AAAA,MACF;AACA,YAAM2U,EAAc,2BAA2B,8CAA8C;AAC7F,UAAI;AACF,cAAM9C,EAAK,eAAe6C,CAAa,GACvCL,GAAY,QAAQ,MAAMxC,EAAK,cAAA,GAC/BoC,EAAA,GACAjU,GAAU,WAAW,OAAO,iBAAiB,cAAc,QAAQ,0BAA0B;AAAA,MAC/F,SAASkS,GAAO;AACd,YAAKA,EAAc,WAAW,KAAK;AACjC,UAAAlS,GAAU,WAAW,OAAO,iBAAiB,cAAc,MAAM,oCAAoC;AACrG;AAAA,QACF;AACA,QAAAA,GAAU,WAAW,OAAO,iBAAiB,cAAc,MAAM,2BAA2B;AAAA,MAC9F;AAAA,IACF;AAEA,mBAAe2U,EAActG,GAAeuG,GAAiB;AAC3D,YAAM,EAAE,OAAAxL,EAAA,IAAU,MAAM,OAAO,sBAAsB;AACrD,aAAO,IAAI,QAAQ,CAAC9K,GAAS6K,OAAW;AAEtB,QAAAC,EAAM,QAAQ;AAAA,UAC5B,OAAAiF;AAAA,UACA,SAAAuG;AAAA,UACA,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,MAAM,MAAMtW,EAAQ,EAAI;AAAA,UACxB,UAAU,MAAM6K,GAAA;AAAA,QAAO,CACxB;AAAA,MACH,CAAC;AAAA,IACH;AAEA,mBAAesL,EAAmBjR,GAAY;AAC5C,UAAI;AACF,cAAMmR,EAAc,6BAA6B,wCAAwC;AAAA,MAC3F,QAAgB;AACd;AAAA,MACF;AACA,UAAI;AACF,cAAM9C,EAAK,iBAAiBrO,EAAG,SAAA,CAAU,GACzC6Q,GAAY,QAAQ,MAAMxC,EAAK,cAAA,GAC/B7R,GAAU,WAAW,OAAO,iBAAiB,cAAc,QAAQ,kCAAkC;AAAA,MACvG,QAAgB;AACd,QAAAA,GAAU,WAAW,OAAO,iBAAiB,cAAc,MAAM,6BAA6B;AAAA,MAChG;AAAA,IACF;AAEA,mBAAe6U,IAAe;AAC5B,UAAI,CAAC/D,EAAQ,MAAM,QAAQ;AACzB,QAAA9Q,GAAU,WAAW,OAAO,iBAAiB,SAAS,MAAM,yBAAyB;AACrF;AAAA,MACF;AACA,YAAM6R,EAAK,YAAYf,EAAQ,MAAM,MAAM,GAC3CA,EAAQ,QAAQ,IAChBsD,EAAgB,QAAQ,MAAMvC,EAAK,mBAAA,GACnC7R,GAAU,WAAW,OAAO,iBAAiB,cAAc,QAAQ,sBAAsB;AAAA,IAC3F;AAEA,aAASoO,GAAYC,GAAwB;AAC3C,aAAIA,IAGDA,MAAU,yBACJ,sBAENA,MAAU,sBACJ,KAEFA,IARE;AAAA,IASX;;;;;;;;;;;;IAIOzC,KAAA,EAAA,OAAM,iBAAA,GAKJoB,KAAA,EAAA,OAAM,YAAA,GAEFwB,KAAA,EAAA,OAAM,cAAA,GAEJqB,KAAA,EAAA,OAAM,uBAAA,GAGAC,KAAA,EAAA,OAAM,gBAAA,GAGAC,KAAA,EAAA,OAAM,eAAA,GACJuC,KAAA,EAAA,OAAM,cAAA;;EAiBJ,OAAM;;;EAiCpB,OAAM;GACJwC,KAAA,EAAA,OAAM,eAAA;;EAkBY,OAAM;GAQlCC,KAAA,EAAA,OAAM,cAAA,GACJC,KAAA,EAAA,OAAM,mBAAA,GAEJC,KAAA,EAAA,OAAM,iBAAA;;;;;AAhGjB,SAAAhN,EAAA,GAAAC,EAwGM,OAxGN0D,IAwGM;AAAA,IAtGJpD,EAA0GrB,EAAA,QAAA;AAAA,MAAjG,OAAOA,WAAS,OAAO;AAAA,MAAQ,UAAUA,WAAS,OAAO;AAAA,MAAW,OAAOA,EAAA,iBAAA;AAAA,IAAgB,GAAA,MAAA,GAAA,CAAA,SAAA,YAAA,OAAA,CAAA;AAAA,IAGpGiG,EAqFM,OArFNJ,IAqFM;AAAA,MApFJxE,EAmFSiK,GAAA;AAAA,QAnFA,SAAStL,EAAA;AAAA,QAAS,OAAM;AAAA,MAAA,GAAA;AAAA,mBAC/B,MAiFM;AAAA,UAjFNiG,EAiFM,OAjFNoB,IAiFM;AAAA,aAAAvG,EAAA,GAhFJhB,EAAoDsH,GAApCpH,EAAA,YAAY,KAAK,GAAA,EAAG,OAAOA,EAAA,MAAA,GAAK,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,YAChDiG,EAyEM,OAzENyC,IAyEM;AAAA,eAAA5H,EAAA,EAAA,GAxEJC,EA8BWC,GAAA,MAAAC,EA9BejB,EAAA,eAAa,CAAtBuL,YACfzL,EA4BS0L,GAAA;AAAA,gBAAA,KA7BoCD,EAAM;AAAA,gBAC1C,OAAOA,EAAM;AAAA,gBAAM,OAAA,EAAA,iBAAA,OAAA;AAAA,cAAA,GAAA;AAAA,2BAC1B,MA0BM;AAAA,kBA1BNtF,EA0BM,OA1BN0C,IA0BM;AAAA,qBAAA7H,EAAA,EAAA,GAzBJC,EAwBWC,GAAA,MAAAC,EAxBcsK,EAAM,QAAM,CAApBpO,YACf4D,EAsBM,OAAA;AAAA,sBAAA,KAvBqC5D,EAAK;AAAA,sBAC3C,OAAM;AAAA,oBAAA,GAAA;AAAA,sBACT8I,EAoBM,OApBN2C,IAoBM;AAAA,wBAnBJ3C,EAKM,OALNkF,IAKM;AAAA,0BAAApI,GAAAiD,EALsBhG,EAAA,YAAY7C,EAAK,QAAQ,KAAK,KAAI,KAC5D,CAAA;AAAA,0BAAAkE,EAGErB,EAAA,SAAA;AAAA,4BAFC,cAAY7C,EAAK,QAAQ,aAAS;AAAA,4BAClC,eAAaA,EAAK,QAAQ,cAAU,CAAA;AAAA,0BAAA,GAAA,MAAA,GAAA,CAAA,cAAA,aAAA,CAAA;AAAA;wBAGzBA,EAAK,QAAQ,WAAM,UAAA2D,EAAA,EAAA,GACjCC,EAOMC,iBAPkC7D,EAAK,OAAO,OAAK,CAAzBI,YAAhCwD,EAOM,OAAA;AAAA,0BAPD,OAAM;AAAA,0BAAiD,KAAKxD,EAAK;AAAA,wBAAA,GAAA;AAAA,0BACpE8D,EAKU0M,GAAA,MAAA;AAAA,4BAAA,SAAAlL,EAJR,MAAe;AAAA,8BAAAE,GAAAiD,EAAZzI,EAAK,IAAI,IAAG,KACf,CAAA;AAAA,8BAAA8D,EAES2M,GAAA;AAAA,gCAFA,MAAMzQ,EAAK;AAAA,gCAAK,QAAO;AAAA,8BAAA,GAAA;AAAA,2CAC9B,MAA8C;AAAA,kCAA9C8D,EAA8CrB,EAAA,cAAA,EAA/B,OAAO,EAAA,OAAA,YAAA,CAAoB;AAAA,gCAAA,CAAA;AAAA;;;;;2BAMhD,GAAA,GAAA,MAAAc,EAAA,GAAAC,EAAoD,OAApDqK,IAAoDpF,EAAxB7I,EAAK,UAAU,GAAA,CAAA;AAAA,sBAAA,CAAA;AAAA;;;;;;;cAiCjB6C,EAAA,yBAAAc,EAAA,GAAxCC,EAMM,OANNsK,IAMM;AAAA,gBALJpF,EAIM,OAJN0H,IAIM;AAAA,kBAAA1N,EAAA,CAAA,MAAAA,EAAA,CAAA,IAHJgG,EAAsC,OAAA,EAAjC,OAAM,cAAA,GAAc,WAAO,EAAA;AAAA,kBAChC5E,EAAgC4M,GAAA;AAAA,oBAAA,YAAXjO,EAAA;AAAA,oBAAA,uBAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAAF,EAAA,UAAOE;AAAA,kBAAA,GAAA,MAAA,GAAA,CAAA,YAAA,CAAA;AAAA,kBAC5BmB,EAAqEyB,GAAA;AAAA,oBAA3D,MAAK;AAAA,oBAAW,SAAO9C,EAAA;AAAA,kBAAA,GAAA;AAAA,+BAAc,MAAWC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,sBAAA8C,GAAX,eAAW,EAAA;AAAA,oBAAA,EAAA;AAAA;;;;;cAIhD/C,EAAA,gBAAgB,eAA9BF,EAOSoO,GAAA,EAAA,KAAA,KAAA;AAAA,gBANI,QAAMrL,EAAC,MAElB5C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,kBAAA8C,GAFkB,sBAElB,EAAA;AAAA,gBAAA,EAAA;AAAA,2BACa,MAA+B;AAAA,mBAAAjC,EAAA,EAAA,GAA5CC,EAEcC,GAAA,MAAAC,EAFcjB,EAAA,iBAAe,CAAvB7C,YAApB2C,EAEcqO,GAAA;AAAA,oBAFgC,KAAKhR,EAAK;AAAA,kBAAA,GAAA;AAAA,+BACtD,MAAqB;AAAA,sBAAA4F,GAAAiD,EAAlB7I,EAAK,UAAU,IAAG,OAAE6I,EAAG7I,EAAK,QAAQ,IAAG,OAAE6I,EAAGhG,EAAA,WAAW7C,EAAK,SAAS,KAAI,MAC9E,CAAA;AAAA,oBAAA,CAAA;AAAA;;;;;;YAKOwH,EAAA,OAAO,WAAA7D,EAAA,GAAlBC,EAEM,OAFNqN,IAEM;AAAA,cADJ5G,GAA4B7C,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,YAAA,CAAA,KAAAwC,GAAA,IAAA,EAAA;AAAA;;;;;IAOpClB,EAUM,OAVN2H,IAUM;AAAA,MATJ3H,EAQM,OARN4H,IAQM;AAAA,QAPJrG,GAA2B7C,EAAA,QAAA,UAAA,CAAA,GAAA,QAAA,EAAA;AAAA,QAC3BsB,EAKM,OALN6H,IAKM;AAAA,WAAAhN,EAAA,EAAA,GAJJC,EAGWC,GAAA,MAAAC,EAHgBjB,EAAA,iBAAe,CAAzB4B,YACf9B,EACwDE,EAAA,cAAA;AAAA,YAAA,KAFR4B,EAAO;AAAA,YACxC,SAAS5B,EAAA;AAAA,YAAU,QAAQ4B;AAAA,YAAQ,OAAM;AAAA,YACrD,SAAK,IAAMsD,MAASlF,EAAA,aAAa4B,GAAM,GAAKsD,CAAI;AAAA,UAAA,GAAA,MAAA,GAAA,CAAA,WAAA,UAAA,SAAA,CAAA;;;;;;;;;;;;;;ACha/D,UAAM2E,IAAWpB,GAAA,GACXmB,IAAWpB,GAAA,GAIXsB,IAAS/B,GAAA,GAGTlP,IAAWC,GAAA,GAEXmG,IAAQC,GAIR+K,IAAWjT,EAAA,GAEXqX,IAASC,GAAiB;AAAA,MAC9B,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,cAAc;AAAA,MACd,SAAS,CAAA;AAAA,IAAC,CACX;AAED,aAASC,IAAmB;AAC1B,YAAMC,IAAgB,OAAO,QAAQC,EAAW,KAAK,EAClD,OAAO,CAAC,CAAA,EAAG,EAAE,OAAAvW,EAAA,CAAO,MAAMA,KAASA,MAAU,EAAE,EAC/C,IAAI,CAAC,CAACZ,GAAK,EAAE,OAAAY,GAAO,UAAAwW,GAAA,CAAU,OAAO;AAAA,QACpC,KAAApX;AAAA,QACA,OAAAY;AAAA,QACA,UAAAwW;AAAA;AAAA,MAAA,EACA;AACJ,aAAO;AAAA,QACL,YAAYL,EAAO;AAAA,QACnB,UAAUA,EAAO;AAAA,QACjB,SAAS,CAAC,GAAGA,EAAO,SAAS,GAAGG,CAAa;AAAA,QAC7C,OAAO,CAAC;AAAA,UACN,KAAO;AAAA,UACP,MAAQ;AAAA,QAAA,CACT;AAAA,MAAA;AAAA,IAEL;AAGA,UAAMG,IAASjO,EAAS,OAGf;AAAA,MACL,GAHkBkO,EAAS,MAAM,SACE,MAAM;AAAA;AAAA;AAAA,IAEtC,EAGN,GAGKC,IAAa,CAAC3F,MAAwC;AAC1D,YAAM4F,IAAM,OAAO,QAAQ5F,CAAM,EAC9B,OAAO,CAAC,CAAA,EAAG/L,CAAI,MAAMA,EAAK,QAAQ,MAAM,EACxC,IAAI,CAAC,CAAC7F,GAAKY,EAAK,GAAGiU,QACX;AAAA,QACL,OAAOjU,GAAM,OAAQ;AAAA,QACrB,WAAWZ,EAAI,OAAO,CAAC,EAAE,gBAAgBA,EAAI,MAAM,CAAC;AAAA,QACpD,OAAOY,GAAM;AAAA,QACb,UAAU;AAAA,QACV,SAAS;AAAA,QACT,OAAO;AAAA,QACP,UAAU;AAAA;AAAA,QACV,WAAW;AAAA;AAAA,MAAA,EAEd,EACA,KAAK,CAACmD,GAAGC,OAAMD,EAAE,QAAQC,GAAE,KAAK;AAEnC,MAAAwT,EAAI,KAAK;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,QACP,WAAW;AAAA,MAAA,CACZ,GACDF,EAAS,QAAQE;AAAA,IACnB,GAGMrE,IAAQzT,EAAc,EAAE,GACxB4X,IAAW5X,EAAuB,EAAE,GACpC+X,IAAc/X,EAAI,EAAI,GACtBgY,IAAehY,EAAI,EAAI,GAEvBiY,IAAUjY,EAAA,GAEVkY,IAAW,YAAY;AAC3B,MAAAF,EAAa,QAAQ;AACrB,YAAM/V,IAAM,MAAM+C,GAAYiD,EAAM,WAAWsP,GAAkB;AACjE,MAAA9D,EAAM,QAAQxR,EAAI,MAClBoV,EAAO,QAAQpV,EAAI,YACnB+V,EAAa,QAAQ;AAAA,IACvB,GAEMG,KAAUnY,EAAI,EAAK;AAEzB,IAAAqJ,GAAU,YAAY;AACpB,MAAA0O,EAAY,QAAQ;AACpB,YAAMrE,IAAO,IAAInB,GAAA,EACd,kBAAkB5O,GAAe,IAAI,EACrC,aAAasE,EAAM,SAAS,EAC5B,SAAS,EAAE,UAAA4K,GAAU,UAAAD,EAAA,CAAU,EAC/B,MAAA;AACH,MAAAK,EAAS,QAAQ,MAAMS,EAAK,YAAA,GAC5BmE,EAAW5E,EAAS,MAAM,MAAM,GAChCmF,EAAoBnF,EAAS,MAAM,MAAM,GACzCoF,EAAA,GACAC,EAAWrF,EAAS,OAAO,OAAO,CAAC,GAAG,OAAO,EAAE,GAC/CgF,EAAQ,QAAQhF,EAAS,MAAM,SAC/B8E,EAAY,QAAQ,IACpBI,GAAQ,QAAQ;AAAA,IAClB,CAAC,GAEDI,GAAY,MAAM;AAEhB,MAAIJ,GAAQ,SACVD,EAAA;AAAA,IAEJ,CAAC;AAED,UAAMM,IAAoB,CAAC9E,MAAiB;AAC1C,MAAA2D,EAAO,UAAU3D,GACjBwE,EAAA;AAAA,IACF,GAEMO,IAAwB,CAACC,MAAqB;AAClD,MAAArB,EAAO,WAAWqB,GAClBR,EAAA;AAAA,IACF;AAEA,aAAS5H,GAAaxM,GAAsBkE,GAAW0I,GAA4BR,IAAe7J,IAAoB;AACpH,cAAQvC,GAAA;AAAA,QACN,KAAKJ,EAAe;AAClB,UAAAoP,EAAO,KAAK,EAAE,MAAMpC,GAAc,QAAQ,EAAE,YAAArK,GAAA,GAAc;AAC1D;AAAA,QACF;AACE,kBAAQ,KAAK,wBAAwBvC,CAAI;AAAA,MAAA;AAAA,IAE/C;AAEA,aAAS6U,EAAcC,GAA4BC,GAAoBnI,GAA4B;AACjG,cAAQkI,GAAA;AAAA,QACN,KAAKlV,EAAe;AAClB,UAAA4D,GAASuR,GAAY,EAAE,SAAS,CAAC,EAAE,KAAK,gBAAgB,OAAOjF,EAAA,GAAoB,UAAU,EAAA,CAAG,GAAG,GACnG/R,GAAU,WAAW,OAAO,iBAAiB,cAAc,QAAQ,iBAAiB;AACpF;AAAA,QACF,KAAK6B,EAAe;AAClB,UAAAoP,EAAO,KAAK,EAAE,MAAMpC,EAAA,CAAc;AAClC;AAAA,QACF;AACE,kBAAQ,KAAK,wBAAwBkI,CAAU;AAAA,MAAA;AAAA,IAErD;AAEA,aAAShF,IAAmB;AAC1B,aAAOf,EAAA,GAAY,UAAU,iBAAiB;AAAA,IAChD;AAEA,aAAStN,EAAaJ,GAAaK,GAAuB;AAIxD,aAHI,OAAOL,KAAQ,YAGfA,EAAI,QAAQ,oBAAoB,MAAM,KACjCA,IAEFA,EAAI,QAAQ,uBAAuBK,CAAK;AAAA,IACjD;AAEA,aAAS8S,EAAWhY,GAAa;AAC/B,YAAMwY,IAAU7F,EAAS,OAAO,MAAM,KAAK,CAAA9M,MAAQA,EAAK,QAAQ7F,CAAG,GAAG;AACtE,MAAA+W,EAAO,UAAUyB,GAAS,IAAI,CAAA3S,OACrB;AAAA,QACL,GAAGA;AAAA,QACH,OAAOZ,EAAaY,EAAK,OAAOyN,GAAkB;AAAA,MAAA,EAErD,KAAK,CAAA,GACNyD,EAAO,UAAU,GACjBa,EAAA;AAAA,IACF;AAGA,UAAMT,IAAazX,EAAyB,EAAE,GAGxC+Y,IAAmB/Y,EAAsD,EAAE;AAEjF,aAASoY,EAAoBlG,GAAqC;AAChE,UAAI,CAACA,EAAQ,QAAO,CAAA;AACpB,MAAA6G,EAAiB,QAAQ,OAAO,QAAQ7G,CAAM,EAC3C,OAAO,CAAC,CAAA,EAAG/L,CAAI,MAAMA,EAAK,UAAU,EACpC,IAAI,CAAC,CAAC6S,GAAUvU,CAAW,OAAO,EAAE,UAAAuU,GAAU,aAAAvU,EAAA,EAAc;AAAA,IACjE;AAGA,UAAM4T,IAAiB,MAAM;AAC3B,YAAMY,IAA4B,CAAA;AAClC,MAAAF,EAAiB,MAAM,QAAQ,CAAC,EAAE,UAAAC,GAAU,aAAAvU,QAAkB;AAC5D,QAAAwU,EAAKD,CAAQ,IAAI,CAAA,GACjBC,EAAKD,CAAQ,EAAE,QAAQvU,EAAY,YACnCwU,EAAKD,CAAQ,EAAE,WAAWvU,EAAY;AAAA,MACxC,CAAC,GACDgT,EAAW,QAAQwB;AAAA,IACrB,GAGMC,IAAe,MAAM;AACzB,MAAA7B,EAAO,UAAU,GACjBa,EAAA;AAAA,IACF,GAGMiB,KAAc,MAAM;AAKxB,MAAIlG,EAAS,SACXoF,EAAA,GAEFa,EAAA;AAAA,IACF;AAEA,aAASE,GAAmBxO,GAAgByO,GAAa;AAIvD,aAHI,EAAAzO,EAAO,aAAa,aAGpBA,EAAO,UAAU,aACfyO,EAAO,WAAW,OAGlBA,EAAO,WAAW;AAAA,IAK1B;;;;IAIO5L,KAAA,EAAA,OAAM,iBAAA,GAKFoB,KAAA,EAAA,OAAM,cAAA;;;AALf,SAAA/E,EAAA,GAAAC,EA2DM,OA3DN0D,IA2DM;AAAA,IA1DJpD,EACgCrB,EAAA,QAAA;AAAA,MADvB,OAAOA,EAAA,UAAU,OAAO,SAAK;AAAA,MAAS,UAAUA,EAAA,UAAU,OAAO,YAAQ;AAAA,MAC/E,OAAOA,EAAA,iBAAA;AAAA,IAAgB,GAAA,MAAA,GAAA,CAAA,SAAA,YAAA,OAAA,CAAA;AAAA,IAE1BqB,EA6BSmK,GAAA,MAAA;AAAA,MAAA,SAAA3I,EA5BP,MASM;AAAA,QATNoD,EASM,OATNJ,IASM;AAAA,UAAA5F,EAAA,CAAA,MAAAA,EAAA,CAAA,IARJgG,EAA0B,YAAtB,qBAAiB,EAAA;AAAA,UACrB5E,EAMU0M,GAAA,EAND,MAAK,SAAA,GAAQ;AAAA,YAAA,SAAAlL,EACV,MAAyB;AAAA,eAAA/B,EAAA,EAAA,GAAnCC,EAIWC,GAAA,MAAAC,EAJgBjB,EAAA,SAAO,CAAjB4B;qBAAyBA,EAAO;AAAA,cAAA,GAAA;AAAA,gBAC/BA,EAAO,aAAQ,sBAC7B9B,EAAwDE,EAAA,cAAA;AAAA,kBAAA,KAAA;AAAA,kBAAzC,QAAQ4B;AAAA,kBAAS,SAAO5B,EAAA;AAAA,gBAAA,GAAA,MAAA,GAAA,CAAA,QAAA,CAAA,KAAAmH,GAAA,IAAA,EAAA;AAAA;;;;;QAK/C9F,EAiBQiP,GAAA,EAjBA,QAAQ,CAAA,IAAA,EAAA,KAAQ;AAAA,UAAA,SAAAzN,EACZ,MAAgC;AAAA,aAAA/B,EAAA,EAAA,GAA1CC,EAKWC,GAAA,MAAAC,EALcjB,EAAA,kBAAgB,CAAxB7C,YACf2C,EAGQyQ,GAAA;AAAA,cAAA,KAJuCpT,EAAK;AAAA,cAC5C,MAAM;AAAA,cAAG,OAAM;AAAA,YAAA,GAAA;AAAA,yBACrB,MACuB;AAAA,gBADvBkE,EACuBrB,EAAA,aAAA;AAAA,kBADT,MAAM7C,EAAK;AAAA,kBAAW,QAAQA,EAAK;AAAA,kBAAA,YAAsB6C,EAAA,WAAW7C,EAAK,QAAQ,EAAE;AAAA,kBAAA,uBAAA,CAAA+C,MAA1BF,EAAA,WAAW7C,EAAK,QAAQ,EAAE,QAAK+C;AAAA,kBACpG,OAAM;AAAA,gBAAA,GAAA,MAAA,GAAA,CAAA,QAAA,UAAA,cAAA,qBAAA,CAAA;AAAA;;;YAGZmB,EASQkP,GAAA;AAAA,cATA,MAAM;AAAA,cAAG,OAAM;AAAA,YAAA,GAAA;AAAA,yBACrB,MAOU;AAAA,gBAPVlP,EAOU0M,GAAA,EAPD,MAAK,SAAA,GAAQ;AAAA,kBAAA,SAAAlL,EACpB,MAEW;AAAA,oBAFXxB,EAEWyB,GAAA;AAAA,sBAFD,MAAK;AAAA,sBAAU,MAAK;AAAA,sBAAU,SAAO9C,EAAA;AAAA,oBAAA,GAAA;AAAA,iCAAc,MAE7DC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,wBAAA8C,GAF6D,YAE7D,EAAA;AAAA,sBAAA,EAAA;AAAA;;;oBACA1B,EAEWyB,GAAA;AAAA,sBAFD,MAAK;AAAA,sBAAU,SAAO9C,EAAA;AAAA,oBAAA,GAAA;AAAA,iCAAa,MAE7CC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,wBAAA8C,GAF6C,WAE7C,EAAA;AAAA,sBAAA,EAAA;AAAA;;;;;;;;;;;;;;;IAMR1B,EAESmP,GAAA;AAAA,MAFD,MAAK;AAAA,MAAS,YAAWxQ,EAAA;AAAA,IAAA,GAAA;AAAA,iBACnB,MAA6B;AAAA,SAAAc,EAAA,EAAA,GAAzCC,EAA8EC,GAAA,MAAAC,EAApDjB,EAAA,UAAU,MAAI,CAArByQ,YAAnB3Q,EAA8E4Q,GAAA;AAAA,UAAnC,KAAKD,EAAI;AAAA,UAAM,OAAOA,EAAI;AAAA,QAAA,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA;;;;IAEvEpP,EAoBUsP,GAAA;AAAA,MApBA,SAAS3Q,EAAA;AAAA,MAAW,MAAMA,EAAA;AAAA,MAAO,QAAA;AAAA,MAAO,QAAA;AAAA,MAAQ,YAAU;AAAA,QAAA,SAAmBA,EAAA,OAAO;AAAA,QAAA,OAAsBA,EAAA,OAAO;AAAA,QAAA,UAAuBA,EAAA,OAAO;AAAA,QAAA,WAA2BA,EAAA,OAAO;AAAA,QAAA,cAA+BA,EAAA,OAAO;AAAA,QAAA,iBAAA,CAAA,IAAA,IAAA,IAAA,GAAA;AAAA;MAO7N,SAASA,EAAA;AAAA,MAAc,MAAK;AAAA,MAAU,QAAQA,EAAA;AAAA,MAAS,cAAaA,EAAA;AAAA,MACrE,kBAAkBA,EAAA;AAAA,IAAA,GAAA;AAAA,MAER,UAAQ6C,EACjB,CAOU,EARW,QAAAwN,QAAM;AAAA,QAC3BhP,EAOU0M,GAAA,EAPD,MAAK,QAAA,GAAO;AAAA,UAAA,SAAAlL,EACT,MAAyB;AAAA,aAAA/B,EAAA,EAAA,GAAnCC,EAKWC,GAAA,MAAAC,EALgBjB,EAAA,SAAO,CAAjB4B;mBAAyBA,EAAO;AAAA,YAAA,GAAA;AAAA,cAC/B5B,EAAA,mBAAmB4B,GAAQyO,CAAM,KAAAvP,EAAA,GAC/ChB,EACmEE,EAAA,cAAA;AAAA,gBAAA,KAAA;AAAA,gBADpD,QAAQ4B;AAAA,gBAAQ,MAAK;AAAA,gBACjC,SAAK,IAAMsD,MAASlF,eAAY,GAAIkF,GAAMmL,EAAO,UAAU;AAAA,cAAA,GAAA,MAAA,GAAA,CAAA,UAAA,SAAA,CAAA,KAAAlJ,GAAA,IAAA,EAAA;AAAA;;;;;;;;;kHChStEyJ,KAAW;AAAA,EACf,QAAQtL,GAAU/K,IAAyB,IAAI;AAE7C,IAAIA,EAAQ,UACV7B,GAAiB6B,EAAQ,MAAM,GAI7BA,EAAQ,UACV+K,EAAI,QAAQwC,IAAWvN,EAAQ,MAAM,GAInCA,EAAQ,SACV+K,EAAI,QAAQ+C,IAAU9N,EAAQ,KAAK,GAIjCA,EAAQ,eACV+K,EAAI,QAAQgD,IAAa/N,EAAQ,WAAW,GAI1CA,EAAQ,eACV+K,EAAI,QAAQiD,IAAahO,EAAQ,WAAW,GAI1CA,EAAQ,YACV+K,EAAI,QAAQ4C,IAAa3N,EAAQ,QAAQ,GAGvCA,EAAQ,eACV+K,EAAI,QAAQsG,IAAgBrR,EAAQ,WAAW,GAIjD+K,EAAI,UAAU,cAAcuL,EAAU,GACtCvL,EAAI,UAAU,cAAcwL,EAAU,GACtCxL,EAAI,UAAU,cAAcyL,EAAU,GACtCzL,EAAI,UAAU,YAAY0L,EAAQ;AAAA,EACpC;AACF;","x_google_ignoreList":[5,6,7,8,19,20,21,22,23,24,25,26]}