@fmsim/board 0.0.49

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 (226) hide show
  1. package/.storybook/main.js +3 -0
  2. package/.storybook/server.mjs +8 -0
  3. package/custom-elements.json +6500 -0
  4. package/demo/index-modeller.html +102 -0
  5. package/demo/index-player.html +101 -0
  6. package/demo/index-viewer.html +101 -0
  7. package/demo/index.html +101 -0
  8. package/dist/src/component/etc.d.ts +2 -0
  9. package/dist/src/component/etc.js +104 -0
  10. package/dist/src/component/etc.js.map +1 -0
  11. package/dist/src/component/index.d.ts +1 -0
  12. package/dist/src/component/index.js +2 -0
  13. package/dist/src/component/index.js.map +1 -0
  14. package/dist/src/component/register-default-groups.d.ts +1 -0
  15. package/dist/src/component/register-default-groups.js +6 -0
  16. package/dist/src/component/register-default-groups.js.map +1 -0
  17. package/dist/src/data-storage/data-storage.d.ts +8 -0
  18. package/dist/src/data-storage/data-storage.js +28 -0
  19. package/dist/src/data-storage/data-storage.js.map +1 -0
  20. package/dist/src/graphql/board.d.ts +6 -0
  21. package/dist/src/graphql/board.js +139 -0
  22. package/dist/src/graphql/board.js.map +1 -0
  23. package/dist/src/graphql/data-subscription.d.ts +5 -0
  24. package/dist/src/graphql/data-subscription.js +24 -0
  25. package/dist/src/graphql/data-subscription.js.map +1 -0
  26. package/dist/src/graphql/favorite-board.d.ts +1 -0
  27. package/dist/src/graphql/favorite-board.js +23 -0
  28. package/dist/src/graphql/favorite-board.js.map +1 -0
  29. package/dist/src/graphql/group.d.ts +7 -0
  30. package/dist/src/graphql/group.js +125 -0
  31. package/dist/src/graphql/group.js.map +1 -0
  32. package/dist/src/graphql/index.d.ts +4 -0
  33. package/dist/src/graphql/index.js +5 -0
  34. package/dist/src/graphql/index.js.map +1 -0
  35. package/dist/src/graphql/play-group.d.ts +8 -0
  36. package/dist/src/graphql/play-group.js +173 -0
  37. package/dist/src/graphql/play-group.js.map +1 -0
  38. package/dist/src/graphql/scenario.d.ts +6 -0
  39. package/dist/src/graphql/scenario.js +69 -0
  40. package/dist/src/graphql/scenario.js.map +1 -0
  41. package/dist/src/index.d.ts +6 -0
  42. package/dist/src/index.js +7 -0
  43. package/dist/src/index.js.map +1 -0
  44. package/dist/src/layers/bouncing-arrow-decorator.d.ts +1 -0
  45. package/dist/src/layers/bouncing-arrow-decorator.js +40 -0
  46. package/dist/src/layers/bouncing-arrow-decorator.js.map +1 -0
  47. package/dist/src/layers/event-handlers.d.ts +1 -0
  48. package/dist/src/layers/event-handlers.js +70 -0
  49. package/dist/src/layers/event-handlers.js.map +1 -0
  50. package/dist/src/layers/mcs-event-handlers.d.ts +1 -0
  51. package/dist/src/layers/mcs-event-handlers.js +73 -0
  52. package/dist/src/layers/mcs-event-handlers.js.map +1 -0
  53. package/dist/src/layers/movement-layer.d.ts +27 -0
  54. package/dist/src/layers/movement-layer.js +109 -0
  55. package/dist/src/layers/movement-layer.js.map +1 -0
  56. package/dist/src/layers/ox-mini-map.d.ts +1 -0
  57. package/dist/src/layers/ox-mini-map.js +189 -0
  58. package/dist/src/layers/ox-mini-map.js.map +1 -0
  59. package/dist/src/layers/scroll-layer.d.ts +24 -0
  60. package/dist/src/layers/scroll-layer.js +125 -0
  61. package/dist/src/layers/scroll-layer.js.map +1 -0
  62. package/dist/src/layers/shift-handler.d.ts +1 -0
  63. package/dist/src/layers/shift-handler.js +38 -0
  64. package/dist/src/layers/shift-handler.js.map +1 -0
  65. package/dist/src/layers/zoom-handler.d.ts +1 -0
  66. package/dist/src/layers/zoom-handler.js +36 -0
  67. package/dist/src/layers/zoom-handler.js.map +1 -0
  68. package/dist/src/modeller/component-toolbar/component-detail.d.ts +12 -0
  69. package/dist/src/modeller/component-toolbar/component-detail.js +53 -0
  70. package/dist/src/modeller/component-toolbar/component-detail.js.map +1 -0
  71. package/dist/src/modeller/component-toolbar/component-menu.d.ts +27 -0
  72. package/dist/src/modeller/component-toolbar/component-menu.js +192 -0
  73. package/dist/src/modeller/component-toolbar/component-menu.js.map +1 -0
  74. package/dist/src/modeller/component-toolbar/component-toolbar.d.ts +30 -0
  75. package/dist/src/modeller/component-toolbar/component-toolbar.js +188 -0
  76. package/dist/src/modeller/component-toolbar/component-toolbar.js.map +1 -0
  77. package/dist/src/modeller/component-toolbar/mode-icons.d.ts +2 -0
  78. package/dist/src/modeller/component-toolbar/mode-icons.js +86 -0
  79. package/dist/src/modeller/component-toolbar/mode-icons.js.map +1 -0
  80. package/dist/src/modeller/edit-toolbar-style.d.ts +4 -0
  81. package/dist/src/modeller/edit-toolbar-style.js +227 -0
  82. package/dist/src/modeller/edit-toolbar-style.js.map +1 -0
  83. package/dist/src/modeller/edit-toolbar.d.ts +61 -0
  84. package/dist/src/modeller/edit-toolbar.js +646 -0
  85. package/dist/src/modeller/edit-toolbar.js.map +1 -0
  86. package/dist/src/modeller/property-sidebar/abstract-property.d.ts +10 -0
  87. package/dist/src/modeller/property-sidebar/abstract-property.js +55 -0
  88. package/dist/src/modeller/property-sidebar/abstract-property.js.map +1 -0
  89. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.d.ts +54 -0
  90. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.js +392 -0
  91. package/dist/src/modeller/property-sidebar/data-binding/data-binding-mapper.js.map +1 -0
  92. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-map.d.ts +6 -0
  93. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-map.js +19 -0
  94. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-map.js.map +1 -0
  95. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-range.d.ts +6 -0
  96. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-range.js +19 -0
  97. package/dist/src/modeller/property-sidebar/data-binding/data-binding-value-range.js.map +1 -0
  98. package/dist/src/modeller/property-sidebar/data-binding/data-binding.d.ts +43 -0
  99. package/dist/src/modeller/property-sidebar/data-binding/data-binding.js +416 -0
  100. package/dist/src/modeller/property-sidebar/data-binding/data-binding.js.map +1 -0
  101. package/dist/src/modeller/property-sidebar/effects/effects-shared-style.d.ts +4 -0
  102. package/dist/src/modeller/property-sidebar/effects/effects-shared-style.js +61 -0
  103. package/dist/src/modeller/property-sidebar/effects/effects-shared-style.js.map +1 -0
  104. package/dist/src/modeller/property-sidebar/effects/effects.d.ts +22 -0
  105. package/dist/src/modeller/property-sidebar/effects/effects.js +46 -0
  106. package/dist/src/modeller/property-sidebar/effects/effects.js.map +1 -0
  107. package/dist/src/modeller/property-sidebar/effects/property-event-hover.d.ts +20 -0
  108. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js +128 -0
  109. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js.map +1 -0
  110. package/dist/src/modeller/property-sidebar/effects/property-event-tap.d.ts +28 -0
  111. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js +190 -0
  112. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js.map +1 -0
  113. package/dist/src/modeller/property-sidebar/effects/property-event.d.ts +22 -0
  114. package/dist/src/modeller/property-sidebar/effects/property-event.js +55 -0
  115. package/dist/src/modeller/property-sidebar/effects/property-event.js.map +1 -0
  116. package/dist/src/modeller/property-sidebar/effects/property-shadow.d.ts +23 -0
  117. package/dist/src/modeller/property-sidebar/effects/property-shadow.js +103 -0
  118. package/dist/src/modeller/property-sidebar/effects/property-shadow.js.map +1 -0
  119. package/dist/src/modeller/property-sidebar/effects/value-converter.d.ts +1 -0
  120. package/dist/src/modeller/property-sidebar/effects/value-converter.js +21 -0
  121. package/dist/src/modeller/property-sidebar/effects/value-converter.js.map +1 -0
  122. package/dist/src/modeller/property-sidebar/inspector/inspector.d.ts +29 -0
  123. package/dist/src/modeller/property-sidebar/inspector/inspector.js +334 -0
  124. package/dist/src/modeller/property-sidebar/inspector/inspector.js.map +1 -0
  125. package/dist/src/modeller/property-sidebar/property-shared-style.d.ts +4 -0
  126. package/dist/src/modeller/property-sidebar/property-shared-style.js +135 -0
  127. package/dist/src/modeller/property-sidebar/property-shared-style.js.map +1 -0
  128. package/dist/src/modeller/property-sidebar/property-sidebar.d.ts +47 -0
  129. package/dist/src/modeller/property-sidebar/property-sidebar.js +324 -0
  130. package/dist/src/modeller/property-sidebar/property-sidebar.js.map +1 -0
  131. package/dist/src/modeller/property-sidebar/shapes/box-padding-editor-styles.d.ts +1 -0
  132. package/dist/src/modeller/property-sidebar/shapes/box-padding-editor-styles.js +94 -0
  133. package/dist/src/modeller/property-sidebar/shapes/box-padding-editor-styles.js.map +1 -0
  134. package/dist/src/modeller/property-sidebar/shapes/shapes.d.ts +25 -0
  135. package/dist/src/modeller/property-sidebar/shapes/shapes.js +354 -0
  136. package/dist/src/modeller/property-sidebar/shapes/shapes.js.map +1 -0
  137. package/dist/src/modeller/property-sidebar/specifics/specific-properties-builder.d.ts +16 -0
  138. package/dist/src/modeller/property-sidebar/specifics/specific-properties-builder.js +132 -0
  139. package/dist/src/modeller/property-sidebar/specifics/specific-properties-builder.js.map +1 -0
  140. package/dist/src/modeller/property-sidebar/specifics/specifics.d.ts +28 -0
  141. package/dist/src/modeller/property-sidebar/specifics/specifics.js +129 -0
  142. package/dist/src/modeller/property-sidebar/specifics/specifics.js.map +1 -0
  143. package/dist/src/modeller/property-sidebar/styles/styles.d.ts +21 -0
  144. package/dist/src/modeller/property-sidebar/styles/styles.js +559 -0
  145. package/dist/src/modeller/property-sidebar/styles/styles.js.map +1 -0
  146. package/dist/src/modeller/scene-viewer/confidential-overlay.d.ts +4 -0
  147. package/dist/src/modeller/scene-viewer/confidential-overlay.js +14 -0
  148. package/dist/src/modeller/scene-viewer/confidential-overlay.js.map +1 -0
  149. package/dist/src/modeller/scene-viewer/ox-scene-handler.d.ts +11 -0
  150. package/dist/src/modeller/scene-viewer/ox-scene-handler.js +36 -0
  151. package/dist/src/modeller/scene-viewer/ox-scene-handler.js.map +1 -0
  152. package/dist/src/modeller/scene-viewer/ox-scene-layer.d.ts +10 -0
  153. package/dist/src/modeller/scene-viewer/ox-scene-layer.js +42 -0
  154. package/dist/src/modeller/scene-viewer/ox-scene-layer.js.map +1 -0
  155. package/dist/src/modeller/scene-viewer/ox-scene-property.d.ts +6 -0
  156. package/dist/src/modeller/scene-viewer/ox-scene-property.js +19 -0
  157. package/dist/src/modeller/scene-viewer/ox-scene-property.js.map +1 -0
  158. package/dist/src/modeller/scene-viewer/ox-scene-viewer.d.ts +40 -0
  159. package/dist/src/modeller/scene-viewer/ox-scene-viewer.js +253 -0
  160. package/dist/src/modeller/scene-viewer/ox-scene-viewer.js.map +1 -0
  161. package/dist/src/ox-board-list.d.ts +2 -0
  162. package/dist/src/ox-board-list.js +425 -0
  163. package/dist/src/ox-board-list.js.map +1 -0
  164. package/dist/src/ox-board-modeller.d.ts +57 -0
  165. package/dist/src/ox-board-modeller.js +401 -0
  166. package/dist/src/ox-board-modeller.js.map +1 -0
  167. package/dist/src/ox-board-viewer-backup.d.ts +64 -0
  168. package/dist/src/ox-board-viewer-backup.js +529 -0
  169. package/dist/src/ox-board-viewer-backup.js.map +1 -0
  170. package/dist/src/ox-board-viewer-other.d.ts +19 -0
  171. package/dist/src/ox-board-viewer-other.js +82 -0
  172. package/dist/src/ox-board-viewer-other.js.map +1 -0
  173. package/dist/src/ox-board-viewer.d.ts +60 -0
  174. package/dist/src/ox-board-viewer.js +503 -0
  175. package/dist/src/ox-board-viewer.js.map +1 -0
  176. package/dist/src/ox-editor-board-selector.d.ts +15 -0
  177. package/dist/src/ox-editor-board-selector.js +85 -0
  178. package/dist/src/ox-editor-board-selector.js.map +1 -0
  179. package/dist/src/ox-property-editor-board-selector.d.ts +4 -0
  180. package/dist/src/ox-property-editor-board-selector.js +22 -0
  181. package/dist/src/ox-property-editor-board-selector.js.map +1 -0
  182. package/dist/src/ox-property-editor-theme.d.ts +19 -0
  183. package/dist/src/ox-property-editor-theme.js +111 -0
  184. package/dist/src/ox-property-editor-theme.js.map +1 -0
  185. package/dist/src/selector/board-creation-popup.d.ts +19 -0
  186. package/dist/src/selector/board-creation-popup.js +100 -0
  187. package/dist/src/selector/board-creation-popup.js.map +1 -0
  188. package/dist/src/selector/board-thumbnail-card.d.ts +15 -0
  189. package/dist/src/selector/board-thumbnail-card.js +168 -0
  190. package/dist/src/selector/board-thumbnail-card.js.map +1 -0
  191. package/dist/src/selector/ox-board-creation-card.d.ts +14 -0
  192. package/dist/src/selector/ox-board-creation-card.js +84 -0
  193. package/dist/src/selector/ox-board-creation-card.js.map +1 -0
  194. package/dist/src/selector/ox-board-selector.d.ts +45 -0
  195. package/dist/src/selector/ox-board-selector.js +273 -0
  196. package/dist/src/selector/ox-board-selector.js.map +1 -0
  197. package/dist/src/types.d.ts +37 -0
  198. package/dist/src/types.js +2 -0
  199. package/dist/src/types.js.map +1 -0
  200. package/dist/stories/index.stories.d.ts +33 -0
  201. package/dist/stories/index.stories.js +33 -0
  202. package/dist/stories/index.stories.js.map +1 -0
  203. package/dist/tsconfig.tsbuildinfo +1 -0
  204. package/icons/components/dash.png +0 -0
  205. package/icons/components/ellipse.png +0 -0
  206. package/icons/components/line.png +0 -0
  207. package/icons/components/no-image.png +0 -0
  208. package/icons/components/popup.png +0 -0
  209. package/icons/components/rect.png +0 -0
  210. package/icons/icon-collapse-active.png +0 -0
  211. package/icons/icon-collapse.png +0 -0
  212. package/icons/icon-fullscreen.png +0 -0
  213. package/icons/icon-htoolbar.png +0 -0
  214. package/icons/icon-properties-arrow-type.png +0 -0
  215. package/icons/icon-properties-gradient-direction.png +0 -0
  216. package/icons/icon-properties-label.png +0 -0
  217. package/icons/icon-properties-line-type.png +0 -0
  218. package/icons/icon-properties-padding.png +0 -0
  219. package/icons/icon-properties-ratio.png +0 -0
  220. package/icons/icon-properties-table.png +0 -0
  221. package/icons/icon-properties.png +0 -0
  222. package/icons/icon-shell-inspector.png +0 -0
  223. package/package.json +149 -0
  224. package/stories/index.stories.ts +52 -0
  225. package/web-dev-server.config.mjs +30 -0
  226. package/web-test-runner.config.mjs +29 -0
