@genesis-community/golden-layout 2.6.0

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/LICENSE +21 -0
  2. package/README.md +24 -0
  3. package/dist/cjs/index.js +40 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/ts/config/config.js +870 -0
  6. package/dist/cjs/ts/config/config.js.map +1 -0
  7. package/dist/cjs/ts/config/resolved-config.js +477 -0
  8. package/dist/cjs/ts/config/resolved-config.js.map +1 -0
  9. package/dist/cjs/ts/container/component-container.js +412 -0
  10. package/dist/cjs/ts/container/component-container.js.map +1 -0
  11. package/dist/cjs/ts/controls/browser-popout.js +298 -0
  12. package/dist/cjs/ts/controls/browser-popout.js.map +1 -0
  13. package/dist/cjs/ts/controls/drag-proxy.js +221 -0
  14. package/dist/cjs/ts/controls/drag-proxy.js.map +1 -0
  15. package/dist/cjs/ts/controls/drag-source.js +149 -0
  16. package/dist/cjs/ts/controls/drag-source.js.map +1 -0
  17. package/dist/cjs/ts/controls/drop-target-indicator.js +31 -0
  18. package/dist/cjs/ts/controls/drop-target-indicator.js.map +1 -0
  19. package/dist/cjs/ts/controls/header-button.js +34 -0
  20. package/dist/cjs/ts/controls/header-button.js.map +1 -0
  21. package/dist/cjs/ts/controls/header.js +366 -0
  22. package/dist/cjs/ts/controls/header.js.map +1 -0
  23. package/dist/cjs/ts/controls/splitter.js +42 -0
  24. package/dist/cjs/ts/controls/splitter.js.map +1 -0
  25. package/dist/cjs/ts/controls/tab.js +262 -0
  26. package/dist/cjs/ts/controls/tab.js.map +1 -0
  27. package/dist/cjs/ts/controls/tabs-container.js +236 -0
  28. package/dist/cjs/ts/controls/tabs-container.js.map +1 -0
  29. package/dist/cjs/ts/controls/transition-indicator.js +64 -0
  30. package/dist/cjs/ts/controls/transition-indicator.js.map +1 -0
  31. package/dist/cjs/ts/errors/external-error.js +46 -0
  32. package/dist/cjs/ts/errors/external-error.js.map +1 -0
  33. package/dist/cjs/ts/errors/internal-error.js +38 -0
  34. package/dist/cjs/ts/errors/internal-error.js.map +1 -0
  35. package/dist/cjs/ts/golden-layout.js +299 -0
  36. package/dist/cjs/ts/golden-layout.js.map +1 -0
  37. package/dist/cjs/ts/items/component-item.js +190 -0
  38. package/dist/cjs/ts/items/component-item.js.map +1 -0
  39. package/dist/cjs/ts/items/component-parentable-item.js +18 -0
  40. package/dist/cjs/ts/items/component-parentable-item.js.map +1 -0
  41. package/dist/cjs/ts/items/content-item.js +414 -0
  42. package/dist/cjs/ts/items/content-item.js.map +1 -0
  43. package/dist/cjs/ts/items/ground-item.js +352 -0
  44. package/dist/cjs/ts/items/ground-item.js.map +1 -0
  45. package/dist/cjs/ts/items/row-or-column.js +609 -0
  46. package/dist/cjs/ts/items/row-or-column.js.map +1 -0
  47. package/dist/cjs/ts/items/stack.js +841 -0
  48. package/dist/cjs/ts/items/stack.js.map +1 -0
  49. package/dist/cjs/ts/layout-manager.js +1618 -0
  50. package/dist/cjs/ts/layout-manager.js.map +1 -0
  51. package/dist/cjs/ts/utils/config-minifier.js +218 -0
  52. package/dist/cjs/ts/utils/config-minifier.js.map +1 -0
  53. package/dist/cjs/ts/utils/dom-constants.js +3 -0
  54. package/dist/cjs/ts/utils/dom-constants.js.map +1 -0
  55. package/dist/cjs/ts/utils/drag-listener.js +132 -0
  56. package/dist/cjs/ts/utils/drag-listener.js.map +1 -0
  57. package/dist/cjs/ts/utils/event-emitter.js +201 -0
  58. package/dist/cjs/ts/utils/event-emitter.js.map +1 -0
  59. package/dist/cjs/ts/utils/event-hub.js +135 -0
  60. package/dist/cjs/ts/utils/event-hub.js.map +1 -0
  61. package/dist/cjs/ts/utils/i18n-strings.js +74 -0
  62. package/dist/cjs/ts/utils/i18n-strings.js.map +1 -0
  63. package/dist/cjs/ts/utils/jquery-legacy.js +15 -0
  64. package/dist/cjs/ts/utils/jquery-legacy.js.map +1 -0
  65. package/dist/cjs/ts/utils/style-constants.js +11 -0
  66. package/dist/cjs/ts/utils/style-constants.js.map +1 -0
  67. package/dist/cjs/ts/utils/types.js +94 -0
  68. package/dist/cjs/ts/utils/types.js.map +1 -0
  69. package/dist/cjs/ts/utils/utils.js +211 -0
  70. package/dist/cjs/ts/utils/utils.js.map +1 -0
  71. package/dist/cjs/ts/virtual-layout.js +247 -0
  72. package/dist/cjs/ts/virtual-layout.js.map +1 -0
  73. package/dist/css/goldenlayout-base.css +319 -0
  74. package/dist/css/themes/goldenlayout-borderless-dark-theme.css +136 -0
  75. package/dist/css/themes/goldenlayout-dark-theme.css +139 -0
  76. package/dist/css/themes/goldenlayout-light-theme.css +129 -0
  77. package/dist/css/themes/goldenlayout-soda-theme.css +126 -0
  78. package/dist/css/themes/goldenlayout-translucent-theme.css +152 -0
  79. package/dist/esm/index.js +21 -0
  80. package/dist/esm/index.js.map +1 -0
  81. package/dist/esm/ts/config/config.js +864 -0
  82. package/dist/esm/ts/config/config.js.map +1 -0
  83. package/dist/esm/ts/config/resolved-config.js +474 -0
  84. package/dist/esm/ts/config/resolved-config.js.map +1 -0
  85. package/dist/esm/ts/container/component-container.js +408 -0
  86. package/dist/esm/ts/container/component-container.js.map +1 -0
  87. package/dist/esm/ts/controls/browser-popout.js +294 -0
  88. package/dist/esm/ts/controls/browser-popout.js.map +1 -0
  89. package/dist/esm/ts/controls/drag-proxy.js +217 -0
  90. package/dist/esm/ts/controls/drag-proxy.js.map +1 -0
  91. package/dist/esm/ts/controls/drag-source.js +145 -0
  92. package/dist/esm/ts/controls/drag-source.js.map +1 -0
  93. package/dist/esm/ts/controls/drop-target-indicator.js +27 -0
  94. package/dist/esm/ts/controls/drop-target-indicator.js.map +1 -0
  95. package/dist/esm/ts/controls/header-button.js +30 -0
  96. package/dist/esm/ts/controls/header-button.js.map +1 -0
  97. package/dist/esm/ts/controls/header.js +362 -0
  98. package/dist/esm/ts/controls/header.js.map +1 -0
  99. package/dist/esm/ts/controls/splitter.js +38 -0
  100. package/dist/esm/ts/controls/splitter.js.map +1 -0
  101. package/dist/esm/ts/controls/tab.js +258 -0
  102. package/dist/esm/ts/controls/tab.js.map +1 -0
  103. package/dist/esm/ts/controls/tabs-container.js +232 -0
  104. package/dist/esm/ts/controls/tabs-container.js.map +1 -0
  105. package/dist/esm/ts/controls/transition-indicator.js +60 -0
  106. package/dist/esm/ts/controls/transition-indicator.js.map +1 -0
  107. package/dist/esm/ts/errors/external-error.js +38 -0
  108. package/dist/esm/ts/errors/external-error.js.map +1 -0
  109. package/dist/esm/ts/errors/internal-error.js +31 -0
  110. package/dist/esm/ts/errors/internal-error.js.map +1 -0
  111. package/dist/esm/ts/golden-layout.js +295 -0
  112. package/dist/esm/ts/golden-layout.js.map +1 -0
  113. package/dist/esm/ts/items/component-item.js +186 -0
  114. package/dist/esm/ts/items/component-item.js.map +1 -0
  115. package/dist/esm/ts/items/component-parentable-item.js +14 -0
  116. package/dist/esm/ts/items/component-parentable-item.js.map +1 -0
  117. package/dist/esm/ts/items/content-item.js +410 -0
  118. package/dist/esm/ts/items/content-item.js.map +1 -0
  119. package/dist/esm/ts/items/ground-item.js +348 -0
  120. package/dist/esm/ts/items/ground-item.js.map +1 -0
  121. package/dist/esm/ts/items/row-or-column.js +605 -0
  122. package/dist/esm/ts/items/row-or-column.js.map +1 -0
  123. package/dist/esm/ts/items/stack.js +837 -0
  124. package/dist/esm/ts/items/stack.js.map +1 -0
  125. package/dist/esm/ts/layout-manager.js +1614 -0
  126. package/dist/esm/ts/layout-manager.js.map +1 -0
  127. package/dist/esm/ts/utils/config-minifier.js +215 -0
  128. package/dist/esm/ts/utils/config-minifier.js.map +1 -0
  129. package/dist/esm/ts/utils/dom-constants.js +2 -0
  130. package/dist/esm/ts/utils/dom-constants.js.map +1 -0
  131. package/dist/esm/ts/utils/drag-listener.js +128 -0
  132. package/dist/esm/ts/utils/drag-listener.js.map +1 -0
  133. package/dist/esm/ts/utils/event-emitter.js +197 -0
  134. package/dist/esm/ts/utils/event-emitter.js.map +1 -0
  135. package/dist/esm/ts/utils/event-hub.js +131 -0
  136. package/dist/esm/ts/utils/event-hub.js.map +1 -0
  137. package/dist/esm/ts/utils/i18n-strings.js +71 -0
  138. package/dist/esm/ts/utils/i18n-strings.js.map +1 -0
  139. package/dist/esm/ts/utils/jquery-legacy.js +11 -0
  140. package/dist/esm/ts/utils/jquery-legacy.js.map +1 -0
  141. package/dist/esm/ts/utils/style-constants.js +8 -0
  142. package/dist/esm/ts/utils/style-constants.js.map +1 -0
  143. package/dist/esm/ts/utils/types.js +91 -0
  144. package/dist/esm/ts/utils/types.js.map +1 -0
  145. package/dist/esm/ts/utils/utils.js +191 -0
  146. package/dist/esm/ts/utils/utils.js.map +1 -0
  147. package/dist/esm/ts/virtual-layout.js +243 -0
  148. package/dist/esm/ts/virtual-layout.js.map +1 -0
  149. package/dist/img/lm_close_black.png +0 -0
  150. package/dist/img/lm_close_tab_white.png +0 -0
  151. package/dist/img/lm_close_white.png +0 -0
  152. package/dist/img/lm_maximise_black.png +0 -0
  153. package/dist/img/lm_maximise_white.png +0 -0
  154. package/dist/img/lm_minimize_black.png +0 -0
  155. package/dist/img/lm_minimize_white.png +0 -0
  156. package/dist/img/lm_popin_black.png +0 -0
  157. package/dist/img/lm_popin_white.png +0 -0
  158. package/dist/img/lm_popout_black.png +0 -0
  159. package/dist/img/lm_popout_white.png +0 -0
  160. package/dist/less/goldenlayout-base.less +422 -0
  161. package/dist/less/themes/goldenlayout-borderless-dark-theme.less +230 -0
  162. package/dist/less/themes/goldenlayout-dark-theme.less +233 -0
  163. package/dist/less/themes/goldenlayout-light-theme.less +223 -0
  164. package/dist/less/themes/goldenlayout-soda-theme.less +211 -0
  165. package/dist/less/themes/goldenlayout-translucent-theme.less +237 -0
  166. package/dist/scss/goldenlayout-base.scss +422 -0
  167. package/dist/scss/themes/_goldenlayout-var-theme.scss +232 -0
  168. package/dist/types/golden-layout-untrimmed.d.ts +3428 -0
  169. package/dist/types/index.d.ts +2246 -0
  170. package/dist/types/tsdoc-metadata.json +11 -0
  171. package/package.json +107 -0
  172. package/src/TOOLCHAIN.md +54 -0
  173. package/src/img/lm_close_black.png +0 -0
  174. package/src/img/lm_close_tab_white.png +0 -0
  175. package/src/img/lm_close_white.png +0 -0
  176. package/src/img/lm_maximise_black.png +0 -0
  177. package/src/img/lm_maximise_white.png +0 -0
  178. package/src/img/lm_minimize_black.png +0 -0
  179. package/src/img/lm_minimize_white.png +0 -0
  180. package/src/img/lm_popin_black.png +0 -0
  181. package/src/img/lm_popin_white.png +0 -0
  182. package/src/img/lm_popout_black.png +0 -0
  183. package/src/img/lm_popout_white.png +0 -0
  184. package/src/index.ts +21 -0
  185. package/src/less/goldenlayout-base.less +422 -0
  186. package/src/less/themes/goldenlayout-borderless-dark-theme.less +230 -0
  187. package/src/less/themes/goldenlayout-dark-theme.less +233 -0
  188. package/src/less/themes/goldenlayout-light-theme.less +223 -0
  189. package/src/less/themes/goldenlayout-soda-theme.less +211 -0
  190. package/src/less/themes/goldenlayout-translucent-theme.less +237 -0
  191. package/src/scss/goldenlayout-base.scss +422 -0
  192. package/src/scss/themes/_goldenlayout-var-theme.scss +232 -0
  193. package/src/ts/config/config.ts +1283 -0
  194. package/src/ts/config/resolved-config.ts +621 -0
  195. package/src/ts/container/component-container.ts +500 -0
  196. package/src/ts/controls/browser-popout.ts +325 -0
  197. package/src/ts/controls/drag-proxy.ts +259 -0
  198. package/src/ts/controls/drag-source.ts +167 -0
  199. package/src/ts/controls/drop-target-indicator.ts +35 -0
  200. package/src/ts/controls/header-button.ts +39 -0
  201. package/src/ts/controls/header.ts +483 -0
  202. package/src/ts/controls/splitter.ts +50 -0
  203. package/src/ts/controls/tab.ts +293 -0
  204. package/src/ts/controls/tabs-container.ts +281 -0
  205. package/src/ts/controls/transition-indicator.ts +78 -0
  206. package/src/ts/errors/external-error.ts +39 -0
  207. package/src/ts/errors/internal-error.ts +34 -0
  208. package/src/ts/golden-layout.ts +365 -0
  209. package/src/ts/items/component-item.ts +252 -0
  210. package/src/ts/items/component-parentable-item.ts +16 -0
  211. package/src/ts/items/content-item.ts +513 -0
  212. package/src/ts/items/ground-item.ts +404 -0
  213. package/src/ts/items/row-or-column.ts +707 -0
  214. package/src/ts/items/stack.ts +975 -0
  215. package/src/ts/layout-manager.ts +1862 -0
  216. package/src/ts/utils/config-minifier.ts +235 -0
  217. package/src/ts/utils/dom-constants.ts +44 -0
  218. package/src/ts/utils/drag-listener.ts +178 -0
  219. package/src/ts/utils/event-emitter.ts +275 -0
  220. package/src/ts/utils/event-hub.ts +163 -0
  221. package/src/ts/utils/i18n-strings.ts +96 -0
  222. package/src/ts/utils/jquery-legacy.ts +12 -0
  223. package/src/ts/utils/style-constants.ts +6 -0
  224. package/src/ts/utils/types.ts +145 -0
  225. package/src/ts/utils/utils.ts +206 -0
  226. package/src/ts/virtual-layout.ts +328 -0
