{"version":3,"file":"connected-area.js","sourceRoot":"","sources":["../../src/adaptor/connected-area.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,mBAAmB,EAAc,MAAM,UAAU,CAAC;AAepE,IAAM,eAAe,GAAG;IACtB,KAAK,EAAE,mCAAmC;IAC1C,KAAK,EAAE,mCAAmC;CAC3C,CAAC;AAEF,IAAM,cAAc,GAAG,UAAC,OAAe,EAAE,KAAqC;IAC5E,IAAI,OAAO,KAAK,OAAO,EAAE;QACvB,OAAO;YACL;gBACE,OAAO,EAAE,qBAAqB;gBAC9B,MAAM,EAAE,CAAC,sCAAsC,EAAE,4BAA4B,CAAC;gBAC9E,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,OAAA,EAAE,CAAC;aACvB;SACF,CAAC;KACH;IACD,OAAO;QACL;YACE,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE;gBACN,kCAAkC;gBAClC,sCAAsC;gBACtC,6BAA6B;gBAC7B,8BAA8B;gBAC9B,4BAA4B;aAC7B;YACD,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,OAAA,EAAE,CAAC;SACzC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,sBAAsB;AACtB,mBAAmB,CAAC,eAAe,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC;IAC5C,GAAG,EAAE;QACH;YACE,OAAO,EAAE,qBAAqB;YAC9B,MAAM,EAAE,CAAC,kCAAkC,EAAE,8BAA8B,CAAC;SAC7E;KACF;CACF,CAAC,CAAC;AAEH,sBAAsB;AACtB,mBAAmB,CAAC,eAAe,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC;IAC5C,GAAG,EAAE;QACH;YACE,OAAO,EAAE,oBAAoB;YAC7B,MAAM,EAAE,CAAC,kCAAkC,EAAE,6BAA6B,CAAC;SAC5E;KACF;CACF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAoC,OAAe;IAAf,wBAAA,EAAA,eAAe;IAC9E,OAAO,UAAU,MAAiB;QACxB,IAAA,KAAK,GAAc,MAAM,MAApB,EAAE,OAAO,GAAK,MAAM,QAAX,CAAY;QAC1B,IAAA,aAAa,GAAK,OAAO,cAAZ,CAAa;QAElC,IAAM,KAAK,GAAG;YACZ,KAAK,CAAC,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC/C,KAAK,CAAC,iBAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,IAAI,CAAC,OAAO,IAAI,aAAa,EAAE;YAC7B,IAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC;YACjD,KAAK,EAAE,CAAC;YACR,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE;gBAC1C,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC;aACpD,CAAC,CAAC;SACJ;aAAM;YACL,KAAK,EAAE,CAAC;SACT;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { Element, registerInteraction, ShapeAttrs } from '@antv/g2';\nimport { Params } from '../core/adaptor';\n\nexport interface ConnectedAreaOptions {\n /** 触发方式, 默认 hover */\n trigger?: 'hover' | 'click';\n /** 自定义样式 */\n style?: ShapeAttrs | ((style: ShapeAttrs, element: Element) => ShapeAttrs);\n}\n\n/** 联通区域组件:使用于堆叠柱形图、堆叠条形图 */\nexport interface OptionWithConnectedArea {\n connectedArea?: ConnectedAreaOptions | false;\n}\n\nconst INTERACTION_MAP = {\n hover: '__interval-connected-area-hover__',\n click: '__interval-connected-area-click__',\n};\n\nconst getStartStages = (trigger: string, style?: ConnectedAreaOptions['style']) => {\n if (trigger === 'hover') {\n return [\n {\n trigger: `interval:mouseenter`,\n action: ['element-highlight-by-color:highlight', 'element-link-by-color:link'],\n arg: [null, { style }],\n },\n ];\n }\n return [\n {\n trigger: `interval:click`,\n action: [\n 'element-highlight-by-color:clear',\n 'element-highlight-by-color:highlight',\n 'element-link-by-color:clear',\n 'element-link-by-color:unlink',\n 'element-link-by-color:link',\n ],\n arg: [null, null, null, null, { style }],\n },\n ];\n};\n\n/** hover 触发的连通区域交互 */\nregisterInteraction(INTERACTION_MAP.hover, {\n start: getStartStages(INTERACTION_MAP.hover),\n end: [\n {\n trigger: 'interval:mouseleave',\n action: ['element-highlight-by-color:reset', 'element-link-by-color:unlink'],\n },\n ],\n});\n\n/** click 触发的联通区域交互 */\nregisterInteraction(INTERACTION_MAP.click, {\n start: getStartStages(INTERACTION_MAP.click),\n end: [\n {\n trigger: 'document:mousedown',\n action: ['element-highlight-by-color:clear', 'element-link-by-color:clear'],\n },\n ],\n});\n\n/**\n * 返回支持联通区域组件交互的 adaptor,适用于堆叠柱形图/堆叠条形图\n * @param disable\n */\nexport function connectedArea(disable = false) {\n return function (params: Params): Params {\n const { chart, options } = params;\n const { connectedArea } = options;\n\n const clear = () => {\n chart.removeInteraction(INTERACTION_MAP.hover);\n chart.removeInteraction(INTERACTION_MAP.click);\n };\n\n if (!disable && connectedArea) {\n const trigger = connectedArea.trigger || 'hover';\n clear();\n chart.interaction(INTERACTION_MAP[trigger], {\n start: getStartStages(trigger, connectedArea.style),\n });\n } else {\n clear();\n }\n\n return params;\n };\n}\n"]}