@fmsim/board 2.0.0-beta.8 → 2.0.0-beta.82

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 (94) hide show
  1. package/custom-elements.json +6273 -3458
  2. package/demo/index-modeller.html +1 -1
  3. package/demo/index-player.html +2 -2
  4. package/demo/index-viewer.html +2 -2
  5. package/demo/index.html +2 -2
  6. package/dist/src/component/etc.js +35 -0
  7. package/dist/src/component/etc.js.map +1 -1
  8. package/dist/src/component/index.d.ts +1 -0
  9. package/dist/src/component/index.js +1 -0
  10. package/dist/src/component/index.js.map +1 -1
  11. package/dist/src/component/restful-property-editor-backdrop-faces.d.ts +50 -0
  12. package/dist/src/component/restful-property-editor-backdrop-faces.js +524 -0
  13. package/dist/src/component/restful-property-editor-backdrop-faces.js.map +1 -0
  14. package/dist/src/data-storage/board-model-cache.d.ts +13 -0
  15. package/dist/src/data-storage/board-model-cache.js +66 -0
  16. package/dist/src/data-storage/board-model-cache.js.map +1 -0
  17. package/dist/src/index.d.ts +3 -0
  18. package/dist/src/index.js +2 -0
  19. package/dist/src/index.js.map +1 -1
  20. package/dist/src/layers/mcs-mouse-event-handler.js +36 -26
  21. package/dist/src/layers/mcs-mouse-event-handler.js.map +1 -1
  22. package/dist/src/layers/movement-layer.d.ts +4 -4
  23. package/dist/src/layers/movement-layer.js +16 -8
  24. package/dist/src/layers/movement-layer.js.map +1 -1
  25. package/dist/src/modeller/bulk-create-dialog.d.ts +51 -0
  26. package/dist/src/modeller/bulk-create-dialog.js +531 -0
  27. package/dist/src/modeller/bulk-create-dialog.js.map +1 -0
  28. package/dist/src/modeller/bulk-create.d.ts +101 -0
  29. package/dist/src/modeller/bulk-create.js +199 -0
  30. package/dist/src/modeller/bulk-create.js.map +1 -0
  31. package/dist/src/modeller/component-toolbar/component-menu.d.ts +1 -1
  32. package/dist/src/modeller/component-toolbar/component-toolbar.d.ts +1 -1
  33. package/dist/src/modeller/edit-toolbar-style.js +43 -3
  34. package/dist/src/modeller/edit-toolbar-style.js.map +1 -1
  35. package/dist/src/modeller/edit-toolbar.d.ts +13 -0
  36. package/dist/src/modeller/edit-toolbar.js +168 -7
  37. package/dist/src/modeller/edit-toolbar.js.map +1 -1
  38. package/dist/src/modeller/property-sidebar/abstract-property.js +10 -2
  39. package/dist/src/modeller/property-sidebar/abstract-property.js.map +1 -1
  40. package/dist/src/modeller/property-sidebar/data-binding/data-binding.d.ts +1 -1
  41. package/dist/src/modeller/property-sidebar/effects/effects.d.ts +1 -1
  42. package/dist/src/modeller/property-sidebar/effects/property-event.d.ts +1 -1
  43. package/dist/src/modeller/property-sidebar/property-sidebar.d.ts +1 -1
  44. package/dist/src/modeller/property-sidebar/shapes/shapes.js +31 -0
  45. package/dist/src/modeller/property-sidebar/shapes/shapes.js.map +1 -1
  46. package/dist/src/modeller/property-sidebar/specifics/specifics.d.ts +2 -1
  47. package/dist/src/modeller/property-sidebar/specifics/specifics.js +10 -0
  48. package/dist/src/modeller/property-sidebar/specifics/specifics.js.map +1 -1
  49. package/dist/src/modeller/property-sidebar/styles/styles.d.ts +1 -1
  50. package/dist/src/modeller/scene-viewer/ox-scene-layer.d.ts +4 -3
  51. package/dist/src/modeller/scene-viewer/ox-scene-layer.js +2 -1
  52. package/dist/src/modeller/scene-viewer/ox-scene-layer.js.map +1 -1
  53. package/dist/src/modeller/scene-viewer/ox-scene-viewer.d.ts +2 -1
  54. package/dist/src/modeller/scene-viewer/ox-scene-viewer.js +5 -1
  55. package/dist/src/modeller/scene-viewer/ox-scene-viewer.js.map +1 -1
  56. package/dist/src/ox-board-component-info.d.ts +1 -0
  57. package/dist/src/ox-board-component-info.js +5 -1
  58. package/dist/src/ox-board-component-info.js.map +1 -1
  59. package/dist/src/ox-board-list.js +2 -2
  60. package/dist/src/ox-board-list.js.map +1 -1
  61. package/dist/src/ox-board-modeller.d.ts +6 -3
  62. package/dist/src/ox-board-modeller.js +13 -1
  63. package/dist/src/ox-board-modeller.js.map +1 -1
  64. package/dist/src/ox-board-viewer.d.ts +113 -13
  65. package/dist/src/ox-board-viewer.js +753 -98
  66. package/dist/src/ox-board-viewer.js.map +1 -1
  67. package/dist/src/ox-editor-board-selector.d.ts +3 -0
  68. package/dist/src/ox-editor-board-selector.js +38 -9
  69. package/dist/src/ox-editor-board-selector.js.map +1 -1
  70. package/dist/src/ox-playback-controls.d.ts +157 -0
  71. package/dist/src/ox-playback-controls.js +1089 -0
  72. package/dist/src/ox-playback-controls.js.map +1 -0
  73. package/dist/src/playback/carrier-tracking-store.d.ts +51 -0
  74. package/dist/src/playback/carrier-tracking-store.js +115 -0
  75. package/dist/src/playback/carrier-tracking-store.js.map +1 -0
  76. package/dist/src/playback/playback-engine.d.ts +106 -0
  77. package/dist/src/playback/playback-engine.js +395 -0
  78. package/dist/src/playback/playback-engine.js.map +1 -0
  79. package/dist/src/selector/board-creation-popup.js +2 -2
  80. package/dist/src/selector/board-creation-popup.js.map +1 -1
  81. package/dist/src/selector/board-thumbnail-card.js +6 -6
  82. package/dist/src/selector/board-thumbnail-card.js.map +1 -1
  83. package/dist/src/selector/ox-board-creation-card.js +2 -2
  84. package/dist/src/selector/ox-board-creation-card.js.map +1 -1
  85. package/dist/src/selector/ox-board-selector.js +21 -10
  86. package/dist/src/selector/ox-board-selector.js.map +1 -1
  87. package/dist/tsconfig.tsbuildinfo +1 -1
  88. package/icons/components/text.png +0 -0
  89. package/icons/fab/mode-2d.svg +25 -0
  90. package/icons/fab/mode-3d.svg +25 -0
  91. package/icons/fab/playback-play.svg +49 -0
  92. package/icons/fab/playback-stop.svg +50 -0
  93. package/icons/icon-htoolbar.png +0 -0
  94. package/package.json +8 -4
