@alisaitteke/seatmap-canvas 2.3.0 → 2.4.1

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 (194) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/LICENSE +1 -1
  3. package/README.md +15 -5
  4. package/dist/cjs/seatmap.canvas.css +151 -0
  5. package/dist/cjs/seatmap.canvas.js +40 -0
  6. package/dist/cjs/seatmap.canvas.js.map +1 -0
  7. package/dist/cjs/types/canvas.index.browser.d.ts +2 -0
  8. package/dist/cjs/types/canvas.index.d.ts +23 -0
  9. package/dist/cjs/types/config.d.ts +3 -0
  10. package/dist/cjs/types/decorators/dom.d.ts +8 -0
  11. package/dist/cjs/types/decorators/index.d.ts +1 -0
  12. package/dist/cjs/types/dev.tools.d.ts +6 -0
  13. package/{src/lib/enums/global.ts → dist/cjs/types/enums/global.d.ts} +4 -25
  14. package/dist/cjs/types/models/block.model.d.ts +29 -0
  15. package/dist/cjs/types/models/coordinate.model.d.ts +7 -0
  16. package/dist/cjs/types/models/data.model.d.ts +26 -0
  17. package/dist/cjs/types/models/defaults.model.d.ts +32 -0
  18. package/dist/cjs/types/models/global.model.d.ts +18 -0
  19. package/dist/cjs/types/models/label.model.d.ts +9 -0
  20. package/dist/cjs/types/models/legend.model.d.ts +8 -0
  21. package/dist/cjs/types/models/model.base.d.ts +5 -0
  22. package/dist/cjs/types/models/seat.model.d.ts +40 -0
  23. package/dist/cjs/types/models/styles/block.style.d.ts +7 -0
  24. package/dist/cjs/types/models/styles/label.style.d.ts +6 -0
  25. package/dist/cjs/types/models/styles/legend.style.d.ts +6 -0
  26. package/dist/cjs/types/models/styles/seat.style.d.ts +12 -0
  27. package/dist/cjs/types/models/styles/tooltip.style.d.ts +7 -0
  28. package/dist/cjs/types/svg/event.manager.d.ts +12 -0
  29. package/dist/cjs/types/svg/legend/legend.circle.d.ts +7 -0
  30. package/dist/cjs/types/svg/legend/legend.item.d.ts +13 -0
  31. package/dist/cjs/types/svg/legend/legend.title.d.ts +7 -0
  32. package/dist/cjs/types/svg/legend.d.ts +8 -0
  33. package/dist/cjs/types/svg/stage/blocks/block-item/block-item.bounds.d.ts +12 -0
  34. package/dist/cjs/types/svg/stage/blocks/block-item/block-item.index.d.ts +23 -0
  35. package/dist/cjs/types/svg/stage/blocks/block-item/block-item.info.index.d.ts +11 -0
  36. package/dist/cjs/types/svg/stage/blocks/block-item/block-item.labels.index.d.ts +11 -0
  37. package/dist/cjs/types/svg/stage/blocks/block-item/block-item.mask.d.ts +12 -0
  38. package/dist/cjs/types/svg/stage/blocks/block-item/block-item.seats.index.d.ts +15 -0
  39. package/dist/cjs/types/svg/stage/blocks/block-item/bound/bound-item.index.d.ts +12 -0
  40. package/dist/cjs/types/svg/stage/blocks/block-item/info/title.d.ts +7 -0
  41. package/dist/cjs/types/svg/stage/blocks/block-item/label/label-item.circle.d.ts +7 -0
  42. package/dist/cjs/types/svg/stage/blocks/block-item/label/label-item.index.d.ts +13 -0
  43. package/dist/cjs/types/svg/stage/blocks/block-item/label/label-item.title.d.ts +7 -0
  44. package/dist/cjs/types/svg/stage/blocks/block-item/seat/seat-item.check.d.ts +10 -0
  45. package/dist/cjs/types/svg/stage/blocks/block-item/seat/seat-item.circle.d.ts +7 -0
  46. package/dist/cjs/types/svg/stage/blocks/block-item/seat/seat-item.index.d.ts +28 -0
  47. package/dist/cjs/types/svg/stage/blocks/block-item/seat/seat-item.title.d.ts +7 -0
  48. package/dist/cjs/types/svg/stage/blocks/blocks.index.d.ts +13 -0
  49. package/dist/cjs/types/svg/stage/blocks.search-circle.d.ts +12 -0
  50. package/dist/cjs/types/svg/stage/multi-select/rect.d.ts +7 -0
  51. package/dist/cjs/types/svg/stage/multi-select.d.ts +13 -0
  52. package/dist/cjs/types/svg/stage/search-circle/circle.d.ts +7 -0
  53. package/dist/cjs/types/svg/stage/stage.index.d.ts +11 -0
  54. package/dist/cjs/types/svg/svg.base.d.ts +35 -0
  55. package/dist/cjs/types/svg/svg.index.d.ts +16 -0
  56. package/dist/cjs/types/svg/tooltip/rect.d.ts +8 -0
  57. package/dist/cjs/types/svg/tooltip/title.d.ts +10 -0
  58. package/dist/cjs/types/svg/tooltip.d.ts +15 -0
  59. package/dist/cjs/types/svg/zoom-out.bg.d.ts +7 -0
  60. package/dist/cjs/types/svg/zoom.manager.d.ts +41 -0
  61. package/dist/cjs/types/window.manager.d.ts +9 -0
  62. package/dist/dependencies.txt +849 -0
  63. package/dist/esm/seatmap.canvas.css +151 -0
  64. package/dist/esm/seatmap.canvas.js +16 -0
  65. package/dist/esm/seatmap.canvas.js.map +1 -0
  66. package/dist/esm/types/canvas.index.browser.d.ts +2 -0
  67. package/dist/esm/types/canvas.index.d.ts +23 -0
  68. package/dist/esm/types/config.d.ts +3 -0
  69. package/dist/esm/types/decorators/dom.d.ts +8 -0
  70. package/dist/esm/types/decorators/index.d.ts +1 -0
  71. package/dist/esm/types/dev.tools.d.ts +6 -0
  72. package/dist/esm/types/enums/global.d.ts +46 -0
  73. package/dist/esm/types/models/block.model.d.ts +29 -0
  74. package/dist/esm/types/models/coordinate.model.d.ts +7 -0
  75. package/dist/esm/types/models/data.model.d.ts +26 -0
  76. package/dist/esm/types/models/defaults.model.d.ts +32 -0
  77. package/dist/esm/types/models/global.model.d.ts +18 -0
  78. package/dist/esm/types/models/label.model.d.ts +9 -0
  79. package/dist/esm/types/models/legend.model.d.ts +8 -0
  80. package/dist/esm/types/models/model.base.d.ts +5 -0
  81. package/dist/esm/types/models/seat.model.d.ts +40 -0
  82. package/dist/esm/types/models/styles/block.style.d.ts +7 -0
  83. package/dist/esm/types/models/styles/label.style.d.ts +6 -0
  84. package/dist/esm/types/models/styles/legend.style.d.ts +6 -0
  85. package/dist/esm/types/models/styles/seat.style.d.ts +12 -0
  86. package/dist/esm/types/models/styles/tooltip.style.d.ts +7 -0
  87. package/dist/esm/types/svg/event.manager.d.ts +12 -0
  88. package/dist/esm/types/svg/legend/legend.circle.d.ts +7 -0
  89. package/dist/esm/types/svg/legend/legend.item.d.ts +13 -0
  90. package/dist/esm/types/svg/legend/legend.title.d.ts +7 -0
  91. package/dist/esm/types/svg/legend.d.ts +8 -0
  92. package/dist/esm/types/svg/stage/blocks/block-item/block-item.bounds.d.ts +12 -0
  93. package/dist/esm/types/svg/stage/blocks/block-item/block-item.index.d.ts +23 -0
  94. package/dist/esm/types/svg/stage/blocks/block-item/block-item.info.index.d.ts +11 -0
  95. package/dist/esm/types/svg/stage/blocks/block-item/block-item.labels.index.d.ts +11 -0
  96. package/dist/esm/types/svg/stage/blocks/block-item/block-item.mask.d.ts +12 -0
  97. package/dist/esm/types/svg/stage/blocks/block-item/block-item.seats.index.d.ts +15 -0
  98. package/dist/esm/types/svg/stage/blocks/block-item/bound/bound-item.index.d.ts +12 -0
  99. package/dist/esm/types/svg/stage/blocks/block-item/info/title.d.ts +7 -0
  100. package/dist/esm/types/svg/stage/blocks/block-item/label/label-item.circle.d.ts +7 -0
  101. package/dist/esm/types/svg/stage/blocks/block-item/label/label-item.index.d.ts +13 -0
  102. package/dist/esm/types/svg/stage/blocks/block-item/label/label-item.title.d.ts +7 -0
  103. package/dist/esm/types/svg/stage/blocks/block-item/seat/seat-item.check.d.ts +10 -0
  104. package/dist/esm/types/svg/stage/blocks/block-item/seat/seat-item.circle.d.ts +7 -0
  105. package/dist/esm/types/svg/stage/blocks/block-item/seat/seat-item.index.d.ts +28 -0
  106. package/dist/esm/types/svg/stage/blocks/block-item/seat/seat-item.title.d.ts +7 -0
  107. package/dist/esm/types/svg/stage/blocks/blocks.index.d.ts +13 -0
  108. package/dist/esm/types/svg/stage/blocks.search-circle.d.ts +12 -0
  109. package/dist/esm/types/svg/stage/multi-select/rect.d.ts +7 -0
  110. package/dist/esm/types/svg/stage/multi-select.d.ts +13 -0
  111. package/dist/esm/types/svg/stage/search-circle/circle.d.ts +7 -0
  112. package/dist/esm/types/svg/stage/stage.index.d.ts +11 -0
  113. package/dist/esm/types/svg/svg.base.d.ts +35 -0
  114. package/dist/esm/types/svg/svg.index.d.ts +16 -0
  115. package/dist/esm/types/svg/tooltip/rect.d.ts +8 -0
  116. package/dist/esm/types/svg/tooltip/title.d.ts +10 -0
  117. package/dist/esm/types/svg/tooltip.d.ts +15 -0
  118. package/dist/esm/types/svg/zoom-out.bg.d.ts +7 -0
  119. package/dist/esm/types/svg/zoom.manager.d.ts +41 -0
  120. package/dist/esm/types/window.manager.d.ts +9 -0
  121. package/dist/types.d.ts +533 -0
  122. package/package.json +9 -13
  123. package/.eslintrc.json +0 -15
  124. package/.github/FUNDING.yml +0 -4
  125. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  126. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  127. package/.github/workflows/codeql-analysis.yml +0 -29
  128. package/.github/workflows/npm-publish-packages.yml +0 -35
  129. package/.github/workflows/publish.yml +0 -106
  130. package/.github/workflows/webpack.yml +0 -22
  131. package/.opencommitignore +0 -2
  132. package/AUTHORS +0 -3
  133. package/SECURITY.md +0 -21
  134. package/_config.yml +0 -1
  135. package/assets/banner_ui.png +0 -0
  136. package/assets/bn.jpg +0 -0
  137. package/assets/logo.jpg +0 -0
  138. package/assets/logo_small.jpg +0 -0
  139. package/assets/zoom_out.svg +0 -11
  140. package/cog.toml +0 -19
  141. package/dist/cjs/index.js +0 -16
  142. package/examples/index.html +0 -171
  143. package/rollup.config.js +0 -56
  144. package/src/lib/canvas.index.ts +0 -121
  145. package/src/lib/config.ts +0 -11
  146. package/src/lib/decorators/dom.ts +0 -40
  147. package/src/lib/decorators/index.ts +0 -6
  148. package/src/lib/dev.tools.ts +0 -18
  149. package/src/lib/models/block.model.ts +0 -65
  150. package/src/lib/models/coordinate.model.ts +0 -26
  151. package/src/lib/models/data.model.ts +0 -125
  152. package/src/lib/models/defaults.model.ts +0 -131
  153. package/src/lib/models/global.model.ts +0 -24
  154. package/src/lib/models/label.model.ts +0 -25
  155. package/src/lib/models/legend.model.ts +0 -24
  156. package/src/lib/models/model.base.ts +0 -15
  157. package/src/lib/models/seat.model.ts +0 -74
  158. package/src/lib/svg/event.manager.ts +0 -48
  159. package/src/lib/svg/legend/legend.circle.ts +0 -28
  160. package/src/lib/svg/legend/legend.item.ts +0 -53
  161. package/src/lib/svg/legend/legend.title.ts +0 -27
  162. package/src/lib/svg/legend.ts +0 -55
  163. package/src/lib/svg/stage/blocks/block-item/block-item.bounds.ts +0 -51
  164. package/src/lib/svg/stage/blocks/block-item/block-item.index.ts +0 -185
  165. package/src/lib/svg/stage/blocks/block-item/block-item.info.index.ts +0 -39
  166. package/src/lib/svg/stage/blocks/block-item/block-item.labels.index.ts +0 -41
  167. package/src/lib/svg/stage/blocks/block-item/block-item.mask.ts +0 -67
  168. package/src/lib/svg/stage/blocks/block-item/block-item.seats.index.ts +0 -81
  169. package/src/lib/svg/stage/blocks/block-item/bound/bound-item.index.ts +0 -43
  170. package/src/lib/svg/stage/blocks/block-item/info/title.ts +0 -30
  171. package/src/lib/svg/stage/blocks/block-item/label/label-item.circle.ts +0 -27
  172. package/src/lib/svg/stage/blocks/block-item/label/label-item.index.ts +0 -46
  173. package/src/lib/svg/stage/blocks/block-item/label/label-item.title.ts +0 -27
  174. package/src/lib/svg/stage/blocks/block-item/seat/seat-item.check.ts +0 -52
  175. package/src/lib/svg/stage/blocks/block-item/seat/seat-item.circle.ts +0 -30
  176. package/src/lib/svg/stage/blocks/block-item/seat/seat-item.index.ts +0 -159
  177. package/src/lib/svg/stage/blocks/block-item/seat/seat-item.title.ts +0 -27
  178. package/src/lib/svg/stage/blocks/blocks.index.ts +0 -71
  179. package/src/lib/svg/stage/blocks.search-circle.ts +0 -86
  180. package/src/lib/svg/stage/multi-select/rect.ts +0 -36
  181. package/src/lib/svg/stage/multi-select.ts +0 -107
  182. package/src/lib/svg/stage/search-circle/circle.ts +0 -37
  183. package/src/lib/svg/stage/stage.index.ts +0 -41
  184. package/src/lib/svg/svg.base.ts +0 -229
  185. package/src/lib/svg/svg.index.ts +0 -76
  186. package/src/lib/svg/tooltip/rect.ts +0 -66
  187. package/src/lib/svg/tooltip/title.ts +0 -48
  188. package/src/lib/svg/tooltip.ts +0 -93
  189. package/src/lib/svg/zoom-out.bg.ts +0 -35
  190. package/src/lib/svg/zoom.manager.ts +0 -448
  191. package/src/lib/window.manager.ts +0 -40
  192. package/src/scss/lib.scss +0 -10
  193. package/src/scss/style.scss +0 -221
  194. package/tsconfig.json +0 -32
