@visactor/vtable 1.22.2 → 1.22.3-alpha.0

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.
Files changed (47) hide show
  1. package/cjs/PivotChart.js +10 -8
  2. package/cjs/PivotChart.js.map +1 -1
  3. package/cjs/core/BaseTable.js +1 -1
  4. package/cjs/core/BaseTable.js.map +1 -1
  5. package/cjs/dataset/dataset.js +5 -1
  6. package/cjs/dataset/dataset.js.map +1 -1
  7. package/cjs/index.d.ts +1 -1
  8. package/cjs/index.js +1 -1
  9. package/cjs/index.js.map +1 -1
  10. package/cjs/layout/chart-helper/get-axis-config.d.ts +1 -0
  11. package/cjs/layout/chart-helper/get-axis-config.js +11 -8
  12. package/cjs/layout/chart-helper/get-axis-config.js.map +1 -1
  13. package/cjs/layout/chart-helper/get-chart-spec.js +7 -7
  14. package/cjs/layout/chart-helper/get-chart-spec.js.map +1 -1
  15. package/cjs/layout/pivot-header-layout.d.ts +1 -1
  16. package/cjs/layout/pivot-header-layout.js +1 -0
  17. package/cjs/layout/pivot-header-layout.js.map +1 -1
  18. package/cjs/plugins/custom-cell-style.js +1 -1
  19. package/cjs/scenegraph/scenegraph.js +1 -1
  20. package/cjs/ts-types/new-data-set.d.ts +1 -0
  21. package/cjs/ts-types/new-data-set.js.map +1 -1
  22. package/cjs/vrender.js.map +1 -1
  23. package/dist/vtable.js +80 -32
  24. package/dist/vtable.min.js +2 -2
  25. package/es/PivotChart.js +10 -8
  26. package/es/PivotChart.js.map +1 -1
  27. package/es/core/BaseTable.js +1 -1
  28. package/es/core/BaseTable.js.map +1 -1
  29. package/es/dataset/dataset.js +5 -1
  30. package/es/dataset/dataset.js.map +1 -1
  31. package/es/index.d.ts +1 -1
  32. package/es/index.js +1 -1
  33. package/es/index.js.map +1 -1
  34. package/es/layout/chart-helper/get-axis-config.d.ts +1 -0
  35. package/es/layout/chart-helper/get-axis-config.js +11 -8
  36. package/es/layout/chart-helper/get-axis-config.js.map +1 -1
  37. package/es/layout/chart-helper/get-chart-spec.js +6 -7
  38. package/es/layout/chart-helper/get-chart-spec.js.map +1 -1
  39. package/es/layout/pivot-header-layout.d.ts +1 -1
  40. package/es/layout/pivot-header-layout.js +1 -0
  41. package/es/layout/pivot-header-layout.js.map +1 -1
  42. package/es/plugins/custom-cell-style.js +1 -1
  43. package/es/scenegraph/scenegraph.js +1 -1
  44. package/es/ts-types/new-data-set.d.ts +1 -0
  45. package/es/ts-types/new-data-set.js.map +1 -1
  46. package/es/vrender.js.map +1 -1
  47. package/package.json +5 -5
@@ -110,4 +110,4 @@ const registerCustomCellStylePlugin = () => {
110
110
  };
111
111
 
112
112
  exports.registerCustomCellStylePlugin = registerCustomCellStylePlugin;
113
- //# sourceMappingURL=custom-cell-style.js.map
113
+ //# sourceMappingURL=custom-cell-style.js.map
@@ -952,4 +952,4 @@ class Scenegraph {
952
952
  }
953
953
 
954
954
  exports.Scenegraph = Scenegraph;
955
- //# sourceMappingURL=scenegraph.js.map
955
+ //# sourceMappingURL=scenegraph.js.map
@@ -142,6 +142,7 @@ export type CollectValueBy = {
142
142
  type?: 'xField' | 'yField' | undefined;
143
143
  sortBy?: string[];
144
144
  extendRange?: number | 'sum' | 'max';
145
+ considerFields?: string[];
145
146
  };
