@visactor/vtable 1.13.3-alpha.6 → 1.14.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/cjs/ListTable.js +1 -1
- package/cjs/ListTable.js.map +1 -1
- package/cjs/PivotTable.js +6 -5
- package/cjs/PivotTable.js.map +1 -1
- package/cjs/core/BaseTable.d.ts +3 -3
- package/cjs/core/BaseTable.js +3 -3
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/record-helper.js +8 -6
- package/cjs/core/record-helper.js.map +1 -1
- package/cjs/edit/edit-manager.d.ts +2 -2
- package/cjs/edit/edit-manager.js +16 -7
- package/cjs/edit/edit-manager.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/layout/chart-helper/get-axis-config.js +7 -1
- package/cjs/layout/chart-helper/get-axis-config.js.map +1 -1
- package/cjs/layout/chart-helper/get-axis-domain.js +4 -3
- package/cjs/layout/chart-helper/get-axis-domain.js.map +1 -1
- package/cjs/layout/chart-helper/get-chart-spec.js +9 -2
- package/cjs/layout/chart-helper/get-chart-spec.js.map +1 -1
- package/cjs/plugins/custom-cell-style.d.ts +1 -1
- package/cjs/plugins/custom-cell-style.js +1 -2
- package/cjs/plugins/custom-cell-style.js.map +1 -1
- package/cjs/state/checkbox/checkbox.js +12 -10
- package/cjs/state/checkbox/checkbox.js.map +1 -1
- package/cjs/ts-types/base-table.d.ts +2 -2
- package/cjs/ts-types/base-table.js.map +1 -1
- package/cjs/ts-types/table-engine.d.ts +3 -3
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +132 -68
- package/dist/vtable.min.js +2 -2
- package/es/ListTable.js +2 -2
- package/es/ListTable.js.map +1 -1
- package/es/PivotTable.js +7 -6
- package/es/PivotTable.js.map +1 -1
- package/es/core/BaseTable.d.ts +3 -3
- package/es/core/BaseTable.js +3 -3
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/record-helper.js +8 -6
- package/es/core/record-helper.js.map +1 -1
- package/es/edit/edit-manager.d.ts +2 -2
- package/es/edit/edit-manager.js +13 -4
- package/es/edit/edit-manager.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/layout/chart-helper/get-axis-config.js +6 -1
- package/es/layout/chart-helper/get-axis-config.js.map +1 -1
- package/es/layout/chart-helper/get-axis-domain.js +3 -3
- package/es/layout/chart-helper/get-axis-domain.js.map +1 -1
- package/es/layout/chart-helper/get-chart-spec.js +9 -2
- package/es/layout/chart-helper/get-chart-spec.js.map +1 -1
- package/es/plugins/custom-cell-style.d.ts +1 -1
- package/es/plugins/custom-cell-style.js +1 -2
- package/es/plugins/custom-cell-style.js.map +1 -1
- package/es/state/checkbox/checkbox.js +11 -9
- package/es/state/checkbox/checkbox.js.map +1 -1
- package/es/ts-types/base-table.d.ts +2 -2
- package/es/ts-types/base-table.js.map +1 -1
- package/es/ts-types/table-engine.d.ts +3 -3
- package/es/ts-types/table-engine.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts-types/table-engine.ts"],"names":[],"mappings":";;;AAwhBA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;AACjB,CAAC,EALW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAKpB;AAED,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,uCAAqB,CAAA;IACrB,+BAAa,CAAA;IACb,qCAAmB,CAAA;AACrB,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB","file":"table-engine.js","sourcesContent":["import type { RectProps, MaybePromiseOrUndefined, IDimensionInfo, SortOrder, BaseCellInfo, CellInfo } from './common';\nimport type { ColumnIconOption, SvgIcon } from './icon';\nexport type { HeaderData } from './list-table/layout-map/api';\nexport type LayoutObjectId = number | string;\nimport type { Rect } from '../tools/Rect';\nimport type { BaseTableAPI, BaseTableConstructorOptions, ListTableProtected } from './base-table';\nimport type {\n Aggregation,\n AggregationType,\n CustomAggregation,\n FilterRules,\n IPivotTableDataConfig,\n SortType\n} from './new-data-set';\nimport type { Either } from '../tools/helper';\nimport type {\n IChartIndicator,\n IColumnDimension,\n ICornerDefine,\n IDimension,\n IIndicator,\n IRowDimension,\n ITitleDefine\n} from './pivot-table';\n\nimport type { ColumnDefine, ColumnsDefine } from './list-table';\nimport type { ICellAxisOption, ITableAxisOption } from './component/axis';\n\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ITextStyleOption } from '../body-helper/style';\nimport type { DataSource } from '../data';\nimport type { EditManeger } from '../edit/edit-manager';\nimport type { ICustomRender } from './customElement';\nimport type { ICustomLayout } from './customLayout';\nimport type { ColorPropertyDefine, StylePropertyFunctionArg } from './style-define';\nimport type { TableTheme } from '../themes/theme';\n\nexport interface CellAddress {\n col: number;\n row: number;\n}\nexport interface CellAddressWithBound {\n col: number;\n row: number;\n rect?: RectProps;\n x?: number;\n y?: number;\n}\nexport interface CellRange {\n start: CellAddress;\n end: CellAddress;\n}\n\nexport type FieldGetter = (record: any, col?: number, row?: number, table?: BaseTableAPI) => any;\nexport type FieldSetter = (record: any, value: any) => void;\nexport interface FieldAssessor {\n get: FieldGetter;\n set: FieldSetter;\n}\n\nexport type FieldDef = string | number | string[];\nexport type FieldKeyDef = string | number;\nexport type FieldFormat = FieldGetter | FieldAssessor;\n\nexport type FieldData = MaybePromiseOrUndefined;\n\nexport type WidthModeDef = 'standard' | 'adaptive' | 'autoWidth';\nexport type HeightModeDef = 'standard' | 'adaptive' | 'autoHeight';\nexport type WidthAdaptiveModeDef = 'only-body' | 'all';\nexport type HeightAdaptiveModeDef = 'only-body' | 'all';\nexport type ShowColumnRowType = 'column' | 'row' | 'none' | 'all';\n/** 单元格所处表格哪部分 */\nexport type CellLocation = 'body' | 'rowHeader' | 'columnHeader' | 'cornerHeader';\nexport type CellSubLocation =\n | 'body'\n | 'rowHeader'\n | 'columnHeader'\n | 'cornerHeader'\n | 'bottomFrozen'\n | 'rightFrozen'\n | 'rightTopCorner'\n | 'leftBottomCorner'\n | 'rightBottomCorner'\n | 'rowSeriesNumber'\n | 'colSeriesNumber';\n\nexport interface SelectAllOnCtrlAOption {\n disableHeaderSelect?: boolean;\n disableRowSeriesNumberSelect?: boolean;\n}\n\nexport interface TableKeyboardOptions {\n /** tab键 默认为true。开启tab键移动选中单元格,如果当前是在编辑单元格 则移动到下一个单元格也是编辑状态 */\n moveFocusCellOnTab?: boolean;\n /** enter键 默认true 如果选中单元格按下enter键进入单元格编辑*/\n editCellOnEnter?: boolean;\n /** enter键 默认fasle 按下enter键选择下一个单元格。和editCellOnEnter互斥,同设置为true优先级高于editCellOnEnter */\n moveFocusCellOnEnter?: boolean;\n /** 默认不开启即false。开启这个配置的话,如果当前是在编辑中的单元格,方向键可以移动到下个单元格并进入编辑状态,而不是编辑文本内字符串的光标移动。上下左右方向键切换选中单元格不受该配置影响,*/\n moveEditCellOnArrowKeys?: boolean;\n /** 开启快捷键全选 默认:false */\n selectAllOnCtrlA?: boolean | SelectAllOnCtrlAOption;\n /** 快捷键复制 默认:false*/\n copySelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 快捷键粘贴,默认:false 。粘贴内容到指定位置(即粘贴前要有选中的单元格);支持批量粘贴;粘贴生效仅针对配置了编辑 editor 的单元格;*/\n pasteValueToCell?: boolean; //paste是和浏览器的快捷键一致的\n /** 方向键是否可以更改选中单元格位置,默认:true */\n moveSelectedCellOnArrowKeys?: boolean;\n /** 是否启用ctrl多选框 */\n ctrlMultiSelect?: boolean;\n}\nexport interface TableEventOptions {\n /** 是否阻止右键的默认行为, 默认为true。*/\n preventDefaultContextMenu?: boolean;\n}\n\nexport interface IRowSeriesNumber {\n width?: number | 'auto';\n // align?: 'left' | 'right';\n // span?: number | 'dependOnNear';\n title?: string;\n // field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n // /** 选中整行或者全选时 是否包括序号部分 */\n // selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否禁止列宽调整 */\n disableColumnResize?: boolean;\n}\n\nexport interface ColumnSeriesNumber {\n enable: boolean;\n align?: 'top' | 'bottom';\n span?: number | 'dependOnNear';\n title?: string;\n field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n /** 选中整行或者全选时 是否包括序号部分 */\n selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否显示调换顺序的图标 */\n showDragOrderIcon?: boolean;\n}\nexport interface DataSourceAPI {\n clearCurrentIndexedData: () => void;\n length: number;\n get: (index: number) => MaybePromiseOrUndefined;\n getField: <F extends FieldDef>(index: number, field: F, col: number, row: number, table: BaseTableAPI) => FieldData;\n hasField: (index: number, field: FieldDef) => boolean;\n sort: (rules: Array<SortState>) => void;\n clearSortedMap: () => void;\n updatePagination: (pagination: IPagination) => void;\n getIndexKey: (index: number) => number | number[];\n /** 数据是否为树形结构 且可以展开收起 */\n hierarchyExpandLevel: number;\n\n getGroupLength?: () => number;\n}\n\nexport interface SortState {\n /** 排序依据字段 */\n field: FieldDef;\n /** 排序规则 */\n order: SortOrder;\n orderFn?: (a: any, b: any, order: string) => -1 | 0 | 1;\n}\nexport interface PivotSortState {\n col: number;\n row: number;\n order: SortType;\n}\n\n/**\n * 分页配置\n */\nexport interface IPagination {\n /** 数据总条数 透视表中这个数据会自动加上 不需用户传入*/\n totalCount?: number;\n /** 每页显示数据条数 */\n perPageCount: number;\n /** 当前页码 */\n currentPage?: number;\n}\nexport type HeaderValues = Map<any, any>;\nexport interface ListTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 传入用户实例化的数据对象 目前不完善\n */\n dataSource?: DataSource;\n /**\n * 是否显示表头\n */\n showHeader?: boolean;\n /**\n * Simple header property\n */\n columns?: ColumnsDefine; //请不要再这个上面修改配置,这里相当于是一个原始值备份,有一个内部专用的protectspace.columns\n /**\n *@deprecated 已废弃 请使用columns\n */\n header?: ColumnsDefine;\n\n transpose?: boolean; //是否转置\n /**\n * 展示为tree的列 层级缩进值\n */\n hierarchyIndent?: number;\n /** 展开层数 默认为1只显示根节点*/\n hierarchyExpandLevel?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n hierarchyTextStartAlignment?: boolean;\n /** 分页配置 */\n pagination?: IPagination;\n\n /**\n * 排序状态\n */\n sortState?: SortState | SortState[];\n multipleSort?: boolean;\n\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置编辑器 */\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 拖拽表头移动位置 针对冻结部分的规则 默认为fixedFrozenCount\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n aggregation?:\n | Aggregation\n | CustomAggregation\n | (Aggregation | CustomAggregation)[]\n | ((args: {\n col: number;\n field: string;\n }) => Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[] | null);\n\n enableTreeNodeMerge?: boolean;\n groupBy?: GroupByOption;\n groupTitleCustomLayout?: ICustomLayout;\n\n enableTreeStickCell?: boolean;\n}\n\nexport type GroupByOption = string | string[] | GroupConfig | GroupConfig[];\n\nexport type GroupConfig = {\n key: string;\n sort?: SortOrder;\n};\n\nexport interface ListTableAPI extends BaseTableAPI {\n transpose: boolean;\n options: ListTableConstructorOptions;\n editorManager: EditManeger;\n sortState: SortState[] | SortState | null;\n // /** 数据分析相关配置 */\n // dataConfig?: IListTableDataConfig;\n internalProps: ListTableProtected;\n isListTable: () => true;\n isPivotTable: () => false;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell?: boolean) => void;\n getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n //#region 编辑器相关demo\n /** 获取单元格配置的编辑器 */\n getEditor: (col: number, row: number) => IEditor;\n /**\n * 开启单元格编辑\n * @param col\n * @param row\n * @param value 如果想要改变显示到编辑框中的值 可以value来设置改变\n * @returns\n */\n startEditCell: (col?: number, row?: number, value?: string | number) => void;\n /** 结束编辑 */\n completeEditCell: () => void;\n //#endregion\n addRecord: (record: any, recordIndex?: number) => void;\n addRecords: (records: any[], recordIndex?: number) => void;\n deleteRecords: (recordIndexs: number[]) => void;\n updateRecords: (records: any[], recordIndexs: number[]) => void;\n updateFilterRules: (filterRules: FilterRules) => void;\n getAggregateValuesByField: (field: string | number) => {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[];\n /**\n * 根据数据的索引获取应该显示在body的第几行 参数和返回值的碎银均从0开始\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex: (index: number | number[]) => number;\n}\nexport interface PivotTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 设置排序状态,只对应按钮展示效果 无数据排序逻辑 */\n pivotSortState?: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n\n //#region layout中挪到外层的属性\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n /**展开层数 */\n rowExpandLevel?: number;\n /**子层级维度缩进距离 */\n rowHierarchyIndent?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n rowHierarchyTextStartAlignment?: boolean;\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 指标在具体维度展示的层级顺序,从0开始 ———有数据分析的透视表才需要配置这个 */\n indicatorIndex?: number;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 指标维度key 注意非具体指标key 数据分析的透视表才需要配置这个 */\n // indicatorDimensionKey?: string;\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n //#endregion\n /** 数据分析相关配置 */\n dataConfig?: IPivotTableDataConfig;\n\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n /** 分页配置 */\n pagination?: IPagination;\n\n extensionRows?: IExtensionRowDefine[];\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 是否需要补充指标节点到对应的自定义表头中如rowTree或者columnTree. 默认为true */\n supplementIndicatorNodes?: boolean;\n /** 如果配置了rowTree 或者 columnTree 且是非规则的树结构,即树的同一层存在不同维度的维度值时,为了去匹配对应的数据,需要开启该配置 */\n parseCustomTreeToMatchRecords?: boolean;\n}\nexport interface PivotChartConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合, 平坦数据集合。另外一种特殊方式是传入分组后的数据,分组依据为指标\n */\n records?: any[] | Record<string, any[]>;\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IChartIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n\n axes?: ITableAxisOption[];\n}\nexport interface PivotTableAPI extends BaseTableAPI {\n records?: any;\n options: PivotTableConstructorOptions;\n editorManager: EditManeger;\n // internalProps: PivotTableProtected;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n isListTable: () => false;\n isPivotTable: () => true;\n getPivotSortState: (col: number, row: number) => SortOrder;\n toggleHierarchyState: (col: number, row: number) => void;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell: boolean) => void;\n _parseColumnWidthConfig: (columnWidthConfig: { dimensions: IDimensionInfo[]; width: string | number }[]) => void;\n}\nexport interface PivotChartAPI extends BaseTableAPI {\n records?: any | Record<string, any[]>;\n options: PivotChartConstructorOptions;\n // internalProps: PivotTableProtected;\n isListTable: () => false;\n isPivotTable: () => true;\n}\nexport type SetPasteValueTestData = CellAddress & {\n table: BaseTableAPI;\n record: any;\n value: string;\n\n oldValue: any;\n};\n\nexport interface InlineAPI {\n width: (arg: { ctx: CanvasRenderingContext2D }) => number;\n font: () => string | null;\n color: () => string | null;\n canDraw: () => boolean;\n onReady: (callback: Function) => void;\n\n draw: (opt: any) => void;\n canBreak: () => boolean;\n}\n\nexport interface CellContext {\n readonly col: number;\n readonly row: number;\n /**format之后的值 */\n readonly value: FieldData;\n /**原始值 */\n readonly dataValue: FieldData;\n showIcon?: SvgIcon;\n getContext: () => CanvasRenderingContext2D;\n toCurrentContext: () => CellContext;\n getDrawRect: () => RectProps | null;\n getRect: () => RectProps;\n setRectFilter: (rectFilter: (base: RectProps) => RectProps) => void;\n updateRect: (rect: Rect | RectProps) => void;\n updateDrawRect: (rect: Rect | RectProps) => void;\n}\n\nexport enum Placement {\n top = 'top',\n bottom = 'bottom',\n left = 'left',\n right = 'right'\n}\n\nexport enum HierarchyState {\n expand = 'expand',\n collapse = 'collapse',\n none = 'none',\n loading = 'loading'\n}\nexport type IHeaderTreeDefine = Either<IDimensionHeaderNode, IIndicatorHeaderNode>;\nexport interface IIndicatorHeaderNode {\n /**\n * 指标的key值 对应数据集的字段名\n */\n indicatorKey: string | number;\n /**\n * 指标名称 如:“销售额”,“例如”, 对应到单元格显示的值。可不填,不填的话 从indicators的对应配置中取值显示\n */\n value?: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n //跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格\n levelSpan?: number;\n}\nexport interface IDimensionHeaderNode {\n /**\n * 维度的唯一标识,对应数据集的字段名称\n */\n dimensionKey: string | number;\n /** 维度成员值 */\n value: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | true;\n /** 折叠状态 TODO */\n hierarchyState?: HierarchyState;\n /** 是否为虚拟节点 在基于records数据做分析时忽略该维度字段 */\n virtual?: boolean;\n /** 跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格 */\n levelSpan?: number;\n}\n\nexport interface IExtensionRowDefine {\n rows: (IRowDimension | string)[];\n rowTree: IHeaderTreeDefine[] | ((args: { dimensionKey: string | number; value: string }[]) => IHeaderTreeDefine[]);\n}\n\nexport type StickCell = { col: number; row: number; dx: number; dy: number };\n\nexport type CustomMergeCell = (col: number, row: number, table: BaseTableAPI) => undefined | CustomMerge;\nexport type CustomMerge = {\n range: CellRange;\n text?: string;\n style?: ITextStyleOption;\n customLayout?: ICustomLayout;\n customRender?: ICustomRender;\n};\n\nexport type ColumnInfo = { col: number; left: number; right: number; width: number };\nexport type RowInfo = { row: number; top: number; bottom: number; height: number };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts-types/table-engine.ts"],"names":[],"mappings":";;;AAwhBA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;AACjB,CAAC,EALW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAKpB;AAED,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,uCAAqB,CAAA;IACrB,+BAAa,CAAA;IACb,qCAAmB,CAAA;AACrB,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB","file":"table-engine.js","sourcesContent":["import type { RectProps, MaybePromiseOrUndefined, IDimensionInfo, SortOrder, BaseCellInfo, CellInfo } from './common';\nimport type { ColumnIconOption, SvgIcon } from './icon';\nexport type { HeaderData } from './list-table/layout-map/api';\nexport type LayoutObjectId = number | string;\nimport type { Rect } from '../tools/Rect';\nimport type { BaseTableAPI, BaseTableConstructorOptions, ListTableProtected } from './base-table';\nimport type {\n Aggregation,\n AggregationType,\n CustomAggregation,\n FilterRules,\n IPivotTableDataConfig,\n SortType\n} from './new-data-set';\nimport type { Either } from '../tools/helper';\nimport type {\n IChartIndicator,\n IColumnDimension,\n ICornerDefine,\n IDimension,\n IIndicator,\n IRowDimension,\n ITitleDefine\n} from './pivot-table';\n\nimport type { ColumnDefine, ColumnsDefine } from './list-table';\nimport type { ICellAxisOption, ITableAxisOption } from './component/axis';\n\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ITextStyleOption } from '../body-helper/style';\nimport type { DataSource } from '../data';\nimport type { EditManager } from '../edit/edit-manager';\nimport type { ICustomRender } from './customElement';\nimport type { ICustomLayout } from './customLayout';\nimport type { ColorPropertyDefine, StylePropertyFunctionArg } from './style-define';\nimport type { TableTheme } from '../themes/theme';\n\nexport interface CellAddress {\n col: number;\n row: number;\n}\nexport interface CellAddressWithBound {\n col: number;\n row: number;\n rect?: RectProps;\n x?: number;\n y?: number;\n}\nexport interface CellRange {\n start: CellAddress;\n end: CellAddress;\n}\n\nexport type FieldGetter = (record: any, col?: number, row?: number, table?: BaseTableAPI) => any;\nexport type FieldSetter = (record: any, value: any) => void;\nexport interface FieldAssessor {\n get: FieldGetter;\n set: FieldSetter;\n}\n\nexport type FieldDef = string | number | string[];\nexport type FieldKeyDef = string | number;\nexport type FieldFormat = FieldGetter | FieldAssessor;\n\nexport type FieldData = MaybePromiseOrUndefined;\n\nexport type WidthModeDef = 'standard' | 'adaptive' | 'autoWidth';\nexport type HeightModeDef = 'standard' | 'adaptive' | 'autoHeight';\nexport type WidthAdaptiveModeDef = 'only-body' | 'all';\nexport type HeightAdaptiveModeDef = 'only-body' | 'all';\nexport type ShowColumnRowType = 'column' | 'row' | 'none' | 'all';\n/** 单元格所处表格哪部分 */\nexport type CellLocation = 'body' | 'rowHeader' | 'columnHeader' | 'cornerHeader';\nexport type CellSubLocation =\n | 'body'\n | 'rowHeader'\n | 'columnHeader'\n | 'cornerHeader'\n | 'bottomFrozen'\n | 'rightFrozen'\n | 'rightTopCorner'\n | 'leftBottomCorner'\n | 'rightBottomCorner'\n | 'rowSeriesNumber'\n | 'colSeriesNumber';\n\nexport interface SelectAllOnCtrlAOption {\n disableHeaderSelect?: boolean;\n disableRowSeriesNumberSelect?: boolean;\n}\n\nexport interface TableKeyboardOptions {\n /** tab键 默认为true。开启tab键移动选中单元格,如果当前是在编辑单元格 则移动到下一个单元格也是编辑状态 */\n moveFocusCellOnTab?: boolean;\n /** enter键 默认true 如果选中单元格按下enter键进入单元格编辑*/\n editCellOnEnter?: boolean;\n /** enter键 默认fasle 按下enter键选择下一个单元格。和editCellOnEnter互斥,同设置为true优先级高于editCellOnEnter */\n moveFocusCellOnEnter?: boolean;\n /** 默认不开启即false。开启这个配置的话,如果当前是在编辑中的单元格,方向键可以移动到下个单元格并进入编辑状态,而不是编辑文本内字符串的光标移动。上下左右方向键切换选中单元格不受该配置影响,*/\n moveEditCellOnArrowKeys?: boolean;\n /** 开启快捷键全选 默认:false */\n selectAllOnCtrlA?: boolean | SelectAllOnCtrlAOption;\n /** 快捷键复制 默认:false*/\n copySelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 快捷键粘贴,默认:false 。粘贴内容到指定位置(即粘贴前要有选中的单元格);支持批量粘贴;粘贴生效仅针对配置了编辑 editor 的单元格;*/\n pasteValueToCell?: boolean; //paste是和浏览器的快捷键一致的\n /** 方向键是否可以更改选中单元格位置,默认:true */\n moveSelectedCellOnArrowKeys?: boolean;\n /** 是否启用ctrl多选框 */\n ctrlMultiSelect?: boolean;\n}\nexport interface TableEventOptions {\n /** 是否阻止右键的默认行为, 默认为true。*/\n preventDefaultContextMenu?: boolean;\n}\n\nexport interface IRowSeriesNumber {\n width?: number | 'auto';\n // align?: 'left' | 'right';\n // span?: number | 'dependOnNear';\n title?: string;\n // field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n // /** 选中整行或者全选时 是否包括序号部分 */\n // selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否禁止列宽调整 */\n disableColumnResize?: boolean;\n}\n\nexport interface ColumnSeriesNumber {\n enable: boolean;\n align?: 'top' | 'bottom';\n span?: number | 'dependOnNear';\n title?: string;\n field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => string | ColumnIconOption | (string | ColumnIconOption)[]);\n /** 选中整行或者全选时 是否包括序号部分 */\n selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否显示调换顺序的图标 */\n showDragOrderIcon?: boolean;\n}\nexport interface DataSourceAPI {\n clearCurrentIndexedData: () => void;\n length: number;\n get: (index: number) => MaybePromiseOrUndefined;\n getField: <F extends FieldDef>(index: number, field: F, col: number, row: number, table: BaseTableAPI) => FieldData;\n hasField: (index: number, field: FieldDef) => boolean;\n sort: (rules: Array<SortState>) => void;\n clearSortedMap: () => void;\n updatePagination: (pagination: IPagination) => void;\n getIndexKey: (index: number) => number | number[];\n /** 数据是否为树形结构 且可以展开收起 */\n hierarchyExpandLevel: number;\n\n getGroupLength?: () => number;\n}\n\nexport interface SortState {\n /** 排序依据字段 */\n field: FieldDef;\n /** 排序规则 */\n order: SortOrder;\n orderFn?: (a: any, b: any, order: string) => -1 | 0 | 1;\n}\nexport interface PivotSortState {\n col: number;\n row: number;\n order: SortType;\n}\n\n/**\n * 分页配置\n */\nexport interface IPagination {\n /** 数据总条数 透视表中这个数据会自动加上 不需用户传入*/\n totalCount?: number;\n /** 每页显示数据条数 */\n perPageCount: number;\n /** 当前页码 */\n currentPage?: number;\n}\nexport type HeaderValues = Map<any, any>;\nexport interface ListTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 传入用户实例化的数据对象 目前不完善\n */\n dataSource?: DataSource;\n /**\n * 是否显示表头\n */\n showHeader?: boolean;\n /**\n * Simple header property\n */\n columns?: ColumnsDefine; //请不要再这个上面修改配置,这里相当于是一个原始值备份,有一个内部专用的protectspace.columns\n /**\n *@deprecated 已废弃 请使用columns\n */\n header?: ColumnsDefine;\n\n transpose?: boolean; //是否转置\n /**\n * 展示为tree的列 层级缩进值\n */\n hierarchyIndent?: number;\n /** 展开层数 默认为1只显示根节点*/\n hierarchyExpandLevel?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n hierarchyTextStartAlignment?: boolean;\n /** 分页配置 */\n pagination?: IPagination;\n\n /**\n * 排序状态\n */\n sortState?: SortState | SortState[];\n multipleSort?: boolean;\n\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置编辑器 */\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 拖拽表头移动位置 针对冻结部分的规则 默认为fixedFrozenCount\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n aggregation?:\n | Aggregation\n | CustomAggregation\n | (Aggregation | CustomAggregation)[]\n | ((args: {\n col: number;\n field: string;\n }) => Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[] | null);\n\n enableTreeNodeMerge?: boolean;\n groupBy?: GroupByOption;\n groupTitleCustomLayout?: ICustomLayout;\n\n enableTreeStickCell?: boolean;\n}\n\nexport type GroupByOption = string | string[] | GroupConfig | GroupConfig[];\n\nexport type GroupConfig = {\n key: string;\n sort?: SortOrder;\n};\n\nexport interface ListTableAPI extends BaseTableAPI {\n transpose: boolean;\n options: ListTableConstructorOptions;\n editorManager: EditManager;\n sortState: SortState[] | SortState | null;\n // /** 数据分析相关配置 */\n // dataConfig?: IListTableDataConfig;\n internalProps: ListTableProtected;\n isListTable: () => true;\n isPivotTable: () => false;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell?: boolean) => void;\n getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n //#region 编辑器相关demo\n /** 获取单元格配置的编辑器 */\n getEditor: (col: number, row: number) => IEditor;\n /**\n * 开启单元格编辑\n * @param col\n * @param row\n * @param value 如果想要改变显示到编辑框中的值 可以value来设置改变\n * @returns\n */\n startEditCell: (col?: number, row?: number, value?: string | number) => void;\n /** 结束编辑 */\n completeEditCell: () => void;\n //#endregion\n addRecord: (record: any, recordIndex?: number) => void;\n addRecords: (records: any[], recordIndex?: number) => void;\n deleteRecords: (recordIndexs: number[]) => void;\n updateRecords: (records: any[], recordIndexs: number[]) => void;\n updateFilterRules: (filterRules: FilterRules) => void;\n getAggregateValuesByField: (field: string | number) => {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[];\n /**\n * 根据数据的索引获取应该显示在body的第几行 参数和返回值的碎银均从0开始\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex: (index: number | number[]) => number;\n}\nexport interface PivotTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 设置排序状态,只对应按钮展示效果 无数据排序逻辑 */\n pivotSortState?: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n\n //#region layout中挪到外层的属性\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree';\n /**展开层数 */\n rowExpandLevel?: number;\n /**子层级维度缩进距离 */\n rowHierarchyIndent?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n rowHierarchyTextStartAlignment?: boolean;\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 指标在具体维度展示的层级顺序,从0开始 ———有数据分析的透视表才需要配置这个 */\n indicatorIndex?: number;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 指标维度key 注意非具体指标key 数据分析的透视表才需要配置这个 */\n // indicatorDimensionKey?: string;\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n //#endregion\n /** 数据分析相关配置 */\n dataConfig?: IPivotTableDataConfig;\n\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n /** 分页配置 */\n pagination?: IPagination;\n\n extensionRows?: IExtensionRowDefine[];\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 是否需要补充指标节点到对应的自定义表头中如rowTree或者columnTree. 默认为true */\n supplementIndicatorNodes?: boolean;\n /** 如果配置了rowTree 或者 columnTree 且是非规则的树结构,即树的同一层存在不同维度的维度值时,为了去匹配对应的数据,需要开启该配置 */\n parseCustomTreeToMatchRecords?: boolean;\n}\nexport interface PivotChartConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合, 平坦数据集合。另外一种特殊方式是传入分组后的数据,分组依据为指标\n */\n records?: any[] | Record<string, any[]>;\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IChartIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n\n axes?: ITableAxisOption[];\n}\nexport interface PivotTableAPI extends BaseTableAPI {\n records?: any;\n options: PivotTableConstructorOptions;\n editorManager: EditManager;\n // internalProps: PivotTableProtected;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n isListTable: () => false;\n isPivotTable: () => true;\n getPivotSortState: (col: number, row: number) => SortOrder;\n toggleHierarchyState: (col: number, row: number) => void;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell: boolean) => void;\n _parseColumnWidthConfig: (columnWidthConfig: { dimensions: IDimensionInfo[]; width: string | number }[]) => void;\n}\nexport interface PivotChartAPI extends BaseTableAPI {\n records?: any | Record<string, any[]>;\n options: PivotChartConstructorOptions;\n // internalProps: PivotTableProtected;\n isListTable: () => false;\n isPivotTable: () => true;\n}\nexport type SetPasteValueTestData = CellAddress & {\n table: BaseTableAPI;\n record: any;\n value: string;\n\n oldValue: any;\n};\n\nexport interface InlineAPI {\n width: (arg: { ctx: CanvasRenderingContext2D }) => number;\n font: () => string | null;\n color: () => string | null;\n canDraw: () => boolean;\n onReady: (callback: Function) => void;\n\n draw: (opt: any) => void;\n canBreak: () => boolean;\n}\n\nexport interface CellContext {\n readonly col: number;\n readonly row: number;\n /**format之后的值 */\n readonly value: FieldData;\n /**原始值 */\n readonly dataValue: FieldData;\n showIcon?: SvgIcon;\n getContext: () => CanvasRenderingContext2D;\n toCurrentContext: () => CellContext;\n getDrawRect: () => RectProps | null;\n getRect: () => RectProps;\n setRectFilter: (rectFilter: (base: RectProps) => RectProps) => void;\n updateRect: (rect: Rect | RectProps) => void;\n updateDrawRect: (rect: Rect | RectProps) => void;\n}\n\nexport enum Placement {\n top = 'top',\n bottom = 'bottom',\n left = 'left',\n right = 'right'\n}\n\nexport enum HierarchyState {\n expand = 'expand',\n collapse = 'collapse',\n none = 'none',\n loading = 'loading'\n}\nexport type IHeaderTreeDefine = Either<IDimensionHeaderNode, IIndicatorHeaderNode>;\nexport interface IIndicatorHeaderNode {\n /**\n * 指标的key值 对应数据集的字段名\n */\n indicatorKey: string | number;\n /**\n * 指标名称 如:“销售额”,“例如”, 对应到单元格显示的值。可不填,不填的话 从indicators的对应配置中取值显示\n */\n value?: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n //跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格\n levelSpan?: number;\n}\nexport interface IDimensionHeaderNode {\n /**\n * 维度的唯一标识,对应数据集的字段名称\n */\n dimensionKey: string | number;\n /** 维度成员值 */\n value: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | true;\n /** 折叠状态 TODO */\n hierarchyState?: HierarchyState;\n /** 是否为虚拟节点 在基于records数据做分析时忽略该维度字段 */\n virtual?: boolean;\n /** 跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格 */\n levelSpan?: number;\n}\n\nexport interface IExtensionRowDefine {\n rows: (IRowDimension | string)[];\n rowTree: IHeaderTreeDefine[] | ((args: { dimensionKey: string | number; value: string }[]) => IHeaderTreeDefine[]);\n}\n\nexport type StickCell = { col: number; row: number; dx: number; dy: number };\n\nexport type CustomMergeCell = (col: number, row: number, table: BaseTableAPI) => undefined | CustomMerge;\nexport type CustomMerge = {\n range: CellRange;\n text?: string;\n style?: ITextStyleOption;\n customLayout?: ICustomLayout;\n customRender?: ICustomRender;\n};\n\nexport type ColumnInfo = { col: number; left: number; right: number; width: number };\nexport type RowInfo = { row: number; top: number; bottom: number; height: number };\n"]}
|
package/cjs/vrender.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vrender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qEAA0D;AAC1D,kCAAgC;AAChC,yDAAwH;AACxH,yDAqBgC;AAIhC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAgB,kBAAkB;IAChC,IAAI,QAAQ,EAAE;QACZ,OAAO;KACR;IACD,QAAQ,GAAG,IAAI,CAAC;IAEhB,IAAA,+BAAgB,GAAE,CAAC;IAEnB,IAAI,IAAA,2BAAY,GAAE,EAAE;QAClB,IAAA,6BAAc,EAAC,wBAAS,CAAC,CAAC;KAC3B;SAAM,IAAI,IAAA,wBAAS,GAAE,EAAE;QACtB,IAAA,0BAAW,EAAC,wBAAS,CAAC,CAAC;KACxB;IACD,IAAA,0BAAW,GAAE,CAAC;IAGd,IAAA,6BAAc,GAAE,CAAC;IAEjB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,2BAAY,GAAE,CAAC;IAIf,IAAA,2BAAY,GAAE,CAAC;IAEf,IAAA,+BAAgB,GAAE,CAAC;IACnB,IAAA,iCAAkB,GAAE,CAAC;IACrB,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,uCAAwB,GAAE,CAAC;IAE3B,IAAA,+BAAU,GAAE,CAAC;IAEb,IAAA,uCAAwB,GAAE,CAAC;AAC7B,CAAC;AAnCD,gDAmCC;AAGD,uDAAqD;AAA5C,2GAAA,WAAW,OAAA;AACpB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AAErB,yDAAuC;AACvC,yDAAuC;AACvC,+DAA6C","file":"vrender.js","sourcesContent":["import { loadPoptip } from '@visactor/vrender-components';\nimport '@visactor/vrender-core';\nimport { container, isBrowserEnv, isNodeEnv, preLoadAllModule, registerFlexLayoutPlugin } from '@visactor/vrender-core';\nimport {\n loadBrowserEnv,\n loadNodeEnv,\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n// 导出版本号\n// export const version = \"1.
|
|
1
|
+
{"version":3,"sources":["../src/vrender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qEAA0D;AAC1D,kCAAgC;AAChC,yDAAwH;AACxH,yDAqBgC;AAIhC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAgB,kBAAkB;IAChC,IAAI,QAAQ,EAAE;QACZ,OAAO;KACR;IACD,QAAQ,GAAG,IAAI,CAAC;IAEhB,IAAA,+BAAgB,GAAE,CAAC;IAEnB,IAAI,IAAA,2BAAY,GAAE,EAAE;QAClB,IAAA,6BAAc,EAAC,wBAAS,CAAC,CAAC;KAC3B;SAAM,IAAI,IAAA,wBAAS,GAAE,EAAE;QACtB,IAAA,0BAAW,EAAC,wBAAS,CAAC,CAAC;KACxB;IACD,IAAA,0BAAW,GAAE,CAAC;IAGd,IAAA,6BAAc,GAAE,CAAC;IAEjB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,2BAAY,GAAE,CAAC;IAIf,IAAA,2BAAY,GAAE,CAAC;IAEf,IAAA,+BAAgB,GAAE,CAAC;IACnB,IAAA,iCAAkB,GAAE,CAAC;IACrB,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,uCAAwB,GAAE,CAAC;IAE3B,IAAA,+BAAU,GAAE,CAAC;IAEb,IAAA,uCAAwB,GAAE,CAAC;AAC7B,CAAC;AAnCD,gDAmCC;AAGD,uDAAqD;AAA5C,2GAAA,WAAW,OAAA;AACpB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AAErB,yDAAuC;AACvC,yDAAuC;AACvC,+DAA6C","file":"vrender.js","sourcesContent":["import { loadPoptip } from '@visactor/vrender-components';\nimport '@visactor/vrender-core';\nimport { container, isBrowserEnv, isNodeEnv, preLoadAllModule, registerFlexLayoutPlugin } from '@visactor/vrender-core';\nimport {\n loadBrowserEnv,\n loadNodeEnv,\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n// 导出版本号\n// export const version = \"1.14.1\";\n\nlet registed = false;\nexport function registerForVrender() {\n if (registed) {\n return;\n }\n registed = true;\n // 注册内置组件\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n // registerArc3d();\n // registerArea();\n registerCircle();\n // registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n // registerPath();\n // registerPolygon();\n // registerPyramid3d();\n registerRect();\n // registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerFlexLayoutPlugin();\n // registerWrapText();\n loadPoptip();\n\n registerFlexLayoutPlugin();\n}\n\nexport type { Direction, Timeline } from '@visactor/vrender-core';\nexport { GroupFadeIn } from '@visactor/vrender-core';\nexport { GroupFadeOut } from '@visactor/vrender-core';\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\nexport * from '@visactor/vrender-components';\n"]}
|
package/dist/vtable.js
CHANGED
|
@@ -12229,10 +12229,7 @@
|
|
|
12229
12229
|
const {
|
|
12230
12230
|
context: context
|
|
12231
12231
|
} = drawContext;
|
|
12232
|
-
context.highPerformanceSave()
|
|
12233
|
-
const t1 = graphic.parent.globalTransMatrix,
|
|
12234
|
-
t2 = graphic.stage.window.getViewBoxTransform().clone().multiply(t1.a, t1.b, t1.c, t1.d, t1.e, t1.f);
|
|
12235
|
-
if (graphic.parent && context.setTransformFromMatrix(t2, !0), drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {
|
|
12232
|
+
if (context.highPerformanceSave(), context.transformFromMatrix(graphic.transMatrix, !0), drawContribution.dirtyBounds && drawContribution.backupDirtyBounds) {
|
|
12236
12233
|
tempDirtyBounds.copy(drawContribution.dirtyBounds), tempBackupDirtyBounds.copy(drawContribution.backupDirtyBounds);
|
|
12237
12234
|
const m = graphic.globalTransMatrix.getInverse();
|
|
12238
12235
|
drawContribution.dirtyBounds.copy(drawContribution.backupDirtyBounds).transformWithMatrix(m), drawContribution.backupDirtyBounds.copy(drawContribution.dirtyBounds);
|
|
@@ -50225,7 +50222,7 @@
|
|
|
50225
50222
|
isNeedInitHeaderCheckedStateFromRecord = true;
|
|
50226
50223
|
}
|
|
50227
50224
|
if (isNeedInitHeaderCheckedStateFromRecord) {
|
|
50228
|
-
initRecordCheckState(state);
|
|
50225
|
+
initRecordCheckState(records, state);
|
|
50229
50226
|
}
|
|
50230
50227
|
}
|
|
50231
50228
|
function updateHeaderCheckedState(field, state, col, row) {
|
|
@@ -50245,7 +50242,7 @@
|
|
|
50245
50242
|
const mergeCell = state.table.transpose
|
|
50246
50243
|
? state.table.getCustomMerge(tableIndex, row)
|
|
50247
50244
|
: state.table.getCustomMerge(col, tableIndex);
|
|
50248
|
-
const data = state.table.dataSource
|
|
50245
|
+
const data = state.table.dataSource?.get(index);
|
|
50249
50246
|
if (mergeCell || data.vtableMerge) {
|
|
50250
50247
|
return;
|
|
50251
50248
|
}
|
|
@@ -50347,8 +50344,8 @@
|
|
|
50347
50344
|
targetIndex = table.getRecordShowIndexByCell(targetIndex, 0);
|
|
50348
50345
|
}
|
|
50349
50346
|
else {
|
|
50350
|
-
source = table.getRecordIndexByCell(0, sourceIndex);
|
|
50351
|
-
target = table.getRecordIndexByCell(0, targetIndex);
|
|
50347
|
+
source = table.isPivotTable() ? undefined : table.getRecordIndexByCell(0, sourceIndex);
|
|
50348
|
+
target = table.isPivotTable() ? undefined : table.getRecordIndexByCell(0, targetIndex);
|
|
50352
50349
|
}
|
|
50353
50350
|
if (isNumber$2(source) && isNumber$2(target)) {
|
|
50354
50351
|
if (sourceIndex > targetIndex) {
|
|
@@ -50405,14 +50402,24 @@
|
|
|
50405
50402
|
});
|
|
50406
50403
|
return result;
|
|
50407
50404
|
}
|
|
50408
|
-
function initRecordCheckState(state) {
|
|
50405
|
+
function initRecordCheckState(records, state) {
|
|
50409
50406
|
const table = state.table;
|
|
50410
|
-
const start = table.
|
|
50411
|
-
|
|
50407
|
+
const start = table.isPivotTable()
|
|
50408
|
+
? 0
|
|
50409
|
+
: table.internalProps.transpose
|
|
50410
|
+
? table.rowHeaderLevelCount
|
|
50411
|
+
: table.columnHeaderLevelCount;
|
|
50412
|
+
const end = table.isPivotTable()
|
|
50413
|
+
? isArray$1(records)
|
|
50414
|
+
? records.length
|
|
50415
|
+
: 0
|
|
50416
|
+
: table.internalProps.transpose
|
|
50417
|
+
? table.colCount
|
|
50418
|
+
: table.rowCount;
|
|
50412
50419
|
for (let index = 0; index + start < end; index++) {
|
|
50413
|
-
const record = table.dataSource.get(index);
|
|
50420
|
+
const record = table.isPivotTable() ? records[index] : table.dataSource.get(index);
|
|
50414
50421
|
state._checkboxCellTypeFields.forEach(field => {
|
|
50415
|
-
const value = record[field];
|
|
50422
|
+
const value = record && record[field];
|
|
50416
50423
|
let isChecked;
|
|
50417
50424
|
if (isObject$4(value)) {
|
|
50418
50425
|
isChecked = value.checked;
|
|
@@ -50434,7 +50441,7 @@
|
|
|
50434
50441
|
isChecked = globalChecked;
|
|
50435
50442
|
}
|
|
50436
50443
|
}
|
|
50437
|
-
const dataIndex = state.table.dataSource.getIndexKey(index).toString();
|
|
50444
|
+
const dataIndex = table.isPivotTable() ? index.toString() : state.table.dataSource.getIndexKey(index).toString();
|
|
50438
50445
|
if (!state.checkedState.get(dataIndex)) {
|
|
50439
50446
|
state.checkedState.set(dataIndex, {});
|
|
50440
50447
|
}
|
|
@@ -58043,7 +58050,7 @@
|
|
|
58043
58050
|
const { targetRange, targetTicks } = getTargetRangeAndTicks(col, row, index, isZeroAlign, isTickAlign, range, indicatorKeys, subAxisPosition, path, layout);
|
|
58044
58051
|
if (index !== 0 && targetTicks) {
|
|
58045
58052
|
const getAxisDomainRangeAndLabels = Factory.getFunction('getAxisDomainRangeAndLabels');
|
|
58046
|
-
const { range: newRange, ticks: newTicks } = getAxisDomainRangeAndLabels(range.min, range.max, isZeroAlign, position === 'bottom' || position === 'top'
|
|
58053
|
+
const { range: newRange, ticks: newTicks } = getAxisDomainRangeAndLabels(range.min, range.max, merge({}, axisOption, { nice: true, tick: { forceTickCount: targetTicks.length } }), isZeroAlign, position === 'bottom' || position === 'top'
|
|
58047
58054
|
? layout._table.getColWidth(col) || layout._table.tableNoFrameWidth
|
|
58048
58055
|
: layout._table.getRowHeight(row) || layout._table.tableNoFrameHeight, {
|
|
58049
58056
|
targetTicks,
|
|
@@ -58175,7 +58182,7 @@
|
|
|
58175
58182
|
});
|
|
58176
58183
|
this.table.scenegraph.updateNextFrame();
|
|
58177
58184
|
}
|
|
58178
|
-
arrangeCustomCellStyle(cellPos, customStyleId) {
|
|
58185
|
+
arrangeCustomCellStyle(cellPos, customStyleId, forceFastUpdate) {
|
|
58179
58186
|
const index = this.customCellStyleArrangement.findIndex(style => {
|
|
58180
58187
|
if (style.cellPosition.range && cellPos.range) {
|
|
58181
58188
|
return (style.cellPosition.range.start.col === cellPos.range.start.col &&
|
|
@@ -58208,7 +58215,6 @@
|
|
|
58208
58215
|
this.customCellStyleArrangement.splice(index, 1);
|
|
58209
58216
|
}
|
|
58210
58217
|
const style = this.getCustomCellStyleOption(customStyleId)?.style;
|
|
58211
|
-
let forceFastUpdate;
|
|
58212
58218
|
if (style) {
|
|
58213
58219
|
forceFastUpdate = true;
|
|
58214
58220
|
for (const key in style) {
|
|
@@ -58520,7 +58526,7 @@
|
|
|
58520
58526
|
return TABLE_EVENT_TYPE;
|
|
58521
58527
|
}
|
|
58522
58528
|
options;
|
|
58523
|
-
version = "1.
|
|
58529
|
+
version = "1.14.1";
|
|
58524
58530
|
pagination;
|
|
58525
58531
|
id = `VTable${Date.now()}`;
|
|
58526
58532
|
headerStyleCache;
|
|
@@ -61089,8 +61095,8 @@
|
|
|
61089
61095
|
registerCustomCellStyle(customStyleId, customStyle) {
|
|
61090
61096
|
this.customCellStylePlugin?.registerCustomCellStyle(customStyleId, customStyle);
|
|
61091
61097
|
}
|
|
61092
|
-
arrangeCustomCellStyle(cellPos, customStyleId) {
|
|
61093
|
-
this.customCellStylePlugin?.arrangeCustomCellStyle(cellPos, customStyleId);
|
|
61098
|
+
arrangeCustomCellStyle(cellPos, customStyleId, forceFastUpdate) {
|
|
61099
|
+
this.customCellStylePlugin?.arrangeCustomCellStyle(cellPos, customStyleId, forceFastUpdate);
|
|
61094
61100
|
}
|
|
61095
61101
|
isSeriesNumber(col, row) {
|
|
61096
61102
|
return this.internalProps.layoutMap.isSeriesNumber(col, row);
|
|
@@ -62077,6 +62083,9 @@
|
|
|
62077
62083
|
if (isNumber$2(axisOption?.max)) {
|
|
62078
62084
|
range.max = axisOption.max;
|
|
62079
62085
|
}
|
|
62086
|
+
if (hasSameAxis(axisOption, axes)) {
|
|
62087
|
+
return;
|
|
62088
|
+
}
|
|
62080
62089
|
axes.push(merge({
|
|
62081
62090
|
range,
|
|
62082
62091
|
label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }
|
|
@@ -62128,6 +62137,9 @@
|
|
|
62128
62137
|
if (isNumber$2(axisOption?.max)) {
|
|
62129
62138
|
range.max = axisOption.max;
|
|
62130
62139
|
}
|
|
62140
|
+
if (hasSameAxis(axisOption, axes)) {
|
|
62141
|
+
return;
|
|
62142
|
+
}
|
|
62131
62143
|
axes.push(merge({
|
|
62132
62144
|
range,
|
|
62133
62145
|
label: { style: { fontSize: DEFAULT_TEXT_FONT_SIZE } }
|
|
@@ -62206,6 +62218,23 @@
|
|
|
62206
62218
|
}
|
|
62207
62219
|
return isHasChart;
|
|
62208
62220
|
}
|
|
62221
|
+
function hasSameAxis(axisOption, axes) {
|
|
62222
|
+
if (axisOption && isArray$1(axisOption.seriesId) && axisOption.seriesId.length > 0) {
|
|
62223
|
+
const sameSeriesIdAxes = axes.filter(axis => {
|
|
62224
|
+
if (axis.orient === axisOption.orient &&
|
|
62225
|
+
axis.seriesId &&
|
|
62226
|
+
axis.seriesId.length === axisOption.seriesId.length &&
|
|
62227
|
+
axis.seriesId.every((id, index) => id === axisOption.seriesId[index])) {
|
|
62228
|
+
return true;
|
|
62229
|
+
}
|
|
62230
|
+
return false;
|
|
62231
|
+
});
|
|
62232
|
+
if (sameSeriesIdAxes.length > 0) {
|
|
62233
|
+
return true;
|
|
62234
|
+
}
|
|
62235
|
+
}
|
|
62236
|
+
return false;
|
|
62237
|
+
}
|
|
62209
62238
|
|
|
62210
62239
|
function getCellRange(col, row, layout) {
|
|
62211
62240
|
if (col === -1 || row === -1) {
|
|
@@ -63583,7 +63612,7 @@
|
|
|
63583
63612
|
}
|
|
63584
63613
|
}
|
|
63585
63614
|
|
|
63586
|
-
class
|
|
63615
|
+
class EditManager {
|
|
63587
63616
|
table;
|
|
63588
63617
|
editingEditor;
|
|
63589
63618
|
isValidatingValue = false;
|
|
@@ -63677,20 +63706,16 @@
|
|
|
63677
63706
|
}
|
|
63678
63707
|
if (!this.editingEditor.getValue) ;
|
|
63679
63708
|
if (this.editingEditor.validateValue) {
|
|
63680
|
-
|
|
63709
|
+
this.isValidatingValue = true;
|
|
63710
|
+
const newValue = this.editingEditor.getValue();
|
|
63711
|
+
const oldValue = this.table.getCellOriginValue(this.editCell.col, this.editCell.row);
|
|
63712
|
+
const maybePromiseOrValue = this.editingEditor.validateValue?.(newValue, oldValue, this.editCell, this.table);
|
|
63681
63713
|
if (isPromise(maybePromiseOrValue)) {
|
|
63682
63714
|
this.isValidatingValue = true;
|
|
63683
63715
|
return new Promise((resolve, reject) => {
|
|
63684
63716
|
maybePromiseOrValue
|
|
63685
63717
|
.then(result => {
|
|
63686
|
-
|
|
63687
|
-
this.doExit();
|
|
63688
|
-
resolve(true);
|
|
63689
|
-
}
|
|
63690
|
-
else {
|
|
63691
|
-
this.isValidatingValue = false;
|
|
63692
|
-
resolve(false);
|
|
63693
|
-
}
|
|
63718
|
+
dealWithValidateValue(result, this, oldValue, resolve);
|
|
63694
63719
|
})
|
|
63695
63720
|
.catch((err) => {
|
|
63696
63721
|
this.isValidatingValue = false;
|
|
@@ -63698,11 +63723,7 @@
|
|
|
63698
63723
|
});
|
|
63699
63724
|
});
|
|
63700
63725
|
}
|
|
63701
|
-
|
|
63702
|
-
this.doExit();
|
|
63703
|
-
return true;
|
|
63704
|
-
}
|
|
63705
|
-
return false;
|
|
63726
|
+
return dealWithValidateValue(maybePromiseOrValue, this, oldValue);
|
|
63706
63727
|
}
|
|
63707
63728
|
this.doExit();
|
|
63708
63729
|
return true;
|
|
@@ -63733,6 +63754,35 @@
|
|
|
63733
63754
|
}
|
|
63734
63755
|
}
|
|
63735
63756
|
}
|
|
63757
|
+
function dealWithValidateValue(validateValue, editManager, oldValue, resolve) {
|
|
63758
|
+
editManager.isValidatingValue = false;
|
|
63759
|
+
if (validateValue === 'validate-exit') {
|
|
63760
|
+
editManager.doExit();
|
|
63761
|
+
resolve?.(true);
|
|
63762
|
+
return true;
|
|
63763
|
+
}
|
|
63764
|
+
else if (validateValue === 'invalidate-exit') {
|
|
63765
|
+
editManager.editingEditor.setValue(oldValue);
|
|
63766
|
+
editManager.doExit();
|
|
63767
|
+
resolve?.(true);
|
|
63768
|
+
return true;
|
|
63769
|
+
}
|
|
63770
|
+
else if (validateValue === 'validate-not-exit') {
|
|
63771
|
+
resolve?.(false);
|
|
63772
|
+
return false;
|
|
63773
|
+
}
|
|
63774
|
+
else if (validateValue === 'invalidate-not-exit') {
|
|
63775
|
+
resolve?.(false);
|
|
63776
|
+
return false;
|
|
63777
|
+
}
|
|
63778
|
+
else if (validateValue === true) {
|
|
63779
|
+
editManager.doExit();
|
|
63780
|
+
resolve?.(true);
|
|
63781
|
+
return true;
|
|
63782
|
+
}
|
|
63783
|
+
resolve?.(false);
|
|
63784
|
+
return false;
|
|
63785
|
+
}
|
|
63736
63786
|
|
|
63737
63787
|
function getGroupByDataConfig(groupByOption) {
|
|
63738
63788
|
if (isString$2(groupByOption)) {
|
|
@@ -63811,13 +63861,16 @@
|
|
|
63811
63861
|
const newHeight = computeRowHeight(row, 0, table.colCount - 1, table);
|
|
63812
63862
|
table.scenegraph.updateRowHeight(row, newHeight - oldHeight);
|
|
63813
63863
|
}
|
|
63814
|
-
table.
|
|
63815
|
-
|
|
63816
|
-
|
|
63817
|
-
|
|
63818
|
-
|
|
63819
|
-
|
|
63820
|
-
|
|
63864
|
+
const changedValue = table.getCellOriginValue(col, row);
|
|
63865
|
+
if (oldValue !== changedValue) {
|
|
63866
|
+
table.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {
|
|
63867
|
+
col,
|
|
63868
|
+
row,
|
|
63869
|
+
rawValue: beforeChangeValue,
|
|
63870
|
+
currentValue: oldValue,
|
|
63871
|
+
changedValue
|
|
63872
|
+
});
|
|
63873
|
+
}
|
|
63821
63874
|
table.scenegraph.updateNextFrame();
|
|
63822
63875
|
}
|
|
63823
63876
|
}
|
|
@@ -63873,7 +63926,10 @@
|
|
|
63873
63926
|
isCanChange = true;
|
|
63874
63927
|
}
|
|
63875
63928
|
else {
|
|
63876
|
-
isCanChange =
|
|
63929
|
+
isCanChange =
|
|
63930
|
+
maybePromiseOrValue === true ||
|
|
63931
|
+
maybePromiseOrValue === 'validate-exit' ||
|
|
63932
|
+
maybePromiseOrValue === 'invalidate-exit';
|
|
63877
63933
|
}
|
|
63878
63934
|
}
|
|
63879
63935
|
}
|
|
@@ -63889,13 +63945,16 @@
|
|
|
63889
63945
|
else {
|
|
63890
63946
|
table.dataSource.changeFieldValue(value, recordIndex, field, startCol + j, startRow + i, table);
|
|
63891
63947
|
}
|
|
63892
|
-
table.
|
|
63893
|
-
|
|
63894
|
-
|
|
63895
|
-
|
|
63896
|
-
|
|
63897
|
-
|
|
63898
|
-
|
|
63948
|
+
const changedValue = table.getCellOriginValue(startCol + j, startRow + i);
|
|
63949
|
+
if (oldValue !== changedValue) {
|
|
63950
|
+
table.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {
|
|
63951
|
+
col: startCol + j,
|
|
63952
|
+
row: startRow + i,
|
|
63953
|
+
rawValue: beforeChangeValue,
|
|
63954
|
+
currentValue: oldValue,
|
|
63955
|
+
changedValue
|
|
63956
|
+
});
|
|
63957
|
+
}
|
|
63899
63958
|
}
|
|
63900
63959
|
}
|
|
63901
63960
|
pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd);
|
|
@@ -64513,7 +64572,7 @@
|
|
|
64513
64572
|
this.showHeader = options.showHeader ?? true;
|
|
64514
64573
|
this.transpose = options.transpose ?? false;
|
|
64515
64574
|
if (Env.mode !== 'node') {
|
|
64516
|
-
this.editorManager = new
|
|
64575
|
+
this.editorManager = new EditManager(this);
|
|
64517
64576
|
}
|
|
64518
64577
|
this.refreshHeader();
|
|
64519
64578
|
this.internalProps.useOneRowHeightFillAll = false;
|
|
@@ -71009,7 +71068,7 @@
|
|
|
71009
71068
|
scaleTicks = scale.forceTicks(target?.targetTicks?.length ?? axisOption?.tick?.forceTickCount);
|
|
71010
71069
|
}
|
|
71011
71070
|
else {
|
|
71012
|
-
scaleTicks = scale.ticks(axisOption?.tick?.tickCount
|
|
71071
|
+
scaleTicks = scale.ticks(isNumber$2(axisOption?.tick?.tickCount) ? axisOption.tick.tickCount : DEFAULT_CONTINUOUS_TICK_COUNT, {
|
|
71013
71072
|
noDecimals: axisOption?.tick?.noDecimals
|
|
71014
71073
|
});
|
|
71015
71074
|
}
|
|
@@ -75977,7 +76036,7 @@
|
|
|
75977
76036
|
this.pivotSortState = options.pivotSortState;
|
|
75978
76037
|
}
|
|
75979
76038
|
if (Env.mode !== 'node') {
|
|
75980
|
-
this.editorManager = new
|
|
76039
|
+
this.editorManager = new EditManager(this);
|
|
75981
76040
|
}
|
|
75982
76041
|
this.refreshHeader();
|
|
75983
76042
|
this.internalProps.useOneRowHeightFillAll = false;
|
|
@@ -77122,13 +77181,15 @@
|
|
|
77122
77181
|
const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);
|
|
77123
77182
|
this.scenegraph.updateRowHeight(row, newHeight - oldHeight);
|
|
77124
77183
|
}
|
|
77125
|
-
|
|
77126
|
-
|
|
77127
|
-
|
|
77128
|
-
|
|
77129
|
-
|
|
77130
|
-
|
|
77131
|
-
|
|
77184
|
+
if (oldValue !== newValue) {
|
|
77185
|
+
this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {
|
|
77186
|
+
col,
|
|
77187
|
+
row,
|
|
77188
|
+
rawValue,
|
|
77189
|
+
currentValue: oldValue,
|
|
77190
|
+
changedValue: newValue
|
|
77191
|
+
});
|
|
77192
|
+
}
|
|
77132
77193
|
this.scenegraph.updateNextFrame();
|
|
77133
77194
|
}
|
|
77134
77195
|
}
|
|
@@ -77178,13 +77239,16 @@
|
|
|
77178
77239
|
newValue = parseFloat(value);
|
|
77179
77240
|
}
|
|
77180
77241
|
this._changeCellValueToDataSet(startCol + j, startRow + i, oldValue, newValue);
|
|
77181
|
-
this.
|
|
77182
|
-
|
|
77183
|
-
|
|
77184
|
-
|
|
77185
|
-
|
|
77186
|
-
|
|
77187
|
-
|
|
77242
|
+
const changedValue = this.getCellOriginValue(startCol + j, startRow + i);
|
|
77243
|
+
if (changedValue !== oldValue) {
|
|
77244
|
+
this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {
|
|
77245
|
+
col: startCol + j,
|
|
77246
|
+
row: startRow + i,
|
|
77247
|
+
rawValue,
|
|
77248
|
+
currentValue: oldValue,
|
|
77249
|
+
changedValue
|
|
77250
|
+
});
|
|
77251
|
+
}
|
|
77188
77252
|
}
|
|
77189
77253
|
}
|
|
77190
77254
|
pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd);
|
|
@@ -79019,7 +79083,7 @@
|
|
|
79019
79083
|
}
|
|
79020
79084
|
|
|
79021
79085
|
registerForVrender();
|
|
79022
|
-
const version = "1.
|
|
79086
|
+
const version = "1.14.1";
|
|
79023
79087
|
function getIcons() {
|
|
79024
79088
|
return get$2();
|
|
79025
79089
|
}
|