igniteui-webcomponents 5.2.0 → 5.3.0-alpha.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 (132) hide show
  1. package/components/carousel/carousel-indicator.js +1 -1
  2. package/components/carousel/carousel-indicator.js.map +1 -1
  3. package/components/carousel/carousel-slide.js +1 -1
  4. package/components/carousel/carousel-slide.js.map +1 -1
  5. package/components/carousel/carousel.js +1 -1
  6. package/components/carousel/carousel.js.map +1 -1
  7. package/components/common/context.d.ts +22 -0
  8. package/components/common/context.js +6 -0
  9. package/components/common/context.js.map +1 -0
  10. package/components/common/util.d.ts +1 -0
  11. package/components/common/util.js +8 -0
  12. package/components/common/util.js.map +1 -1
  13. package/components/icon/icon-references.js +46 -0
  14. package/components/icon/icon-references.js.map +1 -1
  15. package/components/icon/internal-icons-lib.js +47 -0
  16. package/components/icon/internal-icons-lib.js.map +1 -1
  17. package/components/tile-manager/controllers/fullscreen.d.ts +15 -0
  18. package/components/tile-manager/controllers/fullscreen.js +43 -0
  19. package/components/tile-manager/controllers/fullscreen.js.map +1 -0
  20. package/components/tile-manager/controllers/tile-dnd.d.ts +24 -0
  21. package/components/tile-manager/controllers/tile-dnd.js +46 -0
  22. package/components/tile-manager/controllers/tile-dnd.js.map +1 -0
  23. package/components/tile-manager/position.d.ts +20 -0
  24. package/components/tile-manager/position.js +61 -0
  25. package/components/tile-manager/position.js.map +1 -0
  26. package/components/tile-manager/resize-controller.d.ts +52 -0
  27. package/components/tile-manager/resize-controller.js +157 -0
  28. package/components/tile-manager/resize-controller.js.map +1 -0
  29. package/components/tile-manager/resize-element.d.ts +41 -0
  30. package/components/tile-manager/resize-element.js +107 -0
  31. package/components/tile-manager/resize-element.js.map +1 -0
  32. package/components/tile-manager/serializer.d.ts +24 -0
  33. package/components/tile-manager/serializer.js +52 -0
  34. package/components/tile-manager/serializer.js.map +1 -0
  35. package/components/tile-manager/themes/container.d.ts +2 -0
  36. package/components/tile-manager/themes/container.js +47 -0
  37. package/components/tile-manager/themes/container.js.map +1 -0
  38. package/components/tile-manager/themes/dark/tile-manager.bootstrap.css.d.ts +1 -0
  39. package/components/tile-manager/themes/dark/tile-manager.bootstrap.css.js +3 -0
  40. package/components/tile-manager/themes/dark/tile-manager.bootstrap.css.js.map +1 -0
  41. package/components/tile-manager/themes/dark/tile-manager.fluent.css.d.ts +1 -0
  42. package/components/tile-manager/themes/dark/tile-manager.fluent.css.js +3 -0
  43. package/components/tile-manager/themes/dark/tile-manager.fluent.css.js.map +1 -0
  44. package/components/tile-manager/themes/dark/tile-manager.indigo.css.d.ts +1 -0
  45. package/components/tile-manager/themes/dark/tile-manager.indigo.css.js +3 -0
  46. package/components/tile-manager/themes/dark/tile-manager.indigo.css.js.map +1 -0
  47. package/components/tile-manager/themes/dark/tile-manager.material.css.d.ts +1 -0
  48. package/components/tile-manager/themes/dark/tile-manager.material.css.js +3 -0
  49. package/components/tile-manager/themes/dark/tile-manager.material.css.js.map +1 -0
  50. package/components/tile-manager/themes/dark/tile-manager.shared.css.d.ts +1 -0
  51. package/components/tile-manager/themes/dark/tile-manager.shared.css.js +3 -0
  52. package/components/tile-manager/themes/dark/tile-manager.shared.css.js.map +1 -0
  53. package/components/tile-manager/themes/header.d.ts +2 -0
  54. package/components/tile-manager/themes/header.js +28 -0
  55. package/components/tile-manager/themes/header.js.map +1 -0
  56. package/components/tile-manager/themes/light/tile-manager.bootstrap.css.d.ts +1 -0
  57. package/components/tile-manager/themes/light/tile-manager.bootstrap.css.js +3 -0
  58. package/components/tile-manager/themes/light/tile-manager.bootstrap.css.js.map +1 -0
  59. package/components/tile-manager/themes/light/tile-manager.fluent.css.d.ts +1 -0
  60. package/components/tile-manager/themes/light/tile-manager.fluent.css.js +3 -0
  61. package/components/tile-manager/themes/light/tile-manager.fluent.css.js.map +1 -0
  62. package/components/tile-manager/themes/light/tile-manager.indigo.css.d.ts +1 -0
  63. package/components/tile-manager/themes/light/tile-manager.indigo.css.js +3 -0
  64. package/components/tile-manager/themes/light/tile-manager.indigo.css.js.map +1 -0
  65. package/components/tile-manager/themes/light/tile-manager.material.css.d.ts +1 -0
  66. package/components/tile-manager/themes/light/tile-manager.material.css.js +3 -0
  67. package/components/tile-manager/themes/light/tile-manager.material.css.js.map +1 -0
  68. package/components/tile-manager/themes/light/tile-manager.shared.css.d.ts +1 -0
  69. package/components/tile-manager/themes/light/tile-manager.shared.css.js +3 -0
  70. package/components/tile-manager/themes/light/tile-manager.shared.css.js.map +1 -0
  71. package/components/tile-manager/themes/resize.base.css.d.ts +1 -0
  72. package/components/tile-manager/themes/resize.base.css.js +3 -0
  73. package/components/tile-manager/themes/resize.base.css.js.map +1 -0
  74. package/components/tile-manager/themes/shared/header/tile-header.bootstrap.css.d.ts +1 -0
  75. package/components/tile-manager/themes/shared/header/tile-header.bootstrap.css.js +3 -0
  76. package/components/tile-manager/themes/shared/header/tile-header.bootstrap.css.js.map +1 -0
  77. package/components/tile-manager/themes/shared/header/tile-header.common.css.d.ts +1 -0
  78. package/components/tile-manager/themes/shared/header/tile-header.common.css.js +3 -0
  79. package/components/tile-manager/themes/shared/header/tile-header.common.css.js.map +1 -0
  80. package/components/tile-manager/themes/shared/header/tile-header.fluent.css.d.ts +1 -0
  81. package/components/tile-manager/themes/shared/header/tile-header.fluent.css.js +3 -0
  82. package/components/tile-manager/themes/shared/header/tile-header.fluent.css.js.map +1 -0
  83. package/components/tile-manager/themes/shared/header/tile-header.indigo.css.d.ts +1 -0
  84. package/components/tile-manager/themes/shared/header/tile-header.indigo.css.js +3 -0
  85. package/components/tile-manager/themes/shared/header/tile-header.indigo.css.js.map +1 -0
  86. package/components/tile-manager/themes/shared/resize.common.css.d.ts +1 -0
  87. package/components/tile-manager/themes/shared/resize.common.css.js +3 -0
  88. package/components/tile-manager/themes/shared/resize.common.css.js.map +1 -0
  89. package/components/tile-manager/themes/shared/tile/tile.common.css.d.ts +1 -0
  90. package/components/tile-manager/themes/shared/tile/tile.common.css.js +3 -0
  91. package/components/tile-manager/themes/shared/tile/tile.common.css.js.map +1 -0
  92. package/components/tile-manager/themes/shared/tile/tile.indigo.css.d.ts +1 -0
  93. package/components/tile-manager/themes/shared/tile/tile.indigo.css.js +3 -0
  94. package/components/tile-manager/themes/shared/tile/tile.indigo.css.js.map +1 -0
  95. package/components/tile-manager/themes/shared/tile-manager.common.css.d.ts +1 -0
  96. package/components/tile-manager/themes/shared/tile-manager.common.css.js +3 -0
  97. package/components/tile-manager/themes/shared/tile-manager.common.css.js.map +1 -0
  98. package/components/tile-manager/themes/tile-header.base.css.d.ts +1 -0
  99. package/components/tile-manager/themes/tile-header.base.css.js +3 -0
  100. package/components/tile-manager/themes/tile-header.base.css.js.map +1 -0
  101. package/components/tile-manager/themes/tile-manager.base.css.d.ts +1 -0
  102. package/components/tile-manager/themes/tile-manager.base.css.js +3 -0
  103. package/components/tile-manager/themes/tile-manager.base.css.js.map +1 -0
  104. package/components/tile-manager/themes/tile.base.css.d.ts +1 -0
  105. package/components/tile-manager/themes/tile.base.css.js +3 -0
  106. package/components/tile-manager/themes/tile.base.css.js.map +1 -0
  107. package/components/tile-manager/themes/tile.d.ts +2 -0
  108. package/components/tile-manager/themes/tile.js +14 -0
  109. package/components/tile-manager/themes/tile.js.map +1 -0
  110. package/components/tile-manager/tile-header.d.ts +34 -0
  111. package/components/tile-manager/tile-header.js +106 -0
  112. package/components/tile-manager/tile-header.js.map +1 -0
  113. package/components/tile-manager/tile-manager.d.ts +83 -0
  114. package/components/tile-manager/tile-manager.js +188 -0
  115. package/components/tile-manager/tile-manager.js.map +1 -0
  116. package/components/tile-manager/tile-util.d.ts +6 -0
  117. package/components/tile-manager/tile-util.js +70 -0
  118. package/components/tile-manager/tile-util.js.map +1 -0
  119. package/components/tile-manager/tile.d.ts +128 -0
  120. package/components/tile-manager/tile.js +467 -0
  121. package/components/tile-manager/tile.js.map +1 -0
  122. package/custom-elements.json +5623 -3417
  123. package/igniteui-webcomponents.css-data.json +1 -1
  124. package/igniteui-webcomponents.html-data.json +1 -1
  125. package/index.d.ts +3 -0
  126. package/index.js +3 -0
  127. package/index.js.map +1 -1
  128. package/package.json +1 -1
  129. package/web-types.json +2 -2
  130. package/components/carousel/context.d.ts +0 -4
  131. package/components/carousel/context.js +0 -3
  132. package/components/carousel/context.js.map +0 -1
