@fmsim/board 2.0.0-beta.105 → 2.0.0-beta.107

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.
@@ -15,6 +15,22 @@
15
15
  "module": "src/types.js"
16
16
  }
17
17
  },
18
+ {
19
+ "kind": "js",
20
+ "name": "setFlowReplayEnabled",
21
+ "declaration": {
22
+ "name": "setFlowReplayEnabled",
23
+ "module": "./config/flow-replay.js"
24
+ }
25
+ },
26
+ {
27
+ "kind": "js",
28
+ "name": "isFlowReplayEnabled",
29
+ "declaration": {
30
+ "name": "isFlowReplayEnabled",
31
+ "module": "./config/flow-replay.js"
32
+ }
33
+ },
18
34
  {
19
35
  "kind": "js",
20
36
  "name": "registerDefaultGroups",
@@ -2955,6 +2971,58 @@
2955
2971
  }
2956
2972
  ]
2957
2973
  },
2974
+ {
2975
+ "kind": "javascript-module",
2976
+ "path": "src/config/flow-replay.ts",
2977
+ "declarations": [
2978
+ {
2979
+ "kind": "function",
2980
+ "name": "setFlowReplayEnabled",
2981
+ "return": {
2982
+ "type": {
2983
+ "text": "void"
2984
+ }
2985
+ },
2986
+ "parameters": [
2987
+ {
2988
+ "name": "enabled",
2989
+ "type": {
2990
+ "text": "boolean"
2991
+ }
2992
+ }
2993
+ ],
2994
+ "description": "Flow-Replay(플레이백) 전역 활성 여부 설정. 부트스트랩에서 한 번 호출."
2995
+ },
2996
+ {
2997
+ "kind": "function",
2998
+ "name": "isFlowReplayEnabled",
2999
+ "return": {
3000
+ "type": {
3001
+ "text": "boolean"
3002
+ }
3003
+ },
3004
+ "description": "Flow-Replay(플레이백) 전역 활성 여부. 기본 true(활성)."
3005
+ }
3006
+ ],
3007
+ "exports": [
3008
+ {
3009
+ "kind": "js",
3010
+ "name": "setFlowReplayEnabled",
3011
+ "declaration": {
3012
+ "name": "setFlowReplayEnabled",
3013
+ "module": "src/config/flow-replay.ts"
3014
+ }
3015
+ },
3016
+ {
3017
+ "kind": "js",
3018
+ "name": "isFlowReplayEnabled",
3019
+ "declaration": {
3020
+ "name": "isFlowReplayEnabled",
3021
+ "module": "src/config/flow-replay.ts"
3022
+ }
3023
+ }
3024
+ ]
3025
+ },
2958
3026
  {
2959
3027
  "kind": "javascript-module",
2960
3028
  "path": "src/component/etc.ts",
@@ -11189,6 +11257,176 @@
11189
11257
  }
11190
11258
  ]
11191
11259
  },