@@ -1,448 +0,0 @@
1
- /*
2
- * $project.fileName
3
- * https://github.com/alisaitteke/seatmap-canvas Copyright 2023 Ali Sait TEKE
4
- */
5
-
6
- import {mouse as d3Mouse, event as d3Event} from 'd3-selection'
7
- import {zoom as d3Zoom} from 'd3-zoom'
8
-
9
-
10
- import {SeatMapCanvas} from "../canvas.index";
11
- import {EventType, ZoomLevel} from "../enums/global";
12
- import SeatModel from "../models/seat.model";
13
- import BlockModel from "../models/block.model";
14
- import LabelModel from "../models/label.model";
15
-
16
- interface ZoomCoordinate {
17
- x: number,
18
- y: number,
19
- k: number
20
- }
21
-
22
- export interface ZoomLevelObject {
23
- level: string,
24
- values: {
25
- x: number,
26
- y: number,
27
- k: number
28
- }
29
- }
30
-
31
- export default class ZoomManager {
32
-
33
- public zoomTypes: any = {
34
- normal: null,
35
- animated: null,
36
- fastAnimated: null
37
- };
38
-
39
- public scale: any = {
40
- x: null,
41
- y: null,
42
- k: null
43
- };
44
-
45
- private zoomLevels: any = {
46
- VENUE: null,
47
- BLOCK: null,
48
- SEAT: null
49
- };
50
-
51
- public activeBlocks: Array<any>;
52
- public minZoom: number | null = null;
53
- public zoomLevel: ZoomLevel;
54
-
55
-
56
- constructor(private _self: SeatMapCanvas) {
57
- this.activeBlocks = [];
58
- this.zoomLevel = ZoomLevel.VENUE;
59
- this.dispatchZoomEvent();
60
- }
61
-
62
- public init() {
63
-
64
- console.log('zoom init')
65
- this.calculateZoomLevels();
66
- this.zoomInit();
67
- // this._self.eventManager.addEventListener(EventType.UPDATE_BLOCK, (blocks: Array<BlockModel>) => {
68
- // this.calculateZoomLevels(blocks);
69
- // })
70
-
71
- this._self.eventManager.addEventListener(EventType.KEYDOWN_SVG, (e: any) => {
72
- if (e.which == 17 || e.which === 91) {
73
- this._self.eventManager.dispatch(EventType.MULTI_SELECT_ENABLE, e);
74
- d3Event.preventDefault();
75
- this.zoomDisable();
76
- }
77
- });
78
- this._self.eventManager.addEventListener(EventType.KEYUP_SVG, (e: any) => {
79
- this._self.eventManager.dispatch(EventType.MULTI_SELECT_DISABLE, e);
80
- d3Event.preventDefault();
81
- this.zoomEnable();
82
- });
83
-
84
- }
85
-
86
- zoomInit() {
87
- console.info('zoomInit')
88
- this.zoomTypes.normal = d3Zoom()
89
- .scaleExtent([this._self.config.min_zoom, this._self.config.max_zoom])
90
- .on("end", this.zoomEnd(this))
91
- .on("zoom", this.zoomHand(this));
92
-
93
- this.zoomTypes.animated = d3Zoom()
94
- .scaleExtent([this._self.config.min_zoom, this._self.config.max_zoom])
95
- .on("end", this.animatedZoomEnd(this))
96
- .on("zoom", this.zoomHandAnimated(this));
97
-
98
- this.zoomTypes.fastAnimated = d3Zoom()
99
- .scaleExtent([this._self.config.min_zoom, this._self.config.max_zoom])
100
- .on("end", this.animatedFastZoomEnd(this))
101
- .on("zoom", this.zoomHandFastAnimated(this));
102
-
103
- this._self.svg.node.call(this.zoomTypes.normal);
104
- }
105
-
106
- zoomEnd(_self: this): any {
107
- console.info('zoomEnd')
108
- return function () {
109
- let x = d3Event.transform.x;
110
- let y = d3Event.transform.y;
111
- let k = d3Event.transform.k;
112
- _self._self.svg.stage.node.interrupt().attr("transform", "translate(" + x + "," + y + ")scale(" + k + ")");
113
- _self.calculateActiveBlocks();
114
- _self.calculateZoomLevel(k);
115
- // _self.canvasScopeHandler();
116
- }
117
- }
118
-
119
- animatedZoomEnd(_self: this): any {
120
- console.info('animatedZoomEnd')
121
- return function () {
122
- let x = d3Event.transform.x;
123
- let y = d3Event.transform.y;
124
- let k = d3Event.transform.k;
125
- _self._self.svg.stage.node.interrupt().transition().duration(_self._self.config.animation_speed).attr("transform", "translate(" + x + "," + y + ")scale(" + k + ")");
126
- _self.calculateActiveBlocks();
127
- _self.calculateZoomLevel(k);
128
- }
129
- }
130
-
131
- animatedFastZoomEnd(_self: this): any {
132
- console.info('animatedFastZoomEnd')
133
- return function () {
134
- let x = d3Event.transform.x;
135
- let y = d3Event.transform.y;
136
- let k = d3Event.transform.k;
137
- _self._self.svg.stage.node.interrupt().transition().duration(_self._self.config.animation_speed / 2).attr("transform", "translate(" + x + "," + y + ")scale(" + k + ")");
138
- _self.calculateActiveBlocks();
139
- _self.calculateZoomLevel(k);
140
- }
141
- }
142
-
143
- zoomHand(_self: this): any {
144
- console.info('zoomHand')
145
- return function () {
146
- let x = d3Event.transform.x;
147
- let y = d3Event.transform.y;
148
- let k = d3Event.transform.k;
149
- _self._self.svg.stage.node.interrupt().attr("transform", "translate(" + x + "," + y + ")scale(" + k + ")");
150
- _self.calculateZoomLevel(k);
151
- }
152
- }
153
-
154
- zoomHandAnimated(_self: this): any {
155
- console.info('zoomHandAnimated')
156
- return function () {
157
- let x = d3Event.transform.x;
158
- let y = d3Event.transform.y;
159
- let k = d3Event.transform.k;
160
-
161
- _self._self.svg.stage.node.interrupt().transition().duration(_self._self.config.animation_speed).attr("transform", "translate(" + x + "," + y + ")scale(" + k + ")");
162
- //_self.calculateZoomLevel(k);
163
- }
164
- }
165
-
166
- zoomHandFastAnimated(_self: this): any {
167
- console.info('zoomHandFastAnimated')
168
- return function () {
169
- let x = d3Event.transform.x;
170
- let y = d3Event.transform.y;
171
- let k = d3Event.transform.k;
172
-
173
- _self._self.svg.stage.node.interrupt().transition().duration(_self._self.config.animation_speed / 2).attr("transform", "translate(" + x + "," + y + ")scale(" + k + ")");
174
- //_self.calculateZoomLevel(k);
175
- }
176
- }
177
-
178
- calculateZoomLevel(k: number) {
179
- console.info('calculateZoomLevel')
180
- let _levels = {
181
- seat: this._self.config.max_zoom - 0.2,
182
- block: this.zoomLevels.BLOCK.k,
183
- venue: this.zoomLevels.VENUE.k
184
- };
185
-
186
- let _zoomLevel: ZoomLevel | null = null;
187
-
188
- let blocks_count = this._self.data.getBlocks().length;
189
-
190
- if (k >= _levels.seat) {
191
- _zoomLevel = ZoomLevel.SEAT;
192
-
193
- } else if (k >= _levels.block) {
194
- _zoomLevel = ZoomLevel.BLOCK;
195
-
196
- } else if (k >= _levels.venue && blocks_count > 1) {
197
- _zoomLevel = ZoomLevel.VENUE;
198
- }
199
-
200
- if (_zoomLevel !== this.zoomLevel) {
201
- this.zoomLevel = _zoomLevel as ZoomLevel;
202
- this.dispatchZoomEvent();
203
- }
204
- }
205
-
206
- canvasScopeHandler() {
207
- if (this._self.config.canvas_stageout_control === false) return;
208
- let _blocks_values = this._self.svg.stage.blocks.node.node().getBoundingClientRect();
209
- let _svg_values = this._self.svg.node.node().getBoundingClientRect();
210
-
211
- if (this.zoomLevel === ZoomLevel.VENUE ||
212
- (this.zoomLevel === ZoomLevel.BLOCK && this._self.data.getBlocks().length === 1) ||
213
- (this.zoomLevel == ZoomLevel.SEAT && this.zoomLevels.BLOCK && this.zoomLevels.BLOCK.k === this._self.config.max_zoom)) {
214
-
215
- if (_blocks_values.left < _svg_values.left ||
216
- _blocks_values.top < _svg_values.top ||
217
- _blocks_values.right > _svg_values.right ||
218
- _blocks_values.bottom > _svg_values.bottom) {
219
- this.zoomToVenue(true, true);
220
- }
221
- }
222
- }
223
-
224
- public calculateZoomLevels(blocks: Array<BlockModel> = this._self.data.getBlocks()): this {
225
-
226
- console.info('calculateZoomLevels')
227
- let _wm = this._self.windowManager;
228
- let _stage = _wm.stage;
229
-
230
- blocks.map((block: BlockModel) => {
231
-
232
- block.seats.map((seat: SeatModel) => {
233
- if (seat.x < block.x) block.x = seat.x;
234
- if (seat.y < block.y) block.y = seat.y;
235
-
236
- if (seat.x > _stage.width) _stage.width = seat.x;
237
- if (seat.y > _stage.height) _stage.height = seat.y;
238
-
239
- //this.total_seat_count++;
240
- });
241
-
242
- block.labels.map((label: LabelModel) => {
243
- if (label.x < block.x) block.x = label.x;
244
- if (label.y < block.y) block.y = label.y;
245
-
246
- if (label.x > _stage.width) _stage.width = label.x;
247
- if (label.y > _stage.height) _stage.height = label.y;
248
- });
249
-
250
- });
251
-
252
- if (_wm.width && _wm.height) {
253
- this.scale.x = (_wm.width / _stage.width) - ((_wm.width / _stage.width) / 5);
254
- this.scale.y = (_wm.height / _stage.height) - ((_wm.height / _stage.height) / 5);
255
- }
256
-
257
- this.scale.k = (this.scale.x < this.scale.y) ? this.scale.x : this.scale.y;
258
- this.minZoom = this.scale.k < 1 ? this.scale.k : 1;
259
-
260
- this.scale.k = this.scale.k > this._self.config.max_zoom ? this._self.config.max_zoom : this.scale.k;
261
-
262
-
263
- let x = _stage.width / 2;
264
- let y = _stage.height / 2;
265
- this.zoomLevels.VENUE = {
266
- x: x,
267
- y: y,
268
- k: this.scale.k - 0.1
269
- };
270
-
271
-
272
- if (this._self.data.getBlocks().length === 1 && this.zoomLevels.BLOCK) {
273
- this.zoomLevels.VENUE = this.zoomLevels.BLOCK;
274
- }
275
-
276
- return this;
277
- }
278
-
279
- public calculateActiveBlocks(blocks: Array<BlockModel> = this._self.data.getBlocks()): Array<BlockModel> {
280
- this.activeBlocks = [];
281
-
282
-
283
- blocks.map((block: BlockModel) => {
284
- let _block_item = this._self.svg.stage.blocks.getBlock(block.id);
285
-
286
- if (_block_item) {
287
- let bound = _block_item.node.node().getBoundingClientRect();
288
- let bbox = _block_item.node.node().getBBox();
289
-
290
- block.bbox = bbox;
291
-
292
- if (this._self.windowManager.width && this._self.windowManager.height) {
293
- let x = (this._self.windowManager.width / bbox.width) - ((this._self.windowManager.width / bbox.width) / 3);
294
- let y = (this._self.windowManager.height / bbox.height) - ((this._self.windowManager.height / bbox.height) / 3);
295
- let k = (x < y) ? x : y;
296
-
297
- x += bbox.x + (bbox.width / 2);
298
- y += bbox.y + (bbox.height / 2);
299
-
300
- k = k > this._self.config.max_zoom ? this._self.config.max_zoom : k;
301
-
302
- block.zoom_bbox = {
303
- x: x,
304
- y: y,
305
- k: k
306
- };
307
-
308
-
309
- let x_overlap = Math.max(0, Math.min(this._self.windowManager.width, bound.right) - Math.max(0, bound.left));
310
- let y_overlap = Math.max(0, Math.min(this._self.windowManager.height, bound.bottom) - Math.max(0, bound.top));
311
- let overlapArea = (x_overlap * y_overlap);
312
- let allOverlapArea = this._self.windowManager.width * this._self.windowManager.height;
313
- let ratio: number = (overlapArea * 100) / allOverlapArea;
314
-
315
- if (overlapArea > 0) {
316
-
317
- this.activeBlocks.push({
318
- block: _block_item,
319
- ratio: Number(ratio.toFixed(2))
320
- });
321
- }
322
- }
323
- }
324
-
325
-
326
- });
327
-
328
- this.activeBlocks = this.activeBlocks.sort((a, b) => b.ratio - a.ratio);
329
- if (this.activeBlocks.length) {
330
- let _activeBlock: BlockModel = this.activeBlocks[0].block.item;
331
- this.zoomLevels.BLOCK = _activeBlock.zoom_bbox;
332
- }
333
-
334
- return this.activeBlocks;
335
- }
336
-
337
- public zoomToSelection(animation: boolean = true) {
338
-
339
- let cor = d3Mouse(this._self.svg.stage.blocks.node.node());
340
- let x = cor[0];
341
- let y = cor[1];
342
- let k = this._self.config.max_zoom;
343
-
344
- this.zoomLevels.SEAT = {
345
- x: x,
346
- y: y,
347
- k: k
348
- };
349
-
350
- if (animation) {
351
- this._self.svg.node.interrupt().call(this.zoomTypes.animated.translateTo, x, y).call(this.zoomTypes.animated.scaleTo, k);
352
- } else {
353
- this._self.svg.node.interrupt().call(this.zoomTypes.normal.translateTo, x, y).call(this.zoomTypes.normal.scaleTo, k);
354
- }
355
- this.zoomLevel = ZoomLevel.SEAT;
356
- this.dispatchZoomEvent();
357
-
358
- }
359
-
360
- public zoomToBlock(id: string | number, animation: boolean = true, fastAnimated: boolean = false) {
361
- let _block = this._self.data.getBlocks().find((block) => block.id.toString() === id.toString());
362
- if (_block) {
363
- if (animation) {
364
- if (fastAnimated) {
365
- this._self.svg.node.interrupt().call(this.zoomTypes.fastAnimated.translateTo, _block.zoom_bbox.x, _block.zoom_bbox.y).call(this.zoomTypes.fastAnimated.scaleTo, _block.zoom_bbox.k);
366
- } else {
367
- this._self.svg.node.interrupt().call(this.zoomTypes.animated.translateTo, _block.zoom_bbox.x, _block.zoom_bbox.y).call(this.zoomTypes.animated.scaleTo, _block.zoom_bbox.k);
368
- }
369
- } else {
370
- this._self.svg.node.interrupt().call(this.zoomTypes.normal.translateTo, _block.zoom_bbox.x, _block.zoom_bbox.y).call(this.zoomTypes.normal.scaleTo, _block.zoom_bbox.k);
371
- }
372
-
373
- // let gap = 0.2;
374
-
375
- // if (_block.zoom_bbox.k > this._self.config.max_zoom + gap || _block.zoom_bbox.k < this._self.config.max_zoom - gap) {
376
- if (_block.zoom_bbox.k === this._self.config.max_zoom) {
377
- this.zoomLevel = ZoomLevel.SEAT;
378
- } else {
379
- this.zoomLevel = ZoomLevel.BLOCK;
380
- }
381
-
382
- this.dispatchZoomEvent();
383
- }
384
- }
385
-
386
- public zoomToVenue(animation: boolean = true, fastAnimated: boolean = false) {
387
-
388
- console.info('zoomToVenue')
389
- let x = this.zoomLevels.VENUE.x;
390
- let y = this.zoomLevels.VENUE.y;
391
- let k = this.zoomLevels.VENUE.k;
392
-
393
- this._self.config.min_zoom = k;
394
- this.zoomInit();
395
-
396
-
397
- // single mode
398
- if (this._self.data.getBlocks().length === 1) {
399
- let _block = this._self.data.getBlocks()[0];
400
- this.zoomToBlock(_block.id, animation, fastAnimated);
401
- return;
402
- }
403
-
404
-
405
- if (x && y && k) {
406
- if (animation) {
407
- if (fastAnimated) {
408
- this._self.svg.node.interrupt().call(this.zoomTypes.fastAnimated.translateTo, x, y).call(this.zoomTypes.fastAnimated.scaleTo, k);
409
- } else {
410
- this._self.svg.node.interrupt().call(this.zoomTypes.animated.translateTo, x, y).call(this.zoomTypes.animated.scaleTo, k);
411
- }
412
-
413
- } else {
414
- this._self.svg.node.interrupt().call(this.zoomTypes.normal.translateTo, x, y).call(this.zoomTypes.normal.scaleTo, k);
415
- }
416
- this.zoomLevel = ZoomLevel.VENUE;
417
- this.dispatchZoomEvent();
418
- }
419
-
420
- }
421
-
422
-
423
- public zoomEnable(): this {
424
- this._self.svg.node.call(this.zoomTypes.normal);
425
- //this._self.svg.node.on('.zoom', null);
426
- return this;
427
- }
428
-
429
- public zoomDisable(): this {
430
- this._self.svg.node.on('.zoom', null);
431
- return this;
432
- }
433
-
434
- public getZoomLevelValues(level: ZoomLevel) {
435
- return this.zoomLevels[level];
436
- }
437
-
438
- public getActiveZoom() {
439
- return this.zoomLevels[this.zoomLevel];
440
- }
441
-
442
- private dispatchZoomEvent() {
443
- this._self.eventManager.dispatch(EventType.ZOOM_LEVEL_CHANGE, {
444
- level: this.zoomLevel,
445
- values: this.getZoomLevelValues(this.zoomLevel)
446
- });
447
- }
448
- }
@@ -1,40 +0,0 @@
1
- /*
2
- * Seatmap-canvas
3
- * https://github.com/alisaitteke/seatmap-canvas Copyright 2022 Ali Sait TEKE
4
- */
5
- import {select as d3Select} from 'd3-selection'
6
-
7
- import {SeatMapCanvas} from "./canvas.index";
8
- import {EventType} from "./enums/global";
9
-
10
- declare var window: any;
11
-
12
- export default class WindowManager {
13
-
14
- public width: number | null = null;
15
- public height: number | null = null;
16
-
17
- public stage: any = {
18
- width: null,
19
- height: null
20
- };
21
-
22
-
23
- constructor(public parent: SeatMapCanvas) {
24
- d3Select(window).on("resize.svg", () => {
25
- this.resizeHandler();
26
-
27
- });
28
-
29
- }
30
-
31
- resizeHandler(): this {
32
- let _node = d3Select(this.parent.container_selector).node().getBoundingClientRect();
33
- this.width = _node.width;
34
- this.height = _node.height;
35
- this.parent.svg.node.attr("width", _node.width);
36
- this.parent.svg.node.attr("height", _node.height);
37
- this.parent.global.eventManager.dispatch(EventType.RESIZE_WINDOW, _node);
38
- return this;
39
- }
40
- }
package/src/scss/lib.scss DELETED
@@ -1,10 +0,0 @@
1
- @mixin stroke-width($param: 4) {
2
- stroke-width: #{$param}px;
3
- }
4
-
5
- @mixin trans($duration:0.5s,$delay:0.2s) {
6
- transition-property: opacity;
7
- transition-duration: $duration;
8
- transition-delay: $delay;
9
- transition-timing-function: ease-in-out;
10
- }
@@ -1,221 +0,0 @@
1
- @import "lib";
2
-
3
- .multi-select-enable {
4
- .seatmap-svg {
5
- .stage {
6
- .blocks {
7
- .block {
8
- cursor: crosshair;
9
- .masks {
10
- .venue-level-mask {
11
-
12
- }
13
- .block-level-mask {
14
-
15
- }
16
- .seat-level-mask {
17
- cursor: crosshair!important;
18
- }
19
- }
20
- .seats {
21
- .seat {
22
- cursor: crosshair;
23
- &.selected {
24
- cursor: crosshair;
25
- }
26
- }
27
- }
28
- }
29
- }
30
- }
31
- }
32
- }
33
-
34
- .seatmap-svg {
35
- position: relative;
36
- width: 100%;
37
- height: 100%;
38
-
39
- &.zoom-level-SEAT {
40
- .stage {
41
- .blocks {
42
- .block {
43
- .masks {
44
- .venue-level-mask {
45
-
46
- }
47
- .block-level-mask {
48
-
49
- }
50
- .seat-level-mask {
51
- cursor: none;
52
- }
53
- }
54
- }
55
- }
56
- }
57
- }
58
- &.zoom-level-BLOCK {
59
- .stage {
60
- .blocks {
61
- .block {
62
- .masks {
63
- .venue-level-mask {
64
-
65
- }
66
- .block-level-mask {
67
-
68
- }
69
- .seat-level-mask {
70
- cursor: none;
71
- }
72
- }
73
- }
74
- }
75
- }
76
- }
77
- &.zoom-level-VENUE {
78
- .stage {
79
- .blocks {
80
- .block {
81
- .masks {
82
- .venue-level-mask {
83
-
84
- }
85
- .block-level-mask {
86
-
87
- }
88
- .seat-level-mask {
89
- cursor: none;
90
- }
91
- }
92
- }
93
- }
94
-
95
- }
96
- }
97
-
98
- .zoom-out-bg {
99
- cursor: zoom-out;
100
- fill: transparent;
101
-
102
- }
103
- .stage {
104
- .blocks {
105
- .block {
106
- .bounds {
107
- .block-hull-border {
108
- stroke-linejoin: round;
109
- opacity: 0.5;
110
- }
111
- .block-hull {
112
- stroke-linejoin: round;
113
- cursor: move;
114
- }
115
- }
116
- .masks {
117
- .venue-level-mask {
118
- @include trans();
119
- stroke-linejoin: round;
120
- opacity: 1;
121
- }
122
- .block-level-mask {
123
- @include trans();
124
- stroke-linejoin: round;
125
- opacity: 1;
126
- }
127
- .seat-level-mask {
128
- @include trans();
129
- stroke-linejoin: round;
130
- opacity: 0;
131
- }
132
- .bound-hide {
133
- @include trans();
134
- pointer-events: none;
135
- opacity: 0;
136
- }
137
- }
138
- .info {
139
- .title {
140
- text-anchor: middle;
141
- dominant-baseline: central;
142
- }
143
- }
144
- .seats {
145
- .seat {
146
- cursor: copy;
147
- &.selected {
148
- cursor: pointer;
149
- }
150
- .label-text {
151
- text-anchor: middle;
152
- dominant-baseline: central;
153
- }
154
- }
155
- }
156
- .labels {
157
- .label {
158
- circle {
159
- stroke: rgba(0, 0, 0, .2);
160
- }
161
- .label-text {
162
- text-anchor: middle;
163
- dominant-baseline: central;
164
- }
165
- }
166
- }
167
- .zoom-layers-container {
168
- .zoom-layer-hull {
169
- stroke-width: 80px;
170
- stroke-linejoin: round;
171
- }
172
- }
173
- .block-info {
174
- .block-text {
175
- }
176
- }
177
- }
178
- @media (any-pointer: coarse) {
179
- .search-circle {
180
- display: none;
181
- }
182
- }
183
- }
184
- .search-circle {
185
- opacity: 0;
186
- @include trans(0.2s, 0);
187
- .circle {
188
- fill: rgba(0, 0, 0, 0);
189
- pointer-events: none;
190
- stroke: rgba(0, 0, 0, 0.4);
191
- @include stroke-width(4)
192
- }
193
- &.hide {
194
- @include trans(0.2s, 0);
195
- opacity: 0;
196
-
197
- }
198
- &.show {
199
- @include trans(0.2s, 0);
200
- opacity: 1;
201
- }
202
-
203
- }
204
-
205
- }
206
- .zoom-out-button {
207
-
208
- }
209
- .legend {
210
- .legend-item {
211
- circle {
212
- stroke: #adadad;
213
- @include stroke-width(1);
214
- }
215
- text {
216
- text-anchor: start;
217
- dominant-baseline: central;
218
- }
219
- }
220
- }
221
- }