@superad/ui 0.1.1
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/LICENSE +21 -0
- package/README.md +42 -0
- package/es/Button/Button.d.mts +7 -0
- package/es/Button/Button.mjs +29 -0
- package/es/Button/Button.mjs.map +1 -0
- package/es/Button/index.d.mts +3 -0
- package/es/Button/index.d.ts +1 -0
- package/es/Button/index.js +1 -0
- package/es/Button/index.mjs +2 -0
- package/es/Button/style.mjs +33 -0
- package/es/Button/style.mjs.map +1 -0
- package/es/Button/type.d.mts +21 -0
- package/es/ConfigProvider/index.d.mts +9 -0
- package/es/ConfigProvider/index.d.ts +1 -0
- package/es/ConfigProvider/index.js +1 -0
- package/es/ConfigProvider/index.mjs +82 -0
- package/es/ConfigProvider/index.mjs.map +1 -0
- package/es/ConfigProvider/type.d.mts +24 -0
- package/es/DraggablePanel/DraggablePanel.d.mts +6 -0
- package/es/DraggablePanel/DraggablePanel.mjs +104 -0
- package/es/DraggablePanel/DraggablePanel.mjs.map +1 -0
- package/es/DraggablePanel/index.d.mts +3 -0
- package/es/DraggablePanel/index.d.ts +1 -0
- package/es/DraggablePanel/index.js +1 -0
- package/es/DraggablePanel/index.mjs +3 -0
- package/es/DraggablePanel/style.mjs +86 -0
- package/es/DraggablePanel/style.mjs.map +1 -0
- package/es/DraggablePanel/type.d.mts +27 -0
- package/es/Flex/Center.d.mts +7 -0
- package/es/Flex/Center.mjs +14 -0
- package/es/Flex/Center.mjs.map +1 -0
- package/es/Flex/FlexBasic.d.mts +6 -0
- package/es/Flex/FlexBasic.mjs +46 -0
- package/es/Flex/FlexBasic.mjs.map +1 -0
- package/es/Flex/Flexbox.d.mts +2 -0
- package/es/Flex/index.d.mts +5 -0
- package/es/Flex/index.d.ts +1 -0
- package/es/Flex/index.js +1 -0
- package/es/Flex/index.mjs +3 -0
- package/es/Flex/type.d.mts +35 -0
- package/es/Flex/utils.mjs +24 -0
- package/es/Flex/utils.mjs.map +1 -0
- package/es/FontLoader/index.d.mts +9 -0
- package/es/FontLoader/index.d.ts +1 -0
- package/es/FontLoader/index.js +1 -0
- package/es/FontLoader/index.mjs +23 -0
- package/es/FontLoader/index.mjs.map +1 -0
- package/es/GlobalFocusRing/index.d.mts +6 -0
- package/es/GlobalFocusRing/index.d.ts +1 -0
- package/es/GlobalFocusRing/index.js +1 -0
- package/es/GlobalFocusRing/index.mjs +204 -0
- package/es/GlobalFocusRing/index.mjs.map +1 -0
- package/es/GlobalFocusRing/style.mjs +35 -0
- package/es/GlobalFocusRing/style.mjs.map +1 -0
- package/es/Provider.d.mts +5 -0
- package/es/Table/canvas/canvasPalette.mjs +11 -0
- package/es/Table/canvas/canvasPalette.mjs.map +1 -0
- package/es/Table/canvas/chipPainters.mjs +408 -0
- package/es/Table/canvas/chipPainters.mjs.map +1 -0
- package/es/Table/canvas/controlPainters.mjs +193 -0
- package/es/Table/canvas/controlPainters.mjs.map +1 -0
- package/es/Table/canvas/groupTitle.mjs +181 -0
- package/es/Table/canvas/groupTitle.mjs.map +1 -0
- package/es/Table/canvas/paintUtils.mjs +70 -0
- package/es/Table/canvas/paintUtils.mjs.map +1 -0
- package/es/Table/canvas/rowSeries.mjs +130 -0
- package/es/Table/canvas/rowSeries.mjs.map +1 -0
- package/es/Table/canvas/textPainters.mjs +97 -0
- package/es/Table/canvas/textPainters.mjs.map +1 -0
- package/es/Table/canvas/theme.d.mts +14 -0
- package/es/Table/canvas/theme.mjs +276 -0
- package/es/Table/canvas/theme.mjs.map +1 -0
- package/es/Table/core/cellValue.d.mts +1 -0
- package/es/Table/core/cellValue.mjs +240 -0
- package/es/Table/core/cellValue.mjs.map +1 -0
- package/es/Table/core/rowSelection.mjs +138 -0
- package/es/Table/core/rowSelection.mjs.map +1 -0
- package/es/Table/core/size.mjs +60 -0
- package/es/Table/core/size.mjs.map +1 -0
- package/es/Table/core/tableI18n.d.mts +11 -0
- package/es/Table/core/tableI18n.mjs +123 -0
- package/es/Table/core/tableI18n.mjs.map +1 -0
- package/es/Table/core/tagTone.mjs +245 -0
- package/es/Table/core/tagTone.mjs.map +1 -0
- package/es/Table/core/zIndex.mjs +7 -0
- package/es/Table/core/zIndex.mjs.map +1 -0
- package/es/Table/index.d.mts +6 -0
- package/es/Table/index.d.ts +1 -0
- package/es/Table/index.js +1 -0
- package/es/Table/index.mjs +6 -0
- package/es/Table/react/Table.d.mts +9 -0
- package/es/Table/react/Table.mjs +407 -0
- package/es/Table/react/Table.mjs.map +1 -0
- package/es/Table/react/TableColumnSettings.mjs +65 -0
- package/es/Table/react/TableColumnSettings.mjs.map +1 -0
- package/es/Table/react/a11y.mjs +72 -0
- package/es/Table/react/a11y.mjs.map +1 -0
- package/es/Table/react/editors/base.mjs +427 -0
- package/es/Table/react/editors/base.mjs.map +1 -0
- package/es/Table/react/editors/inline.mjs +225 -0
- package/es/Table/react/editors/inline.mjs.map +1 -0
- package/es/Table/react/editors/picker.mjs +368 -0
- package/es/Table/react/editors/picker.mjs.map +1 -0
- package/es/Table/react/overlayChips.mjs +50 -0
- package/es/Table/react/overlayChips.mjs.map +1 -0
- package/es/Table/react/sameRenderInputs.mjs +50 -0
- package/es/Table/react/sameRenderInputs.mjs.map +1 -0
- package/es/Table/react/style.mjs +650 -0
- package/es/Table/react/style.mjs.map +1 -0
- package/es/Table/react/useTableCellEvents.mjs +32 -0
- package/es/Table/react/useTableCellEvents.mjs.map +1 -0
- package/es/Table/react/useTableColumnSettings.mjs +107 -0
- package/es/Table/react/useTableColumnSettings.mjs.map +1 -0
- package/es/Table/react/useTableEditorSync.mjs +41 -0
- package/es/Table/react/useTableEditorSync.mjs.map +1 -0
- package/es/Table/react/useTableHoverHint.mjs +62 -0
- package/es/Table/react/useTableHoverHint.mjs.map +1 -0
- package/es/Table/react/useTableKeyboard.mjs +41 -0
- package/es/Table/react/useTableKeyboard.mjs.map +1 -0
- package/es/Table/react/useTableRenderState.mjs +194 -0
- package/es/Table/react/useTableRenderState.mjs.map +1 -0
- package/es/Table/react/useTableScroll.mjs +33 -0
- package/es/Table/react/useTableScroll.mjs.map +1 -0
- package/es/Table/react/useTableSelectionInfo.mjs +48 -0
- package/es/Table/react/useTableSelectionInfo.mjs.map +1 -0
- package/es/Table/react/useTableVTableEvents.mjs +132 -0
- package/es/Table/react/useTableVTableEvents.mjs.map +1 -0
- package/es/Table/type.d.mts +279 -0
- package/es/Table/type.mjs +34 -0
- package/es/Table/type.mjs.map +1 -0
- package/es/Table/vtable/columns.d.mts +17 -0
- package/es/Table/vtable/columns.mjs +381 -0
- package/es/Table/vtable/columns.mjs.map +1 -0
- package/es/Table/vtable/frozenShadow.mjs +27 -0
- package/es/Table/vtable/frozenShadow.mjs.map +1 -0
- package/es/Table/vtable/interaction.mjs +175 -0
- package/es/Table/vtable/interaction.mjs.map +1 -0
- package/es/Table/vtable/option.d.mts +39 -0
- package/es/Table/vtable/option.mjs +232 -0
- package/es/Table/vtable/option.mjs.map +1 -0
- package/es/Table/vtable/seriesSelection.mjs +374 -0
- package/es/Table/vtable/seriesSelection.mjs.map +1 -0
- package/es/Table/vtable/vtableAdapter.mjs +96 -0
- package/es/Table/vtable/vtableAdapter.mjs.map +1 -0
- package/es/ThemeProvider/AppElementContext.d.mts +5 -0
- package/es/ThemeProvider/AppElementContext.mjs +10 -0
- package/es/ThemeProvider/AppElementContext.mjs.map +1 -0
- package/es/ThemeProvider/ConfigProvider.mjs +29 -0
- package/es/ThemeProvider/ConfigProvider.mjs.map +1 -0
- package/es/ThemeProvider/GlobalStyle/antdOverride.mjs +73 -0
- package/es/ThemeProvider/GlobalStyle/antdOverride.mjs.map +1 -0
- package/es/ThemeProvider/GlobalStyle/essential.mjs +50 -0
- package/es/ThemeProvider/GlobalStyle/essential.mjs.map +1 -0
- package/es/ThemeProvider/GlobalStyle/global.mjs +90 -0
- package/es/ThemeProvider/GlobalStyle/global.mjs.map +1 -0
- package/es/ThemeProvider/GlobalStyle/index.mjs +14 -0
- package/es/ThemeProvider/GlobalStyle/index.mjs.map +1 -0
- package/es/ThemeProvider/Meta.d.mts +7 -0
- package/es/ThemeProvider/Meta.mjs +48 -0
- package/es/ThemeProvider/Meta.mjs.map +1 -0
- package/es/ThemeProvider/ThemeProvider.d.mts +6 -0
- package/es/ThemeProvider/ThemeProvider.mjs +89 -0
- package/es/ThemeProvider/ThemeProvider.mjs.map +1 -0
- package/es/ThemeProvider/constants.d.mts +5 -0
- package/es/ThemeProvider/constants.mjs +6 -0
- package/es/ThemeProvider/constants.mjs.map +1 -0
- package/es/ThemeProvider/index.d.mts +6 -0
- package/es/ThemeProvider/index.d.ts +1 -0
- package/es/ThemeProvider/index.js +1 -0
- package/es/ThemeProvider/index.mjs +5 -0
- package/es/ThemeProvider/type.d.mts +48 -0
- package/es/_virtual/_rolldown/runtime.mjs +13 -0
- package/es/color/colors/blue.d.mts +6 -0
- package/es/color/colors/blue.mjs +67 -0
- package/es/color/colors/blue.mjs.map +1 -0
- package/es/color/colors/cyan.d.mts +6 -0
- package/es/color/colors/cyan.mjs +67 -0
- package/es/color/colors/cyan.mjs.map +1 -0
- package/es/color/colors/geekblue.d.mts +6 -0
- package/es/color/colors/geekblue.mjs +67 -0
- package/es/color/colors/geekblue.mjs.map +1 -0
- package/es/color/colors/gold.d.mts +6 -0
- package/es/color/colors/gold.mjs +67 -0
- package/es/color/colors/gold.mjs.map +1 -0
- package/es/color/colors/gray.d.mts +6 -0
- package/es/color/colors/gray.mjs +67 -0
- package/es/color/colors/gray.mjs.map +1 -0
- package/es/color/colors/green.d.mts +6 -0
- package/es/color/colors/green.mjs +67 -0
- package/es/color/colors/green.mjs.map +1 -0
- package/es/color/colors/index.d.mts +22 -0
- package/es/color/colors/index.mjs +35 -0
- package/es/color/colors/index.mjs.map +1 -0
- package/es/color/colors/lime.d.mts +6 -0
- package/es/color/colors/lime.mjs +67 -0
- package/es/color/colors/lime.mjs.map +1 -0
- package/es/color/colors/magenta.d.mts +6 -0
- package/es/color/colors/magenta.mjs +67 -0
- package/es/color/colors/magenta.mjs.map +1 -0
- package/es/color/colors/orange.d.mts +6 -0
- package/es/color/colors/orange.mjs +67 -0
- package/es/color/colors/orange.mjs.map +1 -0
- package/es/color/colors/primary.d.mts +6 -0
- package/es/color/colors/primary.mjs +67 -0
- package/es/color/colors/primary.mjs.map +1 -0
- package/es/color/colors/purple.d.mts +6 -0
- package/es/color/colors/purple.mjs +67 -0
- package/es/color/colors/purple.mjs.map +1 -0
- package/es/color/colors/red.d.mts +6 -0
- package/es/color/colors/red.mjs +67 -0
- package/es/color/colors/red.mjs.map +1 -0
- package/es/color/colors/volcano.d.mts +6 -0
- package/es/color/colors/volcano.mjs +67 -0
- package/es/color/colors/volcano.mjs.map +1 -0
- package/es/color/colors/yellow.d.mts +6 -0
- package/es/color/colors/yellow.mjs +67 -0
- package/es/color/colors/yellow.mjs.map +1 -0
- package/es/color/index.d.mts +23 -0
- package/es/color/index.d.ts +1 -0
- package/es/color/index.js +1 -0
- package/es/color/index.mjs +22 -0
- package/es/color/neutrals/index.d.mts +13 -0
- package/es/color/neutrals/index.mjs +17 -0
- package/es/color/neutrals/index.mjs.map +1 -0
- package/es/color/neutrals/mauve.d.mts +6 -0
- package/es/color/neutrals/mauve.mjs +67 -0
- package/es/color/neutrals/mauve.mjs.map +1 -0
- package/es/color/neutrals/olive.d.mts +6 -0
- package/es/color/neutrals/olive.mjs +67 -0
- package/es/color/neutrals/olive.mjs.map +1 -0
- package/es/color/neutrals/sage.d.mts +6 -0
- package/es/color/neutrals/sage.mjs +67 -0
- package/es/color/neutrals/sage.mjs.map +1 -0
- package/es/color/neutrals/sand.d.mts +6 -0
- package/es/color/neutrals/sand.mjs +67 -0
- package/es/color/neutrals/sand.mjs.map +1 -0
- package/es/color/neutrals/slate.d.mts +6 -0
- package/es/color/neutrals/slate.mjs +67 -0
- package/es/color/neutrals/slate.mjs.map +1 -0
- package/es/color/types.d.mts +16 -0
- package/es/eslint/index.d.mts +26 -0
- package/es/eslint/index.d.ts +1 -0
- package/es/eslint/index.js +1 -0
- package/es/eslint/index.mjs +11 -0
- package/es/eslint/index.mjs.map +1 -0
- package/es/hooks/useIsClient.d.mts +8 -0
- package/es/hooks/useIsClient.mjs +13 -0
- package/es/hooks/useIsClient.mjs.map +1 -0
- package/es/i18n/context.d.mts +7 -0
- package/es/i18n/context.mjs +16 -0
- package/es/i18n/context.mjs.map +1 -0
- package/es/i18n/index.d.mts +6 -0
- package/es/i18n/index.d.ts +1 -0
- package/es/i18n/index.js +1 -0
- package/es/i18n/index.mjs +5 -0
- package/es/i18n/resources/en/common.d.mts +35 -0
- package/es/i18n/resources/en/common.mjs +36 -0
- package/es/i18n/resources/en/common.mjs.map +1 -0
- package/es/i18n/resources/en/index.d.mts +7 -0
- package/es/i18n/resources/en/index.mjs +8 -0
- package/es/i18n/resources/en/index.mjs.map +1 -0
- package/es/i18n/resources/zhCn/common.d.mts +35 -0
- package/es/i18n/resources/zhCn/common.mjs +36 -0
- package/es/i18n/resources/zhCn/common.mjs.map +1 -0
- package/es/i18n/resources/zhCn/index.d.mts +7 -0
- package/es/i18n/resources/zhCn/index.mjs +8 -0
- package/es/i18n/resources/zhCn/index.mjs.map +1 -0
- package/es/i18n/types.d.mts +22 -0
- package/es/i18n/useTranslation.d.mts +12 -0
- package/es/i18n/useTranslation.mjs +22 -0
- package/es/i18n/useTranslation.mjs.map +1 -0
- package/es/index.d.mts +43 -0
- package/es/index.mjs +26 -0
- package/es/storybook/StoryBook/StoryBook.d.mts +7 -0
- package/es/storybook/StoryBook/StoryBook.mjs +52 -0
- package/es/storybook/StoryBook/StoryBook.mjs.map +1 -0
- package/es/storybook/StoryBook/index.d.mts +3 -0
- package/es/storybook/StoryBook/style.mjs +97 -0
- package/es/storybook/StoryBook/style.mjs.map +1 -0
- package/es/storybook/StoryBook/type.d.mts +13 -0
- package/es/storybook/index.d.mts +4 -0
- package/es/storybook/index.d.ts +1 -0
- package/es/storybook/index.js +1 -0
- package/es/storybook/index.mjs +2 -0
- package/es/styles/classNames.d.mts +11 -0
- package/es/styles/classNames.mjs +12 -0
- package/es/styles/classNames.mjs.map +1 -0
- package/es/styles/customTheme.d.mts +36 -0
- package/es/styles/customTheme.mjs +71 -0
- package/es/styles/customTheme.mjs.map +1 -0
- package/es/styles/index.d.mts +6 -0
- package/es/styles/index.d.ts +1 -0
- package/es/styles/index.js +1 -0
- package/es/styles/index.mjs +6 -0
- package/es/styles/theme/algorithms/darkAlgorithm.mjs +18 -0
- package/es/styles/theme/algorithms/darkAlgorithm.mjs.map +1 -0
- package/es/styles/theme/algorithms/lightAlgorithm.mjs +18 -0
- package/es/styles/theme/algorithms/lightAlgorithm.mjs.map +1 -0
- package/es/styles/theme/algorithms/resolveScales.mjs +25 -0
- package/es/styles/theme/algorithms/resolveScales.mjs.map +1 -0
- package/es/styles/theme/antdTheme.mjs +31 -0
- package/es/styles/theme/antdTheme.mjs.map +1 -0
- package/es/styles/theme/customStylish.d.mts +7 -0
- package/es/styles/theme/customStylish.mjs +158 -0
- package/es/styles/theme/customStylish.mjs.map +1 -0
- package/es/styles/theme/customStylishStatic.d.mts +6 -0
- package/es/styles/theme/customStylishStatic.mjs +156 -0
- package/es/styles/theme/customStylishStatic.mjs.map +1 -0
- package/es/styles/theme/customToken.d.mts +7 -0
- package/es/styles/theme/customToken.mjs +127 -0
- package/es/styles/theme/customToken.mjs.map +1 -0
- package/es/styles/theme/generateColorPalette.d.mts +16 -0
- package/es/styles/theme/generateColorPalette.mjs +170 -0
- package/es/styles/theme/generateColorPalette.mjs.map +1 -0
- package/es/styles/theme/token/base.mjs +64 -0
- package/es/styles/theme/token/base.mjs.map +1 -0
- package/es/styles/theme/token/dark.mjs +37 -0
- package/es/styles/theme/token/dark.mjs.map +1 -0
- package/es/styles/theme/token/light.mjs +37 -0
- package/es/styles/theme/token/light.mjs.map +1 -0
- package/es/types/customStylish.d.mts +28 -0
- package/es/types/customToken.d.mts +34 -0
- package/es/types/customToken.mjs +32 -0
- package/es/types/customToken.mjs.map +1 -0
- package/es/types/index.d.mts +15 -0
- package/es/types/index.d.ts +1 -0
- package/es/types/index.js +1 -0
- package/es/types/index.mjs +2 -0
- package/es/utils/composeEventHandlers.d.mts +5 -0
- package/es/utils/composeEventHandlers.mjs +10 -0
- package/es/utils/composeEventHandlers.mjs.map +1 -0
- package/es/utils/copyToClipboard.d.mts +5 -0
- package/es/utils/copyToClipboard.mjs +28 -0
- package/es/utils/copyToClipboard.mjs.map +1 -0
- package/es/utils/dom.d.mts +15 -0
- package/es/utils/dom.mjs +16 -0
- package/es/utils/dom.mjs.map +1 -0
- package/es/utils/genCdnUrl.d.mts +12 -0
- package/es/utils/genCdnUrl.mjs +17 -0
- package/es/utils/genCdnUrl.mjs.map +1 -0
- package/es/utils/safeReadableColor.mjs +6 -0
- package/es/utils/safeReadableColor.mjs.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction.mjs","names":[],"sources":["../../../src/Table/vtable/interaction.ts"],"sourcesContent":["import type { ListTable } from '@visactor/vtable';\n\nimport { DEFAULT_HIERARCHY_INDENT } from '../canvas/groupTitle';\nimport { hrefFor, isGroupTitleRecord, toBoolean, toRating, toValueList } from '../core/cellValue';\nimport { isPickerEditor, pickerJustClosed } from '../react/editors';\nimport type { SuperAdCellMarkers } from './columns';\nimport { toggleSeriesHeader, toggleSeriesRow } from './seriesSelection';\nimport {\n getEditingEditor,\n getInternalProps,\n isTableReleased,\n updateCellContent,\n updateNextFrame,\n} from './vtableAdapter';\n\n/**\n * 单元格里直接移除一个值 —— chip 上悬停出来的那个 × 走这条路(人员的姓名 chip、标签 chip)。\n *\n * 值写进 `getCellOriginRecord` 拿到的记录对象,再让引擎只重绘这一格,**不走\n * `changeCellValue`**:它在「分组 + 树」的嵌套行上会静默无操作,症状是「点了没反应,人还在」。\n * 口径与编辑器提交时一致(见 `writeBackOnCommit`)。\n *\n * `index` 是**记录原始数组**里的下标(与 `resolveUserEntries` / `layoutTagChips` 同一套编号)。\n * 值的容器类型保持使用方给的原样:数组仍是数组,单选写回首个剩余项、空了写 `''` —— 与 picker\n * 的 `publish` 同口径,避免「删一个值顺手把字段从 string 改成了数组」。\n */\nexport const removeChipAt = (\n table: ListTable,\n col: number,\n row: number,\n index: number,\n): boolean => {\n const record = table.getCellOriginRecord(col, row);\n const field = table.getBodyColumnDefine(col, row)?.field;\n if (record == null || typeof field !== 'string') return false;\n\n const current = record[field];\n const rest = toValueList(current).filter((_, position) => position !== index);\n record[field] = Array.isArray(current) ? rest : (rest[0] ?? '');\n updateCellContent(table, col, row);\n updateNextFrame(table);\n return true;\n};\n\nconst TREE_ICON_GAP = 4;\nexport type CellEditHint = {\n col: number;\n height: number;\n left: number;\n row: number;\n top: number;\n width: number;\n};\n\nexport const getGroupToggleCol = (table: ListTable, col: number, row: number) =>\n table.isSeriesNumber(col, row) ? col + 1 : col;\n\nexport const isTableEditing = (table: ListTable): boolean => Boolean(getEditingEditor(table));\n\nexport const sameEditHint = (left: CellEditHint | null, right: CellEditHint | null): boolean => {\n if (left === right) return true;\n if (!left || !right) return false;\n return (\n left.col === right.col &&\n left.row === right.row &&\n left.left === right.left &&\n left.top === right.top &&\n left.width === right.width &&\n left.height === right.height\n );\n};\nexport const resolveTreeTextOffset = (table: any, col: number, row: number): number => {\n const columnDefine = table?.getBodyColumnDefine?.(col, row);\n\n if (columnDefine?.tree !== true) return 0;\n\n const internalProps = getInternalProps(table);\n const layoutMap = internalProps?.layoutMap;\n const bodyHelper = internalProps?.bodyHelper;\n const showIndex = table?.getRecordShowIndexByCell?.(col, row);\n const indexKey = table?.dataSource?.getIndexKey?.(showIndex);\n const groupLength = table?.dataSource?.getGroupLength?.() ?? 0;\n let level = Array.isArray(indexKey) ? indexKey.length - 1 : 0;\n\n if (groupLength > 0) level = Math.max(0, level - groupLength);\n\n const indent = Math.max(0, level) * (layoutMap?.hierarchyIndent ?? DEFAULT_HIERARCHY_INDENT);\n const hasIcon = Boolean(bodyHelper?.getHierarchyIcon?.(col, row));\n const iconWidth = bodyHelper?.getHierarchyIconWidth?.() ?? 16;\n const style = table?.getCellStyle?.(col, row) as\n { padding?: number | (number | null)[] } | undefined;\n const padding = style?.padding;\n const paddingLeft = Array.isArray(padding)\n ? Number(padding[3] || 0)\n : typeof padding === 'number'\n ? padding\n : 0;\n\n return indent + (hasIcon ? iconWidth + TREE_ICON_GAP : 0) + paddingLeft;\n};\n\nexport const resolveEditHint = (\n table: ListTable,\n col: number,\n row: number,\n): CellEditHint | null => {\n if (isTableEditing(table)) return null;\n if (col < 0 || row < 0) return null;\n if (table.isHeader(col, row) || table.isSeriesNumber(col, row)) return null;\n if (isGroupTitleRecord(table.getCellOriginRecord(col, row))) return null;\n if (!table.getEditor(col, row)) return null;\n const rect = table.getCellRelativeRect(col, row);\n if (!rect || rect.width <= 0 || rect.height <= 0) return null;\n const treeOffset = resolveTreeTextOffset(table, col, row);\n const left = rect.left + treeOffset;\n const width = rect.width - treeOffset;\n\n if (width <= 0) return null;\n\n return { col, height: rect.height, left, row, top: rect.top, width };\n};\n\nexport const placeEditHint = (\n hint: CellEditHint | null,\n tableEl: Pick<HTMLElement, 'getBoundingClientRect'> | null,\n host: Pick<HTMLElement, 'getBoundingClientRect'> | null,\n): CellEditHint | null => {\n if (!hint || !tableEl || !host) return hint;\n const tableRect = tableEl.getBoundingClientRect();\n const hostRect = host.getBoundingClientRect();\n return {\n ...hint,\n left: hint.left + (tableRect.left - hostRect.left),\n top: hint.top + (tableRect.top - hostRect.top),\n };\n};\n\nexport const hintFromClientPoint = (\n table: ListTable,\n host: HTMLElement,\n clientX: number,\n clientY: number,\n): CellEditHint | null => {\n const tableEl = table.getElement();\n const rect = tableEl.getBoundingClientRect();\n const cell = table.getCellAtRelativePosition(clientX - rect.left, clientY - rect.top);\n if (!cell || cell.col < 0 || cell.row < 0) return null;\n return placeEditHint(resolveEditHint(table, cell.col, cell.row), tableEl, host);\n};\n\nconst writeCellValue = (table: ListTable, col: number, row: number, value: unknown) => {\n (\n table as ListTable & {\n changeCellValue: (nextCol: number, nextRow: number, next: unknown) => void;\n }\n ).changeCellValue(col, row, value);\n};\n\nconst resolveRatingStar = (\n table: ListTable,\n col: number,\n row: number,\n event?: MouseEvent | PointerEvent | TouchEvent,\n): number => {\n const rect = table.getCellRelativeRect(col, row);\n const offsetX = event != null && 'offsetX' in event ? event.offsetX : undefined;\n\n if (rect == null || rect.width <= 0 || typeof offsetX !== 'number') return 5;\n\n const ratio = (offsetX - rect.left) / rect.width;\n return Math.min(5, Math.max(1, Math.ceil(ratio * 5)));\n};\n\n/**\n * 去掉 URL 解析本来就会忽略的字符:空白、C0 控制字符与 DEL。按字面前缀匹配会被\n * `java\\tscript:` / ` javascript:` 绕过,所以匹配前先归一化。\n * 写成显式字符码而不是控制字符正则:这里要的正是「码点大于空格」这个精确条件。\n */\nconst stripUrlNoise = (href: string): string => {\n let out = '';\n for (const char of href) {\n const code = char.codePointAt(0) ?? 0;\n if (code > 0x20 && code !== 127) out += char;\n }\n return out;\n};\n\n/** 会执行脚本的协议。 */\nconst SCRIPT_URL = /^(?:javascript|vbscript):/i;\n\nconst isScriptUrl = (href: string): boolean => SCRIPT_URL.test(stripUrlNoise(href));\n\nconst openHref = (href: string) => {\n if (typeof document === 'undefined') return;\n // 链接列的取值常常来自业务数据,不能假设可信。**注意这里不是「修了一个 XSS」**:实测带\n // `target=\"_blank\"` 时 Chrome 本来就不会执行 `javascript:`(去掉本行也不会执行),实际症状是\n // 开出一个空白标签页。留着它是纵深防御 —— `target` 一旦改动、或浏览器行为变化,同一条路径\n // 就会变成真的执行(实测不带 `target` 时确实执行)。顺手也省掉了那个空白标签页。\n if (isScriptUrl(href)) return;\n\n const anchor = document.createElement('a');\n anchor.href = href;\n anchor.rel = 'noreferrer';\n anchor.target = '_blank';\n anchor.click();\n};\n\nconst handleSuperAdCellClick = (\n table: ListTable,\n args: { col: number; row: number; event?: MouseEvent | PointerEvent | TouchEvent },\n): boolean => {\n const define = table.getBodyColumnDefine?.(args.col, args.row) as SuperAdCellMarkers | undefined;\n const kind = define?.superadKind;\n\n if (define == null || kind == null) return false;\n\n const value = table.getCellOriginValue(args.col, args.row);\n\n if (kind === 'link') {\n if (define.superadEditable === true) return false;\n\n const href = hrefFor(define.superadLinkKind ?? 'link', value);\n if (href) openHref(href);\n return true;\n }\n\n if (define.superadEditable !== true) return false;\n\n if (kind === 'checkbox' || kind === 'boolean') {\n // 写布尔而不是 0/1:列的类型就是 boolean,写数字会把记录里的值静默改型,\n // 消费方用 `=== true` 判断或直接存 JSON 都会在切换一次之后失效。\n writeCellValue(table, args.col, args.row, toBoolean(value) !== true);\n return true;\n }\n\n if (kind === 'rating') {\n const current = toRating(value);\n const star = resolveRatingStar(table, args.col, args.row, args.event);\n\n writeCellValue(table, args.col, args.row, current === star ? 0 : star);\n return true;\n }\n\n return false;\n};\n\nexport const handleTableCellClick = (\n table: ListTable,\n args: {\n col: number;\n row: number;\n targetIcon?: unknown;\n event?: MouseEvent | PointerEvent | TouchEvent;\n },\n) => {\n if (table.isSeriesNumber?.(args.col, args.row)) {\n if (table.isHeader?.(args.col, args.row)) {\n toggleSeriesHeader(table);\n } else {\n toggleSeriesRow(\n table,\n args.row,\n (args.event as { shiftKey?: boolean } | undefined)?.shiftKey,\n );\n }\n\n return true;\n }\n\n const record = table.getCellOriginRecord(args.col, args.row);\n if (isGroupTitleRecord(record)) {\n if (args.targetIcon) return true;\n table.clearSelected();\n table.toggleHierarchyState(getGroupToggleCol(table, args.col, args.row), args.row);\n return true;\n }\n if (pickerJustClosed(table)) return true;\n if (handleSuperAdCellClick(table, args)) return true;\n if (!isPickerEditor(table.getEditor(args.col, args.row))) return false;\n // 0ms 定时器落地前表可能已经没了(容器塌成 0、路由切换)。startEditCell 会直接读\n // internalProps,释放后是 null。\n window.setTimeout(() => {\n if (isTableReleased(table)) return;\n table.startEditCell(args.col, args.row);\n }, 0);\n return false;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { TableColumnInput, TableHover, TableRecord, TableSize } from "../type.mjs";
|
|
2
|
+
import { TableToken } from "../canvas/theme.mjs";
|
|
3
|
+
import { TableI18n } from "../core/tableI18n.mjs";
|
|
4
|
+
import { ThemeConfig } from "antd";
|
|
5
|
+
import { ListTableConstructorOptions } from "@visactor/vtable";
|
|
6
|
+
//#region src/Table/vtable/option.d.ts
|
|
7
|
+
interface CreateTableOptionInput {
|
|
8
|
+
autoFillWidth?: boolean;
|
|
9
|
+
columns?: TableColumnInput[];
|
|
10
|
+
editable?: boolean;
|
|
11
|
+
/** 编辑器那个独立 React root 要用的 antd 主题(见 `useTableRenderState`)。 */
|
|
12
|
+
editorTheme?: ThemeConfig;
|
|
13
|
+
emptyText?: string;
|
|
14
|
+
frozenColCount?: number;
|
|
15
|
+
groupBy?: string | string[];
|
|
16
|
+
groupTitleColors?: Record<string, string | undefined>;
|
|
17
|
+
headerRowHeight?: number | string;
|
|
18
|
+
hover?: TableHover;
|
|
19
|
+
/** 编辑器 / 空态占位读这份,独立 React root 拿不到外层 i18n。 */
|
|
20
|
+
i18n?: TableI18n;
|
|
21
|
+
option?: ListTableConstructorOptions;
|
|
22
|
+
records?: TableRecord[];
|
|
23
|
+
rowDrag?: boolean;
|
|
24
|
+
rowHeight?: number | string;
|
|
25
|
+
showHeader?: boolean;
|
|
26
|
+
showRowIndex?: boolean;
|
|
27
|
+
showRowSelection?: boolean;
|
|
28
|
+
showVerticalBorder?: boolean;
|
|
29
|
+
size?: TableSize;
|
|
30
|
+
theme?: ListTableConstructorOptions['theme'];
|
|
31
|
+
token?: TableToken;
|
|
32
|
+
tree?: boolean;
|
|
33
|
+
treeExpandLevel?: number;
|
|
34
|
+
treeIndent?: number;
|
|
35
|
+
}
|
|
36
|
+
declare const createTableOption: ({ autoFillWidth, columns, editable, emptyText, frozenColCount, groupBy, groupTitleColors, headerRowHeight, hover, option, records, rowDrag, rowHeight, showHeader, showRowIndex, showRowSelection, showVerticalBorder, size, theme, token, editorTheme, i18n, tree, treeExpandLevel, treeIndent }: CreateTableOptionInput) => ListTableConstructorOptions;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { CreateTableOptionInput, createTableOption };
|
|
39
|
+
//# sourceMappingURL=option.d.mts.map
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { TABLE_CHROME, resolveGroupFill, resolveTableCanvasPalette } from "../canvas/theme.mjs";
|
|
2
|
+
import { isGroupTitleRecord, resolveOption } from "../core/cellValue.mjs";
|
|
3
|
+
import { getLayoutMapHierarchyIndent } from "./vtableAdapter.mjs";
|
|
4
|
+
import { countGroupRecords, createGroupTitleTagLayout, getGroupByField, getGroupTitleLevel } from "../canvas/groupTitle.mjs";
|
|
5
|
+
import { isGroupTitleRow, resolveRowSeriesValue } from "./seriesSelection.mjs";
|
|
6
|
+
import { createRowSeriesHeaderLayout, createRowSeriesLayout } from "../canvas/rowSeries.mjs";
|
|
7
|
+
import { TABLE_ROW_HEIGHT } from "../type.mjs";
|
|
8
|
+
import { parsePxSize } from "../core/size.mjs";
|
|
9
|
+
import { compileColumns, withDefaultColumnMinWidths } from "./columns.mjs";
|
|
10
|
+
//#region src/Table/vtable/option.ts
|
|
11
|
+
const hoverOption = (hover) => {
|
|
12
|
+
if (!hover) return void 0;
|
|
13
|
+
if (hover === "none") return { disableHover: true };
|
|
14
|
+
return { highlightMode: hover };
|
|
15
|
+
};
|
|
16
|
+
const groupTitleFieldFormat = (groupBy, columns) => {
|
|
17
|
+
return (record, col, row, table) => {
|
|
18
|
+
const level = getGroupTitleLevel(table, col ?? 0, row ?? 0);
|
|
19
|
+
const field = getGroupByField(groupBy, level);
|
|
20
|
+
const options = (columns?.find((item) => "field" in item && item.field === field))?.options;
|
|
21
|
+
const raw = record?.vtableMergeName;
|
|
22
|
+
const label = options ? resolveOption(raw, options).label : raw == null ? "" : String(raw);
|
|
23
|
+
const count = countGroupRecords(record);
|
|
24
|
+
return count ? `${label} (${count})` : label;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* VTable 默认会把树/分组的展开图标画进行号列。关闭行选择后行号列退回默认渲染,
|
|
29
|
+
* 分组标题行会被默认样式/展开图标覆盖。这里只接管分组标题行;数据行继续交回
|
|
30
|
+
* 默认渲染,保留 `dragOrder` 手柄与 `format` 序号。
|
|
31
|
+
*/
|
|
32
|
+
const groupTitleSeriesLayout = (showIndex, showSelection) => {
|
|
33
|
+
const render = createRowSeriesLayout(showIndex, showSelection);
|
|
34
|
+
return (args) => isGroupTitleRow(args.table, args.row ?? 0) ? render(args) : { renderDefault: true };
|
|
35
|
+
};
|
|
36
|
+
const rowSeriesNumber = ({ dragOrder, groupBackground, grouped, showIndex, showSelection, showVerticalBorder, token }) => ({
|
|
37
|
+
customLayout: showSelection ? createRowSeriesLayout(Boolean(showIndex), true, Boolean(dragOrder)) : grouped ? groupTitleSeriesLayout(Boolean(showIndex), Boolean(showSelection)) : void 0,
|
|
38
|
+
disableColumnResize: true,
|
|
39
|
+
dragOrder: Boolean(dragOrder),
|
|
40
|
+
format: showSelection !== true ? (_col, row, table) => {
|
|
41
|
+
if (row == null) return "";
|
|
42
|
+
if (showIndex !== true && dragOrder === true) return "";
|
|
43
|
+
return resolveRowSeriesValue(table, row);
|
|
44
|
+
} : dragOrder === true ? () => "" : void 0,
|
|
45
|
+
headerCustomLayout: showSelection ? createRowSeriesHeaderLayout(Boolean(showIndex), Boolean(dragOrder)) : void 0,
|
|
46
|
+
headerStyle: {
|
|
47
|
+
bgColor: token?.colorBgContainer,
|
|
48
|
+
borderLineWidth: showVerticalBorder ? [
|
|
49
|
+
0,
|
|
50
|
+
1,
|
|
51
|
+
0,
|
|
52
|
+
0
|
|
53
|
+
] : [
|
|
54
|
+
0,
|
|
55
|
+
0,
|
|
56
|
+
0,
|
|
57
|
+
0
|
|
58
|
+
],
|
|
59
|
+
color: token?.colorTextSecondary ?? TABLE_CHROME.textAux,
|
|
60
|
+
fontSize: 13,
|
|
61
|
+
fontWeight: 500,
|
|
62
|
+
textAlign: "center"
|
|
63
|
+
},
|
|
64
|
+
style: (args) => {
|
|
65
|
+
const record = args.table.getCellOriginRecord(args.col, args.row);
|
|
66
|
+
return {
|
|
67
|
+
bgColor: Boolean(record?.vtableMerge) || isGroupTitleRow(args.table, args.row) ? groupBackground : token?.colorBgContainer ?? "#ffffff",
|
|
68
|
+
borderLineWidth: showVerticalBorder ? [
|
|
69
|
+
1,
|
|
70
|
+
1,
|
|
71
|
+
0,
|
|
72
|
+
0
|
|
73
|
+
] : [
|
|
74
|
+
1,
|
|
75
|
+
0,
|
|
76
|
+
0,
|
|
77
|
+
0
|
|
78
|
+
],
|
|
79
|
+
color: showIndex ? token?.colorText ?? TABLE_CHROME.text : token?.colorTextTertiary ?? TABLE_CHROME.textMuted,
|
|
80
|
+
fontSize: 14,
|
|
81
|
+
textAlign: "center"
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
title: showIndex ? "序号" : "",
|
|
85
|
+
width: showSelection ? showIndex ? dragOrder ? 64 : 52 : dragOrder ? 52 : 44 : dragOrder && showIndex ? 48 : 36
|
|
86
|
+
});
|
|
87
|
+
const createTableOption = ({ autoFillWidth, columns, editable, emptyText, frozenColCount, groupBy, groupTitleColors, headerRowHeight, hover, option, records, rowDrag, rowHeight, showHeader, showRowIndex, showRowSelection, showVerticalBorder, size = "middle", theme, token, editorTheme, i18n, tree, treeExpandLevel, treeIndent }) => {
|
|
88
|
+
const density = parsePxSize(rowHeight) ?? TABLE_ROW_HEIGHT[size];
|
|
89
|
+
const groupTitleBackground = theme?.groupTitleStyle?.bgColor;
|
|
90
|
+
const groupBackground = typeof groupTitleBackground === "string" ? groupTitleBackground : resolveGroupFill(token);
|
|
91
|
+
const hasTree = Boolean(tree || columns?.some((column) => "tree" in column && column.tree));
|
|
92
|
+
const compiled = compileColumns(columns, {
|
|
93
|
+
editable,
|
|
94
|
+
groupedTree: Boolean(hasTree && (groupBy ?? option?.groupBy)),
|
|
95
|
+
i18n,
|
|
96
|
+
token,
|
|
97
|
+
tree: hasTree
|
|
98
|
+
}) ?? withDefaultColumnMinWidths(option?.columns);
|
|
99
|
+
const shouldEdit = Boolean(editable || columns?.some((column) => "editable" in column && column.editable));
|
|
100
|
+
const grouped = groupBy ?? option?.groupBy;
|
|
101
|
+
const groupedFields = typeof grouped === "string" || Array.isArray(grouped) ? grouped : void 0;
|
|
102
|
+
const compiledWithGroupIndent = (() => {
|
|
103
|
+
if (grouped === void 0 || compiled === void 0) return compiled;
|
|
104
|
+
const treeColumn = compiled.find((column) => column.tree === true);
|
|
105
|
+
const target = treeColumn || compiled[0];
|
|
106
|
+
if (target === void 0) return compiled;
|
|
107
|
+
const useTreePadding = treeColumn !== void 0;
|
|
108
|
+
return compiled.map((column) => {
|
|
109
|
+
if (column !== target) return column;
|
|
110
|
+
const define = column;
|
|
111
|
+
return {
|
|
112
|
+
...define,
|
|
113
|
+
style: (args) => {
|
|
114
|
+
const base = typeof define.style === "function" ? define.style(args) : define.style || {};
|
|
115
|
+
const record = args.table.getCellOriginRecord(args.col, args.row);
|
|
116
|
+
if (isGroupTitleRecord(record) || useTreePadding) return base;
|
|
117
|
+
const groupFields = Array.isArray(grouped) ? grouped.length : 1;
|
|
118
|
+
const indent = getLayoutMapHierarchyIndent(args.table) ?? 20;
|
|
119
|
+
return {
|
|
120
|
+
...base,
|
|
121
|
+
padding: [
|
|
122
|
+
0,
|
|
123
|
+
8,
|
|
124
|
+
0,
|
|
125
|
+
26 + Math.max(0, groupFields - 1) * indent
|
|
126
|
+
]
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
})();
|
|
132
|
+
const callerSeriesObject = option?.rowSeriesNumber;
|
|
133
|
+
const needSeries = Boolean(showRowIndex || rowDrag || showRowSelection || option?.rowSeriesNumber);
|
|
134
|
+
const resolvedFrozenColCount = frozenColCount != null && frozenColCount > 0 ? frozenColCount + (needSeries ? 1 : 0) : frozenColCount ?? option?.frozenColCount ?? 0;
|
|
135
|
+
const seriesOption = (() => {
|
|
136
|
+
if (needSeries === false) return void 0;
|
|
137
|
+
const built = rowSeriesNumber({
|
|
138
|
+
dragOrder: rowDrag,
|
|
139
|
+
groupBackground,
|
|
140
|
+
grouped: grouped !== void 0,
|
|
141
|
+
showIndex: showRowIndex,
|
|
142
|
+
showSelection: showRowSelection,
|
|
143
|
+
showVerticalBorder,
|
|
144
|
+
token
|
|
145
|
+
});
|
|
146
|
+
const merged = {
|
|
147
|
+
...built,
|
|
148
|
+
...callerSeriesObject
|
|
149
|
+
};
|
|
150
|
+
if (built.headerCustomLayout != null) {
|
|
151
|
+
merged.cellType = void 0;
|
|
152
|
+
merged.headerType = void 0;
|
|
153
|
+
}
|
|
154
|
+
return merged;
|
|
155
|
+
})();
|
|
156
|
+
return {
|
|
157
|
+
...option,
|
|
158
|
+
emptyTip: { text: emptyText ?? (option?.emptyTip)?.text ?? "No data" },
|
|
159
|
+
autoFillWidth: autoFillWidth ?? option?.autoFillWidth ?? true,
|
|
160
|
+
columns: compiledWithGroupIndent,
|
|
161
|
+
customConfig: {
|
|
162
|
+
...option?.customConfig,
|
|
163
|
+
__superadPalette: resolveTableCanvasPalette(token),
|
|
164
|
+
__superadI18n: i18n,
|
|
165
|
+
__superadTheme: editorTheme,
|
|
166
|
+
createReactContainer: true
|
|
167
|
+
},
|
|
168
|
+
defaultHeaderRowHeight: parsePxSize(headerRowHeight) ?? option?.defaultHeaderRowHeight ?? 36,
|
|
169
|
+
defaultRowHeight: parsePxSize(rowHeight) ?? option?.defaultRowHeight ?? density,
|
|
170
|
+
editCellTrigger: shouldEdit ? option?.editCellTrigger ?? [
|
|
171
|
+
"click",
|
|
172
|
+
"doubleclick",
|
|
173
|
+
"keydown",
|
|
174
|
+
"api"
|
|
175
|
+
] : option?.editCellTrigger,
|
|
176
|
+
excelOptions: shouldEdit ? {
|
|
177
|
+
fillHandle: false,
|
|
178
|
+
...option?.excelOptions
|
|
179
|
+
} : option?.excelOptions,
|
|
180
|
+
frozenColCount: resolvedFrozenColCount,
|
|
181
|
+
unfreezeAllOnExceedsMaxWidth: option?.unfreezeAllOnExceedsMaxWidth ?? false,
|
|
182
|
+
groupBy: grouped,
|
|
183
|
+
groupConfig: grouped ? {
|
|
184
|
+
...option?.groupConfig,
|
|
185
|
+
enableTreeStickCell: true,
|
|
186
|
+
groupBy: grouped,
|
|
187
|
+
titleCheckbox: Boolean(showRowSelection) || needSeries,
|
|
188
|
+
titleCustomLayout: option?.groupConfig?.titleCustomLayout || (groupedFields ? createGroupTitleTagLayout({
|
|
189
|
+
colors: groupTitleColors,
|
|
190
|
+
columns,
|
|
191
|
+
groupBy: groupedFields
|
|
192
|
+
}) : void 0),
|
|
193
|
+
titleFieldFormat: option?.groupConfig?.titleFieldFormat || (grouped ? () => String.fromCharCode(8203) : void 0)
|
|
194
|
+
} : option?.groupConfig,
|
|
195
|
+
groupTitleFieldFormat: groupedFields ? groupTitleFieldFormat(groupedFields, columns) : option?.groupTitleFieldFormat,
|
|
196
|
+
enableCheckboxCascade: option?.enableCheckboxCascade ?? true,
|
|
197
|
+
enableHeaderCheckboxCascade: Boolean(showRowSelection && (grouped || hasTree)) || Boolean(option?.enableHeaderCheckboxCascade),
|
|
198
|
+
enableTreeStickCell: Boolean(grouped) || option?.enableTreeStickCell,
|
|
199
|
+
enableTreeNodeMerge: grouped ? true : option?.enableTreeNodeMerge,
|
|
200
|
+
hierarchyExpandLevel: grouped ? option?.hierarchyExpandLevel ?? Number.POSITIVE_INFINITY : hasTree ? treeExpandLevel ?? option?.hierarchyExpandLevel ?? 1 : option?.hierarchyExpandLevel,
|
|
201
|
+
hierarchyIndent: hasTree ? treeIndent ?? option?.hierarchyIndent ?? 16 : option?.hierarchyIndent,
|
|
202
|
+
hierarchyTextStartAlignment: hasTree ? true : option?.hierarchyTextStartAlignment,
|
|
203
|
+
hover: hoverOption(hover) ?? option?.hover ?? { highlightMode: "row" },
|
|
204
|
+
keyboardOptions: {
|
|
205
|
+
copySelected: true,
|
|
206
|
+
...shouldEdit ? {
|
|
207
|
+
editCellOnEnter: true,
|
|
208
|
+
pasteValueToCell: true,
|
|
209
|
+
selectAllOnCtrlA: true
|
|
210
|
+
} : void 0,
|
|
211
|
+
...option?.keyboardOptions
|
|
212
|
+
},
|
|
213
|
+
records: records ?? option?.records,
|
|
214
|
+
rowSeriesNumber: seriesOption,
|
|
215
|
+
select: {
|
|
216
|
+
blankAreaClickDeselect: true,
|
|
217
|
+
headerSelectMode: "cell",
|
|
218
|
+
highlightMode: "cell",
|
|
219
|
+
...option?.select,
|
|
220
|
+
disableSelect: option?.select?.disableSelect
|
|
221
|
+
},
|
|
222
|
+
showHeader: showHeader ?? option?.showHeader ?? true,
|
|
223
|
+
theme: {
|
|
224
|
+
...option?.theme,
|
|
225
|
+
...theme
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
//#endregion
|
|
230
|
+
export { createTableOption };
|
|
231
|
+
|
|
232
|
+
//# sourceMappingURL=option.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option.mjs","names":[],"sources":["../../../src/Table/vtable/option.ts"],"sourcesContent":["import type { ListTableConstructorOptions } from '@visactor/vtable';\nimport type { ThemeConfig } from 'antd';\n\nimport {\n countGroupRecords,\n createGroupTitleTagLayout,\n DEFAULT_HIERARCHY_INDENT,\n getGroupByField,\n getGroupTitleLevel,\n GROUP_TITLE_CHIP_INSET,\n} from '../canvas/groupTitle';\nimport { createRowSeriesHeaderLayout, createRowSeriesLayout } from '../canvas/rowSeries';\nimport {\n resolveGroupFill,\n resolveTableCanvasPalette,\n TABLE_CHROME,\n type TableToken,\n} from '../canvas/theme';\nimport { isGroupTitleRecord, resolveOption } from '../core/cellValue';\nimport { parsePxSize } from '../core/size';\nimport type { TableI18n } from '../core/tableI18n';\nimport {\n TABLE_HEADER_HEIGHT,\n TABLE_ROW_HEIGHT,\n type TableColumnInput,\n type TableHover,\n type TableRecord,\n type TableSize,\n} from '../type';\nimport { compileColumns, withDefaultColumnMinWidths } from './columns';\nimport { isGroupTitleRow, resolveRowSeriesValue } from './seriesSelection';\nimport { getLayoutMapHierarchyIndent } from './vtableAdapter';\n\nexport interface CreateTableOptionInput {\n autoFillWidth?: boolean;\n columns?: TableColumnInput[];\n editable?: boolean;\n /** 编辑器那个独立 React root 要用的 antd 主题(见 `useTableRenderState`)。 */\n editorTheme?: ThemeConfig;\n emptyText?: string;\n frozenColCount?: number;\n groupBy?: string | string[];\n groupTitleColors?: Record<string, string | undefined>;\n headerRowHeight?: number | string;\n hover?: TableHover;\n /** 编辑器 / 空态占位读这份,独立 React root 拿不到外层 i18n。 */\n i18n?: TableI18n;\n option?: ListTableConstructorOptions;\n records?: TableRecord[];\n rowDrag?: boolean;\n rowHeight?: number | string;\n showHeader?: boolean;\n showRowIndex?: boolean;\n showRowSelection?: boolean;\n showVerticalBorder?: boolean;\n size?: TableSize;\n theme?: ListTableConstructorOptions['theme'];\n token?: TableToken;\n tree?: boolean;\n treeExpandLevel?: number;\n treeIndent?: number;\n}\n\nconst hoverOption = (hover?: TableHover): ListTableConstructorOptions['hover'] => {\n if (!hover) return undefined;\n if (hover === 'none') return { disableHover: true };\n return { highlightMode: hover };\n};\n\nconst groupTitleFieldFormat = (groupBy: string | string[], columns?: TableColumnInput[]) => {\n return (\n record: { children?: unknown[]; vtableMergeName?: unknown },\n col?: number,\n row?: number,\n table?: unknown,\n ) => {\n const level = getGroupTitleLevel(table, col ?? 0, row ?? 0);\n const field = getGroupByField(groupBy, level);\n const column = columns?.find((item) => 'field' in item && item.field === field) as\n { options?: { color?: string; label: string; value: string }[] } | undefined;\n const options = column?.options;\n const raw = record?.vtableMergeName;\n const label = options ? resolveOption(raw, options).label : raw == null ? '' : String(raw);\n const count = countGroupRecords(record);\n return count ? `${label} (${count})` : label;\n };\n};\n\n/**\n * VTable 默认会把树/分组的展开图标画进行号列。关闭行选择后行号列退回默认渲染,\n * 分组标题行会被默认样式/展开图标覆盖。这里只接管分组标题行;数据行继续交回\n * 默认渲染,保留 `dragOrder` 手柄与 `format` 序号。\n */\nconst groupTitleSeriesLayout = (\n showIndex: boolean,\n showSelection: boolean,\n): ReturnType<typeof createRowSeriesLayout> => {\n const render = createRowSeriesLayout(showIndex, showSelection);\n\n return (args) =>\n isGroupTitleRow(args.table, args.row ?? 0)\n ? render(args)\n : ({ renderDefault: true } as unknown as ReturnType<typeof render>);\n};\n\ninterface RowSeriesNumberInput {\n dragOrder?: boolean;\n groupBackground?: string;\n grouped?: boolean;\n showIndex?: boolean;\n showSelection?: boolean;\n showVerticalBorder?: boolean;\n token?: TableToken;\n}\n\nconst rowSeriesNumber = ({\n dragOrder,\n groupBackground,\n grouped,\n showIndex,\n showSelection,\n showVerticalBorder,\n token,\n}: RowSeriesNumberInput): NonNullable<ListTableConstructorOptions['rowSeriesNumber']> => ({\n customLayout: showSelection\n ? createRowSeriesLayout(Boolean(showIndex), true, Boolean(dragOrder))\n : grouped\n ? groupTitleSeriesLayout(Boolean(showIndex), Boolean(showSelection))\n : undefined,\n disableColumnResize: true,\n dragOrder: Boolean(dragOrder),\n // 没开行选择时走 VTable `format` 出序号。开了行选择则 painter 自己画数字,\n // format 必须交空串:拖拽列 `renderDefault: true` 会把 format 文字和手柄一起画出来。\n format:\n showSelection !== true\n ? (_col?: number, row?: number, table?: unknown) => {\n if (row == null) return '';\n if (showIndex !== true && dragOrder === true) return '';\n return resolveRowSeriesValue(table, row);\n }\n : dragOrder === true\n ? () => ''\n : undefined,\n headerCustomLayout: showSelection\n ? createRowSeriesHeaderLayout(Boolean(showIndex), Boolean(dragOrder))\n : undefined,\n headerStyle: {\n bgColor: token?.colorBgContainer,\n borderLineWidth: (showVerticalBorder ? [0, 1, 0, 0] : [0, 0, 0, 0]) as [\n number,\n number,\n number,\n number,\n ],\n color: token?.colorTextSecondary ?? TABLE_CHROME.textAux,\n fontSize: 13,\n fontWeight: 500,\n textAlign: 'center',\n },\n style: (args) => {\n const record = args.table.getCellOriginRecord(args.col, args.row) as\n { vtableMerge?: boolean } | undefined;\n const grouped = Boolean(record?.vtableMerge) || isGroupTitleRow(args.table, args.row);\n return {\n bgColor: grouped ? groupBackground : (token?.colorBgContainer ?? '#ffffff'),\n borderLineWidth: (showVerticalBorder ? [1, 1, 0, 0] : [1, 0, 0, 0]) as [\n number,\n number,\n number,\n number,\n ],\n color: showIndex\n ? (token?.colorText ?? TABLE_CHROME.text)\n : (token?.colorTextTertiary ?? TABLE_CHROME.textMuted),\n fontSize: 14,\n textAlign: 'center',\n };\n },\n title: showIndex ? '序号' : '',\n // 行号列只放手柄 / 序号 / 复选框,按内容收,避免在窄 demo 里占掉一整块。\n width: showSelection\n ? showIndex\n ? dragOrder\n ? 64\n : 52\n : dragOrder\n ? 52\n : 44\n : dragOrder && showIndex\n ? 48\n : 36,\n});\n\nexport const createTableOption = ({\n autoFillWidth,\n columns,\n editable,\n emptyText,\n frozenColCount,\n groupBy,\n groupTitleColors,\n headerRowHeight,\n hover,\n option,\n records,\n rowDrag,\n rowHeight,\n showHeader,\n showRowIndex,\n showRowSelection,\n showVerticalBorder,\n size = 'middle',\n theme,\n token,\n editorTheme,\n i18n,\n tree,\n treeExpandLevel,\n treeIndent,\n}: CreateTableOptionInput): ListTableConstructorOptions => {\n const density = parsePxSize(rowHeight) ?? TABLE_ROW_HEIGHT[size];\n const groupTitleBackground = theme?.groupTitleStyle?.bgColor;\n const groupBackground =\n typeof groupTitleBackground === 'string' ? groupTitleBackground : resolveGroupFill(token);\n const hasTree = Boolean(tree || columns?.some((column) => 'tree' in column && column.tree));\n const compiled =\n compileColumns(columns, {\n editable,\n groupedTree: Boolean(hasTree && (groupBy ?? option?.groupBy)),\n i18n,\n token,\n tree: hasTree,\n }) ?? withDefaultColumnMinWidths(option?.columns);\n const shouldEdit = Boolean(\n editable || columns?.some((column) => 'editable' in column && column.editable),\n );\n const grouped = groupBy ?? option?.groupBy;\n // `grouped` 还可能是 VTable 的 GroupConfig 对象;下面几处需要的是「按哪些字段分组」,\n // 拿不到字段时就不接管,交回 option 自己的 groupConfig。\n const groupedFields =\n typeof grouped === 'string' || Array.isArray(grouped)\n ? (grouped as string | string[])\n : undefined;\n\n const compiledWithGroupIndent = (() => {\n if (grouped === undefined || compiled === undefined) return compiled;\n\n const treeColumn = compiled.find((column) => (column as { tree?: boolean }).tree === true);\n const target = treeColumn || compiled[0];\n\n if (target === undefined) return compiled;\n\n const useTreePadding = treeColumn !== undefined;\n\n return compiled.map((column) => {\n if (column !== target) return column;\n\n const define = column as { style?: unknown };\n\n return {\n ...define,\n style: (args: any) => {\n const base = typeof define.style === 'function' ? define.style(args) : define.style || {};\n const record = args.table.getCellOriginRecord(args.col, args.row);\n\n if (isGroupTitleRecord(record) || useTreePadding) return base;\n\n const groupFields = Array.isArray(grouped) ? grouped.length : 1;\n // Read the live indent, not a constant: the canvas chip indents by\n // getGroupTitleIndent, which reads the same value, so a custom hierarchyIndent has\n // to move both or the chip and its cell padding drift apart.\n const indent = getLayoutMapHierarchyIndent(args.table) ?? DEFAULT_HIERARCHY_INDENT;\n\n return {\n ...base,\n padding: [0, 8, 0, GROUP_TITLE_CHIP_INSET + Math.max(0, groupFields - 1) * indent],\n };\n },\n } as never;\n });\n })();\n // 使用方自己传 `option.rowSeriesNumber` 时 VTable 同样会渲出那一列,冻结列数必须一并 +1,\n // 否则冻住的是行号列而不是第一个数据列。\n // 公开类型只收单个对象(`IRowSeriesNumber`)。运行时的 Array.isArray 分支不在这里跟随:\n // 照内部实现去猜一套公开类型没承诺的用法,正是本文件一直在清理的那类耦合。\n const callerSeriesObject = option?.rowSeriesNumber;\n const needSeries = Boolean(\n showRowIndex || rowDrag || showRowSelection || option?.rowSeriesNumber,\n );\n // `frozenColCount` 描述的是冻结多少个数据列;VTable 会把行号/拖动列也算进去,\n // 因此存在行号列时要 +1,使冻结列从内容第一列(视觉上的第二列)开始。\n const seriesColCount = needSeries ? 1 : 0;\n const resolvedFrozenColCount =\n frozenColCount != null && frozenColCount > 0\n ? frozenColCount + seriesColCount\n : (frozenColCount ?? option?.frozenColCount ?? 0);\n const seriesOption = (() => {\n if (needSeries === false) return undefined;\n\n const built = rowSeriesNumber({\n dragOrder: rowDrag,\n groupBackground,\n grouped: grouped !== undefined,\n showIndex: showRowIndex,\n showSelection: showRowSelection,\n showVerticalBorder,\n token,\n });\n // 使用方传进来的字段叠在最上面(与本文其他 `...option?.x` 的方向一致)。之前这里是三元的\n // 另一支,等于整个丢弃 —— 自定义 field / cellType / title 静默失效,而列照样渲出来,最难查。\n const merged = { ...built, ...callerSeriesObject };\n\n // 行号列的复选框(含表头那个)是我们在 canvas 上画的。使用方再传 `cellType: 'checkbox'`\n // 会让引擎按它自己的渲染器**再画一个** —— 实测同一格里同时出现引擎的 \"checkbox\" 与我们的\n // \"rect\"/\"image\"/\"text\" 两套图形。我们自己画的时候就把渲染方式收回来。\n // 注意只在 `built.headerCustomLayout` 存在时收回:`showRowSelection: false` 时\n // 行号列交回引擎,使用方要的正是原生复选框 / `dragOrder` 手柄,必须透传。\n // 开了行选择时即使同时开 `rowDrag`,painter 仍在,只是 `renderDefault: true` 让引擎画手柄。\n if (built.headerCustomLayout != null) {\n merged.cellType = undefined;\n merged.headerType = undefined;\n }\n\n return merged;\n })();\n\n return {\n ...option,\n emptyTip: {\n text: emptyText ?? (option?.emptyTip as { text?: string } | undefined)?.text ?? 'No data',\n },\n autoFillWidth: autoFillWidth ?? option?.autoFillWidth ?? true,\n columns: compiledWithGroupIndent,\n customConfig: {\n ...option?.customConfig,\n __superadPalette: resolveTableCanvasPalette(token),\n // 编辑器在独立 React root 里渲染,取不到外层主题 / i18n,只能从表实例上读回。\n __superadI18n: i18n,\n __superadTheme: editorTheme,\n createReactContainer: true,\n } as never,\n defaultHeaderRowHeight:\n parsePxSize(headerRowHeight) ?? option?.defaultHeaderRowHeight ?? TABLE_HEADER_HEIGHT,\n defaultRowHeight: parsePxSize(rowHeight) ?? option?.defaultRowHeight ?? density,\n editCellTrigger: shouldEdit\n ? (option?.editCellTrigger ?? ['click', 'doubleclick', 'keydown', 'api'])\n : option?.editCellTrigger,\n excelOptions: shouldEdit\n ? { fillHandle: false, ...option?.excelOptions }\n : option?.excelOptions,\n frozenColCount: resolvedFrozenColCount,\n // VTable 默认在冻结区超过表宽 80% 时把冻结列**全部**解冻,`frozenColCount` 于是静默\n // 变成 0 列(窄容器 + 宽列必然踩中)。改走它的另一条路径:冻到装得下为止。\n // 要用回 VTable 的行为,传 `option={{ unfreezeAllOnExceedsMaxWidth: true }}`。\n unfreezeAllOnExceedsMaxWidth: option?.unfreezeAllOnExceedsMaxWidth ?? false,\n groupBy: grouped,\n groupConfig: grouped\n ? {\n ...option?.groupConfig,\n enableTreeStickCell: true,\n groupBy: grouped,\n // VTable 只有在 `titleCheckbox` 为真时才把分组标题的合并起点放到行号列之后。\n // 只要存在行号/拖拽列,就必须抬起合并起点,否则分组标题的 tag 与展开图标\n // 会跨过行号列,覆盖分组行的样式与内容。真正的行选择复选框由行号列自定义渲染接管。\n titleCheckbox: Boolean(showRowSelection) || needSeries,\n titleCustomLayout:\n option?.groupConfig?.titleCustomLayout ||\n (groupedFields\n ? createGroupTitleTagLayout({\n colors: groupTitleColors,\n columns,\n groupBy: groupedFields,\n })\n : undefined),\n titleFieldFormat:\n option?.groupConfig?.titleFieldFormat ||\n (grouped ? () => String.fromCharCode(8203) : undefined),\n }\n : option?.groupConfig,\n groupTitleFieldFormat: groupedFields\n ? groupTitleFieldFormat(groupedFields, columns)\n : option?.groupTitleFieldFormat,\n // 恒开。**行号列的复选框依赖 VTable 的级联模式**:实测把它设成 false 之后,连\n // `stateManager.select.cellPos` 都不再更新 —— 行号列的点选整个失效。\n // 原先的表达式 `Boolean(showRowSelection && (grouped || hasTree)) || option?…` 对平铺表\n // 算出来是 undefined,靠 VTable 的 `(x ?? enableTreeCheckbox) ?? true` 兜成 true 才碰巧可用;\n // 那个「只有分组/树才级联」的条件是错的,级联与是否有层级无关。显式写出来,别让下一个人\n // 以为关掉它是安全的。\n enableCheckboxCascade: option?.enableCheckboxCascade ?? true,\n enableHeaderCheckboxCascade:\n Boolean(showRowSelection && (grouped || hasTree)) ||\n Boolean(option?.enableHeaderCheckboxCascade),\n enableTreeStickCell: Boolean(grouped) || option?.enableTreeStickCell,\n enableTreeNodeMerge: grouped ? true : option?.enableTreeNodeMerge,\n hierarchyExpandLevel: grouped\n ? (option?.hierarchyExpandLevel ?? Number.POSITIVE_INFINITY)\n : hasTree\n ? (treeExpandLevel ?? option?.hierarchyExpandLevel ?? 1)\n : option?.hierarchyExpandLevel,\n hierarchyIndent: hasTree\n ? (treeIndent ?? option?.hierarchyIndent ?? 16)\n : option?.hierarchyIndent,\n hierarchyTextStartAlignment: hasTree ? true : option?.hierarchyTextStartAlignment,\n hover: hoverOption(hover) ?? option?.hover ?? { highlightMode: 'row' },\n keyboardOptions: {\n copySelected: true,\n ...(shouldEdit\n ? { editCellOnEnter: true, pasteValueToCell: true, selectAllOnCtrlA: true }\n : undefined),\n ...option?.keyboardOptions,\n },\n records: records ?? option?.records,\n rowSeriesNumber: seriesOption,\n select: {\n blankAreaClickDeselect: true,\n headerSelectMode: 'cell',\n highlightMode: 'cell',\n ...option?.select,\n // 曾经这里对分组标题行返回 true(禁选)。代价远大于收益:VTable 的拖拽分支一旦命中\n // 禁用格就直接 return,「起点 + 拖到终点」的第二次 updateSelectPos 因此被丢弃,区间\n // 塌回起点那一行;方向键跨分组行也被吞掉。而 theme 里 `groupTitleStyle.select` 本就\n // 定义了选中配色 —— 分组行是允许选中的,只是用分组填充色画出来。\n // 要禁选请走 `option={{ select: { disableSelect } }}`,注意上面的代价同样成立。\n disableSelect: option?.select?.disableSelect,\n },\n showHeader: showHeader ?? option?.showHeader ?? true,\n theme: {\n ...option?.theme,\n ...theme,\n },\n };\n};\n"],"mappings":"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"}
|