@visactor/vgrammar-plot 0.7.7 → 0.8.0-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/circle-packing.d.ts +1 -1
  2. package/cjs/circle-packing.js.map +1 -1
  3. package/cjs/plot.js +4 -2
  4. package/cjs/plot.js.map +1 -1
  5. package/cjs/sankey.d.ts +1 -1
  6. package/cjs/sankey.js.map +1 -1
  7. package/cjs/semantic-mark.d.ts +44 -13
  8. package/cjs/semantic-mark.js +154 -77
  9. package/cjs/semantic-mark.js.map +1 -1
  10. package/cjs/sunburst.d.ts +6 -3
  11. package/cjs/sunburst.js +4 -1
  12. package/cjs/sunburst.js.map +1 -1
  13. package/cjs/tree.d.ts +1 -1
  14. package/cjs/tree.js.map +1 -1
  15. package/cjs/treemap.d.ts +6 -3
  16. package/cjs/treemap.js +4 -1
  17. package/cjs/treemap.js.map +1 -1
  18. package/cjs/wordcloud-shape.d.ts +5 -2
  19. package/cjs/wordcloud-shape.js +4 -1
  20. package/cjs/wordcloud-shape.js.map +1 -1
  21. package/cjs/wordcloud.d.ts +5 -2
  22. package/cjs/wordcloud.js +4 -1
  23. package/cjs/wordcloud.js.map +1 -1
  24. package/es/circle-packing.d.ts +1 -1
  25. package/es/circle-packing.js.map +1 -1
  26. package/es/plot.js +4 -2
  27. package/es/plot.js.map +1 -1
  28. package/es/sankey.d.ts +1 -1
  29. package/es/sankey.js.map +1 -1
  30. package/es/semantic-mark.d.ts +44 -13
  31. package/es/semantic-mark.js +153 -77
  32. package/es/semantic-mark.js.map +1 -1
  33. package/es/sunburst.d.ts +6 -3
  34. package/es/sunburst.js +4 -1
  35. package/es/sunburst.js.map +1 -1
  36. package/es/tree.d.ts +1 -1
  37. package/es/tree.js.map +1 -1
  38. package/es/treemap.d.ts +6 -3
  39. package/es/treemap.js +4 -1
  40. package/es/treemap.js.map +1 -1
  41. package/es/wordcloud-shape.d.ts +5 -2
  42. package/es/wordcloud-shape.js +4 -1
  43. package/es/wordcloud-shape.js.map +1 -1
  44. package/es/wordcloud.d.ts +5 -2
  45. package/es/wordcloud.js +4 -1
  46. package/es/wordcloud.js.map +1 -1
  47. package/package.json +9 -8
