{"version":3,"file":"limit-in-canvas.js","sourceRoot":"","sources":["../../../../src/geometry/label/layout/limit-in-canvas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAkB,EAAE,MAAgB,EAAE,MAA2B,EAAE,MAAY;IAC3G,IAAI,CAAC,MAAM,EAAE,UAAC,KAAa;QACjB,IAAM,UAAU,GAA2D,MAAM,KAAjE,EAAQ,UAAU,GAAyC,MAAM,KAA/C,EAAQ,UAAU,GAAuB,MAAM,KAA7B,EAAQ,UAAU,GAAK,MAAM,KAAX,CAAY;QACpF,IAAA,KAAkD,KAAK,CAAC,aAAa,EAAE,EAArE,IAAI,UAAA,EAAE,IAAI,UAAA,EAAE,IAAI,UAAA,EAAE,IAAI,UAAA,EAAE,CAAC,OAAA,EAAE,CAAC,OAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAA0B,CAAC;QAE9E,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,GAAG,UAAU,IAAI,IAAI,GAAG,UAAU,EAAE;YAC1C,OAAO;YACP,MAAM,GAAG,UAAU,CAAC;SACrB;QACD,IAAI,IAAI,GAAG,UAAU,IAAI,IAAI,GAAG,UAAU,EAAE;YAC1C,OAAO;YACP,MAAM,GAAG,UAAU,CAAC;SACrB;QAED,IAAI,IAAI,GAAG,UAAU,EAAE;YACrB,SAAS;YACT,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;SAC7B;aAAM,IAAI,IAAI,GAAG,UAAU,EAAE;YAC5B,OAAO;YACP,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC;SACvC;QAED,IAAI,IAAI,GAAG,UAAU,EAAE;YACrB,SAAS;YACT,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;SAC9B;aAAM,IAAI,IAAI,GAAG,UAAU,EAAE;YAC5B,OAAO;YACP,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC;SACvC;QAED,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE;YAChC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;SAC1C;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { each } from '@antv/util';\nimport { BBox, IGroup, IShape } from '../../../dependents';\nimport { translate } from '../../../util/transform';\nimport { LabelItem } from '../interface';\n\n/**\n * @ignore\n * 将 label 限制在画布范围内,简单得将超出画布的 label 往画布内调整\n * @param labels\n * @param cfg\n */\nexport function limitInCanvas(items: LabelItem[], labels: IGroup[], shapes: IShape[] | IGroup[], region: BBox) {\n each(labels, (label: IGroup) => {\n const { minX: regionMinX, minY: regionMinY, maxX: regionMaxX, maxY: regionMaxY } = region;\n const { minX, minY, maxX, maxY, x, y, width, height } = label.getCanvasBBox();\n\n let finalX = x;\n let finalY = y;\n if (minX < regionMinX || maxX < regionMinX) {\n // 超出左侧\n finalX = regionMinX;\n }\n if (minY < regionMinY || maxY < regionMinY) {\n // 超出顶部\n finalY = regionMinY;\n }\n\n if (minX > regionMaxX) {\n // 整体超出右侧\n finalX = regionMaxX - width;\n } else if (maxX > regionMaxX) {\n // 超出右侧\n finalX = finalX - (maxX - regionMaxX);\n }\n\n if (minY > regionMaxY) {\n // 整体超出顶部\n finalY = regionMaxY - height;\n } else if (maxY > regionMaxY) {\n // 超出底部\n finalY = finalY - (maxY - regionMaxY);\n }\n\n if (finalX !== x || finalY !== y) {\n translate(label, finalX - x, finalY - y);\n }\n });\n}\n"]}