11260
+ {
11261
+ "kind": "javascript-module",
11262
+ "path": "src/modeller/property-sidebar/styles/styles.ts",
11263
+ "declarations": [
11264
+ {
11265
+ "kind": "class",
11266
+ "description": "",
11267
+ "name": "PropertyStyles",
11268
+ "members": [
11269
+ {
11270
+ "kind": "field",
11271
+ "name": "value",
11272
+ "type": {
11273
+ "text": "any"
11274
+ },
11275
+ "default": "{}",
11276
+ "attribute": "value"
11277
+ },
11278
+ {
11279
+ "kind": "field",
11280
+ "name": "selected",
11281
+ "type": {
11282
+ "text": "Component[]"
11283
+ },
11284
+ "default": "[]",
11285
+ "attribute": "selected"
11286
+ },
11287
+ {
11288
+ "kind": "field",
11289
+ "name": "fonts",
11290
+ "type": {
11291
+ "text": "any[]"
11292
+ },
11293
+ "default": "[]",
11294
+ "attribute": "fonts"
11295
+ },
11296
+ {
11297
+ "kind": "method",
11298
+ "name": "onButtonGroupClick",
11299
+ "parameters": [
11300
+ {
11301
+ "name": "e",
11302
+ "type": {
11303
+ "text": "Event"
11304
+ }
11305
+ }
11306
+ ]
11307
+ },
11308
+ {
11309
+ "kind": "method",
11310
+ "name": "_isLine",
11311
+ "parameters": [
11312
+ {
11313
+ "name": "selected",
11314
+ "type": {
11315
+ "text": "Component[]"
11316
+ }
11317
+ }
11318
+ ]
11319
+ },
11320
+ {
11321
+ "kind": "method",
11322
+ "name": "_onValueChange",
11323
+ "parameters": [
11324
+ {
11325
+ "name": "e",
11326
+ "type": {
11327
+ "text": "Event"
11328
+ }
11329
+ }
11330
+ ],
11331
+ "inheritedFrom": {
11332
+ "name": "AbstractProperty",
11333
+ "module": "src/modeller/property-sidebar/abstract-property.ts"
11334
+ }
11335
+ },
11336
+ {
11337
+ "kind": "method",
11338
+ "name": "_getValueFromEventTarget",
11339
+ "parameters": [
11340
+ {
11341
+ "name": "element",
11342
+ "type": {
11343
+ "text": "HTMLElement"
11344
+ }
11345
+ }
11346
+ ],
11347
+ "inheritedFrom": {
11348
+ "name": "AbstractProperty",
11349
+ "module": "src/modeller/property-sidebar/abstract-property.ts"
11350
+ }
11351
+ },
11352
+ {
11353
+ "kind": "method",
11354
+ "name": "_onAfterValueChange",
11355
+ "parameters": [
11356
+ {
11357
+ "name": "key",
11358
+ "type": {
11359
+ "text": "string"
11360
+ }
11361
+ },
11362
+ {
11363
+ "name": "value",
11364
+ "type": {
11365
+ "text": "any"
11366
+ }
11367
+ }
11368
+ ],
11369
+ "inheritedFrom": {
11370
+ "name": "AbstractProperty",
11371
+ "module": "src/modeller/property-sidebar/abstract-property.ts"
11372
+ }
11373
+ }
11374
+ ],
11375
+ "attributes": [
11376
+ {
11377
+ "name": "value",
11378
+ "type": {
11379
+ "text": "any"
11380
+ },
11381
+ "default": "{}",
11382
+ "fieldName": "value"
11383
+ },
11384
+ {
11385
+ "name": "selected",
11386
+ "type": {
11387
+ "text": "Component[]"
11388
+ },
11389
+ "default": "[]",
11390
+ "fieldName": "selected"
11391
+ },
11392
+ {
11393
+ "name": "fonts",
11394
+ "type": {
11395
+ "text": "any[]"
11396
+ },
11397
+ "default": "[]",
11398
+ "fieldName": "fonts"
11399
+ }
11400
+ ],
11401
+ "superclass": {
11402
+ "name": "AbstractProperty",
11403
+ "module": "/src/modeller/property-sidebar/abstract-property.js"
11404
+ },
11405
+ "events": [
11406
+ {
11407
+ "name": "property-change",
11408
+ "type": {
11409
+ "text": "CustomEvent"
11410
+ },
11411
+ "inheritedFrom": {
11412
+ "name": "AbstractProperty",
11413
+ "module": "src/modeller/property-sidebar/abstract-property.ts"
11414
+ }
11415
+ }
11416
+ ]
11417
+ }
11418
+ ],
11419
+ "exports": [
11420
+ {
11421
+ "kind": "js",
11422
+ "name": "PropertyStyles",
11423
+ "declaration": {
11424
+ "name": "PropertyStyles",
11425
+ "module": "src/modeller/property-sidebar/styles/styles.ts"
11426
+ }
11427
+ }
11428
+ ]
11429
+ },
11192
11430
  {
11193
11431
  "kind": "javascript-module",
11194
11432
  "path": "src/modeller/property-sidebar/inspector/inspector-controller.ts",
@@ -12084,176 +12322,6 @@
12084
12322
  }
12085
12323
  }
12086
12324
  ]
