@hzab/edit-table 0.1.9 → 0.1.12
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.
- package/CHANGELOG.md +59 -28
- package/LICENSE +20 -20
- package/README.md +170 -170
- package/dist/index.cjs +1 -1
- package/dist/index.js +263 -216
- package/dist/index.js.map +1 -0
- package/dist/project-manifest.json +28 -0
- package/dist/project.json +8 -0
- package/package.json +6 -5
- package/src/Template/ExpandListTemplate/index.less +16 -18
- package/src/Template/ExpandListTemplate/index.tsx +58 -58
- package/src/Template/GetBaseTemplate.tsx +37 -37
- package/src/Template/NumberCellTemplate/index.less +5 -5
- package/src/Template/NumberCellTemplate/index.tsx +16 -16
- package/src/Template/TextCellTemplate/index.less +5 -5
- package/src/Template/TextCellTemplate/index.tsx +8 -8
- package/src/common/WidthWrapHoc.tsx +255 -242
- package/src/common/childAntdComponent.ts +24 -16
- package/src/common/utils.ts +295 -288
- package/src/index.less +98 -104
- package/src/index.tsx +489 -464
- package/src/vite-env.d.ts +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["DatePicker","Input","TimePicker","childAntdComponent","MonthPicker","QuarterPicker","RangePicker","WeekPicker","YearPicker","Password","Search","TextArea","isTriggerBlur","useEffect","useMemo","useRef","useState","Cell","CellTemplate","Compatible","Uncertain","UncertainCompatible","getCellProperty","getCharFromKey","isAlphaNumericKey","isNavigationKey","keyCodes","InfoCircleOutlined","Popover","isTriggerBlur","OptionType","label","value","isDisabled","BaseCell","selectedValue","values","DIProps","onCellChanged","args","cell","Record","isInEditMode","WidthWrapHoc","WrapComponent","props","createBaseCellTemplate","getCompatibleCell","uncertainCell","parseFloat","NaN","text","update","cellToMerge","selectedValueFromText","some","val","undefined","getClassName","handleCompositionEnd","eventData","enableEditMode","render","commit","React","ReactNode","edit","setEdit","open","setOpen","datatypeId","columnId","rowId","comValue","setComValue","isValidator","setIsValidator","comValueInit","openTimerRef","current","onClick","e","window","gridEditId","document","addEventListener","removeEventListener","onValidator","flag","isVerify","it","validatorList","pattern","test","Array","isArray","length","timer","setTimeout","popup","querySelector","stopPointer","PointerEvent","stopPropagation","clearTimeout","onBlurSubmit","targetValue","dataPickerProps","includes","type","onOpenChange","isOpen","uploadEdit","nonEditable","style","width","display","alignItems","options","onChange","target","onBlur","onPointerDown","onKeyDown","keyCode","getField","validatorMessage","useMemo","getVal","GetBaseTemplate","props","pattern","cell","componentProps","Com","cellRender","echoValue","getField","enum","values","name","text","Slot","input","focus","Input","GetBaseTemplate","NumberCellTemplate","props","$","_c","t0","componentProps","t1","type","t2","useEffect","useState","MinusCircleOutlined","PlusCircleOutlined","ExpandListTemplate","props","$","_c","cell","setExpandKeys","expandKeys","rowKey","setNewDataSource","record","expand","setExpand","t0","isExpand","pre","tempPre","childrenIds","children","map","el","findIndex","el_0","filterList","filter","el_1","includes","length","splice","el_2","onExpand","t1","t2","t3","t4","preExpandKeys","el_3","onClickExpand","t5","width","getNavigatorLanguage","navigator","language","getLocaleSeparators","locale","testNumber","localeFormattedNumber","Intl","NumberFormat","format","thousandsSeparator","split","decimalSeparator","parseLocaleNumber","stringNumber","trim","NaN","normalizedStringNumber","replace","numberString","RegExp","trimmedNumberString","length","Number","isReactElement","value","getTitle","item","title","props","children","String","convertColumnsToRows","columns","headerRowHeight","getLeaves","cols","reduce","acc","col","getDepth","depth","max","Math","leafColumns","totalDepth","totalCols","buildTree","map","hasChildren","rowspan","colspan","_depth","_isLeaf","leafCount","tree","rows","Array","from","_","i","rowId","height","cells","handleType","includes","type","dataIndex","fillRow","nodes","rowIndex","forEach","node","cell","text","width","style","background","display","justifyContent","sorter","key","push","row","newCells","colIndex","cellIndex","currentCell","leaf","undefined","lastRow","lastRowCells","leafIndex","index","existingCell","find","flattenColumns","result","traverse","k","rest","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","Checkbox","Empty","Spin","ReactGrid","TextTemplate","antdComponents","customComponents","WidthWrapHoc","NumberTemplate","ExpandListTemplate","convertColumnsToRows","flattenColumns","isReactElement","childAntdComponent","GetBaseTemplate","CellEditTableProps","columns","dataSource","formulaConfig","onChange","v","reactGridProps","onEditSubmit","headerRowHeight","rowHeight","reactGridStyle","className","Slots","rowSelection","rowKey","query","loading","isExpand","getList","onRow","ri","ci","CellEditTable","props","ref","headerList","setHeaderList","rows","setRows","initRowsRef","tableColumns","setTableColumns","selectedRowKeys","setSelectedRowKeys","newDataSource","setNewDataSource","expandKeys","setExpandKeys","headerCustomTemplate","setHeaderCustomTemplate","highlights","setHighlights","highlightsRowIdRef","gridRef","currentCell","handleDataSource","arr","level","forEach","el","children","validRowIds","map","r","rowId","includes","current","handleArrayToObj","item","record","cells","fieldList","obj","id","columnId","text","value","selectedValue","type","Array","isArray","length","unshift","width","key","nonEditable","style","background","display","justifyContent","newColumns","index","dataIndex","name","headTemplate","handleHeader","title","Com","columnsIds","tempDataSource","height","ind","newCell","columnsItem","cellItem","it","setCellData","setCellStyle","pattern","String","onCell","cellProps","mergerList","find","newItem","handleCellsChanged","changes","batchQuery","isBatchSubmit","prevRows","change","changeRowIdx","findIndex","changeColumnIdx","push","resultColumnIdx","err","baseTemplate","mergeTemplate","newMergeTemplate","NewCom","newComProps","ActionDom","rowData","cell","e","stopPropagation","tableActionsSlot","actionPrefixSlot","actionCenterSlot","actionSuffixSlot","flattenDataSource","result","loop","list","CheckBoxDom","filter","getCheckboxProps","disabled","checkboxProps","componentProps","target","checked","newSelectedRowKeys","pageNum","customCellTemplates","templatesObj","onHightsRow","borderColor","datatypeId","window","gridEditId","indexOf","isRowHighlights","onFocusLocationChanging","_$actions","Number","PRESENTED_IMAGE_SIMPLE"],"sources":["../src/common/childAntdComponent.ts","../src/common/WidthWrapHoc.tsx","../src/Template/GetBaseTemplate.tsx","../src/Template/NumberCellTemplate/index.tsx","../src/Template/ExpandListTemplate/index.tsx","../src/common/utils.ts","../src/index.tsx"],"sourcesContent":["import { DatePicker, Input, TimePicker } from \"antd\";\n\nexport const childAntdComponent: any = {\n \"DatePicker.MonthPicker\": DatePicker.MonthPicker,\n \"DatePicker.QuarterPicker\": DatePicker.QuarterPicker,\n \"DatePicker.RangePicker\": DatePicker.RangePicker,\n \"DatePicker.TimePicker\": DatePicker.TimePicker,\n \"DatePicker.WeekPicker\": DatePicker.WeekPicker,\n \"DatePicker.YearPicker\": DatePicker.YearPicker,\n \"Input.Password\": Input.Password,\n \"Input.Search\": Input.Search,\n \"Input.TextArea\": Input.TextArea,\n \"TimePicker.RangePicker\": TimePicker.RangePicker,\n};\nexport const isTriggerBlur = [\n \"DatePicker\",\n \"DatePicker.MonthPicker\",\n \"DatePicker.QuarterPicker\",\n \"DatePicker.RangePicker\",\n \"DatePicker.TimePicker\",\n \"DatePicker.WeekPicker\",\n \"DatePicker.YearPicker\",\n \"TimePicker.RangePicker\",\n];\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport type {\n Cell,\n CellTemplate,\n Compatible,\n Uncertain,\n UncertainCompatible,\n} from \"@silevis/reactgrid\";\nimport {\n getCellProperty,\n getCharFromKey,\n isAlphaNumericKey,\n isNavigationKey,\n keyCodes,\n} from \"@silevis/reactgrid\";\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\nimport { Popover } from \"antd\";\nimport { isTriggerBlur } from \"./childAntdComponent\";\nexport type OptionType = {\n label: string;\n value: string | number;\n isDisabled?: boolean;\n};\n\nexport interface BaseCell extends Cell {\n selectedValue?: string;\n value: string | number;\n values: OptionType[];\n isDisabled?: boolean;\n}\ninterface DIProps {\n onCellChanged: (...args: any[]) => void;\n cell: Record<string, any>;\n isInEditMode?: boolean;\n}\n\nexport const WidthWrapHoc = (WrapComponent: any, props = {}) => {\n class createBaseCellTemplate implements CellTemplate<BaseCell> {\n getCompatibleCell(uncertainCell: Uncertain<BaseCell>): Compatible<BaseCell> {\n let values: any;\n try {\n values = getCellProperty(uncertainCell, \"values\", \"object\");\n } catch {\n values = [];\n }\n const value = uncertainCell.selectedValue ? parseFloat(uncertainCell.selectedValue) : NaN;\n let isDisabled = true;\n try {\n isDisabled = getCellProperty(uncertainCell, \"isDisabled\", \"boolean\");\n } catch {\n isDisabled = false;\n }\n const selectedValue = uncertainCell.selectedValue;\n const text = selectedValue || \"\";\n return { ...uncertainCell, selectedValue, text, value, values, isDisabled };\n }\n\n update(\n cell: Compatible<BaseCell>,\n cellToMerge: UncertainCompatible<BaseCell>,\n ): Compatible<BaseCell> {\n const selectedValueFromText = cell.values.some((val: any) => val.value == cellToMerge.text)\n ? cellToMerge.text\n : cellToMerge?.text || undefined;\n\n return this.getCompatibleCell({\n ...cell,\n selectedValue: selectedValueFromText,\n });\n }\n\n getClassName(cell: Compatible<BaseCell>, isInEditMode: boolean): string {\n return \"\";\n }\n /** enableEditMode为true 时输入中文会报错 */\n handleCompositionEnd(\n cell: Compatible<BaseCell>,\n eventData: any,\n ): { cell: Compatible<BaseCell>; enableEditMode: boolean } {\n return {\n cell: {\n ...cell,\n },\n enableEditMode: false,\n };\n }\n /** render 不能抽出来组件,否则点击会失效 */\n render(\n cell: any,\n isInEditMode: boolean,\n onCellChanged: (cell: any, commit: boolean) => void,\n ): React.ReactNode {\n const [edit, setEdit] = useState<boolean>(false);\n const [open, setOpen] = useState<boolean>(false);\n const datatypeId = cell?.columnId + cell?.rowId;\n const [comValue, setComValue] = useState(cell?.text);\n const [isValidator, setIsValidator] = useState(false);\n const comValueInit = useRef<any>(cell?.text);\n const openTimerRef = useRef<any>();\n useEffect(() => {\n setComValue(cell?.text);\n comValueInit.current = cell?.text;\n }, [cell?.text]);\n\n useEffect(() => {\n // 处理下拉选项弹层失焦逻辑\n function onClick(e) {\n if ((window as any).gridEditId != datatypeId) {\n setEdit(false);\n }\n }\n document.addEventListener(\"click\", onClick);\n return () => {\n document.removeEventListener(\"click\", onClick);\n };\n }, []);\n\n /** 校验触发器 */\n const onValidator = (val) => {\n let flag = false;\n let isVerify = false;\n for (const it of cell?.validatorList || []) {\n if (it?.pattern?.test(val)) {\n flag = true;\n }\n break;\n }\n isVerify = !flag && Array.isArray(cell?.validatorList) && cell?.validatorList?.length > 0;\n setIsValidator(isVerify);\n };\n\n useEffect(() => {\n if (!open) return;\n // 等下一帧,弹窗DOM渲染完成\n const timer = setTimeout(() => {\n const popup: any = document.querySelector(\".ant-picker-dropdown\");\n if (!popup) return;\n\n const stopPointer = (e: PointerEvent) => {\n // 阻断事件往上冒泡到document\n e.stopPropagation();\n };\n // 捕获阶段监听 pointerdown!!必须是pointerdown不是mousedown\n popup.addEventListener(\"pointerdown\", stopPointer, true);\n\n // 清理函数\n return () => {\n popup.removeEventListener(\"pointerdown\", stopPointer, true);\n };\n }, 0);\n\n return () => clearTimeout(timer);\n }, [open]);\n\n /** 失焦提交 */\n const onBlurSubmit = () => {\n const targetValue = comValueInit.current;\n onCellChanged(\n this.getCompatibleCell({\n ...cell,\n text: targetValue,\n selectedValue: targetValue,\n }),\n true,\n );\n };\n\n const dataPickerProps = useMemo(() => {\n if (isTriggerBlur?.includes(cell?.type)) {\n return {\n open: open,\n /** 兼容datapicker 闪烁问题 */\n onOpenChange: (isOpen) => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current);\n }\n openTimerRef.current = setTimeout(() => {\n setOpen(isOpen);\n }, 80);\n },\n };\n }\n return {};\n }, [cell]);\n /** 监听上传组件失焦回调 */\n useEffect(() => {\n if (\n !edit &&\n cell.type == \"Upload\" &&\n (window as any).uploadEdit &&\n (window as any).uploadEdit == datatypeId\n ) {\n (window as any).uploadEdit = null;\n onBlurSubmit();\n }\n }, [edit, comValue]);\n\n return (\n <div\n className={`base-hoc ${edit ? \"base-hoc-edit\" : \"\"}`}\n onDoubleClick={(e) => {\n if (cell?.nonEditable) {\n return;\n }\n if (cell.type === \"Upload\") {\n (window as any).uploadEdit = datatypeId;\n }\n setEdit(true);\n }}\n >\n <WrapComponent\n {...props}\n onPointerDown={(e) => e.stopPropagation()}\n componentProps={{\n style: { width: \"100%\", display: \"flex\", alignItems: \"center\" },\n value: comValue,\n options: cell.values,\n onChange: (e) => {\n const targetValue = e?.target?.value ?? e;\n setComValue(targetValue);\n comValueInit.current = targetValue;\n onValidator(targetValue);\n },\n onBlur: (e) => {\n onBlurSubmit();\n if (!isTriggerBlur?.includes(cell?.type)) {\n setEdit(false);\n }\n },\n\n onPointerDown: (e) => {\n e.stopPropagation();\n },\n onKeyDown: (e) => {\n if (isAlphaNumericKey(e.keyCode) || isNavigationKey(e.keyCode)) e.stopPropagation();\n },\n ...dataPickerProps,\n ...((cell?.getField && cell?.getField()[\"x-component-props\"]) || {}),\n }}\n pattern={edit ? \"\" : \"readPretty\"}\n cell={cell}\n ></WrapComponent>\n {isValidator && (\n <Popover content={cell?.validatorMessage ?? \"该字段不合法\"}>\n <InfoCircleOutlined className=\"validator-icon\" />\n </Popover>\n )}\n </div>\n );\n }\n }\n\n return new createBaseCellTemplate();\n};\n","import { useMemo } from \"react\";\nimport { getVal } from \"@hzab/utils/src/formily/field\";\nexport const GetBaseTemplate = (props) => {\n const { pattern, cell, componentProps, Com, cellRender } = props;\n\n const echoValue = useMemo(() => {\n if (!cell?.getField) {\n return;\n }\n return getVal(\n { ...(cell?.getField && cell?.getField()), enum: cell?.getField()?.enum || cell?.values },\n { [cell?.getField && cell?.getField().name]: cell.text },\n );\n }, [cell]);\n if (cellRender && cellRender(props)) {\n const Slot = cellRender;\n return <Slot {...props}></Slot>;\n }\n\n return (\n <div className=\"base-hoc\">\n {pattern == \"readPretty\" ? (\n <div>{echoValue}</div>\n ) : (\n <Com\n className=\"rg-input\"\n ref={(input) => {\n if (input) {\n input.focus();\n }\n }}\n {...componentProps}\n />\n )}\n </div>\n );\n};\n","import { Input } from \"antd\";\nimport { GetBaseTemplate } from \"../GetBaseTemplate\";\nimport \"./index.less\";\nconst NumberCellTemplate = (props: any) => {\n return (\n <GetBaseTemplate\n {...props}\n componentProps={{\n ...props?.componentProps,\n type: \"number\",\n }}\n Com={Input}\n ></GetBaseTemplate>\n );\n};\nexport default NumberCellTemplate;\n","import { useEffect, useState } from \"react\";\nimport { MinusCircleOutlined, PlusCircleOutlined } from \"@ant-design/icons\";\nimport \"./index.less\";\n\nexport const ExpandListTemplate = (props) => {\n const { cell } = props;\n const { Slots, setExpandKeys, expandKeys, rowKey, setNewDataSource, record, columnId } = cell;\n const [expand, setExpand] = useState<boolean>(false);\n const onExpand = (isExpand) => {\n setNewDataSource((pre) => {\n const tempPre = [...pre];\n const childrenIds = record?.children?.map((el) => el?.[rowKey]);\n if (isExpand) {\n const findIndex = pre?.findIndex((el) => el?.[rowKey] == record?.[rowKey]);\n const filterList = pre?.filter((el) => childrenIds?.includes(el?.[rowKey])) || [];\n if (filterList?.length == 0) {\n tempPre.splice(findIndex + 1, 0, ...(record?.children || []));\n }\n return [...tempPre];\n }\n\n return pre?.filter((el) => !childrenIds?.includes(el?.[rowKey]));\n });\n };\n useEffect(() => {\n if (expandKeys?.includes(record?.[rowKey])) {\n setExpand(true);\n onExpand(true);\n }\n }, [cell?.record]);\n\n /** 展开关闭子项 */\n const onClickExpand = () => {\n setExpandKeys((preExpandKeys) => {\n if (preExpandKeys?.includes(record?.[rowKey])) {\n return preExpandKeys?.filter((el) => el != record?.[rowKey]);\n }\n return [...preExpandKeys, record?.[rowKey]];\n });\n setExpand(!expand);\n onExpand(!expand);\n };\n return (\n <div className=\"expandList-template\">\n {record?.children ? (\n <>\n {!expand ? (\n <PlusCircleOutlined className=\"expandList-template-icon\" onClick={onClickExpand} />\n ) : (\n <MinusCircleOutlined className=\"expandList-template-icon\" onClick={onClickExpand} />\n )}\n </>\n ) : (\n <div style={{ width: 14 }}></div>\n )}\n </div>\n );\n};\n","export const getNavigatorLanguage = (): string => navigator.language || \"en-US\";\n\nfunction getLocaleSeparators(locale: string) {\n const testNumber = 123456.789;\n const localeFormattedNumber = Intl.NumberFormat(locale).format(testNumber);\n\n // Get the thousands separator of the locale\n const thousandsSeparator = localeFormattedNumber.split(\"123\")[1][0];\n\n // Get the decimal separator of the locale\n const decimalSeparator = localeFormattedNumber.split(\"123\")[1][4];\n return { thousandsSeparator, decimalSeparator };\n}\nexport function parseLocaleNumber(stringNumber: string, locale = getNavigatorLanguage()): number {\n if (!stringNumber.trim()) return NaN;\n const { thousandsSeparator, decimalSeparator } = getLocaleSeparators(locale);\n const normalizedStringNumber = stringNumber.replace(/\\u00A0/g, \" \"); // Replace non-breaking space with normal space\n const numberString = normalizedStringNumber\n .replace(new RegExp(`[${thousandsSeparator}\\\\s]`, \"g\"), \"\") // Replace thousands separator and white-space\n .replace(new RegExp(`\\\\${decimalSeparator}`, \"g\"), \".\"); // Replace decimal separator\n\n const trimmedNumberString = numberString.replace(/^(?!-)\\D+|\\D+$/g, \"\"); // Remove characters before first and after last number, but keep negative sign\n if (trimmedNumberString === null || trimmedNumberString.trim().length === 0) {\n return NaN;\n }\n return Number(trimmedNumberString);\n}\n\nexport function isReactElement(value) {\n return value !== null && typeof value === \"object\";\n}\nconst getTitle = (item) => {\n return typeof item?.title == \"function\"\n ? isReactElement(item?.title())\n ? item?.title()?.props.children\n : String(item?.title()) || \"\"\n : String(item?.title) || \"\";\n};\n\nexport function convertColumnsToRows(columns, headerRowHeight = 40) {\n // 获取所有叶子节点\n const getLeaves = (cols) => {\n return cols.reduce((acc, col) => {\n if (col.children?.length) {\n return [...acc, ...getLeaves(col.children)];\n }\n return [...acc, col];\n }, []);\n };\n\n // 计算最大深度\n const getDepth = (cols, depth = 1) => {\n return cols.reduce((max, col) => {\n if (col.children?.length) {\n return Math.max(max, getDepth(col.children, depth + 1));\n }\n return Math.max(max, depth);\n }, depth);\n };\n\n const leafColumns = getLeaves(columns);\n const totalDepth = getDepth(columns);\n const totalCols = leafColumns.length;\n\n // 构建表头树\n const buildTree = (cols, depth = 0) => {\n return cols.map((col) => {\n const hasChildren = col.children?.length > 0;\n if (!hasChildren) {\n return {\n ...col,\n rowspan: totalDepth - depth,\n colspan: 1,\n _depth: depth,\n _isLeaf: true,\n };\n }\n const leafCount = getLeaves(col.children).length;\n return {\n ...col,\n rowspan: 1,\n colspan: leafCount,\n _depth: depth,\n _isLeaf: false,\n children: buildTree(col.children, depth + 1),\n };\n });\n };\n\n const tree = buildTree(columns, 0);\n\n // 初始化行\n const rows: any = Array.from({ length: totalDepth }, (_, i) => ({\n rowId: `header-${i}`,\n height: headerRowHeight,\n cells: [],\n }));\n\n const handleType = (item) => {\n if ([\"rowSelection\", \"ExpandListTemplate\"]?.includes(item?.type)) {\n return item?.type;\n }\n\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n return `${item?.dataIndex}`;\n }\n return \"header\";\n };\n\n // 递归填充行\n const fillRow = (nodes, rowIndex = 0) => {\n nodes.forEach((node) => {\n if (node._isLeaf) {\n const cell = {\n ...node,\n type: handleType(node),\n text: getTitle(node),\n dataIndex: node.dataIndex,\n width: node.width,\n rowspan: node.rowspan,\n style: node?.style\n ? node?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n };\n if (node.sorter) cell.sorter = node.sorter;\n if (node.key) cell.key = node.key;\n rows[rowIndex].cells.push(cell);\n } else {\n // 父节点:添加colspan\n rows[rowIndex].cells.push({\n ...node,\n type: handleType(node),\n text: getTitle(node),\n colspan: node.colspan,\n style: node?.style\n ? node?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n if (node.children) {\n fillRow(node.children, rowIndex + 1);\n }\n }\n });\n };\n\n fillRow(tree, 0);\n\n // 补全每一行的cell,使长度一致\n rows.forEach((row, rowIndex) => {\n const newCells = [];\n let colIndex = 0;\n let cellIndex = 0;\n\n while (colIndex < totalCols) {\n const currentCell = row.cells[cellIndex];\n\n if (!currentCell) {\n // 如果当前行没有足够的cell,从叶子节点补充\n const leaf = leafColumns[colIndex];\n newCells.push({\n ...leaf,\n type: handleType(leaf),\n text: getTitle(leaf),\n dataIndex: leaf.dataIndex,\n width: leaf.width,\n rowspan: rowIndex === totalDepth - 1 ? 1 : undefined,\n style: leaf?.style\n ? leaf?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n colIndex++;\n cellIndex++;\n continue;\n }\n\n const colspan = currentCell.colspan || 1;\n const rowspan = currentCell.rowspan || 1;\n\n // 检查当前cell是否应该出现在这一行\n // 如果rowspan > 1,表示它跨多行,但只在第一行出现\n if (rowspan > 1 && rowIndex > 0) {\n // 这个cell不应该出现在当前行,跳过\n colIndex += colspan;\n cellIndex++;\n continue;\n }\n\n // 如果当前cell有colspan,需要补全后面的空cell\n newCells.push(currentCell);\n colIndex += colspan;\n cellIndex++;\n\n // 如果colspan > 1,后面补充空cell\n for (let i = 1; i < colspan; i++) {\n newCells.push({\n type: \"header\",\n text: \"\",\n });\n }\n }\n\n row.cells = newCells;\n });\n\n // 最后一行的特殊处理:确保所有叶子节点都有对应的cell\n const lastRow = rows[totalDepth - 1];\n const lastRowCells = [];\n const leafIndex = 0;\n\n // 遍历所有叶子节点\n leafColumns.forEach((leaf, index) => {\n // 检查是否已经在lastRow中有对应的cell\n const existingCell = lastRow.cells.find(\n (cell) => cell.dataIndex === leaf.dataIndex && cell.text === leaf.title,\n );\n\n if (existingCell) {\n lastRowCells.push(existingCell);\n } else {\n // 创建新的cell\n lastRowCells.push({\n ...leaf,\n type: handleType(leaf),\n text: getTitle(leaf),\n dataIndex: leaf.dataIndex,\n width: leaf.width,\n rowspan: 1,\n style: leaf?.style\n ? leaf?.style\n : {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n });\n\n lastRow.cells = lastRowCells;\n\n // 确保所有行的cell数量等于totalCols\n rows.forEach((row) => {\n // 如果cell数量少于totalCols,补充空cell\n while (row.cells.length < totalCols) {\n row.cells.push({\n type: \"header\",\n text: \"\",\n });\n }\n });\n\n return rows;\n}\n\nexport function flattenColumns(columns: any[]) {\n const result: any[] = [];\n\n function traverse(cols) {\n cols.forEach((col) => {\n if (col.children && col.children.length > 0) {\n traverse(col.children);\n } else {\n // 创建新对象,只保留需要的属性\n const { title, dataIndex, key, width, sorter, k, ...rest } = col;\n\n result.push({\n type: \"Input\",\n dataIndex,\n title,\n ...(key && { key }),\n ...(width && { width }),\n ...(sorter && { sorter }),\n ...(k && { k }),\n // 如果需要保留其他属性\n ...rest,\n });\n }\n });\n }\n\n traverse(columns);\n return result;\n}\n","import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { Checkbox, Empty, Spin } from \"antd\";\nimport { ReactGrid } from \"@silevis/reactgrid\";\nimport TextTemplate from \"./Template/TextCellTemplate\";\nimport { antdComponents, customComponents } from \"@hzab/form-render\";\nimport { WidthWrapHoc } from \"./common/WidthWrapHoc\";\nimport NumberTemplate from \"./Template/NumberCellTemplate\";\nimport { ExpandListTemplate } from \"./Template/ExpandListTemplate\";\nimport { convertColumnsToRows, flattenColumns, isReactElement } from \"./common/utils\";\nimport { childAntdComponent } from \"./common/childAntdComponent\";\nimport { GetBaseTemplate } from \"./Template/GetBaseTemplate\";\nimport \"./index.less\";\nimport \"@silevis/reactgrid/styles.css\";\n\ninterface CellEditTableProps {\n columns: any[];\n dataSource: any[];\n formulaConfig?: any;\n onChange?: (v: any) => void;\n reactGridProps?: any;\n onEditSubmit?: (v: any) => void;\n headerRowHeight?: number;\n rowHeight?: number;\n reactGridStyle?: any;\n className?: string;\n Slots?: any;\n rowSelection?: any;\n rowKey?: string;\n query?: any;\n loading?: boolean;\n isExpand?: boolean;\n getList?: () => void;\n onRow?: (v: any, ri: number, ci: number) => void;\n}\n\nfunction CellEditTable(props: CellEditTableProps, ref: any) {\n const {\n columns,\n dataSource,\n formulaConfig,\n onChange,\n reactGridProps = {},\n onEditSubmit,\n headerRowHeight = 44,\n rowHeight = 44,\n reactGridStyle,\n className,\n Slots,\n rowSelection,\n rowKey = \"id\",\n query,\n loading,\n isExpand = false,\n getList,\n onRow,\n } = props;\n\n const [headerList, setHeaderList] = useState<any>([]);\n const [rows, setRows] = useState<any>([]);\n const initRowsRef = useRef<any>([]);\n /** 初始行数据 */\n const [tableColumns, setTableColumns] = useState<any>([]);\n const [selectedRowKeys, setSelectedRowKeys] = useState<any>([]);\n const [newDataSource, setNewDataSource] = useState<any>([]);\n const [expandKeys, setExpandKeys] = useState<any>([]);\n const [headerCustomTemplate, setHeaderCustomTemplate] = useState<any>([]);\n const [highlights, setHighlights] = useState([]);\n const highlightsRowIdRef = useRef();\n\n const gridRef = useRef<any>();\n const currentCell = useRef<any>();\n\n useImperativeHandle(ref, () => {\n return {\n rows,\n };\n });\n /** 递归处理子节点数据 */\n const handleDataSource = (arr, level = 0) => {\n arr?.forEach((el) => {\n el.level = level + 1;\n if (el?.children) {\n handleDataSource(el?.children, el.level);\n }\n });\n };\n /** 洗数据 */\n useEffect(() => {\n handleDataSource(dataSource);\n setNewDataSource(dataSource);\n }, [dataSource]);\n\n /** 判断当前选中行是否还存在 */\n useEffect(() => {\n const validRowIds = rows.map((r) => r.rowId);\n if (!validRowIds?.includes(highlightsRowIdRef.current)) {\n setHighlights([]);\n }\n }, [rows]);\n\n /**将数组转为对象 */\n const handleArrayToObj = (item) => {\n const record = item?.cells?.[0]?.record;\n const fieldList = [\"_$actions\", \"rowSelection\"];\n const obj: any = {\n id: item?.rowId,\n };\n item?.cells?.forEach((el) => {\n if (el?.columnId && !fieldList?.includes(el?.columnId)) {\n obj[el?.columnId] = el?.text || el?.value || el?.selectedValue || \"\";\n if (el?.type == \"Number\") {\n obj[el?.columnId] = el?.value;\n }\n }\n });\n\n return {\n ...record,\n ...obj,\n };\n };\n /** 表头 */\n useEffect(() => {\n if (Array.isArray(columns) && columns?.length > 0) {\n if (isExpand) {\n columns.unshift({\n type: \"ExpandListTemplate\",\n width: 14,\n key: \"ExpandListTemplate\",\n nonEditable: true,\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n },\n });\n }\n if (rowSelection) {\n columns.unshift({\n type: \"rowSelection\",\n nonEditable: true,\n width: rowSelection?.width || 30,\n key: \"rowSelection\",\n style: rowSelection?.style || {\n background: \"rgba(128, 128, 128, 0.1)\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n });\n }\n\n setHeaderList(convertColumnsToRows(columns, headerRowHeight));\n const newColumns = flattenColumns(columns);\n\n setTableColumns(\n newColumns?.map((item, index) => ({\n ...item,\n columnId: item?.dataIndex || item?.key || item?.name || \"\",\n })),\n );\n }\n }, [columns, rowSelection]);\n\n /** 自定义表头 */\n const headTemplate: any = {};\n const handleHeader = (arr) => {\n arr?.forEach((item) => {\n if (isReactElement(typeof item?.title == \"function\" ? item?.title() : null)) {\n const Com = item?.title;\n headTemplate[item?.dataIndex] = WidthWrapHoc(Com);\n }\n if (item?.children) {\n handleHeader(item?.children);\n }\n });\n };\n useEffect(() => {\n handleHeader(columns);\n setHeaderCustomTemplate(headTemplate);\n }, [columns]);\n\n /** 数据行 */\n useEffect(() => {\n const columnsIds = tableColumns?.map((el) => el?.columnId);\n\n const tempDataSource = newDataSource?.map((item, index) => {\n return {\n rowId: item[rowKey],\n height: rowHeight,\n cells: columnsIds?.map((el, ind) => {\n let newCell = {};\n const columnsItem = tableColumns[ind];\n const cellItem = item[el];\n const type: any = columnsItem?.type ?? \"text\";\n //设置单元格颜色及回显\n if (formulaConfig) {\n for (const key in formulaConfig) {\n if (key == el) {\n const it = formulaConfig[key];\n newCell = {\n text: it?.setCellData && it?.setCellData(item),\n value: it?.setCellData && it?.setCellData(item),\n style:\n it?.setCellStyle &&\n it?.setCellStyle((it?.setCellData && it?.setCellData(item)) || item),\n };\n }\n }\n }\n\n return {\n ...columnsItem,\n record: item,\n rowId: item[rowKey] || columnsItem?.type,\n type: type,\n nonEditable: columnsItem?.pattern == \"readPretty\" ? true : columnsItem?.nonEditable,\n text: String(cellItem || \"\"),\n value: cellItem,\n selectedValue: cellItem || \"\",\n style:\n columnsItem?.type == \"rowSelection\"\n ? { display: \"flex\", justifyContent: \"center\" }\n : {},\n ...(((onRow && onRow(item, index, ind)) as any) || {}),\n ...((columnsItem?.onCell && columnsItem?.onCell(item, index, ind)) || {}),\n ...(columnsItem?.cellProps || {}),\n setNewDataSource,\n setExpandKeys,\n rowKey,\n expandKeys,\n Slots,\n ...newCell,\n };\n }),\n };\n });\n const mergerList = [...headerList, ...tempDataSource];\n setRows(mergerList);\n }, [newDataSource, tableColumns, headerList]);\n useEffect(() => {\n if (loading) {\n const item = rows?.find((el) => el?.rowId == currentCell.current?.rowId);\n let newItem = item?.cells?.find((it) => it?.columnId == currentCell.current?.columnId);\n newItem = { ...currentCell.current };\n initRowsRef.current = rows;\n }\n }, [loading, rows]);\n // 单元格编辑回调\n const handleCellsChanged = async (changes) => {\n const batchQuery: any = [];\n if (!Array.isArray(changes) || changes.length === 0) return;\n /** 批量提交 */\n let isBatchSubmit = false;\n if (changes?.length > 1) {\n isBatchSubmit = true;\n }\n\n setRows((prevRows) => {\n changes.forEach(async (change) => {\n const changeRowIdx = prevRows.findIndex((el) => el.rowId == change.rowId);\n const changeColumnIdx = tableColumns.findIndex((el) => el.columnId == change.columnId);\n prevRows[changeRowIdx].cells[changeColumnIdx] = { ...change.newCell };\n currentCell.current = { ...change.newCell };\n batchQuery.push(handleArrayToObj(prevRows[changeRowIdx]));\n if (formulaConfig) {\n for (const key in formulaConfig) {\n const item = formulaConfig[key];\n const resultColumnIdx = tableColumns.findIndex((el) => el.columnId == key);\n const newCell = {\n ...prevRows[changeRowIdx].cells[resultColumnIdx],\n text: item?.setCellData && item?.setCellData(prevRows[changeRowIdx]),\n value: item?.setCellData && item?.setCellData(prevRows[changeRowIdx]),\n style:\n item?.setCellStyle &&\n item?.setCellStyle(\n (item?.setCellData && item?.setCellData(prevRows[changeRowIdx])) ||\n prevRows[changeRowIdx],\n ),\n };\n prevRows[changeRowIdx].cells[resultColumnIdx] = newCell;\n }\n }\n if (onEditSubmit && !isBatchSubmit) {\n try {\n await onEditSubmit(batchQuery);\n } catch (err) {\n getList && getList();\n }\n }\n onChange && onChange(prevRows[changeRowIdx]);\n });\n return [...prevRows];\n });\n\n if (isBatchSubmit) {\n try {\n onEditSubmit && (await onEditSubmit(batchQuery));\n } catch (err) {\n getList && getList();\n }\n }\n };\n\n /** 自定义组件注册 */\n const baseTemplate = useMemo(() => {\n const mergeTemplate: any = {\n ...(antdComponents || {}),\n ...(customComponents || {}),\n ...childAntdComponent,\n };\n const newMergeTemplate: any = {};\n for (const key in mergeTemplate) {\n const NewCom = (newComProps) => {\n return <GetBaseTemplate {...newComProps} {...props} Com={mergeTemplate[key]} />;\n };\n newMergeTemplate[key] = WidthWrapHoc(NewCom);\n }\n return newMergeTemplate;\n }, [antdComponents, customComponents]);\n\n const ActionDom = (props) => {\n const rowData = rows?.find((el) => el?.rowId == props?.cell?.rowId);\n return (\n <div onPointerDown={(e) => e.stopPropagation()}>\n {Slots?.tableActionsSlot && <Slots.tableActionsSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionPrefixSlot && <Slots.actionPrefixSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionCenterSlot && <Slots.actionCenterSlot {...props?.cell} rowData={rowData} />}\n {Slots?.actionSuffixSlot && <Slots.actionSuffixSlot {...props?.cell} rowData={rowData} />}\n </div>\n );\n };\n function flattenDataSource(arr: any) {\n const result: any = [];\n function loop(list: any) {\n for (const item of list) {\n result.push(item);\n if (item.children && item.children.length) {\n loop(item.children);\n }\n }\n }\n loop(arr);\n return result;\n }\n const CheckBoxDom = (props) => {\n const { record, rowId } = props?.cell;\n\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n\n const checkboxProps =\n typeof rowSelection?.getCheckboxProps === \"function\"\n ? rowSelection?.getCheckboxProps?.(record)\n : {};\n return (\n <Checkbox\n {...props?.componentProps}\n checked={\n rowSelection?.selectedRowKeys?.includes((record && record[rowKey]) || \"\") ||\n (!rowId &&\n rowSelection?.selectedRowKeys?.length == newDataSource?.length &&\n newDataSource?.length > 0)\n }\n indeterminate={\n !rowId &&\n rowSelection?.selectedRowKeys?.length > 0 &&\n rowSelection?.selectedRowKeys?.length < newDataSource?.length\n }\n onChange={(e) => {\n if (e.target.checked && rowId) {\n const newSelectedRowKeys = [...rowSelection?.selectedRowKeys, record[rowKey]];\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(newSelectedRowKeys, rows);\n } else if (!e.target.checked && rowId) {\n const newSelectedRowKeys = rowSelection?.selectedRowKeys?.filter(\n (el) => el != record[rowKey],\n );\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n rowSelection?.selectedRowKeys?.filter((el) => el != record[rowKey]),\n rows,\n );\n } else if (e.target.checked && !rowId) {\n const newSelectedRowKeys = newDataSource?.map((el) => el[rowKey]);\n const rows = newDataSource?.filter((el) => newSelectedRowKeys?.includes(el[rowKey]));\n\n rowSelection?.onChange(\n newDataSource?.map((el) => el[rowKey]),\n rows,\n );\n } else if (!e.target.checked && !rowId) {\n rowSelection?.onChange([], []);\n }\n }}\n {...checkboxProps}\n ></Checkbox>\n );\n };\n useEffect(() => {\n if (rowSelection) {\n const newDataSource = flattenDataSource(dataSource)?.filter(\n (item) => !rowSelection?.getCheckboxProps?.(item)?.disabled,\n );\n const rows = newDataSource?.filter((el) => selectedRowKeys?.includes(el[rowKey]));\n rowSelection?.onChange(selectedRowKeys, rows);\n }\n }, [selectedRowKeys, dataSource]);\n useEffect(() => {\n setSelectedRowKeys([]);\n }, [query?.pageNum]);\n\n const customCellTemplates = useMemo(() => {\n const templatesObj: any = {};\n for (const key in reactGridProps?.customCellTemplates) {\n const item = reactGridProps?.customCellTemplates[key];\n templatesObj[key] = WidthWrapHoc(item);\n }\n return templatesObj;\n }, [reactGridProps?.customCellTemplates]);\n\n /** 选中高亮整行 */\n const onHightsRow = (cell: any, rows: any) => {\n const list = rows\n ?.find((el) => el?.rowId == cell?.rowId)\n ?.cells?.map((item) => ({\n columnId: item?.columnId,\n rowId: cell?.rowId,\n className: \"custom-highlights-row\",\n borderColor: \"transparent\",\n }));\n highlightsRowIdRef.current = cell?.rowId;\n setHighlights(list);\n };\n\n return (\n <Spin spinning={loading}>\n <div className={`grid-container ${className}`} style={reactGridStyle}>\n <ReactGrid\n ref={gridRef}\n rows={loading ? initRowsRef.current : rows}\n key={dataSource?.length == 0 ? 0 : 1}\n columns={tableColumns}\n onCellsChanged={handleCellsChanged}\n enableFillHandle={true}\n enableRangeSelection={true}\n horizontalStickyBreakpoint={120}\n {...reactGridProps}\n highlights={reactGridProps?.highlights ?? highlights}\n onFocusLocationChanging={(cell: any) => {\n const datatypeId = cell?.columnId + cell?.rowId;\n (window as any).gridEditId = datatypeId;\n if (typeof cell?.rowId == \"string\" && cell?.rowId?.indexOf(\"header-\") > -1) {\n return false;\n }\n if (reactGridProps?.isRowHighlights && cell?.columnId) {\n onHightsRow(cell, rows);\n }\n if ([\"_$actions\", \"rowSelection\", \"ExpandListTemplate\"]?.includes(cell?.columnId)) {\n return false;\n }\n if (reactGridProps?.onFocusLocationChanging) {\n return reactGridProps?.onFocusLocationChanging(cell, rows);\n }\n\n return cell;\n }}\n customCellTemplates={{\n ExpandListTemplate: WidthWrapHoc(ExpandListTemplate),\n ...baseTemplate,\n ...customCellTemplates,\n ...headerCustomTemplate,\n _$actions: WidthWrapHoc(ActionDom),\n rowSelection: WidthWrapHoc(CheckBoxDom),\n // Input: WidthWrapHoc(TextTemplate,props),\n Number: WidthWrapHoc(NumberTemplate, props),\n }}\n />\n {dataSource?.length <= 0 && (\n <div className=\"grid-container-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n )}\n </div>\n </Spin>\n );\n}\n\nexport default forwardRef(CellEditTable);\n"],"mappings":";;;;;;;;;;AAEA,IAAaG,IAA0B;CACrC,0BAA0BH,EAAWI;CACrC,4BAA4BJ,EAAWK;CACvC,0BAA0BL,EAAWM;CACrC,yBAAyBN,EAAWE;CACpC,yBAAyBF,EAAWO;CACpC,yBAAyBP,EAAWQ;CACpC,kBAAkBP,EAAMQ;CACxB,gBAAgBR,EAAMS;CACtB,kBAAkBT,EAAMU;CACxB,0BAA0BT,EAAWI;AACvC,GACaM,IAAgB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAAwB,GCeb+B,KAAgBC,GAAoBC,IAAQ,CAAC,MAAM;CAC9D,MAAMC,EAAyD;EAC7DC,kBAAkBC,GAA0D;GAC1E,IAAIZ;GACJ,IAAI;IACFA,IAASd,EAAgB0B,GAAe,UAAU,QAAQ;GAC5D,SAAA,GAAQ;IACNZ,IAAS,CAAA;GACX;GACA,IAAMJ,IAAQgB,EAAcb,gBAAgBc,WAAWD,EAAcb,aAAa,IAAIe,KAClFjB,IAAa;GACjB,IAAI;IACFA,IAAaX,EAAgB0B,GAAe,cAAc,SAAS;GACrE,SAAA,GAAQ;IACNf,IAAa;GACf;GACA,IAAME,IAAgBa,EAAcb,eAC9BgB,IAAOhB,KAAiB;GAC9B,OAAO;IAAE,GAAGa;IAAeb;IAAegB;IAAMnB;IAAOI;IAAQH;GAAW;EAC5E;EAEAmB,OACEZ,GACAa,GACsB;GACtB,IAAMC,IAAwBd,EAAKJ,OAAOmB,MAAMC,MAAaA,EAAIxB,SAASqB,EAAYF,IAAI,IACtFE,EAAYF,QAAAA,KAAAA,OAAAA,KAAAA,IACZE,EAAaF,SAAQM,KAAAA;GAEzB,OAAO,KAAKV,kBAAkB;IAC5B,GAAGP;IACHL,eAAemB;GACjB,CAAC;EACH;EAEAI,aAAalB,GAA4BE,GAA+B;GACtE,OAAO;EACT;EAEAiB,qBACEnB,GACAoB,GACyD;GACzD,OAAO;IACLpB,MAAM,EACJ,GAAGA,EACL;IACAqB,gBAAgB;GAClB;EACF;EAEAC,OACEtB,GACAE,GACAJ,GACiB;;GACjB,IAAM,CAAC4B,GAAMC,KAAWnD,EAAkB,EAAK,GACzC,CAACoD,GAAMC,KAAWrD,EAAkB,EAAK,GACzCsD,KAAAA,KAAAA,OAAAA,KAAAA,IAAa9B,EAAM+B,aAAAA,KAAAA,OAAAA,KAAAA,IAAW/B,EAAMgC,QACpC,CAACC,GAAUC,KAAe1D,EAAAA,KAAAA,OAAAA,KAAAA,IAASwB,EAAMW,IAAI,GAC7C,CAACwB,GAAaC,KAAkB5D,EAAS,EAAK,GAC9C6D,IAAe9D,EAAAA,KAAAA,OAAAA,KAAAA,IAAYyB,EAAMW,IAAI,GACrC2B,IAAe/D,EAAY;GAMjCF,AALAA,QAAgB;IAEdgE,AADAH,EAAAA,KAAAA,OAAAA,KAAAA,IAAYlC,EAAMW,IAAI,GACtB0B,EAAaE,UAAAA,KAAAA,OAAAA,KAAAA,IAAUvC,EAAMW;GAC/B,GAAG,CAAA,KAAA,OAAA,KAAA,IAACX,EAAMW,IAAI,CAAC,GAEftC,QAAgB;IAEd,SAASmE,EAAQC,GAAG;KAClB,AAAKC,OAAeC,cAAcb,KAChCH,EAAQ,EAAK;IAEjB;IAEA,OADAiB,SAASC,iBAAiB,SAASL,CAAO,SAC7B;KACXI,SAASE,oBAAoB,SAASN,CAAO;IAC/C;GACF,GAAG,CAAA,CAAE;GAGL,IAAMO,KAAe/B,MAAQ;;IAC3B,IAAIgC,IAAO,IACPC,IAAW;IACf,KAAK,IAAMC,MAAAA,KAAAA,OAAAA,KAAAA,IAAMlD,EAAMmD,kBAAiB,CAAA,GAAI;;KAC1C,AAAA,KAAA,SAAA,IAAID,EAAIE,YAAAA,QAAAA,EAASC,KAAKrC,CAAG,MACvBgC,IAAO;KAET;IACF;IAEAZ,AADAa,IAAW,CAACD,KAAQM,MAAMC,QAAAA,KAAAA,OAAAA,KAAAA,IAAQvD,EAAMmD,aAAa,MAAA,KAAA,SAAA,IAAKnD,EAAMmD,kBAAAA,OAAAA,KAAAA,IAAAA,EAAeK,UAAS,GACxFpB,EAAea,CAAQ;GACzB;GAEA5E,QAAgB;IACd,IAAI,CAACuD,GAAM;IAEX,IAAM6B,IAAQC,iBAAiB;KAC7B,IAAMC,IAAaf,SAASgB,cAAc,sBAAsB;KAChE,IAAI,CAACD,GAAO;KAEZ,IAAME,KAAepB,MAAoB;MAEvCA,EAAEsB,gBAAgB;KACpB;KAKA,OAHAJ,EAAMd,iBAAiB,eAAegB,GAAa,EAAI,SAG1C;MACXF,EAAMb,oBAAoB,eAAee,GAAa,EAAI;KAC5D;IACF,GAAG,CAAC;IAEJ,aAAaG,aAAaP,CAAK;GACjC,GAAG,CAAC7B,CAAI,CAAC;GAGT,IAAMqC,UAAqB;IACzB,IAAMC,IAAc7B,EAAaE;IACjCzC,EACE,KAAKS,kBAAkB;KACrB,GAAGP;KACHW,MAAMuD;KACNvE,eAAeuE;IACjB,CAAC,GACD,EACF;GACF,GAEMC,IAAkB7F,QACtB,KAAA,QAAIe,EAAe+E,SAAAA,KAAAA,OAAAA,KAAAA,IAASpE,EAAMqE,IAAI,IAC7B;IACCzC;IAEN0C,eAAeC,MAAW;KAIxBjC,AAHIA,EAAaC,WACfyB,aAAa1B,EAAaC,OAAO,GAEnCD,EAAaC,UAAUmB,iBAAiB;MACtC7B,EAAQ0C,CAAM;KAChB,GAAG,EAAE;IACP;GACF,IAEK,CAAC,GACP,CAACvE,CAAI,CAAC;GAcT,OAZA3B,QAAgB;IACd,AACE,CAACqD,KACD1B,EAAKqE,QAAQ,YACZ3B,OAAe8B,cACf9B,OAAe8B,cAAc1C,MAE9B,OAAgB0C,aAAa,MAC7BP,EAAa;GAEjB,GAAG,CAACvC,GAAMO,CAAQ,CAAC,GAGjB,kBAAC,OAAD;IACE,WAAW,YAAYP,IAAO,kBAAkB;IAChD,gBAAgBe,MAAM;KACpB,KAAA,QAAIzC,EAAMyE,gBAGNzE,EAAKqE,SAAS,aAChB,OAAgBG,aAAa1C,IAE/BH,EAAQ,EAAI;IACd;IAVF,UAAA,CAYE,kBAAC,GAAD;KACE,GAAItB;KACJ,gBAAgBoC,MAAMA,EAAEsB,gBAAgB;KACxC,gBAAgB;MACdW,OAAO;OAAEC,OAAO;OAAQC,SAAS;OAAQC,YAAY;MAAS;MAC9DrF,OAAOyC;MACP6C,SAAS9E,EAAKJ;MACdmF,WAAWtC,MAAM;;OACf,IAAMyB,KAAAA,IAAAA,KAAAA,SAAAA,IAAczB,EAAGuC,WAAAA,OAAAA,KAAAA,IAAAA,EAAQxF,UAAAA,OAASiD,IAATjD;OAG/BuD,AAFAb,EAAYgC,CAAW,GACvB7B,EAAaE,UAAU2B,GACvBnB,EAAYmB,CAAW;MACzB;MACAe,SAASxC,MAAM;OAEb,AADAwB,EAAa,GACT,KAAA,QAAC5E,EAAe+E,SAAAA,KAAAA,OAAAA,KAAAA,IAASpE,EAAMqE,IAAI,KACrC1C,EAAQ,EAAK;MAEjB;MAEAuD,gBAAgBzC,MAAM;OACpBA,EAAEsB,gBAAgB;MACpB;MACAoB,YAAY1C,MAAM;OAChB,CAAIzD,EAAkByD,EAAE2C,OAAO,KAAKnG,EAAgBwD,EAAE2C,OAAO,MAAG3C,EAAEsB,gBAAgB;MACpF;MACA,GAAGI;MACH,IAAA,KAAA,OAAA,KAAA,IAAKnE,EAAMqF,cAAAA,KAAAA,OAAAA,KAAAA,IAAYrF,EAAMqF,SAAS,CAAC,CAAC,yBAAyB,CAAC;KACpE;KACA,SAAS3D,IAAO,KAAK;KACf1B;IACQ,CAAA,GACfmC,KACC,kBAAC,GAAD;KAAS,UAAA,IAAA,KAAA,OAAA,KAAA,IAASnC,EAAMsF,qBAAAA,OAAoB,WAApBA;KACtB,UAAA,kBAAC,GAAD,EAAoB,WAAU,iBAAgB,CAAA;IACvC,CAAA,CAER;;EAET;CACF;CAEA,OAAO,IAAIhF,EAAuB;AACpC,GC5PamF,KAAmBC,MAAU;CACxC,IAAM,EAAEC,YAASC,SAAMC,mBAAgBC,QAAKC,kBAAeL,GAErDM,IAAYT,QAAc;;EAC1B,SAAA,QAACK,EAAMK,UAGX,OAAOT,EACL;GAAE,IAAA,KAAA,OAAA,KAAA,IAAII,EAAMK,cAAAA,KAAAA,OAAAA,KAAAA,IAAYL,EAAMK,SAAS;GAAIC,OAAAA,KAAAA,SAAAA,IAAMN,EAAMK,SAAS,MAAA,OAAA,KAAA,IAAA,EAAGC,UAAAA,KAAAA,OAAAA,KAAAA,IAAQN,EAAMO;EAAO,GACxF,IAAA,KAAA,OAAA,KAAA,IAAGP,EAAMK,cAAAA,KAAAA,OAAAA,KAAAA,IAAYL,EAAMK,SAAS,CAAC,CAACG,QAAOR,EAAKS,KAAK,CACzD;CACF,GAAG,CAACT,CAAI,CAAC;CAMT,OALIG,KAAcA,EAAWL,CAAK,IAEzB,kBAAC,GAAD,EAAM,GAAIA,EAAa,CAAA,IAI9B,kBAAC,OAAD;EAAK,WAAU;EACZC,UAAAA,KAAW,eACV,kBAAC,OAAD,EAAA,UAAMK,EAAe,CAAA,IAErB,kBAAC,GAAD;GACE,WAAU;GACV,MAAMO,MAAU;IACd,AAAIA,KACFA,EAAMC,MAAM;GAEhB;GACA,GAAIX;EAAe,CAAA;CAGpB,CAAA;AAET,GCjCMc,MAAqBC,MAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAKhBC,IAAAA,KAAAA,OAAAA,KAAAA,IAAAH,EAAKI,gBAAgBC;CAAA,AAAAJ,EAAA,OAAAE,IAEzBE,IAAAJ,EAAA,MAHeI,IAAA;EAAA,GACXF;EAAqBG,MAClB;CACR,GAACL,EAAA,KAAAE,GAAAF,EAAA,KAAAI;CAAA,IAAAE;CAEgB,OAFhBN,EAAA,OAAAD,KAAAC,EAAA,OAAAI,KALHE,IAAA,kBAAC,GAAD;EAAgB,GACVP;EACY,gBAAAK;EAIXR,KAAAA;CAAK,CAAA,GACOI,EAAA,KAAAD,GAAAC,EAAA,KAAAI,GAAAJ,EAAA,KAAAM,KAAAA,IAAAN,EAAA,IAPnBM;AAOmB,GCRVK,MAAqBC,MAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAChC,EAAAC,YAAiBH,GACjB,EAAAI,kBAAAC,eAAAC,WAAAC,qBAAAC,cAAyFL,GACzF,CAAAM,GAAAC,KAA4Bd,EAAkB,EAAK,GAAEe;CAAA,AAAAV,EAAA,OAAAO,KAAAP,EAAA,OAAAK,KAAAL,EAAA,OAAAM,KACpCI,KAAAC,MAAA;EACfL,GAAiBM,MAAA;;GACf,IAAAC,IAAgB,CAAA,GAAID,CAAG,GACvBE,IAAAA,KAAAA,SAAAA,IAAoBP,EAAMQ,aAAAA,OAAAA,KAAAA,IAAAA,EAAeC,KAACC,MAAAA,KAAAA,OAAAA,KAAAA,IAAQA,EAAKZ,EAAO;GAC9D,IAAIM,GAAQ;IACV,IAAAO,IAAAA,KAAAA,OAAAA,KAAAA,IAAkBN,EAAGM,WAAYC,OAAAA,KAAAA,OAAAA,KAAAA,IAAQF,EAAKZ,QAAAA,KAAAA,OAAAA,KAAAA,IAAWE,EAASF,GAAO,GACzEe,KAAAA,KAAAA,OAAAA,KAAAA,IAAmBR,EAAGS,QAASC,MAAAA,KAAAA,OAAAA,KAAAA,IAAQR,EAAWS,SAAAA,KAAAA,OAAAA,KAAAA,IAAWN,EAAKZ,EAAO,CAAO,MAA7D,CAAA;IAGlB,QAFD,KAAA,OAAA,KAAA,IAAIe,EAAUI,WAAY,KACxBX,EAAOY,OAAQP,IAAY,GAAG,GAAC,IAAA,KAAA,OAAA,KAAA,IAAMX,EAAMQ,aAAN,CAAA,CAAuB,GAEvD,CAAA,GAAIF,CAAO;GAAC;GACpB,OAAA,KAAA,OAAA,KAAA,IAEMD,EAAGS,QAASK,MAAQ,EAAA,KAAA,QAACZ,EAAWS,SAAAA,KAAAA,OAAAA,KAAAA,IAAWN,EAAKZ,EAAO,EAAC;EAAC,CACjE;CAAC,GACHL,EAAA,KAAAO,GAAAP,EAAA,KAAAK,GAAAL,EAAA,KAAAM,GAAAN,EAAA,KAAAU,KAAAA,IAAAV,EAAA;CAfD,IAAA2B,IAAiBjB,GAefkB;CAAA,AAAA5B,EAAA,OAAAI,KAAAJ,EAAA,OAAA2B,KAAA3B,EAAA,OAAAO,KAAAP,EAAA,OAAAK,KACQuB,UAAA;EACR,AAAA,KAAA,QAAIxB,EAAUmB,SAAAA,KAAAA,OAAAA,KAAAA,IAAWhB,EAASF,EAAO,MACvCI,EAAU,EAAI,GACdkB,EAAS,EAAI;CACd,GACF3B,EAAA,KAAAI,GAAAJ,EAAA,KAAA2B,GAAA3B,EAAA,KAAAO,GAAAP,EAAA,KAAAK,GAAAL,EAAA,KAAA4B,KAAAA,IAAA5B,EAAA;CAAG,IAAA6B,IAAAA,KAAAA,OAAAA,KAAAA,IAAA3B,EAAIK,QAAQuB;CALhBpC,AAKgBM,EAAA,OAAA6B,IAACC,IAAA9B,EAAA,OAAd8B,IAAA,CAACD,CAAY,GAAC7B,EAAA,KAAA6B,GAAA7B,EAAA,MAAA8B,IALjBpC,EAAUkC,GAKPE,CAAc;CAAC,IAAAC;CAAA,AAAA/B,EAAA,QAAAQ,KAAAR,EAAA,QAAA2B,KAAA3B,EAAA,QAAAO,KAAAP,EAAA,QAAAK,KAAAL,EAAA,QAAAG,KAGI4B,UAAA;EAQpBJ,AAPAxB,GAAc6B,MACZ,KAAA,QAAIA,EAAaT,SAAAA,KAAAA,OAAAA,KAAAA,IAAWhB,EAASF,EAAO,IAAC,KAAA,OAAA,KAAA,IACpC2B,EAAaX,QAASY,MAAQhB,MAAAA,KAAAA,OAAAA,KAAAA,IAAMV,EAASF,GAAO,IAEtD,CAAA,GAAI2B,GAAAA,KAAAA,OAAAA,KAAAA,IAAezB,EAASF,EAAO,CAC3C,GACDI,EAAU,CAACD,CAAM,GACjBmB,EAAS,CAACnB,CAAM;CAAC,GAClBR,EAAA,MAAAQ,GAAAR,EAAA,MAAA2B,GAAA3B,EAAA,MAAAO,GAAAP,EAAA,MAAAK,GAAAL,EAAA,MAAAG,GAAAH,EAAA,MAAA+B,KAAAA,IAAA/B,EAAA;CATD,IAAAkC,IAAsBH,GASpBI;CAcM,OAdNnC,EAAA,QAAAQ,KAAAR,EAAA,QAAAkC,KAAAlC,EAAA,SAAA,KAAA,OAAA,KAAA,IAAAO,EAAAQ,aAEAoB,IAAA,kBAAA,OAAA;EAAe,WAAA;EACZ5B,UAAAA,KAAAA,QAAAA,EAAMQ,WAAN,kBAAA,GAAA,EAAA,UAKK,EAHAP,IAGC,IAFA,GAED;GAA+B,WAAA;GAAoC0B,SAAAA;EAAa,CAAA,EACjF,CAAA,IAGH,kBAAA,OAAA,EAAY,OAAA,EAAAE,OAAS,GAAG,EAAC,CAAA;CAEvB,CAAA,GAAApC,EAAA,MAAAQ,GAAAR,EAAA,MAAAkC,GAAAlC,EAAA,MAAA,KAAA,OAAA,KAAA,IAAAO,EAAAQ,UAAAf,EAAA,MAAAmC,KAAAA,IAAAnC,EAAA,KAZNmC;AAYM;;;AC3BV,SAAgB0B,EAAeC,GAAO;CACpC,OAAyB,OAAOA,KAAU,cAAnCA;AACT;AACA,IAAMC,KAAYC,MAAS;;CACzB,OAAO,QAAA,KAAA,OAAA,KAAA,IAAOA,EAAMC,UAAS,aACzBJ,EAAAA,KAAAA,OAAAA,KAAAA,IAAeG,EAAMC,MAAM,CAAC,IAAA,KAAA,SAAA,IAC1BD,EAAMC,MAAM,MAAA,OAAA,KAAA,IAAA,EAAGC,MAAMC,WACrBC,OAAAA,KAAAA,OAAAA,KAAAA,IAAOJ,EAAMC,MAAM,CAAC,KAAK,KAC3BG,OAAAA,KAAAA,OAAAA,KAAAA,IAAOJ,EAAMC,KAAK,KAAK;AAC7B;AAEA,SAAgBI,GAAqBC,GAASC,IAAkB,IAAI;CAElE,IAAMC,KAAaC,MACVA,EAAKC,QAAQC,GAAKC,MAAQ;;EAI/B,QAHA,IAAIA,EAAIT,aAAAA,QAAAA,EAAUR,SACT,CAAC,GAAGgB,GAAK,GAAGH,EAAUI,EAAIT,QAAQ,CAAC,IAErC,CAAC,GAAGQ,GAAKC,CAAG;CACrB,GAAG,CAAA,CAAE,GAIDC,KAAYJ,GAAMK,IAAQ,MACvBL,EAAKC,QAAQK,GAAKH,MAAQ;;EAI/B,QAHA,IAAIA,EAAIT,aAAAA,QAAAA,EAAUR,SACTqB,KAAKD,IAAIA,GAAKF,EAASD,EAAIT,UAAUW,IAAQ,CAAC,CAAC,IAEjDE,KAAKD,IAAIA,GAAKD,CAAK;CAC5B,GAAGA,CAAK,GAGJG,IAAcT,EAAUF,CAAO,GAC/BY,IAAaL,EAASP,CAAO,GAC7Ba,IAAYF,EAAYtB,QAGxByB,KAAaX,GAAMK,IAAQ,MACxBL,EAAKY,KAAKT,MAAQ;;EAEvB,IAAI,IAAA,IADgBA,EAAIT,aAAAA,OAAAA,KAAAA,IAAAA,EAAUR,UAAS,IAEzC,OAAO;GACL,GAAGiB;GACHW,SAASL,IAAaJ;GACtBU,SAAS;GACTC,QAAQX;GACRY,SAAS;EACX;EAEF,IAAMC,IAAYnB,EAAUI,EAAIT,QAAQ,CAAC,CAACR;EAC1C,OAAO;GACL,GAAGiB;GACHW,SAAS;GACTC,SAASG;GACTF,QAAQX;GACRY,SAAS;GACTvB,UAAUiB,EAAUR,EAAIT,UAAUW,IAAQ,CAAC;EAC7C;CACF,CAAC,GAGGc,IAAOR,EAAUd,GAAS,CAAC,GAG3BuB,IAAYC,MAAMC,KAAK,EAAEpC,QAAQuB,EAAW,IAAIc,GAAGC,OAAO;EAC9DC,OAAO,UAAUD;EACjBE,QAAQ5B;EACR6B,OAAO,CAAA;CACT,EAAE,GAEIC,KAAcrC,MAAS;;EAQ3B,QAPA,IAAI,CAAC,gBAAgB,oBAAoB,MAAA,QAAA,EAAGsC,SAAAA,KAAAA,OAAAA,KAAAA,IAAStC,EAAMuC,IAAI,IAC7D,KAAA,OAAA,KAAA,IAAOvC,EAAMuC,OAGX1C,EAAe,QAAA,KAAA,OAAA,KAAA,IAAOG,EAAMC,UAAS,aAAA,KAAA,OAAA,KAAA,IAAaD,EAAMC,MAAM,IAAI,IAAI,IACjE,GAAA,KAAA,OAAA,KAAA,IAAGD,EAAMwC,cAEX;CACT,GAGMC,KAAWC,GAAOC,IAAW,MAAM;EACvCD,EAAME,SAASC,MAAS;GACtB,IAAIA,EAAKnB,SAAS;IAChB,IAAMoB,IAAO;KACX,GAAGD;KACHN,MAAMF,EAAWQ,CAAI;KACrBE,MAAMhD,EAAS8C,CAAI;KACnBL,WAAWK,EAAKL;KAChBQ,OAAOH,EAAKG;KACZzB,SAASsB,EAAKtB;KACd0B,OAAAA,KAAAA,QAAOJ,EAAMI,QAAAA,KAAAA,OAAAA,KAAAA,IACTJ,EAAMI,QACN;MACEC,YAAY;MACZC,SAAS;MACTC,gBAAgB;KAClB;IACN;IAGAvB,AAFIgB,EAAKQ,WAAQP,EAAKO,SAASR,EAAKQ,SAChCR,EAAKS,QAAKR,EAAKQ,MAAMT,EAAKS,MAC9BzB,EAAKc,EAAS,CAACP,MAAMmB,KAAKT,CAAI;GAChC,OAeE,AAbAjB,EAAKc,EAAS,CAACP,MAAMmB,KAAK;IACxB,GAAGV;IACHN,MAAMF,EAAWQ,CAAI;IACrBE,MAAMhD,EAAS8C,CAAI;IACnBrB,SAASqB,EAAKrB;IACdyB,OAAAA,KAAAA,QAAOJ,EAAMI,QAAAA,KAAAA,OAAAA,KAAAA,IACTJ,EAAMI,QACN;KACEC,YAAY;KACZC,SAAS;KACTC,gBAAgB;IAClB;GACN,CAAC,GACGP,EAAK1C,YACPsC,EAAQI,EAAK1C,UAAUwC,IAAW,CAAC;EAGzC,CAAC;CACH;CAKAd,AAHAY,EAAQb,GAAM,CAAC,GAGfC,EAAKe,SAASY,GAAKb,MAAa;EAC9B,IAAMc,IAAW,CAAA,GACbC,IAAW,GACXC,IAAY;EAEhB,OAAOD,IAAWvC,IAAW;GAC3B,IAAMyC,IAAcJ,EAAIpB,MAAMuB;GAE9B,IAAI,CAACC,GAAa;IAEhB,IAAMC,IAAO5C,EAAYyC;IAiBzBC,AAhBAF,EAASF,KAAK;KACZ,GAAGM;KACHtB,MAAMF,EAAWwB,CAAI;KACrBd,MAAMhD,EAAS8D,CAAI;KACnBrB,WAAWqB,EAAKrB;KAChBQ,OAAOa,EAAKb;KACZzB,SAASoB,MAAazB,IAAa,IAAI,IAAI4C,KAAAA;KAC3Cb,OAAAA,KAAAA,QAAOY,EAAMZ,QAAAA,KAAAA,OAAAA,KAAAA,IACTY,EAAMZ,QACN;MACEC,YAAY;MACZC,SAAS;MACTC,gBAAgB;KAClB;IACN,CAAC,GACDM,KACAC;IACA;GACF;GAEA,IAAMnC,IAAUoC,EAAYpC,WAAW;GAKvC,KAJgBoC,EAAYrC,WAAW,KAIzB,KAAKoB,IAAW,GAAG;IAG/BgB,AADAD,KAAYlC,GACZmC;IACA;GACF;GAKAA,AAFAF,EAASF,KAAKK,CAAW,GACzBF,KAAYlC,GACZmC;GAGA,KAAK,IAAI1B,IAAI,GAAGA,IAAIT,GAASS,KAC3BwB,EAASF,KAAK;IACZhB,MAAM;IACNQ,MAAM;GACR,CAAC;EAEL;EAEAS,EAAIpB,QAAQqB;CACd,CAAC;CAGD,IAAMM,IAAUlC,EAAKX,IAAa,IAC5B8C,IAAe,CAAA;CA6CrB,OAzCA/C,EAAY2B,SAASiB,GAAMK,MAAU;EAEnC,IAAMC,IAAeJ,EAAQ3B,MAAMgC,MAChCtB,MAASA,EAAKN,cAAcqB,EAAKrB,aAAaM,EAAKC,SAASc,EAAK5D,KACpE;EAEA,AAAIkE,IACFH,EAAaT,KAAKY,CAAY,IAG9BH,EAAaT,KAAK;GAChB,GAAGM;GACHtB,MAAMF,EAAWwB,CAAI;GACrBd,MAAMhD,EAAS8D,CAAI;GACnBrB,WAAWqB,EAAKrB;GAChBQ,OAAOa,EAAKb;GACZzB,SAAS;GACT0B,OAAAA,KAAAA,QAAOY,EAAMZ,QAAAA,KAAAA,OAAAA,KAAAA,IACTY,EAAMZ,QACN;IACEC,YAAY;IACZC,SAAS;IACTC,gBAAgB;GAClB;EACN,CAAC;CAEL,CAAC,GAEDW,EAAQ3B,QAAQ4B,GAGhBnC,EAAKe,SAASY,MAAQ;EAEpB,OAAOA,EAAIpB,MAAMzC,SAASwB,IACxBqC,EAAIpB,MAAMmB,KAAK;GACbhB,MAAM;GACNQ,MAAM;EACR,CAAC;CAEL,CAAC,GAEMlB;AACT;AAEA,SAAgBwC,GAAe/D,GAAgB;CAC7C,IAAMgE,IAAgB,CAAA;CAEtB,SAASC,EAAS9D,GAAM;EACtBA,EAAKmC,SAAShC,MAAQ;GACpB,IAAIA,EAAIT,YAAYS,EAAIT,SAASR,SAAS,GACxC4E,EAAS3D,EAAIT,QAAQ;QAChB;IAEL,IAAM,EAAEF,UAAOuC,cAAWc,QAAKN,UAAOK,WAAQmB,MAAG,GAAGC,MAAS7D;IAE7D0D,EAAOf,KAAK;KACVhB,MAAM;KACNC;KACAvC;KACA,GAAIqD,KAAO,EAAEA,OAAI;KACjB,GAAIN,KAAS,EAAEA,SAAM;KACrB,GAAIK,KAAU,EAAEA,UAAO;KACvB,GAAImB,KAAK,EAAEA,KAAE;KAEb,GAAGC;IACL,CAAC;GACH;EACF,CAAC;CACH;CAGA,OADAF,EAASjE,CAAO,GACTgE;AACT;;;ACnQA,SAAS+C,EAAcC,GAA2BC,GAAU;;CAC1D,IAAM,EACJvB,YACAC,eACAC,kBACAC,aACAE,oBAAiB,CAAC,GAClBC,iBACAC,qBAAkB,IAClBC,eAAY,IACZC,mBACAC,cACAC,UACAC,iBACAC,YAAS,MACTC,UACAC,YACAC,eAAW,IACXC,YACAC,aACEI,GAEE,CAACE,GAAYC,MAAiB1C,EAAc,CAAA,CAAE,GAC9C,CAAC2C,GAAMC,KAAW5C,EAAc,CAAA,CAAE,GAClC6C,IAAc9C,EAAY,CAAA,CAAE,GAE5B,CAAC+C,GAAcC,MAAmB/C,EAAc,CAAA,CAAE,GAClD,CAACgD,GAAiBC,MAAsBjD,EAAc,CAAA,CAAE,GACxD,CAACkD,GAAeC,KAAoBnD,EAAc,CAAA,CAAE,GACpD,CAACoD,GAAYC,MAAiBrD,EAAc,CAAA,CAAE,GAC9C,CAACsD,IAAsBC,MAA2BvD,EAAc,CAAA,CAAE,GAClE,CAACwD,IAAYC,KAAiBzD,EAAS,CAAA,CAAE,GACzC0D,IAAqB3D,EAAO,GAE5B4D,KAAU5D,EAAY,GACtB6D,IAAc7D,EAAY;CAEhCF,EAAoB2C,UACX,EACLG,QACF,EACD;CAED,IAAMkB,KAAoBC,GAAKC,IAAQ,MAAM;EAC3CD,KAAAA,QAAAA,EAAKE,SAASC,MAAO;GAEnB,AADAA,EAAGF,QAAQA,IAAQ,GACnB,KAAA,QAAIE,EAAIC,YACNL,EAAAA,KAAAA,OAAAA,KAAAA,IAAiBI,EAAIC,UAAUD,EAAGF,KAAK;EAE3C,CAAC;CACH;CAQAnE,AANAA,QAAgB;EAEduD,AADAU,EAAiB3C,CAAU,GAC3BiC,EAAiBjC,CAAU;CAC7B,GAAG,CAACA,CAAU,CAAC,GAGftB,QAAgB;EACd,IAAMuE,IAAcxB,EAAKyB,KAAKC,MAAMA,EAAEC,KAAK;EAC3C,AAAI,KAAA,QAACH,EAAaI,SAASb,EAAmBc,OAAO,KACnDf,EAAc,CAAA,CAAE;CAEpB,GAAG,CAACd,CAAI,CAAC;CAGT,IAAM8B,MAAoBC,MAAS;;EACjC,IAAMC,IAAAA,KAAAA,SAAAA,IAASD,EAAME,UAAAA,SAAAA,IAAAA,EAAQ,OAAA,OAAA,KAAA,IAAA,EAAID,QAC3BE,IAAY,CAAC,aAAa,cAAc,GACxCC,IAAW,EACfC,IAAAA,KAAAA,OAAAA,KAAAA,IAAIL,EAAMJ,MACZ;EAUA,OATAI,KAAAA,SAAAA,IAAAA,EAAME,UAAAA,QAAAA,EAAOZ,SAASC,MAAO;GAC3B,AAAA,KAAA,QAAIA,EAAIe,YAAY,EAAA,KAAA,QAACH,EAAWN,SAAAA,KAAAA,OAAAA,KAAAA,IAASN,EAAIe,QAAQ,OACnDF,EAAAA,KAAAA,OAAAA,KAAAA,IAAIb,EAAIe,aAAAA,KAAAA,OAAAA,KAAAA,IAAYf,EAAIgB,UAAAA,KAAAA,OAAAA,KAAAA,IAAQhB,EAAIiB,WAAAA,KAAAA,OAAAA,KAAAA,IAASjB,EAAIkB,kBAAiB,KAClE,KAAA,OAAA,KAAA,IAAIlB,EAAImB,SAAQ,aACdN,EAAAA,KAAAA,OAAAA,KAAAA,IAAIb,EAAIe,YAAAA,KAAAA,OAAAA,KAAAA,IAAYf,EAAIiB;EAG9B,CAAC,GAEM;GACL,GAAGP;GACH,GAAGG;EACL;CACF;CAEAlF,QAAgB;EACd,IAAIyF,MAAMC,QAAQrE,CAAO,MAAA,KAAA,OAAA,KAAA,IAAKA,EAASsE,UAAS,GAAG;GA0BjD7C,AAzBIT,MACFhB,EAAQuE,QAAQ;IACdJ,MAAM;IACNK,OAAO;IACPC,KAAK;IACLC,aAAa;IACbC,QAAAA,KAAAA,OAAAA,KAAAA,IAAO/D,EAAc+D,UAAS,EAC5BC,YAAY,2BACd;GACF,CAAC,GAEChE,KACFZ,EAAQuE,QAAQ;IACdJ,MAAM;IACNO,aAAa;IACbF,QAAAA,KAAAA,OAAAA,KAAAA,IAAO5D,EAAc4D,UAAS;IAC9BC,KAAK;IACLE,QAAAA,KAAAA,OAAAA,KAAAA,IAAO/D,EAAc+D,UAAS;KAC5BC,YAAY;KACZC,SAAS;KACTC,gBAAgB;IAClB;GACF,CAAC,GAGHrD,GAAc/B,GAAqBM,GAASO,CAAe,CAAC;GAC5D,IAAMwE,IAAapF,GAAeK,CAAO;GAEzC8B,GAAAA,KAAAA,OAAAA,KAAAA,IACEiD,EAAY5B,KAAKM,GAAMuB,OAAW;IAChC,GAAGvB;IACHM,WAAAA,KAAAA,OAAAA,KAAAA,IAAUN,EAAMwB,eAAAA,KAAAA,OAAAA,KAAAA,IAAaxB,EAAMgB,SAAAA,KAAAA,OAAAA,KAAAA,IAAOhB,EAAMyB,SAAQ;GAC1D,EAAE,CACJ;EACF;CACF,GAAG,CAAClF,GAASY,CAAY,CAAC;CAG1B,IAAMuE,IAAoB,CAAC,GACrBC,KAAgBvC,MAAQ;EAC5BA,KAAAA,QAAAA,EAAKE,SAASU,MAAS;GACrB,IAAI7D,EAAe,QAAA,KAAA,OAAA,KAAA,IAAO6D,EAAM4B,UAAS,aAAA,KAAA,OAAA,KAAA,IAAa5B,EAAM4B,MAAM,IAAI,IAAI,GAAG;IAC3E,IAAMC,IAAAA,KAAAA,OAAAA,KAAAA,IAAM7B,EAAM4B;IAClBF,EAAAA,KAAAA,OAAAA,KAAAA,IAAa1B,EAAMwB,aAAa1F,EAAa+F,CAAG;GAClD;GACA,AAAA,KAAA,QAAI7B,EAAMR,YACRmC,EAAAA,KAAAA,OAAAA,KAAAA,IAAa3B,EAAMR,QAAQ;EAE/B,CAAC;CACH;CAgEAtE,AA/DAA,QAAgB;EAEd2D,AADA8C,EAAapF,CAAO,GACpBsC,GAAwB6C,CAAY;CACtC,GAAG,CAACnF,CAAO,CAAC,GAGZrB,QAAgB;EACd,IAAM4G,IAAAA,KAAAA,OAAAA,KAAAA,IAAa1D,EAAcsB,KAAKH,MAAAA,KAAAA,OAAAA,KAAAA,IAAOA,EAAIe,QAAQ,GAEnDyB,IAAAA,KAAAA,OAAAA,KAAAA,IAAiBvD,EAAekB,KAAKM,GAAMuB,OACxC;GACL3B,OAAOI,EAAK5C;GACZ4E,QAAQjF;GACRmD,OAAAA,KAAAA,OAAAA,KAAAA,IAAO4B,EAAYpC,KAAKH,GAAI0C,MAAQ;;IAClC,IAAIC,IAAU,CAAC,GACTC,IAAc/D,EAAa6D,IAC3BG,IAAWpC,EAAKT,IAChBmB,KAAAA,IAAAA,KAAAA,OAAAA,KAAAA,IAAYyB,EAAazB,SAAAA,OAAQ,SAARA;IAE/B,IAAIjE,GACG;UAAA,IAAMuE,KAAOvE,GAChB,IAAIuE,KAAOzB,GAAI;MACb,IAAM8C,IAAK5F,EAAcuE;MACzBkB,IAAU;OACR3B,OAAAA,KAAAA,OAAAA,KAAAA,IAAM8B,EAAIC,iBAAAA,KAAAA,OAAAA,KAAAA,IAAeD,EAAIC,YAAYtC,CAAI;OAC7CQ,QAAAA,KAAAA,OAAAA,KAAAA,IAAO6B,EAAIC,iBAAAA,KAAAA,OAAAA,KAAAA,IAAeD,EAAIC,YAAYtC,CAAI;OAC9CkB,QAAAA,KAAAA,OAAAA,KAAAA,IACEmB,EAAIE,kBAAAA,KAAAA,OAAAA,KAAAA,IACJF,EAAIE,cAAAA,KAAAA,OAAAA,KAAAA,IAAcF,EAAIC,iBAAAA,KAAAA,OAAAA,KAAAA,IAAeD,EAAIC,YAAYtC,CAAI,MAAMA,CAAI;MACvE;KACF;;IAIJ,OAAO;KACL,GAAGmC;KACHlC,QAAQD;KACRJ,OAAOI,EAAK5C,OAAAA,KAAAA,OAAAA,KAAAA,IAAW+E,EAAazB;KAC9BA;KACNO,cAAAA,KAAAA,OAAAA,KAAAA,IAAakB,EAAaK,YAAW,eAAe,KAAA,KAAA,OAAA,KAAA,IAAOL,EAAalB;KACxEV,MAAMkC,OAAOL,KAAY,EAAE;KAC3B5B,OAAO4B;KACP3B,eAAe2B,KAAY;KAC3BlB,QAAAA,KAAAA,OAAAA,KAAAA,IACEiB,EAAazB,SAAQ,iBACjB;MAAEU,SAAS;MAAQC,gBAAgB;KAAS,IAC5C,CAAC;KACP,GAAM5D,KAASA,EAAMuC,GAAMuB,GAAOU,CAAG,KAAc,CAAC;KACpD,IAAA,KAAA,OAAA,KAAA,IAAKE,EAAaO,YAAAA,KAAAA,OAAAA,KAAAA,IAAUP,EAAaO,OAAO1C,GAAMuB,GAAOU,CAAG,MAAM,CAAC;KACvE,IAAA,KAAA,OAAA,KAAA,IAAIE,EAAaQ,cAAa,CAAC;KAC/BlE;KACAE;KACAvB;KACAsB;KACAxB;KACA,GAAGgF;IACL;GACF,CAAC;EACH,EACD,GACKU,IAAa,CAAC,GAAG7E,GAAY,GAAGgE,CAAc;EACpD7D,EAAQ0E,CAAU;CACpB,GAAG;EAACpE;EAAeJ;EAAcL;CAAU,CAAC,GAC5C7C,QAAgB;EACd,IAAIoC,GAAS;;GACX,IAAM0C,IAAAA,KAAAA,OAAAA,KAAAA,IAAO/B,EAAM4E,MAAMtD,MAAOA;;IAAIK,QAAAA,KAAAA,OAAAA,KAAAA,IAAAA,EAAAA,YAAAA,IAASV,EAAYY,YAAAA,OAAAA,KAAAA,IAAAA,EAASF;GAAAA,CAAK;GAGvEzB,AAFc6B,KAAAA,SAAAA,IAAAA,EAAME,UAAAA,QAAAA,EAAO2C,MAAMR,MAAOA;;IAAI/B,QAAAA,KAAAA,OAAAA,KAAAA,IAAAA,EAAAA,eAAAA,IAAYpB,EAAYY,YAAAA,OAAAA,KAAAA,IAAAA,EAASQ;GAAAA,CAAQ,GAC3E,EAAE,GAAGpB,EAAYY,QAAQ,GACnC3B,EAAY2B,UAAU7B;EACxB;CACF,GAAG,CAACX,GAASW,CAAI,CAAC;CAElB,IAAM8E,KAAqB,OAAOC,MAAY;EAC5C,IAAMC,IAAkB,CAAA;EACxB,IAAI,CAACtC,MAAMC,QAAQoC,CAAO,KAAKA,EAAQnC,WAAW,GAAG;EAErD,IAAIqC,IAAgB;EA0CpB,KAzCA,KAAA,OAAA,KAAA,IAAIF,EAASnC,UAAS,MACpBqC,IAAgB,KAGlBhF,GAASiF,OACPH,EAAQ1D,QAAQ,OAAO8D,MAAW;GAChC,IAAMC,IAAeF,EAASG,WAAW/D,MAAOA,EAAGK,SAASwD,EAAOxD,KAAK,GAClE2D,IAAkBnF,EAAakF,WAAW/D,MAAOA,EAAGe,YAAY8C,EAAO9C,QAAQ;GAIrF,IAHA6C,EAASE,EAAa,CAACnD,MAAMqD,KAAmB,EAAE,GAAGH,EAAOlB,QAAQ,GACpEhD,EAAYY,UAAU,EAAE,GAAGsD,EAAOlB,QAAQ,GAC1Ce,EAAWO,KAAKzD,GAAiBoD,EAASE,EAAa,CAAC,GACpD5G,GACF,KAAK,IAAMuE,KAAOvE,GAAe;IAC/B,IAAMuD,IAAOvD,EAAcuE,IACrByC,IAAkBrF,EAAakF,WAAW/D,MAAOA,EAAGe,YAAYU,CAAG,GACnEkB,IAAU;KACd,GAAGiB,EAASE,EAAa,CAACnD,MAAMuD;KAChClD,OAAAA,KAAAA,OAAAA,KAAAA,IAAMP,EAAMsC,iBAAAA,KAAAA,OAAAA,KAAAA,IAAetC,EAAMsC,YAAYa,EAASE,EAAa;KACnE7C,QAAAA,KAAAA,OAAAA,KAAAA,IAAOR,EAAMsC,iBAAAA,KAAAA,OAAAA,KAAAA,IAAetC,EAAMsC,YAAYa,EAASE,EAAa;KACpEnC,QAAAA,KAAAA,OAAAA,KAAAA,IACElB,EAAMuC,kBAAAA,KAAAA,OAAAA,KAAAA,IACNvC,EAAMuC,cAAAA,KAAAA,OAAAA,KAAAA,IACHvC,EAAMsC,iBAAAA,KAAAA,OAAAA,KAAAA,IAAetC,EAAMsC,YAAYa,EAASE,EAAa,MAC5DF,EAASE,EACb;IACJ;IACAF,EAASE,EAAa,CAACnD,MAAMuD,KAAmBvB;GAClD;GAEF,IAAIrF,KAAgB,CAACqG,GACnB,IAAI;IACF,MAAMrG,EAAaoG,CAAU;GAC/B,SAASS,GAAK;IACZlG,KAAWA,EAAQ;GACrB;GAEFd,KAAYA,EAASyG,EAASE,EAAa;EAC7C,CAAC,GACM,CAAC,GAAGF,CAAQ,EACpB,GAEGD,GACF,IAAI;GACFrG,KAAiB,MAAMA,EAAaoG,CAAU;EAChD,SAASS,GAAK;GACZlG,KAAWA,EAAQ;EACrB;CAEJ,GAGMmG,IAAevI,QAAc;EACjC,IAAMwI,IAAqB;GACzB,GAAIhI,KAAkB,CAAC;GACvB,GAAIC,KAAoB,CAAC;GACzB,GAAGO;EACL,GACMyH,IAAwB,CAAC;EAC/B,KAAK,IAAM7C,KAAO4C,GAIhBC,EAAiB7C,KAAOlF,GAHRiI,MACP,kBAAC,GAAD;GAAiB,GAAIA;GAAa,GAAIlG;GAAO,KAAK+F,EAAc5C;EAAK,CAAA,CAEnC;EAE7C,OAAO6C;CACT,GAAG,CAACjI,GAAgBC,CAAgB,CAAC,GAE/BmI,MAAanG,MAAU;EAC3B,IAAMoG,IAAAA,KAAAA,OAAAA,KAAAA,IAAUhG,EAAM4E,MAAMtD,MAAOA;;GAAIK,QAAAA,KAAAA,OAAAA,KAAAA,IAAAA,EAAAA,WAAAA,KAAAA,SAAAA,IAAS/B,EAAOqG,SAAAA,OAAAA,KAAAA,IAAAA,EAAMtE;EAAAA,CAAK;EAClE,OACE,kBAAC,OAAD;GAAK,gBAAgBuE,MAAMA,EAAEC,gBAAgB;GAA7C,UAAA;KACGlH,KAAAA,OAAAA,KAAAA,IAAAA,EAAOmH,qBAAoB,kBAAC,EAAM,kBAAP;KAAwB,GAAA,KAAA,OAAA,KAAA,IAAIxG,EAAOqG;KAAeD;IAAQ,CAAA;KACrF/G,KAAAA,OAAAA,KAAAA,IAAAA,EAAOoH,qBAAoB,kBAAC,EAAM,kBAAP;KAAwB,GAAA,KAAA,OAAA,KAAA,IAAIzG,EAAOqG;KAAeD;IAAQ,CAAA;KACrF/G,KAAAA,OAAAA,KAAAA,IAAAA,EAAOqH,qBAAoB,kBAAC,EAAM,kBAAP;KAAwB,GAAA,KAAA,OAAA,KAAA,IAAI1G,EAAOqG;KAAeD;IAAQ,CAAA;KACrF/G,KAAAA,OAAAA,KAAAA,IAAAA,EAAOsH,qBAAoB,kBAAC,EAAM,kBAAP;KAAwB,GAAA,KAAA,OAAA,KAAA,IAAI3G,EAAOqG;KAAeD;IAAQ,CAAA;GACnF;;CAET;CACA,SAASQ,EAAkBrF,GAAU;EACnC,IAAMsF,IAAc,CAAA;EACpB,SAASC,EAAKC,GAAW;GACvB,KAAK,IAAM5E,KAAQ4E,GAEjB,AADAF,EAAOlB,KAAKxD,CAAI,GACZA,EAAKR,YAAYQ,EAAKR,SAASqB,UACjC8D,EAAK3E,EAAKR,QAAQ;EAGxB;EAEA,OADAmF,EAAKvF,CAAG,GACDsF;CACT;CACA,IAAMG,MAAehH,MAAU;;EAC7B,IAAM,EAAEoC,QAAAA,GAAQL,aAAAA,KAAAA,OAAAA,KAAAA,IAAU/B,EAAOqG,MAE3B1F,KAAAA,IAAgBiG,EAAkBjI,CAAU,MAAA,OAAA,KAAA,IAAA,EAAGsI,QAClD9E,MAAS;;GAAC7C,OAAAA,EAAAA,KAAAA,SAAAA,IAAAA,EAAc4H,qBAAAA,SAAAA,IAAAA,EAAAA,KAAAA,GAAmB/E,CAAI,MAAA,QAAA,EAAGgF;EAAAA,CACrD,GAEMC,IACJ,QAAA,KAAA,OAAA,KAAA,IAAO9H,EAAc4H,qBAAqB,aAAA,KAAA,SAAA,IACtC5H,EAAc4H,qBAAAA,OAAAA,KAAAA,IAAAA,EAAAA,KAAAA,GAAmB9E,CAAM,IACvC,CAAC;EACP,OACE,kBAAC,GAAD;GACE,GAAA,KAAA,OAAA,KAAA,IAAIpC,EAAOqH;GACX,UAAA,KAAA,SAAA,IACE/H,EAAcmB,oBAAAA,OAAAA,KAAAA,IAAAA,EAAiBuB,SAAUI,KAAUA,EAAO7C,MAAY,EAAE,MACvE,CAACwC,MAAAA,KAAAA,SAAAA,IACAzC,EAAcmB,oBAAAA,OAAAA,KAAAA,IAAAA,EAAiBuC,YAAAA,KAAAA,OAAAA,KAAAA,IAAUrC,EAAeqC,YAAAA,KAAAA,OAAAA,KAAAA,IACxDrC,EAAeqC,UAAS;GAE5B,eACE,CAACjB,MAAAA,KAAAA,SAAAA,IACDzC,EAAcmB,oBAAAA,OAAAA,KAAAA,IAAAA,EAAiBuC,UAAS,MAAA,KAAA,SAAA,IACxC1D,EAAcmB,oBAAAA,OAAAA,KAAAA,IAAAA,EAAiBuC,WAAAA,KAAAA,OAAAA,KAAAA,IAASrC,EAAeqC;GAEzD,WAAWsD,MAAM;IACf,IAAIA,EAAEgB,OAAOC,WAAWxF,GAAO;KAC7B,IAAMyF,IAAqB,CAAC,GAAA,KAAA,OAAA,KAAA,IAAGlI,EAAcmB,iBAAiB2B,EAAO7C,EAAO,GACtEa,IAAAA,KAAAA,OAAAA,KAAAA,IAAOO,EAAesG,QAAQvF,MAAAA,KAAAA,OAAAA,KAAAA,IAAO8F,EAAoBxF,SAASN,EAAGnC,EAAO,CAAC;KAEnFD,KAAAA,QAAAA,EAAcT,SAAS2I,GAAoBpH,CAAI;IACjD,OAAO,IAAI,CAACkG,EAAEgB,OAAOC,WAAWxF,GAAO;;KACrC,IAAMyF,IAAAA,KAAAA,SAAAA,IAAqBlI,EAAcmB,oBAAAA,OAAAA,KAAAA,IAAAA,EAAiBwG,QACvDvF,MAAOA,KAAMU,EAAO7C,EACvB,GACMa,IAAAA,KAAAA,OAAAA,KAAAA,IAAOO,EAAesG,QAAQvF,MAAAA,KAAAA,OAAAA,KAAAA,IAAO8F,EAAoBxF,SAASN,EAAGnC,EAAO,CAAC;KAEnFD,KAAAA,QAAAA,EAAcT,SAAAA,KAAAA,SAAAA,IACZS,EAAcmB,oBAAAA,OAAAA,KAAAA,IAAAA,EAAiBwG,QAAQvF,MAAOA,KAAMU,EAAO7C,EAAO,GAClEa,CACF;IACF,OAAO,IAAIkG,EAAEgB,OAAOC,WAAW,CAACxF,GAAO;KACrC,IAAMyF,IAAAA,KAAAA,OAAAA,KAAAA,IAAqB7G,EAAekB,KAAKH,MAAOA,EAAGnC,EAAO,GAC1Da,IAAAA,KAAAA,OAAAA,KAAAA,IAAOO,EAAesG,QAAQvF,MAAAA,KAAAA,OAAAA,KAAAA,IAAO8F,EAAoBxF,SAASN,EAAGnC,EAAO,CAAC;KAEnFD,KAAAA,QAAAA,EAAcT,SAAAA,KAAAA,OAAAA,KAAAA,IACZ8B,EAAekB,KAAKH,MAAOA,EAAGnC,EAAO,GACrCa,CACF;IACF,OAAO,AAAI,CAACkG,EAAEgB,OAAOC,WAAW,CAACxF,MAC/BzC,KAAAA,QAAAA,EAAcT,SAAS,CAAA,GAAI,CAAA,CAAE;GAEjC;GACA,GAAIuI;EACK,CAAA;CAEf;CAUA/J,AATAA,QAAgB;EACd,IAAIiC,GAAc;;GAChB,IAAMqB,KAAAA,IAAgBiG,EAAkBjI,CAAU,MAAA,OAAA,KAAA,IAAA,EAAGsI,QAClD9E,MAAS;;IAAC7C,OAAAA,EAAAA,KAAAA,SAAAA,IAAAA,EAAc4H,qBAAAA,SAAAA,IAAAA,EAAAA,KAAAA,GAAmB/E,CAAI,MAAA,QAAA,EAAGgF;GAAAA,CACrD,GACM/G,IAAAA,KAAAA,OAAAA,KAAAA,IAAOO,EAAesG,QAAQvF,MAAAA,KAAAA,OAAAA,KAAAA,IAAOjB,EAAiBuB,SAASN,EAAGnC,EAAO,CAAC;GAChFD,KAAAA,QAAAA,EAAcT,SAAS4B,GAAiBL,CAAI;EAC9C;CACF,GAAG,CAACK,GAAiB9B,CAAU,CAAC,GAChCtB,QAAgB;EACdqD,GAAmB,CAAA,CAAE;CACvB,GAAG,CAAA,KAAA,OAAA,KAAA,IAAClB,EAAOiI,OAAO,CAAC;CAEnB,IAAMC,KAAsBnK,QAAc;EACxC,IAAMoK,IAAoB,CAAC;EAC3B,KAAK,IAAMxE,KAAAA,KAAAA,OAAAA,KAAAA,IAAOpE,EAAgB2I,qBAEhCC,EAAaxE,KAAOlF,EADdkE,KAAAA,OAAAA,KAAAA,IAAOpD,EAAgB2I,oBAAoBvE,EACZ;EAEvC,OAAOwE;CACT,GAAG,CAAA,KAAA,OAAA,KAAA,IAAC5I,EAAgB2I,mBAAmB,CAAC,GAGlCE,MAAevB,GAAWjG,MAAc;;EAC5C,IAAM2G,IAAAA,KAAAA,SAAAA,IAAO3G,EACT4E,MAAMtD,OAAAA,KAAAA,OAAAA,KAAAA,IAAOA,EAAIK,WAAAA,KAAAA,OAAAA,KAAAA,IAASsE,EAAMtE,MAAK,MAAA,SAAA,IAAA,EACrCM,UAAAA,OAAAA,KAAAA,IAAAA,EAAOR,KAAKM,OAAU;GACtBM,UAAAA,KAAAA,OAAAA,KAAAA,IAAUN,EAAMM;GAChBV,OAAAA,KAAAA,OAAAA,KAAAA,IAAOsE,EAAMtE;GACb3C,WAAW;GACXyI,aAAa;EACf,EAAE;EAEJ3G,AADAC,EAAmBc,UAAAA,KAAAA,OAAAA,KAAAA,IAAUoE,EAAMtE,OACnCb,EAAc6F,CAAI;CACpB;CAEA,OACE,kBAAC,GAAD;EAAM,UAAUtH;EACd,UAAA,kBAAC,OAAD;GAAK,WAAW,kBAAkBL;GAAa,OAAOD;GAAtD,UAAA,CACE,kBAAC,GAAD;IACE,KAAKiC;IACL,MAAM3B,IAAUa,EAAY2B,UAAU7B;IAEtC,SAASG;IACT,gBAAgB2E;IAChB,kBAAkB;IAClB,sBAAsB;IACtB,4BAA4B;IAC5B,GAAInG;IACJ,aAAA,IAAA,KAAA,OAAA,KAAA,IAAYA,EAAgBkC,eAAAA,OAAcA,KAAdA;IAC5B,0BAA0BoF,MAAc;;KACtC,IAAMyB,KAAAA,KAAAA,OAAAA,KAAAA,IAAazB,EAAM5D,aAAAA,KAAAA,OAAAA,KAAAA,IAAW4D,EAAMtE;KAe1C,OAdA,OAAgBiG,aAAaF,GACzB,QAAA,KAAA,OAAA,KAAA,IAAOzB,EAAMtE,UAAS,aAAA,KAAA,SAAA,IAAYsE,EAAMtE,UAAAA,OAAAA,KAAAA,IAAAA,EAAOkG,QAAQ,SAAS,KAAI,OAGxE,KAAA,QAAIlJ,EAAgBmJ,mBAAAA,KAAAA,QAAmB7B,EAAM5D,YAC3CmF,GAAYvB,GAAMjG,CAAI,IAExB,IAAI;MAAC;MAAa;MAAgB;KAAoB,MAAA,QAAA,EAAG4B,SAAAA,KAAAA,OAAAA,KAAAA,IAASqE,EAAM5D,QAAQ,KACvE,KAET,KAAA,QAAI1D,EAAgBoJ,0BAClB,KAAA,OAAA,KAAA,IAAOpJ,EAAgBoJ,wBAAwB9B,GAAMjG,CAAI,IAGpDiG;IACT;IACA,qBAAqB;KACnBlI,oBAAoBF,EAAaE,EAAkB;KACnD,GAAG2H;KACH,GAAG4B;KACH,GAAG3G;KACHqH,WAAWnK,EAAakI,EAAS;KACjC7G,cAAcrB,EAAa+I,EAAW;KAEtCqB,QAAQpK,EAAaC,IAAgB8B,CAAK;IAC5C;GAAE,IAAA,KAAA,OAAA,KAAA,IAnCGrB,EAAYqE,WAAU,IAAI,IAAI,CAmCjC,IAAA,KAAA,OAAA,KAAA,IAEHrE,EAAYqE,WAAU,KACrB,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAAC,GAAD,EAAO,OAAOrF,EAAM2K,uBAAuB,CAAA;GACxC,CAAA,CAEJ;;CACD,CAAA;AAEV;AAEA,IAAA,IAAelL,EAAW2C,CAAa"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"projectId": "56c87c84304d7db0",
|
|
4
|
+
"hash": null,
|
|
5
|
+
"scope": "output-dir",
|
|
6
|
+
"files": [
|
|
7
|
+
{
|
|
8
|
+
"path": "index.cjs",
|
|
9
|
+
"size": 17767
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"path": "index.css",
|
|
13
|
+
"size": 1415
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"path": "index.js",
|
|
17
|
+
"size": 23967
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "index.js.map",
|
|
21
|
+
"size": 68605
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "project.json",
|
|
25
|
+
"size": 195
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hzab/edit-table",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"private": false,
|
|
5
5
|
"src-direct": true,
|
|
6
6
|
"description": "可编辑表格",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"dependencies": {},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@ant-design/icons": "^4.8.0",
|
|
34
|
+
"jsdom": "^25.0.1",
|
|
34
35
|
"@types/lodash": "^4.17.12",
|
|
35
36
|
"@types/react": "^17.0.62",
|
|
36
37
|
"@types/react-dom": "^17.0.20",
|
|
@@ -45,11 +46,11 @@
|
|
|
45
46
|
"typescript": "^5.9.3",
|
|
46
47
|
"vite": "^8.0.0",
|
|
47
48
|
"vitest": "^4.1.10",
|
|
48
|
-
"@hzab/utils": "^1.1.11",
|
|
49
|
-
"@hzab/typescript-config": "^0.0.0",
|
|
50
49
|
"@hzab/eslint-config": "^0.0.0",
|
|
51
|
-
"@hzab/form-render": "^1.7.
|
|
52
|
-
"@hzab/vite-config": "^0.
|
|
50
|
+
"@hzab/form-render": "^1.7.23",
|
|
51
|
+
"@hzab/vite-config": "^0.2.0",
|
|
52
|
+
"@hzab/utils": "^1.1.14",
|
|
53
|
+
"@hzab/typescript-config": "^0.0.0"
|
|
53
54
|
},
|
|
54
55
|
"scripts": {
|
|
55
56
|
"build": "vite build && tsc -p tsconfig.build.json",
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
.expandList-template {
|
|
2
|
-
display: flex;
|
|
3
|
-
align-items: center;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
}
|
|
1
|
+
.expandList-template {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
|
|
5
|
+
.expandList-template-icon {
|
|
6
|
+
cursor: pointer;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.expandList-template-name {
|
|
10
|
+
margin-left: 8px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.expandList-template-indent {
|
|
14
|
+
margin-left: 32px;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
2
|
-
import { MinusCircleOutlined, PlusCircleOutlined } from "@ant-design/icons";
|
|
3
|
-
import "./index.less";
|
|
4
|
-
|
|
5
|
-
export const ExpandListTemplate = (props) => {
|
|
6
|
-
const { cell } = props;
|
|
7
|
-
const { Slots, setExpandKeys, expandKeys, rowKey, setNewDataSource, record, columnId } = cell;
|
|
8
|
-
const [expand, setExpand] = useState<boolean>(false);
|
|
9
|
-
const onExpand = (isExpand) => {
|
|
10
|
-
setNewDataSource((pre) => {
|
|
11
|
-
const tempPre = [...pre];
|
|
12
|
-
const childrenIds = record?.children?.map((el) => el?.[rowKey]);
|
|
13
|
-
if (isExpand) {
|
|
14
|
-
const findIndex = pre?.findIndex((el) => el?.[rowKey] == record?.[rowKey]);
|
|
15
|
-
const filterList = pre?.filter((el) => childrenIds?.includes(el?.[rowKey])) || [];
|
|
16
|
-
if (filterList?.length == 0) {
|
|
17
|
-
tempPre.splice(findIndex + 1, 0, ...(record?.children || []));
|
|
18
|
-
}
|
|
19
|
-
return [...tempPre];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return pre?.filter((el) => !childrenIds?.includes(el?.[rowKey]));
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
if (expandKeys?.includes(record?.[rowKey])) {
|
|
27
|
-
setExpand(true);
|
|
28
|
-
onExpand(true);
|
|
29
|
-
}
|
|
30
|
-
}, [cell?.record]);
|
|
31
|
-
|
|
32
|
-
/** 展开关闭子项 */
|
|
33
|
-
const onClickExpand = () => {
|
|
34
|
-
setExpandKeys((preExpandKeys) => {
|
|
35
|
-
if (preExpandKeys?.includes(record?.[rowKey])) {
|
|
36
|
-
return preExpandKeys?.filter((el) => el != record?.[rowKey]);
|
|
37
|
-
}
|
|
38
|
-
return [...preExpandKeys, record?.[rowKey]];
|
|
39
|
-
});
|
|
40
|
-
setExpand(!expand);
|
|
41
|
-
onExpand(!expand);
|
|
42
|
-
};
|
|
43
|
-
return (
|
|
44
|
-
<div className="expandList-template">
|
|
45
|
-
{record?.children ? (
|
|
46
|
-
<>
|
|
47
|
-
{!expand ? (
|
|
48
|
-
<PlusCircleOutlined className="expandList-template-icon" onClick={onClickExpand} />
|
|
49
|
-
) : (
|
|
50
|
-
<MinusCircleOutlined className="expandList-template-icon" onClick={onClickExpand} />
|
|
51
|
-
)}
|
|
52
|
-
</>
|
|
53
|
-
) : (
|
|
54
|
-
<div style={{ width: 14 }}></div>
|
|
55
|
-
)}
|
|
56
|
-
</div>
|
|
57
|
-
);
|
|
58
|
-
};
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { MinusCircleOutlined, PlusCircleOutlined } from "@ant-design/icons";
|
|
3
|
+
import "./index.less";
|
|
4
|
+
|
|
5
|
+
export const ExpandListTemplate = (props) => {
|
|
6
|
+
const { cell } = props;
|
|
7
|
+
const { Slots, setExpandKeys, expandKeys, rowKey, setNewDataSource, record, columnId } = cell;
|
|
8
|
+
const [expand, setExpand] = useState<boolean>(false);
|
|
9
|
+
const onExpand = (isExpand) => {
|
|
10
|
+
setNewDataSource((pre) => {
|
|
11
|
+
const tempPre = [...pre];
|
|
12
|
+
const childrenIds = record?.children?.map((el) => el?.[rowKey]);
|
|
13
|
+
if (isExpand) {
|
|
14
|
+
const findIndex = pre?.findIndex((el) => el?.[rowKey] == record?.[rowKey]);
|
|
15
|
+
const filterList = pre?.filter((el) => childrenIds?.includes(el?.[rowKey])) || [];
|
|
16
|
+
if (filterList?.length == 0) {
|
|
17
|
+
tempPre.splice(findIndex + 1, 0, ...(record?.children || []));
|
|
18
|
+
}
|
|
19
|
+
return [...tempPre];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return pre?.filter((el) => !childrenIds?.includes(el?.[rowKey]));
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (expandKeys?.includes(record?.[rowKey])) {
|
|
27
|
+
setExpand(true);
|
|
28
|
+
onExpand(true);
|
|
29
|
+
}
|
|
30
|
+
}, [cell?.record]);
|
|
31
|
+
|
|
32
|
+
/** 展开关闭子项 */
|
|
33
|
+
const onClickExpand = () => {
|
|
34
|
+
setExpandKeys((preExpandKeys) => {
|
|
35
|
+
if (preExpandKeys?.includes(record?.[rowKey])) {
|
|
36
|
+
return preExpandKeys?.filter((el) => el != record?.[rowKey]);
|
|
37
|
+
}
|
|
38
|
+
return [...preExpandKeys, record?.[rowKey]];
|
|
39
|
+
});
|
|
40
|
+
setExpand(!expand);
|
|
41
|
+
onExpand(!expand);
|
|
42
|
+
};
|
|
43
|
+
return (
|
|
44
|
+
<div className="expandList-template">
|
|
45
|
+
{record?.children ? (
|
|
46
|
+
<>
|
|
47
|
+
{!expand ? (
|
|
48
|
+
<PlusCircleOutlined className="expandList-template-icon" onClick={onClickExpand} />
|
|
49
|
+
) : (
|
|
50
|
+
<MinusCircleOutlined className="expandList-template-icon" onClick={onClickExpand} />
|
|
51
|
+
)}
|
|
52
|
+
</>
|
|
53
|
+
) : (
|
|
54
|
+
<div style={{ width: 14 }}></div>
|
|
55
|
+
)}
|
|
56
|
+
</div>
|
|
57
|
+
);
|
|
58
|
+
};
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { useMemo } from "react";
|
|
2
|
-
import { getVal } from "@hzab/utils/src/formily/field";
|
|
3
|
-
export const GetBaseTemplate = (props) => {
|
|
4
|
-
const { pattern, cell, componentProps, Com, cellRender } = props;
|
|
5
|
-
|
|
6
|
-
const echoValue = useMemo(() => {
|
|
7
|
-
if (!cell?.getField) {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
return getVal(
|
|
11
|
-
{ ...(cell?.getField && cell?.getField()), enum: cell?.getField()?.enum || cell?.values },
|
|
12
|
-
{ [cell?.getField && cell?.getField().name]: cell.text },
|
|
13
|
-
);
|
|
14
|
-
}, [cell]);
|
|
15
|
-
if (cellRender && cellRender(props)) {
|
|
16
|
-
const Slot = cellRender;
|
|
17
|
-
return <Slot {...props}></Slot>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return (
|
|
21
|
-
<div className="base-hoc">
|
|
22
|
-
{pattern == "readPretty" ? (
|
|
23
|
-
<div>{echoValue}</div>
|
|
24
|
-
) : (
|
|
25
|
-
<Com
|
|
26
|
-
className="rg-input"
|
|
27
|
-
ref={(input) => {
|
|
28
|
-
if (input) {
|
|
29
|
-
input.focus();
|
|
30
|
-
}
|
|
31
|
-
}}
|
|
32
|
-
{...componentProps}
|
|
33
|
-
/>
|
|
34
|
-
)}
|
|
35
|
-
</div>
|
|
36
|
-
);
|
|
37
|
-
};
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { getVal } from "@hzab/utils/src/formily/field";
|
|
3
|
+
export const GetBaseTemplate = (props) => {
|
|
4
|
+
const { pattern, cell, componentProps, Com, cellRender } = props;
|
|
5
|
+
|
|
6
|
+
const echoValue = useMemo(() => {
|
|
7
|
+
if (!cell?.getField) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
return getVal(
|
|
11
|
+
{ ...(cell?.getField && cell?.getField()), enum: cell?.getField()?.enum || cell?.values },
|
|
12
|
+
{ [cell?.getField && cell?.getField().name]: cell.text },
|
|
13
|
+
);
|
|
14
|
+
}, [cell]);
|
|
15
|
+
if (cellRender && cellRender(props)) {
|
|
16
|
+
const Slot = cellRender;
|
|
17
|
+
return <Slot {...props}></Slot>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<div className="base-hoc">
|
|
22
|
+
{pattern == "readPretty" ? (
|
|
23
|
+
<div>{echoValue}</div>
|
|
24
|
+
) : (
|
|
25
|
+
<Com
|
|
26
|
+
className="rg-input"
|
|
27
|
+
ref={(input) => {
|
|
28
|
+
if (input) {
|
|
29
|
+
input.focus();
|
|
30
|
+
}
|
|
31
|
+
}}
|
|
32
|
+
{...componentProps}
|
|
33
|
+
/>
|
|
34
|
+
)}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
.number-cell-template {
|
|
2
|
-
.rg-input {
|
|
3
|
-
border: none;
|
|
4
|
-
}
|
|
5
|
-
}
|
|
1
|
+
.number-cell-template {
|
|
2
|
+
.rg-input {
|
|
3
|
+
border: none;
|
|
4
|
+
}
|
|
5
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Input } from "antd";
|
|
2
|
-
import { GetBaseTemplate } from "../GetBaseTemplate";
|
|
3
|
-
import "./index.less";
|
|
4
|
-
const NumberCellTemplate = (props: any) => {
|
|
5
|
-
return (
|
|
6
|
-
<GetBaseTemplate
|
|
7
|
-
{...props}
|
|
8
|
-
componentProps={{
|
|
9
|
-
...props?.componentProps,
|
|
10
|
-
type: "number",
|
|
11
|
-
}}
|
|
12
|
-
Com={Input}
|
|
13
|
-
></GetBaseTemplate>
|
|
14
|
-
);
|
|
15
|
-
};
|
|
16
|
-
export default NumberCellTemplate;
|
|
1
|
+
import { Input } from "antd";
|
|
2
|
+
import { GetBaseTemplate } from "../GetBaseTemplate";
|
|
3
|
+
import "./index.less";
|
|
4
|
+
const NumberCellTemplate = (props: any) => {
|
|
5
|
+
return (
|
|
6
|
+
<GetBaseTemplate
|
|
7
|
+
{...props}
|
|
8
|
+
componentProps={{
|
|
9
|
+
...props?.componentProps,
|
|
10
|
+
type: "number",
|
|
11
|
+
}}
|
|
12
|
+
Com={Input}
|
|
13
|
+
></GetBaseTemplate>
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
export default NumberCellTemplate;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
.text-cell-template {
|
|
2
|
-
.rg-input {
|
|
3
|
-
border: none;
|
|
4
|
-
}
|
|
5
|
-
}
|
|
1
|
+
.text-cell-template {
|
|
2
|
+
.rg-input {
|
|
3
|
+
border: none;
|
|
4
|
+
}
|
|
5
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Input } from "antd";
|
|
2
|
-
import { GetBaseTemplate } from "../GetBaseTemplate";
|
|
3
|
-
import "./index.less";
|
|
4
|
-
|
|
5
|
-
const TextCellTemplate = (props: any) => {
|
|
6
|
-
return <GetBaseTemplate {...props} Com={Input}></GetBaseTemplate>;
|
|
7
|
-
};
|
|
8
|
-
export default TextCellTemplate;
|
|
1
|
+
import { Input } from "antd";
|
|
2
|
+
import { GetBaseTemplate } from "../GetBaseTemplate";
|
|
3
|
+
import "./index.less";
|
|
4
|
+
|
|
5
|
+
const TextCellTemplate = (props: any) => {
|
|
6
|
+
return <GetBaseTemplate {...props} Com={Input}></GetBaseTemplate>;
|
|
7
|
+
};
|
|
8
|
+
export default TextCellTemplate;
|