package/dist/src/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  export * from './types.js';
2
2
  export { registerDefaultGroups } from './component/register-default-groups.js';
3
3
  export { DataStorage } from './data-storage/data-storage.js';
4
+ export { PlaybackEngine } from './playback/playback-engine.js';
5
+ export { BoardModelCache } from './data-storage/board-model-cache.js';
4
6
  export * from './ox-board-viewer.js';
5
7
  export * from './ox-board-modeller.js';
6
8
  export * from './ox-board-list.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAE1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAE5D,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAElC,cAAc,sBAAsB,CAAA","sourcesContent":["export * from './types.js'\n\nexport { registerDefaultGroups } from './component/register-default-groups.js'\nexport { DataStorage } from './data-storage/data-storage.js'\n\nexport * from './ox-board-viewer.js'\nexport * from './ox-board-modeller.js'\nexport * from './ox-board-list.js'\n\nexport * from './component/index.js'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAE1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAGrE,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAElC,cAAc,sBAAsB,CAAA","sourcesContent":["export * from './types.js'\n\nexport { registerDefaultGroups } from './component/register-default-groups.js'\nexport { DataStorage } from './data-storage/data-storage.js'\nexport { PlaybackEngine } from './playback/playback-engine.js'\nexport { BoardModelCache } from './data-storage/board-model-cache.js'\nexport type { CachedBoard } from './data-storage/board-model-cache.js'\n\nexport * from './ox-board-viewer.js'\nexport * from './ox-board-modeller.js'\nexport * from './ox-board-list.js'\n\nexport * from './component/index.js'\n"]}
@@ -1,38 +1,48 @@
1
1
  import { EventMap } from '@hatiolab/things-scene';