12087
- },
12088
- {
12089
- "kind": "javascript-module",
12090
- "path": "src/modeller/property-sidebar/styles/styles.ts",
12091
- "declarations": [
12092
- {
12093
- "kind": "class",
12094
- "description": "",
12095
- "name": "PropertyStyles",
12096
- "members": [
12097
- {
12098
- "kind": "field",
12099
- "name": "value",
12100
- "type": {
12101
- "text": "any"
12102
- },
12103
- "default": "{}",
12104
- "attribute": "value"
12105
- },
12106
- {
12107
- "kind": "field",
12108
- "name": "selected",
12109
- "type": {
12110
- "text": "Component[]"
12111
- },
12112
- "default": "[]",
12113
- "attribute": "selected"
12114
- },
12115
- {
12116
- "kind": "field",
12117
- "name": "fonts",
12118
- "type": {
12119
- "text": "any[]"
12120
- },
12121
- "default": "[]",
12122
- "attribute": "fonts"
12123
- },
12124
- {
12125
- "kind": "method",
12126
- "name": "onButtonGroupClick",
12127
- "parameters": [
12128
- {
12129
- "name": "e",
12130
- "type": {
12131
- "text": "Event"
12132
- }
12133
- }
12134
- ]
12135
- },
12136
- {
12137
- "kind": "method",
12138
- "name": "_isLine",
12139
- "parameters": [
12140
- {
12141
- "name": "selected",
12142
- "type": {
12143
- "text": "Component[]"
12144
- }
12145
- }
12146
- ]
12147
- },
12148
- {
12149
- "kind": "method",
12150
- "name": "_onValueChange",
12151
- "parameters": [
12152
- {
12153
- "name": "e",
12154
- "type": {
12155
- "text": "Event"
12156
- }
12157
- }
12158
- ],
12159
- "inheritedFrom": {
12160
- "name": "AbstractProperty",
12161
- "module": "src/modeller/property-sidebar/abstract-property.ts"
12162
- }
12163
- },
12164
- {
12165
- "kind": "method",
12166
- "name": "_getValueFromEventTarget",
12167
- "parameters": [
12168
- {
12169
- "name": "element",
12170
- "type": {
12171
- "text": "HTMLElement"
12172
- }
12173
- }
12174
- ],
12175
- "inheritedFrom": {
12176
- "name": "AbstractProperty",
12177
- "module": "src/modeller/property-sidebar/abstract-property.ts"
12178
- }
12179
- },
12180
- {
12181
- "kind": "method",
12182
- "name": "_onAfterValueChange",
12183
- "parameters": [
12184
- {
12185
- "name": "key",
12186
- "type": {
12187
- "text": "string"
12188
- }
12189
- },
12190
- {
12191
- "name": "value",
12192
- "type": {
12193
- "text": "any"
12194
- }
12195
- }
12196
- ],
12197
- "inheritedFrom": {
12198
- "name": "AbstractProperty",
12199
- "module": "src/modeller/property-sidebar/abstract-property.ts"
12200
- }
12201
- }
12202
- ],
12203
- "attributes": [
12204
- {
12205
- "name": "value",
12206
- "type": {
12207
- "text": "any"
12208
- },
12209
- "default": "{}",
12210
- "fieldName": "value"
12211
- },
12212
- {
12213
- "name": "selected",
12214
- "type": {
12215
- "text": "Component[]"
12216
- },
12217
- "default": "[]",
12218
- "fieldName": "selected"
12219
- },
12220
- {
12221
- "name": "fonts",
12222
- "type": {
12223
- "text": "any[]"
12224
- },
12225
- "default": "[]",
12226
- "fieldName": "fonts"
12227
- }
12228
- ],
12229
- "superclass": {
12230
- "name": "AbstractProperty",
12231
- "module": "/src/modeller/property-sidebar/abstract-property.js"
12232
- },
12233
- "events": [
12234
- {
12235
- "name": "property-change",
12236
- "type": {
12237
- "text": "CustomEvent"
12238
- },
12239
- "inheritedFrom": {
12240
- "name": "AbstractProperty",
12241
- "module": "src/modeller/property-sidebar/abstract-property.ts"
12242
- }
12243
- }
12244
- ]
12245
- }
12246
- ],
12247
- "exports": [
12248
- {
12249
- "kind": "js",
12250
- "name": "PropertyStyles",
12251
- "declaration": {
12252
- "name": "PropertyStyles",
12253
- "module": "src/modeller/property-sidebar/styles/styles.ts"
12254
- }
12255
- }
12256
- ]
12257
12325
  }