146
147
  export type CollectedValue = {
147
148
  max?: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/new-data-set.ts"],"names":[],"mappings":";;;AAYA,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,gCAAa,CAAA;IACb,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;AAC7B,CAAC,EAVW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAU1B;AACD,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,yBAAa,CAAA;IACb,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,uBAAW,CAAA;IACX,6BAAiB,CAAA;AACnB,CAAC,EAPW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAOnB","file":"new-data-set.js","sourcesContent":["import type { ColorPropertyDefine } from '.';\nimport type { Either } from '../tools/helper';\nimport type { BaseTableAPI } from './base-table';\n\n//#region 总计小计\nexport interface TotalsStatus {\n isRowTotal: boolean;\n isRowSubTotal: boolean;\n isColTotal: boolean;\n isColSubTotal: boolean;\n}\n\nexport enum AggregationType {\n RECORD = 'RECORD',\n NONE = 'NONE', //不做聚合 只获取其中一条数据作为节点的record 取其field\n SUM = 'SUM',\n MIN = 'MIN',\n MAX = 'MAX',\n AVG = 'AVG',\n COUNT = 'COUNT',\n CUSTOM = 'CUSTOM',\n RECALCULATE = 'RECALCULATE'\n}\nexport enum SortType {\n ASC = 'ASC',\n DESC = 'DESC',\n NORMAL = 'NORMAL',\n desc = 'desc',\n asc = 'asc',\n normal = 'normal'\n}\nexport interface CalcTotals {\n aggregationType?: AggregationType; // 聚合方式\n // calcFunc?: (query: Record<string, any>, arr: Record<string, any>[]) => number;\n}\n\nexport interface Total {\n /** 是否显示总计; 如果配置了total对象,showGrandTotals默认false */\n showGrandTotals: boolean;\n /** 是否显示小计; 如果配置了total对象,showSubTotals默认为true */\n showSubTotals: boolean;\n\n // // 计算总计方法\n // calcGrandTotals?: CalcTotals;\n // // 计算小计方法\n // calcSubTotals?: CalcTotals;\n /** 小计汇总维度定义 */\n subTotalsDimensions?: string[];\n /** 汇总节点显示名称 默认'总计' */\n grandTotalLabel?: string;\n /** 汇总节点显示名称 默认'小计' */\n subTotalLabel?: string;\n}\n\nexport interface Totals {\n row?: Total & {\n /** 总计显示在上 默认false */\n showGrandTotalsOnTop?: boolean;\n /** 小计显示在上 默认false */\n showSubTotalsOnTop?: boolean;\n };\n column?: Total & {\n /** 总计显示在左 默认false */\n showGrandTotalsOnLeft?: boolean;\n /** 小计显示在左 默认false */\n showSubTotalsOnLeft?: boolean;\n };\n}\n\n//#endregion 总计小计\n\n//#region 排序规则\n// export interface SortRule {\n// //排序维度\n// sortField: string;\n// //以下均为排序方法\n// //1. 指定排序类型\n// sortType?: SortType;\n// //2. 按维度成员指定排序\n// sortBy?: string[];\n// //3. 按指标值排序\n// sortByIndicator?: string;\n// //如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值\n// query?: string[];\n// //4. 自定义排序方法function\n// sortFunc?: (a: any, b: any) => number;\n// }\n//以下均为排序方法\n//1. 指定排序类型\nexport interface SortTypeRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n}\n//2. 按维度成员指定排序\nexport interface SortByRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**根据指定具体顺序排序 */\n sortBy?: string[];\n}\n//3. 按指标值排序\nexport interface SortByIndicatorRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**排序根据某个指标值 */\n sortByIndicator?: string;\n /**如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值。例如按照办公用品下的纸张 ['办公用品', '纸张'] */\n query?: string[];\n /**自定义排序函数 否则按自然排序 */\n sortFunc?: (\n value_a: string | number,\n value_b: string | number,\n path_a: string[],\n path_b: string[],\n sortType: SortType\n ) => number;\n}\n//4. 自定义排序方法function\nexport interface SortFuncRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**自定义排序函数 */\n sortFunc?: (a: any, b: any, sortType: SortType) => number;\n}\n//自定义排序方法参数\n// export interface SortFuncParam extends SortRule {\n// data: Array<string | Record<string, any>>;\n// }\nexport type SortRule = SortTypeRule | SortByRule | SortByIndicatorRule | SortFuncRule;\nexport type SortRules = SortRule[];\n//#endregion 排序规则\n\n//#region 过滤规则\nexport interface FilterFuncRule {\n filterFunc?: (row: Record<string, any>) => boolean;\n}\nexport interface FilterValueRule {\n filterKey?: string;\n filteredValues?: unknown[];\n}\nexport type FilterRules = Either<FilterFuncRule, FilterValueRule>[];\n//#endregion 过滤规则\n\n//#region 聚合规则\nexport interface AggregationRule<T extends AggregationType> {\n /** 区别于field 重新起个key值,供配置indicators使用 */\n indicatorKey: string;\n // 可以收集单个字段的聚合结果,或者收集多个字段的聚合结果\n field: string[] | string;\n aggregationType: string | T;\n /** aggregationType 配置为 AggregationType.CUSTOM 时,需要配置 aggregationFun。*/\n aggregationFun?: T extends AggregationType.CUSTOM ? (values: any[], records: any[]) => any : undefined;\n /**计算结果格式化 */\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => number | string;\n}\nexport type AggregationRules = AggregationRule<AggregationType>[];\n\n//#endregion 聚合规则\n\n//#region 映射规则\nexport interface MappingRule {\n label?: LabelMapping;\n symbol?: SymbolMapping;\n bgColor?: MappingFuncRule;\n}\nexport type MappingRules = MappingRule[];\nexport interface LabelMapping {\n text?: MappingFuncRule;\n color?: MappingFuncRule;\n}\nexport interface SymbolMapping {\n shape?: 'circle' | 'rect';\n color?: MappingFuncRule;\n size?: MappingFuncRule;\n}\n\nexport type MappingFuncRule = {\n indicatorKey: string;\n mapping?: ColorPropertyDefine;\n};\n\n//#endregion 映射规则\n\n//#region 派生字段规则\nexport interface DerivedFieldRule {\n fieldName?: string;\n derivedFunc?: (record: Record<string, any>) => any;\n}\nexport type DerivedFieldRules = DerivedFieldRule[];\n//#endregion 派生字段规则\n\n//#region 计算字段规则\nexport interface CalculateddFieldRule {\n /** 唯一标识,可以当做新指标的key,用于配置在 indicators 中在透视表中展示。 */\n key: string;\n /** 计算字段依赖的指标,可以是在 records 中具体对应的指标字段 or 不是数据records 中的字段\n * 如果依赖的指标不在 records 中,则需要在 aggregationRules 中明确配置,具体指明聚合规则和 indicatorKey 以在 dependIndicatorKeys 所使用。 */\n dependIndicatorKeys: string[];\n /** 计算字段的计算函数,依赖的指标值作为参数传入,返回值作为计算字段的值。 */\n calculateFun?: (dependFieldsValue: any) => any;\n}\n\nexport type CalculateddFieldRules = CalculateddFieldRule[];\n//#endregion 计算字段规则\n\n/**\n * 基本表数据处理配置\n */\nexport interface IListTableDataConfig {\n addRecordRule: 'Array' | 'Object';\n groupByRules?: string[]; //按照行列维度分组规则;\n // aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n // sortRules?: SortTypeRule | SortByRule | SortFuncRule; //排序规则 不能简单的将sortState挪到这里 sort的规则在column中配置的;\n filterRules?: FilterRules; //过滤规则;\n // totals?: Totals; //小计或总计;\n // derivedFieldRules?: DerivedFieldRules;\n}\n/**\n * 透视表数据处理配置\n */\nexport interface IPivotTableDataConfig {\n aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n sortRules?: SortRules; //排序规则;\n filterRules?: FilterRules; //过滤规则;\n totals?: Totals; //小计或总计;\n /**\n * 目前mappding还不太好用 不建议使用 建议先用style\n */\n mappingRules?: MappingRules;\n derivedFieldRules?: DerivedFieldRules;\n calculatedFieldRules?: CalculateddFieldRules;\n /** 编辑单元格时是否更新聚合值, 默认为false */\n updateAggregationOnEditCell?: boolean;\n}\n\n/**\n * 透视图数据处理配置\n */\nexport interface IPivotChartDataConfig extends IPivotTableDataConfig {\n /**\n * PivotChart专有\n */\n collectValuesBy?: Record<string, CollectValueBy>;\n /**\n * PivotChart专有\n */\n isPivotChart?: boolean;\n /**\n * PivotChart专有\n */\n dimensionSortArray?: string[];\n}\n\n/** 在处理数据的过程中 去额外收集某个维度的维度值范围 可为离散值或者连续值范围 */\nexport type CollectValueBy = {\n /** 要收集的字段按什么进行分组 */\n by: string[];\n /** 是否计算一个range范围 true的话对应的收集数据的结果为{max:number,min:number} */\n range?: boolean;\n /** 收集是按照sumBy字段相同的进行分组聚合 聚合结果求最大最小值;如果不设置该值 则按单条数据求最大最小值 */\n sumBy?: string[];\n /** 帮助计算列宽使用 如果是chart图表 收集的是xFiled的维度值 可以根据维度值的个数乘于图元宽度计算一个最优列宽*/\n type?: 'xField' | 'yField' | undefined;\n /** 如果是收集的离散值,离散值的排序依据 */\n sortBy?: string[];\n /** chartSpec中设置了markLine autoRange的情况 考虑扩展轴范围 */\n extendRange?: number | 'sum' | 'max';\n};\nexport type CollectedValue = { max?: number; min?: number } | Array<string>;\n\n//#region 提供给基本表格的类型\nexport type Aggregation = {\n aggregationType: AggregationType;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n\nexport type CustomAggregation = {\n aggregationType: AggregationType.CUSTOM;\n aggregationFun: (values: any[], records: any[]) => any;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n//#endregion\n"]}
1
+ {"version":3,"sources":["../src/ts-types/new-data-set.ts"],"names":[],"mappings":";;;AAYA,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,gCAAa,CAAA;IACb,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,8BAAW,CAAA;IACX,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;AAC7B,CAAC,EAVW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAU1B;AACD,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,yBAAa,CAAA;IACb,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,uBAAW,CAAA;IACX,6BAAiB,CAAA;AACnB,CAAC,EAPW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAOnB","file":"new-data-set.js","sourcesContent":["import type { ColorPropertyDefine } from '.';\nimport type { Either } from '../tools/helper';\nimport type { BaseTableAPI } from './base-table';\n\n//#region 总计小计\nexport interface TotalsStatus {\n isRowTotal: boolean;\n isRowSubTotal: boolean;\n isColTotal: boolean;\n isColSubTotal: boolean;\n}\n\nexport enum AggregationType {\n RECORD = 'RECORD',\n NONE = 'NONE', //不做聚合 只获取其中一条数据作为节点的record 取其field\n SUM = 'SUM',\n MIN = 'MIN',\n MAX = 'MAX',\n AVG = 'AVG',\n COUNT = 'COUNT',\n CUSTOM = 'CUSTOM',\n RECALCULATE = 'RECALCULATE'\n}\nexport enum SortType {\n ASC = 'ASC',\n DESC = 'DESC',\n NORMAL = 'NORMAL',\n desc = 'desc',\n asc = 'asc',\n normal = 'normal'\n}\nexport interface CalcTotals {\n aggregationType?: AggregationType; // 聚合方式\n // calcFunc?: (query: Record<string, any>, arr: Record<string, any>[]) => number;\n}\n\nexport interface Total {\n /** 是否显示总计; 如果配置了total对象,showGrandTotals默认false */\n showGrandTotals: boolean;\n /** 是否显示小计; 如果配置了total对象,showSubTotals默认为true */\n showSubTotals: boolean;\n\n // // 计算总计方法\n // calcGrandTotals?: CalcTotals;\n // // 计算小计方法\n // calcSubTotals?: CalcTotals;\n /** 小计汇总维度定义 */\n subTotalsDimensions?: string[];\n /** 汇总节点显示名称 默认'总计' */\n grandTotalLabel?: string;\n /** 汇总节点显示名称 默认'小计' */\n subTotalLabel?: string;\n}\n\nexport interface Totals {\n row?: Total & {\n /** 总计显示在上 默认false */\n showGrandTotalsOnTop?: boolean;\n /** 小计显示在上 默认false */\n showSubTotalsOnTop?: boolean;\n };\n column?: Total & {\n /** 总计显示在左 默认false */\n showGrandTotalsOnLeft?: boolean;\n /** 小计显示在左 默认false */\n showSubTotalsOnLeft?: boolean;\n };\n}\n\n//#endregion 总计小计\n\n//#region 排序规则\n// export interface SortRule {\n// //排序维度\n// sortField: string;\n// //以下均为排序方法\n// //1. 指定排序类型\n// sortType?: SortType;\n// //2. 按维度成员指定排序\n// sortBy?: string[];\n// //3. 按指标值排序\n// sortByIndicator?: string;\n// //如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值\n// query?: string[];\n// //4. 自定义排序方法function\n// sortFunc?: (a: any, b: any) => number;\n// }\n//以下均为排序方法\n//1. 指定排序类型\nexport interface SortTypeRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n}\n//2. 按维度成员指定排序\nexport interface SortByRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**根据指定具体顺序排序 */\n sortBy?: string[];\n}\n//3. 按指标值排序\nexport interface SortByIndicatorRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**排序根据某个指标值 */\n sortByIndicator?: string;\n /**如果按指标值排序,还需要指定另外一个(行或列)方向的底层维度成员具体值。例如按照办公用品下的纸张 ['办公用品', '纸张'] */\n query?: string[];\n /**自定义排序函数 否则按自然排序 */\n sortFunc?: (\n value_a: string | number,\n value_b: string | number,\n path_a: string[],\n path_b: string[],\n sortType: SortType\n ) => number;\n}\n//4. 自定义排序方法function\nexport interface SortFuncRule {\n /**排序维度 */\n sortField: string;\n /**升序降序 ASC or DESC*/\n sortType?: SortType;\n /**自定义排序函数 */\n sortFunc?: (a: any, b: any, sortType: SortType) => number;\n}\n//自定义排序方法参数\n// export interface SortFuncParam extends SortRule {\n// data: Array<string | Record<string, any>>;\n// }\nexport type SortRule = SortTypeRule | SortByRule | SortByIndicatorRule | SortFuncRule;\nexport type SortRules = SortRule[];\n//#endregion 排序规则\n\n//#region 过滤规则\nexport interface FilterFuncRule {\n filterFunc?: (row: Record<string, any>) => boolean;\n}\nexport interface FilterValueRule {\n filterKey?: string;\n filteredValues?: unknown[];\n}\nexport type FilterRules = Either<FilterFuncRule, FilterValueRule>[];\n//#endregion 过滤规则\n\n//#region 聚合规则\nexport interface AggregationRule<T extends AggregationType> {\n /** 区别于field 重新起个key值,供配置indicators使用 */\n indicatorKey: string;\n // 可以收集单个字段的聚合结果,或者收集多个字段的聚合结果\n field: string[] | string;\n aggregationType: string | T;\n /** aggregationType 配置为 AggregationType.CUSTOM 时,需要配置 aggregationFun。*/\n aggregationFun?: T extends AggregationType.CUSTOM ? (values: any[], records: any[]) => any : undefined;\n /**计算结果格式化 */\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => number | string;\n}\nexport type AggregationRules = AggregationRule<AggregationType>[];\n\n//#endregion 聚合规则\n\n//#region 映射规则\nexport interface MappingRule {\n label?: LabelMapping;\n symbol?: SymbolMapping;\n bgColor?: MappingFuncRule;\n}\nexport type MappingRules = MappingRule[];\nexport interface LabelMapping {\n text?: MappingFuncRule;\n color?: MappingFuncRule;\n}\nexport interface SymbolMapping {\n shape?: 'circle' | 'rect';\n color?: MappingFuncRule;\n size?: MappingFuncRule;\n}\n\nexport type MappingFuncRule = {\n indicatorKey: string;\n mapping?: ColorPropertyDefine;\n};\n\n//#endregion 映射规则\n\n//#region 派生字段规则\nexport interface DerivedFieldRule {\n fieldName?: string;\n derivedFunc?: (record: Record<string, any>) => any;\n}\nexport type DerivedFieldRules = DerivedFieldRule[];\n//#endregion 派生字段规则\n\n//#region 计算字段规则\nexport interface CalculateddFieldRule {\n /** 唯一标识,可以当做新指标的key,用于配置在 indicators 中在透视表中展示。 */\n key: string;\n /** 计算字段依赖的指标,可以是在 records 中具体对应的指标字段 or 不是数据records 中的字段\n * 如果依赖的指标不在 records 中,则需要在 aggregationRules 中明确配置,具体指明聚合规则和 indicatorKey 以在 dependIndicatorKeys 所使用。 */\n dependIndicatorKeys: string[];\n /** 计算字段的计算函数,依赖的指标值作为参数传入,返回值作为计算字段的值。 */\n calculateFun?: (dependFieldsValue: any) => any;\n}\n\nexport type CalculateddFieldRules = CalculateddFieldRule[];\n//#endregion 计算字段规则\n\n/**\n * 基本表数据处理配置\n */\nexport interface IListTableDataConfig {\n addRecordRule: 'Array' | 'Object';\n groupByRules?: string[]; //按照行列维度分组规则;\n // aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n // sortRules?: SortTypeRule | SortByRule | SortFuncRule; //排序规则 不能简单的将sortState挪到这里 sort的规则在column中配置的;\n filterRules?: FilterRules; //过滤规则;\n // totals?: Totals; //小计或总计;\n // derivedFieldRules?: DerivedFieldRules;\n}\n/**\n * 透视表数据处理配置\n */\nexport interface IPivotTableDataConfig {\n aggregationRules?: AggregationRules; //按照行列维度聚合值计算规则;\n sortRules?: SortRules; //排序规则;\n filterRules?: FilterRules; //过滤规则;\n totals?: Totals; //小计或总计;\n /**\n * 目前mappding还不太好用 不建议使用 建议先用style\n */\n mappingRules?: MappingRules;\n derivedFieldRules?: DerivedFieldRules;\n calculatedFieldRules?: CalculateddFieldRules;\n /** 编辑单元格时是否更新聚合值, 默认为false */\n updateAggregationOnEditCell?: boolean;\n}\n\n/**\n * 透视图数据处理配置\n */\nexport interface IPivotChartDataConfig extends IPivotTableDataConfig {\n /**\n * PivotChart专有\n */\n collectValuesBy?: Record<string, CollectValueBy>;\n /**\n * PivotChart专有\n */\n isPivotChart?: boolean;\n /**\n * PivotChart专有\n */\n dimensionSortArray?: string[];\n}\n\n/** 在处理数据的过程中 去额外收集某个维度的维度值范围 可为离散值或者连续值范围 */\nexport type CollectValueBy = {\n /** 要收集的字段按什么进行分组 */\n by: string[];\n /** 是否计算一个range范围 true的话对应的收集数据的结果为{max:number,min:number} */\n range?: boolean;\n /** 收集是按照sumBy字段相同的进行分组聚合 聚合结果求最大最小值;如果不设置该值 则按单条数据求最大最小值 */\n sumBy?: string[];\n /** 帮助计算列宽使用 如果是chart图表 收集的是xFiled的维度值 可以根据维度值的个数乘于图元宽度计算一个最优列宽*/\n type?: 'xField' | 'yField' | undefined;\n /** 如果是收集的离散值,离散值的排序依据 */\n sortBy?: string[];\n /** chartSpec中设置了markLine autoRange的情况 考虑扩展轴范围 */\n extendRange?: number | 'sum' | 'max';\n /** 除了考虑指标key之外,还需要考虑哪些字段来计算范围。如boxPlot需要考虑spec中的maxField字段 和minField字段。\n * 其中一个字段可能是作为indicatorKey的,另外一个字段则应该设置到considerFields中 */\n considerFields?: string[];\n};\nexport type CollectedValue = { max?: number; min?: number } | Array<string>;\n\n//#region 提供给基本表格的类型\nexport type Aggregation = {\n aggregationType: AggregationType;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n\nexport type CustomAggregation = {\n aggregationType: AggregationType.CUSTOM;\n aggregationFun: (values: any[], records: any[]) => any;\n showOnTop?: boolean;\n formatFun?: (value: number, col: number, row: number, table: BaseTableAPI) => string | number;\n};\n//#endregion\n"]}
@@ -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;AAOD,yDAAuC;AACvC,yDAAuC;AACvC,+DAA6C;AAC7C,4DAA0C","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.22.2\";\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 } from '@visactor/vrender-core';\nexport type { State } from '@visactor/vrender-components';\n// export { GroupFadeIn } from '@visactor/vrender-core';\n// export { GroupFadeOut } from '@visactor/vrender-core';\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\nexport * from '@visactor/vrender-components';\nexport * from '@visactor/vrender-animate';\n"]}
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;AAOD,yDAAuC;AACvC,yDAAuC;AACvC,+DAA6C;AAC7C,4DAA0C","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.22.3-alpha.0\";\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 } from '@visactor/vrender-core';\nexport type { State } from '@visactor/vrender-components';\n// export { GroupFadeIn } from '@visactor/vrender-core';\n// export { GroupFadeOut } from '@visactor/vrender-core';\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\nexport * from '@visactor/vrender-components';\nexport * from '@visactor/vrender-animate';\n"]}
package/dist/vtable.js CHANGED
@@ -68105,17 +68105,23 @@
68105
68105
  const chartCellStyle = layout._table._getCellStyle(col, row - 1);
