@easyv/biz-components 2.1.4 → 2.1.6
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/dist/lib/_virtual/index.es2.js +2 -2
- package/dist/lib/_virtual/index.es3.js +2 -2
- package/dist/lib/components/ai-components/mobile-voice-input/icon-button.es.js +1 -1
- package/dist/lib/components/ai-components/mobile-voice-input/mobile-voice-input.es.js +5 -5
- package/dist/lib/components/code-mirror-editor/code-mirror-editor.es.js +9 -9
- package/dist/lib/components/code-mirror-editor/code-mirror-editor.es.js.map +1 -1
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.es.js +84 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.es.js +58 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.es.js +97 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus.es.js +1063 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid.module.less.es.js +7 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid.module.less.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/utils.es.js +93 -0
- package/dist/lib/components/easyv-reactgrid-plus/utils.es.js.map +1 -0
- package/dist/lib/easyv-biz-components/src/components/code-mirror-editor/code-mirror-editor.d.ts +2 -2
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.d.ts +14 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.d.ts +11 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.d.ts +16 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus.d.ts +16 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus.types.d.ts +18 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/index.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/test/easyv-react-grid-plus.cy.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/utils.d.ts +6 -0
- package/dist/lib/easyv-biz-components/src/components/index.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/constants.d.ts +3 -1
- package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/types.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/utils.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/easy-fetch/easy-fetch.d.ts +13 -0
- package/dist/lib/easyv-biz-components/src/utils/easy-fetch/index.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/easy-fetch/test/easy-fetch.cy.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/easy-fetch/types.d.ts +6 -0
- package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/component-dimension.d.ts +2 -0
- package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/easyv-gui-helper.d.ts +3 -0
- package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/types.d.ts +3 -0
- package/dist/lib/easyv-biz-components/src/utils/index.d.ts +2 -0
- package/dist/lib/easyv-biz-components/src/utils/twin/index.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/twin/utils.d.ts +5 -0
- package/dist/lib/hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.es.js +2 -2
- package/dist/lib/index.es.js +8 -1
- package/dist/lib/index.es.js.map +1 -1
- package/dist/lib/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-table/build/lib/index.es.js +103 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-table/build/lib/index.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_react-virtual@3.13.23_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-virtual/dist/esm/index.es.js +53 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_react-virtual@3.13.23_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-virtual/dist/esm/index.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.es.js +2672 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/index.es.js +871 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/index.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/utils.es.js +73 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/utils.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/co-web-worker@1.0.1/node_modules/co-web-worker/index.es.js +1 -1
- package/dist/lib/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.es.js +11 -0
- package/dist/lib/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.es.js +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{button-Dip6wfc7.es.es.js → button-VOE5PncW.es.es.js} +2 -2
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{button-Dip6wfc7.es.es.js.map → button-VOE5PncW.es.es.js.map} +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-EAFzPBke.es.es.js → index-6AIVHTQ0.es.es.js} +11 -11
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-EAFzPBke.es.es.js.map → index-6AIVHTQ0.es.es.js.map} +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-zvVd1BJp.es.es.js → index-DttpqRHH.es.es.js} +596 -605
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-DttpqRHH.es.es.js.map +1 -0
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{input-Dhdn9e9Z.es.es.js → input-CqQJPvav.es.es.js} +54 -54
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{input-Dhdn9e9Z.es.es.js.map → input-CqQJPvav.es.es.js.map} +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{keycode-DOHuQiUY.es.es.js → keycode-cVKDBtW_.es.es.js} +4 -4
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{keycode-DOHuQiUY.es.es.js.map → keycode-cVKDBtW_.es.es.js.map} +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/index.es.es.js.map +1 -1
- package/dist/lib/stats.html +1 -1
- package/dist/lib/style.pkg.css +1 -1
- package/dist/lib/utils/ai-agent-message-manager/ai-agent-message-manager.es.js +9 -1
- package/dist/lib/utils/ai-agent-message-manager/ai-agent-message-manager.es.js.map +1 -1
- package/dist/lib/utils/ai-agent-message-manager/constants.es.js +4 -2
- package/dist/lib/utils/ai-agent-message-manager/constants.es.js.map +1 -1
- package/dist/lib/utils/ai-agent-message-manager/types.es.js.map +1 -1
- package/dist/lib/utils/ai-agent-message-manager/utils.es.js +10 -0
- package/dist/lib/utils/ai-agent-message-manager/utils.es.js.map +1 -0
- package/dist/lib/utils/easy-fetch/easy-fetch.es.js +88 -0
- package/dist/lib/utils/easy-fetch/easy-fetch.es.js.map +1 -0
- package/dist/lib/utils/easyv-gui-helper/easyv-gui-helper.es.js +13 -4
- package/dist/lib/utils/easyv-gui-helper/easyv-gui-helper.es.js.map +1 -1
- package/dist/lib/utils/show-modal/show-modal.es.js +5 -5
- package/dist/lib/utils/twin/utils.es.js +30 -0
- package/dist/lib/utils/twin/utils.es.js.map +1 -0
- package/dist/tailwindcss.pkg.css +113 -0
- package/package.json +14 -8
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-zvVd1BJp.es.es.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"easyv-react-grid-plus.es.js","sources":["../../../../src/components/easyv-reactgrid-plus/easyv-react-grid-plus.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ColumnDef, flexRender, getCoreRowModel, useReactTable } from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport classNames from \"classnames\";\nimport { produce } from \"immer\";\nimport { EasyvReactGridPlusContextMenu } from \"./easyv-react-grid-plus-context-menu\";\nimport { EasyvReactGridPlusEditableCell } from \"./easyv-react-grid-plus-editable-cell\";\nimport { useGridSelectionAutoScroll } from \"./easyv-react-grid-plus-selection.hook\";\nimport { CellRange, ContextTarget } from \"./easyv-react-grid-plus.types\";\nimport styles from \"./easyv-react-grid.module.less\";\nimport { calculateFillPreviewRange, getColumnLabel, parseClipboardText } from \"./utils\";\n\nexport interface EasyvReactGridProps {\n wrapClassName?: string;\n wrapStyle?: React.CSSProperties;\n data?: (string | number)[][];\n onDataChange?: (data: (string | number)[][]) => void;\n expandMinGrid?: boolean;\n minRows?: number;\n minCols?: number;\n stickyTopRow?: boolean;\n stickyLeftColumn?: boolean;\n defaultRowHeight?: number;\n}\n\n/** 和 EasyvReactGrid 相比,它支持虚拟列表,可以加载十万行级的数据 */\nexport const EasyvReactGridPlus = (props: EasyvReactGridProps) => {\n const {\n wrapClassName = \"\",\n wrapStyle,\n data = [],\n onDataChange,\n expandMinGrid = true,\n minRows = 50,\n minCols = 26,\n stickyTopRow = true,\n stickyLeftColumn = true,\n defaultRowHeight = 32,\n } = props;\n\n const parentRef = useRef<HTMLDivElement>(null);\n const skipSelectionClickRef = useRef(false);\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});\n const [rowHeights, setRowHeights] = useState<Record<string, number>>({});\n const [editingCellKey, setEditingCellKey] = useState<string | null>(null);\n const [selectedCellKeys, setSelectedCellKeys] = useState<Set<string>>(new Set());\n const [selectedRowIndexes, setSelectedRowIndexes] = useState<Set<number>>(new Set());\n const [selectedColIndexes, setSelectedColIndexes] = useState<Set<number>>(new Set());\n const [isSelectingRange, setIsSelectingRange] = useState(false);\n const [selectionStart, setSelectionStart] = useState<{ row: number; col: number } | null>(null);\n const [isFillDragging, setIsFillDragging] = useState(false);\n const [fillSourceRange, setFillSourceRange] = useState<CellRange | null>(null);\n const [fillPreviewRange, setFillPreviewRange] = useState<CellRange | null>(null);\n const [resizingColumn, setResizingColumn] = useState<{\n columnId: string;\n startX: number;\n startWidth: number;\n } | null>(null);\n const [resizingRow, setResizingRow] = useState<{\n rowId: string;\n startY: number;\n startHeight: number;\n } | null>(null);\n const [contextMenuState, setContextMenuState] = useState<{\n visible: boolean;\n x: number;\n y: number;\n target: ContextTarget | null;\n }>({\n visible: false,\n x: 0,\n y: 0,\n target: null,\n });\n const [clipboardCache, setClipboardCache] = useState(\"\");\n const [insertRowCount, setInsertRowCount] = useState(1);\n const [insertColCount, setInsertColCount] = useState(1);\n const [isGridActive, setIsGridActive] = useState(false);\n const [editingInputSeed, setEditingInputSeed] = useState<{ key: string; value: string } | null>(\n null,\n );\n const handleCopyRef = useRef<(isCut: boolean) => void | Promise<void>>(() => {});\n const handlePasteRef = useRef<() => void | Promise<void>>(() => {});\n const colsCount = data[0]?.length || 0;\n const rowsCount = data.length;\n const displayRowsCount = expandMinGrid ? Math.max(rowsCount, minRows) : rowsCount;\n const displayColsCount = expandMinGrid ? Math.max(colsCount, minCols) : colsCount;\n const getCellKey = useCallback((row: number, col: number) => `${row}:${col}`, []);\n\n const selectSingleCell = (row: number, col: number) => {\n setSelectedCellKeys(new Set([getCellKey(row, col)]));\n setSelectedRowIndexes(new Set());\n setSelectedColIndexes(new Set());\n };\n\n const selectRangeCells = useCallback(\n (startRow: number, startCol: number, endRow: number, endCol: number) => {\n const rowMin = Math.min(startRow, endRow);\n const rowMax = Math.max(startRow, endRow);\n const colMin = Math.min(startCol, endCol);\n const colMax = Math.max(startCol, endCol);\n const next = new Set<string>();\n for (let r = rowMin; r <= rowMax; r++) {\n for (let c = colMin; c <= colMax; c++) {\n next.add(getCellKey(r, c));\n }\n }\n setSelectedCellKeys(next);\n setSelectedRowIndexes(new Set());\n setSelectedColIndexes(new Set());\n },\n [getCellKey],\n );\n const setSelectionByRange = useCallback(\n (range: CellRange) => {\n const next = new Set<string>();\n for (let r = range.minRow; r <= range.maxRow; r++) {\n for (let c = range.minCol; c <= range.maxCol; c++) {\n next.add(getCellKey(r, c));\n }\n }\n setSelectedCellKeys(next);\n setSelectedRowIndexes(new Set());\n setSelectedColIndexes(new Set());\n },\n [getCellKey],\n );\n const { setSelectionPointer } = useGridSelectionAutoScroll({\n parentRef,\n isSelectingRange,\n selectionStart,\n selectRangeCells,\n stopSelectingRange: () => {\n setIsSelectingRange(false);\n setSelectionStart(null);\n },\n });\n const selectRow = (rowIndex: number) => {\n setSelectedRowIndexes(new Set([rowIndex]));\n setSelectedColIndexes(new Set());\n setSelectedCellKeys(new Set());\n };\n\n const selectColumn = (colIndex: number) => {\n setSelectedColIndexes(new Set([colIndex]));\n setSelectedRowIndexes(new Set());\n setSelectedCellKeys(new Set());\n };\n const closeContextMenu = () => {\n setContextMenuState((prev) => ({ ...prev, visible: false }));\n };\n const openContextMenu = (event: React.MouseEvent, target: ContextTarget) => {\n const menuWidth = 180;\n const menuHeight = 260;\n const adjustedX =\n event.clientX + menuWidth > window.innerWidth\n ? window.innerWidth - menuWidth - 8\n : event.clientX;\n const adjustedY =\n event.clientY + menuHeight > window.innerHeight\n ? window.innerHeight - menuHeight - 8\n : event.clientY;\n setContextMenuState({\n visible: true,\n x: Math.max(8, adjustedX),\n y: Math.max(8, adjustedY),\n target,\n });\n setInsertRowCount(1);\n setInsertColCount(1);\n };\n\n const tableData = useMemo(() => {\n return Array.from({ length: displayRowsCount }).map((_, rowIndex) => {\n const row = data[rowIndex] || [];\n const rowData: Record<string, any> = { id: rowIndex };\n for (let colIndex = 0; colIndex < displayColsCount; colIndex++) {\n rowData[String(colIndex)] = row[colIndex] ?? \"\";\n }\n return rowData;\n });\n }, [data, displayColsCount, displayRowsCount]);\n\n const columns = useMemo<ColumnDef<any>[]>(() => {\n const cols: ColumnDef<any>[] = [\n {\n id: \"header-col\",\n header: \"\",\n accessorKey: \"id\",\n cell: (info) => (\n <div className=\"biz-text-[#c9cbd3] biz-w-full biz-h-full biz-flex biz-items-center biz-justify-center\">\n {Number(info.getValue()) + 1}\n </div>\n ),\n size: columnWidths[\"header-col\"] ?? 75,\n },\n ];\n\n for (let i = 0; i < displayColsCount; i++) {\n cols.push({\n id: String(i),\n header: getColumnLabel(i),\n accessorKey: String(i),\n cell: (info) => {\n const cellKey = `${info.row.id}:${String(i)}`;\n return (\n <EasyvReactGridPlusEditableCell\n value={\n editingCellKey === cellKey && editingInputSeed?.key === cellKey\n ? editingInputSeed.value\n : info.getValue()\n }\n row={info.row.index}\n column={i}\n isEditing={editingCellKey === cellKey}\n onRequestEdit={() => {\n setEditingInputSeed(null);\n setEditingCellKey(cellKey);\n }}\n onFinishEdit={() => {\n setEditingInputSeed(null);\n setEditingCellKey((prev) => (prev === cellKey ? null : prev));\n }}\n updateData={(row, col, value) => {\n if (!onDataChange) return;\n const newData = produce(data, (draft) => {\n while (draft.length <= row) {\n draft.push(new Array(displayColsCount).fill(\"\"));\n }\n while (draft[row].length <= col) {\n draft[row].push(\"\");\n }\n draft[row][col] = value;\n });\n onDataChange(newData);\n }}\n />\n );\n },\n size: columnWidths[String(i)] ?? 100,\n });\n }\n return cols;\n }, [columnWidths, data, displayColsCount, editingCellKey, editingInputSeed, onDataChange]);\n\n const table = useReactTable({\n data: tableData,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n const { rows } = table.getRowModel();\n\n const rowVirtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => parentRef.current,\n estimateSize: (index) => rowHeights[rows[index]?.id ?? \"\"] ?? defaultRowHeight,\n overscan: 10,\n getItemKey: (index) => rows[index]?.id ?? index,\n measureElement: (element) => element.getBoundingClientRect().height,\n });\n\n useEffect(() => {\n rowVirtualizer.measure();\n }, [rowHeights, rowVirtualizer]);\n\n useEffect(() => {\n if (!resizingColumn) return;\n const onMouseMove = (event: MouseEvent) => {\n const delta = event.clientX - resizingColumn.startX;\n const nextWidth = Math.max(60, resizingColumn.startWidth + delta);\n setColumnWidths((prev) => ({\n ...prev,\n [resizingColumn.columnId]: nextWidth,\n }));\n };\n const onMouseUp = () => {\n setResizingColumn(null);\n };\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n }, [resizingColumn]);\n\n useEffect(() => {\n if (!resizingRow) return;\n const onMouseMove = (event: MouseEvent) => {\n const delta = event.clientY - resizingRow.startY;\n const nextHeight = Math.max(24, resizingRow.startHeight + delta);\n setRowHeights((prev) => ({\n ...prev,\n [resizingRow.rowId]: nextHeight,\n }));\n };\n const onMouseUp = () => {\n setResizingRow(null);\n };\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n }, [resizingRow]);\n\n useEffect(() => {\n if (!contextMenuState.visible) return;\n const onPointerDown = () => {\n closeContextMenu();\n };\n window.addEventListener(\"mousedown\", onPointerDown);\n window.addEventListener(\"scroll\", onPointerDown, true);\n return () => {\n window.removeEventListener(\"mousedown\", onPointerDown);\n window.removeEventListener(\"scroll\", onPointerDown, true);\n };\n }, [contextMenuState.visible]);\n useEffect(() => {\n const onPointerDown = (event: MouseEvent) => {\n if (!parentRef.current) return;\n setIsGridActive(parentRef.current.contains(event.target as Node));\n };\n window.addEventListener(\"mousedown\", onPointerDown);\n return () => {\n window.removeEventListener(\"mousedown\", onPointerDown);\n };\n }, []);\n useEffect(() => {\n if (!isFillDragging || !fillSourceRange || !fillPreviewRange) return;\n const onMouseUp = () => {\n if (onDataChange) {\n const sourceHeight = fillSourceRange.maxRow - fillSourceRange.minRow + 1;\n const sourceWidth = fillSourceRange.maxCol - fillSourceRange.minCol + 1;\n const newData = produce(data, (draft) => {\n for (let r = fillPreviewRange.minRow; r <= fillPreviewRange.maxRow; r++) {\n for (let c = fillPreviewRange.minCol; c <= fillPreviewRange.maxCol; c++) {\n const isInSource =\n r >= fillSourceRange.minRow &&\n r <= fillSourceRange.maxRow &&\n c >= fillSourceRange.minCol &&\n c <= fillSourceRange.maxCol;\n if (isInSource) continue;\n const sourceRow =\n fillSourceRange.minRow +\n ((((r - fillSourceRange.minRow) % sourceHeight) + sourceHeight) % sourceHeight);\n const sourceCol =\n fillSourceRange.minCol +\n ((((c - fillSourceRange.minCol) % sourceWidth) + sourceWidth) % sourceWidth);\n while (draft.length <= r) {\n draft.push(new Array(displayColsCount).fill(\"\"));\n }\n while (draft[r].length <= c) {\n draft[r].push(\"\");\n }\n draft[r][c] = draft[sourceRow]?.[sourceCol] ?? \"\";\n }\n }\n });\n onDataChange(newData);\n }\n setSelectionByRange(fillPreviewRange);\n setIsFillDragging(false);\n setFillSourceRange(null);\n setFillPreviewRange(null);\n };\n window.addEventListener(\"mouseup\", onMouseUp);\n return () => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n }, [\n data,\n displayColsCount,\n fillPreviewRange,\n fillSourceRange,\n isFillDragging,\n onDataChange,\n setSelectionByRange,\n ]);\n\n const virtualRows = rowVirtualizer.getVirtualItems();\n const totalSize = rowVirtualizer.getTotalSize();\n const tableWidth = useMemo(() => {\n let width = columnWidths[\"header-col\"] ?? 75;\n for (let i = 0; i < displayColsCount; i++) {\n width += columnWidths[String(i)] ?? 100;\n }\n return width;\n }, [columnWidths, displayColsCount]);\n\n const paddingTop = virtualRows.length > 0 ? virtualRows[0]?.start || 0 : 0;\n const paddingBottom =\n virtualRows.length > 0 ? totalSize - (virtualRows[virtualRows.length - 1]?.end || 0) : 0;\n const selectedCellRange = useMemo<CellRange | null>(() => {\n if (selectedCellKeys.size <= 1) return null;\n let minRow = Number.POSITIVE_INFINITY;\n let maxRow = Number.NEGATIVE_INFINITY;\n let minCol = Number.POSITIVE_INFINITY;\n let maxCol = Number.NEGATIVE_INFINITY;\n selectedCellKeys.forEach((key) => {\n const [rowText, colText] = key.split(\":\");\n const row = Number(rowText);\n const col = Number(colText);\n if (Number.isNaN(row) || Number.isNaN(col)) return;\n minRow = Math.min(minRow, row);\n maxRow = Math.max(maxRow, row);\n minCol = Math.min(minCol, col);\n maxCol = Math.max(maxCol, col);\n });\n if (\n minRow === Number.POSITIVE_INFINITY ||\n maxRow === Number.NEGATIVE_INFINITY ||\n minCol === Number.POSITIVE_INFINITY ||\n maxCol === Number.NEGATIVE_INFINITY\n ) {\n return null;\n }\n return { minRow, maxRow, minCol, maxCol };\n }, [selectedCellKeys]);\n const singleSelectedCellRange = useMemo<CellRange | null>(() => {\n if (selectedCellKeys.size !== 1) return null;\n const [firstKey] = Array.from(selectedCellKeys);\n if (!firstKey) return null;\n const [rowText, colText] = firstKey.split(\":\");\n const row = Number(rowText);\n const col = Number(colText);\n if (Number.isNaN(row) || Number.isNaN(col)) return null;\n return {\n minRow: row,\n maxRow: row,\n minCol: col,\n maxCol: col,\n };\n }, [selectedCellKeys]);\n const selectedRowRange = useMemo<CellRange | null>(() => {\n if (selectedRowIndexes.size === 0) return null;\n const rowsArray = Array.from(selectedRowIndexes);\n return {\n minRow: Math.min(...rowsArray),\n maxRow: Math.max(...rowsArray),\n minCol: 0,\n maxCol: Math.max(displayColsCount - 1, 0),\n };\n }, [displayColsCount, selectedRowIndexes]);\n const selectedColRange = useMemo<CellRange | null>(() => {\n if (selectedColIndexes.size === 0) return null;\n const colsArray = Array.from(selectedColIndexes);\n return {\n minRow: 0,\n maxRow: Math.max(displayRowsCount - 1, 0),\n minCol: Math.min(...colsArray),\n maxCol: Math.max(...colsArray),\n };\n }, [displayRowsCount, selectedColIndexes]);\n const fillSourceCandidateRange = selectedCellRange || singleSelectedCellRange;\n const selectionRange =\n selectedCellRange || singleSelectedCellRange || selectedRowRange || selectedColRange;\n const calculateOverlayStyle = useCallback(\n (range: CellRange | null) => {\n if (!range) return null;\n let left = columnWidths[\"header-col\"] ?? 75;\n for (let col = 0; col < range.minCol; col++) {\n left += columnWidths[String(col)] ?? 100;\n }\n let top = rowHeights[\"header-row\"] ?? defaultRowHeight;\n for (let row = 0; row < range.minRow; row++) {\n top += rowHeights[String(row)] ?? defaultRowHeight;\n }\n let width = 0;\n for (let col = range.minCol; col <= range.maxCol; col++) {\n width += columnWidths[String(col)] ?? 100;\n }\n let height = 0;\n for (let row = range.minRow; row <= range.maxRow; row++) {\n height += rowHeights[String(row)] ?? defaultRowHeight;\n }\n return { left, top, width, height };\n },\n [columnWidths, defaultRowHeight, rowHeights],\n );\n const getOverlayStyleFromDom = useCallback((range: CellRange | null) => {\n if (!range || !parentRef.current) return null;\n const startCell = parentRef.current.querySelector(\n `[data-grid-row=\"${range.minRow}\"][data-grid-col=\"${range.minCol}\"]`,\n ) as HTMLTableCellElement | null;\n const endCell = parentRef.current.querySelector(\n `[data-grid-row=\"${range.maxRow}\"][data-grid-col=\"${range.maxCol}\"]`,\n ) as HTMLTableCellElement | null;\n if (!startCell || !endCell) return null;\n const containerRect = parentRef.current.getBoundingClientRect();\n const startRect = startCell.getBoundingClientRect();\n const endRect = endCell.getBoundingClientRect();\n const left = startRect.left - containerRect.left + parentRef.current.scrollLeft;\n const top = startRect.top - containerRect.top + parentRef.current.scrollTop;\n const width = endRect.right - startRect.left;\n const height = endRect.bottom - startRect.top;\n return { left, top, width, height };\n }, []);\n const selectionOverlayStyle = useMemo(() => {\n return getOverlayStyleFromDom(selectionRange) || calculateOverlayStyle(selectionRange);\n }, [selectionRange, calculateOverlayStyle, getOverlayStyleFromDom]);\n const fillPreviewOverlayStyle = useMemo(() => {\n if (!isFillDragging) return null;\n return getOverlayStyleFromDom(fillPreviewRange) || calculateOverlayStyle(fillPreviewRange);\n }, [fillPreviewRange, isFillDragging, calculateOverlayStyle, getOverlayStyleFromDom]);\n const selectedRows = useMemo(\n () => Array.from(selectedRowIndexes).sort((a, b) => a - b),\n [selectedRowIndexes],\n );\n const selectedCols = useMemo(\n () => Array.from(selectedColIndexes).sort((a, b) => a - b),\n [selectedColIndexes],\n );\n const getClipboardRange = (): CellRange | null => {\n if (selectionRange) return selectionRange;\n if (!contextMenuState.target) return null;\n if (contextMenuState.target.kind === \"cell\") {\n return {\n minRow: contextMenuState.target.rowIndex,\n maxRow: contextMenuState.target.rowIndex,\n minCol: contextMenuState.target.colIndex,\n maxCol: contextMenuState.target.colIndex,\n };\n }\n if (contextMenuState.target.kind === \"rowHeader\") {\n return {\n minRow: contextMenuState.target.rowIndex,\n maxRow: contextMenuState.target.rowIndex,\n minCol: 0,\n maxCol: Math.max(displayColsCount - 1, 0),\n };\n }\n return {\n minRow: 0,\n maxRow: Math.max(displayRowsCount - 1, 0),\n minCol: contextMenuState.target.colIndex,\n maxCol: contextMenuState.target.colIndex,\n };\n };\n const toClipboardText = (range: CellRange): string => {\n const lines: string[] = [];\n for (let r = range.minRow; r <= range.maxRow; r++) {\n const cells: string[] = [];\n for (let c = range.minCol; c <= range.maxCol; c++) {\n cells.push(String(data[r]?.[c] ?? \"\"));\n }\n lines.push(cells.join(\"\\t\"));\n }\n return lines.join(\"\\n\");\n };\n const ensureSize = (draft: (string | number)[][], targetRow: number, targetCol: number) => {\n const widthBase = Math.max(targetCol + 1, draft[0]?.length || displayColsCount || 1);\n while (draft.length <= targetRow) {\n draft.push(new Array(widthBase).fill(\"\"));\n }\n while (draft[targetRow].length <= targetCol) {\n draft[targetRow].push(\"\");\n }\n };\n const handleCopy = async (isCut: boolean) => {\n const range = getClipboardRange();\n if (!range) return;\n const text = toClipboardText(range);\n setClipboardCache(text);\n if (navigator.clipboard?.writeText) {\n try {\n await navigator.clipboard.writeText(text);\n } catch {\n setClipboardCache(text);\n }\n }\n if (isCut && onDataChange) {\n const next = produce(data, (draft) => {\n for (let r = range.minRow; r <= range.maxRow; r++) {\n for (let c = range.minCol; c <= range.maxCol; c++) {\n if (draft[r]?.[c] !== undefined) {\n draft[r][c] = \"\";\n }\n }\n }\n });\n onDataChange(next);\n }\n };\n const handlePaste = async () => {\n let text = clipboardCache;\n if (navigator.clipboard?.readText) {\n try {\n const fromClipboard = await navigator.clipboard.readText();\n if (fromClipboard) text = fromClipboard;\n } catch {\n text = clipboardCache;\n }\n }\n if (!text || !onDataChange) return;\n const matrix = parseClipboardText(text);\n if (matrix.length === 0) return;\n const range = getClipboardRange();\n const anchorRow = range?.minRow ?? contextMenuState.target?.rowIndex ?? 0;\n const anchorCol = range?.minCol ?? contextMenuState.target?.colIndex ?? 0;\n const next = produce(data, (draft) => {\n for (let r = 0; r < matrix.length; r++) {\n for (let c = 0; c < matrix[r].length; c++) {\n const targetRow = anchorRow + r;\n const targetCol = anchorCol + c;\n ensureSize(draft, targetRow, targetCol);\n draft[targetRow][targetCol] = matrix[r][c];\n }\n }\n });\n onDataChange(next);\n const endRow = anchorRow + matrix.length - 1;\n const endCol = anchorCol + matrix[0].length - 1;\n setSelectionByRange({\n minRow: anchorRow,\n maxRow: endRow,\n minCol: anchorCol,\n maxCol: endCol,\n });\n };\n const handleInsertRows = (position: \"above\" | \"below\", countInput: number) => {\n if (!onDataChange) return;\n const count = Math.max(1, Math.floor(countInput || 1));\n const fallback = contextMenuState.target?.rowIndex ?? 0;\n const rangeBasedRows =\n selectionRange && selectedRows.length === 0 && selectedCols.length === 0\n ? [selectionRange.minRow, selectionRange.maxRow]\n : null;\n const baseIndex =\n selectedRows.length > 0\n ? position === \"above\"\n ? selectedRows[0]\n : selectedRows[selectedRows.length - 1]\n : rangeBasedRows\n ? position === \"above\"\n ? rangeBasedRows[0]\n : rangeBasedRows[1]\n : fallback;\n const insertAt = position === \"above\" ? baseIndex : baseIndex + 1;\n const width = Math.max(displayColsCount, data[0]?.length || 0, 1);\n const next = produce(data, (draft) => {\n for (let i = 0; i < count; i++) {\n draft.splice(insertAt + i, 0, new Array(width).fill(\"\"));\n }\n });\n onDataChange(next);\n };\n const handleInsertCols = (position: \"left\" | \"right\", countInput: number) => {\n if (!onDataChange) return;\n const count = Math.max(1, Math.floor(countInput || 1));\n const fallback = contextMenuState.target?.colIndex ?? 0;\n const rangeBasedCols =\n selectionRange && selectedRows.length === 0 && selectedCols.length === 0\n ? [selectionRange.minCol, selectionRange.maxCol]\n : null;\n const baseIndex =\n selectedCols.length > 0\n ? position === \"left\"\n ? selectedCols[0]\n : selectedCols[selectedCols.length - 1]\n : rangeBasedCols\n ? position === \"left\"\n ? rangeBasedCols[0]\n : rangeBasedCols[1]\n : fallback;\n const insertAt = position === \"left\" ? baseIndex : baseIndex + 1;\n const next = produce(data, (draft) => {\n const rowCount = Math.max(draft.length, displayRowsCount);\n while (draft.length < rowCount) {\n draft.push(new Array(Math.max(displayColsCount, 1)).fill(\"\"));\n }\n for (let r = 0; r < draft.length; r++) {\n for (let i = 0; i < count; i++) {\n draft[r].splice(insertAt + i, 0, \"\");\n }\n }\n });\n onDataChange(next);\n };\n const handleDeleteRows = () => {\n if (!onDataChange) return;\n const rangeRows =\n selectionRange && selectedRows.length === 0 && selectedCols.length === 0\n ? Array.from(\n { length: selectionRange.maxRow - selectionRange.minRow + 1 },\n (_, i) => selectionRange.minRow + i,\n )\n : [];\n const rowsToDelete =\n selectedRows.length > 0\n ? selectedRows\n : rangeRows.length > 0\n ? rangeRows\n : contextMenuState.target\n ? [contextMenuState.target.rowIndex]\n : [];\n if (rowsToDelete.length === 0) return;\n const next = produce(data, (draft) => {\n [...rowsToDelete]\n .sort((a, b) => b - a)\n .forEach((rowIndex) => {\n if (rowIndex >= 0 && rowIndex < draft.length) {\n draft.splice(rowIndex, 1);\n }\n });\n });\n onDataChange(next);\n };\n const handleDeleteCols = () => {\n if (!onDataChange) return;\n const rangeCols =\n selectionRange && selectedRows.length === 0 && selectedCols.length === 0\n ? Array.from(\n { length: selectionRange.maxCol - selectionRange.minCol + 1 },\n (_, i) => selectionRange.minCol + i,\n )\n : [];\n const colsToDelete =\n selectedCols.length > 0\n ? selectedCols\n : rangeCols.length > 0\n ? rangeCols\n : contextMenuState.target\n ? [contextMenuState.target.colIndex]\n : [];\n if (colsToDelete.length === 0) return;\n const next = produce(data, (draft) => {\n [...colsToDelete]\n .sort((a, b) => b - a)\n .forEach((colIndex) => {\n draft.forEach((row) => {\n if (colIndex >= 0 && colIndex < row.length) {\n row.splice(colIndex, 1);\n }\n });\n });\n });\n onDataChange(next);\n };\n const runMenuAction = async (action: string) => {\n if (action === \"copy\") await handleCopy(false);\n if (action === \"cut\") await handleCopy(true);\n if (action === \"paste\") await handlePaste();\n if (action === \"insertRowAbove\") handleInsertRows(\"above\", insertRowCount);\n if (action === \"insertRowBelow\") handleInsertRows(\"below\", insertRowCount);\n if (action === \"insertColLeft\") handleInsertCols(\"left\", insertColCount);\n if (action === \"insertColRight\") handleInsertCols(\"right\", insertColCount);\n if (action === \"deleteRows\") handleDeleteRows();\n if (action === \"deleteCols\") handleDeleteCols();\n closeContextMenu();\n };\n const isRowHeaderMenu = contextMenuState.target?.kind === \"rowHeader\";\n const isColHeaderMenu = contextMenuState.target?.kind === \"colHeader\";\n handleCopyRef.current = handleCopy;\n handlePasteRef.current = handlePaste;\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (!isGridActive) return;\n const target = event.target as HTMLElement | null;\n const tagName = target?.tagName?.toLowerCase();\n if (tagName === \"input\" || tagName === \"textarea\" || target?.isContentEditable) {\n return;\n }\n const hasCommandKey = event.metaKey || event.ctrlKey;\n const key = event.key.toLowerCase();\n if (hasCommandKey) {\n if (key === \"c\") {\n event.preventDefault();\n void handleCopyRef.current(false);\n }\n if (key === \"x\") {\n event.preventDefault();\n void handleCopyRef.current(true);\n }\n if (key === \"v\") {\n event.preventDefault();\n void handlePasteRef.current();\n }\n return;\n }\n if (event.altKey) return;\n if (selectedCellKeys.size !== 1) return;\n const [cellKey] = Array.from(selectedCellKeys);\n if (!cellKey) return;\n const nativeEvent = event as KeyboardEvent & { isComposing?: boolean; keyCode?: number };\n if (nativeEvent.isComposing || nativeEvent.keyCode === 229 || key === \"process\") {\n event.preventDefault();\n setEditingInputSeed(null);\n setEditingCellKey(cellKey);\n return;\n }\n if (event.key.length === 1) {\n event.preventDefault();\n setEditingInputSeed({ key: cellKey, value: event.key });\n setEditingCellKey(cellKey);\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isGridActive, selectedCellKeys]);\n\n return (\n <div\n ref={parentRef}\n className={classNames(\n styles[\"easyv-react-grid\"],\n \"easyv-react-grid-plus\",\n \"biz-w-full biz-h-full biz-overflow-auto\",\n wrapClassName,\n )}\n style={{\n ...wrapStyle,\n position: \"relative\",\n }}\n >\n <table\n className=\"biz-w-full biz-table-fixed\"\n style={{\n width: tableWidth,\n borderCollapse: \"separate\",\n borderSpacing: 0,\n border: \"1px solid #2f3338\",\n }}\n >\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const isFirstCol = header.column.id === \"header-col\";\n const isStickyLeft = isFirstCol && stickyLeftColumn;\n const headerColIndex = Number(header.column.id);\n const isColSelected = !isFirstCol && selectedColIndexes.has(headerColIndex);\n const headerHeight = rowHeights[\"header-row\"] ?? defaultRowHeight;\n return (\n <th\n key={header.id}\n onContextMenu={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (isFirstCol || Number.isNaN(headerColIndex)) return;\n selectColumn(headerColIndex);\n openContextMenu(event, {\n kind: \"colHeader\",\n rowIndex: 0,\n colIndex: headerColIndex,\n });\n }}\n onClick={() => {\n if (skipSelectionClickRef.current) {\n skipSelectionClickRef.current = false;\n return;\n }\n if (!isFirstCol && !Number.isNaN(headerColIndex)) {\n selectColumn(headerColIndex);\n }\n }}\n className={classNames(\"biz-bg-[#252830] biz-relative biz-text-center\")}\n style={{\n width: header.getSize(),\n height: headerHeight,\n position: stickyTopRow || isStickyLeft ? \"sticky\" : \"relative\",\n top: stickyTopRow ? 0 : undefined,\n left: isStickyLeft ? 0 : undefined,\n zIndex:\n stickyTopRow && isStickyLeft\n ? 40\n : stickyTopRow\n ? 30\n : isStickyLeft\n ? 20\n : 1,\n border: \"1px solid #2f3338\",\n borderRightColor: isFirstCol ? \"#50535e\" : \"#2f3338\",\n borderTopLeftRadius: isFirstCol ? 8 : undefined,\n color: \"#b4b7c1\",\n fontSize: 12,\n fontWeight: 400,\n backgroundColor: isColSelected ? \"#353843\" : \"#252830\",\n }}\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n <div\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n skipSelectionClickRef.current = true;\n setResizingColumn({\n columnId: String(header.column.id),\n startX: event.clientX,\n startWidth: header.getSize(),\n });\n }}\n className={classNames(\n \"biz-absolute biz-right-[-2px] biz-top-0 biz-h-full biz-w-[6px] biz-cursor-col-resize hover:biz-bg-[#337efe] biz-z-20\",\n resizingColumn?.columnId === String(header.column.id) && \"biz-bg-[#337efe]\",\n )}\n />\n {isFirstCol && (\n <div\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n skipSelectionClickRef.current = true;\n setResizingRow({\n rowId: \"header-row\",\n startY: event.clientY,\n startHeight: headerHeight,\n });\n }}\n className=\"biz-absolute biz-left-0 biz-bottom-0 biz-h-[6px] biz-w-full biz-cursor-row-resize hover:biz-bg-[#337efe] biz-z-20\"\n />\n )}\n </th>\n );\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {paddingTop > 0 && (\n <tr>\n <td\n colSpan={table.getAllLeafColumns().length}\n style={{ height: `${paddingTop}px` }}\n />\n </tr>\n )}\n {virtualRows.map((virtualRow) => {\n const row = rows[virtualRow.index];\n const rowHeight = rowHeights[row.id] ?? defaultRowHeight;\n return (\n <tr\n key={row.id}\n data-index={virtualRow.index}\n ref={rowVirtualizer.measureElement}\n style={{ height: rowHeight }}\n >\n {row.getVisibleCells().map((cell) => {\n const isFirstCol = cell.column.id === \"header-col\";\n const isStickyLeft = isFirstCol && stickyLeftColumn;\n const rowIndex = row.index;\n const colIndex = Number(cell.column.id);\n const isDataCell = !isFirstCol && !Number.isNaN(colIndex);\n const isSelectedByCell =\n isDataCell && selectedCellKeys.has(getCellKey(rowIndex, colIndex));\n const isSingleCellSelected = isSelectedByCell && selectedCellKeys.size <= 1;\n const isRowHeaderSelected = isFirstCol && selectedRowIndexes.has(rowIndex);\n const shouldHighlightCellByDefault = isRowHeaderSelected || isSingleCellSelected;\n const baseBorderColor = \"#2f3338\";\n const selectedBorderColor = \"#337efe\";\n const borderTopColor = shouldHighlightCellByDefault\n ? selectedBorderColor\n : baseBorderColor;\n const borderBottomColor = shouldHighlightCellByDefault\n ? selectedBorderColor\n : baseBorderColor;\n const borderLeftColor = shouldHighlightCellByDefault\n ? selectedBorderColor\n : baseBorderColor;\n const borderRightColor = isFirstCol\n ? \"#50535e\"\n : shouldHighlightCellByDefault\n ? selectedBorderColor\n : baseBorderColor;\n return (\n <td\n key={cell.id}\n data-grid-row={isDataCell ? rowIndex : undefined}\n data-grid-col={isDataCell ? colIndex : undefined}\n onContextMenu={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (isFirstCol) {\n selectRow(rowIndex);\n openContextMenu(event, {\n kind: \"rowHeader\",\n rowIndex,\n colIndex: 0,\n });\n return;\n }\n if (isDataCell) {\n if (!selectedCellKeys.has(getCellKey(rowIndex, colIndex))) {\n selectSingleCell(rowIndex, colIndex);\n }\n openContextMenu(event, {\n kind: \"cell\",\n rowIndex,\n colIndex,\n });\n }\n }}\n onMouseDown={(event) => {\n if (event.button !== 0) return;\n if (isDataCell) {\n setSelectionPointer(event.clientX, event.clientY);\n setIsSelectingRange(true);\n setSelectionStart({ row: rowIndex, col: colIndex });\n selectSingleCell(rowIndex, colIndex);\n }\n }}\n onMouseEnter={(event) => {\n setSelectionPointer(event.clientX, event.clientY);\n if (isDataCell && isFillDragging && fillSourceRange) {\n setFillPreviewRange(\n calculateFillPreviewRange(fillSourceRange, rowIndex, colIndex),\n );\n return;\n }\n if (isDataCell && isSelectingRange && selectionStart) {\n selectRangeCells(\n selectionStart.row,\n selectionStart.col,\n rowIndex,\n colIndex,\n );\n }\n }}\n onClick={() => {\n if (skipSelectionClickRef.current) {\n skipSelectionClickRef.current = false;\n return;\n }\n if (isFirstCol) {\n selectRow(rowIndex);\n } else if (isDataCell) {\n selectSingleCell(rowIndex, colIndex);\n }\n }}\n onDoubleClick={() => {\n if (!isFirstCol) {\n setEditingCellKey(`${row.id}:${String(cell.column.id)}`);\n }\n }}\n style={{\n width: cell.column.getSize(),\n position: isStickyLeft ? \"sticky\" : \"relative\",\n left: isStickyLeft ? 0 : undefined,\n zIndex: isStickyLeft ? 20 : 1,\n border: \"1px solid #2f3338\",\n borderTopColor,\n borderBottomColor,\n borderLeftColor,\n borderRightColor,\n fontSize: 12,\n color: \"white\",\n textAlign: \"center\",\n backgroundColor: shouldHighlightCellByDefault\n ? isFirstCol\n ? \"#353843\"\n : \"#1c2338\"\n : isFirstCol\n ? \"#252830\"\n : \"#13171d\",\n userSelect: \"none\",\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n {isFirstCol && (\n <div\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n skipSelectionClickRef.current = true;\n setResizingRow({\n rowId: row.id,\n startY: event.clientY,\n startHeight: rowHeight,\n });\n }}\n className=\"biz-absolute biz-left-0 biz-bottom-0 biz-h-[6px] biz-w-full biz-cursor-row-resize hover:biz-bg-[#337efe] biz-z-20\"\n />\n )}\n </td>\n );\n })}\n </tr>\n );\n })}\n {paddingBottom > 0 && (\n <tr>\n <td\n colSpan={table.getAllLeafColumns().length}\n style={{ height: `${paddingBottom}px` }}\n />\n </tr>\n )}\n </tbody>\n </table>\n {selectionOverlayStyle && (\n <div\n style={{\n position: \"absolute\",\n pointerEvents: \"none\",\n left: selectionOverlayStyle.left,\n top: selectionOverlayStyle.top,\n width: selectionOverlayStyle.width,\n height: selectionOverlayStyle.height,\n backgroundColor: \"rgba(58, 137, 254, 0.18)\",\n border: \"1px solid #337efe\",\n zIndex: 15,\n }}\n />\n )}\n {fillPreviewOverlayStyle && (\n <div\n style={{\n position: \"absolute\",\n pointerEvents: \"none\",\n left: fillPreviewOverlayStyle.left,\n top: fillPreviewOverlayStyle.top,\n width: fillPreviewOverlayStyle.width,\n height: fillPreviewOverlayStyle.height,\n border: \"1px dashed #337efe\",\n zIndex: 16,\n }}\n />\n )}\n {selectionOverlayStyle && fillSourceCandidateRange && (\n <div\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setEditingCellKey(null);\n setIsFillDragging(true);\n setFillSourceRange(fillSourceCandidateRange);\n setFillPreviewRange(fillSourceCandidateRange);\n }}\n style={{\n position: \"absolute\",\n left: selectionOverlayStyle.left + selectionOverlayStyle.width - 4,\n top: selectionOverlayStyle.top + selectionOverlayStyle.height - 4,\n width: 8,\n height: 8,\n backgroundColor: \"#337efe\",\n border: \"1px solid #ffffff\",\n cursor: \"crosshair\",\n zIndex: 17,\n }}\n />\n )}\n <EasyvReactGridPlusContextMenu\n visible={contextMenuState.visible}\n x={contextMenuState.x}\n y={contextMenuState.y}\n isRowHeaderMenu={isRowHeaderMenu}\n isColHeaderMenu={isColHeaderMenu}\n insertRowCount={insertRowCount}\n insertColCount={insertColCount}\n setInsertRowCount={setInsertRowCount}\n setInsertColCount={setInsertColCount}\n runMenuAction={runMenuAction}\n />\n </div>\n );\n};\n"],"names":["jsx","_a","_b","_c","jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"easyv-react-grid.module.less.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const calculateFillPreviewRange = (source, hoverRow, hoverCol) => {
|
|
2
|
+
const leftDistance = hoverCol < source.minCol ? source.minCol - hoverCol : 0;
|
|
3
|
+
const rightDistance = hoverCol > source.maxCol ? hoverCol - source.maxCol : 0;
|
|
4
|
+
const upDistance = hoverRow < source.minRow ? source.minRow - hoverRow : 0;
|
|
5
|
+
const downDistance = hoverRow > source.maxRow ? hoverRow - source.maxRow : 0;
|
|
6
|
+
const horizontalDistance = Math.max(leftDistance, rightDistance);
|
|
7
|
+
const verticalDistance = Math.max(upDistance, downDistance);
|
|
8
|
+
if (horizontalDistance >= verticalDistance) {
|
|
9
|
+
if (hoverCol < source.minCol) {
|
|
10
|
+
return {
|
|
11
|
+
minRow: source.minRow,
|
|
12
|
+
maxRow: source.maxRow,
|
|
13
|
+
minCol: hoverCol,
|
|
14
|
+
maxCol: source.maxCol
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (hoverCol > source.maxCol) {
|
|
18
|
+
return {
|
|
19
|
+
minRow: source.minRow,
|
|
20
|
+
maxRow: source.maxRow,
|
|
21
|
+
minCol: source.minCol,
|
|
22
|
+
maxCol: hoverCol
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (hoverRow < source.minRow) {
|
|
27
|
+
return {
|
|
28
|
+
minRow: hoverRow,
|
|
29
|
+
maxRow: source.maxRow,
|
|
30
|
+
minCol: source.minCol,
|
|
31
|
+
maxCol: source.maxCol
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (hoverRow > source.maxRow) {
|
|
35
|
+
return {
|
|
36
|
+
minRow: source.minRow,
|
|
37
|
+
maxRow: hoverRow,
|
|
38
|
+
minCol: source.minCol,
|
|
39
|
+
maxCol: source.maxCol
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return source;
|
|
43
|
+
};
|
|
44
|
+
const parseClipboardText = (text) => text.replace(/\r/g, "").split("\n").filter((line) => line.length > 0).map((line) => line.split(" "));
|
|
45
|
+
const getContextMenuItems = (isRowHeaderMenu, isColHeaderMenu) => {
|
|
46
|
+
return [
|
|
47
|
+
{ key: "copy", label: "复制", visible: true },
|
|
48
|
+
{ key: "paste", label: "粘贴", visible: true },
|
|
49
|
+
{ key: "cut", label: "剪切", visible: true },
|
|
50
|
+
{
|
|
51
|
+
key: "insertRowAbove",
|
|
52
|
+
label: "向上插入",
|
|
53
|
+
visible: !isColHeaderMenu,
|
|
54
|
+
withInput: "row"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
key: "insertRowBelow",
|
|
58
|
+
label: "向下插入",
|
|
59
|
+
visible: !isColHeaderMenu,
|
|
60
|
+
withInput: "row"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
key: "insertColLeft",
|
|
64
|
+
label: "向左插入",
|
|
65
|
+
visible: !isRowHeaderMenu,
|
|
66
|
+
withInput: "col"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: "insertColRight",
|
|
70
|
+
label: "向右插入",
|
|
71
|
+
visible: !isRowHeaderMenu,
|
|
72
|
+
withInput: "col"
|
|
73
|
+
},
|
|
74
|
+
{ key: "deleteRows", label: "删除行", visible: true },
|
|
75
|
+
{ key: "deleteCols", label: "删除列", visible: true }
|
|
76
|
+
];
|
|
77
|
+
};
|
|
78
|
+
const getColumnLabel = (index) => {
|
|
79
|
+
let label = "";
|
|
80
|
+
let i = index;
|
|
81
|
+
while (i >= 0) {
|
|
82
|
+
label = String.fromCharCode(65 + i % 26) + label;
|
|
83
|
+
i = Math.floor(i / 26) - 1;
|
|
84
|
+
}
|
|
85
|
+
return label;
|
|
86
|
+
};
|
|
87
|
+
export {
|
|
88
|
+
calculateFillPreviewRange,
|
|
89
|
+
getColumnLabel,
|
|
90
|
+
getContextMenuItems,
|
|
91
|
+
parseClipboardText
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=utils.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.es.js","sources":["../../../../src/components/easyv-reactgrid-plus/utils.ts"],"sourcesContent":["import { CellRange, ContextMenuItem } from \"./easyv-react-grid-plus.types\";\n\nexport const calculateFillPreviewRange = (\n source: CellRange,\n hoverRow: number,\n hoverCol: number,\n): CellRange => {\n const leftDistance = hoverCol < source.minCol ? source.minCol - hoverCol : 0;\n const rightDistance = hoverCol > source.maxCol ? hoverCol - source.maxCol : 0;\n const upDistance = hoverRow < source.minRow ? source.minRow - hoverRow : 0;\n const downDistance = hoverRow > source.maxRow ? hoverRow - source.maxRow : 0;\n const horizontalDistance = Math.max(leftDistance, rightDistance);\n const verticalDistance = Math.max(upDistance, downDistance);\n if (horizontalDistance >= verticalDistance) {\n if (hoverCol < source.minCol) {\n return {\n minRow: source.minRow,\n maxRow: source.maxRow,\n minCol: hoverCol,\n maxCol: source.maxCol,\n };\n }\n if (hoverCol > source.maxCol) {\n return {\n minRow: source.minRow,\n maxRow: source.maxRow,\n minCol: source.minCol,\n maxCol: hoverCol,\n };\n }\n }\n if (hoverRow < source.minRow) {\n return {\n minRow: hoverRow,\n maxRow: source.maxRow,\n minCol: source.minCol,\n maxCol: source.maxCol,\n };\n }\n if (hoverRow > source.maxRow) {\n return {\n minRow: source.minRow,\n maxRow: hoverRow,\n minCol: source.minCol,\n maxCol: source.maxCol,\n };\n }\n return source;\n};\n\nexport const parseClipboardText = (text: string): string[][] =>\n text\n .replace(/\\r/g, \"\")\n .split(\"\\n\")\n .filter((line) => line.length > 0)\n .map((line) => line.split(\"\\t\"));\n\nexport const getContextMenuItems = (\n isRowHeaderMenu: boolean,\n isColHeaderMenu: boolean,\n): ContextMenuItem[] => {\n return [\n { key: \"copy\", label: \"复制\", visible: true },\n { key: \"paste\", label: \"粘贴\", visible: true },\n { key: \"cut\", label: \"剪切\", visible: true },\n {\n key: \"insertRowAbove\",\n label: \"向上插入\",\n visible: !isColHeaderMenu,\n withInput: \"row\",\n },\n {\n key: \"insertRowBelow\",\n label: \"向下插入\",\n visible: !isColHeaderMenu,\n withInput: \"row\",\n },\n {\n key: \"insertColLeft\",\n label: \"向左插入\",\n visible: !isRowHeaderMenu,\n withInput: \"col\",\n },\n {\n key: \"insertColRight\",\n label: \"向右插入\",\n visible: !isRowHeaderMenu,\n withInput: \"col\",\n },\n { key: \"deleteRows\", label: \"删除行\", visible: true },\n { key: \"deleteCols\", label: \"删除列\", visible: true },\n ];\n};\n// 辅助函数:将数字索引转换为 Excel 列头 (e.g. 0 -> A, 26 -> AA)\nexport const getColumnLabel = (index: number): string => {\n let label = \"\";\n let i = index;\n while (i >= 0) {\n label = String.fromCharCode(65 + (i % 26)) + label;\n i = Math.floor(i / 26) - 1;\n }\n return label;\n};\n"],"names":[],"mappings":"AAEO,MAAM,4BAA4B,CACvC,QACA,UACA,aACc;AACd,QAAM,eAAe,WAAW,OAAO,SAAS,OAAO,SAAS,WAAW;AAC3E,QAAM,gBAAgB,WAAW,OAAO,SAAS,WAAW,OAAO,SAAS;AAC5E,QAAM,aAAa,WAAW,OAAO,SAAS,OAAO,SAAS,WAAW;AACzE,QAAM,eAAe,WAAW,OAAO,SAAS,WAAW,OAAO,SAAS;AAC3E,QAAM,qBAAqB,KAAK,IAAI,cAAc,aAAa;AAC/D,QAAM,mBAAmB,KAAK,IAAI,YAAY,YAAY;AAC1D,MAAI,sBAAsB,kBAAkB;AACtC,QAAA,WAAW,OAAO,QAAQ;AACrB,aAAA;AAAA,QACL,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,QACf,QAAQ;AAAA,QACR,QAAQ,OAAO;AAAA,MACjB;AAAA,IAAA;AAEE,QAAA,WAAW,OAAO,QAAQ;AACrB,aAAA;AAAA,QACL,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,QACf,QAAQ;AAAA,MACV;AAAA,IAAA;AAAA,EACF;AAEE,MAAA,WAAW,OAAO,QAAQ;AACrB,WAAA;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,IACjB;AAAA,EAAA;AAEE,MAAA,WAAW,OAAO,QAAQ;AACrB,WAAA;AAAA,MACL,QAAQ,OAAO;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,IACjB;AAAA,EAAA;AAEK,SAAA;AACT;AAEa,MAAA,qBAAqB,CAAC,SACjC,KACG,QAAQ,OAAO,EAAE,EACjB,MAAM,IAAI,EACV,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,EAChC,IAAI,CAAC,SAAS,KAAK,MAAM,GAAI,CAAC;AAEtB,MAAA,sBAAsB,CACjC,iBACA,oBACsB;AACf,SAAA;AAAA,IACL,EAAE,KAAK,QAAQ,OAAO,MAAM,SAAS,KAAK;AAAA,IAC1C,EAAE,KAAK,SAAS,OAAO,MAAM,SAAS,KAAK;AAAA,IAC3C,EAAE,KAAK,OAAO,OAAO,MAAM,SAAS,KAAK;AAAA,IACzC;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS,CAAC;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA,EAAE,KAAK,cAAc,OAAO,OAAO,SAAS,KAAK;AAAA,IACjD,EAAE,KAAK,cAAc,OAAO,OAAO,SAAS,KAAK;AAAA,EACnD;AACF;AAEa,MAAA,iBAAiB,CAAC,UAA0B;AACvD,MAAI,QAAQ;AACZ,MAAI,IAAI;AACR,SAAO,KAAK,GAAG;AACb,YAAQ,OAAO,aAAa,KAAM,IAAI,EAAG,IAAI;AAC7C,QAAI,KAAK,MAAM,IAAI,EAAE,IAAI;AAAA,EAAA;AAEpB,SAAA;AACT;"}
|
package/dist/lib/easyv-biz-components/src/components/code-mirror-editor/code-mirror-editor.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ import { CustomCompletionConfig } from './types';
|
|
|
4
4
|
|
|
5
5
|
export interface CodeMirrorEditorProps extends ComponentProps<typeof CodeMirror> {
|
|
6
6
|
languageMode: "javascript" | "json" | "sql";
|
|
7
|
-
|
|
8
|
-
onChange
|
|
7
|
+
value?: string;
|
|
8
|
+
onChange?: (v: string) => void;
|
|
9
9
|
wrapperClassName?: string;
|
|
10
10
|
wrapperStyle?: React.CSSProperties;
|
|
11
11
|
environment?: "browser" | "node";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface EasyvReactGridPlusContextMenuProps {
|
|
2
|
+
visible: boolean;
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
isRowHeaderMenu: boolean;
|
|
6
|
+
isColHeaderMenu: boolean;
|
|
7
|
+
insertRowCount: number;
|
|
8
|
+
insertColCount: number;
|
|
9
|
+
setInsertRowCount: (value: number) => void;
|
|
10
|
+
setInsertColCount: (value: number) => void;
|
|
11
|
+
runMenuAction: (action: string) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare const EasyvReactGridPlusContextMenu: ({ visible, x, y, isRowHeaderMenu, isColHeaderMenu, insertRowCount, insertColCount, setInsertRowCount, setInsertColCount, runMenuAction, }: EasyvReactGridPlusContextMenuProps) => JSX.Element | null;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface EasyvReactGridPlusEditableCellProps {
|
|
2
|
+
value: any;
|
|
3
|
+
row: number;
|
|
4
|
+
column: number;
|
|
5
|
+
updateData: (row: number, col: number, value: any) => void;
|
|
6
|
+
isEditing: boolean;
|
|
7
|
+
onRequestEdit: () => void;
|
|
8
|
+
onFinishEdit: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const EasyvReactGridPlusEditableCell: ({ value: initialValue, row: rowIndex, column: colIndex, updateData, isEditing, onRequestEdit, onFinishEdit, }: EasyvReactGridPlusEditableCellProps) => JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
|
|
3
|
+
interface UseGridSelectionAutoScrollOptions {
|
|
4
|
+
parentRef: RefObject<HTMLDivElement>;
|
|
5
|
+
isSelectingRange: boolean;
|
|
6
|
+
selectionStart: {
|
|
7
|
+
row: number;
|
|
8
|
+
col: number;
|
|
9
|
+
} | null;
|
|
10
|
+
selectRangeCells: (startRow: number, startCol: number, endRow: number, endCol: number) => void;
|
|
11
|
+
stopSelectingRange: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare const useGridSelectionAutoScroll: ({ parentRef, isSelectingRange, selectionStart, selectRangeCells, stopSelectingRange, }: UseGridSelectionAutoScrollOptions) => {
|
|
14
|
+
setSelectionPointer: (x: number, y: number) => void;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface EasyvReactGridProps {
|
|
4
|
+
wrapClassName?: string;
|
|
5
|
+
wrapStyle?: React.CSSProperties;
|
|
6
|
+
data?: (string | number)[][];
|
|
7
|
+
onDataChange?: (data: (string | number)[][]) => void;
|
|
8
|
+
expandMinGrid?: boolean;
|
|
9
|
+
minRows?: number;
|
|
10
|
+
minCols?: number;
|
|
11
|
+
stickyTopRow?: boolean;
|
|
12
|
+
stickyLeftColumn?: boolean;
|
|
13
|
+
defaultRowHeight?: number;
|
|
14
|
+
}
|
|
15
|
+
/** 和 EasyvReactGrid 相比,它支持虚拟列表,可以加载十万行级的数据 */
|
|
16
|
+
export declare const EasyvReactGridPlus: (props: EasyvReactGridProps) => JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type CellRange = {
|
|
2
|
+
minRow: number;
|
|
3
|
+
maxRow: number;
|
|
4
|
+
minCol: number;
|
|
5
|
+
maxCol: number;
|
|
6
|
+
};
|
|
7
|
+
export type ContextTarget = {
|
|
8
|
+
kind: "cell" | "rowHeader" | "colHeader";
|
|
9
|
+
rowIndex: number;
|
|
10
|
+
colIndex: number;
|
|
11
|
+
};
|
|
12
|
+
export type ContextMenuInputType = "row" | "col";
|
|
13
|
+
export type ContextMenuItem = {
|
|
14
|
+
key: string;
|
|
15
|
+
label: string;
|
|
16
|
+
visible: boolean;
|
|
17
|
+
withInput?: ContextMenuInputType;
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EasyvReactGridPlus } from './easyv-react-grid-plus';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CellRange, ContextMenuItem } from './easyv-react-grid-plus.types';
|
|
2
|
+
|
|
3
|
+
export declare const calculateFillPreviewRange: (source: CellRange, hoverRow: number, hoverCol: number) => CellRange;
|
|
4
|
+
export declare const parseClipboardText: (text: string) => string[][];
|
|
5
|
+
export declare const getContextMenuItems: (isRowHeaderMenu: boolean, isColHeaderMenu: boolean) => ContextMenuItem[];
|
|
6
|
+
export declare const getColumnLabel: (index: number) => string;
|
|
@@ -44,6 +44,8 @@ export declare enum AgentSocketListenEvent {
|
|
|
44
44
|
EXCLUSIVE_MESSAGE_JOIN_ROOM = "exclusive-message-join-room",
|
|
45
45
|
EXCLUSIVE_MESSAGE_AI_AGENT_CHAT = "exclusive-message-ai-agent-chat",
|
|
46
46
|
EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT = "exclusive-message-ai-agent-component-chat",
|
|
47
|
+
/** 错误 */
|
|
48
|
+
ERROR = "error",
|
|
47
49
|
/** ai 智能体消息 */
|
|
48
50
|
AI_AGENT_MESSAGE = "broadcast-ai-agent-message",
|
|
49
51
|
/** 前端主动发送的广播消息 */
|
|
@@ -55,7 +57,7 @@ export declare enum AiAgentRoomType {
|
|
|
55
57
|
AI_AGENT = "ai_agent",
|
|
56
58
|
AI_AGENT_COMPONENT = "ai_agent_component"
|
|
57
59
|
}
|
|
58
|
-
export declare const AskWsListenEventList: readonly [AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_CHAT, AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT, AgentSocketListenEvent.AI_AGENT_TOOL_CALL, AgentSocketListenEvent.EXCEPTION];
|
|
60
|
+
export declare const AskWsListenEventList: readonly [AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_CHAT, AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT, AgentSocketListenEvent.AI_AGENT_TOOL_CALL, AgentSocketListenEvent.EXCEPTION, AgentSocketListenEvent.ERROR];
|
|
59
61
|
export declare const MsgWsListenEventList: AgentSocketListenEvent[];
|
|
60
62
|
/** 智能体在回答问题的状态 */
|
|
61
63
|
export declare enum AgentStatus {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EasyFetchRes } from './types';
|
|
2
|
+
|
|
3
|
+
interface EasyFetchOptions {
|
|
4
|
+
method?: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
5
|
+
headers?: Record<string, string>;
|
|
6
|
+
body?: any;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
query?: Record<string, any>;
|
|
10
|
+
getAbortFn?: (abort: () => void) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function easyFetch<T = any>(url: string, options?: EasyFetchOptions): Promise<EasyFetchRes<T>>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './easy-fetch';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -74,8 +74,10 @@ export declare function getNewConfigWithNewDimension(config: (EasyvGUIConfigItem
|
|
|
74
74
|
tip?: string;
|
|
75
75
|
rule?: [string, string, EasyvGUIValue][];
|
|
76
76
|
config?: Record<string, unknown>;
|
|
77
|
+
labelLayout?: number;
|
|
77
78
|
})[] | (EasyvGUIConfigItemOld | {
|
|
78
79
|
_value: any;
|
|
80
|
+
_lock?: boolean;
|
|
79
81
|
_name: string;
|
|
80
82
|
_displayName?: string;
|
|
81
83
|
_type?: string;
|
|
@@ -19,6 +19,7 @@ export declare function getUpdatedGUIConfigOld(params: {
|
|
|
19
19
|
oldConfig?: EasyvGUIConfigListOld;
|
|
20
20
|
newConfig?: EasyvGUIConfigListOld;
|
|
21
21
|
}): EasyvGUIConfigListOld;
|
|
22
|
+
export declare function isGUIItemValueInConfig(item: EasyvGUIConfigItem | EasyvGUIConfigItemOld): boolean;
|
|
22
23
|
/** 传入一个 EasyvGUIConfigList ,会以 name 为 path 向下取值, 同一层级返回一个对象。
|
|
23
24
|
* - 如果传入了 defaultConfig 会把 defaultConfig 变成一个默认值,
|
|
24
25
|
* - 也就是优先取 configList 上的值,没有的话就用 defaultConfig 上的值。
|
|
@@ -41,12 +42,14 @@ export declare function getNewEasyvGUIConfigFromValue(value: Record<string, any>
|
|
|
41
42
|
tip?: string;
|
|
42
43
|
rule?: [string, string, EasyvGUIValue][];
|
|
43
44
|
config?: Record<string, unknown>;
|
|
45
|
+
labelLayout?: number;
|
|
44
46
|
})[];
|
|
45
47
|
/** 把 value 的值放到 configList 中
|
|
46
48
|
* 为什么要这样做,因为 gui 组件的渲染是用 config 渲染的。
|
|
47
49
|
*/
|
|
48
50
|
export declare function getNewEasyvGUIConfigFromValueOld(value: Record<string, any> | undefined, configList: EasyvGUIConfigListOld): (EasyvGUIConfigItemOld | {
|
|
49
51
|
_value: any;
|
|
52
|
+
_lock?: boolean;
|
|
50
53
|
_name: string;
|
|
51
54
|
_displayName?: string;
|
|
52
55
|
_type?: string;
|
|
@@ -21,8 +21,11 @@ export interface EasyvGUIConfigItem {
|
|
|
21
21
|
*/
|
|
22
22
|
rule?: [string, string, EasyvGUIValue][];
|
|
23
23
|
config?: Record<string, unknown>;
|
|
24
|
+
/** @deprecated 已经弃用,配置里还有,代码里没看到 */
|
|
25
|
+
labelLayout?: number;
|
|
24
26
|
}
|
|
25
27
|
export interface EasyvGUIConfigItemOld {
|
|
28
|
+
_lock?: boolean;
|
|
26
29
|
/** 配置对象的 id,同一层不能重复,作为在运行时获取 value 的索引 */
|
|
27
30
|
_name: string;
|
|
28
31
|
/** 配置标题 */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './utils';
|
package/dist/lib/hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.es.js
CHANGED
|
@@ -3,7 +3,7 @@ import "../../packages/easyv-arco/dist/lib/index.es.es.js";
|
|
|
3
3
|
import useUnmount from "../../node_modules/.pnpm/ahooks@3.8.5_react@18.2.0/node_modules/ahooks/es/useUnmount/index.es.js";
|
|
4
4
|
import { VoiceRecordManager } from "../../utils/voice-record-manager/voice-record-manager.es.js";
|
|
5
5
|
import { getIsPrivateDeployEnv } from "../../utils/common/common.es.js";
|
|
6
|
-
import { M as
|
|
6
|
+
import { M as De } from "../../packages/easyv-arco/dist/lib/chunks/index-DttpqRHH.es.es.js";
|
|
7
7
|
const useTencentSentenceRecognition = (params) => {
|
|
8
8
|
const { onAsrResult, getSentenceRecognizeRes } = params;
|
|
9
9
|
const [voiceRecordManager] = useState(new VoiceRecordManager());
|
|
@@ -14,7 +14,7 @@ const useTencentSentenceRecognition = (params) => {
|
|
|
14
14
|
await voiceRecordManager.start().then(() => {
|
|
15
15
|
setRecognizeStatus("listening");
|
|
16
16
|
}).catch(() => {
|
|
17
|
-
|
|
17
|
+
De.error("录音启动失败");
|
|
18
18
|
setRecognizeStatus("none");
|
|
19
19
|
});
|
|
20
20
|
};
|
package/dist/lib/index.es.js
CHANGED
|
@@ -12,6 +12,7 @@ import { AiModelSelectPanel } from "./components/ai-model-select/ai-model-select
|
|
|
12
12
|
import { MobileVoiceInput } from "./components/ai-components/mobile-voice-input/mobile-voice-input.es.js";
|
|
13
13
|
import { CircleLoading } from "./components/circle-loading/circle-loading.es.js";
|
|
14
14
|
import { EasyvReactGrid } from "./components/easyv-reactgrid/easyv-react-grid.es.js";
|
|
15
|
+
import { EasyvReactGridPlus } from "./components/easyv-reactgrid-plus/easyv-react-grid-plus.es.js";
|
|
15
16
|
import { useDivAutoScroll } from "./hooks/use-div-auto-scroll.es.js";
|
|
16
17
|
import { useInitialized } from "./hooks/use-initialized.es.js";
|
|
17
18
|
import { useWatchValue } from "./hooks/use-watch-value/use-watch-value.es.js";
|
|
@@ -37,10 +38,12 @@ import { blobToBase64, checkMicrophonePermission, isWsClosed, requestMicrophoneP
|
|
|
37
38
|
import { fetchKnowledge } from "./utils/fetch-knowledge/fetch-knowledge.es.js";
|
|
38
39
|
import { showModal, showModalContainerClass } from "./utils/show-modal/show-modal.es.js";
|
|
39
40
|
import { ChartHorizontalPositionEnum, ChartVerticalPositionEnum, EasyvGUIType, GUIHasLockValueInConfig, GUITypeWhichHasConfigListValue, PositionConstraintsGUIConfig, PositionConstraintsGUIConfigOld, defaultPositionConstraintsValue } from "./utils/easyv-gui-helper/constants.es.js";
|
|
40
|
-
import { getBackgroundBlurStyleFromGuiConfig, getEasyvGUIConfigValue, getEasyvGUIConfigValueCompatibleOld, getEasyvGUIConfigValueOld, getNewEasyvGUIConfigFromValue, getNewEasyvGUIConfigFromValueOld, getRadiusStyleFromGuiString, getShadowFromGuiConfig, getShadowStyleFromGuiConfig, getUpdatedGUIConfig, getUpdatedGUIConfigOld, judgeValueIsGUIConfigList, updateConfigWithNewValue, updateGUIConfigList } from "./utils/easyv-gui-helper/easyv-gui-helper.es.js";
|
|
41
|
+
import { getBackgroundBlurStyleFromGuiConfig, getEasyvGUIConfigValue, getEasyvGUIConfigValueCompatibleOld, getEasyvGUIConfigValueOld, getNewEasyvGUIConfigFromValue, getNewEasyvGUIConfigFromValueOld, getRadiusStyleFromGuiString, getShadowFromGuiConfig, getShadowStyleFromGuiConfig, getUpdatedGUIConfig, getUpdatedGUIConfigOld, isGUIItemValueInConfig, judgeValueIsGUIConfigList, updateConfigWithNewValue, updateGUIConfigList } from "./utils/easyv-gui-helper/easyv-gui-helper.es.js";
|
|
41
42
|
import { calculateNewDimension, getComponentDimensionWithConstraints, getConstraintsFromConfig, getExtraConstraintInfo, getExtraConstraintInfoFromDimension, getNewConfigWithNewConstraints, getNewConfigWithNewDimension, insertPositionConstraintsGUIConfig } from "./utils/easyv-gui-helper/component-dimension.es.js";
|
|
42
43
|
import { isOldConfig } from "./utils/easyv-gui-helper/common.es.js";
|
|
43
44
|
import { VoiceRecordManager } from "./utils/voice-record-manager/voice-record-manager.es.js";
|
|
45
|
+
import { getEasyTwinResourcesFromSceneInfo } from "./utils/twin/utils.es.js";
|
|
46
|
+
import { easyFetch } from "./utils/easy-fetch/easy-fetch.es.js";
|
|
44
47
|
import { HotWordTypeEnum } from "./types/common.es.js";
|
|
45
48
|
export {
|
|
46
49
|
AgentDataSource,
|
|
@@ -64,6 +67,7 @@ export {
|
|
|
64
67
|
EasyvGUIType,
|
|
65
68
|
EasyvMonacoEditor,
|
|
66
69
|
EasyvReactGrid,
|
|
70
|
+
EasyvReactGridPlus,
|
|
67
71
|
EchartsRender,
|
|
68
72
|
ErrorBoundary,
|
|
69
73
|
FunASRManager,
|
|
@@ -96,6 +100,7 @@ export {
|
|
|
96
100
|
deCode,
|
|
97
101
|
defaultPositionConstraintsValue,
|
|
98
102
|
defaultSampleRate,
|
|
103
|
+
easyFetch,
|
|
99
104
|
enCode,
|
|
100
105
|
fetchKnowledge,
|
|
101
106
|
frontEndDirectShowKnowledgeResList,
|
|
@@ -111,6 +116,7 @@ export {
|
|
|
111
116
|
getBackgroundBlurStyleFromGuiConfig,
|
|
112
117
|
getComponentDimensionWithConstraints,
|
|
113
118
|
getConstraintsFromConfig,
|
|
119
|
+
getEasyTwinResourcesFromSceneInfo,
|
|
114
120
|
getEasyvGUIConfigValue,
|
|
115
121
|
getEasyvGUIConfigValueCompatibleOld,
|
|
116
122
|
getEasyvGUIConfigValueOld,
|
|
@@ -130,6 +136,7 @@ export {
|
|
|
130
136
|
getWebSocketConnectForFunASR,
|
|
131
137
|
insertPositionConstraintsGUIConfig,
|
|
132
138
|
isDevLocal,
|
|
139
|
+
isGUIItemValueInConfig,
|
|
133
140
|
isOldConfig,
|
|
134
141
|
isWsClosed,
|
|
135
142
|
judgeValueIsGUIConfigList,
|
package/dist/lib/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|