12258
12326
  ]
12259
12327
  }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Flow-Replay(플레이백 = 과거 흐름 재생) 기능 ON/OFF 전역 설정.
3
+ *
4
+ * 3D 기능(things-scene 의 setThreedEnabled/isThreedEnabled)과 같은 방식이지만,
5
+ * 플레이백은 전적으로 fmsim(board) 안의 기능이라 엔진 전역이 아니라 fmsim 전역으로 둔다.
6
+ * 부트스트랩이 <things-app flow-replay-enabled="false"> 를 딱 한 번 읽어 여기에 밀어넣고,
7
+ * 뷰어(ox-board-viewer)가 이 값을 참조해 재생 FAB·시작 경로를 게이팅한다.
8
+ *
9
+ * 판정 규칙은 3D 와 동일한 opt-out: 명시적으로 "false" 일 때만 비활성, 그 외 전부 활성(기본 ON).
10
+ */
11
+ /** Flow-Replay(플레이백) 전역 활성 여부 설정. 부트스트랩에서 한 번 호출. */
12
+ export declare function setFlowReplayEnabled(enabled: boolean): void;
13
+ /** Flow-Replay(플레이백) 전역 활성 여부. 기본 true(활성). */
14
+ export declare function isFlowReplayEnabled(): boolean;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Flow-Replay(플레이백 = 과거 흐름 재생) 기능 ON/OFF 전역 설정.
3
+ *
4
+ * 3D 기능(things-scene 의 setThreedEnabled/isThreedEnabled)과 같은 방식이지만,
5
+ * 플레이백은 전적으로 fmsim(board) 안의 기능이라 엔진 전역이 아니라 fmsim 전역으로 둔다.
6
+ * 부트스트랩이 <things-app flow-replay-enabled="false"> 를 딱 한 번 읽어 여기에 밀어넣고,
7
+ * 뷰어(ox-board-viewer)가 이 값을 참조해 재생 FAB·시작 경로를 게이팅한다.
8
+ *
9
+ * 판정 규칙은 3D 와 동일한 opt-out: 명시적으로 "false" 일 때만 비활성, 그 외 전부 활성(기본 ON).
10
+ */
11
+ let _flowReplayEnabled = true;
12
+ /** Flow-Replay(플레이백) 전역 활성 여부 설정. 부트스트랩에서 한 번 호출. */
13
+ export function setFlowReplayEnabled(enabled) {
14
+ _flowReplayEnabled = enabled;
15
+ }
16
+ /** Flow-Replay(플레이백) 전역 활성 여부. 기본 true(활성). */
17
+ export function isFlowReplayEnabled() {
18
+ return _flowReplayEnabled;
19
+ }
20
+ //# sourceMappingURL=flow-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-replay.js","sourceRoot":"","sources":["../../../src/config/flow-replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,IAAI,kBAAkB,GAAG,IAAI,CAAA;AAE7B,qDAAqD;AACrD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,kBAAkB,GAAG,OAAO,CAAA;AAC9B,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,mBAAmB;IACjC,OAAO,kBAAkB,CAAA;AAC3B,CAAC","sourcesContent":["/**\n * Flow-Replay(플레이백 = 과거 흐름 재생) 기능 ON/OFF 전역 설정.\n *\n * 3D 기능(things-scene 의 setThreedEnabled/isThreedEnabled)과 같은 방식이지만,\n * 플레이백은 전적으로 fmsim(board) 안의 기능이라 엔진 전역이 아니라 fmsim 전역으로 둔다.\n * 부트스트랩이 <things-app flow-replay-enabled=\"false\"> 를 딱 한 번 읽어 여기에 밀어넣고,\n * 뷰어(ox-board-viewer)가 이 값을 참조해 재생 FAB·시작 경로를 게이팅한다.\n *\n * 판정 규칙은 3D 와 동일한 opt-out: 명시적으로 \"false\" 일 때만 비활성, 그 외 전부 활성(기본 ON).\n */\n\nlet _flowReplayEnabled = true\n\n/** Flow-Replay(플레이백) 전역 활성 여부 설정. 부트스트랩에서 한 번 호출. */\nexport function setFlowReplayEnabled(enabled: boolean): void {\n _flowReplayEnabled = enabled\n}\n\n/** Flow-Replay(플레이백) 전역 활성 여부. 기본 true(활성). */\nexport function isFlowReplayEnabled(): boolean {\n return _flowReplayEnabled\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  export * from './types.js';
2
+ export { setFlowReplayEnabled, isFlowReplayEnabled } from './config/flow-replay.js';
2
3
  export { registerDefaultGroups } from './component/register-default-groups.js';
