@fmsim/board 2.0.0-beta.79 → 2.0.0-beta.81

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.
@@ -38,7 +38,7 @@ export type MOVEMENT = PATH[];
38
38
  export default class MovementLayer extends Layer {
39
39
  drawInstructionHandler: (e: Event) => void;
40
40
  clickComponentHandler: (e: Event) => void;
41
- onchangeTarget: (after: Record<string, any>, before: Record<string, any>) => void;
41
+ onchangeTarget: (_after: Record<string, any>, _before: Record<string, any>) => void;
42
42
  ready(): Promise<void>;
43
43
  dispose(): void;
44
44
  get pointerEvents(): string;
@@ -53,10 +53,10 @@ export default class MovementLayer extends Layer {
53
53
  get eventMap(): {
54
54
  'model-layer': {
55
55
  '(self)': {
56
- change: (after: Record<string, any>, before: Record<string, any>, hint: any) => void;
56
+ change: (after: Record<string, any>, _before: Record<string, any>, _hint: any) => void;
57
57
  };
58
58
  };
59
59
  };
60
- onchangeModelLayer(after: Record<string, any>, before: Record<string, any>, hint: any): void;
61
- onchangeData(after: Record<string, any>, before: Record<string, any>): void;
60
+ onchangeModelLayer(after: Record<string, any>, _before: Record<string, any>, _hint: any): void;
61
+ onchangeData(_after: Record<string, any>, _before: Record<string, any>): void;
62
62
  }
@@ -13,6 +13,12 @@ let MovementLayer = class MovementLayer extends Layer {
13
13
  constructor() {
14
14
  super(...arguments);
15
15
  this.drawInstructionHandler = (e) => {
16
+ var _a, _b, _c;
17
+ // 플레이백 중에는 외부 모니터링이 보내는 실시간 반송 정보를 무시 —
18
+ // fmbShowMovement 와 동일한 이유. drawInstruction 은 movement-layer 가 직접
19
+ // 청취하는 별도 경로라 viewer 의 fmbShowMovement 가드를 우회한다.
20
+ if ((_c = (_b = (_a = this.root) === null || _a === void 0 ? void 0 : _a.app) === null || _b === void 0 ? void 0 : _b.scene) === null || _c === void 0 ? void 0 : _c.playbackMode)
21
+ return;
16
22
  this.data = e.detail;
17
23
  };
18
24
  this.clickComponentHandler = (e) => {
@@ -23,7 +29,7 @@ let MovementLayer = class MovementLayer extends Layer {
23
29
  return;
24
30
  }
25
31
  };
26
- this.onchangeTarget = (after, before) => {
32
+ this.onchangeTarget = (_after, _before) => {
27
33
  this.invalidate();
28
34
  };
29
35
  this.monitoringTargets = [];
@@ -47,12 +53,11 @@ let MovementLayer = class MovementLayer extends Layer {
47
53
  get pointerEvents() {
48
54
  return 'none';
49
55
  }
50
- // 부모(Layer/Component) 가 `capturable` 을 getter 로 선언. things-scene 의
51
- // `declare const X_base` 패턴이 accessor 를 object-type property 로 평탄화해
52
- // TS2611 발생. field 초기화로 우회하면 useDefineForClassFields:false 환경에서
53
- // 런타임 setter 부재로 throw → getter override 가 정도. things-scene 측 mixin
54
- // 타입 패턴 개선되면 주석 제거.
55
- // @ts-expect-error TS2611
56
+ // base Layer/Component 가 capturable 을 property 로 선언 → getter override 시
57
+ // TS2611. things-scene mixin 의 declare const X_base 패턴이 accessor 를 object
58
+ // property 로 평탄화해 발생. field 초기화로 우회하면 useDefineForClassFields:false
59
+ // 환경에서 런타임 setter 부재로 throw — getter override 가 정도.
60
+ // @ts-ignore TS2611
56
61
  get capturable() {
57
62
  return false;
58
63
  }
@@ -193,12 +198,12 @@ let MovementLayer = class MovementLayer extends Layer {
193
198
  }
194
199
  };
195
200
  }
196
- onchangeModelLayer(after, before, hint) {
201
+ onchangeModelLayer(after, _before, _hint) {
197
202
  if (after.scale || after.translate) {
198
203
  this.invalidate();
199
204
  }
200
205
  }
201
- onchangeData(after, before) {
206
+ onchangeData(_after, _before) {
202
207
  this.invalidate();
203
208
  }
204
209
  };
@@ -209,7 +214,6 @@ export default MovementLayer;
209
214
  function getTipNeckPos(tipType, lineWidth, p1, p2) {
210
215
  if (tipType.slice(-5) != 'arrow')
211
216
  return p1;
212
- var { x, y } = p1;
213
217
  var theta = Math.atan2(p2.y - p1.y, p2.x - p1.x);
214
218
  var diff = lineWidth * 1.5;
215
219
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"movement-layer.js","sourceRoot":"","sources":["../../../src/layers/movement-layer.ts"],"names":[],"mappings":"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","sourcesContent":["import isUndefined from 'lodash-es/isUndefined'\nimport { Component, Layer, POINT, sceneComponent } from '@hatiolab/things-scene'\n\nconst MOVEMENT_STYLES: { [key: string]: string[] } = {\n NORMAL /* NORMAL_TRANSPORT*/: ['#00B05033', '#00B050'],\n DELAY /* DELAYED_TRANSPORT*/: ['#FF000033', '#FF0000'],\n ALTER /* ALTER_TRANSPORT*/: ['#76717133', '#767171'],\n WARN /* WARN_TRANSPORT*/: ['#AAAA0033', '#AAAA00']\n}\n\nexport type PathType = 'COMMAND' | 'JOB'\n\nexport type PathStatus = 'NORMAL' | 'DELAY' | 'ALTER' | 'WARN'\n\nexport type TipType = 'none' | 'arrow' | 'open-arrow' | 'sharp-arrow' | 'diamond' | 'oval'\n\nexport type TipSize = 'size1' | 'size2' | 'size3' | 'size4' | 'size5' | 'size6' | 'size7' | 'size8' | 'size9'\n\nexport type LineDash =\n | 'solid'\n | 'round-dot'\n | 'square-dot'\n | 'dash'\n | 'dash-dot'\n | 'long-dash'\n | 'long-dash-dot'\n | 'long-dash-dot-dot'\n\nexport type Point = {\n x: number\n y: number\n}\n\nexport type Path = Point[]\n\nexport type PathStyles = {\n strokeStyle?: string | string[]\n alpha?: number\n lineWidth?: number\n lineDash?: LineDash\n lineCap?: CanvasLineCap\n lineJoin?: CanvasLineJoin\n begin?: TipType\n beginSize?: TipSize\n end?: TipType\n endSize?: TipSize\n}\n\nexport type PATH = {\n srcMachine: string\n srcZone: string\n srcUnit: string\n dstMachine: string\n dstZone: string\n dstUnit: string\n pathType: PathType\n status: PathStatus\n transportCnt: number\n label: string\n styles?: PathStyles\n}\n\nexport type MOVEMENT = PATH[]\n\nconst WING_FACTOR = Math.sqrt(3)\nconst LINEWIDTH = 2\n\n@sceneComponent('movement-layer')\nexport default class MovementLayer extends Layer {\n drawInstructionHandler = (e: Event) => {\n this.data = (e as CustomEvent).detail\n }\n\n clickComponentHandler = (e: Event) => {\n const component = (e as CustomEvent).detail\n const { type } = component.state\n\n if (type == 'model-layer') {\n this.data = [] /* clear */\n return\n }\n }\n\n onchangeTarget = (after: Record<string, any>, before: Record<string, any>): void => {\n this.invalidate()\n }\n\n async ready() {\n window.removeEventListener('drawInstruction', this.drawInstructionHandler)\n window.removeEventListener('clickComponent', this.clickComponentHandler)\n\n window.addEventListener('drawInstruction', this.drawInstructionHandler)\n window.addEventListener('clickComponent', this.clickComponentHandler)\n }\n\n dispose() {\n window.removeEventListener('drawInstruction', this.drawInstructionHandler)\n window.removeEventListener('clickComponent', this.clickComponentHandler)\n\n this.clearMonitoringTargets()\n\n // 3D 화살표 정리\n const rootModel = this.root?.rootModel as any\n rootModel?.clearArrows3D?.()\n\n super.dispose && super.dispose()\n }\n\n get pointerEvents() {\n return 'none'\n }\n\n // 부모(Layer/Component) 가 `capturable` 을 getter 로 선언. things-scene 의\n // `declare const X_base` 패턴이 accessor 를 object-type property 로 평탄화해\n // TS2611 발생. field 초기화로 우회하면 useDefineForClassFields:false 환경에서\n // 런타임 setter 부재로 throw → getter override 가 정도. things-scene 측 mixin\n // 타입 패턴 개선되면 주석 제거.\n // @ts-expect-error TS2611\n get capturable() {\n return false\n }\n\n drawArrow(\n ctx: CanvasRenderingContext2D,\n p1: POINT,\n p2: POINT,\n pathType: PathType,\n pathStatus: PathStatus,\n label: string,\n styles?: PathStyles\n ) {\n var { begin = 'none', end = 'arrow', lineWidth = LINEWIDTH, strokeStyle } = styles || {}\n\n if (strokeStyle && !Array.isArray(strokeStyle)) {\n ctx.strokeStyle = strokeStyle\n ctx.fillStyle = strokeStyle\n } else {\n const gradient = ctx.createLinearGradient(p1.x, p1.y, p2.x, p2.y)\n ;((strokeStyle as string[]) || MOVEMENT_STYLES[pathStatus] || []).forEach((color, idx) =>\n gradient.addColorStop(idx, color)\n )\n\n ctx.strokeStyle = gradient\n ctx.fillStyle = gradient\n }\n\n drawEndTips(ctx, [p1, p2], styles)\n ctx.stroke()\n ctx.fill()\n\n ctx.beginPath()\n\n var beginPos = getTipNeckPos(begin, lineWidth, p1, p2)\n var endPos = getTipNeckPos(end, lineWidth, p2, p1)\n\n ctx.moveTo(beginPos.x, beginPos.y)\n ctx.lineTo(endPos.x, endPos.y)\n\n stroke(ctx, {\n lineDash: pathType == 'COMMAND' ? 'dash' : 'solid',\n ...styles\n })\n\n ctx.beginPath()\n ctx.setLineDash([]) // reset line dash\n\n if (label) {\n const fontSize = 14\n const fontFamily = 'Arial'\n\n ctx.font = `bold ${fontSize}px ${fontFamily}`\n\n const textWidth = ctx.measureText(label).width\n\n const [x, y] = [(p1.x + p2.x) / 2 - textWidth / 2, (p1.y + p2.y) / 2]\n ctx.fillRect(x - 3, y - fontSize / 2 - 2, textWidth + 6, fontSize + 4)\n\n ctx.fillStyle = 'white'\n ctx.fillText(label, x, y + fontSize / 2 - 1)\n }\n }\n\n findSourceAndTarget(path: PATH): [Component?, Component?] {\n const root = this.root\n var src, dest\n\n for (const name of [path.srcUnit, path.srcZone, path.srcMachine].filter(Boolean)) {\n src = root.findById?.(name)\n if (src) {\n break\n }\n }\n\n for (const name of [path.dstUnit, path.dstZone, path.dstMachine].filter(Boolean)) {\n dest = root.findById?.(name)\n if (dest) {\n break\n }\n }\n\n return [src, dest]\n }\n\n private monitoringTargets: Component[] = []\n private clearMonitoringTargets() {\n this.monitoringTargets.forEach(target => {\n target.off('change', this.onchangeTarget)\n })\n\n this.monitoringTargets = []\n }\n\n private addMonitoringTarget(targets: Component[]) {\n targets.forEach(target => {\n if (this.monitoringTargets.includes(target)) {\n return\n }\n\n this.monitoringTargets.push(target)\n target.on('change', this.onchangeTarget)\n })\n }\n\n render(ctx: CanvasRenderingContext2D) {\n const root = this.root\n const rootModel = root.rootModel as any\n const movement =\n this.data instanceof Array\n ? (this.data as MOVEMENT)\n : this.data && typeof this.data === 'object'\n ? [this.data]\n : []\n\n this.clearMonitoringTargets()\n\n if (rootModel?.is3dMode) {\n this.render3D(movement, rootModel)\n return\n }\n\n // 3D 화살표가 남아있으면 정리\n rootModel?.clearArrows3D?.()\n\n ctx.save()\n\n movement.forEach(path => {\n const [src, dest] = this.findSourceAndTarget(path)\n if (!src || !dest) {\n return\n }\n\n this.addMonitoringTarget([src, dest])\n\n const [srcCenter, destCenter] = [src.center, dest.center]\n const [srcPos, destPos] = [\n src.transcoordS2C(srcCenter.x, srcCenter.y, root),\n dest.transcoordS2C(destCenter.x, destCenter.y, root)\n ]\n\n ctx.beginPath()\n\n this.drawArrow(\n ctx,\n srcPos,\n destPos,\n path.pathType,\n path.status,\n path.label || (Number(path.transportCnt || 0) > 1 ? String(path.transportCnt) : ''),\n path.styles\n )\n\n ctx.stroke()\n })\n\n ctx.restore()\n }\n\n private render3D(movement: MOVEMENT, rootModel: any) {\n // 이전 화살표 정리\n rootModel.clearArrows3D()\n\n movement.forEach((path, i) => {\n const [src, dest] = this.findSourceAndTarget(path)\n if (!src || !dest) {\n return\n }\n\n this.addMonitoringTarget([src, dest])\n\n const defaultColors = MOVEMENT_STYLES[path.status] || MOVEMENT_STYLES.NORMAL\n\n rootModel.addArrow3D(\n `movement-${i}`,\n src,\n dest,\n {\n strokeStyle: path.styles?.strokeStyle ?? defaultColors,\n alpha: path.styles?.alpha ?? 0.8,\n lineWidth: path.styles?.lineWidth ?? 2,\n lineDash: path.styles?.lineDash ?? (path.pathType === 'COMMAND' ? 'dash' : 'solid'),\n begin: path.styles?.begin ?? 'none',\n beginSize: path.styles?.beginSize ?? 'size2',\n end: path.styles?.end ?? 'arrow',\n endSize: path.styles?.endSize ?? 'size2',\n label: path.label || (Number(path.transportCnt || 0) > 1 ? String(path.transportCnt) : '')\n }\n )\n })\n }\n\n get eventMap() {\n return {\n 'model-layer': {\n '(self)': {\n change: this.onchangeModelLayer\n }\n }\n }\n }\n\n onchangeModelLayer(after: Record<string, any>, before: Record<string, any>, hint: any) {\n if (after.scale || after.translate) {\n this.invalidate()\n }\n }\n\n onchangeData(after: Record<string, any>, before: Record<string, any>): void {\n this.invalidate()\n }\n}\n\nfunction getTipNeckPos(tipType: TipType, lineWidth: number, p1: Point, p2: Point) {\n if (tipType.slice(-5) != 'arrow') return p1\n\n var { x, y } = p1\n var theta = Math.atan2(p2.y - p1.y, p2.x - p1.x)\n var diff = lineWidth * 1.5\n\n return {\n x: p1.x + Math.cos(theta) * diff,\n y: p1.y + Math.sin(theta) * diff\n }\n}\n\nfunction drawEndTips(ctx: CanvasRenderingContext2D, path: Path, style?: PathStyles) {\n var {\n lineWidth = LINEWIDTH,\n lineCap,\n alpha = 1,\n begin = 'none',\n end = 'arrow',\n beginSize = 'size2',\n endSize = 'size2'\n } = style || {}\n\n if (begin != 'none' || end != 'none') {\n lineWidth = Number(lineWidth) || LINEWIDTH\n\n if (!isUndefined(lineCap)) ctx.lineCap = lineCap\n if (!isUndefined(lineWidth)) ctx.lineWidth = lineWidth\n if (!isUndefined(alpha)) ctx.globalAlpha *= alpha\n\n // 선 그리기.\n if (begin != 'none') drawTip(ctx, path[0], path[1], lineWidth, begin, tipSize(beginSize, lineWidth))\n if (end != 'none') {\n let length = path.length\n drawTip(ctx, path[length - 1], path[length - 2], lineWidth, end, tipSize(endSize, lineWidth))\n }\n }\n}\n\nfunction drawTip(\n ctx: CanvasRenderingContext2D,\n p1: Point,\n p2: Point,\n lineWidth: number,\n type: TipType,\n size: { X: number; Y: number }\n) {\n var { x, y } = p1\n var theta = Math.atan2(p2.y - y, p2.x - x)\n\n ctx.beginPath()\n\n ctx.translate(x, y)\n ctx.rotate(theta)\n\n switch (type) {\n case 'oval':\n ctx.ellipse(0, 0, size.X, size.Y, 0, 0, 2 * Math.PI)\n ctx.fill()\n // ctx.scale(1, 1 / arc_scale_y)\n break\n case 'diamond':\n ctx.moveTo(-size.X, 0)\n ctx.lineTo(0, -size.Y)\n ctx.lineTo(size.X, 0)\n ctx.lineTo(0, size.Y)\n ctx.fill()\n break\n case 'arrow':\n ctx.moveTo(0, 0)\n ctx.lineTo(WING_FACTOR * size.X, -size.Y)\n ctx.lineTo(WING_FACTOR * size.X, size.Y)\n ctx.fill()\n break\n case 'sharp-arrow':\n ctx.moveTo(0, 0)\n ctx.lineTo(WING_FACTOR * size.X, -size.Y)\n ctx.lineTo(-size.X / 1.5 + WING_FACTOR * size.X, 0)\n ctx.lineTo(WING_FACTOR * size.X, size.Y)\n ctx.fill()\n break\n case 'open-arrow':\n ctx.moveTo(WING_FACTOR * size.X + lineWidth, -size.Y)\n ctx.lineTo(lineWidth, 0)\n ctx.lineTo(WING_FACTOR * size.X + lineWidth, size.Y)\n ctx.stroke()\n break\n default:\n break\n }\n\n ctx.rotate(-theta)\n ctx.translate(-x, -y)\n\n ctx.closePath()\n}\n\nfunction tipSize(size: TipSize, lineWidth: number) {\n let length: { X: number; Y: number } = { X: lineWidth * 1.5, Y: lineWidth * 1.5 }\n lineWidth = lineWidth * 1.2\n\n switch (size) {\n case 'size1':\n length.X = lineWidth\n length.Y = lineWidth\n break\n case 'size2':\n length.X = lineWidth * 1.5\n length.Y = lineWidth\n break\n case 'size3':\n length.X = lineWidth * 2\n length.Y = lineWidth\n break\n case 'size4':\n length.X = lineWidth\n length.Y = lineWidth * 1.5\n break\n case 'size5':\n length.X = lineWidth * 1.5\n length.Y = lineWidth * 1.5\n break\n case 'size6':\n length.X = lineWidth * 2\n length.Y = lineWidth * 1.5\n break\n case 'size7':\n length.X = lineWidth\n length.Y = lineWidth * 2\n break\n case 'size8':\n length.X = lineWidth * 1.5\n length.Y = lineWidth * 2\n break\n case 'size9':\n length.X = lineWidth * 2\n length.Y = lineWidth * 2\n break\n default:\n length.X = lineWidth * 1.5\n length.Y = lineWidth * 1.5\n break\n }\n return length\n}\n\nfunction stroke(ctx: CanvasRenderingContext2D, styles?: PathStyles) {\n var { lineDash: lineDashType = 'solid', lineWidth = 2, lineCap, lineJoin, alpha } = styles || {}\n\n if (lineCap) ctx.lineCap = lineCap\n\n let lineDash = [0, 0]\n\n if (lineDash) {\n var isRound = lineCap == 'round'\n\n switch (lineDashType) {\n case 'solid':\n lineDash = [0, 0]\n break\n case 'round-dot':\n if (isRound) lineDash = [0, lineWidth * 2]\n else lineDash = [lineWidth, lineWidth]\n break\n case 'square-dot':\n if (isRound) lineDash = [lineWidth, lineWidth * 2]\n else lineDash = [lineWidth * 2, lineWidth]\n break\n case 'dash':\n if (isRound) lineDash = [lineWidth * 3, lineWidth * 2.5]\n else lineDash = [lineWidth * 4, lineWidth * 1.5]\n break\n case 'dash-dot':\n if (isRound) lineDash = [lineWidth * 3, lineWidth * 3, 0, lineWidth * 3]\n else lineDash = [lineWidth * 4, lineWidth * 2, lineWidth, lineWidth * 2]\n break\n case 'long-dash':\n if (isRound) lineDash = [lineWidth * 5, lineWidth * 4]\n else lineDash = [lineWidth * 6, lineWidth * 3]\n break\n case 'long-dash-dot':\n if (isRound) lineDash = [lineWidth * 5, lineWidth * 3, 0, lineWidth * 3]\n else lineDash = [lineWidth * 6, lineWidth * 2, lineWidth, lineWidth * 2]\n break\n case 'long-dash-dot-dot':\n if (isRound) lineDash = [lineWidth * 5, lineWidth * 2, 0, lineWidth * 2, 0, lineWidth * 2]\n else lineDash = [lineWidth * 6, lineWidth, lineWidth, lineWidth, lineWidth, lineWidth]\n break\n }\n ctx.setLineDash(lineDash)\n }\n\n if (!isUndefined(alpha)) ctx.globalAlpha *= alpha\n if (!isUndefined(lineJoin)) ctx.lineJoin = lineJoin\n\n ctx.stroke()\n}\n"]}
1
+ {"version":3,"file":"movement-layer.js","sourceRoot":"","sources":["../../../src/layers/movement-layer.ts"],"names":[],"mappings":"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","sourcesContent":["import isUndefined from 'lodash-es/isUndefined'\nimport { Component, Layer, POINT, sceneComponent } from '@hatiolab/things-scene'\n\nconst MOVEMENT_STYLES: { [key: string]: string[] } = {\n NORMAL /* NORMAL_TRANSPORT*/: ['#00B05033', '#00B050'],\n DELAY /* DELAYED_TRANSPORT*/: ['#FF000033', '#FF0000'],\n ALTER /* ALTER_TRANSPORT*/: ['#76717133', '#767171'],\n WARN /* WARN_TRANSPORT*/: ['#AAAA0033', '#AAAA00']\n}\n\nexport type PathType = 'COMMAND' | 'JOB'\n\nexport type PathStatus = 'NORMAL' | 'DELAY' | 'ALTER' | 'WARN'\n\nexport type TipType = 'none' | 'arrow' | 'open-arrow' | 'sharp-arrow' | 'diamond' | 'oval'\n\nexport type TipSize = 'size1' | 'size2' | 'size3' | 'size4' | 'size5' | 'size6' | 'size7' | 'size8' | 'size9'\n\nexport type LineDash =\n | 'solid'\n | 'round-dot'\n | 'square-dot'\n | 'dash'\n | 'dash-dot'\n | 'long-dash'\n | 'long-dash-dot'\n | 'long-dash-dot-dot'\n\nexport type Point = {\n x: number\n y: number\n}\n\nexport type Path = Point[]\n\nexport type PathStyles = {\n strokeStyle?: string | string[]\n alpha?: number\n lineWidth?: number\n lineDash?: LineDash\n lineCap?: CanvasLineCap\n lineJoin?: CanvasLineJoin\n begin?: TipType\n beginSize?: TipSize\n end?: TipType\n endSize?: TipSize\n}\n\nexport type PATH = {\n srcMachine: string\n srcZone: string\n srcUnit: string\n dstMachine: string\n dstZone: string\n dstUnit: string\n pathType: PathType\n status: PathStatus\n transportCnt: number\n label: string\n styles?: PathStyles\n}\n\nexport type MOVEMENT = PATH[]\n\nconst WING_FACTOR = Math.sqrt(3)\nconst LINEWIDTH = 2\n\n@sceneComponent('movement-layer')\nexport default class MovementLayer extends Layer {\n drawInstructionHandler = (e: Event) => {\n // 플레이백 중에는 외부 모니터링이 보내는 실시간 반송 정보를 무시 —\n // fmbShowMovement 와 동일한 이유. drawInstruction 은 movement-layer 가 직접\n // 청취하는 별도 경로라 viewer 의 fmbShowMovement 가드를 우회한다.\n if ((this.root as any)?.app?.scene?.playbackMode) return\n\n this.data = (e as CustomEvent).detail\n }\n\n clickComponentHandler = (e: Event) => {\n const component = (e as CustomEvent).detail\n const { type } = component.state\n\n if (type == 'model-layer') {\n this.data = [] /* clear */\n return\n }\n }\n\n onchangeTarget = (_after: Record<string, any>, _before: Record<string, any>): void => {\n this.invalidate()\n }\n\n async ready() {\n window.removeEventListener('drawInstruction', this.drawInstructionHandler)\n window.removeEventListener('clickComponent', this.clickComponentHandler)\n\n window.addEventListener('drawInstruction', this.drawInstructionHandler)\n window.addEventListener('clickComponent', this.clickComponentHandler)\n }\n\n dispose() {\n window.removeEventListener('drawInstruction', this.drawInstructionHandler)\n window.removeEventListener('clickComponent', this.clickComponentHandler)\n\n this.clearMonitoringTargets()\n\n // 3D 화살표 정리\n const rootModel = this.root?.rootModel as any\n rootModel?.clearArrows3D?.()\n\n super.dispose && super.dispose()\n }\n\n get pointerEvents() {\n return 'none'\n }\n\n // base Layer/Component 가 capturable 을 property 로 선언 → getter override 시\n // TS2611. things-scene mixin 의 declare const X_base 패턴이 accessor 를 object\n // property 로 평탄화해 발생. field 초기화로 우회하면 useDefineForClassFields:false\n // 환경에서 런타임 setter 부재로 throw — getter override 가 정도.\n // @ts-ignore TS2611\n get capturable() {\n return false\n }\n\n drawArrow(\n ctx: CanvasRenderingContext2D,\n p1: POINT,\n p2: POINT,\n pathType: PathType,\n pathStatus: PathStatus,\n label: string,\n styles?: PathStyles\n ) {\n var { begin = 'none', end = 'arrow', lineWidth = LINEWIDTH, strokeStyle } = styles || {}\n\n if (strokeStyle && !Array.isArray(strokeStyle)) {\n ctx.strokeStyle = strokeStyle\n ctx.fillStyle = strokeStyle\n } else {\n const gradient = ctx.createLinearGradient(p1.x, p1.y, p2.x, p2.y)\n ;((strokeStyle as string[]) || MOVEMENT_STYLES[pathStatus] || []).forEach((color, idx) =>\n gradient.addColorStop(idx, color)\n )\n\n ctx.strokeStyle = gradient\n ctx.fillStyle = gradient\n }\n\n drawEndTips(ctx, [p1, p2], styles)\n ctx.stroke()\n ctx.fill()\n\n ctx.beginPath()\n\n var beginPos = getTipNeckPos(begin, lineWidth, p1, p2)\n var endPos = getTipNeckPos(end, lineWidth, p2, p1)\n\n ctx.moveTo(beginPos.x, beginPos.y)\n ctx.lineTo(endPos.x, endPos.y)\n\n stroke(ctx, {\n lineDash: pathType == 'COMMAND' ? 'dash' : 'solid',\n ...styles\n })\n\n ctx.beginPath()\n ctx.setLineDash([]) // reset line dash\n\n if (label) {\n const fontSize = 14\n const fontFamily = 'Arial'\n\n ctx.font = `bold ${fontSize}px ${fontFamily}`\n\n const textWidth = ctx.measureText(label).width\n\n const [x, y] = [(p1.x + p2.x) / 2 - textWidth / 2, (p1.y + p2.y) / 2]\n ctx.fillRect(x - 3, y - fontSize / 2 - 2, textWidth + 6, fontSize + 4)\n\n ctx.fillStyle = 'white'\n ctx.fillText(label, x, y + fontSize / 2 - 1)\n }\n }\n\n findSourceAndTarget(path: PATH): [Component?, Component?] {\n const root = this.root\n var src, dest\n\n for (const name of [path.srcUnit, path.srcZone, path.srcMachine].filter(Boolean)) {\n src = root.findById?.(name)\n if (src) {\n break\n }\n }\n\n for (const name of [path.dstUnit, path.dstZone, path.dstMachine].filter(Boolean)) {\n dest = root.findById?.(name)\n if (dest) {\n break\n }\n }\n\n return [src, dest]\n }\n\n private monitoringTargets: Component[] = []\n private clearMonitoringTargets() {\n this.monitoringTargets.forEach(target => {\n target.off('change', this.onchangeTarget)\n })\n\n this.monitoringTargets = []\n }\n\n private addMonitoringTarget(targets: Component[]) {\n targets.forEach(target => {\n if (this.monitoringTargets.includes(target)) {\n return\n }\n\n this.monitoringTargets.push(target)\n target.on('change', this.onchangeTarget)\n })\n }\n\n render(ctx: CanvasRenderingContext2D) {\n const root = this.root\n const rootModel = root.rootModel as any\n const movement =\n this.data instanceof Array\n ? (this.data as MOVEMENT)\n : this.data && typeof this.data === 'object'\n ? [this.data]\n : []\n\n this.clearMonitoringTargets()\n\n if (rootModel?.is3dMode) {\n this.render3D(movement, rootModel)\n return\n }\n\n // 3D 화살표가 남아있으면 정리\n rootModel?.clearArrows3D?.()\n\n ctx.save()\n\n movement.forEach(path => {\n const [src, dest] = this.findSourceAndTarget(path)\n if (!src || !dest) {\n return\n }\n\n this.addMonitoringTarget([src, dest])\n\n const [srcCenter, destCenter] = [src.center, dest.center]\n const [srcPos, destPos] = [\n src.transcoordS2C(srcCenter.x, srcCenter.y, root),\n dest.transcoordS2C(destCenter.x, destCenter.y, root)\n ]\n\n ctx.beginPath()\n\n this.drawArrow(\n ctx,\n srcPos,\n destPos,\n path.pathType,\n path.status,\n path.label || (Number(path.transportCnt || 0) > 1 ? String(path.transportCnt) : ''),\n path.styles\n )\n\n ctx.stroke()\n })\n\n ctx.restore()\n }\n\n private render3D(movement: MOVEMENT, rootModel: any) {\n // 이전 화살표 정리\n rootModel.clearArrows3D()\n\n movement.forEach((path, i) => {\n const [src, dest] = this.findSourceAndTarget(path)\n if (!src || !dest) {\n return\n }\n\n this.addMonitoringTarget([src, dest])\n\n const defaultColors = MOVEMENT_STYLES[path.status] || MOVEMENT_STYLES.NORMAL\n\n rootModel.addArrow3D(\n `movement-${i}`,\n src,\n dest,\n {\n strokeStyle: path.styles?.strokeStyle ?? defaultColors,\n alpha: path.styles?.alpha ?? 0.8,\n lineWidth: path.styles?.lineWidth ?? 2,\n lineDash: path.styles?.lineDash ?? (path.pathType === 'COMMAND' ? 'dash' : 'solid'),\n begin: path.styles?.begin ?? 'none',\n beginSize: path.styles?.beginSize ?? 'size2',\n end: path.styles?.end ?? 'arrow',\n endSize: path.styles?.endSize ?? 'size2',\n label: path.label || (Number(path.transportCnt || 0) > 1 ? String(path.transportCnt) : '')\n }\n )\n })\n }\n\n get eventMap() {\n return {\n 'model-layer': {\n '(self)': {\n change: this.onchangeModelLayer\n }\n }\n }\n }\n\n onchangeModelLayer(after: Record<string, any>, _before: Record<string, any>, _hint: any) {\n if (after.scale || after.translate) {\n this.invalidate()\n }\n }\n\n onchangeData(_after: Record<string, any>, _before: Record<string, any>): void {\n this.invalidate()\n }\n}\n\nfunction getTipNeckPos(tipType: TipType, lineWidth: number, p1: Point, p2: Point) {\n if (tipType.slice(-5) != 'arrow') return p1\n\n var theta = Math.atan2(p2.y - p1.y, p2.x - p1.x)\n var diff = lineWidth * 1.5\n\n return {\n x: p1.x + Math.cos(theta) * diff,\n y: p1.y + Math.sin(theta) * diff\n }\n}\n\nfunction drawEndTips(ctx: CanvasRenderingContext2D, path: Path, style?: PathStyles) {\n var {\n lineWidth = LINEWIDTH,\n lineCap,\n alpha = 1,\n begin = 'none',\n end = 'arrow',\n beginSize = 'size2',\n endSize = 'size2'\n } = style || {}\n\n if (begin != 'none' || end != 'none') {\n lineWidth = Number(lineWidth) || LINEWIDTH\n\n if (!isUndefined(lineCap)) ctx.lineCap = lineCap\n if (!isUndefined(lineWidth)) ctx.lineWidth = lineWidth\n if (!isUndefined(alpha)) ctx.globalAlpha *= alpha\n\n // 선 그리기.\n if (begin != 'none') drawTip(ctx, path[0], path[1], lineWidth, begin, tipSize(beginSize, lineWidth))\n if (end != 'none') {\n let length = path.length\n drawTip(ctx, path[length - 1], path[length - 2], lineWidth, end, tipSize(endSize, lineWidth))\n }\n }\n}\n\nfunction drawTip(\n ctx: CanvasRenderingContext2D,\n p1: Point,\n p2: Point,\n lineWidth: number,\n type: TipType,\n size: { X: number; Y: number }\n) {\n var { x, y } = p1\n var theta = Math.atan2(p2.y - y, p2.x - x)\n\n ctx.beginPath()\n\n ctx.translate(x, y)\n ctx.rotate(theta)\n\n switch (type) {\n case 'oval':\n ctx.ellipse(0, 0, size.X, size.Y, 0, 0, 2 * Math.PI)\n ctx.fill()\n // ctx.scale(1, 1 / arc_scale_y)\n break\n case 'diamond':\n ctx.moveTo(-size.X, 0)\n ctx.lineTo(0, -size.Y)\n ctx.lineTo(size.X, 0)\n ctx.lineTo(0, size.Y)\n ctx.fill()\n break\n case 'arrow':\n ctx.moveTo(0, 0)\n ctx.lineTo(WING_FACTOR * size.X, -size.Y)\n ctx.lineTo(WING_FACTOR * size.X, size.Y)\n ctx.fill()\n break\n case 'sharp-arrow':\n ctx.moveTo(0, 0)\n ctx.lineTo(WING_FACTOR * size.X, -size.Y)\n ctx.lineTo(-size.X / 1.5 + WING_FACTOR * size.X, 0)\n ctx.lineTo(WING_FACTOR * size.X, size.Y)\n ctx.fill()\n break\n case 'open-arrow':\n ctx.moveTo(WING_FACTOR * size.X + lineWidth, -size.Y)\n ctx.lineTo(lineWidth, 0)\n ctx.lineTo(WING_FACTOR * size.X + lineWidth, size.Y)\n ctx.stroke()\n break\n default:\n break\n }\n\n ctx.rotate(-theta)\n ctx.translate(-x, -y)\n\n ctx.closePath()\n}\n\nfunction tipSize(size: TipSize, lineWidth: number) {\n let length: { X: number; Y: number } = { X: lineWidth * 1.5, Y: lineWidth * 1.5 }\n lineWidth = lineWidth * 1.2\n\n switch (size) {\n case 'size1':\n length.X = lineWidth\n length.Y = lineWidth\n break\n case 'size2':\n length.X = lineWidth * 1.5\n length.Y = lineWidth\n break\n case 'size3':\n length.X = lineWidth * 2\n length.Y = lineWidth\n break\n case 'size4':\n length.X = lineWidth\n length.Y = lineWidth * 1.5\n break\n case 'size5':\n length.X = lineWidth * 1.5\n length.Y = lineWidth * 1.5\n break\n case 'size6':\n length.X = lineWidth * 2\n length.Y = lineWidth * 1.5\n break\n case 'size7':\n length.X = lineWidth\n length.Y = lineWidth * 2\n break\n case 'size8':\n length.X = lineWidth * 1.5\n length.Y = lineWidth * 2\n break\n case 'size9':\n length.X = lineWidth * 2\n length.Y = lineWidth * 2\n break\n default:\n length.X = lineWidth * 1.5\n length.Y = lineWidth * 1.5\n break\n }\n return length\n}\n\nfunction stroke(ctx: CanvasRenderingContext2D, styles?: PathStyles) {\n var { lineDash: lineDashType = 'solid', lineWidth = 2, lineCap, lineJoin, alpha } = styles || {}\n\n if (lineCap) ctx.lineCap = lineCap\n\n let lineDash = [0, 0]\n\n if (lineDash) {\n var isRound = lineCap == 'round'\n\n switch (lineDashType) {\n case 'solid':\n lineDash = [0, 0]\n break\n case 'round-dot':\n if (isRound) lineDash = [0, lineWidth * 2]\n else lineDash = [lineWidth, lineWidth]\n break\n case 'square-dot':\n if (isRound) lineDash = [lineWidth, lineWidth * 2]\n else lineDash = [lineWidth * 2, lineWidth]\n break\n case 'dash':\n if (isRound) lineDash = [lineWidth * 3, lineWidth * 2.5]\n else lineDash = [lineWidth * 4, lineWidth * 1.5]\n break\n case 'dash-dot':\n if (isRound) lineDash = [lineWidth * 3, lineWidth * 3, 0, lineWidth * 3]\n else lineDash = [lineWidth * 4, lineWidth * 2, lineWidth, lineWidth * 2]\n break\n case 'long-dash':\n if (isRound) lineDash = [lineWidth * 5, lineWidth * 4]\n else lineDash = [lineWidth * 6, lineWidth * 3]\n break\n case 'long-dash-dot':\n if (isRound) lineDash = [lineWidth * 5, lineWidth * 3, 0, lineWidth * 3]\n else lineDash = [lineWidth * 6, lineWidth * 2, lineWidth, lineWidth * 2]\n break\n case 'long-dash-dot-dot':\n if (isRound) lineDash = [lineWidth * 5, lineWidth * 2, 0, lineWidth * 2, 0, lineWidth * 2]\n else lineDash = [lineWidth * 6, lineWidth, lineWidth, lineWidth, lineWidth, lineWidth]\n break\n }\n ctx.setLineDash(lineDash)\n }\n\n if (!isUndefined(alpha)) ctx.globalAlpha *= alpha\n if (!isUndefined(lineJoin)) ctx.lineJoin = lineJoin\n\n ctx.stroke()\n}\n"]}
@@ -33,6 +33,9 @@ export declare class BoardViewer extends LitElement {
33
33
  _fabGroup: HTMLElement;
34
34
  private popup;
35
35
  private lastComponent;
36
+ /** SearchOverlay 의 query-submit 시 사용할 추적 색깔. things-scene 의 Scene.tracker
37
+ * 가 폴링/데코/3D outline 색 동기화 일괄 관리. */
38
+ private static readonly TRACKING_COLOR;
36
39
  render(): import("lit-html").TemplateResult<1>;
37
40
  fetchIFactsDataHandler: (e: Event) => void;
38
41
  fmbShowMovementHandler: (e: Event) => void;
@@ -44,6 +47,8 @@ export declare class BoardViewer extends LitElement {
44
47
  fmbShowFloatingContainerHandler: (e: Event) => void;
45
48
  fmbHideFloatingContainerHandler: (e: Event) => void;
46
49
  clickComponentHandler: (e: Event) => void;
50
+ /** 마우스 클릭/popup 의 selected highlight 해제. */
51
+ private _clearClickHighlight;
47
52
  fmbStartAnimation: (e: Event) => void;
48
53
  fmbStopAnimation: (e: Event) => void;
49
54
  fmbResetAnimation: () => void;
@@ -1,3 +1,4 @@
1
+ var BoardViewer_1;
1
2
  import { __decorate } from "tslib";
2
3
  import '@material/web/fab/fab.js';
3
4
  import '@material/web/icon/icon.js';
@@ -13,7 +14,7 @@ import { isIOS, fullscreen, exitfullscreen, togglefullscreen } from '@operato/ut
13
14
  import { ScrollbarStyles } from '@operato/styles';
14
15
  import { DataStorage } from './data-storage/data-storage.js';
15
16
  import { runScenario, startScenario, DataSubscriptionProviderImpl, isRestfulAvailable } from '@fmsim/api';
16
- let BoardViewer = class BoardViewer extends LitElement {
17
+ let BoardViewer = BoardViewer_1 = class BoardViewer extends LitElement {
17
18
  constructor() {
18
19
  var _a;
19
20
  super(...arguments);
@@ -44,16 +45,16 @@ let BoardViewer = class BoardViewer extends LitElement {
44
45
  };
45
46
  // 모니터링에서 Movement Data를 보여준다.
46
47
  this.fmbShowMovementHandler = (e) => {
47
- var _a;
48
+ var _a, _b;
48
49
  // 플레이백 중에는 외부 모니터링이 보내는 실시간 반송 정보를 그리지 않는다 —
49
50
  // 사용자가 플레이백 시점의 *과거 상태* 를 보고 있는데 실시간 화살표가 겹치면
50
51
  // 혼란을 줌. (백엔드 상세 정보 요청은 ox-board-component-info.ts:225 에서
51
- // playbackMode 가드로 이미 차단됨.)
52
- if (this._playbackActive) {
52
+ // 같은 playbackMode 가드로 이미 차단됨.)
53
+ if ((_a = this._scene) === null || _a === void 0 ? void 0 : _a.playbackMode) {
53
54
  return;
54
55
  }
55
56
  const movement = e.detail.value;
56
- const movementLayer = (_a = this._scene) === null || _a === void 0 ? void 0 : _a.findById(`movement-layer`);
57
+ const movementLayer = (_b = this._scene) === null || _b === void 0 ? void 0 : _b.findById(`movement-layer`);
57
58
  if (!movementLayer) {
58
59
  return;
59
60
  }
@@ -117,26 +118,25 @@ let BoardViewer = class BoardViewer extends LitElement {
117
118
  floatingContainer.hidden = true;
118
119
  }
119
120
  };
120
- // BoardComponentInfo popup을 보여준다.
121
+ // BoardComponentInfo popup 을 보여주고 deco-border 로 selected highlight.
122
+ // 영구 추적과는 독립 — query-submit 핸들러 (onQuerySubmit) 가 별도로 담당.
121
123
  this.clickComponentHandler = (e) => {
122
- var _a, _b;
123
124
  const component = e.detail;
124
125
  const { type } = component.state;
125
126
  if (type == 'model-layer') {
126
- (_a = this.lastComponent) === null || _a === void 0 ? void 0 : _a.trigger('deco-border-off');
127
- // this.lastComponent?.trigger('deco-arrow-reset')
127
+ this._clearClickHighlight();
128
128
  this.hidePopup();
129
129
  return;
130
130
  }
131
131
  if ('isLVComponent' in component) {
132
- (_b = this.lastComponent) === null || _b === void 0 ? void 0 : _b.trigger('deco-border-off');
133
- // this.lastComponent?.trigger('deco-arrow-reset')
132
+ this._clearClickHighlight();
134
133
  this.lastComponent = component;
135
134
  component.trigger('deco-border', { distance: 8, lineWidth: 4, color: '#f007' });
136
- // component.trigger('deco-arrow', { color: 'red', animation: true, size: 20 })
137
135
  this.togglePopup(component);
138
136
  }
139
137
  };
138
+ // 영구 추적 라이프사이클은 things-scene 의 Scene.tracker 가 일괄 관리.
139
+ // (polling, deco-border 부착/해제, 3D outline 색 동기화, centerTo)
140
140
  this.fmbStartAnimation = (e) => {
141
141
  var _a;
142
142
  const { target, animation, decorator, border, arrow } = e.detail || {};
@@ -413,6 +413,13 @@ let BoardViewer = class BoardViewer extends LitElement {
413
413
  : nothing}
414
414
  `;
415
415
  }
416
+ /** 마우스 클릭/popup 의 selected highlight 해제. */
417
+ _clearClickHighlight() {
418
+ if (this.lastComponent) {
419
+ this.lastComponent.trigger('deco-border-off');
420
+ this.lastComponent = null;
421
+ }
422
+ }
416
423
  /** connect/disconnect 시 일괄 등록/해제할 window 이벤트 목록 (모니터링 연동) */
417
424
  get _monitoringEvents() {
418
425
  return [
@@ -447,7 +454,7 @@ let BoardViewer = class BoardViewer extends LitElement {
447
454
  }
448
455
  }
449
456
  disconnectedCallback() {
450
- var _a, _b, _c;
457
+ var _a, _b, _c, _d, _e;
451
458
  super.disconnectedCallback();
452
459
  window.removeEventListener('resize', this.resizeHandler);
453
460
  document.removeEventListener('pointermove', this._pointerMoveHandler, true);
@@ -456,12 +463,13 @@ let BoardViewer = class BoardViewer extends LitElement {
456
463
  for (const [type, handler] of this._monitoringEvents) {
457
464
  window.removeEventListener(type, handler);
458
465
  }
459
- this.lastComponent = null;
466
+ this._clearClickHighlight();
467
+ (_b = (_a = this._scene) === null || _a === void 0 ? void 0 : _a.tracker) === null || _b === void 0 ? void 0 : _b.stop();
460
468
  // 플레이백이 활성 상태면 명시적 stop (provider resume 포함)
461
469
  if (this._playbackActive) {
462
- (_a = this._playbackEngine) === null || _a === void 0 ? void 0 : _a.stop();
463
- (_b = this._playbackEngine) === null || _b === void 0 ? void 0 : _b.detachScene();
464
- (_c = this._dataSubscriptionProvider) === null || _c === void 0 ? void 0 : _c.resume();
470
+ (_c = this._playbackEngine) === null || _c === void 0 ? void 0 : _c.stop();
471
+ (_d = this._playbackEngine) === null || _d === void 0 ? void 0 : _d.detachScene();
472
+ (_e = this._dataSubscriptionProvider) === null || _e === void 0 ? void 0 : _e.resume();
465
473
  this._playbackActive = false;
466
474
  }
467
475
  if (this._playbackEngine) {
@@ -537,6 +545,10 @@ let BoardViewer = class BoardViewer extends LitElement {
537
545
  this._loadingOverlay.attach(this.renderRoot, tracker);
538
546
  }
539
547
  closeScene() {
548
+ var _a, _b;
549
+ // scene 교체/종료 시 highlight 상태도 함께 정리. tracking watcher 누수 방지.
550
+ this._clearClickHighlight();
551
+ (_b = (_a = this._scene) === null || _a === void 0 ? void 0 : _a.tracker) === null || _b === void 0 ? void 0 : _b.stop();
540
552
  if (this._scene) {
541
553
  this.unbindSceneEvents(this._scene);
542
554
  this._scene.target = null;
@@ -620,6 +632,10 @@ let BoardViewer = class BoardViewer extends LitElement {
620
632
  this._scene.on('run-scenario', this.onRunScenario, this);
621
633
  this._scene.on('legend-toggle', this.onLegendToggle, this);
622
634
  this._scene.on('open-popup', this.onOpenPopup, this);
635
+ // VIEW 모드 SearchOverlay 디폴트 = 영구 추적 (things-scene 자동 처리).
636
+ // application 은 trackerOptions (color/fallback 등) 또는 onSearchSubmit/onSearchClose
637
+ // hook (디폴트 override) 만 제공.
638
+ this._scene.trackerOptions = { color: BoardViewer_1.TRACKING_COLOR };
623
639
  }
624
640
  unbindSceneEvents(scene) {
625
641
  scene.off('run', this.onRunBoard, this);
@@ -1174,6 +1190,9 @@ BoardViewer.styles = [
1174
1190
  }
1175
1191
  `
1176
1192
  ];
1193
+ /** SearchOverlay 의 query-submit 시 사용할 추적 색깔. things-scene 의 Scene.tracker
1194
+ * 가 폴링/데코/3D outline 색 동기화 일괄 관리. */
1195
+ BoardViewer.TRACKING_COLOR = '#00aaff7f';
1177
1196
  __decorate([
1178
1197
  property({ type: String })
1179
1198
  ], BoardViewer.prototype, "baseUrl", void 0);
@@ -1219,7 +1238,7 @@ __decorate([
1219
1238
  __decorate([
1220
1239
  property({ attribute: false })
1221
1240
  ], BoardViewer.prototype, "_fetchPlaybackData", void 0);
1222
- BoardViewer = __decorate([
1241
+ BoardViewer = BoardViewer_1 = __decorate([
1223
1242
  customElement('ox-board-viewer')
1224
1243
  ], BoardViewer);
1225
1244
  export { BoardViewer };