{"version":3,"file":"use-table.mjs","sources":["../../../../../../packages/components/table/src/use-table.tsx"],"sourcesContent":["import type { FormInstance, TableInstance, FormItemProp } from 'element-plus'\nimport {\n  ref,\n  computed,\n  type Ref,\n  reactive,\n  useTemplateRef,\n  getCurrentInstance,\n  toRaw,\n  useAttrs,\n  watch,\n} from 'vue'\nimport { useRequest } from '@el-plus/hooks/use-request'\nimport type { TableColumn, TableProps, TableScope } from './table'\nimport type { ButtonProps } from '@el-plus/components/buttons'\nimport type { FormProps } from '@el-plus/components/form'\nimport { bus } from '@el-plus/utils'\nimport { merge } from 'lodash-unified'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\nimport { cloneDeep } from 'lodash-unified'\nimport { EditPen } from '@element-plus/icons-vue'\nimport { ElIcon } from 'element-plus'\nimport { useFormDialog } from '@el-plus/hooks/dialog/use-form-dialog'\n\nexport type ISearch = (init: boolean, isPagination?: boolean) => void\nexport const useTable = (props: TableProps) => {\n  const elFormRef = useTemplateRef<FormInstance>('elFormRef')\n  const elTableRef = useTemplateRef<TableInstance>('elTableRef')\n  const allData = ref<Record<string, unknown>[]>([]) // 所有数据\n  const customData = ref<Record<string, unknown>[]>([]) // 当前展示数据\n  const apiTotal = ref(0) // 后端分页total\n  const { loading, requestFn } = useRequest({\n    api: props.api,\n    method: props.method,\n    reqData: props.reqData,\n    reqParams: props.reqParams,\n    reqBefore: props.reqBefore,\n    reqAfter: props.reqAfter,\n    cancelToken: true,\n    hooks: {\n      success(data) {\n        if (Array.isArray(data)) {\n          allData.value = data\n        } else if (data && typeof data === 'object') {\n          const rawData = data as Record<string, any>\n          allData.value = rawData?.list || rawData?.data || []\n        } else {\n          allData.value = []\n        }\n        if (props.isFrontPage) {\n          frontPaginationHandler()\n        }else{\n          customData.value = allData.value\n          apiTotal.value = (data as { total: number }).total || 0\n        }\n      },\n      fail(error) {\n        console.error(error)\n      },\n    },\n  })\n  // 自定义列\n  const customColumns = ref<TableColumn[]>([])\n  // 加载列表\n  const attrs = useAttrs()\n  const search: ISearch = async (init = false, isPagination = false) => {\n    const beforeSearch = attrs['before-search']\n    if (typeof beforeSearch === 'function') {\n      await beforeSearch?.()\n    }\n    if (init) {\n      pagination.pageNo = 1\n    }\n    // 前端分页+点击分页/切换页码\n    if (isPagination && props.isFrontPage) {\n      frontPaginationHandler()\n    } else {\n      if (props.api) {\n        requestFn!({\n          pageNo: pagination.pageNo,\n          pageSize: pagination.pageSize,\n          pageNum: pagination.pageNo,\n        })\n      } \n    }\n  }\n  const { pagination, paginationProps } = usePagination(\n    props,\n    search,\n    allData,\n    apiTotal,\n  )\n  // 前端分页\n  const frontPaginationHandler = () => {\n    const { pageNo, pageSize } = pagination\n    const data = allData.value.filter((item, index) => {\n      return index < pageNo * pageSize && index >= (pageNo - 1) * pageSize\n    })\n    customData.value = data\n  }\n  if (!props.api) {\n    watch(\n      () => props.data,\n      (newValue) => {\n        allData.value = newValue as Record<string, any>[]\n        if (props.isFrontPage) {\n          frontPaginationHandler()\n        } else {\n          customData.value = allData.value\n        }\n      },\n      {\n        deep: true,\n        immediate: true,\n      },\n    )\n  }\n\n  // 初始化加载\n  ;(async () => {\n    if (props.isInitSearch) {\n      if (props.customColumnModule) {\n        loading!.value = true\n        const columns = await bus.once('loadedCustomColumn')\n        loading!.value = false\n        customColumns.value = columns\n        bus.on('loadedCustomColumn', (columns: TableColumn[]) => {\n          customColumns.value = columns\n        })\n      }\n      search(true)\n    }\n  })()\n\n  // 校验\n  const validate = () => {\n    return elFormRef.value!.validate()\n  }\n  // 重置校验\n  const resetFields = (props: FormItemProp) => {\n    return elFormRef.value!.resetFields(props)\n  }\n  // 清理选择,用于多选表格，清空用户的选择\n  const clearSelection = () => {\n    return elTableRef.value!.clearSelection()\n  }\n  // 清理某个字段的表单验证信息\n  const clearValidate = (props: FormItemProp) => {\n    return elFormRef.value!.clearValidate(props)\n  }\n  // 获取选中数据\n  const getSelectionRows = () => {\n    return elTableRef.value!.getSelectionRows()\n  }\n  // 格式化操作按钮\n  const formatActionButtons = (list: ButtonProps[], scope: TableScope) => {\n    return list.map((item) => {\n      if (item.onClick) {\n        return {\n          ...item,\n          onClick: item.onClick.bind(null, scope),\n        }\n      }\n      return item\n    })\n  }\n\n  return {\n    loading,\n    data: customData,\n    search,\n    pagination,\n    paginationProps,\n    validate,\n    clearSelection,\n    resetFields,\n    clearValidate,\n    getSelectionRows,\n    elFormRef,\n    elTableRef,\n    formatActionButtons,\n    customColumns: customColumns as unknown as Ref<TableColumn[]>,\n  }\n}\nconst usePagination = function (\n  props: TableProps,\n  search: ISearch,\n  allData: Ref<Record<string, any>[]>,\n  apiTotal: Ref<number>,\n) {\n  const defaultPaginationProps = props.paginationProps || {}\n  const pageSizes = defaultPaginationProps.pageSizes || [20, 50, 100, 200]\n  const pagination = reactive({\n    total: computed(() => {\n      return !props.isFrontPage && props.api ? apiTotal.value : allData.value.length\n    }),\n    pageNo: 1,\n    pageSize: pageSizes[0],\n  })\n  const paginationProps = computed(() => {\n    const onSizeChange = defaultPaginationProps.onSizeChange\n    const onCurrentChange = defaultPaginationProps.onCurrentChange\n    return {\n      layout: 'total, sizes, prev, pager, next, jumper',\n      ...defaultPaginationProps,\n      pageSizes,\n      onSizeChange: (value: number) => {\n        onSizeChange && onSizeChange(value)\n        search(true, true)\n      },\n      onCurrentChange: (value: number) => {\n        onCurrentChange && onCurrentChange(value)\n        search(false, true)\n      },\n    }\n  })\n  return {\n    pagination,\n    paginationProps,\n  }\n}\n\nexport const useTableColumn = (\n  props: TableProps,\n  tableData: Ref<TableProps['data']>,\n  customColumns: Ref<TableColumn[]>,\n) => {\n  const instance = getCurrentInstance()\n  const columnProps = (column: TableColumn) => {\n    column.props = column.props || {}\n    const attrs = {\n      'show-overflow-tooltip': true,\n      align: column.align || props.align,\n      minWidth: column.minWidth || props.minWidth,\n      // ...prepareEvents<TableEmits>(emit, tableEmits),\n    } as TableColumn\n    if (!column.renderHeader) {\n      // 必填\n      let required = column.required\n      if (typeof column.required === 'function') {\n        required = column.required()\n      }\n      // 批量编辑\n      const editable = column.editable\n      attrs['renderHeader'] = () => {\n        return (\n          <span>\n            {required ? (\n              <span style=\"color:var(--el-color-danger)\"> * </span>\n            ) : (\n              ''\n            )}\n            <span\n              class={{ 'is-edit': editable }}\n              onClick={\n                editable\n                  ? async () => {\n                      const cloneColumn = { ...column }\n                      delete cloneColumn.editable\n                      const rawRender = cloneColumn.render\n                      const formData = reactive({})\n                      if (rawRender) {\n                        cloneColumn.render = () => {\n                          return rawRender({\n                            row: formData,\n                          })\n                        }\n                      }\n                      const formDialog = useFormDialog({\n                        title: cloneColumn.label,\n                        dialogProps: {\n                          destroyOnClose: true,\n                          instance,\n                        },\n                        formItemList: [\n                          cloneColumn,\n                        ] as FormProps['formItemList'],\n                        formData,\n                        // formData: reactive({}),\n                      })\n                      const data = (await formDialog.open()) as Record<\n                        string,\n                        any\n                      >\n                      ;(tableData.value || []).forEach((item) => {\n                        item[column.prop!] = data![column.prop!]\n                      })\n                      if (typeof editable === 'function') {\n                        editable(toRaw(data))\n                      }\n                    }\n                  : void 0\n              }\n            >\n              {column.label}\n              {editable ? (\n                <ElIcon>\n                  <EditPen />\n                </ElIcon>\n              ) : (\n                ''\n              )}\n            </span>\n          </span>\n        )\n      }\n    }\n    if (column.filter) {\n      const arr = tableData.value!.map((item) => item[column.prop!])\n      attrs.filters = [...new Set(arr)].map((item) => {\n        return {\n          text: item,\n          value: item,\n        }\n      })\n      attrs.filterMethod = (value, row) => {\n        return row[column.prop!] === value\n      }\n    }\n    if (column.type === 'EpLink') {\n      attrs.className = 'table-column-link'\n    }\n\n    return {\n      ...attrs,\n      ...prepareProps(column),\n    }\n  }\n  const columnList = computed(() => {\n    const columns = props.customColumnModule\n      ? customColumns.value\n      : props.columns\n    return columns!\n      .map((column: TableColumn) => {\n        const newColumn = columnProps(column)\n        if (props.formatColumns!.length) {\n          const formatColumn = props.formatColumns!.find(\n            (item) => item.prop === column.prop,\n          )\n          if (formatColumn) {\n            // newColumn = { ...newColumn, ...formatColumn }\n            merge(newColumn, formatColumn)\n          }\n        }\n        return newColumn\n      })\n      .filter((column) => {\n        if ('show' in column) {\n          return typeof column.show === 'function'\n            ? column.show(column)\n            : column.show\n        } else if ('hide' in column) {\n          return typeof column.hide === 'function'\n            ? !column.hide(column)\n            : !column.hide\n        }\n        return true\n      })\n  })\n  return {\n    columnList,\n  }\n}\n\nexport const useTableFormItem = (props: TableProps) => {\n  const formItemProps = (scope: TableScope, rawItem: TableColumn) => {\n    const item = cloneDeep(rawItem)\n    let required = item.required\n    if (typeof required === 'function') {\n      required = required()\n    }\n    if (item.cellRequired) {\n      required = item.cellRequired(scope)\n    }\n    let disabled = props.disabled\n    if ('disabled' in item) {\n      if (typeof item.disabled === 'function') {\n        disabled = item.disabled(scope)\n      } else {\n        disabled = item.disabled || false\n      }\n    }\n    if (item.type === 'EpSelect' && item.props) {\n      if ('options' in item.props && typeof item.props.options === 'function') {\n        item.props.options = item.props.options(scope)\n      }\n      if (\n        'disabledOption' in item.props &&\n        typeof item.props.disabledOption === 'function'\n      ) {\n        const disabledOption = item.props.disabledOption\n        item.props.disabledOption = (...args: unknown[]) =>\n          disabledOption(...args, scope)\n      }\n      if ('desc' in item.props && typeof item.props.desc === 'function') {\n        item.props.desc = item.props.desc(scope)\n      }\n    }\n\n    if (item.type === 'EpButtons' && item.props) {\n      item.props.list.forEach((btnItem: ButtonProps) => {\n        if (btnItem.prop) {\n          btnItem.name = scope.row[btnItem.prop] as string\n        }\n        if (btnItem.onClick) {\n          btnItem.onClick = btnItem.onClick.bind(null, scope)\n        }\n      })\n    }\n    if (item.type === 'EpLink') {\n      ;(item.props ? item.props : (item.props = {})).content =\n        item.props.content || scope.row[item.prop!]\n    }\n    for (const key in item) {\n      if (key.startsWith('on') && typeof item[key] === 'function') {\n        const fn = item[key]\n        item[key] = (...args: unknown[]) => {\n          let event: Event | unknown\n          if (args[0] instanceof Event) {\n            // 删除 event\n            event = args.shift()\n          }\n          return fn(...args, scope, event)\n        }\n      }\n    }\n    return {\n      ...prepareProps(item),\n      isShowLabel: false,\n      required,\n      hideRequiredAsterisk: 'cellRequired' in item ? false : required,\n      prop: `table.${scope.$index}.${item.prop}`,\n      tableProp: item.prop, // table里的表单需要绑定的prop\n      props: {\n        ...item.props,\n        disabled,\n      },\n    }\n  }\n  return {\n    formItemProps,\n  }\n}\n"],"names":["useTable","props","elFormRef","useTemplateRef","elTableRef","allData","ref","customData","apiTotal","loading","requestFn","useRequest","api","method","reqData","reqParams","reqBefore","reqAfter","cancelToken","hooks","success","data","Array","isArray","value","rawData","list","isFrontPage","frontPaginationHandler","total","fail","error","console","customColumns","attrs","useAttrs","search","init","isPagination","beforeSearch","pagination","pageNo","pageSize","pageNum","paginationProps","usePagination","filter","item","index","watch","newValue","deep","immediate","isInitSearch","customColumnModule","columns","bus","once","on","validate","resetFields","clearSelection","clearValidate","getSelectionRows","formatActionButtons","scope","map","onClick","bind","defaultPaginationProps","pageSizes","reactive","computed","length","onSizeChange","onCurrentChange","layout","useTableColumn","tableData","instance","getCurrentInstance","columnProps","column","align","minWidth","renderHeader","required","editable","_createVNode","_createTextVNode","cloneColumn","rawRender","render","formData","row","formDialog","useFormDialog","title","label","dialogProps","destroyOnClose","formItemList","open","forEach","prop","toRaw","ElIcon","default","EditPen","arr","filters","Set","text","filterMethod","type","className","prepareProps","columnList","newColumn","formatColumns","formatColumn","find","merge","show","hide","useTableFormItem","formItemProps","rawItem","cloneDeep","cellRequired","disabled","options","disabledOption","args","desc","btnItem","name","content","key","startsWith","fn","event","Event","shift","isShowLabel","hideRequiredAsterisk","$index","tableProp"],"mappings":";;;;;;;;;AA8BO,MAAMA,WAAYC,CAAAA,KAAAA,KAAsB;AAC7C,EAAA,MAAMC,SAAAA,GAAYC,eAA6B,WAAW,CAAA;AAC1D,EAAA,MAAMC,UAAAA,GAAaD,eAA8B,YAAY,CAAA;AAC7D,EAAA,MAAME,OAAAA,GAAUC,GAAAA,CAA+B,EAAE,CAAA;AACjD,EAAA,MAAMC,UAAAA,GAAaD,GAAAA,CAA+B,EAAE,CAAA;AACpD,EAAA,MAAME,QAAAA,GAAWF,IAAI,CAAC,CAAA;AACtB,EAAA,MAAM;AAAA,IAAEG,OAAAA;AAAAA,IAASC;AAAAA,MAAcC,UAAAA,CAAW;AAAA,IACxCC,KAAKX,KAAAA,CAAMW,GAAAA;AAAAA,IACXC,QAAQZ,KAAAA,CAAMY,MAAAA;AAAAA,IACdC,SAASb,KAAAA,CAAMa,OAAAA;AAAAA,IACfC,WAAWd,KAAAA,CAAMc,SAAAA;AAAAA,IACjBC,WAAWf,KAAAA,CAAMe,SAAAA;AAAAA,IACjBC,UAAUhB,KAAAA,CAAMgB,QAAAA;AAAAA,IAChBC,WAAAA,EAAa,IAAA;AAAA,IACbC,KAAAA,EAAO;AAAA,MACLC,QAAQC,IAAAA,EAAM;AACZ,QAAA,IAAIC,KAAAA,CAAMC,OAAAA,CAAQF,IAAI,CAAA,EAAG;AACvBhB,UAAAA,OAAAA,CAAQmB,KAAAA,GAAQH,IAAAA;AAAAA,QAClB,CAAA,MAAA,IAAWA,IAAAA,IAAQ,OAAOA,IAAAA,KAAS,QAAA,EAAU;AAC3C,UAAA,MAAMI,OAAAA,GAAUJ,IAAAA;AAChBhB,UAAAA,OAAAA,CAAQmB,KAAAA,GAAQC,OAAAA,EAASC,IAAAA,IAAQD,OAAAA,EAASJ,QAAQ,EAAA;AAAA,QACpD,CAAA,MAAO;AACLhB,UAAAA,OAAAA,CAAQmB,QAAQ,EAAA;AAAA,QAClB;AACA,QAAA,IAAIvB,MAAM0B,WAAAA,EAAa;AACrBC,UAAAA,sBAAAA,EAAuB;AAAA,QACzB,CAAA,MAAK;AACHrB,UAAAA,UAAAA,CAAWiB,QAAQnB,OAAAA,CAAQmB,KAAAA;AAC3BhB,UAAAA,QAAAA,CAASgB,KAAAA,GAASH,KAA2BQ,KAAAA,IAAS,CAAA;AAAA,QACxD;AAAA,MACF,CAAA;AAAA,MACAC,KAAKC,KAAAA,EAAO;AACVC,QAAAA,OAAAA,CAAQD,MAAMA,KAAK,CAAA;AAAA,MACrB;AAAA;AACF,GACD,CAAA;AAED,EAAA,MAAME,aAAAA,GAAgB3B,GAAAA,CAAmB,EAAE,CAAA;AAE3C,EAAA,MAAM4B,QAAQC,QAAAA,EAAS;AACvB,EAAA,MAAMC,MAAAA,GAAkB,OAAOC,IAAAA,GAAO,KAAA,EAAOC,eAAe,KAAA,KAAU;AACpE,IAAA,MAAMC,YAAAA,GAAeL,MAAM,eAAe,CAAA;AAC1C,IAAA,IAAI,OAAOK,iBAAiB,UAAA,EAAY;AACtC,MAAA,MAAMA,YAAAA,IAAe;AAAA,IACvB;AACA,IAAA,IAAIF,IAAAA,EAAM;AACRG,MAAAA,UAAAA,CAAWC,MAAAA,GAAS,CAAA;AAAA,IACtB;AAEA,IAAA,IAAIH,YAAAA,IAAgBrC,MAAM0B,WAAAA,EAAa;AACrCC,MAAAA,sBAAAA,EAAuB;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,IAAI3B,MAAMW,GAAAA,EAAK;AACbF,QAAAA,SAAAA,CAAW;AAAA,UACT+B,QAAQD,UAAAA,CAAWC,MAAAA;AAAAA,UACnBC,UAAUF,UAAAA,CAAWE,QAAAA;AAAAA,UACrBC,SAASH,UAAAA,CAAWC;AAAAA,SACrB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,MAAM;AAAA,IAAED,UAAAA;AAAAA,IAAYI;AAAAA,GAAgB,GAAIC,aAAAA,CACtC5C,KAAAA,EACAmC,MAAAA,EACA/B,SACAG,QACF,CAAA;AAEA,EAAA,MAAMoB,yBAAyBA,MAAM;AACnC,IAAA,MAAM;AAAA,MAAEa,MAAAA;AAAAA,MAAQC;AAAAA,KAAS,GAAIF,UAAAA;AAC7B,IAAA,MAAMnB,OAAOhB,OAAAA,CAAQmB,KAAAA,CAAMsB,MAAAA,CAAO,CAACC,MAAMC,KAAAA,KAAU;AACjD,MAAA,OAAOA,KAAAA,GAAQP,MAAAA,GAASC,QAAAA,IAAYM,KAAAA,IAAAA,CAAUP,SAAS,CAAA,IAAKC,QAAAA;AAAAA,IAC9D,CAAC,CAAA;AACDnC,IAAAA,UAAAA,CAAWiB,KAAAA,GAAQH,IAAAA;AAAAA,EACrB,CAAA;AACA,EAAA,IAAI,CAACpB,MAAMW,GAAAA,EAAK;AACdqC,IAAAA,KAAAA,CACE,MAAMhD,KAAAA,CAAMoB,IAAAA,EACX6B,CAAAA,QAAAA,KAAa;AACZ7C,MAAAA,OAAAA,CAAQmB,KAAAA,GAAQ0B,QAAAA;AAChB,MAAA,IAAIjD,MAAM0B,WAAAA,EAAa;AACrBC,QAAAA,sBAAAA,EAAuB;AAAA,MACzB,CAAA,MAAO;AACLrB,QAAAA,UAAAA,CAAWiB,QAAQnB,OAAAA,CAAQmB,KAAAA;AAAAA,MAC7B;AAAA,IACF,CAAA,EACA;AAAA,MACE2B,IAAAA,EAAM,IAAA;AAAA,MACNC,SAAAA,EAAW;AAAA,KAEf,CAAA;AAAA,EACF;AAGC,EAAA,CAAC,YAAY;AACZ,IAAA,IAAInD,MAAMoD,YAAAA,EAAc;AACtB,MAAA,IAAIpD,MAAMqD,kBAAAA,EAAoB;AAC5B7C,QAAAA,OAAAA,CAASe,KAAAA,GAAQ,IAAA;AACjB,QAAA,MAAM+B,OAAAA,GAAU,MAAMC,GAAAA,CAAIC,IAAAA,CAAK,oBAAoB,CAAA;AACnDhD,QAAAA,OAAAA,CAASe,KAAAA,GAAQ,KAAA;AACjBS,QAAAA,aAAAA,CAAcT,KAAAA,GAAQ+B,OAAAA;AACtBC,QAAAA,GAAAA,CAAIE,EAAAA,CAAG,oBAAA,EAAuBH,CAAAA,QAAAA,KAA2B;AACvDtB,UAAAA,aAAAA,CAAcT,KAAAA,GAAQ+B,QAAAA;AAAAA,QACxB,CAAC,CAAA;AAAA,MACH;AACAnB,MAAAA,MAAAA,CAAO,IAAI,CAAA;AAAA,IACb;AAAA,EACF,CAAA,GAAG;AAGH,EAAA,MAAMuB,WAAWA,MAAM;AACrB,IAAA,OAAOzD,SAAAA,CAAUsB,MAAOmC,QAAAA,EAAS;AAAA,EACnC,CAAA;AAEA,EAAA,MAAMC,WAAAA,GAAe3D,CAAAA,MAAAA,KAAwB;AAC3C,IAAA,OAAOC,SAAAA,CAAUsB,KAAAA,CAAOoC,WAAAA,CAAY3D,MAAK,CAAA;AAAA,EAC3C,CAAA;AAEA,EAAA,MAAM4D,iBAAiBA,MAAM;AAC3B,IAAA,OAAOzD,UAAAA,CAAWoB,MAAOqC,cAAAA,EAAe;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAMC,aAAAA,GAAiB7D,CAAAA,MAAAA,KAAwB;AAC7C,IAAA,OAAOC,SAAAA,CAAUsB,KAAAA,CAAOsC,aAAAA,CAAc7D,MAAK,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM8D,mBAAmBA,MAAM;AAC7B,IAAA,OAAO3D,UAAAA,CAAWoB,MAAOuC,gBAAAA,EAAiB;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAMC,mBAAAA,GAAsBA,CAACtC,IAAAA,EAAqBuC,KAAAA,KAAsB;AACtE,IAAA,OAAOvC,IAAAA,CAAKwC,IAAKnB,CAAAA,IAAAA,KAAS;AACxB,MAAA,IAAIA,KAAKoB,OAAAA,EAAS;AAChB,QAAA,OAAO;AAAA,UACL,GAAGpB,IAAAA;AAAAA,UACHoB,OAAAA,EAASpB,IAAAA,CAAKoB,OAAAA,CAAQC,IAAAA,CAAK,MAAMH,KAAK;AAAA,SACxC;AAAA,MACF;AACA,MAAA,OAAOlB,IAAAA;AAAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO;AAAA,IACLtC,OAAAA;AAAAA,IACAY,IAAAA,EAAMd,UAAAA;AAAAA,IACN6B,MAAAA;AAAAA,IACAI,UAAAA;AAAAA,IACAI,eAAAA;AAAAA,IACAe,QAAAA;AAAAA,IACAE,cAAAA;AAAAA,IACAD,WAAAA;AAAAA,IACAE,aAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACA7D,SAAAA;AAAAA,IACAE,UAAAA;AAAAA,IACA4D,mBAAAA;AAAAA,IACA/B;AAAAA,GACF;AACF;AACA,MAAMY,aAAAA,GAAgB,SACpB5C,KAAAA,EACAmC,MAAAA,EACA/B,SACAG,QAAAA,EACA;AACA,EAAA,MAAM6D,sBAAAA,GAAyBpE,KAAAA,CAAM2C,eAAAA,IAAmB,EAAC;AACzD,EAAA,MAAM0B,YAAYD,sBAAAA,CAAuBC,SAAAA,IAAa,CAAC,EAAA,EAAI,EAAA,EAAI,KAAK,GAAG,CAAA;AACvE,EAAA,MAAM9B,aAAa+B,QAAAA,CAAS;AAAA,IAC1B1C,KAAAA,EAAO2C,SAAS,MAAM;AACpB,MAAA,OAAO,CAACvE,MAAM0B,WAAAA,IAAe1B,KAAAA,CAAMW,MAAMJ,QAAAA,CAASgB,KAAAA,GAAQnB,QAAQmB,KAAAA,CAAMiD,MAAAA;AAAAA,IAC1E,CAAC,CAAA;AAAA,IACDhC,MAAAA,EAAQ,CAAA;AAAA,IACRC,QAAAA,EAAU4B,UAAU,CAAC;AAAA,GACtB,CAAA;AACD,EAAA,MAAM1B,eAAAA,GAAkB4B,SAAS,MAAM;AACrC,IAAA,MAAME,eAAeL,sBAAAA,CAAuBK,YAAAA;AAC5C,IAAA,MAAMC,kBAAkBN,sBAAAA,CAAuBM,eAAAA;AAC/C,IAAA,OAAO;AAAA,MACLC,MAAAA,EAAQ,yCAAA;AAAA,MACR,GAAGP,sBAAAA;AAAAA,MACHC,SAAAA;AAAAA,MACAI,cAAelD,CAAAA,KAAAA,KAAkB;AAC/BkD,QAAAA,YAAAA,IAAgBA,aAAalD,KAAK,CAAA;AAClCY,QAAAA,MAAAA,CAAO,MAAM,IAAI,CAAA;AAAA,MACnB,CAAA;AAAA,MACAuC,iBAAkBnD,CAAAA,KAAAA,KAAkB;AAClCmD,QAAAA,eAAAA,IAAmBA,gBAAgBnD,KAAK,CAAA;AACxCY,QAAAA,MAAAA,CAAO,OAAO,IAAI,CAAA;AAAA,MACpB;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO;AAAA,IACLI,UAAAA;AAAAA,IACAI;AAAAA,GACF;AACF,CAAA;AAEO,MAAMiC,cAAAA,GAAiBA,CAC5B5E,KAAAA,EACA6E,SAAAA,EACA7C,aAAAA,KACG;AACH,EAAA,MAAM8C,WAAWC,kBAAAA,EAAmB;AACpC,EAAA,MAAMC,cAAeC,CAAAA,MAAAA,KAAwB;AAC3CA,IAAAA,MAAAA,CAAOjF,KAAAA,GAAQiF,MAAAA,CAAOjF,KAAAA,IAAS,EAAC;AAChC,IAAA,MAAMiC,KAAAA,GAAQ;AAAA,MACZ,uBAAA,EAAyB,IAAA;AAAA,MACzBiD,KAAAA,EAAOD,MAAAA,CAAOC,KAAAA,IAASlF,KAAAA,CAAMkF,KAAAA;AAAAA,MAC7BC,QAAAA,EAAUF,MAAAA,CAAOE,QAAAA,IAAYnF,KAAAA,CAAMmF;AAAAA;AAAAA,KAErC;AACA,IAAA,IAAI,CAACF,OAAOG,YAAAA,EAAc;AAExB,MAAA,IAAIC,WAAWJ,MAAAA,CAAOI,QAAAA;AACtB,MAAA,IAAI,OAAOJ,MAAAA,CAAOI,QAAAA,KAAa,UAAA,EAAY;AACzCA,QAAAA,QAAAA,GAAWJ,OAAOI,QAAAA,EAAS;AAAA,MAC7B;AAEA,MAAA,MAAMC,WAAWL,MAAAA,CAAOK,QAAAA;AACxBrD,MAAAA,KAAAA,CAAM,cAAc,IAAI,MAAM;AAC5B,QAAA,OAAAsD,YAAA,MAAA,EAAA,IAAA,EAAA,CAEKF,QAAAA,GAAQE,YAAA,MAAA,EAAA;AAAA,UAAA,OAAA,EAAA;AAAA,SAAA,EAAA,CAAAC,eAAAA,CAAA,KAAA,CAAA,CAAA,CAAA,GAGP,EAAA,EACDD,WAAAA,CAAA,MAAA,EAAA;AAAA,UAAA,OAAA,EAEQ;AAAA,YAAE,SAAA,EAAWD;AAAAA,WAAS;AAAA,UAAC,SAAA,EAE5BA,WACI,YAAY;AACV,YAAA,MAAMG,WAAAA,GAAc;AAAA,cAAE,GAAGR;AAAAA,aAAO;AAChC,YAAA,OAAOQ,WAAAA,CAAYH,QAAAA;AACnB,YAAA,MAAMI,YAAYD,WAAAA,CAAYE,MAAAA;AAC9B,YAAA,MAAMC,QAAAA,GAAWtB,QAAAA,CAAS,EAAE,CAAA;AAC5B,YAAA,IAAIoB,SAAAA,EAAW;AACbD,cAAAA,WAAAA,CAAYE,SAAS,MAAM;AACzB,gBAAA,OAAOD,SAAAA,CAAU;AAAA,kBACfG,GAAAA,EAAKD;AAAAA,iBACN,CAAA;AAAA,cACH,CAAA;AAAA,YACF;AACA,YAAA,MAAME,aAAaC,aAAAA,CAAc;AAAA,cAC/BC,OAAOP,WAAAA,CAAYQ,KAAAA;AAAAA,cACnBC,WAAAA,EAAa;AAAA,gBACXC,cAAAA,EAAgB,IAAA;AAAA,gBAChBrB;AAAAA,eACF;AAAA,cACAsB,YAAAA,EAAc,CACZX,WAAW,CAAA;AAAA,cAEbG;AAAAA;AAAAA,aAED,CAAA;AACD,YAAA,MAAMxE,IAAAA,GAAQ,MAAM0E,UAAAA,CAAWO,IAAAA,EAAK;AAInC,YAAA,CAACxB,SAAAA,CAAUtD,KAAAA,IAAS,IAAI+E,QAASxD,CAAAA,IAAAA,KAAS;AACzCA,cAAAA,IAAAA,CAAKmC,MAAAA,CAAOsB,IAAI,CAAA,GAAKnF,IAAAA,CAAM6D,OAAOsB,IAAI,CAAA;AAAA,YACxC,CAAC,CAAA;AACD,YAAA,IAAI,OAAOjB,aAAa,UAAA,EAAY;AAClCA,cAAAA,QAAAA,CAASkB,KAAAA,CAAMpF,IAAI,CAAC,CAAA;AAAA,YACtB;AAAA,UACF,CAAA,GACA;AAAA,WAAM,CAGX6D,MAAAA,CAAOgB,OACPX,QAAAA,GAAQC,WAAAA,CAAAkB,QAAA,IAAA,EAAA;AAAA,UAAAC,SAAAA,MAAA,CAAAnB,YAAAoB,OAAAA,EAAA,IAAA,EAAA,IAAA,CAAA;AAAA,SAAA,CAAA,GAKP,EACD,CAAA,CAAA,CAAA,CAAA;AAAA,MAIT,CAAA;AAAA,IACF;AACA,IAAA,IAAI1B,OAAOpC,MAAAA,EAAQ;AACjB,MAAA,MAAM+D,GAAAA,GAAM/B,UAAUtD,KAAAA,CAAO0C,GAAAA,CAAKnB,UAASA,IAAAA,CAAKmC,MAAAA,CAAOsB,IAAI,CAAE,CAAA;AAC7DtE,MAAAA,KAAAA,CAAM4E,OAAAA,GAAU,CAAC,GAAG,IAAIC,IAAIF,GAAG,CAAC,CAAA,CAAE3C,GAAAA,CAAKnB,CAAAA,IAAAA,KAAS;AAC9C,QAAA,OAAO;AAAA,UACLiE,IAAAA,EAAMjE,IAAAA;AAAAA,UACNvB,KAAAA,EAAOuB;AAAAA,SACT;AAAA,MACF,CAAC,CAAA;AACDb,MAAAA,KAAAA,CAAM+E,YAAAA,GAAe,CAACzF,KAAAA,EAAOsE,GAAAA,KAAQ;AACnC,QAAA,OAAOA,GAAAA,CAAIZ,MAAAA,CAAOsB,IAAI,CAAA,KAAOhF,KAAAA;AAAAA,MAC/B,CAAA;AAAA,IACF;AACA,IAAA,IAAI0D,MAAAA,CAAOgC,SAAS,QAAA,EAAU;AAC5BhF,MAAAA,KAAAA,CAAMiF,SAAAA,GAAY,mBAAA;AAAA,IACpB;AAEA,IAAA,OAAO;AAAA,MACL,GAAGjF,KAAAA;AAAAA,MACH,GAAGkF,aAAalC,MAAM;AAAA,KACxB;AAAA,EACF,CAAA;AACA,EAAA,MAAMmC,UAAAA,GAAa7C,SAAS,MAAM;AAChC,IAAA,MAAMjB,OAAAA,GAAUtD,KAAAA,CAAMqD,kBAAAA,GAClBrB,aAAAA,CAAcT,QACdvB,KAAAA,CAAMsD,OAAAA;AACV,IAAA,OAAOA,OAAAA,CACJW,IAAKgB,CAAAA,MAAAA,KAAwB;AAC5B,MAAA,MAAMoC,SAAAA,GAAYrC,YAAYC,MAAM,CAAA;AACpC,MAAA,IAAIjF,KAAAA,CAAMsH,cAAe9C,MAAAA,EAAQ;AAC/B,QAAA,MAAM+C,YAAAA,GAAevH,MAAMsH,aAAAA,CAAeE,IAAAA,CACvC1E,UAASA,IAAAA,CAAKyD,IAAAA,KAAStB,OAAOsB,IACjC,CAAA;AACA,QAAA,IAAIgB,YAAAA,EAAc;AAEhBE,UAAAA,KAAAA,CAAMJ,WAAWE,YAAY,CAAA;AAAA,QAC/B;AAAA,MACF;AACA,MAAA,OAAOF,SAAAA;AAAAA,IACT,CAAC,CAAA,CACAxE,MAAAA,CAAQoC,CAAAA,MAAAA,KAAW;AAClB,MAAA,IAAI,UAAUA,MAAAA,EAAQ;AACpB,QAAA,OAAO,OAAOA,OAAOyC,IAAAA,KAAS,UAAA,GAC1BzC,OAAOyC,IAAAA,CAAKzC,MAAM,IAClBA,MAAAA,CAAOyC,IAAAA;AAAAA,MACb,CAAA,MAAA,IAAW,UAAUzC,MAAAA,EAAQ;AAC3B,QAAA,OAAO,OAAOA,MAAAA,CAAO0C,IAAAA,KAAS,UAAA,GAC1B,CAAC1C,OAAO0C,IAAAA,CAAK1C,MAAM,CAAA,GACnB,CAACA,MAAAA,CAAO0C,IAAAA;AAAAA,MACd;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACL,CAAC,CAAA;AACD,EAAA,OAAO;AAAA,IACLP;AAAAA,GACF;AACF;AAEO,MAAMQ,mBAAoB5H,CAAAA,KAAAA,KAAsB;AACrD,EAAA,MAAM6H,aAAAA,GAAgBA,CAAC7D,KAAAA,EAAmB8D,OAAAA,KAAyB;AACjE,IAAA,MAAMhF,IAAAA,GAAOiF,UAAUD,OAAO,CAAA;AAC9B,IAAA,IAAIzC,WAAWvC,IAAAA,CAAKuC,QAAAA;AACpB,IAAA,IAAI,OAAOA,aAAa,UAAA,EAAY;AAClCA,MAAAA,QAAAA,GAAWA,QAAAA,EAAS;AAAA,IACtB;AACA,IAAA,IAAIvC,KAAKkF,YAAAA,EAAc;AACrB3C,MAAAA,QAAAA,GAAWvC,IAAAA,CAAKkF,aAAahE,KAAK,CAAA;AAAA,IACpC;AACA,IAAA,IAAIiE,WAAWjI,KAAAA,CAAMiI,QAAAA;AACrB,IAAA,IAAI,cAAcnF,IAAAA,EAAM;AACtB,MAAA,IAAI,OAAOA,IAAAA,CAAKmF,QAAAA,KAAa,UAAA,EAAY;AACvCA,QAAAA,QAAAA,GAAWnF,IAAAA,CAAKmF,SAASjE,KAAK,CAAA;AAAA,MAChC,CAAA,MAAO;AACLiE,QAAAA,QAAAA,GAAWnF,KAAKmF,QAAAA,IAAY,KAAA;AAAA,MAC9B;AAAA,IACF;AACA,IAAA,IAAInF,IAAAA,CAAKmE,IAAAA,KAAS,UAAA,IAAcnE,IAAAA,CAAK9C,KAAAA,EAAO;AAC1C,MAAA,IAAI,aAAa8C,IAAAA,CAAK9C,KAAAA,IAAS,OAAO8C,IAAAA,CAAK9C,KAAAA,CAAMkI,YAAY,UAAA,EAAY;AACvEpF,QAAAA,IAAAA,CAAK9C,KAAAA,CAAMkI,OAAAA,GAAUpF,IAAAA,CAAK9C,KAAAA,CAAMkI,QAAQlE,KAAK,CAAA;AAAA,MAC/C;AACA,MAAA,IACE,oBAAoBlB,IAAAA,CAAK9C,KAAAA,IACzB,OAAO8C,IAAAA,CAAK9C,KAAAA,CAAMmI,mBAAmB,UAAA,EACrC;AACA,QAAA,MAAMA,cAAAA,GAAiBrF,KAAK9C,KAAAA,CAAMmI,cAAAA;AAClCrF,QAAAA,IAAAA,CAAK9C,MAAMmI,cAAAA,GAAiB,CAAA,GAAIC,SAC9BD,cAAAA,CAAe,GAAGC,MAAMpE,KAAK,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,UAAUlB,IAAAA,CAAK9C,KAAAA,IAAS,OAAO8C,IAAAA,CAAK9C,KAAAA,CAAMqI,SAAS,UAAA,EAAY;AACjEvF,QAAAA,IAAAA,CAAK9C,KAAAA,CAAMqI,IAAAA,GAAOvF,IAAAA,CAAK9C,KAAAA,CAAMqI,KAAKrE,KAAK,CAAA;AAAA,MACzC;AAAA,IACF;AAEA,IAAA,IAAIlB,IAAAA,CAAKmE,IAAAA,KAAS,WAAA,IAAenE,IAAAA,CAAK9C,KAAAA,EAAO;AAC3C8C,MAAAA,IAAAA,CAAK9C,KAAAA,CAAMyB,IAAAA,CAAK6E,OAAAA,CAASgC,CAAAA,OAAAA,KAAyB;AAChD,QAAA,IAAIA,QAAQ/B,IAAAA,EAAM;AAChB+B,UAAAA,OAAAA,CAAQC,IAAAA,GAAOvE,KAAAA,CAAM6B,GAAAA,CAAIyC,OAAAA,CAAQ/B,IAAI,CAAA;AAAA,QACvC;AACA,QAAA,IAAI+B,QAAQpE,OAAAA,EAAS;AACnBoE,UAAAA,OAAAA,CAAQpE,OAAAA,GAAUoE,OAAAA,CAAQpE,OAAAA,CAAQC,IAAAA,CAAK,MAAMH,KAAK,CAAA;AAAA,QACpD;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AACA,IAAA,IAAIlB,IAAAA,CAAKmE,SAAS,QAAA,EAAU;AACzB,MAAA,CAACnE,IAAAA,CAAK9C,KAAAA,GAAQ8C,IAAAA,CAAK9C,KAAAA,GAAS8C,KAAK9C,KAAAA,GAAQ,EAAC,EAAIwI,OAAAA,GAC7C1F,KAAK9C,KAAAA,CAAMwI,OAAAA,IAAWxE,KAAAA,CAAM6B,GAAAA,CAAI/C,KAAKyD,IAAI,CAAA;AAAA,IAC7C;AACA,IAAA,KAAA,MAAWkC,OAAO3F,IAAAA,EAAM;AACtB,MAAA,IAAI2F,GAAAA,CAAIC,WAAW,IAAI,CAAA,IAAK,OAAO5F,IAAAA,CAAK2F,GAAG,MAAM,UAAA,EAAY;AAC3D,QAAA,MAAME,EAAAA,GAAK7F,KAAK2F,GAAG,CAAA;AACnB3F,QAAAA,IAAAA,CAAK2F,GAAG,CAAA,GAAI,CAAA,GAAIL,IAAAA,KAAoB;AAClC,UAAA,IAAIQ,KAAAA;AACJ,UAAA,IAAIR,IAAAA,CAAK,CAAC,CAAA,YAAaS,KAAAA,EAAO;AAE5BD,YAAAA,KAAAA,GAAQR,KAAKU,KAAAA,EAAM;AAAA,UACrB;AACA,UAAA,OAAOH,EAAAA,CAAG,GAAGP,IAAAA,EAAMpE,KAAAA,EAAO4E,KAAK,CAAA;AAAA,QACjC,CAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,GAAGzB,aAAarE,IAAI,CAAA;AAAA,MACpBiG,WAAAA,EAAa,KAAA;AAAA,MACb1D,QAAAA;AAAAA,MACA2D,oBAAAA,EAAsB,cAAA,IAAkBlG,IAAAA,GAAO,KAAA,GAAQuC,QAAAA;AAAAA,MACvDkB,MAAM,CAAA,MAAA,EAASvC,KAAAA,CAAMiF,MAAM,CAAA,CAAA,EAAInG,KAAKyD,IAAI,CAAA,CAAA;AAAA,MACxC2C,WAAWpG,IAAAA,CAAKyD,IAAAA;AAAAA;AAAAA,MAChBvG,KAAAA,EAAO;AAAA,QACL,GAAG8C,IAAAA,CAAK9C,KAAAA;AAAAA,QACRiI;AAAAA;AACF,KACF;AAAA,EACF,CAAA;AACA,EAAA,OAAO;AAAA,IACLJ;AAAAA,GACF;AACF;;;;"}