@@ -0,0 +1,467 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var IgcTileComponent_1;
8
+ import { ContextProvider, consume } from '@lit/context';
9
+ import { LitElement, html } from 'lit';
10
+ import { property, query, state } from 'lit/decorators.js';
11
+ import { styleMap } from 'lit/directives/style-map.js';
12
+ import { themes } from '../../theming/theming-decorator.js';
13
+ import { tileContext, tileManagerContext, } from '../common/context.js';
14
+ import { registerComponent } from '../common/definitions/register.js';
15
+ import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
16
+ import { asNumber, createCounter, partNameMap } from '../common/util.js';
17
+ import { addFullscreenController } from './controllers/fullscreen.js';
18
+ import { addTileDragAndDrop } from './controllers/tile-dnd.js';
19
+ import { isSameTile, swapTiles } from './position.js';
20
+ import IgcResizeComponent from './resize-element.js';
21
+ import { styles as shared } from './themes/shared/tile/tile.common.css.js';
22
+ import { styles } from './themes/tile.base.css.js';
23
+ import { all } from './themes/tile.js';
24
+ import IgcTileHeaderComponent from './tile-header.js';
25
+ import { ResizeUtil } from './tile-util.js';
26
+ let IgcTileComponent = IgcTileComponent_1 = class IgcTileComponent extends EventEmitterMixin(LitElement) {
27
+ static register() {
28
+ registerComponent(IgcTileComponent_1, IgcTileHeaderComponent, IgcResizeComponent);
29
+ }
30
+ _setTileContext() {
31
+ this._context.setValue({
32
+ instance: this,
33
+ setFullscreenState: (fullscreen, isUserTriggered) => this._fullscreenController.setState(fullscreen, isUserTriggered),
34
+ }, true);
35
+ }
36
+ get _draggedItem() {
37
+ return this._managerContext?.draggedItem ?? null;
38
+ }
39
+ get _isSlideMode() {
40
+ return this._managerContext
41
+ ? this._managerContext.instance.dragMode === 'slide'
42
+ : true;
43
+ }
44
+ set colSpan(value) {
45
+ this._colSpan = Math.max(1, asNumber(value));
46
+ this.style.setProperty('--ig-col-span', this._colSpan.toString());
47
+ }
48
+ get colSpan() {
49
+ return this._colSpan;
50
+ }
51
+ set rowSpan(value) {
52
+ this._rowSpan = Math.max(1, asNumber(value));
53
+ this.style.setProperty('--ig-row-span', this._rowSpan.toString());
54
+ }
55
+ get rowSpan() {
56
+ return this._rowSpan;
57
+ }
58
+ set colStart(value) {
59
+ this._colStart = Math.max(0, asNumber(value)) || null;
60
+ this.style.setProperty('--ig-col-start', this._colStart ? this._colStart.toString() : null);
61
+ }
62
+ get colStart() {
63
+ return this._colStart;
64
+ }
65
+ set rowStart(value) {
66
+ this._rowStart = Math.max(0, asNumber(value)) || null;
67
+ this.style.setProperty('--ig-row-start', this._rowStart ? this._rowStart.toString() : null);
68
+ }
69
+ get rowStart() {
70
+ return this._rowStart;
71
+ }
72
+ set fullscreen(value) {
73
+ this._fullscreenController.setState(value);
74
+ }
75
+ get fullscreen() {
76
+ return this._fullscreenController.fullscreen;
77
+ }
78
+ set maximized(value) {
79
+ this._maximized = value;
80
+ this._setTileContext();
81
+ if (this._managerContext) {
82
+ this._managerContext.instance.requestUpdate();
83
+ }
84
+ }
85
+ get maximized() {
86
+ return this._maximized;
87
+ }
88
+ set disableDrag(value) {
89
+ this._disableDrag = value;
90
+ this._dragController.enabled = !this._disableDrag;
91
+ }
92
+ get disableDrag() {
93
+ return this._disableDrag;
94
+ }
95
+ set position(value) {
96
+ this._position = Number(value);
97
+ this.style.order = `${this._position}`;
98
+ }
99
+ get position() {
100
+ return this._position;
101
+ }
102
+ get gridColumnWidth() {
103
+ const tileManager = this._managerContext.instance.shadowRoot.querySelector("[part~='base']");
104
+ const gridTemplateColumns = getComputedStyle(tileManager).getPropertyValue('grid-template-columns');
105
+ const firstColumnWidth = Number.parseFloat(gridTemplateColumns.split(' ')[0]);
106
+ return firstColumnWidth || this._cachedStyles.minWidth;
107
+ }
108
+ constructor() {
109
+ super();
110
+ this._dragController = addTileDragAndDrop(this, {
111
+ dragStart: this.handleDragStart,
112
+ dragEnd: this.handleDragEnd,
113
+ dragEnter: this.handleDragEnter,
114
+ dragLeave: this.handleDragLeave,
115
+ dragOver: this.handleDragOver,
116
+ drop: this.handleDragLeave,
117
+ });
118
+ this._fullscreenController = addFullscreenController(this, this.emitFullScreenEvent);
119
+ this._colSpan = 1;
120
+ this._rowSpan = 1;
121
+ this._colStart = null;
122
+ this._rowStart = null;
123
+ this._position = -1;
124
+ this._disableDrag = false;
125
+ this._maximized = false;
126
+ this._initialPointerX = null;
127
+ this._initialPointerY = null;
128
+ this._dragCounter = 0;
129
+ this._dragGhost = null;
130
+ this._dragImage = null;
131
+ this._cachedStyles = {};
132
+ this._context = new ContextProvider(this, {
133
+ context: tileContext,
134
+ initialValue: {
135
+ instance: this,
136
+ setFullscreenState: (fullscreen, isUserTriggered) => this._fullscreenController.setState(fullscreen, isUserTriggered),
137
+ },
138
+ });
139
+ this._isDragging = false;
140
+ this._hasDragOver = false;
141
+ this._isResizing = false;
142
+ this.tileId = null;
143
+ this.disableResize = false;
144
+ this.ghostFactory = () => {
145
+ this.cacheStyles();
146
+ const ghost = document.createElement('div');
147
+ Object.assign(ghost.style, {
148
+ position: 'absolute',
149
+ top: 0,
150
+ left: 0,
151
+ zIndex: 1000,
152
+ background: this._cachedStyles.background,
153
+ border: `1px solid ${this._cachedStyles.border}`,
154
+ borderRadius: this._cachedStyles.borderRadius,
155
+ width: '100%',
156
+ height: '100%',
157
+ gridRow: '',
158
+ gridColumn: '',
159
+ });
160
+ return ghost;
161
+ };
162
+ this._setTileContext();
163
+ }
164
+ connectedCallback() {
165
+ super.connectedCallback();
166
+ this.tileId = this.tileId || `tile-${IgcTileComponent_1.increment()}`;
167
+ }
168
+ updated(changedProperties) {
169
+ super.updated(changedProperties);
170
+ const parts = partNameMap({
171
+ dragging: this._isDragging,
172
+ resizing: this._isResizing,
173
+ });
174
+ if (parts.trim()) {
175
+ this.setAttribute('part', parts);
176
+ }
177
+ else {
178
+ this.removeAttribute('part');
179
+ }
180
+ }
181
+ emitFullScreenEvent(state) {
182
+ return this.emitEvent('igcTileFullscreen', {
183
+ detail: { tile: this, state },
184
+ cancelable: true,
185
+ });
186
+ }
187
+ assignDragImage(e) {
188
+ const rect = this.getBoundingClientRect();
189
+ const offsetX = e.clientX - rect.left;
190
+ const offsetY = e.clientY - rect.top;
191
+ const compStyles = getComputedStyle(this);
192
+ this.cacheStyles();
193
+ this._dragImage = this.cloneNode(true);
194
+ Object.assign(this._dragImage.style, {
195
+ width: compStyles.width,
196
+ height: compStyles.height,
197
+ position: 'absolute',
198
+ top: '-99999px',
199
+ left: '-99999px',
200
+ background: this._cachedStyles.tileBackground,
201
+ border: `1px solid ${this._cachedStyles.tileBorder}`,
202
+ borderRadius: this._cachedStyles.borderRadius,
203
+ overflow: 'hidden',
204
+ });
205
+ document.body.append(this._dragImage);
206
+ e.dataTransfer.setDragImage(this._dragImage, offsetX, offsetY);
207
+ e.dataTransfer.effectAllowed = 'move';
208
+ }
209
+ handleDragStart(e) {
210
+ this.assignDragImage(e);
211
+ this.emitEvent('tileDragStart', { detail: this });
212
+ this._dragGhost = this.ghostFactory();
213
+ this._dragGhost.inert = true;
214
+ if (this._dragGhost) {
215
+ this.append(this._dragGhost);
216
+ }
217
+ this._isDragging = true;
218
+ }
219
+ handleDragEnter() {
220
+ this._dragCounter++;
221
+ this._hasDragOver = true;
222
+ }
223
+ handleDragOver(event) {
224
+ if (!this._draggedItem) {
225
+ return;
226
+ }
227
+ if (isSameTile(this, this._draggedItem)) {
228
+ this._tileContent.style.visibility = 'hidden';
229
+ if (this._dragGhost) {
230
+ Object.assign(this._dragGhost.style, {
231
+ visibility: 'visible',
232
+ });
233
+ }
234
+ if (this._managerContext) {
235
+ this._managerContext.lastSwapTile = null;
236
+ }
237
+ }
238
+ else if (this._isSlideMode) {
239
+ if (this._managerContext &&
240
+ (!this._managerContext.lastSwapTile ||
241
+ this.hasPointerLeftLastSwapTile(event, this._managerContext.lastSwapTile))) {
242
+ this._managerContext.lastSwapTile = this;
243
+ swapTiles(this, this._draggedItem);
244
+ }
245
+ }
246
+ }
247
+ handleDragLeave() {
248
+ this._dragCounter--;
249
+ if (this._dragCounter === 0) {
250
+ this._hasDragOver = false;
251
+ }
252
+ }
253
+ handleDragEnd() {
254
+ this.emitEvent('tileDragEnd', { detail: this });
255
+ this._isDragging = false;
256
+ if (this._dragGhost) {
257
+ this._dragGhost.remove();
258
+ this._dragGhost = null;
259
+ }
260
+ if (this._dragImage) {
261
+ this._dragImage.remove();
262
+ this._dragImage = null;
263
+ }
264
+ this._tileContent.style.visibility = 'visible';
265
+ }
266
+ hasPointerLeftLastSwapTile(event, lastSwapTile) {
267
+ if (!lastSwapTile)
268
+ return false;
269
+ const rect = lastSwapTile.getBoundingClientRect();
270
+ const pointerX = event.clientX;
271
+ const pointerY = event.clientY;
272
+ const outsideBoundaries = pointerX < rect.left ||
273
+ pointerX > rect.right ||
274
+ pointerY < rect.top ||
275
+ pointerY > rect.bottom;
276
+ if (outsideBoundaries && this._managerContext) {
277
+ this._managerContext.lastSwapTile = null;
278
+ }
279
+ return outsideBoundaries;
280
+ }
281
+ cacheStyles() {
282
+ const tileComputedStyle = getComputedStyle(this);
283
+ const parentWrapper = this.parentElement.shadowRoot.querySelector('[part="base"]');
284
+ const tileManagerComputedStyle = getComputedStyle(parentWrapper);
285
+ const gap = Number.parseFloat(tileManagerComputedStyle.getPropertyValue('grid-gap')) || 0;
286
+ const rowHeights = tileManagerComputedStyle.gridTemplateRows
287
+ .split(' ')
288
+ .map((height) => Number.parseFloat(height.trim()));
289
+ this._cachedStyles = {
290
+ columnCount: Number.parseFloat(tileComputedStyle.getPropertyValue('--ig-column-count')),
291
+ background: tileComputedStyle.getPropertyValue('--placeholder-background'),
292
+ tileBackground: tileComputedStyle.getPropertyValue('--tile-background'),
293
+ tileBorder: tileComputedStyle.getPropertyValue('--hover-border-color'),
294
+ border: tileComputedStyle.getPropertyValue('--ghost-border'),
295
+ borderRadius: tileComputedStyle.getPropertyValue('--border-radius'),
296
+ minWidth: Number.parseFloat(tileComputedStyle.getPropertyValue('--ig-min-col-width')),
297
+ minHeight: Number.parseFloat(tileComputedStyle.getPropertyValue('--ig-min-row-height')),
298
+ initialTop: parentWrapper.getBoundingClientRect().top,
299
+ rowHeights,
300
+ gap,
301
+ };
302
+ }
303
+ _handleResizeStart(event) {
304
+ const ghostElement = event.detail.state.ghost;
305
+ this._initialPointerX = event.detail.event.clientX;
306
+ this._initialPointerY = event.detail.event.clientY;
307
+ if (ghostElement) {
308
+ ghostElement.style.minWidth = `${this._cachedStyles.minWidth}px`;
309
+ ghostElement.style.minHeight = `${this._cachedStyles.minHeight}px`;
310
+ }
311
+ }
312
+ _handleResize(event) {
313
+ this._isResizing = true;
314
+ const ghostElement = event.detail.state.current;
315
+ const rowHeights = this._cachedStyles.rowHeights;
316
+ if (ghostElement) {
317
+ const deltaX = event.detail.event.clientX - this._initialPointerX;
318
+ const deltaY = event.detail.event.clientY - this._initialPointerY;
319
+ const snappedWidth = ResizeUtil.calculateSnappedWidth(deltaX, event.detail.state.initial.width, this._cachedStyles.gap, this.gridColumnWidth);
320
+ const actualTop = this._cachedStyles.initialTop + window.scrollY;
321
+ const initialTop = event.detail.state.initial.top + window.scrollY;
322
+ const actualBottom = event.detail.state.initial.bottom + window.scrollY;
323
+ const startingY = actualBottom - actualTop;
324
+ const snappedHeight = ResizeUtil.calculateSnappedHeight(deltaY, startingY, rowHeights, this._cachedStyles.gap, initialTop, event.detail.state.initial.height);
325
+ ghostElement.width = snappedWidth;
326
+ ghostElement.height = snappedHeight;
327
+ }
328
+ }
329
+ _handleResizeEnd(event) {
330
+ const state = event.detail.state;
331
+ const width = state.current.width;
332
+ const height = state.current.height;
333
+ const colSpan = Math.max(1, Math.round(width / this.gridColumnWidth));
334
+ const initialTop = event.detail.state.initial.top + window.scrollY;
335
+ const startRowIndex = ResizeUtil.calculate(initialTop, this._cachedStyles.rowHeights, this._cachedStyles.gap).targetIndex;
336
+ const initialSpan = this._calculateRowSpan(state.initial.height, startRowIndex);
337
+ const currentSpan = this._calculateRowSpan(height, startRowIndex);
338
+ const deltaY = event.detail.event.clientY - this._initialPointerY;
339
+ const rowSpan = deltaY > 0
340
+ ? Math.max(initialSpan, currentSpan)
341
+ : Math.min(initialSpan, currentSpan);
342
+ Object.assign(state.ghost.style, {
343
+ width: '',
344
+ height: '',
345
+ });
346
+ this.style.setProperty('grid-row', `span ${rowSpan}`);
347
+ this.style.setProperty('grid-column', `span ${colSpan}`);
348
+ this._isResizing = false;
349
+ this._initialPointerX = null;
350
+ this._initialPointerY = null;
351
+ this._cachedStyles = {};
352
+ }
353
+ _calculateRowSpan(height, startRowIndex) {
354
+ const gap = this._cachedStyles.gap;
355
+ const rowHeights = this._cachedStyles.rowHeights;
356
+ let accumulatedHeight = 0;
357
+ for (let i = 0; i < rowHeights.length; i++) {
358
+ const rowHeight = rowHeights[startRowIndex + i];
359
+ const rowGap = startRowIndex + i > 0 ? gap : 0;
360
+ const halfwayThreshold = accumulatedHeight + rowHeight / 2 + rowGap;
361
+ accumulatedHeight += rowHeight + rowGap;
362
+ if (height >= halfwayThreshold && height <= accumulatedHeight) {
363
+ return i + 1;
364
+ }
365
+ }
366
+ return 1;
367
+ }
368
+ renderContent() {
369
+ const parts = partNameMap({
370
+ base: true,
371
+ 'drag-over': this._hasDragOver && !this._isSlideMode,
372
+ fullscreen: this.fullscreen,
373
+ draggable: !this.disableDrag,
374
+ dragging: this._isDragging,
375
+ resizable: !this.disableResize,
376
+ resizing: this._isResizing,
377
+ maximized: this.maximized,
378
+ });
379
+ const styles = {
380
+ '--ig-col-span': this._colSpan,
381
+ '--ig-row-span': this._rowSpan,
382
+ '--ig-col-start': this._colStart,
383
+ '--ig-row-start': this._rowStart,
384
+ };
385
+ return html `
386
+ <div part=${parts} .inert=${this._hasDragOver} style=${styleMap(styles)}>
387
+ <slot name="header"></slot>
388
+ <div part="content-container">
389
+ <slot></slot>
390
+ </div>
391
+ </div>
392
+ `;
393
+ }
394
+ render() {
395
+ const renderResize = this.disableResize || this.maximized || this.fullscreen;
396
+ return renderResize
397
+ ? this.renderContent()
398
+ : html `
399
+ <igc-resize
400
+ part="resize"
401
+ .ghostFactory=${this.ghostFactory}
402
+ mode="deferred"
403
+ @igcResizeStart=${this._handleResizeStart}
404
+ @igcResize=${this._handleResize}
405
+ @igcResizeEnd=${this._handleResizeEnd}
406
+ >
407
+ ${this.renderContent()}
408
+ </igc-resize>
409
+ `;
410
+ }
411
+ };
412
+ IgcTileComponent.tagName = 'igc-tile';
413
+ IgcTileComponent.styles = [styles, shared];
414
+ IgcTileComponent.increment = createCounter();
415
+ __decorate([
416
+ consume({ context: tileManagerContext, subscribe: true })
417
+ ], IgcTileComponent.prototype, "_managerContext", void 0);
418
+ __decorate([
419
+ query('[part="ghost"]', true)
420
+ ], IgcTileComponent.prototype, "_ghost", void 0);
421
+ __decorate([
422
+ query('[part~="base"]', true)
423
+ ], IgcTileComponent.prototype, "_tileContent", void 0);
424
+ __decorate([
425
+ state()
426
+ ], IgcTileComponent.prototype, "_isDragging", void 0);
427
+ __decorate([
428
+ state()
429
+ ], IgcTileComponent.prototype, "_hasDragOver", void 0);
430
+ __decorate([
431
+ state()
432
+ ], IgcTileComponent.prototype, "_isResizing", void 0);
433
+ __decorate([
434
+ property({ attribute: 'tile-id', type: String, reflect: true })
435
+ ], IgcTileComponent.prototype, "tileId", void 0);
436
+ __decorate([
437
+ property({ type: Number })
438
+ ], IgcTileComponent.prototype, "colSpan", null);
439
+ __decorate([
440
+ property({ type: Number })
441
+ ], IgcTileComponent.prototype, "rowSpan", null);
442
+ __decorate([
443
+ property({ type: Number })
444
+ ], IgcTileComponent.prototype, "colStart", null);
445
+ __decorate([
446
+ property({ type: Number })
447
+ ], IgcTileComponent.prototype, "rowStart", null);
448
+ __decorate([
449
+ property({ type: Boolean, reflect: true })
450
+ ], IgcTileComponent.prototype, "fullscreen", null);
451
+ __decorate([
452
+ property({ type: Boolean, reflect: true })
453
+ ], IgcTileComponent.prototype, "maximized", null);
454
+ __decorate([
455
+ property({ attribute: 'disable-drag', type: Boolean, reflect: true })
456
+ ], IgcTileComponent.prototype, "disableDrag", null);
457
+ __decorate([
458
+ property({ type: Boolean, reflect: true, attribute: 'disable-resize' })
459
+ ], IgcTileComponent.prototype, "disableResize", void 0);
460
+ __decorate([
461
+ property({ type: Number })
462
+ ], IgcTileComponent.prototype, "position", null);
463
+ IgcTileComponent = IgcTileComponent_1 = __decorate([
464
+ themes(all)
465
+ ], IgcTileComponent);
466
+ export default IgcTileComponent;
467
+ //# sourceMappingURL=tile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile.js","sourceRoot":"","sources":["../../../src/components/tile-manager/tile.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContextProvider, consume } from '@lit/context';\nimport { LitElement, type PropertyValues, html } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { themes } from '../../theming/theming-decorator.js';\nimport {\n type TileManagerContext,\n tileContext,\n tileManagerContext,\n} from '../common/context.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { asNumber, createCounter, partNameMap } from '../common/util.js';\nimport { addFullscreenController } from './controllers/fullscreen.js';\nimport { addTileDragAndDrop } from './controllers/tile-dnd.js';\nimport { isSameTile, swapTiles } from './position.js';\nimport type { ResizeCallbackParams } from './resize-controller.js';\nimport IgcResizeComponent from './resize-element.js';\nimport { styles as shared } from './themes/shared/tile/tile.common.css.js';\nimport { styles } from './themes/tile.base.css.js';\nimport { all } from './themes/tile.js';\nimport IgcTileHeaderComponent from './tile-header.js';\nimport { ResizeUtil } from './tile-util.js';\n\ntype IgcTileChangeState = {\n tile: IgcTileComponent;\n state: boolean;\n};\n\n// REVIEW: Decide whether to re-emit the events from the manager of leave them up to bubble naturally\nexport interface IgcTileComponentEventMap {\n igcTileFullscreen: CustomEvent<IgcTileChangeState>;\n igcTileMaximize: CustomEvent<IgcTileChangeState>;\n tileDragStart: CustomEvent<IgcTileComponent>;\n tileDragEnd: CustomEvent<IgcTileComponent>;\n igcResizeStart: CustomEvent<IgcTileComponent>;\n igcResizeMove: CustomEvent<IgcTileComponent>;\n igcResizeEnd: CustomEvent<IgcTileComponent>;\n}\n\n/**\n * The tile component is used within the `igc-tile-manager` as a container\n * for displaying various types of information.\n *\n * @element igc-tile\n *\n * @fires igcTileFullscreen - Fired when tile fullscreen state changes.\n * @fires igcTileMaximize - Fired when tile maximize state changes.\n * @fires igcResizeStart - Fired when tile begins resizing.\n * @fires igcResizeMove - Fired when tile is being resized.\n * @fires igcResizeEnd - Fired when tile finishes resizing.\n */\n@themes(all)\nexport default class IgcTileComponent extends EventEmitterMixin<\n IgcTileComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-tile';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcTileComponent,\n IgcTileHeaderComponent,\n IgcResizeComponent\n );\n }\n\n private static readonly increment = createCounter();\n\n private _dragController = addTileDragAndDrop(this, {\n dragStart: this.handleDragStart,\n dragEnd: this.handleDragEnd,\n dragEnter: this.handleDragEnter,\n dragLeave: this.handleDragLeave,\n dragOver: this.handleDragOver,\n drop: this.handleDragLeave,\n });\n\n private _fullscreenController = addFullscreenController(\n this,\n this.emitFullScreenEvent\n );\n\n private _colSpan = 1;\n private _rowSpan = 1;\n private _colStart: number | null = null;\n private _rowStart: number | null = null;\n private _position = -1;\n private _disableDrag = false;\n private _maximized = false;\n private _initialPointerX: number | null = null;\n private _initialPointerY: number | null = null;\n private _dragCounter = 0;\n private _dragGhost: HTMLElement | null = null;\n private _dragImage: HTMLElement | null = null;\n private _cachedStyles: {\n background?: string;\n border?: string;\n borderRadius?: string;\n columnCount?: number;\n gap?: number;\n initialTop?: number;\n minHeight?: number;\n minWidth?: number;\n tileBackground?: string;\n tileBorder?: string;\n rowHeights?: number[];\n } = {};\n\n // Tile manager context properties and helpers\n\n @consume({ context: tileManagerContext, subscribe: true })\n private _managerContext?: TileManagerContext;\n\n private _context = new ContextProvider(this, {\n context: tileContext,\n initialValue: {\n instance: this,\n setFullscreenState: (fullscreen, isUserTriggered) =>\n this._fullscreenController.setState(fullscreen, isUserTriggered),\n },\n });\n\n private _setTileContext() {\n this._context.setValue(\n {\n instance: this,\n setFullscreenState: (fullscreen, isUserTriggered) =>\n this._fullscreenController.setState(fullscreen, isUserTriggered),\n },\n true\n );\n }\n\n private get _draggedItem(): IgcTileComponent | null {\n return this._managerContext?.draggedItem ?? null;\n }\n\n private get _isSlideMode(): boolean {\n return this._managerContext\n ? this._managerContext.instance.dragMode === 'slide'\n : true;\n }\n\n @query('[part=\"ghost\"]', true)\n public _ghost!: HTMLElement;\n\n @query('[part~=\"base\"]', true)\n public _tileContent!: HTMLElement;\n\n @state()\n private _isDragging = false;\n\n @state()\n private _hasDragOver = false;\n\n @state()\n private _isResizing = false;\n\n /**\n * The unique identifier of the tile.\n * @attr\n */\n @property({ attribute: 'tile-id', type: String, reflect: true })\n public tileId: string | null = null;\n\n @property({ type: Number })\n public set colSpan(value: number) {\n this._colSpan = Math.max(1, asNumber(value));\n this.style.setProperty('--ig-col-span', this._colSpan.toString());\n }\n\n public get colSpan(): number {\n return this._colSpan;\n }\n\n @property({ type: Number })\n public set rowSpan(value: number) {\n this._rowSpan = Math.max(1, asNumber(value));\n this.style.setProperty('--ig-row-span', this._rowSpan.toString());\n }\n\n public get rowSpan(): number {\n return this._rowSpan;\n }\n\n @property({ type: Number })\n public set colStart(value: number) {\n this._colStart = Math.max(0, asNumber(value)) || null;\n this.style.setProperty(\n '--ig-col-start',\n this._colStart ? this._colStart.toString() : null\n );\n }\n\n public get colStart(): number | null {\n return this._colStart;\n }\n\n @property({ type: Number })\n public set rowStart(value: number) {\n this._rowStart = Math.max(0, asNumber(value)) || null;\n this.style.setProperty(\n '--ig-row-start',\n this._rowStart ? this._rowStart.toString() : null\n );\n }\n\n public get rowStart(): number | null {\n return this._rowStart;\n }\n\n /**\n * Indicates whether the tile occupies the whole screen.\n * @attr fullscreen\n */\n @property({ type: Boolean, reflect: true })\n public set fullscreen(value: boolean) {\n this._fullscreenController.setState(value);\n }\n\n public get fullscreen(): boolean {\n return this._fullscreenController.fullscreen;\n }\n\n /**\n * Indicates whether the tile occupies all available space within the layout.\n * @attr maximized\n */\n @property({ type: Boolean, reflect: true })\n public set maximized(value: boolean) {\n this._maximized = value;\n this._setTileContext();\n\n if (this._managerContext) {\n this._managerContext.instance.requestUpdate();\n }\n }\n\n public get maximized() {\n return this._maximized;\n }\n\n /**\n * Indicates whether the tile can be dragged.\n * @attr disable-drag\n */\n @property({ attribute: 'disable-drag', type: Boolean, reflect: true })\n public set disableDrag(value: boolean) {\n this._disableDrag = value;\n this._dragController.enabled = !this._disableDrag;\n }\n\n public get disableDrag() {\n return this._disableDrag;\n }\n\n /**\n * Indicates whether the tile can be resized.\n * @attr disable-resize\n */\n @property({ type: Boolean, reflect: true, attribute: 'disable-resize' })\n public disableResize = false;\n\n /**\n * Gets/sets the tile's visual position in the layout.\n * Corresponds to the CSS order property.\n * @attr\n */\n @property({ type: Number })\n public set position(value: number) {\n this._position = Number(value);\n this.style.order = `${this._position}`;\n }\n\n public get position() {\n return this._position;\n }\n\n protected get gridColumnWidth(): number {\n const tileManager =\n this._managerContext!.instance!.shadowRoot!.querySelector(\n \"[part~='base']\"\n )!;\n\n const gridTemplateColumns = getComputedStyle(tileManager).getPropertyValue(\n 'grid-template-columns'\n );\n const firstColumnWidth = Number.parseFloat(\n gridTemplateColumns.split(' ')[0]\n );\n\n return firstColumnWidth || this._cachedStyles.minWidth!;\n }\n\n constructor() {\n super();\n this._setTileContext();\n }\n\n public override connectedCallback() {\n super.connectedCallback();\n this.tileId = this.tileId || `tile-${IgcTileComponent.increment()}`;\n }\n\n protected override updated(changedProperties: PropertyValues) {\n super.updated(changedProperties);\n\n const parts = partNameMap({\n dragging: this._isDragging,\n resizing: this._isResizing,\n });\n\n if (parts.trim()) {\n this.setAttribute('part', parts);\n } else {\n this.removeAttribute('part');\n }\n }\n\n private emitFullScreenEvent(state: boolean) {\n return this.emitEvent('igcTileFullscreen', {\n detail: { tile: this, state },\n cancelable: true,\n });\n }\n\n private assignDragImage(e: DragEvent) {\n const rect = this.getBoundingClientRect();\n const offsetX = e.clientX - rect.left;\n const offsetY = e.clientY - rect.top;\n const compStyles = getComputedStyle(this);\n this.cacheStyles();\n\n this._dragImage = this.cloneNode(true) as HTMLElement;\n Object.assign(this._dragImage.style, {\n width: compStyles.width,\n height: compStyles.height,\n position: 'absolute',\n top: '-99999px',\n left: '-99999px',\n background: this._cachedStyles.tileBackground,\n border: `1px solid ${this._cachedStyles.tileBorder}`,\n borderRadius: this._cachedStyles.borderRadius,\n overflow: 'hidden',\n });\n\n document.body.append(this._dragImage);\n\n e.dataTransfer!.setDragImage(this._dragImage, offsetX, offsetY);\n e.dataTransfer!.effectAllowed = 'move';\n }\n\n private handleDragStart(e: DragEvent) {\n this.assignDragImage(e);\n\n this.emitEvent('tileDragStart', { detail: this });\n this._dragGhost = this.ghostFactory();\n this._dragGhost.inert = true;\n\n if (this._dragGhost) {\n this.append(this._dragGhost);\n }\n this._isDragging = true;\n }\n\n private handleDragEnter() {\n this._dragCounter++;\n this._hasDragOver = true;\n }\n\n private handleDragOver(event: DragEvent) {\n if (!this._draggedItem) {\n return;\n }\n\n if (isSameTile(this, this._draggedItem)) {\n this._tileContent.style.visibility = 'hidden';\n if (this._dragGhost) {\n Object.assign(this._dragGhost.style, {\n visibility: 'visible',\n });\n }\n if (this._managerContext) {\n this._managerContext.lastSwapTile = null;\n }\n } else if (this._isSlideMode) {\n if (\n this._managerContext &&\n (!this._managerContext.lastSwapTile ||\n this.hasPointerLeftLastSwapTile(\n event,\n this._managerContext.lastSwapTile\n ))\n ) {\n this._managerContext.lastSwapTile = this;\n swapTiles(this, this._draggedItem!);\n }\n }\n }\n\n private handleDragLeave() {\n this._dragCounter--;\n\n // The drag leave is fired on entering a child element\n // so we check if the dragged item is actually leaving the tile\n if (this._dragCounter === 0) {\n this._hasDragOver = false;\n }\n }\n\n private handleDragEnd() {\n this.emitEvent('tileDragEnd', { detail: this });\n this._isDragging = false;\n\n if (this._dragGhost) {\n this._dragGhost.remove();\n this._dragGhost = null;\n }\n\n if (this._dragImage) {\n this._dragImage.remove();\n this._dragImage = null;\n }\n\n this._tileContent.style.visibility = 'visible';\n }\n\n private hasPointerLeftLastSwapTile(\n event: DragEvent,\n lastSwapTile: IgcTileComponent | null\n ) {\n if (!lastSwapTile) return false;\n\n // Check if the pointer is outside the boundaries of the last swapped tile\n\n const rect = lastSwapTile.getBoundingClientRect();\n const pointerX = event.clientX;\n const pointerY = event.clientY;\n\n const outsideBoundaries =\n pointerX < rect.left ||\n pointerX > rect.right ||\n pointerY < rect.top ||\n pointerY > rect.bottom;\n\n if (outsideBoundaries && this._managerContext) {\n this._managerContext.lastSwapTile = null;\n }\n\n return outsideBoundaries;\n }\n\n private cacheStyles() {\n //use util\n const tileComputedStyle = getComputedStyle(this);\n const parentWrapper =\n this.parentElement!.shadowRoot!.querySelector('[part=\"base\"]')!;\n const tileManagerComputedStyle = getComputedStyle(parentWrapper);\n\n const gap =\n Number.parseFloat(\n tileManagerComputedStyle.getPropertyValue('grid-gap')\n ) || 0;\n const rowHeights = tileManagerComputedStyle.gridTemplateRows\n .split(' ')\n .map((height) => Number.parseFloat(height.trim()));\n\n this._cachedStyles = {\n columnCount: Number.parseFloat(\n tileComputedStyle.getPropertyValue('--ig-column-count')\n ),\n background: tileComputedStyle.getPropertyValue(\n '--placeholder-background'\n ),\n tileBackground: tileComputedStyle.getPropertyValue('--tile-background'),\n tileBorder: tileComputedStyle.getPropertyValue('--hover-border-color'),\n border: tileComputedStyle.getPropertyValue('--ghost-border'),\n borderRadius: tileComputedStyle.getPropertyValue('--border-radius'),\n minWidth: Number.parseFloat(\n tileComputedStyle.getPropertyValue('--ig-min-col-width')\n ),\n minHeight: Number.parseFloat(\n tileComputedStyle.getPropertyValue('--ig-min-row-height')\n ),\n initialTop: parentWrapper.getBoundingClientRect().top,\n rowHeights,\n gap,\n };\n }\n\n private _handleResizeStart(event: CustomEvent<ResizeCallbackParams>) {\n const ghostElement = event.detail.state.ghost;\n this._initialPointerX = event.detail.event.clientX;\n this._initialPointerY = event.detail.event.clientY;\n\n if (ghostElement) {\n ghostElement.style.minWidth = `${this._cachedStyles.minWidth!}px`;\n ghostElement.style.minHeight = `${this._cachedStyles.minHeight!}px`;\n }\n }\n\n private _handleResize(event: CustomEvent<ResizeCallbackParams>) {\n this._isResizing = true;\n\n const ghostElement = event.detail.state.current;\n const rowHeights = this._cachedStyles.rowHeights!;\n\n if (ghostElement) {\n const deltaX = event.detail.event.clientX - this._initialPointerX!;\n const deltaY = event.detail.event.clientY - this._initialPointerY!;\n\n const snappedWidth = ResizeUtil.calculateSnappedWidth(\n deltaX,\n event.detail.state.initial.width,\n this._cachedStyles.gap!,\n this.gridColumnWidth\n );\n\n const actualTop = this._cachedStyles.initialTop! + window.scrollY;\n const initialTop = event.detail.state.initial.top + window.scrollY;\n const actualBottom = event.detail.state.initial.bottom + window.scrollY;\n\n const startingY = actualBottom - actualTop;\n\n const snappedHeight = ResizeUtil.calculateSnappedHeight(\n deltaY,\n startingY,\n rowHeights,\n this._cachedStyles.gap!,\n initialTop,\n event.detail.state.initial.height\n );\n\n ghostElement.width = snappedWidth;\n ghostElement.height = snappedHeight;\n }\n }\n\n private _handleResizeEnd(event: CustomEvent<ResizeCallbackParams>) {\n const state = event.detail.state;\n const width = state.current.width;\n const height = state.current.height;\n\n const colSpan = Math.max(1, Math.round(width / this.gridColumnWidth));\n\n const initialTop = event.detail.state.initial.top + window.scrollY;\n const startRowIndex = ResizeUtil.calculate(\n initialTop,\n this._cachedStyles.rowHeights!,\n this._cachedStyles.gap!\n ).targetIndex;\n\n const initialSpan = this._calculateRowSpan(\n state.initial.height,\n startRowIndex\n );\n const currentSpan = this._calculateRowSpan(height, startRowIndex);\n\n const deltaY = event.detail.event.clientY - this._initialPointerY!;\n const rowSpan =\n deltaY > 0\n ? Math.max(initialSpan, currentSpan)\n : Math.min(initialSpan, currentSpan);\n\n // REVIEW\n Object.assign(state.ghost!.style, {\n width: '',\n height: '',\n });\n\n this.style.setProperty('grid-row', `span ${rowSpan}`);\n this.style.setProperty('grid-column', `span ${colSpan}`);\n\n this._isResizing = false;\n this._initialPointerX = null;\n this._initialPointerY = null;\n this._cachedStyles = {};\n }\n\n private _calculateRowSpan(height: number, startRowIndex: number): number {\n const gap = this._cachedStyles.gap!;\n const rowHeights = this._cachedStyles.rowHeights!;\n let accumulatedHeight = 0;\n\n for (let i = 0; i < rowHeights.length; i++) {\n const rowHeight = rowHeights[startRowIndex + i];\n const rowGap = startRowIndex + i > 0 ? gap : 0;\n const halfwayThreshold = accumulatedHeight + rowHeight / 2 + rowGap;\n\n accumulatedHeight += rowHeight + rowGap;\n\n if (height >= halfwayThreshold && height <= accumulatedHeight) {\n return i + 1;\n }\n }\n\n // Default to the first row\n return 1;\n }\n\n // REVIEW\n protected ghostFactory = () => {\n this.cacheStyles();\n\n const ghost = document.createElement('div');\n Object.assign(ghost.style, {\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1000,\n background: this._cachedStyles.background,\n border: `1px solid ${this._cachedStyles.border}`,\n borderRadius: this._cachedStyles.borderRadius,\n width: '100%',\n height: '100%',\n gridRow: '',\n gridColumn: '',\n });\n\n return ghost;\n };\n\n protected renderContent() {\n const parts = partNameMap({\n base: true,\n 'drag-over': this._hasDragOver && !this._isSlideMode,\n fullscreen: this.fullscreen,\n draggable: !this.disableDrag,\n dragging: this._isDragging,\n resizable: !this.disableResize,\n resizing: this._isResizing,\n maximized: this.maximized,\n });\n\n const styles = {\n '--ig-col-span': this._colSpan,\n '--ig-row-span': this._rowSpan,\n '--ig-col-start': this._colStart,\n '--ig-row-start': this._rowStart,\n };\n\n return html`\n <div part=${parts} .inert=${this._hasDragOver} style=${styleMap(styles)}>\n <slot name=\"header\"></slot>\n <div part=\"content-container\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n protected override render() {\n const renderResize =\n this.disableResize || this.maximized || this.fullscreen;\n\n return renderResize\n ? this.renderContent()\n : html`\n <igc-resize\n part=\"resize\"\n .ghostFactory=${this.ghostFactory}\n mode=\"deferred\"\n @igcResizeStart=${this._handleResizeStart}\n @igcResize=${this._handleResize}\n @igcResizeEnd=${this._handleResizeEnd}\n >\n ${this.renderContent()}\n </igc-resize>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-tile': IgcTileComponent;\n }\n}\n"]}