@@ -0,0 +1,841 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Stack = void 0;
4
+ const config_1 = require("../config/config");
5
+ const resolved_config_1 = require("../config/resolved-config");
6
+ const header_1 = require("../controls/header");
7
+ const internal_error_1 = require("../errors/internal-error");
8
+ const event_emitter_1 = require("../utils/event-emitter");
9
+ const types_1 = require("../utils/types");
10
+ const utils_1 = require("../utils/utils");
11
+ const component_item_1 = require("./component-item");
12
+ const component_parentable_item_1 = require("./component-parentable-item");
13
+ const content_item_1 = require("./content-item");
14
+ /** @public */
15
+ class Stack extends component_parentable_item_1.ComponentParentableItem {
16
+ /** @internal */
17
+ constructor(layoutManager, config, parent) {
18
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
19
+ super(layoutManager, config, parent, Stack.createElement(document));
20
+ /** @internal */
21
+ this._headerSideChanged = false;
22
+ /** @internal */
23
+ this._resizeListener = () => this.handleResize();
24
+ /** @internal */
25
+ this._maximisedListener = () => this.handleMaximised();
26
+ /** @internal */
27
+ this._minimisedListener = () => this.handleMinimised();
28
+ this._headerConfig = config.header;
29
+ const layoutHeaderConfig = layoutManager.layoutConfig.header;
30
+ const configContent = config.content;
31
+ // If stack has only one component, then we can also check this for header settings
32
+ let componentHeaderConfig;
33
+ if (configContent.length !== 1) {
34
+ componentHeaderConfig = undefined;
35
+ }
36
+ else {
37
+ const firstChildItemConfig = configContent[0];
38
+ componentHeaderConfig = firstChildItemConfig.header; // will be undefined if not component (and wont be stack)
39
+ }
40
+ this._initialWantMaximise = config.maximised;
41
+ this._initialActiveItemIndex = (_a = config.activeItemIndex) !== null && _a !== void 0 ? _a : 0; // make sure defined
42
+ // check for defined value for each item in order of Stack (this Item), Component (first child), Manager.
43
+ const show = (_d = (_c = (_b = this._headerConfig) === null || _b === void 0 ? void 0 : _b.show) !== null && _c !== void 0 ? _c : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.show) !== null && _d !== void 0 ? _d : layoutHeaderConfig.show;
44
+ const popout = (_g = (_f = (_e = this._headerConfig) === null || _e === void 0 ? void 0 : _e.popout) !== null && _f !== void 0 ? _f : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.popout) !== null && _g !== void 0 ? _g : layoutHeaderConfig.popout;
45
+ const maximise = (_k = (_j = (_h = this._headerConfig) === null || _h === void 0 ? void 0 : _h.maximise) !== null && _j !== void 0 ? _j : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.maximise) !== null && _k !== void 0 ? _k : layoutHeaderConfig.maximise;
46
+ const close = (_o = (_m = (_l = this._headerConfig) === null || _l === void 0 ? void 0 : _l.close) !== null && _m !== void 0 ? _m : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.close) !== null && _o !== void 0 ? _o : layoutHeaderConfig.close;
47
+ const minimise = (_r = (_q = (_p = this._headerConfig) === null || _p === void 0 ? void 0 : _p.minimise) !== null && _q !== void 0 ? _q : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.minimise) !== null && _r !== void 0 ? _r : layoutHeaderConfig.minimise;
48
+ const tabDropdown = (_u = (_t = (_s = this._headerConfig) === null || _s === void 0 ? void 0 : _s.tabDropdown) !== null && _t !== void 0 ? _t : componentHeaderConfig === null || componentHeaderConfig === void 0 ? void 0 : componentHeaderConfig.tabDropdown) !== null && _u !== void 0 ? _u : layoutHeaderConfig.tabDropdown;
49
+ this._maximisedEnabled = maximise !== false;
50
+ const headerSettings = {
51
+ show: show !== false,
52
+ side: show === false ? types_1.Side.top : show,
53
+ popoutEnabled: popout !== false,
54
+ popoutLabel: popout === false ? '' : popout,
55
+ maximiseEnabled: this._maximisedEnabled,
56
+ maximiseLabel: maximise === false ? '' : maximise,
57
+ closeEnabled: close !== false,
58
+ closeLabel: close === false ? '' : close,
59
+ minimiseEnabled: true,
60
+ minimiseLabel: minimise,
61
+ tabDropdownEnabled: tabDropdown !== false,
62
+ tabDropdownLabel: tabDropdown === false ? '' : tabDropdown,
63
+ };
64
+ this._header = new header_1.Header(layoutManager, this, headerSettings, config.isClosable && close !== false, () => this.getActiveComponentItem(), () => this.remove(), () => this.handlePopoutEvent(), () => this.toggleMaximise(), (ev) => this.handleHeaderClickEvent(ev), (ev) => this.handleHeaderTouchStartEvent(ev), (item) => this.handleHeaderComponentRemoveEvent(item), (item) => this.handleHeaderComponentFocusEvent(item), (x, y, dragListener, item) => this.handleHeaderComponentStartDragEvent(x, y, dragListener, item));
65
+ // this._dropZones = {};
66
+ this.isStack = true;
67
+ this._childElementContainer = document.createElement('section');
68
+ this._childElementContainer.classList.add("lm_items" /* DomConstants.ClassName.Items */);
69
+ this.on('resize', this._resizeListener);
70
+ if (this._maximisedEnabled) {
71
+ this.on('maximised', this._maximisedListener);
72
+ this.on('minimised', this._minimisedListener);
73
+ }
74
+ this.element.appendChild(this._header.element);
75
+ this.element.appendChild(this._childElementContainer);
76
+ this.setupHeaderPosition();
77
+ this._header.updateClosability();
78
+ }
79
+ get childElementContainer() { return this._childElementContainer; }
80
+ get header() { return this._header; }
81
+ get headerShow() { return this._header.show; }
82
+ get headerSide() { return this._header.side; }
83
+ get headerLeftRightSided() { return this._header.leftRightSided; }
84
+ /** @internal */
85
+ get contentAreaDimensions() { return this._contentAreaDimensions; }
86
+ /** @internal */
87
+ get initialWantMaximise() { return this._initialWantMaximise; }
88
+ get isMaximised() { return this === this.layoutManager.maximisedStack; }
89
+ get stackParent() {
90
+ if (!this.parent) {
91
+ throw new Error('Stack should always have a parent');
92
+ }
93
+ return this.parent;
94
+ }
95
+ /** @internal */
96
+ updateSize(force) {
97
+ this.layoutManager.beginVirtualSizedContainerAdding();
98
+ try {
99
+ this.updateNodeSize();
100
+ this.updateContentItemsSize(force);
101
+ }
102
+ finally {
103
+ this.layoutManager.endVirtualSizedContainerAdding();
104
+ }
105
+ }
106
+ /** @internal */
107
+ init() {
108
+ if (this.isInitialised === true)
109
+ return;
110
+ this.updateNodeSize();
111
+ for (let i = 0; i < this.contentItems.length; i++) {
112
+ this._childElementContainer.appendChild(this.contentItems[i].element);
113
+ }
114
+ super.init();
115
+ const contentItems = this.contentItems;
116
+ const contentItemCount = contentItems.length;
117
+ if (contentItemCount > 0) { // contentItemCount will be 0 on drag drop
118
+ if (this._initialActiveItemIndex < 0 || this._initialActiveItemIndex >= contentItemCount) {
119
+ throw new Error(`ActiveItemIndex out of range: ${this._initialActiveItemIndex} id: ${this.id}`);
120
+ }
121
+ else {
122
+ for (let i = 0; i < contentItemCount; i++) {
123
+ const contentItem = contentItems[i];
124
+ if (!(contentItem instanceof component_item_1.ComponentItem)) {
125
+ throw new Error(`Stack Content Item is not of type ComponentItem: ${i} id: ${this.id}`);
126
+ }
127
+ else {
128
+ this._header.createTab(contentItem, i);
129
+ contentItem.hide();
130
+ contentItem.container.setBaseLogicalZIndex();
131
+ }
132
+ }
133
+ this.setActiveComponentItem(contentItems[this._initialActiveItemIndex], false);
134
+ this._header.updateTabSizes();
135
+ }
136
+ }
137
+ this._header.updateClosability();
138
+ this.initContentItems();
139
+ }
140
+ /** @deprecated Use {@link (Stack:class).setActiveComponentItem} */
141
+ setActiveContentItem(item) {
142
+ if (!content_item_1.ContentItem.isComponentItem(item)) {
143
+ throw new Error('Stack.setActiveContentItem: item is not a ComponentItem');
144
+ }
145
+ else {
146
+ this.setActiveComponentItem(item, false);
147
+ }
148
+ }
149
+ setActiveComponentItem(componentItem, focus, suppressFocusEvent = false) {
150
+ if (this._activeComponentItem !== componentItem) {
151
+ if (this.contentItems.indexOf(componentItem) === -1) {
152
+ throw new Error('componentItem is not a child of this stack');
153
+ }
154
+ else {
155
+ this.layoutManager.beginSizeInvalidation();
156
+ try {
157
+ if (this._activeComponentItem !== undefined) {
158
+ this._activeComponentItem.hide();
159
+ }
160
+ this._activeComponentItem = componentItem;
161
+ this._header.processActiveComponentChanged(componentItem);
162
+ componentItem.show();
163
+ }
164
+ finally {
165
+ this.layoutManager.endSizeInvalidation();
166
+ }
167
+ this.emit('activeContentItemChanged', componentItem);
168
+ this.layoutManager.emit('activeContentItemChanged', componentItem);
169
+ this.emitStateChangedEvent();
170
+ }
171
+ }
172
+ if (this.focused || focus) {
173
+ this.layoutManager.setFocusedComponentItem(componentItem, suppressFocusEvent);
174
+ }
175
+ }
176
+ /** @deprecated Use {@link (Stack:class).getActiveComponentItem} */
177
+ getActiveContentItem() {
178
+ var _a;
179
+ return (_a = this.getActiveComponentItem()) !== null && _a !== void 0 ? _a : null;
180
+ }
181
+ getActiveComponentItem() {
182
+ return this._activeComponentItem;
183
+ }
184
+ /** @internal */
185
+ focusActiveContentItem() {
186
+ var _a;
187
+ (_a = this._activeComponentItem) === null || _a === void 0 ? void 0 : _a.focus();
188
+ }
189
+ /** @internal */
190
+ setFocusedValue(value) {
191
+ this._header.applyFocusedValue(value);
192
+ super.setFocusedValue(value);
193
+ }
194
+ /** @internal */
195
+ setRowColumnClosable(value) {
196
+ this._header.setRowColumnClosable(value);
197
+ }
198
+ newComponent(componentType, componentState, title, index) {
199
+ const itemConfig = {
200
+ type: 'component',
201
+ componentType,
202
+ componentState,
203
+ title,
204
+ };
205
+ return this.newItem(itemConfig, index);
206
+ }
207
+ addComponent(componentType, componentState, title, index) {
208
+ const itemConfig = {
209
+ type: 'component',
210
+ componentType,
211
+ componentState,
212
+ title,
213
+ };
214
+ return this.addItem(itemConfig, index);
215
+ }
216
+ newItem(itemConfig, index) {
217
+ index = this.addItem(itemConfig, index);
218
+ return this.contentItems[index];
219
+ }
220
+ addItem(itemConfig, index) {
221
+ this.layoutManager.checkMinimiseMaximisedStack();
222
+ const resolvedItemConfig = config_1.ItemConfig.resolve(itemConfig, false);
223
+ const contentItem = this.layoutManager.createAndInitContentItem(resolvedItemConfig, this);
224
+ return this.addChild(contentItem, index);
225
+ }
226
+ addChild(contentItem, index, focus = false) {
227
+ if (index !== undefined && index > this.contentItems.length) {
228
+ index -= 1;
229
+ throw new internal_error_1.AssertError('SAC99728'); // undisplayChild() removed so this condition should no longer occur
230
+ }
231
+ if (!(contentItem instanceof component_item_1.ComponentItem)) {
232
+ throw new internal_error_1.AssertError('SACC88532'); // Stacks can only have Component children
233
+ }
234
+ else {
235
+ index = super.addChild(contentItem, index);
236
+ this._childElementContainer.appendChild(contentItem.element);
237
+ this._header.createTab(contentItem, index);
238
+ this.setActiveComponentItem(contentItem, focus);
239
+ this._header.updateTabSizes();
240
+ this.updateSize(false);
241
+ contentItem.container.setBaseLogicalZIndex();
242
+ this._header.updateClosability();
243
+ this.emitStateChangedEvent();
244
+ return index;
245
+ }
246
+ }
247
+ removeChild(contentItem, keepChild) {
248
+ const componentItem = contentItem;
249
+ const index = this.contentItems.indexOf(componentItem);
250
+ const stackWillBeDeleted = this.contentItems.length === 1;
251
+ if (this._activeComponentItem === componentItem) {
252
+ if (componentItem.focused) {
253
+ componentItem.blur();
254
+ }
255
+ if (!stackWillBeDeleted) {
256
+ // At this point we're already sure we have at least one content item left *after*
257
+ // removing contentItem, so we can safely assume index 1 is a valid one if
258
+ // the index of contentItem is 0, otherwise we just use the previous content item.
259
+ const newActiveComponentIdx = index === 0 ? 1 : index - 1;
260
+ this.setActiveComponentItem(this.contentItems[newActiveComponentIdx], false);
261
+ }
262
+ }
263
+ this._header.removeTab(componentItem);
264
+ super.removeChild(componentItem, keepChild);
265
+ if (!stackWillBeDeleted) {
266
+ this._header.updateClosability();
267
+ }
268
+ this.emitStateChangedEvent();
269
+ }
270
+ /**
271
+ * Maximises the Item or minimises it if it is already maximised
272
+ */
273
+ toggleMaximise() {
274
+ if (this.isMaximised) {
275
+ this.minimise();
276
+ }
277
+ else {
278
+ this.maximise();
279
+ }
280
+ }
281
+ maximise() {
282
+ if (!this.isMaximised) {
283
+ this.layoutManager.setMaximisedStack(this);
284
+ const contentItems = this.contentItems;
285
+ const contentItemCount = contentItems.length;
286
+ for (let i = 0; i < contentItemCount; i++) {
287
+ const contentItem = contentItems[i];
288
+ if (contentItem instanceof component_item_1.ComponentItem) {
289
+ contentItem.enterStackMaximised();
290
+ }
291
+ else {
292
+ throw new internal_error_1.AssertError('SMAXI87773');
293
+ }
294
+ }
295
+ this.emitStateChangedEvent();
296
+ }
297
+ }
298
+ minimise() {
299
+ if (this.isMaximised) {
300
+ this.layoutManager.setMaximisedStack(undefined);
301
+ const contentItems = this.contentItems;
302
+ const contentItemCount = contentItems.length;
303
+ for (let i = 0; i < contentItemCount; i++) {
304
+ const contentItem = contentItems[i];
305
+ if (contentItem instanceof component_item_1.ComponentItem) {
306
+ contentItem.exitStackMaximised();
307
+ }
308
+ else {
309
+ throw new internal_error_1.AssertError('SMINI87773');
310
+ }
311
+ }
312
+ this.emitStateChangedEvent();
313
+ }
314
+ }
315
+ /** @internal */
316
+ destroy() {
317
+ var _a;
318
+ if ((_a = this._activeComponentItem) === null || _a === void 0 ? void 0 : _a.focused) {
319
+ this._activeComponentItem.blur();
320
+ }
321
+ super.destroy();
322
+ this.off('resize', this._resizeListener);
323
+ if (this._maximisedEnabled) {
324
+ this.off('maximised', this._maximisedListener);
325
+ this.off('minimised', this._minimisedListener);
326
+ }
327
+ this._header.destroy();
328
+ }
329
+ toConfig() {
330
+ let activeItemIndex;
331
+ if (this._activeComponentItem) {
332
+ activeItemIndex = this.contentItems.indexOf(this._activeComponentItem);
333
+ if (activeItemIndex < 0) {
334
+ throw new Error('active component item not found in stack');
335
+ }
336
+ }
337
+ if (this.contentItems.length > 0 && activeItemIndex === undefined) {
338
+ throw new Error('expected non-empty stack to have an active component item');
339
+ }
340
+ else {
341
+ const result = {
342
+ type: 'stack',
343
+ content: this.calculateConfigContent(),
344
+ size: this.size,
345
+ sizeUnit: this.sizeUnit,
346
+ minSize: this.minSize,
347
+ minSizeUnit: this.minSizeUnit,
348
+ id: this.id,
349
+ isClosable: this.isClosable,
350
+ maximised: this.isMaximised,
351
+ header: this.createHeaderConfig(),
352
+ activeItemIndex,
353
+ };
354
+ return result;
355
+ }
356
+ }
357
+ /**
358
+ * Ok, this one is going to be the tricky one: The user has dropped a {@link (ContentItem:class)} onto this stack.
359
+ *
360
+ * It was dropped on either the stacks header or the top, right, bottom or left bit of the content area
361
+ * (which one of those is stored in this._dropSegment). Now, if the user has dropped on the header the case
362
+ * is relatively clear: We add the item to the existing stack... job done (might be good to have
363
+ * tab reordering at some point, but lets not sweat it right now)
364
+ *
365
+ * If the item was dropped on the content part things are a bit more complicated. If it was dropped on either the
366
+ * top or bottom region we need to create a new column and place the items accordingly.
367
+ * Unless, of course if the stack is already within a column... in which case we want
368
+ * to add the newly created item to the existing column...
369
+ * either prepend or append it, depending on wether its top or bottom.
370
+ *
371
+ * Same thing for rows and left / right drop segments... so in total there are 9 things that can potentially happen
372
+ * (left, top, right, bottom) * is child of the right parent (row, column) + header drop
373
+ *
374
+ * @internal
375
+ */
376
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
377
+ onDrop(contentItem, area) {
378
+ /*
379
+ * The item was dropped on the header area. Just add it as a child of this stack and
380
+ * get the hell out of this logic
381
+ */
382
+ if (this._dropSegment === "header" /* Stack.Segment.Header */) {
383
+ this.resetHeaderDropZone();
384
+ if (this._dropIndex === undefined) {
385
+ throw new internal_error_1.UnexpectedUndefinedError('SODDI68990');
386
+ }
387
+ else {
388
+ this.addChild(contentItem, this._dropIndex);
389
+ return;
390
+ }
391
+ }
392
+ /*
393
+ * The stack is empty. Let's just add the element.
394
+ */
395
+ if (this._dropSegment === "body" /* Stack.Segment.Body */) {
396
+ this.addChild(contentItem, 0, true);
397
+ return;
398
+ }
399
+ /*
400
+ * The item was dropped on the top-, left-, bottom- or right- part of the content. Let's
401
+ * aggregate some conditions to make the if statements later on more readable
402
+ */
403
+ const isVertical = this._dropSegment === "top" /* Stack.Segment.Top */ || this._dropSegment === "bottom" /* Stack.Segment.Bottom */;
404
+ const isHorizontal = this._dropSegment === "left" /* Stack.Segment.Left */ || this._dropSegment === "right" /* Stack.Segment.Right */;
405
+ const insertBefore = this._dropSegment === "top" /* Stack.Segment.Top */ || this._dropSegment === "left" /* Stack.Segment.Left */;
406
+ const hasCorrectParent = (isVertical && this.stackParent.isColumn) || (isHorizontal && this.stackParent.isRow);
407
+ /*
408
+ * The content item can be either a component or a stack. If it is a component, wrap it into a stack
409
+ */
410
+ if (contentItem.isComponent) {
411
+ const itemConfig = resolved_config_1.ResolvedStackItemConfig.createDefault();
412
+ itemConfig.header = this.createHeaderConfig();
413
+ const stack = this.layoutManager.createAndInitContentItem(itemConfig, this);
414
+ stack.addChild(contentItem);
415
+ contentItem = stack;
416
+ }
417
+ /*
418
+ * If the contentItem that's being dropped is not dropped on a Stack (cases which just passed above and
419
+ * which would wrap the contentItem in a Stack) we need to check whether contentItem is a RowOrColumn.
420
+ * If it is, we need to re-wrap it in a Stack like it was when it was dragged by its Tab (it was dragged!).
421
+ */
422
+ if (contentItem.type === types_1.ItemType.row || contentItem.type === types_1.ItemType.column) {
423
+ const itemConfig = resolved_config_1.ResolvedStackItemConfig.createDefault();
424
+ itemConfig.header = this.createHeaderConfig();
425
+ const stack = this.layoutManager.createContentItem(itemConfig, this);
426
+ stack.addChild(contentItem);
427
+ contentItem = stack;
428
+ }
429
+ /*
430
+ * If the item is dropped on top or bottom of a column or left and right of a row, it's already
431
+ * layd out in the correct way. Just add it as a child
432
+ */
433
+ if (hasCorrectParent) {
434
+ const index = this.stackParent.contentItems.indexOf(this);
435
+ this.stackParent.addChild(contentItem, insertBefore ? index : index + 1, true);
436
+ this.size *= 0.5;
437
+ contentItem.size = this.size;
438
+ contentItem.sizeUnit = this.sizeUnit;
439
+ this.stackParent.updateSize(false);
440
+ /*
441
+ * This handles items that are dropped on top or bottom of a row or left / right of a column. We need
442
+ * to create the appropriate contentItem for them to live in
443
+ */
444
+ }
445
+ else {
446
+ const type = isVertical ? types_1.ItemType.column : types_1.ItemType.row;
447
+ const itemConfig = resolved_config_1.ResolvedItemConfig.createDefault(type);
448
+ const rowOrColumn = this.layoutManager.createContentItem(itemConfig, this);
449
+ this.stackParent.replaceChild(this, rowOrColumn);
450
+ rowOrColumn.addChild(contentItem, insertBefore ? 0 : undefined, true);
451
+ rowOrColumn.addChild(this, insertBefore ? undefined : 0, true);
452
+ this.size = 50;
453
+ contentItem.size = 50;
454
+ contentItem.sizeUnit = types_1.SizeUnitEnum.Percent;
455
+ rowOrColumn.updateSize(false);
456
+ }
457
+ }
458
+ /**
459
+ * If the user hovers above the header part of the stack, indicate drop positions for tabs.
460
+ * otherwise indicate which segment of the body the dragged item would be dropped on
461
+ *
462
+ * @param x - Absolute Screen X
463
+ * @param y - Absolute Screen Y
464
+ * @internal
465
+ */
466
+ highlightDropZone(x, y) {
467
+ for (const key in this._contentAreaDimensions) {
468
+ const segment = key;
469
+ const area = this._contentAreaDimensions[segment].hoverArea;
470
+ if (area.x1 < x && area.x2 > x && area.y1 < y && area.y2 > y) {
471
+ if (segment === "header" /* Stack.Segment.Header */) {
472
+ this._dropSegment = "header" /* Stack.Segment.Header */;
473
+ this.highlightHeaderDropZone(this._header.leftRightSided ? y : x);
474
+ }
475
+ else {
476
+ this.resetHeaderDropZone();
477
+ this.highlightBodyDropZone(segment);
478
+ }
479
+ return;
480
+ }
481
+ }
482
+ }
483
+ /** @internal */
484
+ getArea() {
485
+ if (this.element.style.display === 'none') {
486
+ return null;
487
+ }
488
+ const headerArea = super.getElementArea(this._header.element);
489
+ const contentArea = super.getElementArea(this._childElementContainer);
490
+ if (headerArea === null || contentArea === null) {
491
+ throw new internal_error_1.UnexpectedNullError('SGAHC13086');
492
+ }
493
+ const contentWidth = contentArea.x2 - contentArea.x1;
494
+ const contentHeight = contentArea.y2 - contentArea.y1;
495
+ this._contentAreaDimensions = {
496
+ header: {
497
+ hoverArea: {
498
+ x1: headerArea.x1,
499
+ y1: headerArea.y1,
500
+ x2: headerArea.x2,
501
+ y2: headerArea.y2
502
+ },
503
+ highlightArea: {
504
+ x1: headerArea.x1,
505
+ y1: headerArea.y1,
506
+ x2: headerArea.x2,
507
+ y2: headerArea.y2
508
+ }
509
+ }
510
+ };
511
+ /**
512
+ * Highlight the entire body if the stack is empty
513
+ */
514
+ if (this.contentItems.length === 0) {
515
+ this._contentAreaDimensions.body = {
516
+ hoverArea: {
517
+ x1: contentArea.x1,
518
+ y1: contentArea.y1,
519
+ x2: contentArea.x2,
520
+ y2: contentArea.y2
521
+ },
522
+ highlightArea: {
523
+ x1: contentArea.x1,
524
+ y1: contentArea.y1,
525
+ x2: contentArea.x2,
526
+ y2: contentArea.y2
527
+ }
528
+ };
529
+ return super.getElementArea(this.element);
530
+ }
531
+ else {
532
+ this._contentAreaDimensions.left = {
533
+ hoverArea: {
534
+ x1: contentArea.x1,
535
+ y1: contentArea.y1,
536
+ x2: contentArea.x1 + contentWidth * 0.25,
537
+ y2: contentArea.y2
538
+ },
539
+ highlightArea: {
540
+ x1: contentArea.x1,
541
+ y1: contentArea.y1,
542
+ x2: contentArea.x1 + contentWidth * 0.5,
543
+ y2: contentArea.y2
544
+ }
545
+ };
546
+ this._contentAreaDimensions.top = {
547
+ hoverArea: {
548
+ x1: contentArea.x1 + contentWidth * 0.25,
549
+ y1: contentArea.y1,
550
+ x2: contentArea.x1 + contentWidth * 0.75,
551
+ y2: contentArea.y1 + contentHeight * 0.5
552
+ },
553
+ highlightArea: {
554
+ x1: contentArea.x1,
555
+ y1: contentArea.y1,
556
+ x2: contentArea.x2,
557
+ y2: contentArea.y1 + contentHeight * 0.5
558
+ }
559
+ };
560
+ this._contentAreaDimensions.right = {
561
+ hoverArea: {
562
+ x1: contentArea.x1 + contentWidth * 0.75,
563
+ y1: contentArea.y1,
564
+ x2: contentArea.x2,
565
+ y2: contentArea.y2
566
+ },
567
+ highlightArea: {
568
+ x1: contentArea.x1 + contentWidth * 0.5,
569
+ y1: contentArea.y1,
570
+ x2: contentArea.x2,
571
+ y2: contentArea.y2
572
+ }
573
+ };
574
+ this._contentAreaDimensions.bottom = {
575
+ hoverArea: {
576
+ x1: contentArea.x1 + contentWidth * 0.25,
577
+ y1: contentArea.y1 + contentHeight * 0.5,
578
+ x2: contentArea.x1 + contentWidth * 0.75,
579
+ y2: contentArea.y2
580
+ },
581
+ highlightArea: {
582
+ x1: contentArea.x1,
583
+ y1: contentArea.y1 + contentHeight * 0.5,
584
+ x2: contentArea.x2,
585
+ y2: contentArea.y2
586
+ }
587
+ };
588
+ return super.getElementArea(this.element);
589
+ }
590
+ }
591
+ /**
592
+ * Programmatically operate with header position.
593
+ *
594
+ * @param position -
595
+ *
596
+ * @returns previous header position
597
+ * @internal
598
+ */
599
+ positionHeader(position) {
600
+ if (this._header.side !== position) {
601
+ this._header.setSide(position);
602
+ this._headerSideChanged = true;
603
+ this.setupHeaderPosition();
604
+ }
605
+ }
606
+ /** @internal */
607
+ updateNodeSize() {
608
+ if (this.element.style.display !== 'none') {
609
+ const content = (0, utils_1.getElementWidthAndHeight)(this.element);
610
+ if (this._header.show) {
611
+ const dimension = this._header.leftRightSided ? types_1.WidthOrHeightPropertyName.width : types_1.WidthOrHeightPropertyName.height;
612
+ content[dimension] -= this.layoutManager.layoutConfig.dimensions.headerHeight;
613
+ }
614
+ this._childElementContainer.style.width = (0, utils_1.numberToPixels)(content.width);
615
+ this._childElementContainer.style.height = (0, utils_1.numberToPixels)(content.height);
616
+ for (let i = 0; i < this.contentItems.length; i++) {
617
+ this.contentItems[i].element.style.width = (0, utils_1.numberToPixels)(content.width);
618
+ this.contentItems[i].element.style.height = (0, utils_1.numberToPixels)(content.height);
619
+ }
620
+ this.emit('resize');
621
+ this.emitStateChangedEvent();
622
+ }
623
+ }
624
+ /** @internal */
625
+ highlightHeaderDropZone(x) {
626
+ const visibleTabsLength = this._header.lastVisibleTabIndex + 1;
627
+ const tabsContainerElement = this._header.tabsContainerElement;
628
+ const tabsContainerElementChildNodes = tabsContainerElement.childNodes;
629
+ // Create shallow copy of childNodes list, excluding DropPlaceHolder, as we will be modifying the childNodes list
630
+ const visibleTabElements = new Array(visibleTabsLength);
631
+ let tabIndex = 0;
632
+ let tabCount = 0;
633
+ while (tabCount < visibleTabsLength) {
634
+ const visibleTabElement = tabsContainerElementChildNodes[tabIndex++];
635
+ if (visibleTabElement !== this.layoutManager.tabDropPlaceholder) {
636
+ visibleTabElements[tabCount++] = visibleTabElement;
637
+ }
638
+ }
639
+ const dropTargetIndicator = this.layoutManager.dropTargetIndicator;
640
+ if (dropTargetIndicator === null) {
641
+ throw new internal_error_1.UnexpectedNullError('SHHDZDTI97110');
642
+ }
643
+ let area;
644
+ // Empty stack
645
+ if (visibleTabsLength === 0) {
646
+ const headerRect = this._header.element.getBoundingClientRect();
647
+ const headerTop = headerRect.top + document.body.scrollTop;
648
+ const headerLeft = headerRect.left + document.body.scrollLeft;
649
+ area = {
650
+ x1: headerLeft,
651
+ x2: headerLeft + 100,
652
+ y1: headerTop + headerRect.height - 20,
653
+ y2: headerTop + headerRect.height,
654
+ };
655
+ this._dropIndex = 0;
656
+ }
657
+ else {
658
+ let tabIndex = 0;
659
+ // This indicates whether our cursor is exactly over a tab
660
+ let isAboveTab = false;
661
+ let tabTop;
662
+ let tabLeft;
663
+ let tabWidth;
664
+ let tabElement;
665
+ do {
666
+ tabElement = visibleTabElements[tabIndex];
667
+ const tabRect = tabElement.getBoundingClientRect();
668
+ const tabRectTop = tabRect.top + document.body.scrollTop;
669
+ const tabRectLeft = tabRect.left + document.body.scrollLeft;
670
+ if (this._header.leftRightSided) {
671
+ tabLeft = tabRectTop;
672
+ tabTop = tabRectLeft;
673
+ tabWidth = tabRect.height;
674
+ }
675
+ else {
676
+ tabLeft = tabRectLeft;
677
+ tabTop = tabRectTop;
678
+ tabWidth = tabRect.width;
679
+ }
680
+ if (x >= tabLeft && x < tabLeft + tabWidth) {
681
+ isAboveTab = true;
682
+ }
683
+ else {
684
+ tabIndex++;
685
+ }
686
+ } while (tabIndex < visibleTabsLength && !isAboveTab);
687
+ // If we're not above any tabs, or to the right of any tab, we are out of the area, so give up
688
+ if (isAboveTab === false && x < tabLeft) {
689
+ return;
690
+ }
691
+ const halfX = tabLeft + tabWidth / 2;
692
+ if (x < halfX) {
693
+ this._dropIndex = tabIndex;
694
+ tabElement.insertAdjacentElement('beforebegin', this.layoutManager.tabDropPlaceholder);
695
+ }
696
+ else {
697
+ this._dropIndex = Math.min(tabIndex + 1, visibleTabsLength);
698
+ tabElement.insertAdjacentElement('afterend', this.layoutManager.tabDropPlaceholder);
699
+ }
700
+ const tabDropPlaceholderRect = this.layoutManager.tabDropPlaceholder.getBoundingClientRect();
701
+ const tabDropPlaceholderRectTop = tabDropPlaceholderRect.top + document.body.scrollTop;
702
+ const tabDropPlaceholderRectLeft = tabDropPlaceholderRect.left + document.body.scrollLeft;
703
+ const tabDropPlaceholderRectWidth = tabDropPlaceholderRect.width;
704
+ if (this._header.leftRightSided) {
705
+ const placeHolderTop = tabDropPlaceholderRectTop;
706
+ area = {
707
+ x1: tabTop,
708
+ x2: tabTop + tabElement.clientHeight,
709
+ y1: placeHolderTop,
710
+ y2: placeHolderTop + tabDropPlaceholderRectWidth,
711
+ };
712
+ }
713
+ else {
714
+ const placeHolderLeft = tabDropPlaceholderRectLeft;
715
+ area = {
716
+ x1: placeHolderLeft,
717
+ x2: placeHolderLeft + tabDropPlaceholderRectWidth,
718
+ y1: tabTop,
719
+ y2: tabTop + tabElement.clientHeight,
720
+ };
721
+ }
722
+ }
723
+ dropTargetIndicator.highlightArea(area, 0);
724
+ return;
725
+ }
726
+ /** @internal */
727
+ resetHeaderDropZone() {
728
+ this.layoutManager.tabDropPlaceholder.remove();
729
+ }
730
+ /** @internal */
731
+ setupHeaderPosition() {
732
+ (0, utils_1.setElementDisplayVisibility)(this._header.element, this._header.show);
733
+ this.element.classList.remove("lm_left" /* DomConstants.ClassName.Left */, "lm_right" /* DomConstants.ClassName.Right */, "lm_bottom" /* DomConstants.ClassName.Bottom */);
734
+ if (this._header.leftRightSided) {
735
+ this.element.classList.add('lm_' + this._header.side);
736
+ }
737
+ //if ([Side.right, Side.bottom].includes(this._header.side)) {
738
+ // // move the header behind the content.
739
+ // this.element.appendChild(this._header.element);
740
+ //}
741
+ this.updateSize(false);
742
+ }
743
+ /** @internal */
744
+ highlightBodyDropZone(segment) {
745
+ if (this._contentAreaDimensions === undefined) {
746
+ throw new internal_error_1.UnexpectedUndefinedError('SHBDZC82265');
747
+ }
748
+ else {
749
+ const highlightArea = this._contentAreaDimensions[segment].highlightArea;
750
+ const dropTargetIndicator = this.layoutManager.dropTargetIndicator;
751
+ if (dropTargetIndicator === null) {
752
+ throw new internal_error_1.UnexpectedNullError('SHBDZD96110');
753
+ }
754
+ else {
755
+ dropTargetIndicator.highlightArea(highlightArea, 1);
756
+ this._dropSegment = segment;
757
+ }
758
+ }
759
+ }
760
+ /** @internal */
761
+ handleResize() {
762
+ this._header.updateTabSizes();
763
+ }
764
+ /** @internal */
765
+ handleMaximised() {
766
+ this._header.processMaximised();
767
+ }
768
+ /** @internal */
769
+ handleMinimised() {
770
+ this._header.processMinimised();
771
+ }
772
+ /** @internal */
773
+ handlePopoutEvent() {
774
+ this.popout();
775
+ }
776
+ /** @internal */
777
+ handleHeaderClickEvent(ev) {
778
+ const eventName = event_emitter_1.EventEmitter.headerClickEventName;
779
+ const bubblingEvent = new event_emitter_1.EventEmitter.ClickBubblingEvent(eventName, this, ev);
780
+ this.emit(eventName, bubblingEvent);
781
+ }
782
+ /** @internal */
783
+ handleHeaderTouchStartEvent(ev) {
784
+ const eventName = event_emitter_1.EventEmitter.headerTouchStartEventName;
785
+ const bubblingEvent = new event_emitter_1.EventEmitter.TouchStartBubblingEvent(eventName, this, ev);
786
+ this.emit(eventName, bubblingEvent);
787
+ }
788
+ /** @internal */
789
+ handleHeaderComponentRemoveEvent(item) {
790
+ this.removeChild(item, false);
791
+ }
792
+ /** @internal */
793
+ handleHeaderComponentFocusEvent(item) {
794
+ this.setActiveComponentItem(item, true);
795
+ }
796
+ /** @internal */
797
+ handleHeaderComponentStartDragEvent(x, y, dragListener, componentItem) {
798
+ if (this.isMaximised === true) {
799
+ this.toggleMaximise();
800
+ }
801
+ this.layoutManager.startComponentDrag(x, y, dragListener, componentItem, this);
802
+ }
803
+ /** @internal */
804
+ createHeaderConfig() {
805
+ if (!this._headerSideChanged) {
806
+ return resolved_config_1.ResolvedHeaderedItemConfig.Header.createCopy(this._headerConfig);
807
+ }
808
+ else {
809
+ const show = this._header.show ? this._header.side : false;
810
+ let result = resolved_config_1.ResolvedHeaderedItemConfig.Header.createCopy(this._headerConfig, show);
811
+ if (result === undefined) {
812
+ result = {
813
+ show,
814
+ popout: undefined,
815
+ maximise: undefined,
816
+ close: undefined,
817
+ minimise: undefined,
818
+ tabDropdown: undefined,
819
+ };
820
+ }
821
+ return result;
822
+ }
823
+ }
824
+ /** @internal */
825
+ emitStateChangedEvent() {
826
+ this.emitBaseBubblingEvent('stateChanged');
827
+ }
828
+ }
829
+ exports.Stack = Stack;
830
+ /** @public */
831
+ (function (Stack) {
832
+ /** @internal */
833
+ function createElement(document) {
834
+ const element = document.createElement('div');
835
+ element.classList.add("lm_item" /* DomConstants.ClassName.Item */);
836
+ element.classList.add("lm_stack" /* DomConstants.ClassName.Stack */);
837
+ return element;
838
+ }
839
+ Stack.createElement = createElement;
840
+ })(Stack = exports.Stack || (exports.Stack = {}));
841
+ //# sourceMappingURL=stack.js.map