3
4
  export { DataStorage } from './data-storage/data-storage.js';
4
5
  export { PlaybackEngine } from './playback/playback-engine.js';
package/dist/src/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './types.js';
2
+ export { setFlowReplayEnabled, isFlowReplayEnabled } from './config/flow-replay.js';
2
3
  export { registerDefaultGroups } from './component/register-default-groups.js';
3
4
  export { DataStorage } from './data-storage/data-storage.js';
4
5
  export { PlaybackEngine } from './playback/playback-engine.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;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
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAE1B,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AACnF,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 { setFlowReplayEnabled, isFlowReplayEnabled } from './config/flow-replay.js'\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,6 +1,6 @@
1
1
  import { EventMap } from '@hatiolab/things-scene';
2
2
  function dispatchFetchLvModelDataByMouseEvent(type, event, target) {
3
- var _a;
3
+ var _a, _b, _c;
4
4
  // 플레이백 모드 — 함수 자체를 실행하지 않음.
5
5
  // 1) 외부 모니터링 fetchLvModelDataByMouseEvent window 이벤트 차단
6
6
  // 2) realTarget 반환 차단 → onclick 의 후속 clickComponent dispatch 가
@@ -9,6 +9,10 @@ function dispatchFetchLvModelDataByMouseEvent(type, event, target) {
9
9
  if ((_a = target === null || target === void 0 ? void 0 : target.root) === null || _a === void 0 ? void 0 : _a.playbackMode)
10
10
  return undefined;
11
11
  const parent = target.parentObject;
12
+ // CapacityBar(Stocker/Zone) 처럼 세그먼트 게이지를 그리는 컴포넌트는, carrier/abnormal
13
+ // 모드에서 클릭된 세그먼트(Full/Empty/EmptyEmpty/Normal/Abnormal)를 함께 실어 보낸다.
14
+ // capacity 모드·비세그먼트 컴포넌트는 undefined → 필드 미포함.
15
+ const segment = (_c = (_b = target).segmentAtEvent) === null || _c === void 0 ? void 0 : _c.call(_b, event);
12
16
  if (target.getState('id')) {
13
17
  window.dispatchEvent(new CustomEvent('fetchLvModelDataByMouseEvent', {
14
18
  detail: {
@@ -24,7 +28,8 @@ function dispatchFetchLvModelDataByMouseEvent(type, event, target) {
24
28
  }
25
29
  : null
26
30
  },
27
- data: target.data
31
+ data: target.data,
32
+ ...(segment ? { segment } : {})
28
33
  }
29
34
  }
30
35
  }));
@@ -37,7 +42,8 @@ function dispatchFetchLvModelDataByMouseEvent(type, event, target) {
37
42
  type,
38
43
  event,
39
44
  model: parent.state,
40
- data: parent.data
45
+ data: parent.data,
46
+ ...(segment ? { segment } : {})
41
47
  }
42
48
  }
43
49
  }));
