tav-ui
Version:
1 lines • 16.6 kB
Source Map (JSON)
{"version":3,"file":"useFormEvents2.mjs","sources":["../../../../../../../../packages/components/form/src/hooks/useFormEvents.ts"],"sourcesContent":["import { toRaw, unref } from 'vue'\nimport { cloneDeep, uniqBy } from 'lodash-es'\nimport { deepMerge } from '@tav-ui/utils/basic'\nimport { dateUtil } from '@tav-ui/utils/dateUtil'\nimport { isArray, isFunction, isNullOrUnDef, isObject, isString } from '@tav-ui/utils/is'\nimport { error } from '@tav-ui/utils/log'\nimport { dateItemType, handleInputNumberValue } from '../helper'\nimport type { NamePath } from 'ant-design-vue/lib/form/interface'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { FormActionType, FormEmitType, FormProps, FormSchema } from '../types/form'\n\ntype Recordable<T = any> = Record<string, T>\ninterface Fn<T = any, R = T> {\n (...arg: T[]): R\n}\ninterface UseFormActionContext {\n emit: FormEmitType\n getProps: ComputedRef<FormProps>\n getSchema: ComputedRef<FormSchema[]>\n formModel: Recordable\n defaultValueRef: Ref<Recordable>\n formElRef: Ref<FormActionType>\n schemaRef: Ref<FormSchema[]>\n handleFormValues: Fn\n}\nexport function useFormEvents({\n emit,\n getProps,\n formModel,\n getSchema,\n defaultValueRef,\n formElRef,\n schemaRef,\n handleFormValues,\n}: UseFormActionContext) {\n async function resetFields(): Promise<void> {\n const { resetFunc, submitOnReset } = unref(getProps)\n resetFunc && isFunction(resetFunc) && (await resetFunc())\n\n const formEl = unref(formElRef)\n if (!formEl) return\n\n Object.keys(formModel).forEach((key) => {\n formModel[key] = defaultValueRef.value[key]\n })\n clearValidate()\n emit('reset', toRaw(formModel))\n submitOnReset && handleSubmit()\n }\n\n /**\n * @description: Set form value\n */\n async function setFieldsValue(values: Recordable, useValidate = true): Promise<void> {\n const fields = unref(getSchema)\n .map((item) => item.field)\n .filter(Boolean)\n\n const validKeys: string[] = []\n Object.keys(values).forEach((key) => {\n const schema = unref(getSchema).find((item) => item.field === key)\n let value = values[key]\n\n const hasKey = Reflect.has(values, key)\n\n value = handleInputNumberValue(schema?.component, value)\n // 0| '' is allow\n if (hasKey && fields.includes(key)) {\n // time type\n if (itemIsDateType(key)) {\n if (Array.isArray(value)) {\n // const arr: any[] = []\n // for (const ele of value) arr.push(ele ? dateUtil(ele) : null)\n // formModel[key] = arr\n formModel[key] = value\n } else {\n const { componentProps } = schema || {}\n let _props = componentProps as any\n if (typeof componentProps === 'function') _props = _props({ formModel })\n\n formModel[key] = value ? (_props?.valueFormat ? value : dateUtil(value)) : null\n }\n } else {\n formModel[key] = value\n }\n validKeys.push(key)\n }\n })\n useValidate &&\n validateFields(validKeys).catch((_) => {\n // console.log(_)\n })\n }\n /**\n * @description: Delete based on field name\n */\n async function removeSchemaByFiled(fields: string | string[]): Promise<void> {\n const schemaList: FormSchema[] = cloneDeep(unref(getSchema))\n if (!fields) return\n\n let fieldList: string[] = isString(fields) ? [fields] : fields\n if (isString(fields)) fieldList = [fields]\n\n for (const field of fieldList) _removeSchemaByFiled(field, schemaList)\n\n schemaRef.value = schemaList\n }\n\n /**\n * @description: Delete based on field name\n */\n function _removeSchemaByFiled(field: string, schemaList: FormSchema[]): void {\n if (isString(field)) {\n const index = schemaList.findIndex((schema) => schema.field === field)\n if (index !== -1) {\n delete formModel[field]\n schemaList.splice(index, 1)\n }\n }\n }\n\n /**\n * @description: Insert after a certain field, if not insert the last\n */\n async function appendSchemaByField(schema: FormSchema, prefixField?: string, first = false) {\n const schemaList: FormSchema[] = cloneDeep(unref(getSchema))\n\n const index = schemaList.findIndex((schema) => schema.field === prefixField)\n\n if (!prefixField || index === -1 || first) {\n first ? schemaList.unshift(schema) : schemaList.push(schema)\n schemaRef.value = schemaList\n return\n }\n if (index !== -1) schemaList.splice(index + 1, 0, schema)\n\n schemaRef.value = schemaList\n }\n\n async function resetSchema(data: Partial<FormSchema> | Partial<FormSchema>[]) {\n let updateData: Partial<FormSchema>[] = []\n if (isObject(data)) updateData.push(data as FormSchema)\n\n if (isArray(data)) updateData = [...data]\n\n const hasField = updateData.every(\n (item) =>\n item.component === 'Divider' ||\n item.component === 'FormTitle' ||\n (Reflect.has(item, 'field') && item.field)\n )\n\n if (!hasField) {\n error(\n 'All children of the form Schema array that need to be updated must contain the `field` field'\n )\n return\n }\n schemaRef.value = updateData as FormSchema[]\n }\n\n async function updateSchema(data: Partial<FormSchema> | Partial<FormSchema>[]) {\n let updateData: Partial<FormSchema>[] = []\n if (isObject(data)) {\n updateData.push(data as FormSchema)\n }\n if (isArray(data)) {\n updateData = [...data]\n }\n\n const hasField = updateData.every(\n (item) =>\n item.component === 'Divider' ||\n item.component === 'FormTitle' ||\n (Reflect.has(item, 'field') && item.field)\n )\n\n if (!hasField) {\n error(\n 'All children of the form Schema array that need to be updated must contain the `field` field'\n )\n return\n }\n const schema: FormSchema[] = unref(getSchema)\n updateData.forEach((item) => {\n // debugger\n const findResult = schema.find((val) => val.field === item.field)\n if (findResult) {\n const newSchema: FormSchema = deepMerge(findResult, item)\n schema.push(newSchema)\n } else {\n schema.push(item as FormSchema)\n }\n // unref(getSchema).forEach((val) => {\n // if (val.field === item.field) {\n // const newSchema = deepMerge(val, item);\n // schema.push(newSchema as FormSchema);\n // } else {\n // schema.push(val);\n // }\n // });\n })\n schemaRef.value = uniqBy(schema, 'field')\n }\n\n // 转换数据,由于InputNumber现在是string类型,需要转换为number\n function transFormFieldsValue(values: Recordable): Recordable {\n for (let i = 0; i < unref(getSchema).length; i++) {\n const item = unref(getSchema)[i]\n if (item.component === 'InputNumber' && !isNullOrUnDef(values[item.field])) {\n values[item.field] = Number(values[item.field])\n }\n }\n return values\n }\n\n function getFieldsValue(): Recordable {\n const formEl = unref(formElRef)\n if (!formEl) return {}\n const res = handleFormValues(toRaw(unref(formModel)))\n return transFormFieldsValue(res)\n }\n\n /**\n * @description: Is it time\n */\n function itemIsDateType(key: string) {\n return unref(getSchema).some((item) => {\n return item.field === key ? dateItemType.includes(item.component as any) : false\n })\n }\n\n async function validateFields(nameList?: NamePath[] | undefined) {\n return unref(formElRef)?.validateFields(nameList)\n }\n\n async function validate(nameList?: NamePath[] | undefined) {\n // eslint-disable-next-line no-return-await\n try {\n const res = await unref(formElRef)?.validate(nameList)\n return transFormFieldsValue(res)\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n async function clearValidate(name?: string | string[]) {\n await unref(formElRef)?.clearValidate(name)\n }\n\n async function scrollToField(name: NamePath, options?: ScrollOptions | undefined) {\n await unref(formElRef)?.scrollToField(name, options)\n }\n\n /**\n * @description: Form submission\n */\n async function handleSubmit(e?: Event): Promise<void> {\n e && e.preventDefault()\n const { submitFunc } = unref(getProps)\n if (submitFunc && isFunction(submitFunc)) {\n await submitFunc()\n return\n }\n const formEl = unref(formElRef)\n if (!formEl) return\n try {\n const values = await validate()\n const res = handleFormValues(values)\n emit('submit', res)\n } catch (error: any) {\n throw new Error(error)\n }\n }\n\n return {\n handleSubmit,\n clearValidate,\n validate,\n validateFields,\n getFieldsValue,\n updateSchema,\n resetSchema,\n appendSchemaByField,\n removeSchemaByFiled,\n resetFields,\n setFieldsValue,\n scrollToField,\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAOO,SAAS,aAAa,CAAC;AAC9B,EAAE,IAAI;AACN,EAAE,QAAQ;AACV,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,eAAe;AACjB,EAAE,SAAS;AACX,EAAE,SAAS;AACX,EAAE,gBAAgB;AAClB,CAAC,EAAE;AACH,EAAE,eAAe,WAAW,GAAG;AAC/B,IAAI,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzD,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,SAAS,EAAE,CAAC;AAC5D,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AACpC,IAAI,IAAI,CAAC,MAAM;AACf,MAAM,OAAO;AACb,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAC5C,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClD,KAAK,CAAC,CAAC;AACP,IAAI,aAAa,EAAE,CAAC;AACpB,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACpC,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;AACpC,GAAG;AACH,EAAE,eAAe,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE;AAC5D,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9E,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC;AACzB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AACzC,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;AACzE,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9B,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC9C,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/D,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC1C,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE;AACjC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACpC,YAAY,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACnC,WAAW,MAAM;AACjB,YAAY,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;AACpD,YAAY,IAAI,MAAM,GAAG,cAAc,CAAC;AACxC,YAAY,IAAI,OAAO,cAAc,KAAK,UAAU;AACpD,cAAc,MAAM,GAAG,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7C,YAAY,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAC1F,WAAW;AACX,SAAS,MAAM;AACf,UAAU,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjC,SAAS;AACT,QAAQ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,WAAW,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;AAC1D,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,eAAe,mBAAmB,CAAC,MAAM,EAAE;AAC7C,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACnD,IAAI,IAAI,CAAC,MAAM;AACf,MAAM,OAAO;AACb,IAAI,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AACzD,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC;AACxB,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,IAAI,KAAK,MAAM,KAAK,IAAI,SAAS;AACjC,MAAM,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC9C,IAAI,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,SAAS,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE;AACnD,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzB,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AAC7E,MAAM,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACxB,QAAQ,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,QAAQ,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE,eAAe,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE;AACzE,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACnD,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;AACnF,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,EAAE;AAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnE,MAAM,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;AACnC,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC;AACpB,MAAM,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9C,IAAI,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,eAAe,WAAW,CAAC,IAAI,EAAE;AACnC,IAAI,IAAI,UAAU,GAAG,EAAE,CAAC;AACxB,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;AACtB,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;AACrB,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5J,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,MAAM,KAAK,CAAC,8FAA8F,CAAC,CAAC;AAC5G,MAAM,OAAO;AACb,KAAK;AACL,IAAI,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;AACjC,GAAG;AACH,EAAE,eAAe,YAAY,CAAC,IAAI,EAAE;AACpC,IAAI,IAAI,UAAU,GAAG,EAAE,CAAC;AACxB,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxB,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,KAAK;AACL,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,KAAK;AACL,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5J,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,MAAM,KAAK,CAAC,8FAA8F,CAAC,CAAC;AAC5G,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AACpC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACjC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACtD,QAAQ,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/B,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,GAAG;AACH,EAAE,SAAS,oBAAoB,CAAC,MAAM,EAAE;AACxC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtD,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AAClF,QAAQ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,OAAO;AACP,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,SAAS,cAAc,GAAG;AAC5B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AACpC,IAAI,IAAI,CAAC,MAAM;AACf,MAAM,OAAO,EAAE,CAAC;AAChB,IAAI,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAI,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;AACrC,GAAG;AACH,EAAE,SAAS,cAAc,CAAC,GAAG,EAAE;AAC/B,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;AAC3C,MAAM,OAAO,IAAI,CAAC,KAAK,KAAK,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;AAChF,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,eAAe,cAAc,CAAC,QAAQ,EAAE;AAC1C,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;AACtD,GAAG;AACH,EAAE,eAAe,QAAQ,CAAC,QAAQ,EAAE;AACpC,IAAI,IAAI;AACR,MAAM,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7D,MAAM,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;AACvC,KAAK,CAAC,OAAO,MAAM,EAAE;AACrB,MAAM,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpC,KAAK;AACL,GAAG;AACH,EAAE,eAAe,aAAa,CAAC,IAAI,EAAE;AACrC,IAAI,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAChD,GAAG;AACH,EAAE,eAAe,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE;AAC9C,IAAI,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzD,GAAG;AACH,EAAE,eAAe,YAAY,CAAC,CAAC,EAAE;AACjC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5B,IAAI,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3C,IAAI,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE;AAC9C,MAAM,MAAM,UAAU,EAAE,CAAC;AACzB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AACpC,IAAI,IAAI,CAAC,MAAM;AACf,MAAM,OAAO;AACb,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;AACtC,MAAM,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC1B,KAAK,CAAC,OAAO,MAAM,EAAE;AACrB,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,KAAK;AACL,GAAG;AACH,EAAE,OAAO;AACT,IAAI,YAAY;AAChB,IAAI,aAAa;AACjB,IAAI,QAAQ;AACZ,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,YAAY;AAChB,IAAI,WAAW;AACf,IAAI,mBAAmB;AACvB,IAAI,mBAAmB;AACvB,IAAI,WAAW;AACf,IAAI,cAAc;AAClB,IAAI,aAAa;AACjB,GAAG,CAAC;AACJ;;;;"}