xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 17.4 kB
Source Map (JSON)
{"version":3,"file":"useDragSort.mjs","sources":["../../../src/table/hooks/useDragSort.ts"],"sourcesContent":["// 表格 行拖拽 + 列拖拽功能\nimport { SetupContext, computed, toRefs, ref, watch, h } from 'vue';\nimport Sortable, { SortableEvent, SortableOptions, MoveEvent } from 'sortablejs';\nimport get from 'lodash/get';\nimport isFunction from 'lodash/isFunction';\nimport { TableRowData, TdPrimaryTableProps, DragSortContext } from '../type';\nimport useClassName from './useClassName';\nimport log from '../../_common/js/log';\nimport { hasClass } from '../../utils/dom';\nimport swapDragArrayElement from '../../_common/js/utils/swapDragArrayElement';\nimport { BaseTableColumns } from '../interface';\nimport { getColumnDataByKey, getColumnIndexByKey } from '../utils';\n\nexport default function useDragSort(props: TdPrimaryTableProps, context: SetupContext) {\n const { sortOnRowDraggable, dragSort, data, rowKey } = toRefs(props);\n const { tableDraggableClasses, tableBaseClass, tableFullRowClasses } = useClassName();\n const primaryTableRef = ref(null);\n const columns = ref<BaseTableColumns>(props.columns || []);\n // @ts-ignore 判断是否有拖拽列\n const dragCol = computed(() => columns.value.find((item) => item.colKey === 'drag'));\n // 行拖拽判断条件\n const isRowDraggable = computed(\n () => sortOnRowDraggable.value || ['row', 'row-handler-col'].includes(dragSort.value),\n );\n // 行拖拽判断条件-手柄列\n const isRowHandlerDraggable = computed(\n () => ['row-handler', 'row-handler-col'].includes(dragSort.value) && !!dragCol.value,\n );\n // 列拖拽判断条件\n const isColDraggable = computed(() => ['col', 'row-handler-col'].includes(dragSort.value));\n // 行拖拽排序,存储上一次的变化结果\n const lastRowList = ref([]);\n // 列拖拽排序,存储上一次的变化结果\n const lastColList = ref([]);\n\n // 行拖拽实例\n let dragRowInstanceTmp: Sortable = null;\n // 列拖拽实例\n let dragColInstanceTmp: Sortable = null;\n\n if (props.sortOnRowDraggable) {\n log.error('Table', \"`sortOnRowDraggable` is going to be deprecated, use dragSort='row' instead.\");\n }\n\n watch(\n [data],\n ([data]) => {\n lastRowList.value = data?.map((item) => get(item, rowKey.value)) || [];\n // Hack 处理:数据变化时,DOM 元素无法自动变化,只得手动设置顺序和重置数据\n const timer = setTimeout(() => {\n if (data.length) {\n dragRowInstanceTmp?.sort(lastRowList.value);\n } else {\n const trList = primaryTableRef.value?.$el.querySelectorAll('tr[data-id]');\n trList?.forEach((node: HTMLElement) => node.remove());\n }\n clearTimeout(timer);\n }, 0);\n },\n { immediate: true },\n );\n\n watch(\n columns,\n (columns) => {\n lastColList.value = columns ? columns.map((t) => t.colKey) : [];\n // Hack 处理:数据变化时,DOM 元素无法自动变化,只得手动设置顺序和重置数据\n const timer = setTimeout(() => {\n if (!dragColInstanceTmp || !dragColInstanceTmp.el) return;\n dragColInstanceTmp?.sort(lastColList.value);\n clearTimeout(timer);\n }, 0);\n },\n // { immediate: true },\n );\n\n // 本地分页的表格,index 不同,需加上分页计数\n function getDataPageIndex(index: number) {\n const { pagination } = props;\n // 开启本地分页的场景\n if (!props.disableDataPage && pagination && data.value.length > pagination.pageSize) {\n return pagination.pageSize * (pagination.current - 1) + index;\n }\n return index;\n }\n\n // 行拖拽排序\n const registerRowDragEvent = (element: HTMLDivElement): void => {\n if (!isRowHandlerDraggable.value && !isRowDraggable.value) return;\n const dragContainer = element?.querySelector('tbody');\n if (!dragContainer) {\n console.error('tbody does not exist.');\n return null;\n }\n const baseOptions: SortableOptions = {\n animation: 150,\n ghostClass: tableDraggableClasses.ghost,\n chosenClass: tableDraggableClasses.chosen,\n dragClass: tableDraggableClasses.dragging,\n filter: `.${tableFullRowClasses.base}`, // 过滤首行尾行固定\n onMove: (evt: MoveEvent) => !hasClass(evt.related, tableFullRowClasses.base),\n onEnd(evt: SortableEvent) {\n if (evt.newIndex === evt.oldIndex) return;\n // 处理受控:拖拽列表恢复原始排序\n dragRowInstanceTmp?.sort(lastRowList.value);\n let { oldIndex: currentIndex, newIndex: targetIndex } = evt;\n if ((isFunction(props.firstFullRow) && props.firstFullRow(h)) || context.slots.firstFullRow) {\n currentIndex -= 1;\n targetIndex -= 1;\n }\n const params: DragSortContext<TableRowData> = {\n data: data.value,\n currentIndex,\n current: data.value[currentIndex],\n targetIndex,\n target: data.value[targetIndex],\n newData: swapDragArrayElement([...props.data], getDataPageIndex(currentIndex), getDataPageIndex(targetIndex)),\n e: evt,\n sort: 'row',\n };\n // currentData is going to be deprecated\n params.currentData = params.newData;\n props.onDragSort?.(params);\n },\n ...props.dragSortOptions,\n };\n\n if (!dragContainer) return;\n if (isRowDraggable.value) {\n dragRowInstanceTmp = new Sortable(dragContainer, { ...baseOptions });\n } else {\n dragRowInstanceTmp = new Sortable(dragContainer, {\n ...baseOptions,\n handle: `.${tableDraggableClasses.handle}`,\n });\n }\n lastRowList.value = dragRowInstanceTmp.toArray();\n };\n\n const registerOneLevelColDragEvent = (container: HTMLElement, recover: boolean) => {\n const options: SortableOptions = {\n animation: 150,\n dataIdAttr: 'data-colkey',\n direction: 'vertical',\n ghostClass: tableDraggableClasses.ghost,\n chosenClass: tableDraggableClasses.chosen,\n dragClass: tableDraggableClasses.dragging,\n handle: `.${tableBaseClass.thCellInner}`,\n // 存在类名:t-table__th--drag-sort 的列才允许拖拽调整顺序(注意:添加 draggable 之后,固定列的表头 和 吸顶表头 位置顺序会错位,暂时注释)\n // draggable: `th.${tableDraggableClasses.dragSortTh}`,\n onEnd: (evt: SortableEvent) => {\n if (evt.newIndex === evt.oldIndex) return;\n if (recover) {\n // 处理受控:拖拽列表恢复原始排序,等待外部数据 data 变化,更新最终顺序\n dragColInstanceTmp?.sort([...lastColList.value]);\n }\n const { oldIndex, newIndex, target: targetElement } = evt;\n let currentIndex = recover ? oldIndex : newIndex;\n let targetIndex = recover ? newIndex : oldIndex;\n const oldElement = targetElement.children[currentIndex] as HTMLElement;\n const newElement = targetElement.children[targetIndex] as HTMLElement;\n const current = getColumnDataByKey(columns.value, oldElement.dataset.colkey);\n const target = getColumnDataByKey(columns.value, newElement.dataset.colkey);\n if (!current || !current.colKey) {\n log.error('Table', `colKey is missing in ${JSON.stringify(current)}`);\n }\n if (!target || !target.colKey) {\n log.error('Table', `colKey is missing in ${JSON.stringify(target)}`);\n }\n // 寻找外部数据 props.columns 中的真正下标\n currentIndex = getColumnIndexByKey(props.columns, current.colKey);\n targetIndex = getColumnIndexByKey(props.columns, target.colKey);\n const params: DragSortContext<TableRowData> = {\n data: columns.value,\n currentIndex,\n current,\n targetIndex,\n target,\n newData: swapDragArrayElement([...props.columns], currentIndex, targetIndex),\n e: evt,\n sort: 'col',\n };\n // currentData is going to be deprecated\n params.currentData = params.newData;\n props.onDragSort?.(params);\n },\n ...props.dragSortOptions,\n };\n if (!container) return;\n dragColInstanceTmp = new Sortable(container, options);\n return dragColInstanceTmp;\n };\n\n // 列拖拽排序:涉及到多级表头、自定义显示列 等综合场景\n const registerColDragEvent = (tableElement: HTMLElement) => {\n if (!isColDraggable.value || !tableElement) return;\n const trList = tableElement.querySelectorAll('thead > tr');\n if (trList.length <= 1) {\n const [container] = trList;\n const dragInstanceTmp = registerOneLevelColDragEvent(container as HTMLElement, true);\n lastColList.value = dragInstanceTmp?.toArray();\n } else {\n // 多级表头只抛出事件,不处理其他未知逻辑(如多层表头之间具体如何交换)\n trList?.forEach((container) => {\n registerOneLevelColDragEvent(container as HTMLElement, false);\n });\n }\n };\n\n function setDragSortPrimaryTableRef(primaryTableElement: any) {\n primaryTableRef.value = primaryTableElement;\n }\n\n function setDragSortColumns(val: BaseTableColumns) {\n columns.value = val;\n }\n\n // 注册拖拽事件\n watch([primaryTableRef], ([val]: [any]) => {\n if (!val || !val.$el) return;\n registerRowDragEvent(val.$el);\n registerColDragEvent(val.$el);\n /** 待表头节点准备完成后 */\n const timer = setTimeout(() => {\n if (val.$refs.affixHeaderRef) {\n registerColDragEvent(val.$refs.affixHeaderRef);\n }\n clearTimeout(timer);\n });\n });\n\n return {\n isRowDraggable,\n isRowHandlerDraggable,\n isColDraggable,\n setDragSortPrimaryTableRef,\n setDragSortColumns,\n };\n}\n"],"names":["log","watch","data","lastRowList","get","immediate","console","animation","filter","isFunction","currentIndex","targetIndex","current","target","newData","e","sort","params","handle","dataIdAttr","direction","onEnd","dragColInstanceTmp","container","registerOneLevelColDragEvent","val","registerRowDragEvent","registerColDragEvent","isRowDraggable","isRowHandlerDraggable","isColDraggable","setDragSortPrimaryTableRef","setDragSortColumns"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,SAAA,WAAA,CAAA,KAAA,EAAA,OAAA,EAAA;AACE,EAAA,IAAA,OAAA,GAAA,MAAA,CAAA,KAAA,CAAA;;;;;AACA,EAAA,IAAA,aAAA,GAAA,YAAA,EAAA;;;;AACM,EAAA,IAAA,eAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;;;AAGmB,IAAA,OAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,IAAA,EAAA;AAAmC,MAAA,OAAA,IAAA,CAAA,MAAA,KAAA,MAAA,CAAA;;;;AAG1D,IAAA,OAAA,kBAAA,CAAA,KAAA,IAAA,CAAA,KAAA,EAAA,iBAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AAAoF,GAAA,CAAA,CAAA;;AAIpF,IAAA,OAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA;AAA+E,GAAA,CAAA,CAAA;;;;AAK3E,EAAA,IAAA,WAAA,GAAA,GAAA,CAAA,EAAA,CAAA,CAAA;AAEA,EAAA,IAAA,WAAA,GAAA,GAAA,CAAA,EAAA,CAAA,CAAA;;;;AAQAA,IAAAA,GAAAA,CAAAA,KAAAA,CAAAA,OAAAA,EAAAA,6EAAAA,CAAAA,CAAAA;AACN,GAAA;AAEAC,EAAAA,KAAAA,CAAAA,CAAAA,IAAAA,CAAAA,EAAAA,UAAAA,IAAAA,EAAAA;AAEc,IAAA,IAAA,KAAA,GAAA,cAAA,CAAA,IAAA,EAAA,CAAA,CAAA;AAAVC,MAAAA,KAAAA,GAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACYC,IAAAA,WAAAA,CAAAA,KAAAA,GAAAA,CAAAA,KAAAA,KAAAA,IAAAA,IAAAA,KAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,CAAAA,UAAAA,IAAAA,EAAAA;AAAmB,MAAA,OAAAC,KAAA,CAAA,IAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA;AAAgC,KAAA,CAAA,KAAA,EAAA,CAAA;AAEzD,IAAA,IAAA,KAAA,GAAA,UAAA,CAAA,YAAA;;AACa,QAAA,IAAA,mBAAA,CAAA;AACK,QAAA,CAAA,mBAAA,GAAA,kBAAA,MAAA,IAAA,IAAA,mBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA;AACtB,OAAA,MAAA;AAAO,QAAA,IAAA,qBAAA,CAAA;AACL,QAAA,IAAA,MAAA,GAAA,CAAA,qBAAA,GAAA,eAAA,CAAA,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,GAAA,CAAA,gBAAA,CAAA,aAAA,CAAA,CAAA;;AACuC,UAAA,OAAA,IAAA,CAAA,MAAA,EAAA,CAAA;;AACzC,OAAA;;;AAGJ,GAAA,EAAA;AACEC,IAAAA,SAAAA,EAAAA,IAAAA;AAAgB,GAAA,CAAA,CAAA;AAGpBJ,EAAAA,KAAAA,CAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EAAAA;;;AAG6D,KAAA,CAAA,GAAA,EAAA,CAAA;AAEnD,IAAA,IAAA,KAAA,GAAA,UAAA,CAAA,YAAA;AAAyB,MAAA,IAAA,mBAAA,CAAA;AACzB,MAAA,IAAA,CAAA,kBAAA,IAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,OAAA;AACgB,MAAA,CAAA,mBAAA,GAAA,kBAAA,MAAA,IAAA,IAAA,mBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA;;;AAGxB,GAAA,CAAA,CAAA;;AAMM,IAAA,IAAA,UAAA,GAAA,KAAA,CAAA,UAAA,CAAA;AAEF,IAAA,IAAA,CAAA,KAAA,CAAA,eAAA,IAAA,UAAA,IAAA,IAAA,CAAA,KAAA,CAAA,MAAA,GAAA,UAAA,CAAA,QAAA,EAAA;;AAEJ,KAAA;AACO,IAAA,OAAA,KAAA,CAAA;AACT,GAAA;AAGM,EAAA,IAAA,oBAAA,GAAA,SAAA,oBAAA,CAAA,OAAA,EAAA;;;;AAIFK,MAAAA,OAAAA,CAAAA,KAAAA,CAAAA,uBAAAA,CAAAA,CAAAA;AACO,MAAA,OAAA,IAAA,CAAA;AACT,KAAA;;AAEEC,MAAAA,SAAAA,EAAAA,GAAAA;;;;AAIAC,MAAAA,MAAAA,EAAAA,GAAAA,CAAAA,MAAAA,CAAAA,mBAAAA,CAAAA,IAAAA,CAAAA;;;AAC2E,OAAA;;;AAErE,QAAA,IAAA,GAAA,CAAA,QAAA,KAAA,GAAA,CAAA,QAAA,EAAA,OAAA;AAEgB,QAAA,CAAA,oBAAA,GAAA,kBAAA,MAAA,IAAA,IAAA,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA;AACpB,QAAA,IAAA,YAAA,GAAA,GAAA,CAAA,QAAA;;AACK,QAAA,IAAAC,YAAA,CAAA,KAAA,CAAA,YAAA,CAAA,IAAA,KAAA,CAAA,YAAA,CAAA,CAAA,CAAA,IAAA,OAAA,CAAA,KAAA,CAAA,YAAA,EAAA;AACaC,UAAAA,YAAAA,IAAAA,CAAAA,CAAAA;AACDC,UAAAA,WAAAA,IAAAA,CAAAA,CAAAA;AACjB,SAAA;AACA,QAAA,IAAA,MAAA,GAAA;;AAEED,UAAAA,YAAAA,EAAAA,YAAAA;AACAE,UAAAA,OAAAA,EAAAA,IAAAA,CAAAA,KAAAA,CAAAA,YAAAA,CAAAA;AACAD,UAAAA,WAAAA,EAAAA,WAAAA;AACAE,UAAAA,MAAAA,EAAAA,IAAAA,CAAAA,KAAAA,CAAAA,WAAAA,CAAAA;AACAC,UAAAA,OAAAA,EAAAA,oBAAAA,CAAAA,kBAAAA,CAAAA,KAAAA,CAAAA,IAAAA,CAAAA,EAAAA,gBAAAA,CAAAA,YAAAA,CAAAA,EAAAA,gBAAAA,CAAAA,WAAAA,CAAAA,CAAAA;AACAC,UAAAA,CAAAA,EAAAA,GAAAA;AACAC,UAAAA,IAAAA,EAAAA,KAAAA;;AAGFC,QAAAA,MAAAA,CAAAA,WAAAA,GAAAA,MAAAA,CAAAA,OAAAA,CAAAA;AACA,QAAA,CAAA,iBAAA,GAAA,KAAA,CAAA,UAAA,MAAA,IAAA,IAAA,iBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAA,IAAA,CAAA,KAAA,EAAA,MAAA,CAAA,CAAA;AACF,OAAA;;;;;AAOF,KAAA,MAAA;;AAGIC,QAAAA,MAAAA,EAAAA,GAAAA,CAAAA,MAAAA,CAAAA,qBAAAA,CAAAA,MAAAA,CAAAA;AAAkC,OAAA,CAAA,CAAA,CAAA;AAEtC,KAAA;AACYf,IAAAA,WAAAA,CAAAA,KAAAA,GAAAA,kBAAAA,CAAAA,OAAAA,EAAAA,CAAAA;;;;AAKVI,MAAAA,SAAAA,EAAAA,GAAAA;AACAY,MAAAA,UAAAA,EAAAA,aAAAA;AACAC,MAAAA,SAAAA,EAAAA,UAAAA;;;;AAIAF,MAAAA,MAAAA,EAAAA,GAAAA,CAAAA,MAAAA,CAAAA,cAAAA,CAAAA,WAAAA,CAAAA;AAGAG,MAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,GAAAA,EAAAA;AAA+B,QAAA,IAAA,kBAAA,CAAA;AACzB,QAAA,IAAA,GAAA,CAAA,QAAA,KAAA,GAAA,CAAA,QAAA,EAAA,OAAA;AACJ,QAAA,IAAA,OAAA,EAAA;AAAa,UAAA,IAAA,oBAAA,CAAA;AAEX,UAAA,CAAA,oBAAA,GAAA,kBAAA,MAAA,IAAA,IAAA,oBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AACF,SAAA;AACA,QAAA,IAAA,QAAA,GAAA,GAAA,CAAA,QAAA;;;AACI,QAAA,IAAA,YAAA,GAAA,OAAA,GAAA,QAAA,GAAA,QAAA,CAAA;AACA,QAAA,IAAA,WAAA,GAAA,OAAA,GAAA,QAAA,GAAA,QAAA,CAAA;AACE,QAAA,IAAA,UAAA,GAAA,aAAA,CAAA,QAAA,CAAA,YAAA,CAAA,CAAA;AACA,QAAA,IAAA,UAAA,GAAA,aAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAAA;AACN,QAAA,IAAA,OAAA,GAAA,kBAAA,CAAA,OAAA,CAAA,KAAA,EAAA,UAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA;AACA,QAAA,IAAA,MAAA,GAAA,kBAAA,CAAA,OAAA,CAAA,KAAA,EAAA,UAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA;AACA,QAAA,IAAA,CAAA,OAAA,IAAA,CAAA,OAAA,CAAA,MAAA,EAAA;AACErB,UAAAA,GAAAA,CAAAA,KAAAA,CAAAA,OAAAA,EAAAA,uBAAAA,CAAAA,MAAAA,CAAAA,IAAAA,CAAAA,SAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACF,SAAA;AACA,QAAA,IAAA,CAAA,MAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA;AACEA,UAAAA,GAAAA,CAAAA,KAAAA,CAAAA,OAAAA,EAAAA,uBAAAA,CAAAA,MAAAA,CAAAA,IAAAA,CAAAA,SAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACF,SAAA;;;AAIA,QAAA,IAAA,MAAA,GAAA;;AAEEU,UAAAA,YAAAA,EAAAA,YAAAA;AACAE,UAAAA,OAAAA,EAAAA,OAAAA;AACAD,UAAAA,WAAAA,EAAAA,WAAAA;AACAE,UAAAA,MAAAA,EAAAA,MAAAA;AACAC,UAAAA,OAAAA,EAAAA,oBAAAA,CAAAA,kBAAAA,CAAAA,KAAAA,CAAAA,OAAAA,CAAAA,EAAAA,YAAAA,EAAAA,WAAAA,CAAAA;AACAC,UAAAA,CAAAA,EAAAA,GAAAA;AACAC,UAAAA,IAAAA,EAAAA,KAAAA;;AAGFC,QAAAA,MAAAA,CAAAA,WAAAA,GAAAA,MAAAA,CAAAA,OAAAA,CAAAA;AACA,QAAA,CAAA,kBAAA,GAAA,KAAA,CAAA,UAAA,MAAA,IAAA,IAAA,kBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAA,CAAA,IAAA,CAAA,KAAA,EAAA,MAAA,CAAA,CAAA;AACF,OAAA;;;AAImBK,IAAAA,kBAAAA,GAAAA,IAAAA,QAAAA,CAAAA,SAAAA,EAAAA,OAAAA,CAAAA,CAAAA;AACd,IAAA,OAAA,kBAAA,CAAA;;AAIH,EAAA,IAAA,oBAAA,GAAA,SAAA,oBAAA,CAAA,YAAA,EAAA;AACA,IAAA,IAAA,CAAA,cAAA,CAAA,KAAA,IAAA,CAAA,YAAA,EAAA,OAAA;AACE,IAAA,IAAA,MAAA,GAAA,YAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,CAAA;AACF,IAAA,IAAA,MAAA,CAAA,MAAA,IAAA,CAAA,EAAA;AACI,MAAA,IAAA,OAAA,GAAA,cAAA,CAAA,MAAA,EAAA,CAAA,CAAA;AAACC,QAAAA,SAAAA,GAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACD,MAAA,IAAA,eAAA,GAAA,4BAAA,CAAA,SAAA,EAAA,IAAA,CAAA,CAAA;;AAER,KAAA,MAAA;;AAGIC,QAAAA,4BAAAA,CAAAA,SAAAA,EAAAA,KAAAA,CAAAA,CAAAA;AACF,OAAA,CAAA,CAAA;AACF,KAAA;;;;AAKF,GAAA;;;AAIA,GAAA;AAGAvB,EAAAA,KAAAA,CAAAA,CAAAA,eAAAA,CAAAA,EAAAA,UAAAA,KAAAA,EAAAA;AAA2C,IAAA,IAAA,KAAA,GAAA,cAAA,CAAA,KAAA,EAAA,CAAA,CAAA;AAAhBwB,MAAAA,GAAAA,GAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACrB,IAAA,IAAA,CAAA,GAAA,IAAA,CAAA,GAAA,CAAA,GAAA,EAAA,OAAA;AACJC,IAAAA,oBAAAA,CAAAA,GAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AACAC,IAAAA,oBAAAA,CAAAA,GAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AAEM,IAAA,IAAA,KAAA,GAAA,UAAA,CAAA,YAAA;AACA,MAAA,IAAA,GAAA,CAAA,KAAA,CAAA,cAAA,EAAA;AACmBA,QAAAA,oBAAAA,CAAAA,GAAAA,CAAAA,KAAAA,CAAAA,cAAAA,CAAAA,CAAAA;AACvB,OAAA;;AAEF,KAAA,CAAA,CAAA;AACF,GAAA,CAAA,CAAA;;AAGEC,IAAAA,cAAAA,EAAAA,cAAAA;AACAC,IAAAA,qBAAAA,EAAAA,qBAAAA;AACAC,IAAAA,cAAAA,EAAAA,cAAAA;AACAC,IAAAA,0BAAAA,EAAAA,0BAAAA;AACAC,IAAAA,kBAAAA,EAAAA,kBAAAA;;AAEJ;;;;"}