68106
68106
  const padding = getQuadProps(getProp('padding', chartCellStyle, col, row - 1, layout._table));
68107
68107
  const { range, ticks, axisOption, index, targetTicks, targetRange, theme } = axisRange;
68108
+ if (isNumber$4(axisOption?.max)) {
68109
+ range.max = axisOption.max;
68110
+ if (range.max < 0) {
68111
+ axisOption.zero = false;
68112
+ }
68113
+ }
68114
+ else if (chartType === 'boxPlot') {
68115
+ range.max += (range.max - range.min) / 20;
68116
+ }
68108
68117
  if (isNumber$4(axisOption?.min)) {
68109
68118
  range.min = axisOption.min;
68110
68119
  if (range.min > 0) {
68111
68120
  axisOption.zero = false;
68112
68121
  }
68113
68122
  }
68114
- if (isNumber$4(axisOption?.max)) {
68115
- range.max = axisOption.max;
68116
- if (range.max < 0) {
68117
- axisOption.zero = false;
68118
- }
68123
+ else if (chartType === 'boxPlot') {
68124
+ range.min -= (range.max - range.min) / 20;
68119
68125
  }
68120
68126
  let domain = [];
68121
68127
  if (chartType === 'heatmap') {
@@ -68197,17 +68203,23 @@
68197
68203
  const chartCellStyle = layout._table._getCellStyle(col + 1, row);
68198
68204
  const padding = getQuadProps(getProp('padding', chartCellStyle, col + 1, row, layout._table));
68199
68205
  const { range, ticks, axisOption, index, targetTicks, targetRange, theme } = axisRange;
68206
+ if (isNumber$4(axisOption?.max)) {
68207
+ range.max = axisOption.max;
68208
+ if (range.max < 0) {
68209
+ axisOption.zero = false;
68210
+ }
68211
+ }
68212
+ else if (chartType === 'boxPlot') {
68213
+ range.max += (range.max - range.min) / 20;
68214
+ }
68200
68215
  if (isNumber$4(axisOption?.min)) {
68201
68216
  range.min = axisOption.min;
68202
68217
  if (range.min > 0) {
68203
68218
  axisOption.zero = false;
68204
68219
  }
68205
68220
  }
68206
- if (isNumber$4(axisOption?.max)) {
68207
- range.max = axisOption.max;
68208
- if (range.max < 0) {
68209
- axisOption.zero = false;
68210
- }
68221
+ else if (chartType === 'boxPlot') {
68222
+ range.min -= (range.max - range.min) / 20;
68211
68223
  }
68212
68224
  let domain = [];
68213
68225
  if (chartType === 'heatmap') {
@@ -68672,7 +68684,7 @@
68672
68684
  };
68673
68685
  }
68674
68686
  function getAxisRangeAndTicks(col, row, index, position, subAxisPosition, indicatorKeys, path, layout) {
68675
- const { range, isZeroAlign, isTickAlign, axisOption } = getChartAxisRange(col, row, index, position, indicatorKeys, path, layout);
68687
+ const { range, isZeroAlign, isTickAlign, axisOption, chartType } = getChartAxisRange(col, row, index, position, indicatorKeys, path, layout);
68676
68688
  const { targetRange, targetTicks } = getTargetRangeAndTicks(col, row, index, isZeroAlign, isTickAlign, range, indicatorKeys, subAxisPosition, path, layout);
68677
68689
  if (index !== 0 && targetTicks) {
68678
68690
  const getAxisDomainRangeAndLabels = Factory.getFunction('getAxisDomainRangeAndLabels');
@@ -68689,7 +68701,8 @@
68689
68701
  axisOption,
68690
68702
  range,
68691
68703
  targetTicks,
68692
- targetRange
68704
+ targetRange,
68705
+ chartType
68693
68706
  };
68694
68707
  }
68695
68708
  function getTargetRangeAndTicks(col, row, index, isZeroAlign, isTickAlign, range, indicatorKeys, subAxisPosition, path, layout) {
@@ -69259,7 +69272,7 @@
69259
69272
  return TABLE_EVENT_TYPE;
69260
69273
  }
69261
69274
  options;
69262
- version = "1.22.2";
69275
+ version = "1.22.3-alpha.0";
69263
69276
  pagination;
69264
69277
  id = `VTable${Date.now()}`;
69265
69278
  headerStyleCache;
@@ -74098,12 +74111,18 @@
74098
74111
  const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);
74099
74112
  const colPath = layout.getColKeysPath(col, row);
74100
74113
  indicatorKeys.forEach((key, index) => {
74101
- const { range, targetTicks, targetRange, axisOption } = getAxisRangeAndTicks(col, row, index, index === 0 ? 'bottom' : 'top', index === 0 ? 'top' : 'bottom', indicatorKeys, colPath, layout);
74114
+ const { range, targetTicks, targetRange, axisOption, chartType } = getAxisRangeAndTicks(col, row, index, index === 0 ? 'bottom' : 'top', index === 0 ? 'top' : 'bottom', indicatorKeys, colPath, layout);
74115
+ if (isNumber$4(axisOption?.max)) {
74116
+ range.max = axisOption.max;
74117
+ }
74118
+ else if (chartType === 'boxPlot') {
74119
+ range.max += (range.max - range.min) / 20;
74120
+ }
74102
74121
  if (isNumber$4(axisOption?.min)) {
74103
74122
  range.min = axisOption.min;
74104
74123
  }
74105
- if (isNumber$4(axisOption?.max)) {
74106
- range.max = axisOption.max;
74124
+ else if (chartType === 'boxPlot') {
74125
+ range.min -= (range.max - range.min) / 20;
74107
74126
  }
74108
74127
  if (hasSameAxis(axisOption, axes)) {
74109
74128
  return;
@@ -74153,16 +74172,22 @@
74153
74172
  const rowPath = layout.getRowKeysPath(col, row);
74154
74173
  indicatorKeys.forEach((key, index) => {
74155
74174
  const { range, targetTicks, targetRange, axisOption } = getAxisRangeAndTicks(col, row, index, index === 0 ? 'left' : 'right', index === 0 ? 'right' : 'left', indicatorKeys, rowPath, layout);
74175
+ const { chartType } = getAxisOption(col, row, index === 0 ? 'left' : 'right', layout);
74176
+ if (isNumber$4(axisOption?.max)) {
74177
+ range.max = axisOption.max;
74178
+ }
74179
+ else if (chartType === 'boxPlot') {
74180
+ range.max += (range.max - range.min) / 20;
74181
+ }
74156
74182
  if (isNumber$4(axisOption?.min)) {
74157
74183
  range.min = axisOption.min;
74158
74184
  }
74159
- if (isNumber$4(axisOption?.max)) {
74160
- range.max = axisOption.max;
74185
+ else if (chartType === 'boxPlot') {
74186
+ range.min -= (range.max - range.min) / 20;
74161
74187
  }
74162
74188
  if (hasSameAxis(axisOption, axes)) {
74163
74189
  return;
74164
74190
  }
74165
- const { chartType } = getAxisOption(col, row, index === 0 ? 'left' : 'right', layout);
74166
74191
  let domain = [];
74167
74192
  if (chartType === 'heatmap') {
74168
74193
  const rowDimensionKey = layout.getDimensionKeyInChartSpec(layout.rowHeaderLevelCount, row, 'yField');
@@ -87811,6 +87836,9 @@
87811
87836
  const chartSpec = this.getRawChartSpec(_col, _row);
87812
87837
  const indicatorKeys = [];
87813
87838
  if (chartSpec) {
87839
+ if (chartSpec.type === 'boxPlot') {
87840
+ return [chartSpec.maxField];
87841
+ }
87814
87842
  if (chartSpec.series || chartSpec.xField || chartSpec.yField) {
87815
87843
  if (this.indicatorsAsCol === false) {
87816
87844
  if (chartSpec.series) {
@@ -88971,8 +88999,22 @@
88971
88999
  }
88972
89000
  else if (this.collectValuesBy[field].range) {
88973
89001
  const fieldRange = this.collectedValues[field][collectKeys];
88974
- const max = Math.max(record[field], fieldRange.max);
88975
- const min = Math.min(record[field], fieldRange.min);
89002
+ let max = Math.max(record[field], fieldRange.max);
89003
+ let min = Math.min(record[field], fieldRange.min);
89004
+ if (this.collectValuesBy[field].considerFields) {
89005
+ for (const considerField of this.collectValuesBy[field].considerFields) {
89006
+ if (record[considerField]) {
89007
+ if (typeof record[considerField] === 'number') {
89008
+ max = Math.max(record[considerField], max);
89009
+ min = Math.min(record[considerField], min);
89010
+ }
89011
+ else if (Array.isArray(record[considerField])) {
89012
+ max = Math.max(...record[considerField], max);
89013
+ min = Math.min(...record[considerField], min);
89014
+ }
89015
+ }
89016
+ }
89017
+ }
88976
89018
  if (!isNaN(max)) {
88977
89019
  fieldRange.max = max;
88978
89020
  fieldRange.min = min;
@@ -89307,12 +89349,10 @@
89307
89349
  if (isResetTree) {
89308
89350
  return this.setRecords(this.records);
89309
89351
  }
89310
- else {
89311
- for (const treeRowKey in this.tree) {
89312
- for (const treeColKey in this.tree[treeRowKey]) {
89313
- for (let i = 0; i < this.tree[treeRowKey][treeColKey].length; i++) {
89314
- this.tree[treeRowKey][treeColKey][i]?.reset();
89315
- }
89352
+ for (const treeRowKey in this.tree) {
89353
+ for (const treeColKey in this.tree[treeRowKey]) {
89354
+ for (let i = 0; i < this.tree[treeRowKey][treeColKey].length; i++) {
89355
+ this.tree[treeRowKey][treeColKey][i]?.reset();
89316
89356
  }
89317
89357
  }
89318
89358
  }
@@ -92662,7 +92702,7 @@
92662
92702
  indicatorSpec?.stack !== false &&
92663
92703
  (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&
92664
92704
  (indicatorSpec.stack = true);
92665
- const yField = indicatorSpec.yField;
92705
+ const yField = indicatorSpec.yField ?? indicatorSpec.maxField;
92666
92706
  collectValuesBy[yField] = {
92667
92707
  by: rowKeys,
92668
92708
  type: indicatorSpec.direction !== 'horizontal' ? 'yField' : undefined,
@@ -92671,7 +92711,10 @@
92671
92711
  ? columnKeys.concat(indicatorSpec?.xField, indicatorSpec?.x2Field)
92672
92712
  : indicatorSpec.stack && columnKeys.concat(indicatorSpec?.xField),
92673
92713
  sortBy: indicatorSpec.direction === 'horizontal' ? indicatorSpec?.data?.fields?.[yField]?.domain : undefined,
92674
- extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)
92714
+ extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine),
92715
+ considerFields: indicatorSpec?.type === 'boxPlot'
92716
+ ? [indicatorSpec.maxField, indicatorSpec.minField, indicatorSpec.outliersField]
92717
+ : undefined
92675
92718
  };
92676
92719
  }
92677
92720
  }
@@ -92724,14 +92767,19 @@
92724
92767
  indicatorSpec?.stack !== false &&
92725
92768
  (indicatorSpec?.type === 'bar' || indicatorSpec?.type === 'area') &&
92726
92769
  (indicatorSpec.stack = true);
92727
- const xField = indicatorSpec.type === 'histogram' ? indicatorSpec.x2Field : indicatorSpec.xField;
92770
+ const xField = indicatorSpec.type === 'histogram'
92771
+ ? indicatorSpec.x2Field
92772
+ : indicatorSpec.xField ?? indicatorSpec.maxField;
92728
92773
  collectValuesBy[xField] = {
92729
92774
  by: columnKeys,
92730
92775
  type: indicatorSpec.direction === 'horizontal' ? 'xField' : undefined,
92731
92776
  range: hasLinearAxis(indicatorSpec, this._axes, indicatorSpec.direction === 'horizontal', true),
92732
92777
  sumBy: indicatorSpec.stack && rowKeys.concat(indicatorSpec?.yField),
92733
92778
  sortBy: indicatorSpec.direction !== 'horizontal' ? indicatorSpec?.data?.fields?.[xField]?.domain : undefined,
92734
- extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine)
92779
+ extendRange: parseMarkLineGetExtendRange(indicatorSpec.markLine),
92780
+ considerFields: indicatorSpec?.type === 'boxPlot'
92781
+ ? [indicatorSpec.maxField, indicatorSpec.minField, indicatorSpec.outliersField]
92782
+ : undefined
92735
92783
  };
92736
92784
  }
92737
92785
  }
@@ -93738,7 +93786,7 @@
93738
93786
  }
93739
93787
 
93740
93788
  registerForVrender();
93741
- const version = "1.22.2";
93789
+ const version = "1.22.3-alpha.0";
93742
93790
  function getIcons() {
93743
93791
  return get$2();
93744
93792
  }