{"version":3,"file":"getScreenLocation.cjs","names":["hasProps","isSimpleScreen","isStandardScreen"],"sources":["../src/getScreenLocation.ts"],"sourcesContent":["import type { Point } from '@novastar/native/common';\nimport last from 'lodash/last';\nimport sortBy from 'lodash/sortBy';\n\nimport { hasProps, isSimpleScreen, isStandardScreen, LEDDisplayInfo } from './common';\n\nexport type Location = {\n  leftTop: Point;\n  rightBottom: Point;\n  cols: number;\n  rows: number;\n};\nexport const notEmptyXY = hasProps('X', 'Y', 'Width', 'Height');\n\nexport function getScreenLocation(screen: LEDDisplayInfo): Location {\n  if (isSimpleScreen(screen)) {\n    const cols = screen?.ScanBdCols ?? 0;\n    const rows = screen?.ScanBdRows ?? 0;\n    const width = cols * (screen?.PixelColsInScanBd ?? 0);\n    const height = rows * (screen?.PixelRowsInScanBd ?? 0);\n    const x = screen?.X ?? 0;\n    const y = screen?.Y ?? 0;\n    return {\n      leftTop: {\n        x,\n        y,\n      },\n      rightBottom: {\n        x: x + width,\n        y: y + height,\n      },\n      cols,\n      rows,\n    };\n  }\n  const xy =\n    (isStandardScreen(screen)\n      ? screen.ScannerRegionList?.filter(notEmptyXY)\n      : screen.ScanBoardRegionInfoList?.filter(notEmptyXY)) ?? [];\n\n  if (xy.length === 0)\n    return {\n      leftTop: {\n        x: 0,\n        y: 0,\n      },\n      rightBottom: {\n        x: 0,\n        y: 0,\n      },\n      cols: 0,\n      rows: 0,\n    };\n  const xx = sortBy(xy, ['X']);\n  const yy = sortBy(xy, ['Y']);\n  const xLast = last(xx)!;\n  const yLast = last(yy)!;\n\n  const left = Math.max(0, xx[0].X);\n  const top = Math.max(0, yy[0].Y);\n  const right = Math.max(0, xLast.X + xLast.Width);\n  const bottom = Math.max(0, yLast.Y + yLast.Height);\n  const [uniqX, uniqY] = xy.reduce(\n    ([xSet, ySet], { X, Y }) => {\n      xSet.add(X);\n      ySet.add(Y);\n      return [xSet, ySet];\n    },\n    [new Set<number>(), new Set<number>()],\n  );\n  const firstColumn = xx[0].ColIndexInScreen;\n  const lastColumn = xLast.ColIndexInScreen;\n  const firstRow = xx[0].RowIndexInScreen;\n  const lastRow = xLast.RowIndexInScreen;\n  const [cols, rows] =\n    isStandardScreen(screen) && screen.ScanBoardCols && screen.ScanBoardRows\n      ? [screen.ScanBoardCols, screen.ScanBoardRows]\n      : [\n          lastColumn != null && firstColumn != null\n            ? Math.max(lastColumn - firstColumn + 1, 0)\n            : uniqX.size,\n          lastRow != null && firstRow != null ? Math.max(lastRow - firstRow + 1, 0) : uniqY.size,\n        ];\n\n  return {\n    leftTop: {\n      x: left,\n      y: top,\n    },\n    rightBottom: {\n      x: right,\n      y: bottom,\n    },\n    cols,\n    rows,\n  };\n}\n"],"mappings":";;;;;;;;AAYA,MAAa,aAAaA,wBAAS,KAAK,KAAK,SAAS,QAAQ;AAE9D,SAAgB,kBAAkB,QAAkC;CAClE,IAAIC,8BAAe,MAAM,GAAG;EAC1B,MAAM,OAAO,QAAQ,cAAc;EACnC,MAAM,OAAO,QAAQ,cAAc;EACnC,MAAM,QAAQ,QAAQ,QAAQ,qBAAqB;EACnD,MAAM,SAAS,QAAQ,QAAQ,qBAAqB;EACpD,MAAM,IAAI,QAAQ,KAAK;EACvB,MAAM,IAAI,QAAQ,KAAK;EACvB,OAAO;GACL,SAAS;IACP;IACA;GACF;GACA,aAAa;IACX,GAAG,IAAI;IACP,GAAG,IAAI;GACT;GACA;GACA;EACF;CACF;CACA,MAAM,MACHC,gCAAiB,MAAM,IACpB,OAAO,mBAAmB,OAAO,UAAU,IAC3C,OAAO,yBAAyB,OAAO,UAAU,MAAM,CAAC;CAE9D,IAAI,GAAG,WAAW,GAChB,OAAO;EACL,SAAS;GACP,GAAG;GACH,GAAG;EACL;EACA,aAAa;GACX,GAAG;GACH,GAAG;EACL;EACA,MAAM;EACN,MAAM;CACR;CACF,MAAM,mCAAY,IAAI,CAAC,GAAG,CAAC;CAC3B,MAAM,mCAAY,IAAI,CAAC,GAAG,CAAC;CAC3B,MAAM,oCAAa,EAAE;CACrB,MAAM,oCAAa,EAAE;CAErB,MAAM,OAAO,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC;CAChC,MAAM,MAAM,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC;CAC/B,MAAM,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI,MAAM,KAAK;CAC/C,MAAM,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,MAAM,MAAM;CACjD,MAAM,CAAC,OAAO,SAAS,GAAG,QACvB,CAAC,MAAM,OAAO,EAAE,GAAG,QAAQ;EAC1B,KAAK,IAAI,CAAC;EACV,KAAK,IAAI,CAAC;EACV,OAAO,CAAC,MAAM,IAAI;CACpB,GACA,iBAAC,IAAI,IAAY,mBAAG,IAAI,IAAY,CAAC,CACvC;CACA,MAAM,cAAc,GAAG,GAAG;CAC1B,MAAM,aAAa,MAAM;CACzB,MAAM,WAAW,GAAG,GAAG;CACvB,MAAM,UAAU,MAAM;CACtB,MAAM,CAAC,MAAM,QACXA,gCAAiB,MAAM,KAAK,OAAO,iBAAiB,OAAO,gBACvD,CAAC,OAAO,eAAe,OAAO,aAAa,IAC3C,CACE,cAAc,QAAQ,eAAe,OACjC,KAAK,IAAI,aAAa,cAAc,GAAG,CAAC,IACxC,MAAM,MACV,WAAW,QAAQ,YAAY,OAAO,KAAK,IAAI,UAAU,WAAW,GAAG,CAAC,IAAI,MAAM,IACpF;CAEN,OAAO;EACL,SAAS;GACP,GAAG;GACH,GAAG;EACL;EACA,aAAa;GACX,GAAG;GACH,GAAG;EACL;EACA;EACA;CACF;AACF"}