@@ -0,0 +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","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"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ import { Component } from '@hatiolab/things-scene';
2
+ function bounce(delta) {
3
+ const progress = (1 - delta) * 100;
4
+ const round = progress / 10;
5
+ const bounce = progress % 10; /* 10회 바운스 */
6
+ return bounce < 5 ? bounce : 10 - bounce;
7
+ }
8
+ function bouncingArrowDecorator(component, context, delta /* 1 ~ 0 */) {
9
+ let { left, top, width } = component.bounds;
10
+ let decotag = component.decotag;
11
+ let { x, y } = component.transcoordS2C(left + width / 2, top, component.rootModel);
12
+ const BOUNCE = bounce(delta || 0) * 2;
13
+ x = Math.max(x, 20);
14
+ y = Math.max(y, 20);
15
+ context.beginPath();
16
+ context.moveTo(x - 10, y - 16 + BOUNCE);
17
+ context.lineTo(x + 10, y - 16 + BOUNCE);
18
+ context.lineTo(x + 10, y - 8 + BOUNCE);
19
+ context.lineTo(x + 16, y - 8 + BOUNCE);
20
+ context.lineTo(x, y + BOUNCE);
21
+ context.lineTo(x - 16, y - 8 + BOUNCE);
22
+ context.lineTo(x - 10, y - 8 + BOUNCE);
23
+ context.lineTo(x - 10, y - 16 + BOUNCE);
24
+ context.lineTo(x - 10, y - 16 + BOUNCE);
25
+ context.fillStyle = '#FF0000';
26
+ context.fill();
27
+ if (decotag) {
28
+ context.beginPath();
29
+ context.font = '12px Arial';
30
+ let metrics = context.measureText(decotag);
31
+ context.fillStyle = '#FF0000';
32
+ context.roundRect(x - metrics.actualBoundingBoxLeft - 3 + 20, y - metrics.actualBoundingBoxAscent - 3 - 6 + BOUNCE, metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight + 3 * 2, metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent + 3 * 2, 3 /* round */);
33
+ context.fill();
34
+ context.fillStyle = 'white';
35
+ context.fillText(decotag, x + 20, y - 6 + BOUNCE);
36
+ }
37
+ return true; /* need animation */
38
+ }
39
+ Component.registerDecorator('bouncing-arrow', bouncingArrowDecorator);
40
+ //# sourceMappingURL=bouncing-arrow-decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bouncing-arrow-decorator.js","sourceRoot":"","sources":["../../../src/layers/bouncing-arrow-decorator.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@hatiolab/things-scene'\n\nfunction bounce(delta: number): number {\n const progress = (1 - delta) * 100\n const round = progress / 10\n const bounce = progress % 10 /* 10회 바운스 */\n\n return bounce < 5 ? bounce : 10 - bounce\n}\n\nfunction bouncingArrowDecorator(component: Component, context: any, delta?: number /* 1 ~ 0 */) {\n let { left, top, width } = component.bounds\n let decotag = (component as any).decotag\n let { x, y } = (component as any).transcoordS2C(left + width / 2, top, component.rootModel)\n\n const BOUNCE = bounce(delta || 0) * 2\n\n x = Math.max(x, 20)\n y = Math.max(y, 20)\n\n context.beginPath()\n\n context.moveTo(x - 10, y - 16 + BOUNCE)\n context.lineTo(x + 10, y - 16 + BOUNCE)\n context.lineTo(x + 10, y - 8 + BOUNCE)\n context.lineTo(x + 16, y - 8 + BOUNCE)\n context.lineTo(x, y + BOUNCE)\n context.lineTo(x - 16, y - 8 + BOUNCE)\n context.lineTo(x - 10, y - 8 + BOUNCE)\n context.lineTo(x - 10, y - 16 + BOUNCE)\n context.lineTo(x - 10, y - 16 + BOUNCE)\n\n context.fillStyle = '#FF0000'\n\n context.fill()\n\n if (decotag) {\n context.beginPath()\n\n context.font = '12px Arial'\n let metrics = context.measureText(decotag)\n\n context.fillStyle = '#FF0000'\n context.roundRect(\n x - metrics.actualBoundingBoxLeft - 3 + 20,\n y - metrics.actualBoundingBoxAscent - 3 - 6 + BOUNCE,\n metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight + 3 * 2,\n metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent + 3 * 2,\n 3 /* round */\n )\n\n context.fill()\n\n context.fillStyle = 'white'\n context.fillText(decotag, x + 20, y - 6 + BOUNCE)\n }\n\n return true /* need animation */\n}\n\nComponent.registerDecorator('bouncing-arrow', bouncingArrowDecorator)\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,70 @@
1
+ import { EventMap } from '@hatiolab/things-scene';
2
+ function onmouseenter(event, hint) {
3
+ var _a;
4
+ const target = hint.origin;
5
+ if (!((_a = target.model) === null || _a === void 0 ? void 0 : _a.id)) {
6
+ return;
7
+ }
8
+ event.stopPropagation();
9
+ window.dispatchEvent(new CustomEvent('fetchFmbModelDataByMouseEvent', {
10
+ detail: {
11
+ value: {
12
+ type: 'hover',
13
+ event,
14
+ model: target.model
15
+ }
16
+ }
17
+ }));
18
+ }
19
+ function onclick(event, hint) {
20
+ var _a;
21
+ const target = hint.origin;
22
+ if (!((_a = target.model) === null || _a === void 0 ? void 0 : _a.id)) {
23
+ return;
24
+ }
25
+ event.stopPropagation();
26
+ setTimeout(() => {
27
+ if (target.currentEvent !== 'dblclick') {
28
+ window.dispatchEvent(new CustomEvent('fetchFmbModelDataByMouseEvent', {
29
+ detail: {
30
+ value: {
31
+ type: 'click',
32
+ event,
33
+ model: target.model
34
+ }
35
+ }
36
+ }));
37
+ }
38
+ }, 300);
39
+ }
40
+ function ondblclick(event, hint) {
41
+ var _a;
42
+ const target = hint.origin;
43
+ if (!((_a = target.model) === null || _a === void 0 ? void 0 : _a.id)) {
44
+ return;
45
+ }
46
+ event.stopPropagation();
47
+ target.currentEvent = 'dblclick';
48
+ window.dispatchEvent(new CustomEvent('fetchFmbModelDataByMouseEvent', {
49
+ detail: {
50
+ value: {
51
+ type: 'dblclick',
52
+ event,
53
+ model: target.model
54
+ }
55
+ }
56
+ }));
57
+ setTimeout(() => {
58
+ target.currentEvent = '';
59
+ }, 500);
60
+ }
61
+ EventMap.register('event-handler', {
62
+ 'model-layer': {
63
+ '(all)': {
64
+ mouseenter: onmouseenter,
65
+ click: onclick,
66
+ dblclick: ondblclick
67
+ }
68
+ }
69
+ });
70
+ //# sourceMappingURL=event-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handlers.js","sourceRoot":"","sources":["../../../src/layers/event-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,SAAS,YAAY,CAAC,KAAiB,EAAE,IAAS;;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,EAAE,CAAA,EAAE;QACrB,OAAM;KACP;IAED,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvB,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,+BAA+B,EAAE;QAC/C,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB;SACF;KACF,CAAC,CACH,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAiB,EAAE,IAAS;;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,EAAE,CAAA,EAAE;QACrB,OAAM;KACP;IAED,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE;YACtC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,+BAA+B,EAAE;gBAC/C,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL,IAAI,EAAE,OAAO;wBACb,KAAK;wBACL,KAAK,EAAE,MAAM,CAAC,KAAK;qBACpB;iBACF;aACF,CAAC,CACH,CAAA;SACF;IACH,CAAC,EAAE,GAAG,CAAC,CAAA;AACT,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB,EAAE,IAAS;;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,EAAE,CAAA,EAAE;QACrB,OAAM;KACP;IAED,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvB,MAAM,CAAC,YAAY,GAAG,UAAU,CAAA;IAChC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,+BAA+B,EAAE;QAC/C,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,IAAI,EAAE,UAAU;gBAChB,KAAK;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB;SACF;KACF,CAAC,CACH,CAAA;IAED,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,CAAC,YAAY,GAAG,EAAE,CAAA;IAC1B,CAAC,EAAE,GAAG,CAAC,CAAA;AACT,CAAC;AAED,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE;IACjC,aAAa,EAAE;QACb,OAAO,EAAE;YACP,UAAU,EAAE,YAAY;YACxB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;SACrB;KACF;CACF,CAAC,CAAA","sourcesContent":["import { EventMap } from '@hatiolab/things-scene'\n\nfunction onmouseenter(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n if (!target.model?.id) {\n return\n }\n\n event.stopPropagation()\n\n window.dispatchEvent(\n new CustomEvent('fetchFmbModelDataByMouseEvent', {\n detail: {\n value: {\n type: 'hover',\n event,\n model: target.model\n }\n }\n })\n )\n}\n\nfunction onclick(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n if (!target.model?.id) {\n return\n }\n\n event.stopPropagation()\n\n setTimeout(() => {\n if (target.currentEvent !== 'dblclick') {\n window.dispatchEvent(\n new CustomEvent('fetchFmbModelDataByMouseEvent', {\n detail: {\n value: {\n type: 'click',\n event,\n model: target.model\n }\n }\n })\n )\n }\n }, 300)\n}\n\nfunction ondblclick(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n if (!target.model?.id) {\n return\n }\n\n event.stopPropagation()\n\n target.currentEvent = 'dblclick'\n window.dispatchEvent(\n new CustomEvent('fetchFmbModelDataByMouseEvent', {\n detail: {\n value: {\n type: 'dblclick',\n event,\n model: target.model\n }\n }\n })\n )\n\n setTimeout(() => {\n target.currentEvent = ''\n }, 500)\n}\n\nEventMap.register('event-handler', {\n 'model-layer': {\n '(all)': {\n mouseenter: onmouseenter,\n click: onclick,\n dblclick: ondblclick\n }\n }\n})\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,73 @@
1
+ import { EventMap } from '@hatiolab/things-scene';
2
+ function onmouseenter(event, hint) {
3
+ var _a;
4
+ const target = hint.origin;
5
+ if (!((_a = target.model) === null || _a === void 0 ? void 0 : _a.id)) {
6
+ return;
7
+ }
8
+ event.stopPropagation();
9
+ window.dispatchEvent(new CustomEvent('fetchFmbModelDataByMouseEvent', {
10
+ detail: {
11
+ value: {
12
+ type: 'hover',
13
+ event,
14
+ model: target.state,
15
+ data: target.data
16
+ }
17
+ }
18
+ }));
19
+ }
20
+ function onclick(event, hint) {
21
+ var _a;
22
+ const target = hint.origin;
23
+ if (!((_a = target.model) === null || _a === void 0 ? void 0 : _a.id)) {
24
+ return;
25
+ }
26
+ event.stopPropagation();
27
+ setTimeout(() => {
28
+ if (target.currentEvent !== 'dblclick') {
29
+ window.dispatchEvent(new CustomEvent('fetchFmbModelDataByMouseEvent', {
30
+ detail: {
31
+ value: {
32
+ type: 'click',
33
+ event,
34
+ model: target.state,
35
+ data: target.data
36
+ }
37
+ }
38
+ }));
39
+ }
40
+ }, 300);
41
+ }
42
+ function ondblclick(event, hint) {
43
+ var _a;
44
+ const target = hint.origin;
45
+ setTimeout(() => {
46
+ target.currentEvent = '';
47
+ }, 500);
48
+ if (!((_a = target.model) === null || _a === void 0 ? void 0 : _a.id)) {
49
+ return;
50
+ }
51
+ event.stopPropagation();
52
+ target.currentEvent = 'dblclick';
53
+ window.dispatchEvent(new CustomEvent('fetchFmbModelDataByMouseEvent', {
54
+ detail: {
55
+ value: {
56
+ type: 'dblclick',
57
+ event,
58
+ model: target.state,
59
+ data: target.data
60
+ }
61
+ }
62
+ }));
63
+ }
64
+ EventMap.register('mcs-event-handler', {
65
+ 'model-layer': {
66
+ '(all)': {
67
+ mouseenter: onmouseenter,
68
+ click: onclick,
69
+ dblclick: ondblclick
70
+ }
71
+ }
72
+ });
73
+ //# sourceMappingURL=mcs-event-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcs-event-handlers.js","sourceRoot":"","sources":["../../../src/layers/mcs-event-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,SAAS,YAAY,CAAC,KAAiB,EAAE,IAAS;;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,EAAE,CAAA,EAAE;QACrB,OAAM;KACP;IAED,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvB,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,+BAA+B,EAAE;QAC/C,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB;SACF;KACF,CAAC,CACH,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAiB,EAAE,IAAS;;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAE1B,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,EAAE,CAAA,EAAE;QACrB,OAAM;KACP;IAED,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE;YACtC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,+BAA+B,EAAE;gBAC/C,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL,IAAI,EAAE,OAAO;wBACb,KAAK;wBACL,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;qBAClB;iBACF;aACF,CAAC,CACH,CAAA;SACF;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,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,EAAE,CAAA,EAAE;QACrB,OAAM;KACP;IAED,KAAK,CAAC,eAAe,EAAE,CAAA;IAEvB,MAAM,CAAC,YAAY,GAAG,UAAU,CAAA;IAChC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,+BAA+B,EAAE;QAC/C,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,IAAI,EAAE,UAAU;gBAChB,KAAK;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB;SACF;KACF,CAAC,CACH,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE;IACrC,aAAa,EAAE;QACb,OAAO,EAAE;YACP,UAAU,EAAE,YAAY;YACxB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;SACrB;KACF;CACF,CAAC,CAAA","sourcesContent":["import { EventMap } from '@hatiolab/things-scene'\n\nfunction onmouseenter(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n if (!target.model?.id) {\n return\n }\n\n event.stopPropagation()\n\n window.dispatchEvent(\n new CustomEvent('fetchFmbModelDataByMouseEvent', {\n detail: {\n value: {\n type: 'hover',\n event,\n model: target.state,\n data: target.data\n }\n }\n })\n )\n}\n\nfunction onclick(event: MouseEvent, hint: any) {\n const target = hint.origin\n\n if (!target.model?.id) {\n return\n }\n\n event.stopPropagation()\n\n setTimeout(() => {\n if (target.currentEvent !== 'dblclick') {\n window.dispatchEvent(\n new CustomEvent('fetchFmbModelDataByMouseEvent', {\n detail: {\n value: {\n type: 'click',\n event,\n model: target.state,\n data: target.data\n }\n }\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 if (!target.model?.id) {\n return\n }\n\n event.stopPropagation()\n\n target.currentEvent = 'dblclick'\n window.dispatchEvent(\n new CustomEvent('fetchFmbModelDataByMouseEvent', {\n detail: {\n value: {\n type: 'dblclick',\n event,\n model: target.state,\n data: target.data\n }\n }\n })\n )\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"]}
@@ -0,0 +1,27 @@
1
+ import { Component, Layer, POINT, Properties } from '@hatiolab/things-scene';
2
+ export type PATH = {
3
+ SourceMachineName: string;
4
+ SourceZoneName: string;
5
+ SourceUnitName: string;
6
+ DestMachineName: string;
7
+ DestZoneName: string;
8
+ DestUnitName: string;
9
+ PathType: 'Command' | 'Job';
10
+ LineType: 'ON' | 'OD' | 'OA' | 'IN' | 'ID' | 'IA';
11
+ };
12
+ export type MOVEMENT = PATH[];
13
+ export default class MovementLayer extends Layer {
14
+ get capturable(): boolean;
15
+ drawArrow(ctx: CanvasRenderingContext2D, p0: POINT, p1: POINT, headLength?: number): void;
16
+ findSourceAndTarget(path: PATH): [Component?, Component?];
17
+ render(ctx: CanvasRenderingContext2D): void;
18
+ get eventMap(): {
19
+ 'model-layer': {
20
+ '(self)': {
21
+ change: (after: any, before: any, hint: any) => void;
22
+ };
23
+ };
24
+ };
25
+ onchangeModelLayer(after: any, before: any, hint: any): void;
26
+ onchangeData(after: Properties, before: Properties): void;
27
+ }
@@ -0,0 +1,109 @@
1
+ import { Component, Layer } from '@hatiolab/things-scene';
2
+ const MOVEMENT_STYLES = {
3
+ ON /* OUTGOING_NORMAL_TRANSPORT*/: ['#00B05033', '#00B050'],
4
+ OD /* OUTGOING_DELAYED_TRANSPORT*/: ['#FF000033', '#FF0000'],
5
+ OA /* OUTGOING_ALTER_TRANSPORT*/: ['#76717133', '#767171'],
6
+ IN /* INCOMING_NORMAL_TRANSPORT*/: ['#00DE6433', '#00DE64'],
7
+ ID /* INCOMING_DELAYED_TRANSPORT*/: ['#FF797933', '#FF7979'],
8
+ IA /* INCOMING_ALTER_TRANSPORT*/: ['#B6B2B233', '#B6B2B2']
9
+ };
10
+ const EMPTY_MOVEMENT = [];
11
+ const degreesInRadians225 = (195 * Math.PI) / 180;
12
+ const degreesInRadians135 = (165 * Math.PI) / 180;
13
+ export default class MovementLayer extends Layer {
14
+ get capturable() {
15
+ return false;
16
+ }
17
+ drawArrow(ctx, p0, p1, headLength = 10) {
18
+ // constants (could be declared as globals outside this function)
19
+ // calc the angle of the line
20
+ var dx = p1.x - p0.x;
21
+ var dy = p1.y - p0.y;
22
+ var angle = Math.atan2(dy, dx);
23
+ // calc arrowhead points
24
+ var x225 = p1.x + headLength * Math.cos(angle + degreesInRadians225);
25
+ var y225 = p1.y + headLength * Math.sin(angle + degreesInRadians225);
26
+ var x135 = p1.x + headLength * Math.cos(angle + degreesInRadians135);
27
+ var y135 = p1.y + headLength * Math.sin(angle + degreesInRadians135);
28
+ // draw line plus arrowhead
29
+ ctx.beginPath();
30
+ // draw the line from p0 to p1
31
+ ctx.moveTo(p0.x, p0.y);
32
+ ctx.lineTo(p1.x, p1.y);
33
+ ctx.stroke();
34
+ ctx.beginPath();
35
+ // draw partial arrowhead at 225 degrees
36
+ ctx.moveTo(p1.x, p1.y);
37
+ ctx.lineTo(x225, y225);
38
+ // draw partial arrowhead at 135 degrees
39
+ ctx.lineTo(x135, y135);
40
+ ctx.lineTo(p1.x, p1.y);
41
+ // stroke the line and arrowhead
42
+ // ctx.ellipse(p0.x, p0.y, 2, 2, 0, 0, 2 * Math.PI)
43
+ ctx.setLineDash([]);
44
+ ctx.stroke();
45
+ ctx.fill();
46
+ }
47
+ findSourceAndTarget(path) {
48
+ const root = this.root;
49
+ var src, dest;
50
+ for (const name of [path.SourceUnitName, path.SourceZoneName, path.SourceMachineName]) {
51
+ src = root.findById(name);
52
+ if (src) {
53
+ break;
54
+ }
55
+ }
56
+ for (const name of [path.DestUnitName, path.DestZoneName, path.DestMachineName]) {
57
+ dest = root.findById(name);
58
+ if (dest) {
59
+ break;
60
+ }
61
+ }
62
+ return [src, dest];
63
+ }
64
+ render(ctx) {
65
+ const root = this.root;
66
+ const movement = (this.data instanceof Array && this.data) || [];
67
+ ctx.save();
68
+ movement.forEach(path => {
69
+ const [src, dest] = this.findSourceAndTarget(path);
70
+ if (!src || !dest) {
71
+ return;
72
+ }
73
+ const [srcCenter, destCenter] = [src.center, dest.center];
74
+ const [srcPos, destPos] = [
75
+ src.transcoordS2C(srcCenter.x, srcCenter.y, root),
76
+ dest.transcoordS2C(destCenter.x, destCenter.y, root)
77
+ ];
78
+ ctx.beginPath();
79
+ ctx.setLineDash(path.PathType == 'Command' ? [5, 5] : []);
80
+ const gradient = ctx.createLinearGradient(srcPos.x, srcPos.y, destPos.x, destPos.y);
81
+ (MOVEMENT_STYLES[path.LineType] || []).forEach((color, idx) => gradient.addColorStop(idx, color));
82
+ ctx.strokeStyle = gradient;
83
+ ctx.fillStyle = gradient;
84
+ ctx.lineWidth = 1.5;
85
+ this.drawArrow(ctx, srcPos, destPos);
86
+ ctx.stroke();
87
+ });
88
+ ctx.restore();
89
+ }
90
+ get eventMap() {
91
+ return {
92
+ 'model-layer': {
93
+ '(self)': {
94
+ change: this.onchangeModelLayer
95
+ }
96
+ }
97
+ };
98
+ }
99
+ onchangeModelLayer(after, before, hint) {
100
+ if (after.scale || after.translate) {
101
+ this.invalidate();
102
+ }
103
+ }
104
+ onchangeData(after, before) {
105
+ this.invalidate();
106
+ }
107
+ }
108
+ Component.register('movement-layer', MovementLayer);
109
+ //# sourceMappingURL=movement-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"movement-layer.js","sourceRoot":"","sources":["../../../src/layers/movement-layer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Layer, POINT, Properties } from '@hatiolab/things-scene'\n\nconst MOVEMENT_STYLES = {\n ON /* OUTGOING_NORMAL_TRANSPORT*/: ['#00B05033', '#00B050'],\n OD /* OUTGOING_DELAYED_TRANSPORT*/: ['#FF000033', '#FF0000'],\n OA /* OUTGOING_ALTER_TRANSPORT*/: ['#76717133', '#767171'],\n IN /* INCOMING_NORMAL_TRANSPORT*/: ['#00DE6433', '#00DE64'],\n ID /* INCOMING_DELAYED_TRANSPORT*/: ['#FF797933', '#FF7979'],\n IA /* INCOMING_ALTER_TRANSPORT*/: ['#B6B2B233', '#B6B2B2']\n}\n\nexport type PATH = {\n SourceMachineName: string\n SourceZoneName: string\n SourceUnitName: string\n DestMachineName: string\n DestZoneName: string\n DestUnitName: string\n PathType: 'Command' | 'Job'\n LineType: 'ON' | 'OD' | 'OA' | 'IN' | 'ID' | 'IA'\n}\n\nexport type MOVEMENT = PATH[]\n\nconst EMPTY_MOVEMENT: MOVEMENT = []\n\nconst degreesInRadians225 = (195 * Math.PI) / 180\nconst degreesInRadians135 = (165 * Math.PI) / 180\n\nexport default class MovementLayer extends Layer {\n get capturable() {\n return false\n }\n\n drawArrow(ctx: CanvasRenderingContext2D, p0: POINT, p1: POINT, headLength: number = 10) {\n // constants (could be declared as globals outside this function)\n // calc the angle of the line\n var dx = p1.x - p0.x\n var dy = p1.y - p0.y\n var angle = Math.atan2(dy, dx)\n\n // calc arrowhead points\n var x225 = p1.x + headLength * Math.cos(angle + degreesInRadians225)\n var y225 = p1.y + headLength * Math.sin(angle + degreesInRadians225)\n var x135 = p1.x + headLength * Math.cos(angle + degreesInRadians135)\n var y135 = p1.y + headLength * Math.sin(angle + degreesInRadians135)\n\n // draw line plus arrowhead\n ctx.beginPath()\n\n // draw the line from p0 to p1\n ctx.moveTo(p0.x, p0.y)\n ctx.lineTo(p1.x, p1.y)\n\n ctx.stroke()\n\n ctx.beginPath()\n\n // draw partial arrowhead at 225 degrees\n ctx.moveTo(p1.x, p1.y)\n ctx.lineTo(x225, y225)\n // draw partial arrowhead at 135 degrees\n ctx.lineTo(x135, y135)\n ctx.lineTo(p1.x, p1.y)\n // stroke the line and arrowhead\n\n // ctx.ellipse(p0.x, p0.y, 2, 2, 0, 0, 2 * Math.PI)\n\n ctx.setLineDash([])\n\n ctx.stroke()\n ctx.fill()\n }\n\n findSourceAndTarget(path: PATH): [Component?, Component?] {\n const root = this.root\n var src, dest\n\n for (const name of [path.SourceUnitName, path.SourceZoneName, path.SourceMachineName]) {\n src = root.findById(name)\n if (src) {\n break\n }\n }\n\n for (const name of [path.DestUnitName, path.DestZoneName, path.DestMachineName]) {\n dest = root.findById(name)\n if (dest) {\n break\n }\n }\n\n return [src, dest]\n }\n\n render(ctx: CanvasRenderingContext2D) {\n const root = this.root\n const movement = (this.data instanceof Array && (this.data as MOVEMENT)) || []\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 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 ctx.setLineDash(path.PathType == 'Command' ? [5, 5] : [])\n\n const gradient = ctx.createLinearGradient(srcPos.x, srcPos.y, destPos.x, destPos.y)\n ;(MOVEMENT_STYLES[path.LineType] || []).forEach((color, idx) => gradient.addColorStop(idx, color))\n\n ctx.strokeStyle = gradient\n ctx.fillStyle = gradient\n ctx.lineWidth = 1.5\n\n this.drawArrow(ctx, srcPos, destPos)\n\n ctx.stroke()\n })\n\n ctx.restore()\n }\n\n get eventMap() {\n return {\n 'model-layer': {\n '(self)': {\n change: this.onchangeModelLayer\n }\n }\n }\n }\n\n onchangeModelLayer(after: any, before: any, hint: any) {\n if (after.scale || after.translate) {\n this.invalidate()\n }\n }\n\n onchangeData(after: Properties, before: Properties): void {\n this.invalidate()\n }\n}\n\nComponent.register('movement-layer', MovementLayer)\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,189 @@
1
+ import { __decorate } from "tslib";
2
+ import { html, css, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ let OxminimapComponent = class OxminimapComponent extends LitElement {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.target = null;
8
+ this.scene = null;
9
+ this.isDragging = false;
10
+ this.startX = 0;
11
+ this.startY = 0;
12
+ this.initialScrollLeft = 0;
13
+ this.initialScrollTop = 0;
14
+ }
15
+ connectedCallback() {
16
+ super.connectedCallback();
17
+ window.addEventListener('resize', this.handleResize.bind(this));
18
+ }
19
+ disconnectedCallback() {
20
+ super.disconnectedCallback();
21
+ window.removeEventListener('resize', this.handleResize.bind(this));
22
+ }
23
+ firstUpdated(changes) {
24
+ super.firstUpdated(changes);
25
+ this.updateTarget();
26
+ this.checkVisibilityX();
27
+ }
28
+ updated(changedProperties) {
29
+ if (changedProperties.has('target')) {
30
+ this.updateTarget();
31
+ }
32
+ }
33
+ handleResize() {
34
+ this.updateTarget();
35
+ this.checkVisibilityX();
36
+ }
37
+ updateTarget() {
38
+ var _a, _b;
39
+ const target = this.target || this.parentElement;
40
+ if (!target || !this.scene) {
41
+ return;
42
+ }
43
+ const { width, height } = this.scene.model;
44
+ const { x: scaleX, y: scaleY } = this.scene.scale;
45
+ const targetRatio = (width * scaleX) / (height * scaleY);
46
+ const thisRatio = this.offsetHeight / this.offsetWidth;
47
+ const scale = targetRatio > thisRatio ? this.offsetHeight / target.scrollHeight : this.offsetWidth / target.scrollWidth;
48
+ const minimapHeight = width * scaleX * scale;
49
+ const minimapWidth = height * scaleY * scale;
50
+ const viewportHeight = target.offsetHeight * scale;
51
+ const viewportWidth = target.offsetWidth * scale;
52
+ const minimap = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.getElementById('minimap');
53
+ const viewport = (_b = this.shadowRoot) === null || _b === void 0 ? void 0 : _b.getElementById('viewport');
54
+ minimap.style.width = `${minimapWidth}px`;
55
+ minimap.style.height = `${minimapHeight}px`;
56
+ viewport.style.width = `${viewportWidth}px`;
57
+ viewport.style.height = `${viewportHeight}px`;
58
+ const viewportLeft = target.scrollLeft * scale;
59
+ const viewportTop = target.scrollTop * scale;
60
+ viewport.style.width = `${viewportWidth}px`;
61
+ viewport.style.height = `${viewportHeight}px`;
62
+ viewport.style.left = `${viewportLeft}px`;
63
+ viewport.style.top = `${viewportTop}px`;
64
+ }
65
+ checkVisibilityX() {
66
+ var _a;
67
+ const parentElement = this.target || this.parentElement;
68
+ if (!parentElement)
69
+ return;
70
+ const parentRect = parentElement.getBoundingClientRect();
71
+ const minimap = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.getElementById('minimap');
72
+ if (parentRect.width >= minimap.offsetWidth && parentRect.height >= minimap.offsetHeight) {
73
+ this.style.display = 'block';
74
+ }
75
+ else {
76
+ this.style.display = 'none';
77
+ }
78
+ }
79
+ handleMouseDown(event) {
80
+ var _a;
81
+ const target = this.target || this.parentElement;
82
+ if (!target) {
83
+ return;
84
+ }
85
+ const minimapViewport = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.getElementById('viewport');
86
+ this.startX = event.clientX;
87
+ this.startY = event.clientY;
88
+ this.initialScrollLeft = target.scrollLeft || 0;
89
+ this.initialScrollTop = target.scrollTop || 0;
90
+ this.isDragging = true;
91
+ minimapViewport.classList.add('dragging');
92
+ event.preventDefault();
93
+ event.stopPropagation();
94
+ }
95
+ handleMouseMove(event) {
96
+ var _a;
97
+ if (!this.isDragging)
98
+ return;
99
+ const deltaX = event.clientX - this.startX;
100
+ const deltaY = event.clientY - this.startY;
101
+ const target = this.target || this.parentElement;
102
+ if (!target || !this.scene) {
103
+ return;
104
+ }
105
+ const { width, height } = this.scene.model;
106
+ var { x: scale, y } = this.scene.scale;
107
+ const targetRatio = height / width;
108
+ const thisRatio = this.offsetHeight / this.offsetWidth;
109
+ // const scale = targetRatio > thisRatio ? this.offsetHeight / height : this.offsetWidth / width
110
+ const targetRect = target.getBoundingClientRect();
111
+ const viewportWidth = (targetRect.width * target.clientWidth) / width;
112
+ const viewportHeight = (targetRect.height * target.clientHeight) / height;
113
+ const scrollX = deltaX / scale;
114
+ const scrollY = deltaY / scale;
115
+ target.scrollTo(this.initialScrollLeft + scrollX, this.initialScrollTop + scrollY);
116
+ const minimapViewport = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.getElementById('viewport');
117
+ minimapViewport.style.left = `${Math.max(0, Math.min(event.clientX - viewportWidth / 2, target.clientWidth - viewportWidth))}px`;
118
+ minimapViewport.style.top = `${Math.max(0, Math.min(event.clientY - viewportHeight / 2, target.clientHeight - viewportHeight))}px`;
119
+ this.updateTarget();
120
+ event.preventDefault();
121
+ event.stopPropagation();
122
+ }
123
+ handleMouseUp(event) {
124
+ var _a;
125
+ const minimapViewport = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.getElementById('minimap');
126
+ this.isDragging = false;
127
+ minimapViewport.classList.remove('dragging');
128
+ event.preventDefault();
129
+ event.stopPropagation();
130
+ }
131
+ render() {
132
+ return html `
133
+ <div
134
+ id="minimap"
135
+ @dragstart=${(e) => e.stopPropagation()}
136
+ @drag=${(e) => e.stopPropagation()}
137
+ @dragend=${(e) => e.stopPropagation()}
138
+ @mousedown=${(e) => e.stopPropagation()}
139
+ @mousemove=${(e) => e.stopPropagation()}
140
+ @mouseup=${(e) => e.stopPropagation()}
141
+ >
142
+ <div
143
+ id="viewport"
144
+ @mousedown=${this.handleMouseDown}
145
+ @mousemove=${this.handleMouseMove}
146
+ @mouseup=${this.handleMouseUp}
147
+ ></div>
148
+ </div>
149
+ `;
150
+ }
151
+ };
152
+ OxminimapComponent.styles = css `
153
+ :host {
154
+ display: flex;
155
+ position: relative;
156
+ background-color: gray;
157
+ }
158
+
159
+ #minimap {
160
+ position: absolute;
161
+ top: 50%;
162
+ left: 50%;
163
+ transform: translate(-50%, -50%);
164
+ box-sizing: border-box;
165
+
166
+ background-color: white;
167
+ overflow: hidden;
168
+ }
169
+
170
+ #viewport {
171
+ position: absolute;
172
+ border: 1px dashed blue;
173
+ box-sizing: border-box;
174
+ pointer-events: none;
175
+ background-color: white;
176
+ pointer-events: auto;
177
+ cursor: move;
178
+ }
179
+ `;
180
+ __decorate([
181
+ property({ type: Object })
182
+ ], OxminimapComponent.prototype, "target", void 0);
183
+ __decorate([
184
+ property({ type: Object })
185
+ ], OxminimapComponent.prototype, "scene", void 0);
186
+ OxminimapComponent = __decorate([
187
+ customElement('ox-mini-map')
188
+ ], OxminimapComponent);
189
+ //# sourceMappingURL=ox-mini-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-mini-map.js","sourceRoot":"","sources":["../../../src/layers/ox-mini-map.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from '@hatiolab/things-scene'\nimport { html, css, LitElement, PropertyValueMap } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('ox-mini-map')\nclass OxminimapComponent extends LitElement {\n static styles = css`\n :host {\n display: flex;\n position: relative;\n background-color: gray;\n }\n\n #minimap {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n box-sizing: border-box;\n\n background-color: white;\n overflow: hidden;\n }\n\n #viewport {\n position: absolute;\n border: 1px dashed blue;\n box-sizing: border-box;\n pointer-events: none;\n background-color: white;\n pointer-events: auto;\n cursor: move;\n }\n `\n\n @property({ type: Object }) target: HTMLElement | null = null\n @property({ type: Object }) scene: Scene | null = null\n\n private isDragging = false\n private startX = 0\n private startY = 0\n private initialScrollLeft = 0\n private initialScrollTop = 0\n\n connectedCallback() {\n super.connectedCallback()\n window.addEventListener('resize', this.handleResize.bind(this))\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n window.removeEventListener('resize', this.handleResize.bind(this))\n }\n\n firstUpdated(changes: PropertyValueMap<any> | Map<PropertyKey, unknown>) {\n super.firstUpdated(changes)\n\n this.updateTarget()\n this.checkVisibilityX()\n }\n\n updated(changedProperties: Map<string, any>) {\n if (changedProperties.has('target')) {\n this.updateTarget()\n }\n }\n\n handleResize() {\n this.updateTarget()\n this.checkVisibilityX()\n }\n\n updateTarget() {\n const target = this.target || this.parentElement\n if (!target || !this.scene) {\n return\n }\n\n const { width, height } = this.scene.model\n const { x: scaleX, y: scaleY } = this.scene.scale\n\n const targetRatio = (width * scaleX) / (height * scaleY)\n const thisRatio = this.offsetHeight / this.offsetWidth\n\n const scale =\n targetRatio > thisRatio ? this.offsetHeight / target.scrollHeight : this.offsetWidth / target.scrollWidth\n\n const minimapHeight = width * scaleX * scale\n const minimapWidth = height * scaleY * scale\n\n const viewportHeight = target.offsetHeight * scale\n const viewportWidth = target.offsetWidth * scale\n\n const minimap = this.shadowRoot?.getElementById('minimap') as HTMLElement\n const viewport = this.shadowRoot?.getElementById('viewport') as HTMLElement\n\n minimap.style.width = `${minimapWidth}px`\n minimap.style.height = `${minimapHeight}px`\n\n viewport.style.width = `${viewportWidth}px`\n viewport.style.height = `${viewportHeight}px`\n\n const viewportLeft = target.scrollLeft * scale\n const viewportTop = target.scrollTop * scale\n\n viewport.style.width = `${viewportWidth}px`\n viewport.style.height = `${viewportHeight}px`\n viewport.style.left = `${viewportLeft}px`\n viewport.style.top = `${viewportTop}px`\n }\n\n checkVisibilityX() {\n const parentElement = this.target || this.parentElement\n if (!parentElement) return\n\n const parentRect = parentElement.getBoundingClientRect()\n const minimap = this.shadowRoot?.getElementById('minimap') as HTMLElement\n if (parentRect.width >= minimap.offsetWidth && parentRect.height >= minimap.offsetHeight) {\n this.style.display = 'block'\n } else {\n this.style.display = 'none'\n }\n }\n\n handleMouseDown(event: MouseEvent) {\n const target = this.target || this.parentElement\n\n if (!target) {\n return\n }\n\n const minimapViewport = this.shadowRoot?.getElementById('viewport') as HTMLElement\n this.startX = event.clientX\n this.startY = event.clientY\n this.initialScrollLeft = target.scrollLeft || 0\n this.initialScrollTop = target.scrollTop || 0\n this.isDragging = true\n minimapViewport.classList.add('dragging')\n event.preventDefault()\n event.stopPropagation()\n }\n\n handleMouseMove(event: MouseEvent) {\n if (!this.isDragging) return\n const deltaX = event.clientX - this.startX\n const deltaY = event.clientY - this.startY\n\n const target = this.target || this.parentElement\n\n if (!target || !this.scene) {\n return\n }\n\n const { width, height } = this.scene.model\n var { x: scale, y } = this.scene.scale\n\n const targetRatio = height / width\n const thisRatio = this.offsetHeight / this.offsetWidth\n\n // const scale = targetRatio > thisRatio ? this.offsetHeight / height : this.offsetWidth / width\n\n const targetRect = target.getBoundingClientRect()\n const viewportWidth = (targetRect.width * target.clientWidth) / width\n const viewportHeight = (targetRect.height * target.clientHeight) / height\n const scrollX = deltaX / scale\n const scrollY = deltaY / scale\n target.scrollTo(this.initialScrollLeft + scrollX, this.initialScrollTop + scrollY)\n const minimapViewport = this.shadowRoot?.getElementById('viewport') as HTMLElement\n minimapViewport.style.left = `${Math.max(\n 0,\n Math.min(event.clientX - viewportWidth / 2, target.clientWidth - viewportWidth)\n )}px`\n minimapViewport.style.top = `${Math.max(\n 0,\n Math.min(event.clientY - viewportHeight / 2, target.clientHeight - viewportHeight)\n )}px`\n\n this.updateTarget()\n event.preventDefault()\n event.stopPropagation()\n }\n\n handleMouseUp(event: MouseEvent) {\n const minimapViewport = this.shadowRoot?.getElementById('minimap') as HTMLElement\n this.isDragging = false\n minimapViewport.classList.remove('dragging')\n event.preventDefault()\n event.stopPropagation()\n }\n\n render() {\n return html`\n <div\n id=\"minimap\"\n @dragstart=${(e: Event) => e.stopPropagation()}\n @drag=${(e: Event) => e.stopPropagation()}\n @dragend=${(e: Event) => e.stopPropagation()}\n @mousedown=${(e: Event) => e.stopPropagation()}\n @mousemove=${(e: Event) => e.stopPropagation()}\n @mouseup=${(e: Event) => e.stopPropagation()}\n >\n <div\n id=\"viewport\"\n @mousedown=${this.handleMouseDown}\n @mousemove=${this.handleMouseMove}\n @mouseup=${this.handleMouseUp}\n ></div>\n </div>\n `\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import { Layer, Properties } from '@hatiolab/things-scene';
2
+ export default class ScrollLayer extends Layer {
3
+ get capturable(): boolean;
4
+ private _scale?;
5
+ private _translate?;
6
+ private lastPosition?;
7
+ private vscroller;
8
+ private hscroller;
9
+ render(ctx: CanvasRenderingContext2D): void;
10
+ contains(x: number, y: number): boolean;
11
+ get eventMap(): {
12
+ '(root)': {
13
+ 'model-layer': {
14
+ change: (after: any, before: any, hint: any) => void;
15
+ };
16
+ };
17
+ };
18
+ onchange(after: Properties): void;
19
+ ondragstart(e: DragEvent, hint: any): void;
20
+ ondragmove(e: DragEvent, hint: any): void;
21
+ ondragend(): void;
22
+ calcScrollerBounds(): void;
23
+ onchangeModelLayer(after: any, before: any, hint: any): void;
24
+ }