package/cjs/tree.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tree.ts"],"names":[],"mappings":"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","file":"tree.js","sourcesContent":["import type {\n TreeEncodeChannels,\n WithDefaultEncode,\n PlotTreeEncodeSpec,\n SemanticLabelOption,\n MarkSpec,\n ChannelEncodeType,\n DataSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { ITextAttribute } from '@visactor/vrender';\n\nexport class TreeSemanticMark extends SemanticMark<PlotTreeEncodeSpec, TreeEncodeChannels> {\n static readonly type = PlotMakType.tree;\n constructor(id?: string | number) {\n super(PlotMakType.tree, id);\n\n if (!Factory.getTransform(PlotMakType.tree)) {\n this._logger.error(\n `Please add this line of code: import { registerTreeTransforms } from 'vgrammar-hierarchy', \n and run registerTreeTransforms() before use tree`\n );\n }\n\n if (!Factory.getGlyph('treePath')) {\n this._logger.error(\n `Please add this line of code: import { registerTreePathGlyph } from '@visactor/vgrammar-core';\n and run registerTreePathGlyph() before use tree`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.symbol;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: 'tree',\n width: { signal: 'viewWidth' },\n height: { signal: 'viewHeight' },\n nodeKey: this.spec.encode?.node,\n flatten: true\n }\n ];\n }\n\n getDataIdOfLink() {\n return `${this.spec.data?.id ?? this.spec.id}-data-link`;\n }\n\n setMultipleData(): DataSpec[] {\n return [\n {\n id: this.getDataIdOfFiltered(),\n transform: [\n {\n type: 'map',\n all: true,\n callback: (datum: any) => {\n return datum[0].nodes;\n }\n }\n ]\n },\n {\n source: this.getDataIdOfMain(),\n id: this.getDataIdOfLink(),\n transform: [\n {\n type: 'map',\n all: true,\n callback: (datum: any) => {\n // return formatLinkPath(datum[0].links);\n return datum[0].links;\n }\n }\n ]\n }\n ];\n }\n\n parseScaleByEncode(\n channel: TreeEncodeChannels,\n option: ValueOf<WithDefaultEncode<PlotTreeEncodeSpec, TreeEncodeChannels>, TreeEncodeChannels>\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotTreeEncodeSpec, TreeEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotTreeEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotTreeEncodeSpec> = {\n x: { field: 'x' },\n y: { field: 'y' }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return datum?.datum ? scale.scale(colorAccessor(datum.datum[datum.datum.length - 1])) : undefined;\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n protected setLabelTextGetter(\n channel: string,\n option: SemanticLabelOption | boolean\n ): ChannelEncodeType<ITextAttribute['text']> {\n const textGetter = getFieldAccessor(channel);\n return (datum: any, el: IElement, params: any) => {\n return textGetter(datum.datum[datum.datum.length - 1]);\n };\n }\n\n setMainMarkSpec() {\n return { key: 'key' };\n }\n\n setMultiMarksSpec() {\n const label = this.spec.label;\n\n if (!label) {\n return null;\n }\n\n const marks: MarkSpec[] = [];\n\n marks.push({\n type: 'glyph',\n glyphType: 'treePath',\n from: { data: this.getDataIdOfLink() },\n key: 'key',\n zIndex: -1,\n encode: {\n update: {\n x0: { field: 'x0' },\n x1: { field: 'x1' },\n y0: { field: 'y0' },\n y1: { field: 'y1' },\n thickness: 1,\n round: true,\n stroke: '#333'\n }\n }\n });\n\n return marks;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/tree.ts"],"names":[],"mappings":"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","file":"tree.js","sourcesContent":["import type {\n TreeEncodeChannels,\n WithDefaultEncode,\n PlotTreeEncodeSpec,\n SemanticLabelOption,\n MarkSpec,\n ChannelEncodeType,\n DataSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { ITextAttribute } from '@visactor/vrender-core';\n\nexport class TreeSemanticMark extends SemanticMark<PlotTreeEncodeSpec, TreeEncodeChannels> {\n static readonly type = PlotMakType.tree;\n constructor(id?: string | number) {\n super(PlotMakType.tree, id);\n\n if (!Factory.getTransform(PlotMakType.tree)) {\n this._logger.error(\n `Please add this line of code: import { registerTreeTransforms } from 'vgrammar-hierarchy', \n and run registerTreeTransforms() before use tree`\n );\n }\n\n if (!Factory.getGlyph('treePath')) {\n this._logger.error(\n `Please add this line of code: import { registerTreePathGlyph } from '@visactor/vgrammar-core';\n and run registerTreePathGlyph() before use tree`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.symbol;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: 'tree',\n width: { signal: 'viewWidth' },\n height: { signal: 'viewHeight' },\n nodeKey: this.spec.encode?.node,\n flatten: true\n }\n ];\n }\n\n getDataIdOfLink() {\n return `${this.spec.data?.id ?? this.spec.id}-data-link`;\n }\n\n setMultipleData(): DataSpec[] {\n return [\n {\n id: this.getDataIdOfFiltered(),\n transform: [\n {\n type: 'map',\n all: true,\n callback: (datum: any) => {\n return datum[0].nodes;\n }\n }\n ]\n },\n {\n source: this.getDataIdOfMain(),\n id: this.getDataIdOfLink(),\n transform: [\n {\n type: 'map',\n all: true,\n callback: (datum: any) => {\n // return formatLinkPath(datum[0].links);\n return datum[0].links;\n }\n }\n ]\n }\n ];\n }\n\n parseScaleByEncode(\n channel: TreeEncodeChannels,\n option: ValueOf<WithDefaultEncode<PlotTreeEncodeSpec, TreeEncodeChannels>, TreeEncodeChannels>\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotTreeEncodeSpec, TreeEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotTreeEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotTreeEncodeSpec> = {\n x: { field: 'x' },\n y: { field: 'y' }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return datum?.datum ? scale.scale(colorAccessor(datum.datum[datum.datum.length - 1])) : undefined;\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n protected setLabelTextGetter(\n channel: string,\n option: SemanticLabelOption | boolean\n ): ChannelEncodeType<ITextAttribute['text']> {\n const textGetter = getFieldAccessor(channel);\n return (datum: any, el: IElement, params: any) => {\n return textGetter(datum.datum[datum.datum.length - 1]);\n };\n }\n\n setMainMarkSpec() {\n return { key: 'key' };\n }\n\n setMultiMarksSpec() {\n const label = this.spec.label;\n\n if (!label) {\n return null;\n }\n\n const marks: MarkSpec[] = [];\n\n marks.push({\n type: 'glyph',\n glyphType: 'treePath',\n from: { data: this.getDataIdOfLink() },\n key: 'key',\n zIndex: -1,\n encode: {\n update: {\n x0: { field: 'x0' },\n x1: { field: 'x1' },\n y0: { field: 'y0' },\n y1: { field: 'y1' },\n thickness: 1,\n round: true,\n stroke: '#333'\n }\n }\n });\n\n return marks;\n }\n}\n"]}
package/cjs/treemap.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { TreemapEncodeChannels, WithDefaultEncode, PlotTreemapEncodeSpec, GenerateBaseEncodeSpec, Nil, ScaleSpec, ValueOf, TransformSpec, IElement, LabelSpec } from '@visactor/vgrammar-core';
1
+ import type { TreemapEncodeChannels, WithDefaultEncode, PlotTreemapEncodeSpec, GenerateBaseEncodeSpec, Nil, ScaleSpec, ValueOf, TransformSpec, IElement, LabelSpec, InteractionSpec } from '@visactor/vgrammar-core';
2
2
  import { SemanticMark } from './semantic-mark';
3
3
  import { GrammarMarkType } from '@visactor/vgrammar-core';
4
4
  import { PlotMakType } from './enums';
@@ -12,7 +12,10 @@ export declare class TreemapSemanticMark extends SemanticMark<PlotTreemapEncodeS
12
12
  setMainMarkSpec(): {
13
13
  key: string;
14
14
  };
15
- protected parseLabelSpec(): LabelSpec[];
15
+ protected parseLabelSpec(): {
16
+ marks: LabelSpec[];
17
+ interactions: InteractionSpec[];
18
+ };
16
19
  setMultiMarksSpec(): {
17
20
  id: string;
18
21
  type: string;
@@ -30,7 +33,7 @@ export declare class TreemapSemanticMark extends SemanticMark<PlotTreemapEncodeS
30
33
  enter: {
31
34
  textAlign: string;
32
35
  textBaseline: string;
33
- } & Partial<import("@visactor/vrender").ITextGraphicAttribute>;
36
+ } & Partial<import("@visactor/vrender-core").ITextGraphicAttribute>;
34
37
  update: (datum: any, el: IElement, params: any) => {
35
38
  x: number;
36
39
  y: number;
package/cjs/treemap.js CHANGED
@@ -69,7 +69,10 @@ class TreemapSemanticMark extends semantic_mark_1.SemanticMark {
69
69
  };
70
70
  }
71
71
  parseLabelSpec() {
72
- return [];
72
+ return {
73
+ marks: [],
74
+ interactions: []
75
+ };
73
76
  }
74
77
  setMultiMarksSpec() {
75
78
  const label = this.spec.label;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/treemap.ts"],"names":[],"mappings":"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","file":"treemap.js","sourcesContent":["import type {\n TreemapEncodeChannels,\n WithDefaultEncode,\n PlotTreemapEncodeSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement,\n LabelSpec\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory, SIGNAL_VIEW_BOX } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { BaseLabelAttrs } from '@visactor/vrender-components';\n\nexport class TreemapSemanticMark extends SemanticMark<PlotTreemapEncodeSpec, TreemapEncodeChannels> {\n static readonly type = PlotMakType.treemap;\n constructor(id?: string | number) {\n super(PlotMakType.treemap, id);\n\n if (!Factory.getTransform('treemap')) {\n this._logger.error(\n `Please add this line of code: import { registerTreemapTransforms } from 'vgrammar-hierarchy'; \n and run registerTreemapTransforms() before use treemap`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.rect;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: 'treemap',\n width: { signal: 'viewWidth' },\n height: { signal: 'viewHeight' },\n nodeKey: this.spec.encode?.node,\n flatten: true\n }\n ];\n }\n parseScaleByEncode(\n channel: TreemapEncodeChannels,\n option: ValueOf<WithDefaultEncode<PlotTreemapEncodeSpec, TreemapEncodeChannels>, TreemapEncodeChannels>\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotTreemapEncodeSpec, TreemapEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotTreemapEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotTreemapEncodeSpec> = {\n x: { field: 'x0' },\n x1: { field: 'x1' },\n y: { field: 'y0' },\n y1: { field: 'y1' }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return datum?.datum ? scale.scale(colorAccessor(datum.datum[datum.datum.length - 1])) : undefined;\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n setMainMarkSpec() {\n return { key: 'key' };\n }\n\n protected parseLabelSpec(): LabelSpec[] {\n // TODO use arc label in the future\n return [];\n }\n\n setMultiMarksSpec() {\n const label = this.spec.label;\n\n if (!label) {\n return null;\n }\n\n return Object.keys(label).map(key => {\n const textGetter = getFieldAccessor(key);\n return {\n id: `${this.getMarkId()}-text-${key}`,\n type: 'text',\n from: {\n data: this.getDataIdOfFiltered()\n },\n layout: {\n position: 'content',\n skipBeforeLayouted: true\n },\n key: 'flattenIndex',\n dependency: this.viewSpec.scales.map(scale => scale.id).concat(SIGNAL_VIEW_BOX),\n animation: this.convertMarkAnimation(),\n encode: {\n enter: Object.assign(\n {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n (label[key] as Partial<BaseLabelAttrs>).textStyle\n ),\n update: (datum: any, el: IElement, params: any) => {\n return {\n x: datum.labelRect ? (datum.labelRect.x0 + datum.labelRect.x1) / 2 : (datum.x0 + datum.x1) / 2,\n y: datum.labelRect ? (datum.labelRect.y0 + datum.labelRect.y1) / 2 : (datum.y0 + datum.y1) / 2,\n text: textGetter(datum.datum[datum.datum.length - 1])\n };\n }\n }\n };\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/treemap.ts"],"names":[],"mappings":";;;AAcA,mDAA+C;AAE/C,2DAAoF;AACpF,mCAAsC;AACtC,2DAAoE;AAGpE,MAAa,mBAAoB,SAAQ,4BAA0D;IAEjG,YAAY,EAAoB;QAC9B,KAAK,CAAC,mBAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE/B,IAAI,CAAC,uBAAO,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB;+DACuD,CACxD,CAAC;SACH;IACH,CAAC;IAED,WAAW;QACT,OAAO,+BAAe,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,uBAAuB;;QACrB,OAAO;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;gBAC9B,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;gBAChC,OAAO,EAAE,MAAA,IAAI,CAAC,IAAI,CAAC,MAAM,0CAAE,IAAI;gBAC/B,OAAO,EAAE,IAAI;aACd;SACF,CAAC;IACJ,CAAC;IACD,kBAAkB,CAChB,OAA8B,EAC9B,MAAuG;QAEvG,IAAI,OAAO,KAAK,OAAO,EAAE;YACvB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC5B,MAAM,EAAE;oBACN,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE;oBAChC,KAAK,EAAE,MAAgB;iBACxB;gBACD,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;aACzB,CAAC;SACH;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CACf,MAAuE;;QAEvE,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAEzD,MAAM,GAAG,GAA+C;YACtD,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YAClB,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YACnB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YAClB,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;SACpB,CAAC;QAEF,IAAI,WAAW,CAAC,MAAM,EAAE;YACtB,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;SACjC;QAED,IAAI,WAAW,CAAC,KAAK,EAAE;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,aAAa,GAAG,IAAA,qBAAgB,EAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEhE,GAAG,CAAC,IAAI,GAAG,CAAC,KAAU,EAAE,EAAY,EAAE,MAAW,EAAE,EAAE;gBACnD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;gBACnC,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpG,CAAC,CAAC;SACH;aAAM;YACL,GAAG,CAAC,IAAI,GAAG,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,KAAK,0CAAE,IAAI,mCAAI,MAAA,IAAI,CAAC,UAAU,EAAE,0CAAG,CAAC,CAAC,CAAC;SAC5D;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,eAAe;QACb,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAES,cAAc;QAEtB,OAAO,EAAE,KAAK,EAAE,EAAiB,EAAE,YAAY,EAAE,EAAuB,EAAE,CAAC;IAC7E,CAAC;IAED,iBAAiB;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAE9B,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,UAAU,GAAG,IAAA,qBAAgB,EAAC,GAAG,CAAC,CAAC;YACzC,OAAO;gBACL,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,EAAE;gBACrC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE;iBACjC;gBACD,MAAM,EAAE;oBACN,QAAQ,EAAE,SAAS;oBACnB,kBAAkB,EAAE,IAAI;iBACzB;gBACD,GAAG,EAAE,cAAc;gBACnB,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,+BAAe,CAAC;gBAC/E,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE;gBACtC,MAAM,EAAE;oBACN,KAAK,EAAE,MAAM,CAAC,MAAM,CAClB;wBACE,SAAS,EAAE,QAAQ;wBACnB,YAAY,EAAE,QAAQ;qBACvB,EACA,KAAK,CAAC,GAAG,CAA6B,CAAC,SAAS,CAClD;oBACD,MAAM,EAAE,CAAC,KAAU,EAAE,EAAY,EAAE,MAAW,EAAE,EAAE;wBAChD,OAAO;4BACL,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC;4BAC9F,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC;4BAC9F,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;yBACtD,CAAC;oBACJ,CAAC;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;;AA/HH,kDAgIC;AA/HiB,wBAAI,GAAG,mBAAW,CAAC,OAAO,CAAC","file":"treemap.js","sourcesContent":["import type {\n TreemapEncodeChannels,\n WithDefaultEncode,\n PlotTreemapEncodeSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement,\n LabelSpec,\n InteractionSpec\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory, SIGNAL_VIEW_BOX } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { BaseLabelAttrs } from '@visactor/vrender-components';\n\nexport class TreemapSemanticMark extends SemanticMark<PlotTreemapEncodeSpec, TreemapEncodeChannels> {\n static readonly type = PlotMakType.treemap;\n constructor(id?: string | number) {\n super(PlotMakType.treemap, id);\n\n if (!Factory.getTransform('treemap')) {\n this._logger.error(\n `Please add this line of code: import { registerTreemapTransforms } from 'vgrammar-hierarchy'; \n and run registerTreemapTransforms() before use treemap`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.rect;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: 'treemap',\n width: { signal: 'viewWidth' },\n height: { signal: 'viewHeight' },\n nodeKey: this.spec.encode?.node,\n flatten: true\n }\n ];\n }\n parseScaleByEncode(\n channel: TreemapEncodeChannels,\n option: ValueOf<WithDefaultEncode<PlotTreemapEncodeSpec, TreemapEncodeChannels>, TreemapEncodeChannels>\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotTreemapEncodeSpec, TreemapEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotTreemapEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotTreemapEncodeSpec> = {\n x: { field: 'x0' },\n x1: { field: 'x1' },\n y: { field: 'y0' },\n y1: { field: 'y1' }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return datum?.datum ? scale.scale(colorAccessor(datum.datum[datum.datum.length - 1])) : undefined;\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n setMainMarkSpec() {\n return { key: 'key' };\n }\n\n protected parseLabelSpec() {\n // TODO use arc label in the future\n return { marks: [] as LabelSpec[], interactions: [] as InteractionSpec[] };\n }\n\n setMultiMarksSpec() {\n const label = this.spec.label;\n\n if (!label) {\n return null;\n }\n\n return Object.keys(label).map(key => {\n const textGetter = getFieldAccessor(key);\n return {\n id: `${this.getMarkId()}-text-${key}`,\n type: 'text',\n from: {\n data: this.getDataIdOfFiltered()\n },\n layout: {\n position: 'content',\n skipBeforeLayouted: true\n },\n key: 'flattenIndex',\n dependency: this.viewSpec.scales.map(scale => scale.id).concat(SIGNAL_VIEW_BOX),\n animation: this.convertMarkAnimation(),\n encode: {\n enter: Object.assign(\n {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n (label[key] as Partial<BaseLabelAttrs>).textStyle\n ),\n update: (datum: any, el: IElement, params: any) => {\n return {\n x: datum.labelRect ? (datum.labelRect.x0 + datum.labelRect.x1) / 2 : (datum.x0 + datum.x1) / 2,\n y: datum.labelRect ? (datum.labelRect.y0 + datum.labelRect.y1) / 2 : (datum.y0 + datum.y1) / 2,\n text: textGetter(datum.datum[datum.datum.length - 1])\n };\n }\n }\n };\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { WordcloudShapeEncodeChannels, WithDefaultEncode, PlotWordcloudShapeEncodeSpec, GenerateBaseEncodeSpec, Nil, ScaleSpec, ValueOf, TransformSpec, LabelSpec } from '@visactor/vgrammar-core';
1
+ import type { WordcloudShapeEncodeChannels, WithDefaultEncode, PlotWordcloudShapeEncodeSpec, GenerateBaseEncodeSpec, Nil, ScaleSpec, ValueOf, TransformSpec, LabelSpec, InteractionSpec } from '@visactor/vgrammar-core';
2
2
  import { SemanticMark } from './semantic-mark';
3
3
  import { GrammarMarkType } from '@visactor/vgrammar-core';
4
4
  import { PlotMakType } from './enums';
@@ -10,5 +10,8 @@ export declare class WordcloudShapeSemanticMark extends SemanticMark<PlotWordclo
10
10
  protected setMainMarkEnterEncode(): any;
11
11
  parseScaleByEncode(channel: WordcloudShapeEncodeChannels, option: ValueOf<WithDefaultEncode<PlotWordcloudShapeEncodeSpec, WordcloudShapeEncodeChannels>, WordcloudShapeEncodeChannels>): ScaleSpec | Nil;
12
12
  convertMarkEncode(encode: WithDefaultEncode<PlotWordcloudShapeEncodeSpec, WordcloudShapeEncodeChannels>): GenerateBaseEncodeSpec<PlotWordcloudShapeEncodeSpec>;
13
- protected parseLabelSpec(): LabelSpec[];
13
+ protected parseLabelSpec(): {
14
+ marks: LabelSpec[];
15
+ interactions: InteractionSpec[];
16
+ };
14
17
  }
@@ -82,7 +82,10 @@ class WordcloudShapeSemanticMark extends semantic_mark_1.SemanticMark {
82
82
  return res;
83
83
  }
84
84
  parseLabelSpec() {
85
- return [];
85
+ return {
86
+ marks: [],
87
+ interactions: []
88
+ };
86
89
  }
87
90
  }
88
91
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wordcloud-shape.ts"],"names":[],"mappings":"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","file":"wordcloud-shape.js","sourcesContent":["import type {\n WordcloudShapeEncodeChannels,\n WithDefaultEncode,\n PlotWordcloudShapeEncodeSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement,\n LabelSpec\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport { merge } from '@visactor/vutils';\n\nexport class WordcloudShapeSemanticMark extends SemanticMark<\n PlotWordcloudShapeEncodeSpec,\n WordcloudShapeEncodeChannels\n> {\n static readonly type = PlotMakType.wordcloudShape;\n constructor(id?: string | number) {\n super(PlotMakType.wordcloudShape, id);\n\n if (!Factory.getTransform(PlotMakType.wordcloudShape)) {\n this._logger.error(\n `Please add this line of code:\n import { registerWordCloudShapeTransforms } from '@visactor/vgrammar-wordcloud-shape'; \n and run registerWordCloudShapeTransforms() before use wordcloud-shape`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.text;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: 'wordcloudShape',\n size: {\n callback: (params: any) => {\n return [params.viewBox.width(), params.viewBox.height()];\n },\n dependency: ['viewBox']\n },\n colorList: this.getPalette(),\n text: { field: this.spec.encode?.text }\n }\n ];\n }\n\n protected setMainMarkEnterEncode() {\n return merge(\n {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n this.spec.style\n );\n }\n\n parseScaleByEncode(\n channel: WordcloudShapeEncodeChannels,\n option: ValueOf<\n WithDefaultEncode<PlotWordcloudShapeEncodeSpec, WordcloudShapeEncodeChannels>,\n WordcloudShapeEncodeChannels\n >\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotWordcloudShapeEncodeSpec, WordcloudShapeEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotWordcloudShapeEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotWordcloudShapeEncodeSpec> = {\n x: { field: 'x' },\n y: { field: 'y' },\n angle: { field: 'angle' },\n fontSize: { field: 'fontSize' },\n fontStyle: { field: 'fontStyle' },\n fontFamily: { field: 'fontFamily' },\n fontWeight: { field: 'fontWeight' },\n fillOpacity: { field: 'opacity' },\n text: { field: this.spec.encode?.text }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return scale.scale(colorAccessor(datum));\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n protected parseLabelSpec(): LabelSpec[] {\n return [];\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/wordcloud-shape.ts"],"names":[],"mappings":"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","file":"wordcloud-shape.js","sourcesContent":["import type {\n WordcloudShapeEncodeChannels,\n WithDefaultEncode,\n PlotWordcloudShapeEncodeSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement,\n LabelSpec,\n InteractionSpec\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport { merge } from '@visactor/vutils';\n\nexport class WordcloudShapeSemanticMark extends SemanticMark<\n PlotWordcloudShapeEncodeSpec,\n WordcloudShapeEncodeChannels\n> {\n static readonly type = PlotMakType.wordcloudShape;\n constructor(id?: string | number) {\n super(PlotMakType.wordcloudShape, id);\n\n if (!Factory.getTransform(PlotMakType.wordcloudShape)) {\n this._logger.error(\n `Please add this line of code:\n import { registerWordCloudShapeTransforms } from '@visactor/vgrammar-wordcloud-shape'; \n and run registerWordCloudShapeTransforms() before use wordcloud-shape`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.text;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: 'wordcloudShape',\n size: {\n callback: (params: any) => {\n return [params.viewBox.width(), params.viewBox.height()];\n },\n dependency: ['viewBox']\n },\n colorList: this.getPalette(),\n text: { field: this.spec.encode?.text }\n }\n ];\n }\n\n protected setMainMarkEnterEncode() {\n return merge(\n {\n textAlign: 'center',\n textBaseline: 'middle'\n },\n this.spec.style\n );\n }\n\n parseScaleByEncode(\n channel: WordcloudShapeEncodeChannels,\n option: ValueOf<\n WithDefaultEncode<PlotWordcloudShapeEncodeSpec, WordcloudShapeEncodeChannels>,\n WordcloudShapeEncodeChannels\n >\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotWordcloudShapeEncodeSpec, WordcloudShapeEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotWordcloudShapeEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotWordcloudShapeEncodeSpec> = {\n x: { field: 'x' },\n y: { field: 'y' },\n angle: { field: 'angle' },\n fontSize: { field: 'fontSize' },\n fontStyle: { field: 'fontStyle' },\n fontFamily: { field: 'fontFamily' },\n fontWeight: { field: 'fontWeight' },\n fillOpacity: { field: 'opacity' },\n text: { field: this.spec.encode?.text }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return scale.scale(colorAccessor(datum));\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n protected parseLabelSpec() {\n // TODO use arc label in the future\n return { marks: [] as LabelSpec[], interactions: [] as InteractionSpec[] };\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { WordcloudEncodeChannels, WithDefaultEncode, PlotWordcloudEncodeSpec, GenerateBaseEncodeSpec, Nil, ScaleSpec, ValueOf, TransformSpec, LabelSpec } from '@visactor/vgrammar-core';
1
+ import type { WordcloudEncodeChannels, WithDefaultEncode, PlotWordcloudEncodeSpec, GenerateBaseEncodeSpec, Nil, ScaleSpec, ValueOf, TransformSpec, LabelSpec, InteractionSpec } from '@visactor/vgrammar-core';
2
2
  import { SemanticMark } from './semantic-mark';
3
3
  import { GrammarMarkType } from '@visactor/vgrammar-core';
4
4
  import { PlotMakType } from './enums';
@@ -9,5 +9,8 @@ export declare class WordcloudSemanticMark extends SemanticMark<PlotWordcloudEnc
9
9
  setDefaultMarkTransform(): TransformSpec[];
10
10
  parseScaleByEncode(channel: WordcloudEncodeChannels, option: ValueOf<WithDefaultEncode<PlotWordcloudEncodeSpec, WordcloudEncodeChannels>, WordcloudEncodeChannels>): ScaleSpec | Nil;
11
11
  convertMarkEncode(encode: WithDefaultEncode<PlotWordcloudEncodeSpec, WordcloudEncodeChannels>): GenerateBaseEncodeSpec<PlotWordcloudEncodeSpec>;
12
- protected parseLabelSpec(): LabelSpec[];
12
+ protected parseLabelSpec(): {
13
+ marks: LabelSpec[];
14
+ interactions: InteractionSpec[];
15
+ };
13
16
  }
package/cjs/wordcloud.js CHANGED
@@ -72,7 +72,10 @@ class WordcloudSemanticMark extends semantic_mark_1.SemanticMark {
72
72
  return res;
73
73
  }
74
74
  parseLabelSpec() {
75
- return [];
75
+ return {
76
+ marks: [],
77
+ interactions: []
78
+ };
76
79
  }
77
80
  }
78
81
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wordcloud.ts"],"names":[],"mappings":"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","file":"wordcloud.js","sourcesContent":["import type {\n WordcloudEncodeChannels,\n WithDefaultEncode,\n PlotWordcloudEncodeSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement,\n LabelSpec\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\n\nexport class WordcloudSemanticMark extends SemanticMark<PlotWordcloudEncodeSpec, WordcloudEncodeChannels> {\n static readonly type = PlotMakType.wordcloud;\n constructor(id?: string | number) {\n super(PlotMakType.wordcloud, id);\n\n if (!Factory.getTransform(PlotMakType.wordcloud)) {\n this._logger.error(\n `Please add this line of code:\n 'import { registerWordCloudTransforms } from '@visactor/vgrammar-wordcloud'; \n and run registerWordCloudTransforms() before use wordcloud`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.text;\n }\n\n setDefaultMarkTransform(): TransformSpec[] {\n return [\n {\n type: 'wordcloud',\n size: {\n callback: (params: any) => {\n return [params.viewBox.width(), params.viewBox.height()];\n },\n dependency: ['viewBox']\n },\n text: { field: this.spec.encode?.text }\n }\n ];\n }\n parseScaleByEncode(\n channel: WordcloudEncodeChannels,\n option: ValueOf<WithDefaultEncode<PlotWordcloudEncodeSpec, WordcloudEncodeChannels>, WordcloudEncodeChannels>\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotWordcloudEncodeSpec, WordcloudEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotWordcloudEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotWordcloudEncodeSpec> = {\n x: { field: 'x' },\n y: { field: 'y' },\n angle: { field: 'angle' },\n fontSize: { field: 'fontSize' },\n fontStyle: { field: 'fontStyle' },\n fontFamily: { field: 'fontFamily' },\n fontWeight: { field: 'fontWeight' },\n text: { field: this.spec.encode?.text }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return scale.scale(colorAccessor(datum));\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n protected parseLabelSpec(): LabelSpec[] {\n return [];\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/wordcloud.ts"],"names":[],"mappings":"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","file":"wordcloud.js","sourcesContent":["import type {\n WordcloudEncodeChannels,\n WithDefaultEncode,\n PlotWordcloudEncodeSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement,\n LabelSpec,\n InteractionSpec\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\n\nexport class WordcloudSemanticMark extends SemanticMark<PlotWordcloudEncodeSpec, WordcloudEncodeChannels> {\n static readonly type = PlotMakType.wordcloud;\n constructor(id?: string | number) {\n super(PlotMakType.wordcloud, id);\n\n if (!Factory.getTransform(PlotMakType.wordcloud)) {\n this._logger.error(\n `Please add this line of code:\n 'import { registerWordCloudTransforms } from '@visactor/vgrammar-wordcloud'; \n and run registerWordCloudTransforms() before use wordcloud`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.text;\n }\n\n setDefaultMarkTransform(): TransformSpec[] {\n return [\n {\n type: 'wordcloud',\n size: {\n callback: (params: any) => {\n return [params.viewBox.width(), params.viewBox.height()];\n },\n dependency: ['viewBox']\n },\n text: { field: this.spec.encode?.text }\n }\n ];\n }\n parseScaleByEncode(\n channel: WordcloudEncodeChannels,\n option: ValueOf<WithDefaultEncode<PlotWordcloudEncodeSpec, WordcloudEncodeChannels>, WordcloudEncodeChannels>\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotWordcloudEncodeSpec, WordcloudEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotWordcloudEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotWordcloudEncodeSpec> = {\n x: { field: 'x' },\n y: { field: 'y' },\n angle: { field: 'angle' },\n fontSize: { field: 'fontSize' },\n fontStyle: { field: 'fontStyle' },\n fontFamily: { field: 'fontFamily' },\n fontWeight: { field: 'fontWeight' },\n text: { field: this.spec.encode?.text }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return scale.scale(colorAccessor(datum));\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n protected parseLabelSpec() {\n // TODO use arc label in the future\n return { marks: [] as LabelSpec[], interactions: [] as InteractionSpec[] };\n }\n}\n"]}
@@ -2,7 +2,7 @@ import type { GenerateBaseEncodeSpec, Nil, ScaleSpec, ValueOf, TransformSpec, Ch
2
2
  import { SemanticMark } from './semantic-mark';
3
3
  import { GrammarMarkType } from '@visactor/vgrammar-core';
4
4
  import { PlotMakType } from './enums';
5
- import type { ITextAttribute } from '@visactor/vrender';
5
+ import type { ITextAttribute } from '@visactor/vrender-core';
6
6
  export declare class CirclePackingSemanticMark extends SemanticMark<PlotCirclePackingEncodeSpec, CirclepackingEncodeChannels> {
7
7
  static readonly type = PlotMakType.circlePacking;
8
8
  constructor(id?: string | number);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/circle-packing.ts"],"names":[],"mappings":"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","file":"circle-packing.js","sourcesContent":["import type {\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement,\n ChannelEncodeType,\n CirclepackingEncodeChannels,\n WithDefaultEncode,\n PlotCirclePackingEncodeSpec,\n SemanticLabelOption\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { ITextAttribute } from '@visactor/vrender';\n\nexport class CirclePackingSemanticMark extends SemanticMark<PlotCirclePackingEncodeSpec, CirclepackingEncodeChannels> {\n static readonly type = PlotMakType.circlePacking;\n constructor(id?: string | number) {\n super(PlotMakType.circlePacking, id);\n\n if (!Factory.getTransform(PlotMakType.circlePacking)) {\n this._logger.error(\n `Please add this line of code: import { registerCirclePackingTransforms } from '@visactor/vgrammar-hierarchy'; \n and run registerCirclePackingTransforms() before use treemap chart`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.circle;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: PlotMakType.circlePacking,\n width: { signal: 'viewWidth' },\n height: { signal: 'viewHeight' },\n nodeKey: this.spec.encode?.node,\n flatten: true\n }\n ];\n }\n parseScaleByEncode(\n channel: CirclepackingEncodeChannels,\n option: ValueOf<\n WithDefaultEncode<PlotCirclePackingEncodeSpec, CirclepackingEncodeChannels>,\n CirclepackingEncodeChannels\n >\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotCirclePackingEncodeSpec, CirclepackingEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotCirclePackingEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotCirclePackingEncodeSpec> = {\n x: { field: 'x' },\n y: { field: 'y' },\n radius: { field: 'radius' }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return datum?.datum ? scale.scale(colorAccessor(datum.datum[datum.datum.length - 1])) : undefined;\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n setMainMarkSpec() {\n return { key: 'key' };\n }\n\n protected setLabelTextGetter(\n channel: string,\n option: SemanticLabelOption | boolean\n ): ChannelEncodeType<ITextAttribute['text']> {\n const textGetter = getFieldAccessor(channel);\n return (datum: any, el: IElement, params: any) => {\n return textGetter(datum.datum[datum.datum.length - 1]);\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/circle-packing.ts"],"names":[],"mappings":"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","file":"circle-packing.js","sourcesContent":["import type {\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement,\n ChannelEncodeType,\n CirclepackingEncodeChannels,\n WithDefaultEncode,\n PlotCirclePackingEncodeSpec,\n SemanticLabelOption\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { ITextAttribute } from '@visactor/vrender-core';\n\nexport class CirclePackingSemanticMark extends SemanticMark<PlotCirclePackingEncodeSpec, CirclepackingEncodeChannels> {\n static readonly type = PlotMakType.circlePacking;\n constructor(id?: string | number) {\n super(PlotMakType.circlePacking, id);\n\n if (!Factory.getTransform(PlotMakType.circlePacking)) {\n this._logger.error(\n `Please add this line of code: import { registerCirclePackingTransforms } from '@visactor/vgrammar-hierarchy'; \n and run registerCirclePackingTransforms() before use treemap chart`\n );\n }\n }\n\n setMarkType() {\n return GrammarMarkType.circle;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: PlotMakType.circlePacking,\n width: { signal: 'viewWidth' },\n height: { signal: 'viewHeight' },\n nodeKey: this.spec.encode?.node,\n flatten: true\n }\n ];\n }\n parseScaleByEncode(\n channel: CirclepackingEncodeChannels,\n option: ValueOf<\n WithDefaultEncode<PlotCirclePackingEncodeSpec, CirclepackingEncodeChannels>,\n CirclepackingEncodeChannels\n >\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotCirclePackingEncodeSpec, CirclepackingEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotCirclePackingEncodeSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotCirclePackingEncodeSpec> = {\n x: { field: 'x' },\n y: { field: 'y' },\n radius: { field: 'radius' }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return datum?.datum ? scale.scale(colorAccessor(datum.datum[datum.datum.length - 1])) : undefined;\n };\n } else {\n res.fill = this.spec.style?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n setMainMarkSpec() {\n return { key: 'key' };\n }\n\n protected setLabelTextGetter(\n channel: string,\n option: SemanticLabelOption | boolean\n ): ChannelEncodeType<ITextAttribute['text']> {\n const textGetter = getFieldAccessor(channel);\n return (datum: any, el: IElement, params: any) => {\n return textGetter(datum.datum[datum.datum.length - 1]);\n };\n }\n}\n"]}
package/es/plot.js CHANGED
@@ -78,6 +78,7 @@ export class Plot {
78
78
  const spec = {
79
79
  theme: this._theme,
80
80
  data: [],
81
+ interactions: [],
81
82
  marks: [],
82
83
  scales: [],
83
84
  coordinates: [],
@@ -87,14 +88,15 @@ export class Plot {
87
88
  };
88
89
  return this._semanticMarks.forEach((mark => {
89
90
  this._coordinate && mark.coordinate(this._coordinate);
90
- const {data: data, marks: marks, scales: scales, coordinates: coordinates, signals: signals, projections: projections, events: events} = mark.toViewSpec();
91
+ const {data: data, marks: marks, scales: scales, coordinates: coordinates, signals: signals, projections: projections, events: events, interactions: interactions} = mark.toViewSpec();
91
92
  data && data.length && (spec.data = mergeGrammarSpecs(data, spec.data)), marks && marks.length && (spec.marks = spec.marks.concat(marks)),
92
93
  scales && scales.length && (spec.scales = this._mergeScales(scales, spec.scales)),
93
94
  coordinates && coordinates.length && (spec.coordinates = mergeGrammarSpecs(coordinates, spec.coordinates)),
94
95
  signals && signals.length && (spec.signals = spec.signals.concat(signals)), projections && projections.length && (spec.projections = spec.projections.concat(projections)),
95
- events && events.length && (spec.events = spec.events.concat(events));
96
+ events && events.length && (spec.events = spec.events.concat(events)), interactions && interactions.length && (spec.interactions = spec.interactions.concat(interactions));
96
97
  })), spec.marks = [ {
97
98
  type: "group",
99
+ id: "plotContainer",
98
100
  layout: {
99
101
  display: "relative",
100
102
  updateViewSignals: !0
package/es/plot.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plot.ts"],"names":[],"mappings":"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","file":"plot.js","sourcesContent":["import type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type {\n BaseEventHandler,\n IElement,\n IRunningConfig,\n IView,\n MultiScaleData,\n ScaleData,\n ScaleSpec,\n ViewSpec,\n CoordinateOption,\n IPlot,\n IPlotMarkConstructor,\n IPlotOptions,\n PlotMark,\n PlotSpec\n} from '@visactor/vgrammar-core';\nimport type { ILogger } from '@visactor/vutils';\nimport { Logger, isNil, merge } from '@visactor/vutils';\nimport { mergeGrammarSpecs } from './util';\nimport { PlotMakType } from './enums';\nimport { Factory, SIGNAL_VIEW_BOX, View } from '@visactor/vgrammar-core';\n\nexport class Plot implements IPlot {\n static useMarks(marks: IPlotMarkConstructor[]) {\n marks.forEach(mark => {\n Factory.registerPlotMarks(mark.type, mark);\n });\n }\n readonly view: IView;\n private _semanticMarks: PlotMark[];\n private _hasInited?: boolean;\n private _coordinate: CoordinateOption;\n private _logger: ILogger;\n private _theme?: string;\n\n constructor(option?: IPlotOptions) {\n this.view = new View(option);\n this._semanticMarks = [];\n this._logger = Logger.getInstance();\n }\n\n theme(theme: string) {\n this._theme = theme;\n\n this.view.parseSpec({ theme });\n\n return this;\n }\n\n private _mergeScales(scales: ScaleSpec[], prevScales: ScaleSpec[]) {\n return scales.reduce((res, scale) => {\n if (scale.id) {\n const prevIndex = res.findIndex(prev => prev.id === scale.id);\n\n if (prevIndex >= 0) {\n const prevScale = res[prevIndex];\n if ((scale.domain as ScaleData).data && (scale.domain as ScaleData).field) {\n if ((prevScale.domain as ScaleData).data && (prevScale.domain as ScaleData).field) {\n if (\n (scale.domain as ScaleData).data === (prevScale.domain as ScaleData).data &&\n (scale.domain as ScaleData).field !== (prevScale.domain as ScaleData).field\n ) {\n (prevScale.domain as ScaleData).field = []\n .concat((prevScale.domain as ScaleData).field)\n .concat((scale.domain as ScaleData).field);\n } else if ((scale.domain as ScaleData).data !== (prevScale.domain as ScaleData).data) {\n (prevScale.domain as MultiScaleData) = {\n datas: [\n { data: (prevScale.domain as ScaleData).data, field: (prevScale.domain as ScaleData).field },\n { data: (scale.domain as ScaleData).data, field: (scale.domain as ScaleData).field }\n ],\n sort: (prevScale.domain as MultiScaleData).sort\n };\n }\n if (!isNil((scale.domain as ScaleData).sort)) {\n (prevScale.domain as ScaleData).sort = (scale.domain as ScaleData).sort;\n }\n } else if ((prevScale.domain as MultiScaleData).datas) {\n const prevData = (prevScale.domain as MultiScaleData).datas.find(\n entry => entry.data === (scale.domain as ScaleData).data\n );\n\n if (prevData && (scale.domain as ScaleData).field !== prevData.field) {\n prevData.field = [].concat(prevData.field).concat((scale.domain as ScaleData).field);\n } else if (!prevData) {\n (prevScale.domain as MultiScaleData).datas.push({\n data: (scale.domain as ScaleData).data,\n field: (scale.domain as ScaleData).field\n });\n }\n\n if (!isNil((scale.domain as ScaleData).sort)) {\n (prevScale.domain as ScaleData).sort = (scale.domain as ScaleData).sort;\n }\n }\n }\n\n if ((scale as any).userScale) {\n res[prevIndex] = merge(prevScale, (scale as any).userScale);\n }\n } else {\n (scale as any).userScale = null;\n res.push(scale);\n }\n }\n\n return res;\n }, prevScales);\n }\n\n protected parseViewSpec() {\n const spec: ViewSpec = {\n theme: this._theme,\n data: [],\n marks: [],\n scales: [],\n coordinates: [],\n signals: [],\n projections: [],\n events: []\n };\n\n this._semanticMarks.forEach(mark => {\n if (this._coordinate) {\n mark.coordinate(this._coordinate);\n }\n const { data, marks, scales, coordinates, signals, projections, events } = mark.toViewSpec();\n\n if (data && data.length) {\n spec.data = mergeGrammarSpecs(data, spec.data);\n }\n if (marks && marks.length) {\n spec.marks = spec.marks.concat(marks);\n }\n\n if (scales && scales.length) {\n // todo: optimize the following code of combine scales\n spec.scales = this._mergeScales(scales, spec.scales);\n }\n if (coordinates && coordinates.length) {\n spec.coordinates = mergeGrammarSpecs(coordinates, spec.coordinates);\n }\n if (signals && signals.length) {\n spec.signals = spec.signals.concat(signals);\n }\n if (projections && projections.length) {\n spec.projections = spec.projections.concat(projections);\n }\n if (events && events.length) {\n spec.events = spec.events.concat(events);\n }\n });\n\n spec.marks = [\n {\n type: 'group',\n layout: {\n display: 'relative',\n updateViewSignals: true\n },\n dependency: [SIGNAL_VIEW_BOX],\n encode: {\n update: (datum: any, elment: IElement, params: any) => {\n return {\n x: params.viewBox.x1,\n y: params.viewBox.y1,\n width: params.viewBox.width(),\n height: params.viewBox.height()\n };\n }\n },\n marks: spec.marks\n }\n ];\n\n return spec;\n }\n run(morphConfig?: IRunningConfig) {\n if (this.view) {\n if (!this._hasInited) {\n this.view.parseSpec(this.parseViewSpec());\n } else {\n this.view.updateSpec(this.parseViewSpec());\n }\n this._hasInited = true;\n\n this.view.runSync(morphConfig);\n }\n\n return this;\n }\n\n async runAsync(morphConfig?: IRunningConfig) {\n if (this.view) {\n if (!this._hasInited) {\n this.view.parseSpec(this.parseViewSpec());\n } else {\n this.view.updateSpec(this.parseViewSpec());\n }\n this._hasInited = true;\n\n await this.view.runAsync(morphConfig);\n }\n\n return this;\n }\n\n release() {\n if (this.view) {\n this.view.release();\n }\n\n return this;\n }\n\n updateSpec(spec: PlotSpec) {\n this.parseSpec(spec, true);\n return this;\n }\n parseSpec(spec: PlotSpec, isUpdate?: boolean) {\n if (spec.coordinate) {\n this.coordinate(spec.coordinate.type, spec.coordinate);\n }\n\n if (spec?.marks?.length) {\n spec.marks.forEach(mark => {\n const plotMark: PlotMark = Factory.createPlotMark(mark.type);\n plotMark.parseSpec(mark as any);\n\n this._semanticMarks.push(plotMark);\n });\n }\n\n const viewSpec = this.parseViewSpec();\n viewSpec.width = spec.width;\n viewSpec.height = spec.height;\n viewSpec.background = spec.background;\n viewSpec.padding = spec.padding;\n\n if (isUpdate) {\n this.view.updateSpec(viewSpec);\n } else {\n this.view.parseSpec(viewSpec);\n }\n this._hasInited = true;\n\n return this;\n }\n\n getImageBuffer() {\n return this.view?.getImageBuffer?.();\n }\n\n on(type: string, handler: BaseEventHandler) {\n if (this.view) {\n this.view.addEventListener(type, handler);\n }\n return this;\n }\n off(type: string, handler?: BaseEventHandler) {\n if (this.view) {\n this.view.removeEventListener(type, handler);\n }\n return this;\n }\n\n protected getCoordinateId(viewId: string | number = '0') {\n return `coordinate-${viewId}`;\n }\n\n coordinate(type: CoordinateType, spec?: Omit<CoordinateOption, 'type'>) {\n this._coordinate = Object.assign({ type, id: this.getCoordinateId() }, spec);\n\n return this;\n }\n\n interval() {\n const mark = Factory.createPlotMark(PlotMakType.interval);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.interval} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n line() {\n const mark = Factory.createPlotMark(PlotMakType.line);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.line} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n area() {\n const mark = Factory.createPlotMark(PlotMakType.area);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.area} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n cell() {\n const mark = Factory.createPlotMark(PlotMakType.cell);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.cell} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n ruleX() {\n const mark = Factory.createPlotMark(PlotMakType.ruleX);\n\n if (!mark) {\n this._logger.error(`Please register ${this.ruleX} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n ruleY() {\n const mark = Factory.createPlotMark(PlotMakType.ruleY);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.ruleY} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n image() {\n const mark = Factory.createPlotMark(PlotMakType.image);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.image} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n path() {\n const mark = Factory.createPlotMark(PlotMakType.path);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.path} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n polygon() {\n const mark = Factory.createPlotMark(PlotMakType.polygon);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.polygon} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n rectX() {\n const mark = Factory.createPlotMark(PlotMakType.rectX);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.rectX} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n rectY() {\n const mark = Factory.createPlotMark(PlotMakType.rectY);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.rectY} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n rect() {\n const mark = Factory.createPlotMark(PlotMakType.rect);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.rect} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n rule() {\n const mark = Factory.createPlotMark(PlotMakType.rule);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.rule} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n symbol() {\n const mark = Factory.createPlotMark(PlotMakType.symbol);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.symbol} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n text() {\n const mark = Factory.createPlotMark(PlotMakType.text);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.text} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n sankey() {\n const mark = Factory.createPlotMark(PlotMakType.sankey);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.sankey} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n sunburst() {\n const mark = Factory.createPlotMark(PlotMakType.sunburst);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.sunburst} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n tree() {\n const mark = Factory.createPlotMark(PlotMakType.tree);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.tree} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n treemap() {\n const mark = Factory.createPlotMark(PlotMakType.treemap);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.treemap} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n circlePacking() {\n const mark = Factory.createPlotMark(PlotMakType.circlePacking);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.circlePacking} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n wordcloud() {\n const mark = Factory.createPlotMark(PlotMakType.wordcloud);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.wordcloud} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n wordcloudShape() {\n const mark = Factory.createPlotMark(PlotMakType.wordcloudShape);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.wordcloudShape} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/plot.ts"],"names":[],"mappings":"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","file":"plot.js","sourcesContent":["import type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type {\n BaseEventHandler,\n IElement,\n IRunningConfig,\n IView,\n MultiScaleData,\n ScaleData,\n ScaleSpec,\n ViewSpec,\n CoordinateOption,\n IPlot,\n IPlotMarkConstructor,\n IPlotOptions,\n PlotMark,\n PlotSpec\n} from '@visactor/vgrammar-core';\nimport type { ILogger } from '@visactor/vutils';\nimport { Logger, isNil, merge } from '@visactor/vutils';\nimport { mergeGrammarSpecs } from './util';\nimport { PlotMakType } from './enums';\nimport { Factory, SIGNAL_VIEW_BOX, View } from '@visactor/vgrammar-core';\n\nexport class Plot implements IPlot {\n static useMarks(marks: IPlotMarkConstructor[]) {\n marks.forEach(mark => {\n Factory.registerPlotMarks(mark.type, mark);\n });\n }\n readonly view: IView;\n private _semanticMarks: PlotMark[];\n private _hasInited?: boolean;\n private _coordinate: CoordinateOption;\n private _logger: ILogger;\n private _theme?: string;\n\n constructor(option?: IPlotOptions) {\n this.view = new View(option);\n this._semanticMarks = [];\n this._logger = Logger.getInstance();\n }\n\n theme(theme: string) {\n this._theme = theme;\n\n this.view.parseSpec({ theme });\n\n return this;\n }\n\n private _mergeScales(scales: ScaleSpec[], prevScales: ScaleSpec[]) {\n return scales.reduce((res, scale) => {\n if (scale.id) {\n const prevIndex = res.findIndex(prev => prev.id === scale.id);\n\n if (prevIndex >= 0) {\n const prevScale = res[prevIndex];\n if ((scale.domain as ScaleData).data && (scale.domain as ScaleData).field) {\n if ((prevScale.domain as ScaleData).data && (prevScale.domain as ScaleData).field) {\n if (\n (scale.domain as ScaleData).data === (prevScale.domain as ScaleData).data &&\n (scale.domain as ScaleData).field !== (prevScale.domain as ScaleData).field\n ) {\n (prevScale.domain as ScaleData).field = []\n .concat((prevScale.domain as ScaleData).field)\n .concat((scale.domain as ScaleData).field);\n } else if ((scale.domain as ScaleData).data !== (prevScale.domain as ScaleData).data) {\n (prevScale.domain as MultiScaleData) = {\n datas: [\n { data: (prevScale.domain as ScaleData).data, field: (prevScale.domain as ScaleData).field },\n { data: (scale.domain as ScaleData).data, field: (scale.domain as ScaleData).field }\n ],\n sort: (prevScale.domain as MultiScaleData).sort\n };\n }\n if (!isNil((scale.domain as ScaleData).sort)) {\n (prevScale.domain as ScaleData).sort = (scale.domain as ScaleData).sort;\n }\n } else if ((prevScale.domain as MultiScaleData).datas) {\n const prevData = (prevScale.domain as MultiScaleData).datas.find(\n entry => entry.data === (scale.domain as ScaleData).data\n );\n\n if (prevData && (scale.domain as ScaleData).field !== prevData.field) {\n prevData.field = [].concat(prevData.field).concat((scale.domain as ScaleData).field);\n } else if (!prevData) {\n (prevScale.domain as MultiScaleData).datas.push({\n data: (scale.domain as ScaleData).data,\n field: (scale.domain as ScaleData).field\n });\n }\n\n if (!isNil((scale.domain as ScaleData).sort)) {\n (prevScale.domain as ScaleData).sort = (scale.domain as ScaleData).sort;\n }\n }\n }\n\n if ((scale as any).userScale) {\n res[prevIndex] = merge(prevScale, (scale as any).userScale);\n }\n } else {\n (scale as any).userScale = null;\n res.push(scale);\n }\n }\n\n return res;\n }, prevScales);\n }\n\n protected parseViewSpec() {\n const spec: ViewSpec = {\n theme: this._theme,\n data: [],\n interactions: [],\n marks: [],\n scales: [],\n coordinates: [],\n signals: [],\n projections: [],\n events: []\n };\n\n this._semanticMarks.forEach(mark => {\n if (this._coordinate) {\n mark.coordinate(this._coordinate);\n }\n const { data, marks, scales, coordinates, signals, projections, events, interactions } = mark.toViewSpec();\n\n if (data && data.length) {\n spec.data = mergeGrammarSpecs(data, spec.data);\n }\n if (marks && marks.length) {\n spec.marks = spec.marks.concat(marks);\n }\n\n if (scales && scales.length) {\n // todo: optimize the following code of combine scales\n spec.scales = this._mergeScales(scales, spec.scales);\n }\n if (coordinates && coordinates.length) {\n spec.coordinates = mergeGrammarSpecs(coordinates, spec.coordinates);\n }\n if (signals && signals.length) {\n spec.signals = spec.signals.concat(signals);\n }\n if (projections && projections.length) {\n spec.projections = spec.projections.concat(projections);\n }\n if (events && events.length) {\n spec.events = spec.events.concat(events);\n }\n if (interactions && interactions.length) {\n spec.interactions = spec.interactions.concat(interactions);\n }\n });\n\n spec.marks = [\n {\n type: 'group',\n id: 'plotContainer',\n layout: {\n display: 'relative',\n updateViewSignals: true\n },\n dependency: [SIGNAL_VIEW_BOX],\n encode: {\n update: (datum: any, elment: IElement, params: any) => {\n return {\n x: params.viewBox.x1,\n y: params.viewBox.y1,\n width: params.viewBox.width(),\n height: params.viewBox.height()\n };\n }\n },\n marks: spec.marks\n }\n ];\n\n return spec;\n }\n run(morphConfig?: IRunningConfig) {\n if (this.view) {\n if (!this._hasInited) {\n this.view.parseSpec(this.parseViewSpec());\n } else {\n this.view.updateSpec(this.parseViewSpec());\n }\n this._hasInited = true;\n\n this.view.runSync(morphConfig);\n }\n\n return this;\n }\n\n async runAsync(morphConfig?: IRunningConfig) {\n if (this.view) {\n if (!this._hasInited) {\n this.view.parseSpec(this.parseViewSpec());\n } else {\n this.view.updateSpec(this.parseViewSpec());\n }\n this._hasInited = true;\n\n await this.view.runAsync(morphConfig);\n }\n\n return this;\n }\n\n release() {\n if (this.view) {\n this.view.release();\n }\n\n return this;\n }\n\n updateSpec(spec: PlotSpec) {\n this.parseSpec(spec, true);\n return this;\n }\n parseSpec(spec: PlotSpec, isUpdate?: boolean) {\n if (spec.coordinate) {\n this.coordinate(spec.coordinate.type, spec.coordinate);\n }\n\n if (spec?.marks?.length) {\n spec.marks.forEach(mark => {\n const plotMark: PlotMark = Factory.createPlotMark(mark.type);\n plotMark.parseSpec(mark as any);\n\n this._semanticMarks.push(plotMark);\n });\n }\n\n const viewSpec = this.parseViewSpec();\n viewSpec.width = spec.width;\n viewSpec.height = spec.height;\n viewSpec.background = spec.background;\n viewSpec.padding = spec.padding;\n\n if (isUpdate) {\n this.view.updateSpec(viewSpec);\n } else {\n this.view.parseSpec(viewSpec);\n }\n this._hasInited = true;\n\n return this;\n }\n\n getImageBuffer() {\n return this.view?.getImageBuffer?.();\n }\n\n on(type: string, handler: BaseEventHandler) {\n if (this.view) {\n this.view.addEventListener(type, handler);\n }\n return this;\n }\n off(type: string, handler?: BaseEventHandler) {\n if (this.view) {\n this.view.removeEventListener(type, handler);\n }\n return this;\n }\n\n protected getCoordinateId(viewId: string | number = '0') {\n return `coordinate-${viewId}`;\n }\n\n coordinate(type: CoordinateType, spec?: Omit<CoordinateOption, 'type'>) {\n this._coordinate = Object.assign({ type, id: this.getCoordinateId() }, spec);\n\n return this;\n }\n\n interval() {\n const mark = Factory.createPlotMark(PlotMakType.interval);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.interval} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n line() {\n const mark = Factory.createPlotMark(PlotMakType.line);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.line} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n area() {\n const mark = Factory.createPlotMark(PlotMakType.area);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.area} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n cell() {\n const mark = Factory.createPlotMark(PlotMakType.cell);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.cell} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n ruleX() {\n const mark = Factory.createPlotMark(PlotMakType.ruleX);\n\n if (!mark) {\n this._logger.error(`Please register ${this.ruleX} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n ruleY() {\n const mark = Factory.createPlotMark(PlotMakType.ruleY);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.ruleY} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n image() {\n const mark = Factory.createPlotMark(PlotMakType.image);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.image} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n path() {\n const mark = Factory.createPlotMark(PlotMakType.path);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.path} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n polygon() {\n const mark = Factory.createPlotMark(PlotMakType.polygon);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.polygon} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n rectX() {\n const mark = Factory.createPlotMark(PlotMakType.rectX);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.rectX} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n rectY() {\n const mark = Factory.createPlotMark(PlotMakType.rectY);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.rectY} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n rect() {\n const mark = Factory.createPlotMark(PlotMakType.rect);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.rect} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n rule() {\n const mark = Factory.createPlotMark(PlotMakType.rule);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.rule} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n symbol() {\n const mark = Factory.createPlotMark(PlotMakType.symbol);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.symbol} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n text() {\n const mark = Factory.createPlotMark(PlotMakType.text);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.text} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n sankey() {\n const mark = Factory.createPlotMark(PlotMakType.sankey);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.sankey} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n sunburst() {\n const mark = Factory.createPlotMark(PlotMakType.sunburst);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.sunburst} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n tree() {\n const mark = Factory.createPlotMark(PlotMakType.tree);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.tree} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n treemap() {\n const mark = Factory.createPlotMark(PlotMakType.treemap);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.treemap} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n circlePacking() {\n const mark = Factory.createPlotMark(PlotMakType.circlePacking);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.circlePacking} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n wordcloud() {\n const mark = Factory.createPlotMark(PlotMakType.wordcloud);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.wordcloud} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n\n wordcloudShape() {\n const mark = Factory.createPlotMark(PlotMakType.wordcloudShape);\n\n if (!mark) {\n this._logger.error(`Please register ${PlotMakType.wordcloudShape} before use it`);\n } else {\n this._semanticMarks.push(mark);\n }\n\n return mark;\n }\n}\n"]}
package/es/sankey.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { SankeyEncodeChannels, WithDefaultEncode, PlotSankeyEncoderSpec, Se
2
2
  import { SemanticMark } from './semantic-mark';
3
3
  import { GrammarMarkType } from '@visactor/vgrammar-core';
4
4
  import { PlotMakType } from './enums';
5
- import type { ITextAttribute } from '@visactor/vrender';
5
+ import type { ITextAttribute } from '@visactor/vrender-core';
6
6
  export declare class SankeySemanticMark extends SemanticMark<PlotSankeyEncoderSpec, SankeyEncodeChannels> {
7
7
  static readonly type = PlotMakType.sankey;
8
8
  constructor(id?: string | number);
package/es/sankey.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sankey.ts"],"names":[],"mappings":"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","file":"sankey.js","sourcesContent":["import type {\n SankeyEncodeChannels,\n WithDefaultEncode,\n PlotSankeyEncoderSpec,\n SemanticLabelOption,\n ChannelEncodeType,\n DataSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, SIGNAL_VIEW_BOX, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { ITextAttribute } from '@visactor/vrender';\n\nexport class SankeySemanticMark extends SemanticMark<PlotSankeyEncoderSpec, SankeyEncodeChannels> {\n static readonly type = PlotMakType.sankey;\n constructor(id?: string | number) {\n super(PlotMakType.sankey, id);\n\n if (!Factory.getTransform(PlotMakType.sankey)) {\n this._logger.error(\n `Please add this line of code: import { registerSankeyTransforms } from '@visactor/vgrammar-sankey'; \n and run registerSankeyTransforms() before use sankey`\n );\n }\n\n if (!Factory.getGlyph('linkPath')) {\n this._logger.error(`\n Please add this line of code: import { registerLinkPathGlyph } from '@visactor/vgrammar-core';\n add run registerLinkPathGlyph() before use sankey\n `);\n }\n }\n\n setMarkType() {\n return GrammarMarkType.rect;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: 'sankey',\n width: { signal: 'viewWidth' },\n height: { signal: 'viewHeight' },\n nodeKey: this.spec.encode?.node\n }\n ];\n }\n\n getDataIdOfLink() {\n return `${this.spec.data?.id ?? this.spec.id}-data-link`;\n }\n\n setMultipleData(): DataSpec[] {\n return [\n {\n id: this.getDataIdOfFiltered(),\n transform: [\n {\n type: 'map',\n all: true,\n callback: (datum: any) => {\n return datum[0].nodes;\n }\n }\n ]\n },\n {\n source: this.getDataIdOfMain(),\n id: this.getDataIdOfLink(),\n transform: [\n {\n type: 'map',\n all: true,\n callback: (datum: any) => {\n // return formatLinkPath(datum[0].links);\n return datum[0].links;\n }\n }\n ]\n }\n ];\n }\n\n parseScaleByEncode(\n channel: SankeyEncodeChannels,\n option: ValueOf<WithDefaultEncode<PlotSankeyEncoderSpec, SankeyEncodeChannels>, SankeyEncodeChannels>\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotSankeyEncoderSpec, SankeyEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotSankeyEncoderSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotSankeyEncoderSpec> = {\n x: { field: 'x0' },\n x1: { field: 'x1' },\n y: { field: 'y0' },\n y1: { field: 'y1' }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return scale.scale(colorAccessor(datum?.datum));\n };\n } else {\n res.fill = this.spec.style?.nodeStyle?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n setMainMarkSpec() {\n return { key: 'key' };\n }\n\n protected setLabelTextGetter(\n channel: string,\n option: SemanticLabelOption | boolean\n ): ChannelEncodeType<ITextAttribute['text']> {\n const textGetter = getFieldAccessor(channel);\n return (datum: any, el: IElement, params: any) => {\n return textGetter(datum.datum);\n };\n }\n\n setMultiMarksSpec() {\n // TODO: optimize the default style\n return [\n {\n id: `${this.getMarkId()}-link`,\n type: 'glyph',\n glyphType: 'linkPath',\n from: {\n data: this.getDataIdOfLink()\n },\n layout: {\n position: 'content',\n skipBeforeLayouted: true\n },\n key: 'index',\n dependency: this.viewSpec.scales.map(scale => scale.id).concat(SIGNAL_VIEW_BOX),\n animation: this.convertMarkAnimation(),\n encode: Object.assign({}, this.spec.state, {\n enter: Object.assign(\n {\n backgroundStyle: { fillColor: '#ccc', fillOpacity: 0.2 },\n fillOpacity: 0.8,\n round: true\n },\n this.spec.style?.linkStyle\n ),\n update: (datum: any, el: IElement, params: any) => {\n return {\n direction: datum.vertical ? 'vertical' : 'horizontal',\n x0: datum.x0,\n x1: datum.x1,\n y0: datum.y0,\n y1: datum.y1,\n thickness: datum.thickness,\n fill: this.spec.style?.linkStyle?.fill ?? this.getPalette()?.[0]\n };\n }\n })\n }\n ];\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/sankey.ts"],"names":[],"mappings":"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","file":"sankey.js","sourcesContent":["import type {\n SankeyEncodeChannels,\n WithDefaultEncode,\n PlotSankeyEncoderSpec,\n SemanticLabelOption,\n ChannelEncodeType,\n DataSpec,\n GenerateBaseEncodeSpec,\n GenerateEncoderSpec,\n Nil,\n ScaleSpec,\n ValueOf,\n TransformSpec,\n IElement\n} from '@visactor/vgrammar-core';\nimport { SemanticMark } from './semantic-mark';\n// eslint-disable-next-line no-duplicate-imports\nimport { GrammarMarkType, SIGNAL_VIEW_BOX, Factory } from '@visactor/vgrammar-core';\nimport { PlotMakType } from './enums';\nimport { field as getFieldAccessor } from '@visactor/vgrammar-util';\nimport type { ITextAttribute } from '@visactor/vrender-core';\n\nexport class SankeySemanticMark extends SemanticMark<PlotSankeyEncoderSpec, SankeyEncodeChannels> {\n static readonly type = PlotMakType.sankey;\n constructor(id?: string | number) {\n super(PlotMakType.sankey, id);\n\n if (!Factory.getTransform(PlotMakType.sankey)) {\n this._logger.error(\n `Please add this line of code: import { registerSankeyTransforms } from '@visactor/vgrammar-sankey'; \n and run registerSankeyTransforms() before use sankey`\n );\n }\n\n if (!Factory.getGlyph('linkPath')) {\n this._logger.error(`\n Please add this line of code: import { registerLinkPathGlyph } from '@visactor/vgrammar-core';\n add run registerLinkPathGlyph() before use sankey\n `);\n }\n }\n\n setMarkType() {\n return GrammarMarkType.rect;\n }\n\n setDefaultDataTransform(): TransformSpec[] {\n return [\n {\n type: 'sankey',\n width: { signal: 'viewWidth' },\n height: { signal: 'viewHeight' },\n nodeKey: this.spec.encode?.node\n }\n ];\n }\n\n getDataIdOfLink() {\n return `${this.spec.data?.id ?? this.spec.id}-data-link`;\n }\n\n setMultipleData(): DataSpec[] {\n return [\n {\n id: this.getDataIdOfFiltered(),\n transform: [\n {\n type: 'map',\n all: true,\n callback: (datum: any) => {\n return datum[0].nodes;\n }\n }\n ]\n },\n {\n source: this.getDataIdOfMain(),\n id: this.getDataIdOfLink(),\n transform: [\n {\n type: 'map',\n all: true,\n callback: (datum: any) => {\n // return formatLinkPath(datum[0].links);\n return datum[0].links;\n }\n }\n ]\n }\n ];\n }\n\n parseScaleByEncode(\n channel: SankeyEncodeChannels,\n option: ValueOf<WithDefaultEncode<PlotSankeyEncoderSpec, SankeyEncodeChannels>, SankeyEncodeChannels>\n ): ScaleSpec | Nil {\n if (channel === 'color') {\n return {\n type: 'ordinal',\n id: this.getScaleId('color'),\n domain: {\n data: this.getDataIdOfFiltered(),\n field: option as string\n },\n range: this.getPalette()\n };\n }\n\n return null;\n }\n\n convertMarkEncode(\n encode: WithDefaultEncode<PlotSankeyEncoderSpec, SankeyEncodeChannels>\n ): GenerateBaseEncodeSpec<PlotSankeyEncoderSpec> {\n const markEncoder = this.convertSimpleMarkEncode(encode);\n\n const res: GenerateEncoderSpec<PlotSankeyEncoderSpec> = {\n x: { field: 'x0' },\n x1: { field: 'x1' },\n y: { field: 'y0' },\n y1: { field: 'y1' }\n };\n\n if (markEncoder.stroke) {\n res.stroke = markEncoder.stroke;\n }\n\n if (markEncoder.color) {\n const scaleColorId = this.getScaleId('color');\n const colorAccessor = getFieldAccessor(markEncoder.color.field);\n\n res.fill = (datum: any, el: IElement, params: any) => {\n const scale = params[scaleColorId];\n return scale.scale(colorAccessor(datum?.datum));\n };\n } else {\n res.fill = this.spec.style?.nodeStyle?.fill ?? this.getPalette()?.[0];\n }\n\n return res;\n }\n\n setMainMarkSpec() {\n return { key: 'key' };\n }\n\n protected setLabelTextGetter(\n channel: string,\n option: SemanticLabelOption | boolean\n ): ChannelEncodeType<ITextAttribute['text']> {\n const textGetter = getFieldAccessor(channel);\n return (datum: any, el: IElement, params: any) => {\n return textGetter(datum.datum);\n };\n }\n\n setMultiMarksSpec() {\n // TODO: optimize the default style\n return [\n {\n id: `${this.getMarkId()}-link`,\n type: 'glyph',\n glyphType: 'linkPath',\n from: {\n data: this.getDataIdOfLink()\n },\n layout: {\n position: 'content',\n skipBeforeLayouted: true\n },\n key: 'index',\n dependency: this.viewSpec.scales.map(scale => scale.id).concat(SIGNAL_VIEW_BOX),\n animation: this.convertMarkAnimation(),\n encode: Object.assign({}, this.spec.state, {\n enter: Object.assign(\n {\n backgroundStyle: { fillColor: '#ccc', fillOpacity: 0.2 },\n fillOpacity: 0.8,\n round: true\n },\n this.spec.style?.linkStyle\n ),\n update: (datum: any, el: IElement, params: any) => {\n return {\n direction: datum.vertical ? 'vertical' : 'horizontal',\n x0: datum.x0,\n x1: datum.x1,\n y0: datum.y0,\n y1: datum.y1,\n thickness: datum.thickness,\n fill: this.spec.style?.linkStyle?.fill ?? this.getPalette()?.[0]\n };\n }\n })\n }\n ];\n }\n}\n"]}