@@ -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,4BAA4B;IAC5B,0DAA0D;IAC1D,iEAAiE;IACjE,iEAAiE;IACjE,sDAAsD;IACtD,IAAI,MAAC,MAAc,aAAd,MAAM,uBAAN,MAAM,CAAU,IAAI,0CAAE,YAAY;QAAE,OAAO,SAAS,CAAA;IAEzD,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 // 플레이백 모드 — 함수 자체를 실행하지 않음.\n // 1) 외부 모니터링 fetchLvModelDataByMouseEvent window 이벤트 차단\n // 2) realTarget 반환 차단 → onclick 의 후속 clickComponent dispatch 가\n // realTarget = undefined 로 흘러 popup 등 후속 backend 호출 경로도 비활성\n // (popup 의 detailInfo() 가드와 더불어 백엔드 요청을 차단하는 1차 게이트.)\n if ((target as any)?.root?.playbackMode) return undefined\n\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 // 플레이백 모드 — 함수 자체를 실행하지 않음.\n // 1) 외부 모니터링 fetchLvModelDataByMouseEvent window 이벤트 차단\n // 2) realTarget 반환 차단 → onclick 의 후속 clickComponent dispatch 가\n // realTarget = undefined 로 흘러 popup 등 후속 backend 호출 경로도 비활성\n // (popup 의 detailInfo() 가드와 더불어 백엔드 요청을 차단하는 1차 게이트.)\n if ((target as any)?.root?.playbackMode) return undefined\n\n const parent = target.parentObject\n\n // CapacityBar(Stocker/Zone) 처럼 세그먼트 게이지를 그리는 컴포넌트는, carrier/abnormal\n // 모드에서 클릭된 세그먼트(Full/Empty/EmptyEmpty/Normal/Abnormal)를 함께 실어 보낸다.\n // capacity 모드·비세그먼트 컴포넌트는 undefined → 필드 미포함.\n const segment = (target as any).segmentAtEvent?.(event)\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 ...(segment ? { segment } : {})\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 ...(segment ? { segment } : {})\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"]}
@@ -30,7 +30,10 @@ export type PATH = {
30
30
  dstUnit: string;
31
31
  pathType: PathType;
32
32
  status: PathStatus;
33
- transportCnt: number;
33
+ /** 강조 대상 개수(신규 이름). 미지정 시 label 자동 생성에 사용. */
34
+ highlightTarget?: number;
35
+ /** @deprecated `highlightTarget` 로 개명됨. 하위호환을 위해 유지 — 읽을 때 highlightTarget 이 없으면 이 값을 사용. */
36
+ transportCnt?: number;
34
37
  label: string;
35
38
  styles?: PathStyles;
36
39
  };
@@ -9,6 +9,15 @@ const MOVEMENT_STYLES = {
9
9
  };
10
10
  const WING_FACTOR = Math.sqrt(3);
11
11
  const LINEWIDTH = 2;
12
+ /**
13
+ * highlightTarget(신규) 를 우선 사용하고, 없으면 transportCnt(deprecated) 로 폴백해
14
+ * 자동 라벨 문자열을 만든다(2 초과일 때만 개수 표시). 하위호환 단일 소스.
15
+ */
16
+ function autoHighlightLabel(path) {
17
+ var _a, _b;
18
+ const count = Number((_b = (_a = path.highlightTarget) !== null && _a !== void 0 ? _a : path.transportCnt) !== null && _b !== void 0 ? _b : 0);
19
+ return count > 1 ? String(count) : '';
20
+ }
12
21
  let MovementLayer = class MovementLayer extends Layer {
13
22
  constructor() {
14
23
  super(...arguments);
@@ -160,7 +169,7 @@ let MovementLayer = class MovementLayer extends Layer {
160
169
  dest.transcoordS2C(destCenter.x, destCenter.y, root)
161
170
  ];
162
171
  ctx.beginPath();
163
- this.drawArrow(ctx, srcPos, destPos, path.pathType, path.status, path.label || (Number(path.transportCnt || 0) > 1 ? String(path.transportCnt) : ''), path.styles);
172
+ this.drawArrow(ctx, srcPos, destPos, path.pathType, path.status, path.label || autoHighlightLabel(path), path.styles);
164
173
  ctx.stroke();
165
174
  });
166
175
  ctx.restore();
@@ -185,7 +194,7 @@ let MovementLayer = class MovementLayer extends Layer {
185
194
  beginSize: (_m = (_l = path.styles) === null || _l === void 0 ? void 0 : _l.beginSize) !== null && _m !== void 0 ? _m : 'size2',
186
195
  end: (_p = (_o = path.styles) === null || _o === void 0 ? void 0 : _o.end) !== null && _p !== void 0 ? _p : 'arrow',
187
196
  endSize: (_r = (_q = path.styles) === null || _q === void 0 ? void 0 : _q.endSize) !== null && _r !== void 0 ? _r : 'size2',
188
- label: path.label || (Number(path.transportCnt || 0) > 1 ? String(path.transportCnt) : '')
197
+ label: path.label || autoHighlightLabel(path)
189
198
  });
190
199
  });
191
200
  }