2
2
  function dispatchFetchLvModelDataByMouseEvent(type, event, target) {
3
+ var _a, _b, _c;
3
4
  const parent = target.parentObject;
5
+ // 플레이백 모드에서는 외부 백엔드 fetch 트리거 (fetchLvModelDataByMouseEvent
6
+ // window 이벤트) 를 차단. 사용자가 보는 시점은 과거이므로 현재 시점 fetch 가
7
+ // 의미 정합성을 깸. realTarget 결정 (parent escalation) 은 그대로 — popup /
8
+ // highlight 등 클릭 후속 동작에는 영향 없음.
9
+ const playbackMode = !!((_c = (_b = (_a = target === null || target === void 0 ? void 0 : target.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);
4
10
  if (target.getState('id')) {
5
- window.dispatchEvent(new CustomEvent('fetchLvModelDataByMouseEvent', {
6
- detail: {
7
- value: {
8
- type,
9
- event,
10
- model: {
11
- ...target.state,
12
- parentObject: parent
13
- ? {
14
- id: parent.get('id'),
15
- type: parent.get('type')
16
- }
17
- : null
18
- },
19
- data: target.data
11
+ if (!playbackMode) {
12
+ window.dispatchEvent(new CustomEvent('fetchLvModelDataByMouseEvent', {
13
+ detail: {
14
+ value: {
15
+ type,
16
+ event,
17
+ model: {
18
+ ...target.state,
19
+ parentObject: parent
20
+ ? {
21
+ id: parent.get('id'),
22
+ type: parent.get('type')
23
+ }
24
+ : null
25
+ },
26
+ data: target.data
27
+ }
20
28
  }
21
- }
22
- }));
29
+ }));
30
+ }
23
31
  return parent || target;
24
32
  }
25
33
  else if (parent && parent.getState('id')) {
26
- window.dispatchEvent(new CustomEvent('fetchLvModelDataByMouseEvent', {
27
- detail: {
28
- value: {
29
- type,
30
- event,
31
- model: parent.state,
32
- data: parent.data
34
+ if (!playbackMode) {
35
+ window.dispatchEvent(new CustomEvent('fetchLvModelDataByMouseEvent', {
36
+ detail: {
37
+ value: {
38
+ type,
39
+ event,
40
+ model: parent.state,
41
+ data: parent.data
42
+ }
33
43
  }
34
- }
35
- }));
44
+ }));
45
+ }
36
46
  return parent;
37
47
  }
38
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcs-mouse-event-handler.js","sourceRoot":"","sources":["../../../src/layers/mcs-mouse-event-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAE5D,SAAS,oCAAoC,CAC3C,IAAoC,EACpC,KAAiB,EACjB,MAAgD;IAEhD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAA;IAElC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,8BAA8B,EAAE;YAC9C,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,IAAI;oBACJ,KAAK;oBACL,KAAK,EAAE;wBACL,GAAG,MAAM,CAAC,KAAK;wBACf,YAAY,EAAE,MAAM;4BAClB,CAAC,CAAC;gCACE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gCACpB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;6BACzB;4BACH,CAAC,CAAC,IAAI;qBACT;oBACD,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB;aACF;SACF,CAAC,CACH,CAAA;QAED,OAAO,MAAM,IAAI,MAAM,CAAA;IACzB,CAAC;SAAM,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,8BAA8B,EAAE;YAC9C,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,IAAI;oBACJ,KAAK;oBACL,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB;aACF;SACF,CAAC,CACH,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,+BAA+B;AAE/B,4BAA4B;AAE5B,iEAAiE;AACjE,IAAI;AAEJ,SAAS,OAAO,CAAC,KAAiB,EAAE,IAAS;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,oCAAoC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;YAE/E,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,gBAAgB,EAAE;gBAChC,MAAM,EAAE,UAAU,IAAI,MAAM;aAC7B,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC,EAAE,GAAG,CAAC,CAAA;AACT,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB,EAAE,IAAS;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,YAAY,GAAG,EAAE,CAAA;IAC1B,CAAC,EAAE,GAAG,CAAC,CAAA;IAEP,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvB,MAAM,CAAC,YAAY,GAAG,UAAU,CAAA;IAEhC,oCAAoC,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AACjE,CAAC;AAED,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE;IACrC,aAAa,EAAE;QACb,OAAO,EAAE;YACP,6CAA6C;YAC7C,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;SACrB;KACF;CACF,CAAC,CAAA","sourcesContent":["import { Component, EventMap } from '@hatiolab/things-scene'\n\nfunction dispatchFetchLvModelDataByMouseEvent(\n type: 'hover' | 'click' | 'dblclick',\n event: MouseEvent,\n target: Component & { parentObject?: Component }\n): Component | undefined {\n const parent = target.parentObject\n\n if (target.getState('id')) {\n window.dispatchEvent(\n new CustomEvent('fetchLvModelDataByMouseEvent', {\n detail: {\n value: {\n type,\n event,\n model: {\n ...target.state,\n parentObject: parent\n ? {\n id: parent.get('id'),\n type: parent.get('type')\n }\n : null\n },\n data: target.data\n }\n }\n })\n )\n\n return parent || target\n } else if (parent && parent.getState('id')) {\n window.dispatchEvent(\n new CustomEvent('fetchLvModelDataByMouseEvent', {\n detail: {\n value: {\n type,\n event,\n model: parent.state,\n data: parent.data\n }\n }\n })\n )\n\n return parent\n }\n}\n\n// function onmouseenter(event: MouseEvent, hint: any) {\n// const target = hint.origin\n\n// event.stopPropagation()\n\n// dispatchFetchLvModelDataByMouseEvent('hover', event, target)\n// }\n\nfunction onclick(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n event.stopPropagation()\n\n setTimeout(() => {\n if (target.currentEvent !== 'dblclick') {\n const realTarget = dispatchFetchLvModelDataByMouseEvent('click', event, target)\n\n window.dispatchEvent(\n new CustomEvent('clickComponent', {\n detail: realTarget || target\n })\n )\n }\n }, 300)\n}\n\nfunction ondblclick(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n setTimeout(() => {\n target.currentEvent = ''\n }, 500)\n\n event.stopPropagation()\n\n target.currentEvent = 'dblclick'\n\n dispatchFetchLvModelDataByMouseEvent('dblclick', event, target)\n}\n\nEventMap.register('mcs-event-handler', {\n 'model-layer': {\n '(all)': {\n // mouseenter: onmouseenter, /* 사용되지 않고 있음 */\n click: onclick,\n dblclick: ondblclick\n }\n }\n})\n"]}
1
+ {"version":3,"file":"mcs-mouse-event-handler.js","sourceRoot":"","sources":["../../../src/layers/mcs-mouse-event-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventMap } from '@hatiolab/things-scene'\n\nfunction dispatchFetchLvModelDataByMouseEvent(\n type: 'hover' | 'click' | 'dblclick',\n event: MouseEvent,\n target: Component & { parentObject?: Component }\n): Component | undefined {\n const parent = target.parentObject\n\n // 플레이백 모드에서는 외부 백엔드 fetch 트리거 (fetchLvModelDataByMouseEvent\n // window 이벤트) 를 차단. 사용자가 보는 시점은 과거이므로 현재 시점 fetch 가\n // 의미 정합성을 깸. realTarget 결정 (parent escalation) 은 그대로 — popup /\n // highlight 등 클릭 후속 동작에는 영향 없음.\n const playbackMode = !!(target as any)?.root?.app?.scene?.playbackMode\n\n if (target.getState('id')) {\n if (!playbackMode) {\n window.dispatchEvent(\n new CustomEvent('fetchLvModelDataByMouseEvent', {\n detail: {\n value: {\n type,\n event,\n model: {\n ...target.state,\n parentObject: parent\n ? {\n id: parent.get('id'),\n type: parent.get('type')\n }\n : null\n },\n data: target.data\n }\n }\n })\n )\n }\n\n return parent || target\n } else if (parent && parent.getState('id')) {\n if (!playbackMode) {\n window.dispatchEvent(\n new CustomEvent('fetchLvModelDataByMouseEvent', {\n detail: {\n value: {\n type,\n event,\n model: parent.state,\n data: parent.data\n }\n }\n })\n )\n }\n\n return parent\n }\n}\n\n// function onmouseenter(event: MouseEvent, hint: any) {\n// const target = hint.origin\n\n// event.stopPropagation()\n\n// dispatchFetchLvModelDataByMouseEvent('hover', event, target)\n// }\n\nfunction onclick(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n event.stopPropagation()\n\n setTimeout(() => {\n if (target.currentEvent !== 'dblclick') {\n const realTarget = dispatchFetchLvModelDataByMouseEvent('click', event, target)\n\n window.dispatchEvent(\n new CustomEvent('clickComponent', {\n detail: realTarget || target\n })\n )\n }\n }, 300)\n}\n\nfunction ondblclick(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n setTimeout(() => {\n target.currentEvent = ''\n }, 500)\n\n event.stopPropagation()\n\n target.currentEvent = 'dblclick'\n\n dispatchFetchLvModelDataByMouseEvent('dblclick', event, target)\n}\n\nEventMap.register('mcs-event-handler', {\n 'model-layer': {\n '(all)': {\n // mouseenter: onmouseenter, /* 사용되지 않고 있음 */\n click: onclick,\n dblclick: ondblclick\n }\n }\n})\n"]}
@@ -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,16 +29,14 @@ 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 = [];
30
36
  }
31
37
  async ready() {
32
- const handler = (e) => {
33
- this.data = e.detail;
34
- };
35
- this.drawInstructionHandler = handler.bind(this);
38
+ window.removeEventListener('drawInstruction', this.drawInstructionHandler);
39
+ window.removeEventListener('clickComponent', this.clickComponentHandler);
36
40
  window.addEventListener('drawInstruction', this.drawInstructionHandler);
37
41
  window.addEventListener('clickComponent', this.clickComponentHandler);
38
42
  }
@@ -49,6 +53,11 @@ let MovementLayer = class MovementLayer extends Layer {
49
53
  get pointerEvents() {
50
54
  return 'none';
51
55
  }
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
52
61
  get capturable() {
53
62
  return false;
54
63
  }
@@ -189,12 +198,12 @@ let MovementLayer = class MovementLayer extends Layer {
189
198
  }
190
199
  };
191
200
  }
192
- onchangeModelLayer(after, before, hint) {
201
+ onchangeModelLayer(after, _before, _hint) {
193
202
  if (after.scale || after.translate) {
194
203
  this.invalidate();
195
204
  }
196
205
  }
197
- onchangeData(after, before) {
206
+ onchangeData(_after, _before) {
198
207
  this.invalidate();
199
208
  }
200
209
  };
@@ -205,7 +214,6 @@ export default MovementLayer;
205
214
  function getTipNeckPos(tipType, lineWidth, p1, p2) {
206
215
  if (tipType.slice(-5) != 'arrow')
207
216
  return p1;
208
- var { x, y } = p1;
209
217
  var theta = Math.atan2(p2.y - p1.y, p2.x - p1.x);
210
218
  var diff = lineWidth * 1.5;
211
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 const handler = (e: Event) => {\n this.data = (e as CustomEvent).detail\n }\n\n this.drawInstructionHandler = handler.bind(this)\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 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"]}
@@ -0,0 +1,51 @@
1
+ import { LitElement } from 'lit';
2
+ import { generateBulkComponents, type Area } from './bulk-create.js';
3
+ export type ConflictPolicy = 'skip' | 'duplicate';
4
+ export interface BulkCreateDialogProps {
5
+ /** 템플릿 컴포넌트 state (read-only 표시용). */
6
+ template: Record<string, any>;
7
+ /** 초기 영역 (보드 좌표). 사용자가 dialog 내에서 조정 가능. */
8
+ initialArea: Area;
9
+ /** 기존 scene 의 모든 ID — 충돌 검사. */
10
+ existingIds?: Set<string>;
11
+ /** OK 클릭 시 콜백 — 생성할 model 배열 전달. */
12
+ onConfirm: (models: ReturnType<typeof generateBulkComponents>) => void;
13
+ /** 취소 / 닫기 콜백. */
14
+ onCancel?: () => void;
15
+ }
16
+ export declare class BulkCreateDialog extends LitElement {
17
+ static styles: import("lit").CSSResult;
18
+ template: Record<string, any>;
19
+ initialArea: Area;
20
+ existingIds: Set<string>;
21
+ onConfirm: BulkCreateDialogProps['onConfirm'];
22
+ onCancel?: BulkCreateDialogProps['onCancel'];
23
+ private pattern;
24
+ private count;
25
+ private rows;
26
+ private cols;
27
+ private idPattern;
28
+ private idStart;
29
+ private idPadding;
30
+ private area;
31
+ private conflictPolicy;
32
+ countInput: HTMLInputElement;
33
+ connectedCallback(): void;
34
+ /** rows/cols 가 미입력 (undefined) 이면 영역 종횡비 + count 로 자동 계산해 표시. */
35
+ private get displayRows();
36
+ private get displayCols();
37
+ firstUpdated(): void;
38
+ private updateArea;
39
+ private get previewModels();
40
+ private get conflicts();
41
+ /** 충돌 정책 적용 후 실제 생성될 model 배열. */
42
+ private get effectiveModels();
43
+ private onOk;
44
+ private onCancelClick;
45
+ render(): import("lit-html").TemplateResult<1>;
46
+ }
47
+ declare global {
48
+ interface HTMLElementTagNameMap {
49
+ 'bulk-create-dialog': BulkCreateDialog;
50
+ }
51
+ }