barsa-user-workspace 2.3.103 → 2.3.104
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.
|
@@ -54,7 +54,7 @@ function cloneLayoutItem(layoutItem) {
|
|
|
54
54
|
y: layoutItem.y,
|
|
55
55
|
id: layoutItem.id,
|
|
56
56
|
moved: !!layoutItem.moved,
|
|
57
|
-
static: !!layoutItem.static
|
|
57
|
+
static: !!layoutItem.static
|
|
58
58
|
};
|
|
59
59
|
if (layoutItem.minW !== undefined) {
|
|
60
60
|
clonedLayoutItem.minW = layoutItem.minW;
|
|
@@ -138,7 +138,7 @@ function resolveCompactionCollision(layout, item, moveToCoord, axis) {
|
|
|
138
138
|
const sizeProp = heightWidth[axis];
|
|
139
139
|
item[axis] += 1;
|
|
140
140
|
const itemIndex = layout
|
|
141
|
-
.map(layoutItem => {
|
|
141
|
+
.map((layoutItem) => {
|
|
142
142
|
return layoutItem.id;
|
|
143
143
|
})
|
|
144
144
|
.indexOf(item.id);
|
|
@@ -270,7 +270,7 @@ function getFirstCollision(layout, layoutItem) {
|
|
|
270
270
|
return null;
|
|
271
271
|
}
|
|
272
272
|
function getAllCollisions(layout, layoutItem) {
|
|
273
|
-
return layout.filter(l => collides(l, layoutItem));
|
|
273
|
+
return layout.filter((l) => collides(l, layoutItem));
|
|
274
274
|
}
|
|
275
275
|
/**
|
|
276
276
|
* Get all static elements.
|
|
@@ -278,7 +278,7 @@ function getAllCollisions(layout, layoutItem) {
|
|
|
278
278
|
* @return {Array} Array of static layout items..
|
|
279
279
|
*/
|
|
280
280
|
function getStatics(layout) {
|
|
281
|
-
return layout.filter(l => l.static);
|
|
281
|
+
return layout.filter((l) => l.static);
|
|
282
282
|
}
|
|
283
283
|
/**
|
|
284
284
|
* Move an element. Responsible for doing cascading movements of other elements.
|
|
@@ -370,15 +370,11 @@ function moveElementAwayFromCollision(layout, collidesWith, itemToMove, isUserAc
|
|
|
370
370
|
isUserAction = false;
|
|
371
371
|
// Make a mock item so we don't modify the item here, only modify in moveElement.
|
|
372
372
|
const fakeItem = {
|
|
373
|
-
x: compactH
|
|
374
|
-
|
|
375
|
-
: itemToMove.x,
|
|
376
|
-
y: compactV
|
|
377
|
-
? Math.max(collidesWith.y - itemToMove.h, 0)
|
|
378
|
-
: itemToMove.y,
|
|
373
|
+
x: compactH ? Math.max(collidesWith.x - itemToMove.w, 0) : itemToMove.x,
|
|
374
|
+
y: compactV ? Math.max(collidesWith.y - itemToMove.h, 0) : itemToMove.y,
|
|
379
375
|
w: itemToMove.w,
|
|
380
376
|
h: itemToMove.h,
|
|
381
|
-
id: '-1'
|
|
377
|
+
id: '-1'
|
|
382
378
|
};
|
|
383
379
|
// No collision? If so, we can go up there; otherwise, we'll end up moving down as normal
|
|
384
380
|
if (!getFirstCollision(layout, fakeItem)) {
|
|
@@ -408,7 +404,7 @@ function setTransform({ top, left, width, height }) {
|
|
|
408
404
|
OTransform: translate,
|
|
409
405
|
width: `${width}px`,
|
|
410
406
|
height: `${height}px`,
|
|
411
|
-
position: 'absolute'
|
|
407
|
+
position: 'absolute'
|
|
412
408
|
};
|
|
413
409
|
}
|
|
414
410
|
function setTopLeft({ top, left, width, height }) {
|
|
@@ -417,7 +413,7 @@ function setTopLeft({ top, left, width, height }) {
|
|
|
417
413
|
left: `${left}px`,
|
|
418
414
|
width: `${width}px`,
|
|
419
415
|
height: `${height}px`,
|
|
420
|
-
position: 'absolute'
|
|
416
|
+
position: 'absolute'
|
|
421
417
|
};
|
|
422
418
|
}
|
|
423
419
|
/**
|
|
@@ -470,34 +466,20 @@ function validateLayout(layout, contextName = 'Layout') {
|
|
|
470
466
|
const item = layout[i];
|
|
471
467
|
for (let j = 0; j < subProps.length; j++) {
|
|
472
468
|
if (typeof item[subProps[j]] !== 'number') {
|
|
473
|
-
throw new Error('ReactGridLayout: ' +
|
|
474
|
-
contextName +
|
|
475
|
-
'[' +
|
|
476
|
-
i +
|
|
477
|
-
'].' +
|
|
478
|
-
subProps[j] +
|
|
479
|
-
' must be a number!');
|
|
469
|
+
throw new Error('ReactGridLayout: ' + contextName + '[' + i + '].' + subProps[j] + ' must be a number!');
|
|
480
470
|
}
|
|
481
471
|
}
|
|
482
472
|
if (item.id && typeof item.id !== 'string') {
|
|
483
|
-
throw new Error('ReactGridLayout: ' +
|
|
484
|
-
contextName +
|
|
485
|
-
'[' +
|
|
486
|
-
i +
|
|
487
|
-
'].i must be a string!');
|
|
473
|
+
throw new Error('ReactGridLayout: ' + contextName + '[' + i + '].i must be a string!');
|
|
488
474
|
}
|
|
489
475
|
if (item.static !== undefined && typeof item.static !== 'boolean') {
|
|
490
|
-
throw new Error('ReactGridLayout: ' +
|
|
491
|
-
contextName +
|
|
492
|
-
'[' +
|
|
493
|
-
i +
|
|
494
|
-
'].static must be a boolean!');
|
|
476
|
+
throw new Error('ReactGridLayout: ' + contextName + '[' + i + '].static must be a boolean!');
|
|
495
477
|
}
|
|
496
478
|
}
|
|
497
479
|
}
|
|
498
480
|
// Flow can't really figure this out, so we just use Object
|
|
499
481
|
function autoBindHandlers(el, fns) {
|
|
500
|
-
fns.forEach(key => (el[key] = el[key].bind(el)));
|
|
482
|
+
fns.forEach((key) => (el[key] = el[key].bind(el)));
|
|
501
483
|
}
|
|
502
484
|
function log(...args) {
|
|
503
485
|
if (!DEBUG) {
|
|
@@ -2117,7 +2099,6 @@ class NavContainerComponent extends BaseComponent {
|
|
|
2117
2099
|
this._router = inject(Router);
|
|
2118
2100
|
}
|
|
2119
2101
|
onTabSelect(e) {
|
|
2120
|
-
console.log(e);
|
|
2121
2102
|
if (e.label === 'صفحه اصلی') {
|
|
2122
2103
|
this._router.navigate(['/home']);
|
|
2123
2104
|
}
|
|
@@ -2226,7 +2207,6 @@ class LayoutContainerComponent extends BaseComponent {
|
|
|
2226
2207
|
this.isResizing = false;
|
|
2227
2208
|
}
|
|
2228
2209
|
onLayoutUpdated(layout) {
|
|
2229
|
-
console.log('on layout updated', layout);
|
|
2230
2210
|
this.layout = layout;
|
|
2231
2211
|
}
|
|
2232
2212
|
onAutoScrollChange(checked) {
|
|
@@ -2279,7 +2259,6 @@ class LayoutContainerComponent extends BaseComponent {
|
|
|
2279
2259
|
});
|
|
2280
2260
|
}
|
|
2281
2261
|
this.layout = ktdGridCompact(layout, this.compactType, this.cols);
|
|
2282
|
-
console.log('generateLayout', this.layout);
|
|
2283
2262
|
}
|
|
2284
2263
|
/** Adds a grid item to the layout */
|
|
2285
2264
|
addItemToLayout() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"barsa-user-workspace.mjs","sources":["../../../projects/barsa-user-workspace/src/lib/utils/react-grid-layout.utils.ts","../../../projects/barsa-user-workspace/src/lib/utils/passive-listeners.ts","../../../projects/barsa-user-workspace/src/lib/utils/pointer.utils.ts","../../../projects/barsa-user-workspace/src/lib/utils/grid.utils.ts","../../../projects/barsa-user-workspace/src/lib/directives/drag-handle.ts","../../../projects/barsa-user-workspace/src/lib/directives/resize-handle.ts","../../../projects/barsa-user-workspace/src/lib/directives/placeholder.ts","../../../projects/barsa-user-workspace/src/lib/coercion/boolean-property.ts","../../../projects/barsa-user-workspace/src/lib/coercion/number-property.ts","../../../projects/barsa-user-workspace/src/lib/grid.definitions.ts","../../../projects/barsa-user-workspace/src/lib/grid.service.ts","../../../projects/barsa-user-workspace/src/lib/utils/operators.ts","../../../projects/barsa-user-workspace/src/lib/grid-item/grid-item.component.ts","../../../projects/barsa-user-workspace/src/lib/grid-item/grid-item.component.html","../../../projects/barsa-user-workspace/src/lib/utils/client-rect.ts","../../../projects/barsa-user-workspace/src/lib/utils/scroll.ts","../../../projects/barsa-user-workspace/src/lib/utils/transition-duration.ts","../../../projects/barsa-user-workspace/src/lib/grid/grid.component.ts","../../../projects/barsa-user-workspace/src/lib/grid/grid.component.html","../../../projects/barsa-user-workspace/src/lib/nav-container/nav-container.component.ts","../../../projects/barsa-user-workspace/src/lib/nav-container/nav-container.component.html","../../../projects/barsa-user-workspace/src/lib/utils.ts","../../../projects/barsa-user-workspace/src/lib/layout-container/layout-container.component.ts","../../../projects/barsa-user-workspace/src/lib/layout-container/layout-container.component.html","../../../projects/barsa-user-workspace/src/lib/layout-grid-mapper.pipe.ts","../../../projects/barsa-user-workspace/src/lib/report-grid-layout/report-grid-layout.component.ts","../../../projects/barsa-user-workspace/src/lib/report-grid-layout/report-grid-layout.component.html","../../../projects/barsa-user-workspace/src/lib/barsa-user-workspace.module.ts","../../../projects/barsa-user-workspace/src/public-api.ts","../../../projects/barsa-user-workspace/src/barsa-user-workspace.ts"],"sourcesContent":["/**\n * IMPORTANT:\n * This utils are taken from the project: https://github.com/STRML/react-grid-layout.\n * The code should be as less modified as possible for easy maintenance.\n */\n\n// Disable lint since we don't want to modify this code\n/* eslint-disable */\nexport type LayoutItem = {\n w: number;\n h: number;\n x: number;\n y: number;\n id: string;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n moved?: boolean;\n static?: boolean;\n isDraggable?: boolean | null | undefined;\n isResizable?: boolean | null | undefined;\n};\nexport type Layout = Array<LayoutItem>;\nexport type Position = {\n left: number;\n top: number;\n width: number;\n height: number;\n};\nexport type ReactDraggableCallbackData = {\n node: HTMLElement;\n x?: number;\n y?: number;\n deltaX: number;\n deltaY: number;\n lastX?: number;\n lastY?: number;\n};\n\nexport type PartialPosition = { left: number; top: number };\nexport type DroppingPosition = { x: number; y: number; e: Event };\nexport type Size = { width: number; height: number };\nexport type GridDragEvent = {\n e: Event;\n node: HTMLElement;\n newPosition: PartialPosition;\n};\nexport type GridResizeEvent = { e: Event; node: HTMLElement; size: Size };\nexport type DragOverEvent = MouseEvent & {\n nativeEvent: {\n layerX: number;\n layerY: number;\n target: {\n className: String;\n };\n };\n};\n\n//type REl = ReactElement<any>;\n//export type ReactChildren = ReactChildrenArray<REl>;\n\n// All callbacks are of the signature (layout, oldItem, newItem, placeholder, e).\nexport type EventCallback = (\n arg0: Layout,\n oldItem: LayoutItem | null | undefined,\n newItem: LayoutItem | null | undefined,\n placeholder: LayoutItem | null | undefined,\n arg4: Event,\n arg5: HTMLElement | null | undefined,\n) => void;\nexport type CompactType = ('horizontal' | 'vertical') | null | undefined;\n\nconst DEBUG = false;\n\n/**\n * Return the bottom coordinate of the layout.\n *\n * @param {Array} layout Layout array.\n * @return {Number} Bottom coordinate.\n */\nexport function bottom(layout: Layout): number {\n let max = 0,\n bottomY;\n for (let i = 0, len = layout.length; i < len; i++) {\n bottomY = layout[i].y + layout[i].h;\n if (bottomY > max) {\n max = bottomY;\n }\n }\n return max;\n}\n\nexport function cloneLayout(layout: Layout): Layout {\n const newLayout = Array(layout.length);\n for (let i = 0, len = layout.length; i < len; i++) {\n newLayout[i] = cloneLayoutItem(layout[i]);\n }\n return newLayout;\n}\n\n// Fast path to cloning, since this is monomorphic\n/** NOTE: This code has been modified from the original source */\nexport function cloneLayoutItem(layoutItem: LayoutItem): LayoutItem {\n const clonedLayoutItem: LayoutItem = {\n w: layoutItem.w,\n h: layoutItem.h,\n x: layoutItem.x,\n y: layoutItem.y,\n id: layoutItem.id,\n moved: !!layoutItem.moved,\n static: !!layoutItem.static,\n };\n\n if (layoutItem.minW !== undefined) { clonedLayoutItem.minW = layoutItem.minW;}\n if (layoutItem.maxW !== undefined) { clonedLayoutItem.maxW = layoutItem.maxW;}\n if (layoutItem.minH !== undefined) { clonedLayoutItem.minH = layoutItem.minH;}\n if (layoutItem.maxH !== undefined) { clonedLayoutItem.maxH = layoutItem.maxH;}\n // These can be null\n if (layoutItem.isDraggable !== undefined) { clonedLayoutItem.isDraggable = layoutItem.isDraggable;}\n if (layoutItem.isResizable !== undefined) { clonedLayoutItem.isResizable = layoutItem.isResizable;}\n\n return clonedLayoutItem;\n}\n\n/**\n * Given two layoutitems, check if they collide.\n */\nexport function collides(l1: LayoutItem, l2: LayoutItem): boolean {\n if (l1.id === l2.id) {\n return false;\n } // same element\n if (l1.x + l1.w <= l2.x) {\n return false;\n } // l1 is left of l2\n if (l1.x >= l2.x + l2.w) {\n return false;\n } // l1 is right of l2\n if (l1.y + l1.h <= l2.y) {\n return false;\n } // l1 is above l2\n if (l1.y >= l2.y + l2.h) {\n return false;\n } // l1 is below l2\n return true; // boxes overlap\n}\n\n/**\n * Given a layout, compact it. This involves going down each y coordinate and removing gaps\n * between items.\n *\n * @param {Array} layout Layout.\n * @param {Boolean} verticalCompact Whether or not to compact the layout\n * vertically.\n * @return {Array} Compacted Layout.\n */\nexport function compact(\n layout: Layout,\n compactType: CompactType,\n cols: number,\n): Layout {\n // Statics go in the compareWith array right away so items flow around them.\n const compareWith = getStatics(layout);\n // We go through the items by row and column.\n const sorted = sortLayoutItems(layout, compactType);\n // Holding for new items.\n const out = Array(layout.length);\n\n for (let i = 0, len = sorted.length; i < len; i++) {\n let l = cloneLayoutItem(sorted[i]);\n\n // Don't move static elements\n if (!l.static) {\n l = compactItem(compareWith, l, compactType, cols, sorted);\n\n // Add to comparison array. We only collide with items before this one.\n // Statics are already in this array.\n compareWith.push(l);\n }\n\n // Add to output array to make sure they still come out in the right order.\n out[layout.indexOf(sorted[i])] = l;\n\n // Clear moved flag, if it exists.\n l.moved = false;\n }\n\n return out;\n}\n\nconst heightWidth = {x: 'w', y: 'h'};\n\n/**\n * Before moving item down, it will check if the movement will cause collisions and move those items down before.\n */\nfunction resolveCompactionCollision(\n layout: Layout,\n item: LayoutItem,\n moveToCoord: number,\n axis: 'x' | 'y',\n) {\n const sizeProp = heightWidth[axis];\n item[axis] += 1;\n const itemIndex = layout\n .map(layoutItem => {\n return layoutItem.id;\n })\n .indexOf(item.id);\n\n // Go through each item we collide with.\n for (let i = itemIndex + 1; i < layout.length; i++) {\n const otherItem = layout[i];\n // Ignore static items\n if (otherItem.static) {\n continue;\n }\n\n // Optimization: we can break early if we know we're past this el\n // We can do this b/c it's a sorted layout\n if (otherItem.y > item.y + item.h) {\n break;\n }\n\n if (collides(item, otherItem)) {\n resolveCompactionCollision(\n layout,\n otherItem,\n moveToCoord + item[sizeProp],\n axis,\n );\n }\n }\n\n item[axis] = moveToCoord;\n}\n\n/**\n * Compact an item in the layout.\n */\nexport function compactItem(\n compareWith: Layout,\n l: LayoutItem,\n compactType: CompactType,\n cols: number,\n fullLayout: Layout,\n): LayoutItem {\n const compactV = compactType === 'vertical';\n const compactH = compactType === 'horizontal';\n if (compactV) {\n // Bottom 'y' possible is the bottom of the layout.\n // This allows you to do nice stuff like specify {y: Infinity}\n // This is here because the layout must be sorted in order to get the correct bottom `y`.\n l.y = Math.min(bottom(compareWith), l.y);\n // Move the element up as far as it can go without colliding.\n while (l.y > 0 && !getFirstCollision(compareWith, l)) {\n l.y--;\n }\n } else if (compactH) {\n // Move the element left as far as it can go without colliding.\n while (l.x > 0 && !getFirstCollision(compareWith, l)) {\n l.x--;\n }\n }\n\n // Move it down, and keep moving it down if it's colliding.\n let collides;\n while ((collides = getFirstCollision(compareWith, l))) {\n if (compactH) {\n resolveCompactionCollision(fullLayout, l, collides.x + collides.w, 'x');\n } else {\n resolveCompactionCollision(fullLayout, l, collides.y + collides.h, 'y',);\n }\n // Since we can't grow without bounds horizontally, if we've overflown, let's move it down and try again.\n if (compactH && l.x + l.w > cols) {\n l.x = cols - l.w;\n l.y++;\n\n // ALso move element as left as much as we can (buw-custom-change)\n while (l.x > 0 && !getFirstCollision(compareWith, l)) {\n l.x--;\n }\n }\n }\n\n // Ensure that there are no negative positions\n l.y = Math.max(l.y, 0);\n l.x = Math.max(l.x, 0);\n\n return l;\n}\n\n/**\n * Given a layout, make sure all elements fit within its bounds.\n *\n * @param {Array} layout Layout array.\n * @param {Number} bounds Number of columns.\n */\nexport function correctBounds(layout: Layout, bounds: { cols: number }): Layout {\n const collidesWith = getStatics(layout);\n for (let i = 0, len = layout.length; i < len; i++) {\n const l = layout[i];\n // Overflows right\n if (l.x + l.w > bounds.cols) {\n l.x = bounds.cols - l.w;\n }\n // Overflows left\n if (l.x < 0) {\n l.x = 0;\n l.w = bounds.cols;\n }\n if (!l.static) {\n collidesWith.push(l);\n } else {\n // If this is static and collides with other statics, we must move it down.\n // We have to do something nicer than just letting them overlap.\n while (getFirstCollision(collidesWith, l)) {\n l.y++;\n }\n }\n }\n return layout;\n}\n\n/**\n * Get a layout item by ID. Used so we can override later on if necessary.\n *\n * @param {Array} layout Layout array.\n * @param {String} id ID\n * @return {LayoutItem} Item at ID.\n */\nexport function getLayoutItem(\n layout: Layout,\n id: string,\n): LayoutItem | null | undefined {\n for (let i = 0, len = layout.length; i < len; i++) {\n if (layout[i].id === id) {\n return layout[i];\n }\n }\n return null;\n}\n\n/**\n * Returns the first item this layout collides with.\n * It doesn't appear to matter which order we approach this from, although\n * perhaps that is the wrong thing to do.\n *\n * @param {Object} layoutItem Layout item.\n * @return {Object|undefined} A colliding layout item, or undefined.\n */\nexport function getFirstCollision(\n layout: Layout,\n layoutItem: LayoutItem,\n): LayoutItem | null | undefined {\n for (let i = 0, len = layout.length; i < len; i++) {\n if (collides(layout[i], layoutItem)) {\n return layout[i];\n }\n }\n return null;\n}\n\nexport function getAllCollisions(\n layout: Layout,\n layoutItem: LayoutItem,\n): Array<LayoutItem> {\n return layout.filter(l => collides(l, layoutItem));\n}\n\n/**\n * Get all static elements.\n * @param {Array} layout Array of layout objects.\n * @return {Array} Array of static layout items..\n */\nexport function getStatics(layout: Layout): Array<LayoutItem> {\n return layout.filter(l => l.static);\n}\n\n/**\n * Move an element. Responsible for doing cascading movements of other elements.\n *\n * @param {Array} layout Full layout to modify.\n * @param {LayoutItem} l element to move.\n * @param {Number} [x] X position in grid units.\n * @param {Number} [y] Y position in grid units.\n */\nexport function moveElement(\n layout: Layout,\n l: LayoutItem,\n x: number | null | undefined,\n y: number | null | undefined,\n isUserAction: boolean | null | undefined,\n preventCollision: boolean | null | undefined,\n compactType: CompactType,\n cols: number,\n): Layout {\n // If this is static and not explicitly enabled as draggable,\n // no move is possible, so we can short-circuit this immediately.\n if (l.static && l.isDraggable !== true) {\n return layout;\n }\n\n // Short-circuit if nothing to do.\n if (l.y === y && l.x === x) {\n return layout;\n }\n\n log(\n `Moving element ${l.id} to [${String(x)},${String(y)}] from [${l.x},${\n l.y\n }]`,\n );\n const oldX = l.x;\n const oldY = l.y;\n\n // This is quite a bit faster than extending the object\n if (typeof x === 'number') {\n l.x = x;\n }\n if (typeof y === 'number') {\n l.y = y;\n }\n l.moved = true;\n\n // If this collides with anything, move it.\n // When doing this comparison, we have to sort the items we compare with\n // to ensure, in the case of multiple collisions, that we're getting the\n // nearest collision.\n let sorted = sortLayoutItems(layout, compactType);\n const movingUp =\n compactType === 'vertical' && typeof y === 'number'\n ? oldY >= y\n : compactType === 'horizontal' && typeof x === 'number'\n ? oldX >= x\n : false;\n if (movingUp) {\n sorted = sorted.reverse();\n }\n const collisions = getAllCollisions(sorted, l);\n\n // There was a collision; abort\n if (preventCollision && collisions.length) {\n log(`Collision prevented on ${l.id}, reverting.`);\n l.x = oldX;\n l.y = oldY;\n l.moved = false;\n return layout;\n }\n\n // Move each item that collides away from this element.\n for (let i = 0, len = collisions.length; i < len; i++) {\n const collision = collisions[i];\n log(\n `Resolving collision between ${l.id} at [${l.x},${l.y}] and ${\n collision.id\n } at [${collision.x},${collision.y}]`,\n );\n\n // Short circuit so we can't infinite loop\n if (collision.moved) {\n continue;\n }\n\n // Don't move static items - we have to move *this* element away\n if (collision.static) {\n layout = moveElementAwayFromCollision(\n layout,\n collision,\n l,\n isUserAction,\n compactType,\n cols,\n );\n } else {\n layout = moveElementAwayFromCollision(\n layout,\n l,\n collision,\n isUserAction,\n compactType,\n cols,\n );\n }\n }\n\n return layout;\n}\n\n/**\n * This is where the magic needs to happen - given a collision, move an element away from the collision.\n * We attempt to move it up if there's room, otherwise it goes below.\n *\n * @param {Array} layout Full layout to modify.\n * @param {LayoutItem} collidesWith Layout item we're colliding with.\n * @param {LayoutItem} itemToMove Layout item we're moving.\n */\nexport function moveElementAwayFromCollision(\n layout: Layout,\n collidesWith: LayoutItem,\n itemToMove: LayoutItem,\n isUserAction: boolean | null | undefined,\n compactType: CompactType,\n cols: number,\n): Layout {\n const compactH = compactType === 'horizontal';\n // Compact vertically if not set to horizontal\n const compactV = compactType !== 'horizontal';\n const preventCollision = collidesWith.static; // we're already colliding (not for static items)\n\n // If there is enough space above the collision to put this element, move it there.\n // We only do this on the main collision as this can get funky in cascades and cause\n // unwanted swapping behavior.\n if (isUserAction) {\n // Reset isUserAction flag because we're not in the main collision anymore.\n isUserAction = false;\n\n // Make a mock item so we don't modify the item here, only modify in moveElement.\n const fakeItem: LayoutItem = {\n x: compactH\n ? Math.max(collidesWith.x - itemToMove.w, 0)\n : itemToMove.x,\n y: compactV\n ? Math.max(collidesWith.y - itemToMove.h, 0)\n : itemToMove.y,\n w: itemToMove.w,\n h: itemToMove.h,\n id: '-1',\n };\n\n // No collision? If so, we can go up there; otherwise, we'll end up moving down as normal\n if (!getFirstCollision(layout, fakeItem)) {\n log(\n `Doing reverse collision on ${itemToMove.id} up to [${\n fakeItem.x\n },${fakeItem.y}].`,\n );\n return moveElement(\n layout,\n itemToMove,\n compactH ? fakeItem.x : undefined,\n compactV ? fakeItem.y : undefined,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n }\n }\n\n return moveElement(\n layout,\n itemToMove,\n compactH ? itemToMove.x + 1 : undefined,\n compactV ? itemToMove.y + 1 : undefined,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n}\n\n/**\n * Helper to convert a number to a percentage string.\n *\n * @param {Number} num Any number\n * @return {String} That number as a percentage.\n */\nexport function perc(num: number): string {\n return num * 100 + '%';\n}\n\nexport function setTransform({top, left, width, height}: Position): Object {\n // Replace unitless items with px\n const translate = `translate(${left}px,${top}px)`;\n return {\n transform: translate,\n WebkitTransform: translate,\n MozTransform: translate,\n msTransform: translate,\n OTransform: translate,\n width: `${width}px`,\n height: `${height}px`,\n position: 'absolute',\n };\n}\n\nexport function setTopLeft({top, left, width, height}: Position): Object {\n return {\n top: `${top}px`,\n left: `${left}px`,\n width: `${width}px`,\n height: `${height}px`,\n position: 'absolute',\n };\n}\n\n/**\n * Get layout items sorted from top left to right and down.\n *\n * @return {Array} Array of layout objects.\n * @return {Array} Layout, sorted static items first.\n */\nexport function sortLayoutItems(\n layout: Layout,\n compactType: CompactType,\n): Layout {\n if (compactType === 'horizontal') {\n return sortLayoutItemsByColRow(layout);\n } else {\n return sortLayoutItemsByRowCol(layout);\n }\n}\n\nexport function sortLayoutItemsByRowCol(layout: Layout): Layout {\n return ([] as any[]).concat(layout).sort(function(a, b) {\n if (a.y > b.y || (a.y === b.y && a.x > b.x)) {\n return 1;\n } else if (a.y === b.y && a.x === b.x) {\n // Without this, we can get different sort results in IE vs. Chrome/FF\n return 0;\n }\n return -1;\n });\n}\n\nexport function sortLayoutItemsByColRow(layout: Layout): Layout {\n return ([] as any[]).concat(layout).sort(function(a, b) {\n if (a.x > b.x || (a.x === b.x && a.y > b.y)) {\n return 1;\n }\n return -1;\n });\n}\n\n/**\n * Validate a layout. Throws errors.\n *\n * @param {Array} layout Array of layout items.\n * @param {String} [contextName] Context name for errors.\n * @throw {Error} Validation error.\n */\nexport function validateLayout(\n layout: Layout,\n contextName: string = 'Layout',\n): void {\n const subProps = ['x', 'y', 'w', 'h'];\n if (!Array.isArray(layout)) {\n throw new Error(contextName + ' must be an array!');\n }\n for (let i = 0, len = layout.length; i < len; i++) {\n const item = layout[i];\n for (let j = 0; j < subProps.length; j++) {\n if (typeof item[subProps[j]] !== 'number') {\n throw new Error(\n 'ReactGridLayout: ' +\n contextName +\n '[' +\n i +\n '].' +\n subProps[j] +\n ' must be a number!',\n );\n }\n }\n if (item.id && typeof item.id !== 'string') {\n throw new Error(\n 'ReactGridLayout: ' +\n contextName +\n '[' +\n i +\n '].i must be a string!',\n );\n }\n if (item.static !== undefined && typeof item.static !== 'boolean') {\n throw new Error(\n 'ReactGridLayout: ' +\n contextName +\n '[' +\n i +\n '].static must be a boolean!',\n );\n }\n }\n}\n\n// Flow can't really figure this out, so we just use Object\nexport function autoBindHandlers(el: Object, fns: Array<string>): void {\n fns.forEach(key => (el[key] = el[key].bind(el)));\n}\n\nfunction log(...args) {\n if (!DEBUG) {\n return;\n }\n \n console.log(...args);\n}\n\nexport const noop = () => {};\n","/** Cached result of whether the user's browser supports passive event listeners. */\nlet supportsPassiveEvents: boolean;\n\n/**\n * Checks whether the user's browser supports passive event listeners.\n * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function ktdSupportsPassiveEventListeners(): boolean {\n if (supportsPassiveEvents == null && typeof window !== 'undefined') {\n try {\n window.addEventListener('test', null!, Object.defineProperty({}, 'passive', {\n get: () => supportsPassiveEvents = true\n }));\n } finally {\n supportsPassiveEvents = supportsPassiveEvents || false;\n }\n }\n\n return supportsPassiveEvents;\n}\n\n/**\n * Normalizes an `AddEventListener` object to something that can be passed\n * to `addEventListener` on any browser, no matter whether it supports the\n * `options` parameter.\n * @param options Object to be normalized.\n */\nexport function ktdNormalizePassiveListenerOptions(options: AddEventListenerOptions):\n AddEventListenerOptions | boolean {\n return ktdSupportsPassiveEventListeners() ? options : !!options.capture;\n}\n","import { fromEvent, iif, merge, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { ktdNormalizePassiveListenerOptions } from './passive-listeners';\n\n/** Options that can be used to bind a passive event listener. */\nconst passiveEventListenerOptions = ktdNormalizePassiveListenerOptions({ passive: true });\n\n/** Options that can be used to bind an active event listener. */\nconst activeEventListenerOptions = ktdNormalizePassiveListenerOptions({ passive: false });\n\nlet isMobile: boolean | null = null;\n\nexport function ktdIsMobileOrTablet(): boolean {\n if (isMobile != null) {\n return isMobile;\n }\n\n // Generic match pattern to identify mobile or tablet devices\n const isMobileDevice = /Android|webOS|BlackBerry|Windows Phone|iPad|iPhone|iPod/i.test(navigator.userAgent);\n\n // Since IOS 13 is not safe to just check for the generic solution.\n // See: https://stackoverflow.com/questions/58019463/how-to-detect-device-name-in-safari-on-ios-13-while-it-doesnt-show-the-correct\n const isIOSMobileDevice =\n /iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n\n isMobile = isMobileDevice || isIOSMobileDevice;\n\n return isMobile;\n}\n\nexport function ktdIsMouseEvent(event: any): event is MouseEvent {\n return (event as MouseEvent).clientX != null;\n}\n\nexport function ktdIsTouchEvent(event: any): event is TouchEvent {\n return (event as TouchEvent).touches != null && (event as TouchEvent).touches.length != null;\n}\n\nexport function ktdPointerClientX(event: MouseEvent | TouchEvent): number {\n return ktdIsMouseEvent(event) ? event.clientX : event.touches[0].clientX;\n}\n\nexport function ktdPointerClientY(event: MouseEvent | TouchEvent): number {\n return ktdIsMouseEvent(event) ? event.clientY : event.touches[0].clientY;\n}\n\nexport function ktdPointerClient(event: MouseEvent | TouchEvent): { clientX: number; clientY: number } {\n return {\n clientX: ktdIsMouseEvent(event) ? event.clientX : event.touches[0].clientX,\n clientY: ktdIsMouseEvent(event) ? event.clientY : event.touches[0].clientY\n };\n}\n\nexport function ktdIsMouseEventOrMousePointerEvent(event: MouseEvent | TouchEvent | PointerEvent): boolean {\n return (\n event.type === 'mousedown' || (event.type === 'pointerdown' && (event as PointerEvent).pointerType === 'mouse')\n );\n}\n\n/** Returns true if browser supports pointer events */\nexport function ktdSupportsPointerEvents(): boolean {\n return !!window.PointerEvent;\n}\n\n/**\n * Emits when a mousedown or touchstart emits. Avoids conflicts between both events.\n * @param element, html element where to listen the events.\n * @param touchNumber number of the touch to track the event, default to the first one.\n */\nfunction ktdMouseOrTouchDown(element, touchNumber = 1): Observable<MouseEvent | TouchEvent> {\n return iif(\n () => ktdIsMobileOrTablet(),\n fromEvent<TouchEvent>(element, 'touchstart', passiveEventListenerOptions as AddEventListenerOptions).pipe(\n filter((touchEvent) => touchEvent.touches.length === touchNumber)\n ),\n fromEvent<MouseEvent>(element, 'mousedown', activeEventListenerOptions as AddEventListenerOptions).pipe(\n filter((mouseEvent: MouseEvent) => \n /**\n * 0 : Left mouse button\n * 1 : Wheel button or middle button (if present)\n * 2 : Right mouse button\n */\n mouseEvent.button === 0 // Mouse down to be only fired if is left click\n )\n )\n );\n}\n\n/**\n * Emits when a 'mousemove' or a 'touchmove' event gets fired.\n * @param element, html element where to listen the events.\n * @param touchNumber number of the touch to track the event, default to the first one.\n */\nfunction ktdMouseOrTouchMove(element: HTMLElement, touchNumber = 1): Observable<MouseEvent | TouchEvent> {\n return iif(\n () => ktdIsMobileOrTablet(),\n fromEvent<TouchEvent>(element, 'touchmove', activeEventListenerOptions as AddEventListenerOptions).pipe(\n filter((touchEvent) => touchEvent.touches.length === touchNumber)\n ),\n fromEvent<MouseEvent>(element, 'mousemove', activeEventListenerOptions as AddEventListenerOptions)\n );\n}\n\nexport function ktdTouchEnd(element, touchNumber = 1): Observable<TouchEvent> {\n return merge(\n fromEvent<TouchEvent>(element, 'touchend').pipe(\n filter((touchEvent) => touchEvent.touches.length === touchNumber - 1)\n ),\n fromEvent<TouchEvent>(element, 'touchcancel').pipe(\n filter((touchEvent) => touchEvent.touches.length === touchNumber - 1)\n )\n );\n}\n\n/**\n * Emits when a there is a 'mouseup' or the touch ends.\n * @param element, html element where to listen the events.\n * @param touchNumber number of the touch to track the event, default to the first one.\n */\nfunction ktdMouserOrTouchEnd(element: HTMLElement, touchNumber = 1): Observable<MouseEvent | TouchEvent> {\n return iif(\n () => ktdIsMobileOrTablet(),\n ktdTouchEnd(element, touchNumber),\n fromEvent<MouseEvent>(element, 'mouseup')\n );\n}\n\n/**\n * Emits when a 'pointerdown' event occurs (only for the primary pointer). Fallbacks to 'mousemove' or a 'touchmove' if pointer events are not supported.\n * @param element, html element where to listen the events.\n */\nexport function ktdPointerDown(element): Observable<MouseEvent | TouchEvent | PointerEvent> {\n if (!ktdSupportsPointerEvents()) {\n return ktdMouseOrTouchDown(element);\n }\n\n return fromEvent<PointerEvent>(element, 'pointerdown', activeEventListenerOptions as AddEventListenerOptions).pipe(\n filter((pointerEvent) => pointerEvent.isPrimary)\n );\n}\n\n/**\n * Emits when a 'pointermove' event occurs (only for the primary pointer). Fallbacks to 'mousemove' or a 'touchmove' if pointer events are not supported.\n * @param element, html element where to listen the events.\n */\nexport function ktdPointerMove(element): Observable<MouseEvent | TouchEvent | PointerEvent> {\n if (!ktdSupportsPointerEvents()) {\n return ktdMouseOrTouchMove(element);\n }\n return fromEvent<PointerEvent>(element, 'pointermove', activeEventListenerOptions as AddEventListenerOptions).pipe(\n filter((pointerEvent) => pointerEvent.isPrimary)\n );\n}\n\n/**\n * Emits when a 'pointerup' event occurs (only for the primary pointer). Fallbacks to 'mousemove' or a 'touchmove' if pointer events are not supported.\n * @param element, html element where to listen the events.\n */\nexport function ktdPointerUp(element): Observable<MouseEvent | TouchEvent | PointerEvent> {\n if (!ktdSupportsPointerEvents()) {\n return ktdMouserOrTouchEnd(element);\n }\n return fromEvent<PointerEvent>(element, 'pointerup').pipe(filter((pointerEvent) => pointerEvent.isPrimary));\n}\n\n","import { compact, CompactType, getFirstCollision, Layout, LayoutItem, moveElement } from './react-grid-layout.utils';\nimport {\n KtdDraggingData,\n KtdGridCfg,\n KtdGridCompactType,\n KtdGridItemRect,\n KtdGridLayout,\n KtdGridLayoutItem\n} from '../grid.definitions';\nimport { ktdPointerClientX, ktdPointerClientY } from './pointer.utils';\nimport { KtdDictionary } from '../../types';\nimport { KtdGridItemComponent } from '../grid-item/grid-item.component';\n\n/** Tracks items by id. This function is mean to be used in conjunction with the ngFor that renders the 'buw-grid-items' */\nexport function ktdTrackById(_index: number, item: { id: string }): any {\n return item.id;\n}\n\n/** Given a layout, the gridHeight and the gap return the resulting rowHeight */\nexport function ktdGetGridItemRowHeight(layout: KtdGridLayout, gridHeight: number, gap: number): number {\n const numberOfRows = layout.reduce((acc, cur) => Math.max(acc, Math.max(cur.y + cur.h, 0)), 0);\n const gapTotalHeight = (numberOfRows - 1) * gap;\n const gridHeightMinusGap = gridHeight - gapTotalHeight;\n return gridHeightMinusGap / numberOfRows;\n}\n\n/**\n * Call react-grid-layout utils 'compact()' function and return the compacted layout.\n * @param layout to be compacted.\n * @param compactType, type of compaction.\n * @param cols, number of columns of the grid.\n */\nexport function ktdGridCompact(layout: KtdGridLayout, compactType: KtdGridCompactType, cols: number): KtdGridLayout {\n return (\n compact(layout, compactType, cols)\n // Prune react-grid-layout compact extra properties.\n .map((item) => ({\n id: item.id,\n x: item.x,\n y: item.y,\n w: item.w,\n h: item.h,\n minW: item.minW,\n minH: item.minH,\n maxW: item.maxW,\n maxH: item.maxH\n }))\n );\n}\n\nfunction screenXToGridX(screenXPos: number, cols: number, width: number, gap: number): number {\n const widthMinusGaps = width - gap * (cols - 1);\n const itemWidth = widthMinusGaps / cols;\n const widthMinusOneItem = width - itemWidth;\n const colWidthWithGap = widthMinusOneItem / (cols - 1);\n return Math.round(screenXPos / colWidthWithGap);\n}\n\nfunction screenYToGridY(screenYPos: number, rowHeight: number, _height: number, gap: number): number {\n return Math.round(screenYPos / (rowHeight + gap));\n}\n\nfunction screenWidthToGridWidth(gridScreenWidth: number, cols: number, width: number, gap: number): number {\n const widthMinusGaps = width - gap * (cols - 1);\n const itemWidth = widthMinusGaps / cols;\n const gridScreenWidthMinusFirst = gridScreenWidth - itemWidth;\n return Math.round(gridScreenWidthMinusFirst / (itemWidth + gap)) + 1;\n}\n\nfunction screenHeightToGridHeight(gridScreenHeight: number, rowHeight: number, _height: number, gap: number): number {\n const gridScreenHeightMinusFirst = gridScreenHeight - rowHeight;\n return Math.round(gridScreenHeightMinusFirst / (rowHeight + gap)) + 1;\n}\n\n/** Returns a Dictionary where the key is the id and the value is the change applied to that item. If no changes Dictionary is empty. */\nexport function ktdGetGridLayoutDiff(\n gridLayoutA: KtdGridLayoutItem[],\n gridLayoutB: KtdGridLayoutItem[]\n): KtdDictionary<{ change: 'move' | 'resize' | 'moveresize' }> {\n const diff: KtdDictionary<{ change: 'move' | 'resize' | 'moveresize' }> = {};\n\n gridLayoutA.forEach((itemA) => {\n const itemB = gridLayoutB.find((_itemB) => _itemB.id === itemA.id);\n if (itemB != null) {\n const posChanged = itemA.x !== itemB.x || itemA.y !== itemB.y;\n const sizeChanged = itemA.w !== itemB.w || itemA.h !== itemB.h;\n const change: 'move' | 'resize' | 'moveresize' | null =\n posChanged && sizeChanged ? 'moveresize' : posChanged ? 'move' : sizeChanged ? 'resize' : null;\n if (change) {\n diff[itemB.id] = { change };\n }\n }\n });\n return diff;\n}\n\n/**\n * Given the grid config & layout data and the current drag position & information, returns the corresponding layout and drag item position\n * @param gridItem grid item that is been dragged\n * @param config current grid configuration\n * @param compactionType type of compaction that will be performed\n * @param draggingData contains all the information about the drag\n */\nexport function ktdGridItemDragging(\n gridItem: KtdGridItemComponent,\n config: KtdGridCfg,\n compactionType: CompactType,\n draggingData: KtdDraggingData\n): { layout: KtdGridLayoutItem[]; draggedItemPos: KtdGridItemRect } {\n const { pointerDownEvent, pointerDragEvent, gridElemClientRect, dragElemClientRect, scrollDifference } =\n draggingData;\n\n const gridItemId = gridItem.id;\n\n const draggingElemPrevItem = config.layout.find((item) => item.id === gridItemId)!;\n\n const clientStartX = ktdPointerClientX(pointerDownEvent);\n const clientStartY = ktdPointerClientY(pointerDownEvent);\n const clientX = ktdPointerClientX(pointerDragEvent);\n const clientY = ktdPointerClientY(pointerDragEvent);\n\n const offsetX = clientStartX - dragElemClientRect.left;\n const offsetY = clientStartY - dragElemClientRect.top;\n\n // Grid element positions taking into account the possible scroll total difference from the beginning.\n const gridElementLeftPosition = gridElemClientRect.left + scrollDifference.left;\n const gridElementTopPosition = gridElemClientRect.top + scrollDifference.top;\n\n // Calculate position relative to the grid element.\n const gridRelXPos = clientX - gridElementLeftPosition - offsetX;\n const gridRelYPos = clientY - gridElementTopPosition - offsetY;\n\n const rowHeightInPixels =\n config.rowHeight === 'fit'\n ? ktdGetGridItemRowHeight(config.layout, config.height ?? gridElemClientRect.height, config.gap)\n : config.rowHeight;\n\n // Get layout item position\n const layoutItem: KtdGridLayoutItem = {\n ...draggingElemPrevItem,\n x: screenXToGridX(gridRelXPos, config.cols, gridElemClientRect.width, config.gap),\n y: screenYToGridY(gridRelYPos, rowHeightInPixels, gridElemClientRect.height, config.gap)\n };\n\n // Correct the values if they overflow, since 'moveElement' function doesn't do it\n layoutItem.x = Math.max(0, layoutItem.x);\n layoutItem.y = Math.max(0, layoutItem.y);\n if (layoutItem.x + layoutItem.w > config.cols) {\n layoutItem.x = Math.max(0, config.cols - layoutItem.w);\n }\n\n // Parse to LayoutItem array data in order to use 'react.grid-layout' utils\n const layoutItems: LayoutItem[] = config.layout;\n const draggedLayoutItem: LayoutItem = layoutItems.find((item) => item.id === gridItemId)!;\n\n let newLayoutItems: LayoutItem[] = moveElement(\n layoutItems,\n draggedLayoutItem,\n layoutItem.x,\n layoutItem.y,\n true,\n config.preventCollision,\n compactionType,\n config.cols\n );\n\n newLayoutItems = compact(newLayoutItems, compactionType, config.cols);\n\n return {\n layout: newLayoutItems,\n draggedItemPos: {\n top: gridRelYPos,\n left: gridRelXPos,\n width: dragElemClientRect.width,\n height: dragElemClientRect.height\n }\n };\n}\n\n/**\n * Given the grid config & layout data and the current drag position & information, returns the corresponding layout and drag item position\n * @param gridItem grid item that is been dragged\n * @param config current grid configuration\n * @param compactionType type of compaction that will be performed\n * @param draggingData contains all the information about the drag\n */\nexport function ktdGridItemResizing(\n gridItem: KtdGridItemComponent,\n config: KtdGridCfg,\n compactionType: CompactType,\n draggingData: KtdDraggingData\n): { layout: KtdGridLayoutItem[]; draggedItemPos: KtdGridItemRect } {\n const { pointerDownEvent, pointerDragEvent, gridElemClientRect, dragElemClientRect, scrollDifference } =\n draggingData;\n const gridItemId = gridItem.id;\n\n const clientStartX = ktdPointerClientX(pointerDownEvent);\n const clientStartY = ktdPointerClientY(pointerDownEvent);\n const clientX = ktdPointerClientX(pointerDragEvent);\n const clientY = ktdPointerClientY(pointerDragEvent);\n\n // Get the difference between the mouseDown and the position 'right' of the resize element.\n const resizeElemOffsetX = dragElemClientRect.width - (clientStartX - dragElemClientRect.left);\n const resizeElemOffsetY = dragElemClientRect.height - (clientStartY - dragElemClientRect.top);\n\n const draggingElemPrevItem = config.layout.find((item) => item.id === gridItemId)!;\n const width = clientX + resizeElemOffsetX - (dragElemClientRect.left + scrollDifference.left);\n const height = clientY + resizeElemOffsetY - (dragElemClientRect.top + scrollDifference.top);\n\n const rowHeightInPixels =\n config.rowHeight === 'fit'\n ? ktdGetGridItemRowHeight(config.layout, config.height ?? gridElemClientRect.height, config.gap)\n : config.rowHeight;\n\n // Get layout item grid position\n const layoutItem: KtdGridLayoutItem = {\n ...draggingElemPrevItem,\n w: screenWidthToGridWidth(width, config.cols, gridElemClientRect.width, config.gap),\n h: screenHeightToGridHeight(height, rowHeightInPixels, gridElemClientRect.height, config.gap)\n };\n\n layoutItem.w = limitNumberWithinRange(\n layoutItem.w,\n gridItem.minW ?? layoutItem.minW,\n gridItem.maxW ?? layoutItem.maxW\n );\n layoutItem.h = limitNumberWithinRange(\n layoutItem.h,\n gridItem.minH ?? layoutItem.minH,\n gridItem.maxH ?? layoutItem.maxH\n );\n\n if (layoutItem.x + layoutItem.w > config.cols) {\n layoutItem.w = Math.max(1, config.cols - layoutItem.x);\n }\n\n if (config.preventCollision) {\n const maxW = layoutItem.w;\n const maxH = layoutItem.h;\n\n let colliding = hasCollision(config.layout, layoutItem);\n let shrunkDimension: 'w' | 'h' | undefined;\n\n while (colliding) {\n shrunkDimension = getDimensionToShrink(layoutItem, shrunkDimension);\n layoutItem[shrunkDimension]--;\n colliding = hasCollision(config.layout, layoutItem);\n }\n\n if (shrunkDimension === 'w') {\n layoutItem.h = maxH;\n\n colliding = hasCollision(config.layout, layoutItem);\n while (colliding) {\n layoutItem.h--;\n colliding = hasCollision(config.layout, layoutItem);\n }\n }\n if (shrunkDimension === 'h') {\n layoutItem.w = maxW;\n\n colliding = hasCollision(config.layout, layoutItem);\n while (colliding) {\n layoutItem.w--;\n colliding = hasCollision(config.layout, layoutItem);\n }\n }\n }\n\n const newLayoutItems: LayoutItem[] = config.layout.map((item): any => (item.id === gridItemId ? layoutItem : item));\n\n return {\n layout: compact(newLayoutItems, compactionType, config.cols),\n draggedItemPos: {\n top: dragElemClientRect.top - gridElemClientRect.top,\n left: dragElemClientRect.left - gridElemClientRect.left,\n width,\n height\n }\n };\n}\n\nfunction hasCollision(layout: Layout, layoutItem: LayoutItem): boolean {\n return !!getFirstCollision(layout, layoutItem);\n}\n\nfunction getDimensionToShrink(layoutItem, lastShrunk): 'w' | 'h' {\n if (layoutItem.h <= 1) {\n return 'w';\n }\n if (layoutItem.w <= 1) {\n return 'h';\n }\n\n return lastShrunk === 'w' ? 'h' : 'w';\n}\n\n/**\n * Given the current number and min/max values, returns the number within the range\n * @param number can be any numeric value\n * @param min minimum value of range\n * @param max maximum value of range\n */\nfunction limitNumberWithinRange(num: number, min: number = 1, max: number = Infinity): any {\n return Math.min(Math.max(num, min < 1 ? 1 : min), max);\n}\n\n/** Returns true if both item1 and item2 KtdGridLayoutItems are equivalent. */\nexport function ktdGridItemLayoutItemAreEqual(item1: KtdGridLayoutItem, item2: KtdGridLayoutItem): boolean {\n return (\n item1.id === item2.id &&\n item1.x === item2.x &&\n item1.y === item2.y &&\n item1.w === item2.w &&\n item1.h === item2.h\n );\n}\n\n","import { Directive, ElementRef, InjectionToken, inject } from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `KtdGridDragHandle`. It serves as\n * alternative token to the actual `KtdGridDragHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const KTD_GRID_DRAG_HANDLE = new InjectionToken<KtdGridDragHandle>('KtdGridDragHandle');\n\n/** Handle that can be used to drag a KtdGridItem instance. */\n@Directive({\n selector: '[buwGridDragHandle]', \n host: {\n class: 'buw-grid-drag-handle'\n },\n providers: [{ provide: KTD_GRID_DRAG_HANDLE, useExisting: KtdGridDragHandle }],\n standalone: false\n})\n \nexport class KtdGridDragHandle {\n element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n\n constructor() {}\n}\n\n","import { Directive, ElementRef, InjectionToken, inject } from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `KtdGridResizeHandle`. It serves as\n * alternative token to the actual `KtdGridResizeHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const KTD_GRID_RESIZE_HANDLE = new InjectionToken<KtdGridResizeHandle>('KtdGridResizeHandle');\n\n/** Handle that can be used to drag a KtdGridItem instance. */\n@Directive({\n selector: '[buwGridResizeHandle]', \n host: {\n class: 'buw-grid-resize-handle'\n },\n providers: [{ provide: KTD_GRID_RESIZE_HANDLE, useExisting: KtdGridResizeHandle }],\n standalone: false\n})\n \nexport class KtdGridResizeHandle {\n element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n\n constructor() {}\n}\n\n","import { Directive, InjectionToken, Input, TemplateRef, inject } from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `KtdGridItemPlaceholder`. It serves as\n * alternative token to the actual `KtdGridItemPlaceholder` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const KTD_GRID_ITEM_PLACEHOLDER = new InjectionToken<KtdGridItemPlaceholder>('KtdGridItemPlaceholder');\n\n/** Directive that can be used to create a custom placeholder for a KtdGridItem instance. */\n@Directive({\n selector: 'ng-template[buwGridItemPlaceholder]', \n host: {\n class: 'buw-grid-item-placeholder-content'\n },\n providers: [{ provide: KTD_GRID_ITEM_PLACEHOLDER, useExisting: KtdGridItemPlaceholder }],\n standalone: false\n})\n \nexport class KtdGridItemPlaceholder<T = any> {\n templateRef = inject<TemplateRef<T>>(TemplateRef);\n\n /** Context data to be added to the placeholder template instance. */\n @Input() data: T;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n constructor() {}\n}\n\n"," \n/**\n * Type describing the allowed values for a boolean input.\n * @docs-private\n */\nexport type BooleanInput = string | boolean | null | undefined;\n\n/** Coerces a data-bound value (typically a string) to a boolean. */\nexport function coerceBooleanProperty(value: any): boolean {\n return value != null && `${value}` !== 'false';\n}\n","/* eslint-disable */\nexport type NumberInput = string | number | null | undefined;\n\n/** Coerces a data-bound value (typically a string) to a number. */\nexport function coerceNumberProperty(value: any): number;\nexport function coerceNumberProperty<D>(value: any, fallback: D): number | D;\nexport function coerceNumberProperty(value: any, fallbackValue = 0) {\n return _isNumberValue(value) ? Number(value) : fallbackValue;\n}\n\n/**\n * Whether the provided value is considered a number.\n * @docs-private\n */\nexport function _isNumberValue(value: any): boolean {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n return !isNaN(parseFloat(value as any)) && !isNaN(Number(value));\n}\n","import { InjectionToken } from '@angular/core';\nimport { CompactType } from './utils/react-grid-layout.utils';\nimport { KtdClientRect } from './utils/client-rect';\n\nexport interface KtdGridLayoutItem {\n id: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number \n}\n\nexport type KtdGridCompactType = CompactType;\n\nexport interface KtdGridBackgroundCfg {\n show: 'never' | 'always' | 'whenDragging';\n borderColor?: string;\n gapColor?: string;\n rowColor?: string;\n columnColor?: string;\n borderWidth?: number;\n}\n\nexport interface KtdGridCfg {\n cols: number;\n rowHeight: number | 'fit'; // row height in pixels\n height?: number | null;\n layout: KtdGridLayoutItem[];\n preventCollision: boolean;\n gap: number;\n}\n\nexport type KtdGridLayout = KtdGridLayoutItem[];\n\n// TODO: Remove this interface. If can't remove, move and rename this interface in the core module or similar.\nexport interface KtdGridItemRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface KtdGridItemRenderData<T = number | string> {\n id: string;\n top: T;\n left: T;\n width: T;\n height: T;\n}\n\n/**\n * We inject a token because of the 'circular dependency issue warning'. In case we don't had this issue with the circular dependency, we could just\n * import KtdGridComponent on KtdGridItem and execute the needed function to get the rendering data.\n */\nexport type KtdGridItemRenderDataTokenType = (id: string) => KtdGridItemRenderData<string>;\nexport const GRID_ITEM_GET_RENDER_DATA_TOKEN: InjectionToken<KtdGridItemRenderDataTokenType> = new InjectionToken(\n 'GRID_ITEM_GET_RENDER_DATA_TOKEN'\n);\n\nexport interface KtdDraggingData {\n pointerDownEvent: MouseEvent | TouchEvent;\n pointerDragEvent: MouseEvent | TouchEvent;\n gridElemClientRect: KtdClientRect;\n dragElemClientRect: KtdClientRect;\n scrollDifference: { top: number; left: number };\n}\n\n","import { Injectable, NgZone, OnDestroy, inject } from '@angular/core';\nimport { ktdNormalizePassiveListenerOptions } from './utils/passive-listeners';\nimport { fromEvent, iif, Observable, Subject, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { ktdIsMobileOrTablet, ktdSupportsPointerEvents } from './utils/pointer.utils';\n\n/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions = ktdNormalizePassiveListenerOptions({\n passive: false,\n capture: true\n});\n\n@Injectable({ providedIn: 'root' })\nexport class KtdGridService implements OnDestroy {\n touchMove$: Observable<TouchEvent>;\n \n private ngZone = inject(NgZone);\n private touchMoveSubject: Subject<TouchEvent> = new Subject<TouchEvent>();\n private touchMoveSubscription: Subscription; \n\n constructor() {\n this.touchMove$ = this.touchMoveSubject.asObservable();\n this.registerTouchMoveSubscription();\n }\n\n ngOnDestroy(): void {\n this.touchMoveSubscription.unsubscribe();\n }\n\n mouseOrTouchMove$(element): Observable<MouseEvent | TouchEvent> {\n if (!ktdSupportsPointerEvents()) {\n return iif(\n () => ktdIsMobileOrTablet(),\n this.touchMove$,\n fromEvent<MouseEvent>(element, 'mousemove', activeCapturingEventOptions as AddEventListenerOptions)\n // TODO: Fix rxjs typings, boolean should be a good param too.\n );\n }\n\n return fromEvent<MouseEvent>(element, 'pointermove', activeCapturingEventOptions as AddEventListenerOptions);\n }\n\n private registerTouchMoveSubscription(): void {\n // The `touchmove` event gets bound once, ahead of time, because WebKit\n // won't preventDefault on a dynamically-added `touchmove` listener.\n // See https://bugs.webkit.org/show_bug.cgi?id=184250.\n this.touchMoveSubscription = this.ngZone.runOutsideAngular(() =>\n // The event handler has to be explicitly active,\n // because newer browsers make it passive by default.\n fromEvent(document, 'touchmove', activeCapturingEventOptions as AddEventListenerOptions)\n // TODO: Fix rxjs typings, boolean should be a good param too.\n .pipe(filter((touchEvent: any) => (touchEvent as TouchEvent).touches.length === 1))\n .subscribe((touchEvent: TouchEvent) => this.touchMoveSubject.next(touchEvent))\n );\n }\n}\n\n","import { NgZone } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n/** Runs source observable outside the zone */\nexport function ktdOutsideZone<T>(zone: NgZone) {\n return (source: Observable<T>) =>\n new Observable<T>((observer) => zone.runOutsideAngular<Subscription>(() => source.subscribe(observer)));\n}\n\n/** Rxjs operator that makes source observable to no emit any data */\nexport function ktdNoEmit() {\n return (source$: Observable<any>): Observable<any> => source$.pipe(filter(() => false));\n}\n\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n Renderer2,\n ViewChild,\n inject\n} from '@angular/core';\nimport { BehaviorSubject, NEVER, Observable, Subject, Subscription, iif, merge } from 'rxjs';\nimport { exhaustMap, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { BooleanInput, coerceBooleanProperty } from '../coercion/boolean-property';\nimport { NumberInput, coerceNumberProperty } from '../coercion/number-property';\nimport { KTD_GRID_DRAG_HANDLE, KtdGridDragHandle } from '../directives/drag-handle';\nimport { KTD_GRID_ITEM_PLACEHOLDER, KtdGridItemPlaceholder } from '../directives/placeholder';\nimport { KTD_GRID_RESIZE_HANDLE, KtdGridResizeHandle } from '../directives/resize-handle';\nimport { GRID_ITEM_GET_RENDER_DATA_TOKEN, KtdGridItemRenderDataTokenType } from '../grid.definitions';\nimport { KtdGridService } from '../grid.service';\nimport { ktdOutsideZone } from '../utils/operators';\nimport {\n ktdIsMouseEventOrMousePointerEvent,\n ktdPointerClient,\n ktdPointerDown,\n ktdPointerUp\n} from '../utils/pointer.utils';\nimport { BaseComponent } from 'barsa-novin-ray-core';\n\n@Component({\n selector: 'buw-grid-item',\n templateUrl: './grid-item.component.html',\n styleUrls: ['./grid-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class KtdGridItemComponent extends BaseComponent implements OnInit, OnDestroy, AfterContentInit {\n static ngAcceptInputType_minW: NumberInput;\n static ngAcceptInputType_minH: NumberInput;\n static ngAcceptInputType_maxW: NumberInput;\n static ngAcceptInputType_maxH: NumberInput;\n static ngAcceptInputType_draggable: BooleanInput;\n static ngAcceptInputType_resizable: BooleanInput;\n static ngAcceptInputType_dragStartThreshold: NumberInput;\n /** Elements that can be used to drag the grid item. */\n @ContentChildren(KTD_GRID_DRAG_HANDLE, { descendants: true }) _dragHandles: QueryList<KtdGridDragHandle>;\n @ContentChildren(KTD_GRID_RESIZE_HANDLE, { descendants: true }) _resizeHandles: QueryList<KtdGridResizeHandle>;\n @ViewChild('resizeElem', { static: true, read: ElementRef }) resizeElem: ElementRef;\n\n /** Template ref for placeholder */\n @ContentChild(KTD_GRID_ITEM_PLACEHOLDER) placeholder: KtdGridItemPlaceholder;\n\n /** Min and max size input properties. Any of these would 'override' the min/max values specified in the layout. */\n @Input() minW?: number;\n @Input() minH?: number;\n @Input() maxW?: number;\n @Input() maxH?: number;\n\n /** CSS transition style. Note that for more performance is preferable only make transition on transform property. */\n @Input() transition = 'transform 500ms ease, width 500ms ease, height 500ms ease';\n\n dragStart$: Observable<MouseEvent | TouchEvent>;\n resizeStart$: Observable<MouseEvent | TouchEvent>;\n\n private _dragStartThreshold = 0;\n private gridService = inject(KtdGridService);\n private renderer = inject(Renderer2);\n private ngZone = inject(NgZone);\n private getItemRenderData = inject<KtdGridItemRenderDataTokenType>(GRID_ITEM_GET_RENDER_DATA_TOKEN);\n /** Id of the grid item. This property is strictly compulsory. */\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(val: string) {\n this._id = val;\n }\n\n private _id: string;\n\n /** Minimum amount of pixels that the user should move before it starts the drag sequence. */\n @Input()\n get dragStartThreshold(): number {\n return this._dragStartThreshold;\n }\n\n set dragStartThreshold(val: number) {\n this._dragStartThreshold = coerceNumberProperty(val);\n }\n\n /** Whether the item is draggable or not. Defaults to true. Does not affect manual dragging using the startDragManually method. */\n @Input()\n get draggable(): boolean {\n return this._draggable;\n }\n\n set draggable(val: boolean) {\n this._draggable = coerceBooleanProperty(val);\n this._draggable$.next(this._draggable);\n }\n\n private _draggable = true;\n private _draggable$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(this._draggable);\n\n private _manualDragEvents$: Subject<MouseEvent | TouchEvent> = new Subject<MouseEvent | TouchEvent>();\n\n /** Whether the item is resizable or not. Defaults to true. */\n @Input()\n get resizable(): boolean {\n return this._resizable;\n }\n\n set resizable(val: boolean) {\n this._resizable = coerceBooleanProperty(val);\n this._resizable$.next(this._resizable);\n }\n\n private _resizable = true;\n private _resizable$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(this._resizable);\n\n private dragStartSubject: Subject<MouseEvent | TouchEvent> = new Subject<MouseEvent | TouchEvent>();\n private resizeStartSubject: Subject<MouseEvent | TouchEvent> = new Subject<MouseEvent | TouchEvent>();\n\n private subscriptions: Subscription[] = [];\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n\n constructor() {\n super();\n this.dragStart$ = this.dragStartSubject.asObservable();\n this.resizeStart$ = this.resizeStartSubject.asObservable();\n }\n\n ngOnInit(): void {\n const gridItemRenderData = this.getItemRenderData(this.id)!;\n this.setStyles(gridItemRenderData);\n }\n\n ngAfterContentInit(): void {\n this.subscriptions.push(\n this._dragStart$().subscribe(this.dragStartSubject),\n this._resizeStart$().subscribe(this.resizeStartSubject)\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n /**\n * To manually start dragging, route the desired pointer events to this method.\n * Dragging initiated by this method will work regardless of the value of the draggable Input.\n * It is the caller's responsibility to call this method with only the events that are desired to cause a drag.\n * For example, if you only want left clicks to cause a drag, it is your responsibility to filter out other mouse button events.\n * @param startEvent The pointer event that should initiate the drag.\n */\n startDragManually(startEvent: MouseEvent | TouchEvent): void {\n this._manualDragEvents$.next(startEvent);\n }\n\n setStyles({ top, left, width, height }: { top: string; left: string; width?: string; height?: string }): void {\n // transform is 6x times faster than top/left\n this.renderer.setStyle(this._el.nativeElement, 'transform', `translateX(${left}) translateY(${top})`);\n this.renderer.setStyle(this._el.nativeElement, 'display', `block`);\n this.renderer.setStyle(this._el.nativeElement, 'transition', this.transition);\n if (width != null) {\n this.renderer.setStyle(this._el.nativeElement, 'width', width);\n }\n if (height != null) {\n this.renderer.setStyle(this._el.nativeElement, 'height', height);\n }\n }\n\n private _dragStart$(): Observable<MouseEvent | TouchEvent> {\n return merge(\n this._manualDragEvents$,\n this._draggable$.pipe(\n switchMap((draggable) => {\n if (!draggable) {\n return NEVER;\n }\n return this._dragHandles.changes.pipe(\n startWith(this._dragHandles),\n switchMap((dragHandles: QueryList<KtdGridDragHandle>) =>\n iif(\n () => dragHandles.length > 0,\n merge(\n ...dragHandles\n .toArray()\n .map((dragHandle) => ktdPointerDown(dragHandle.element.nativeElement))\n ),\n ktdPointerDown(this._el.nativeElement)\n )\n )\n );\n })\n )\n ).pipe(\n exhaustMap((startEvent) => {\n // If the event started from an element with the native HTML drag&drop, it'll interfere\n // with our own dragging (e.g. `img` tags do it by default). Prevent the default action\n // to stop it from happening. Note that preventing on `dragstart` also seems to work, but\n // it's flaky and it fails if the user drags it away quickly. Also note that we only want\n // to do this for `mousedown` and `pointerdown` since doing the same for `touchstart` will\n // stop any `click` events from firing on touch devices.\n if (ktdIsMouseEventOrMousePointerEvent(startEvent)) {\n startEvent.preventDefault();\n }\n\n const startPointer = ktdPointerClient(startEvent);\n return this.gridService.mouseOrTouchMove$(document).pipe(\n takeUntil(ktdPointerUp(document)),\n ktdOutsideZone(this.ngZone),\n filter((moveEvent) => {\n moveEvent.preventDefault();\n const movePointer = ktdPointerClient(moveEvent);\n const distanceX = Math.abs(startPointer.clientX - movePointer.clientX);\n const distanceY = Math.abs(startPointer.clientY - movePointer.clientY);\n // When this conditions returns true mean that we are over threshold.\n return distanceX + distanceY >= this.dragStartThreshold;\n }),\n take(1),\n // Return the original start event\n map(() => startEvent)\n );\n })\n );\n }\n\n private _resizeStart$(): Observable<MouseEvent | TouchEvent> {\n return this._resizable$.pipe(\n switchMap((resizable) => {\n if (!resizable) {\n // Side effect to hide the resizeElem if resize is disabled.\n this.renderer.setStyle(this.resizeElem.nativeElement, 'display', 'none');\n return NEVER;\n } else {\n return this._resizeHandles.changes.pipe(\n startWith(this._resizeHandles),\n switchMap((resizeHandles: QueryList<KtdGridResizeHandle>) => {\n if (resizeHandles.length > 0) {\n // Side effect to hide the resizeElem if there are resize handles.\n this.renderer.setStyle(this.resizeElem.nativeElement, 'display', 'none');\n return merge(\n ...resizeHandles\n .toArray()\n .map((resizeHandle) => ktdPointerDown(resizeHandle.element.nativeElement))\n );\n } else {\n this.renderer.setStyle(this.resizeElem.nativeElement, 'display', 'block');\n return ktdPointerDown(this.resizeElem.nativeElement);\n }\n }),\n tap((startEvent) => {\n if (ktdIsMouseEventOrMousePointerEvent(startEvent)) {\n startEvent.preventDefault();\n }\n })\n );\n }\n })\n );\n }\n}\n\n","<ng-content></ng-content>\n<div #resizeElem class=\"grid-item-resize-icon\"></div>","/**\n * Client rect utilities.\n * This file is taken from Angular Material repository.\n */\n\n/* eslint-disable */\n\nexport interface KtdClientRect {\n top: number;\n bottom: number;\n left: number;\n right: number;\n width: number;\n height: number;\n}\n\n/** Gets a mutable version of an element's bounding `ClientRect`. */\nexport function getMutableClientRect(element: Element): KtdClientRect {\n const clientRect = element.getBoundingClientRect();\n\n // We need to clone the `clientRect` here, because all the values on it are readonly\n // and we need to be able to update them. Also we can't use a spread here, because\n // the values on a `ClientRect` aren't own properties. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes\n return {\n top: clientRect.top,\n right: clientRect.right,\n bottom: clientRect.bottom,\n left: clientRect.left,\n width: clientRect.width,\n height: clientRect.height\n };\n}\n\n/**\n * Checks whether some coordinates are within a `ClientRect`.\n * @param clientRect ClientRect that is being checked.\n * @param x Coordinates along the X axis.\n * @param y Coordinates along the Y axis.\n */\nexport function isInsideClientRect(clientRect: ClientRect, x: number, y: number) {\n const {top, bottom, left, right} = clientRect;\n return y >= top && y <= bottom && x >= left && x <= right;\n}\n\n/**\n * Updates the top/left positions of a `ClientRect`, as well as their bottom/right counterparts.\n * @param clientRect `ClientRect` that should be updated.\n * @param top Amount to add to the `top` position.\n * @param left Amount to add to the `left` position.\n */\nexport function adjustClientRect(clientRect: KtdClientRect, top: number, left: number) {\n clientRect.top += top;\n clientRect.bottom = clientRect.top + clientRect.height;\n\n clientRect.left += left;\n clientRect.right = clientRect.left + clientRect.width;\n}\n\n/**\n * Checks whether the pointer coordinates are close to a ClientRect.\n * @param rect ClientRect to check against.\n * @param threshold Threshold around the ClientRect.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\nexport function isPointerNearClientRect(rect: KtdClientRect,\n threshold: number,\n pointerX: number,\n pointerY: number): boolean {\n const {top, right, bottom, left, width, height} = rect;\n const xThreshold = width * threshold;\n const yThreshold = height * threshold;\n\n return pointerY > top - yThreshold && pointerY < bottom + yThreshold &&\n pointerX > left - xThreshold && pointerX < right + xThreshold;\n}\n","import { animationFrameScheduler, fromEvent, interval, NEVER, Observable } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators';\nimport { ktdNormalizePassiveListenerOptions } from './passive-listeners';\nimport { getMutableClientRect, KtdClientRect } from './client-rect';\nimport { ktdNoEmit } from './operators';\n\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling.\n * The value comes from trying it out manually until it feels right.\n */\nconst SCROLL_PROXIMITY_THRESHOLD = 0.05;\n\n/** Vertical direction in which we can auto-scroll. */\nconst enum AutoScrollVerticalDirection {\n NONE,\n UP,\n DOWN\n}\n\n/** Horizontal direction in which we can auto-scroll. */\nconst enum AutoScrollHorizontalDirection {\n NONE,\n LEFT,\n RIGHT\n}\n\nexport interface KtdScrollPosition {\n top: number;\n left: number;\n}\n\n/**\n * Increments the vertical scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementVerticalScroll(node: HTMLElement | Window, amount: number): void {\n if (node === window) {\n (node as Window).scrollBy(0, amount);\n } else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n (node as HTMLElement).scrollTop += amount;\n }\n}\n\n/**\n * Increments the horizontal scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementHorizontalScroll(node: HTMLElement | Window, amount: number): void {\n if (node === window) {\n (node as Window).scrollBy(amount, 0);\n } else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n (node as HTMLElement).scrollLeft += amount;\n }\n}\n\n/**\n * Gets whether the vertical auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getVerticalScrollDirection(clientRect: KtdClientRect, pointerY: number): any {\n const { top, bottom, height } = clientRect;\n const yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;\n\n if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {\n return AutoScrollVerticalDirection.UP;\n } else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {\n return AutoScrollVerticalDirection.DOWN;\n }\n\n return AutoScrollVerticalDirection.NONE;\n}\n\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n */\nfunction getHorizontalScrollDirection(clientRect: KtdClientRect, pointerX: number): any {\n const { left, right, width } = clientRect;\n const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n\n if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n return AutoScrollHorizontalDirection.LEFT;\n } else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n return AutoScrollHorizontalDirection.RIGHT;\n }\n\n return AutoScrollHorizontalDirection.NONE;\n}\n\n/**\n * Returns an observable that schedules a loop and apply scroll on the scrollNode into the specified direction/s.\n * This observable doesn't emit, it just performs the 'scroll' side effect.\n * @param scrollNode, node where the scroll would be applied.\n * @param verticalScrollDirection, vertical direction of the scroll.\n * @param horizontalScrollDirection, horizontal direction of the scroll.\n * @param scrollStep, scroll step in CSS pixels that would be applied in every loop.\n */\nfunction scrollToDirectionInterval$(\n scrollNode: HTMLElement | Window,\n verticalScrollDirection: AutoScrollVerticalDirection,\n horizontalScrollDirection: AutoScrollHorizontalDirection,\n scrollStep: number = 2\n): any {\n return interval(0, animationFrameScheduler).pipe(\n tap(() => {\n if (verticalScrollDirection === AutoScrollVerticalDirection.UP) {\n incrementVerticalScroll(scrollNode, -scrollStep);\n } else if (verticalScrollDirection === AutoScrollVerticalDirection.DOWN) {\n incrementVerticalScroll(scrollNode, scrollStep);\n }\n\n if (horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT) {\n incrementHorizontalScroll(scrollNode, -scrollStep);\n } else if (horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT) {\n incrementHorizontalScroll(scrollNode, scrollStep);\n }\n }),\n ktdNoEmit()\n );\n}\n\nexport interface KtdScrollIfNearElementOptions {\n scrollStep?: number;\n disableVertical?: boolean;\n disableHorizontal?: boolean;\n}\n\n/**\n * Given a source$ observable with pointer location, scroll the scrollNode if the pointer is near to it.\n * This observable doesn't emit, it just performs a 'scroll' side effect.\n * @param scrollableParent, parent node in which the scroll would be performed.\n * @param options, configuration options.\n */\nexport function ktdScrollIfNearElementClientRect$(\n scrollableParent: HTMLElement | Document,\n options?: KtdScrollIfNearElementOptions\n): (source$: Observable<{ pointerX: number; pointerY: number }>) => Observable<any> {\n let scrollNode: Window | HTMLElement;\n let scrollableParentClientRect: KtdClientRect;\n let scrollableParentScrollWidth: number;\n\n if (scrollableParent === document) {\n scrollNode = document.defaultView as Window;\n const { width, height } = getViewportSize();\n scrollableParentClientRect = { width, height, top: 0, right: width, bottom: height, left: 0 };\n scrollableParentScrollWidth = getDocumentScrollWidth();\n } else {\n scrollNode = scrollableParent as HTMLElement;\n scrollableParentClientRect = getMutableClientRect(scrollableParent as HTMLElement);\n scrollableParentScrollWidth = (scrollableParent as HTMLElement).scrollWidth;\n }\n\n /**\n * IMPORTANT: By design, only let scroll horizontal if the scrollable parent has explicitly an scroll horizontal.\n * This layout solution is not designed in mind to have any scroll horizontal, but exceptionally we allow it in this\n * specific use case.\n */\n options = options || {};\n if (options.disableHorizontal == null && scrollableParentScrollWidth <= scrollableParentClientRect.width) {\n options.disableHorizontal = true;\n }\n\n return (source$) =>\n source$.pipe(\n map(({ pointerX, pointerY }) => {\n let verticalScrollDirection = getVerticalScrollDirection(scrollableParentClientRect, pointerY);\n let horizontalScrollDirection = getHorizontalScrollDirection(scrollableParentClientRect, pointerX);\n\n // Check if scroll directions are disabled.\n if (options?.disableVertical) {\n verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n }\n if (options?.disableHorizontal) {\n horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n }\n\n return { verticalScrollDirection, horizontalScrollDirection };\n }),\n distinctUntilChanged(\n (prev, actual) =>\n prev.verticalScrollDirection === actual.verticalScrollDirection &&\n prev.horizontalScrollDirection === actual.horizontalScrollDirection\n ),\n switchMap(({ verticalScrollDirection, horizontalScrollDirection }) => {\n if (verticalScrollDirection || horizontalScrollDirection) {\n return scrollToDirectionInterval$(\n scrollNode,\n verticalScrollDirection,\n horizontalScrollDirection,\n options?.scrollStep\n );\n } else {\n return NEVER;\n }\n })\n );\n}\n\n/**\n * Emits on EVERY scroll event and returns the accumulated scroll offset relative to the initial scroll position.\n * @param scrollableParent, node in which scroll events would be listened.\n */\nexport function ktdGetScrollTotalRelativeDifference$(\n scrollableParent: HTMLElement | Document\n): Observable<{ top: number; left: number }> {\n let scrollInitialPosition;\n\n // Calculate initial scroll position\n if (scrollableParent === document) {\n scrollInitialPosition = getViewportScrollPosition();\n } else {\n scrollInitialPosition = {\n top: (scrollableParent as HTMLElement).scrollTop,\n left: (scrollableParent as HTMLElement).scrollLeft\n };\n }\n\n return fromEvent(\n scrollableParent,\n 'scroll',\n ktdNormalizePassiveListenerOptions({ capture: true }) as AddEventListenerOptions\n ).pipe(\n map(() => {\n let newTop: number;\n let newLeft: number;\n\n if (scrollableParent === document) {\n const viewportScrollPosition = getViewportScrollPosition();\n newTop = viewportScrollPosition.top;\n newLeft = viewportScrollPosition.left;\n } else {\n newTop = (scrollableParent as HTMLElement).scrollTop;\n newLeft = (scrollableParent as HTMLElement).scrollLeft;\n }\n\n const topDifference = scrollInitialPosition.top - newTop;\n const leftDifference = scrollInitialPosition.left - newLeft;\n\n return { top: topDifference, left: leftDifference };\n })\n );\n}\n\n/** Returns the viewport's width and height. */\nfunction getViewportSize(): { width: number; height: number } {\n const _window = document.defaultView || window;\n return {\n width: _window.innerWidth,\n height: _window.innerHeight\n };\n}\n\n/** Gets a ClientRect for the viewport's bounds. */\n// eslint-disable-next-line\nfunction getViewportRect(): KtdClientRect {\n // Use the document element's bounding rect rather than the window scroll properties\n // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n // can disagree when the page is pinch-zoomed (on devices that support touch).\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n // We use the documentElement instead of the body because, by default (without a css reset)\n // browsers typically give the document body an 8px margin, which is not included in\n // getBoundingClientRect().\n const scrollPosition = getViewportScrollPosition();\n const { width, height } = getViewportSize();\n\n return {\n top: scrollPosition.top,\n left: scrollPosition.left,\n bottom: scrollPosition.top + height,\n right: scrollPosition.left + width,\n height,\n width\n };\n}\n\n/** Gets the (top, left) scroll position of the viewport. */\nfunction getViewportScrollPosition(): { top: number; left: number } {\n // The top-left-corner of the viewport is determined by the scroll position of the document\n // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n // `document.documentElement` works consistently, where the `top` and `left` values will\n // equal negative the scroll position.\n const windowRef = document.defaultView || window;\n const documentElement = document.documentElement!;\n const documentRect = documentElement.getBoundingClientRect();\n\n const top = -documentRect.top || document.body.scrollTop || windowRef.scrollY || documentElement.scrollTop || 0;\n\n const left = -documentRect.left || document.body.scrollLeft || windowRef.scrollX || documentElement.scrollLeft || 0;\n\n return { top, left };\n}\n\n/** Returns the document scroll width */\nfunction getDocumentScrollWidth(): any {\n return Math.max(document.body.scrollWidth, document.documentElement.scrollWidth);\n}\n\n","/**\n * Transition duration utilities.\n * This file is taken from Angular Material repository.\n */\n\n/** Parses a CSS time value to milliseconds. */\nfunction parseCssTimeUnitsToMs(value: string): number {\n // Some browsers will return it in seconds, whereas others will return milliseconds.\n const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\n\n/** Gets the transform transition duration, including the delay, of an element in milliseconds. */\nexport function getTransformTransitionDurationInMs(element: HTMLElement): number {\n const computedStyle = getComputedStyle(element);\n const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n const property = transitionedProperties.find(prop => prop === 'transform' || prop === 'all');\n\n // If there's no transition for `all` or `transform`, we shouldn't do anything.\n if (!property) {\n return 0;\n }\n\n // Get the index of the property that we're interested in and match\n // it up to the same index in `transition-delay` and `transition-duration`.\n const propertyIndex = transitionedProperties.indexOf(property);\n const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n\n return parseCssTimeUnitsToMs(rawDurations[propertyIndex]) +\n parseCssTimeUnitsToMs(rawDelays[propertyIndex]);\n}\n\n/** Parses out multiple values from a computed style into an array. */\nfunction parseCssPropertyValue(computedStyle: CSSStyleDeclaration, name: string): string[] {\n const value = computedStyle.getPropertyValue(name);\n return value.split(',').map(part => part.trim());\n}\n","import { AfterContentChecked, AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EmbeddedViewRef, EventEmitter, Input, NgZone, OnChanges, OnDestroy, Output, QueryList, Renderer2, SimpleChanges, ViewContainerRef, ViewEncapsulation, inject } from '@angular/core';\nimport { coerceNumberProperty, NumberInput } from '../coercion/number-property';\nimport { KtdGridItemComponent } from '../grid-item/grid-item.component';\nimport { combineLatest, merge, NEVER, Observable, Observer, of, Subscription } from 'rxjs';\nimport { exhaustMap, map, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport {\n ktdGetGridItemRowHeight,\n ktdGridItemDragging,\n ktdGridItemLayoutItemAreEqual,\n ktdGridItemResizing\n} from '../utils/grid.utils';\nimport { compact } from '../utils/react-grid-layout.utils';\nimport {\n GRID_ITEM_GET_RENDER_DATA_TOKEN,\n KtdGridBackgroundCfg,\n KtdGridCfg,\n KtdGridCompactType,\n KtdGridItemRenderData,\n KtdGridLayout,\n KtdGridLayoutItem\n} from '../grid.definitions';\nimport { ktdPointerUp, ktdPointerClientX, ktdPointerClientY } from '../utils/pointer.utils';\nimport { KtdDictionary } from '../../types';\nimport { KtdGridService } from '../grid.service';\nimport { getMutableClientRect, KtdClientRect } from '../utils/client-rect';\nimport { ktdGetScrollTotalRelativeDifference$, ktdScrollIfNearElementClientRect$ } from '../utils/scroll';\nimport { BooleanInput, coerceBooleanProperty } from '../coercion/boolean-property';\nimport { KtdGridItemPlaceholder } from '../directives/placeholder';\nimport { getTransformTransitionDurationInMs } from '../utils/transition-duration';\n/* eslint-disable */\ninterface KtdDragResizeEvent {\n layout: KtdGridLayout;\n layoutItem: KtdGridLayoutItem;\n gridItemRef: KtdGridItemComponent;\n}\n\nexport type KtdDragStart = KtdDragResizeEvent;\nexport type KtdResizeStart = KtdDragResizeEvent;\nexport type KtdDragEnd = KtdDragResizeEvent;\nexport type KtdResizeEnd = KtdDragResizeEvent;\n\nexport interface KtdGridItemResizeEvent {\n width: number;\n height: number;\n gridItemRef: KtdGridItemComponent;\n}\n\ntype DragActionType = 'drag' | 'resize';\n\nfunction getDragResizeEventData(gridItem: KtdGridItemComponent, layout: KtdGridLayout): KtdDragResizeEvent {\n return {\n layout,\n layoutItem: layout.find((item) => item.id === gridItem.id)!,\n gridItemRef: gridItem\n };\n}\n\nfunction getColumnWidth(config: KtdGridCfg, width: number): number {\n const { cols, gap } = config;\n const widthExcludingGap = width - Math.max(gap * (cols - 1), 0);\n return widthExcludingGap / cols;\n}\n\nfunction getRowHeightInPixels(config: KtdGridCfg, height: number): number {\n const { rowHeight, layout, gap } = config;\n return rowHeight === 'fit' ? ktdGetGridItemRowHeight(layout, height, gap) : rowHeight;\n}\n\nfunction layoutToRenderItems(\n config: KtdGridCfg,\n width: number,\n height: number\n): KtdDictionary<KtdGridItemRenderData<number>> {\n const { layout, gap } = config;\n const rowHeightInPixels = getRowHeightInPixels(config, height);\n const itemWidthPerColumn = getColumnWidth(config, width);\n const renderItems: KtdDictionary<KtdGridItemRenderData<number>> = {};\n for (const item of layout) {\n renderItems[item.id] = {\n id: item.id,\n top: item.y * rowHeightInPixels + gap * item.y,\n left: item.x * itemWidthPerColumn + gap * item.x,\n width: item.w * itemWidthPerColumn + gap * Math.max(item.w - 1, 0),\n height: item.h * rowHeightInPixels + gap * Math.max(item.h - 1, 0)\n };\n }\n return renderItems;\n}\n\nfunction getGridHeight(layout: KtdGridLayout, rowHeight: number, gap: number): number {\n return layout.reduce(\n (acc, cur) => Math.max(acc, (cur.y + cur.h) * rowHeight + Math.max(cur.y + cur.h - 1, 0) * gap),\n 0\n );\n}\nexport function parseRenderItemToPixels(renderItem: KtdGridItemRenderData<number>): KtdGridItemRenderData<string> {\n return {\n id: renderItem.id,\n top: `${renderItem.top}px`,\n left: `${renderItem.left}px`,\n width: `${renderItem.width}px`,\n height: `${renderItem.height}px`\n };\n}\nexport function __gridItemGetRenderDataFactoryFunc(gridCmp: KtdGridComponent) {\n return function (id: string) {\n return parseRenderItemToPixels(gridCmp.getItemRenderData(id));\n };\n}\n\nexport function ktdGridItemGetRenderDataFactoryFunc(gridCmp: KtdGridComponent): any {\n // Workaround explained: https://github.com/ng-packagr/ng-packagr/issues/696#issuecomment-387114613\n const resultFunc = __gridItemGetRenderDataFactoryFunc(gridCmp);\n return resultFunc;\n}\n\nconst defaultBackgroundConfig: Required<Omit<KtdGridBackgroundCfg, 'show'>> = {\n borderColor: '#ffa72678',\n gapColor: 'transparent',\n rowColor: 'transparent',\n columnColor: 'transparent',\n borderWidth: 1\n};\n\n@Component({\n selector: 'buw-grid',\n templateUrl: './grid.component.html',\n styleUrls: ['./grid.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: GRID_ITEM_GET_RENDER_DATA_TOKEN,\n useFactory: ktdGridItemGetRenderDataFactoryFunc,\n deps: [KtdGridComponent]\n }\n ],\n standalone: false\n})\nexport class KtdGridComponent implements OnChanges, AfterContentInit, AfterContentChecked, OnDestroy {\n private gridService = inject(KtdGridService);\n private elementRef = inject(ElementRef);\n private viewContainerRef = inject(ViewContainerRef);\n private renderer = inject(Renderer2);\n private ngZone = inject(NgZone);\n\n /** Query list of grid items that are being rendered. */\n @ContentChildren(KtdGridItemComponent, { descendants: true }) _gridItems: QueryList<KtdGridItemComponent>;\n\n /** Emits when layout change */\n @Output() layoutUpdated: EventEmitter<KtdGridLayout> = new EventEmitter<KtdGridLayout>();\n\n /** Emits when drag starts */\n @Output() dragStarted: EventEmitter<KtdDragStart> = new EventEmitter<KtdDragStart>();\n\n /** Emits when resize starts */\n @Output() resizeStarted: EventEmitter<KtdResizeStart> = new EventEmitter<KtdResizeStart>();\n\n /** Emits when drag ends */\n @Output() dragEnded: EventEmitter<KtdDragEnd> = new EventEmitter<KtdDragEnd>();\n\n /** Emits when resize ends */\n @Output() resizeEnded: EventEmitter<KtdResizeEnd> = new EventEmitter<KtdResizeEnd>();\n\n /** Emits when a grid item is being resized and its bounds have changed */\n @Output() gridItemResize: EventEmitter<KtdGridItemResizeEvent> = new EventEmitter<KtdGridItemResizeEvent>();\n\n /**\n * Parent element that contains the scroll. If an string is provided it would search that element by id on the dom.\n * If no data provided or null autoscroll is not performed.\n */\n @Input() scrollableParent: HTMLElement | Document | string | null = null;\n\n /** Whether or not to update the internal layout when some dependent property change. */\n @Input()\n get compactOnPropsChange(): boolean {\n return this._compactOnPropsChange;\n }\n\n set compactOnPropsChange(value: boolean) {\n this._compactOnPropsChange = coerceBooleanProperty(value);\n }\n\n private _compactOnPropsChange = true;\n\n /** If true, grid items won't change position when being dragged over. Handy when using no compaction */\n @Input()\n get preventCollision(): boolean {\n return this._preventCollision;\n }\n\n set preventCollision(value: boolean) {\n this._preventCollision = coerceBooleanProperty(value);\n }\n\n private _preventCollision = false;\n\n /** Number of CSS pixels that would be scrolled on each 'tick' when auto scroll is performed. */\n @Input()\n get scrollSpeed(): number {\n return this._scrollSpeed;\n }\n\n set scrollSpeed(value: number) {\n this._scrollSpeed = coerceNumberProperty(value, 2);\n }\n\n private _scrollSpeed = 2;\n\n /** Type of compaction that will be applied to the layout (vertical, horizontal or free). Defaults to 'vertical' */\n @Input()\n get compactType(): KtdGridCompactType {\n return this._compactType;\n }\n\n set compactType(val: KtdGridCompactType) {\n this._compactType = val;\n }\n\n private _compactType: KtdGridCompactType = 'vertical';\n\n /**\n * Row height as number or as 'fit'.\n * If rowHeight is a number value, it means that each row would have those css pixels in height.\n * if rowHeight is 'fit', it means that rows will fit in the height available. If 'fit' value is set, a 'height' should be also provided.\n */\n @Input()\n get rowHeight(): number | 'fit' {\n return this._rowHeight;\n }\n\n set rowHeight(val: number | 'fit') {\n this._rowHeight = val === 'fit' ? val : Math.max(1, Math.round(coerceNumberProperty(val)));\n }\n\n private _rowHeight: number | 'fit' = 100;\n\n /** Number of columns */\n @Input()\n get cols(): number {\n return this._cols;\n }\n\n set cols(val: number) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(val)));\n }\n\n private _cols = 6;\n\n /** Layout of the grid. Array of all the grid items with its 'id' and position on the grid. */\n @Input()\n get layout(): KtdGridLayout {\n return this._layout;\n }\n\n set layout(layout: KtdGridLayout) {\n /**\n * Enhancement:\n * Only set layout if it's reference has changed and use a boolean to track whenever recalculate the layout on ngOnChanges.\n *\n * Why:\n * The normal use of this lib is having the variable layout in the outer component or in a store, assigning it whenever it changes and\n * binded in the component with it's input [layout]. In this scenario, we would always calculate one unnecessary change on the layout when\n * it is re-binded on the input.\n */\n this._layout = layout;\n }\n\n private _layout: KtdGridLayout;\n\n /** Grid gap in css pixels */\n @Input()\n get gap(): number {\n return this._gap;\n }\n\n set gap(val: number) {\n this._gap = Math.max(coerceNumberProperty(val), 0);\n }\n\n private _gap = 0;\n\n /**\n * If height is a number, fixes the height of the grid to it, recommended when rowHeight = 'fit' is used.\n * If height is null, height will be automatically set according to its inner grid items.\n * Defaults to null.\n * */\n @Input()\n get height(): number | null {\n return this._height;\n }\n\n set height(val: number | null) {\n this._height = typeof val === 'number' ? Math.max(val, 0) : null;\n }\n\n private _height: number | null = null;\n\n @Input()\n get backgroundConfig(): KtdGridBackgroundCfg | null {\n return this._backgroundConfig;\n }\n\n set backgroundConfig(val: KtdGridBackgroundCfg | null) {\n this._backgroundConfig = val;\n\n // If there is background configuration, add main grid background class. Grid background class comes with opacity 0.\n // It is done this way for adding opacity animation and to don't add any styles when grid background is null.\n const classList = (this.elementRef.nativeElement as HTMLDivElement).classList;\n this._backgroundConfig !== null\n ? classList.add('buw-grid-background')\n : classList.remove('buw-grid-background');\n\n // Set background visibility\n this.setGridBackgroundVisible(this._backgroundConfig?.show === 'always');\n }\n\n private _backgroundConfig: KtdGridBackgroundCfg | null = null;\n\n private gridCurrentHeight: number;\n\n get config(): KtdGridCfg {\n return {\n cols: this.cols,\n rowHeight: this.rowHeight,\n height: this.height,\n layout: this.layout,\n preventCollision: this.preventCollision,\n gap: this.gap\n };\n }\n\n /** Reference to the view of the placeholder element. */\n private placeholderRef: EmbeddedViewRef<any> | null;\n\n /** Element that is rendered as placeholder when a grid item is being dragged */\n private placeholder: HTMLElement | null;\n\n private _gridItemsRenderData: KtdDictionary<KtdGridItemRenderData<number>>;\n private subscriptions: Subscription[] = [];\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.rowHeight === 'fit' && this.height == null) {\n console.warn(`KtdGridComponent: The @Input() height should not be null when using rowHeight 'fit'`);\n }\n\n let needsCompactLayout = false;\n let needsRecalculateRenderData = false;\n\n // TODO: Does fist change need to be compacted by default?\n // Compact layout whenever some dependent prop changes.\n if (changes.compactType || changes.cols || changes.layout) {\n needsCompactLayout = true;\n }\n\n // Check if wee need to recalculate rendering data.\n if (needsCompactLayout || changes.rowHeight || changes.height || changes.gap || changes.backgroundConfig) {\n needsRecalculateRenderData = true;\n }\n\n // Only compact layout if lib user has provided it. Lib users that want to save/store always the same layout as it is represented (compacted)\n // can use KtdCompactGrid utility and pre-compact the layout. This is the recommended behaviour for always having a the same layout on this component\n // and the ones that uses it.\n if (needsCompactLayout && this.compactOnPropsChange) {\n this.compactLayout();\n }\n\n if (needsRecalculateRenderData) {\n this.calculateRenderData();\n }\n }\n\n ngAfterContentInit(): void {\n this.initSubscriptions();\n }\n\n ngAfterContentChecked(): void {\n this.render();\n }\n\n resize(): void {\n this.calculateRenderData();\n this.render();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n compactLayout(): void {\n this.layout = compact(this.layout, this.compactType, this.cols);\n }\n\n getItemsRenderData(): KtdDictionary<KtdGridItemRenderData<number>> {\n return { ...this._gridItemsRenderData };\n }\n\n getItemRenderData(itemId: string): KtdGridItemRenderData<number> {\n return this._gridItemsRenderData[itemId];\n }\n\n calculateRenderData(): void {\n const clientRect = (this.elementRef.nativeElement as HTMLElement).getBoundingClientRect();\n this.gridCurrentHeight =\n this.height ??\n (this.rowHeight === 'fit' ? clientRect.height : getGridHeight(this.layout, this.rowHeight, this.gap));\n this._gridItemsRenderData = layoutToRenderItems(this.config, clientRect.width, this.gridCurrentHeight);\n\n // Set Background CSS variables\n this.setBackgroundCssVariables(getRowHeightInPixels(this.config, this.gridCurrentHeight));\n }\n\n render(): void {\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${this.gridCurrentHeight}px`);\n this.updateGridItemsStyles();\n }\n\n private setBackgroundCssVariables(rowHeight: number): void {\n const style = (this.elementRef.nativeElement as HTMLDivElement).style;\n\n if (this._backgroundConfig) {\n // structure\n style.setProperty('--gap', this.gap + 'px');\n style.setProperty('--row-height', rowHeight + 'px');\n style.setProperty('--columns', `${this.cols}`);\n style.setProperty(\n '--border-width',\n (this._backgroundConfig.borderWidth ?? defaultBackgroundConfig.borderWidth) + 'px'\n );\n\n // colors\n style.setProperty(\n '--border-color',\n this._backgroundConfig.borderColor ?? defaultBackgroundConfig.borderColor\n );\n style.setProperty('--gap-color', this._backgroundConfig.gapColor ?? defaultBackgroundConfig.gapColor);\n style.setProperty('--row-color', this._backgroundConfig.rowColor ?? defaultBackgroundConfig.rowColor);\n style.setProperty(\n '--column-color',\n this._backgroundConfig.columnColor ?? defaultBackgroundConfig.columnColor\n );\n } else {\n style.removeProperty('--gap');\n style.removeProperty('--row-height');\n style.removeProperty('--columns');\n style.removeProperty('--border-width');\n style.removeProperty('--border-color');\n style.removeProperty('--gap-color');\n style.removeProperty('--row-color');\n style.removeProperty('--column-color');\n }\n }\n\n private updateGridItemsStyles(): void {\n this._gridItems.forEach((item) => {\n const gridItemRenderData: KtdGridItemRenderData<number> | undefined = this._gridItemsRenderData[item.id];\n if (gridItemRenderData == null) {\n console.error(`Couldn't find the specified grid item for the id: ${item.id}`);\n } else {\n item.setStyles(parseRenderItemToPixels(gridItemRenderData));\n }\n });\n }\n\n private setGridBackgroundVisible(visible: boolean): void {\n const classList = (this.elementRef.nativeElement as HTMLDivElement).classList;\n visible ? classList.add('buw-grid-background-visible') : classList.remove('buw-grid-background-visible');\n }\n\n private initSubscriptions(): any {\n this.subscriptions = [\n this._gridItems.changes\n .pipe(\n startWith(this._gridItems),\n switchMap((gridItems: QueryList<KtdGridItemComponent>) =>\n merge(\n ...gridItems.map((gridItem) =>\n gridItem.dragStart$.pipe(\n map((event) => ({ event, gridItem, type: 'drag' as DragActionType }))\n )\n ),\n ...gridItems.map((gridItem) =>\n gridItem.resizeStart$.pipe(\n map((event) => ({\n event,\n gridItem,\n type: 'resize' as DragActionType\n }))\n )\n )\n ).pipe(\n exhaustMap(({ event, gridItem, type }) => {\n // Emit drag or resize start events. Ensure that is start event is inside the zone.\n this.ngZone.run(() =>\n (type === 'drag' ? this.dragStarted : this.resizeStarted).emit(\n getDragResizeEventData(gridItem, this.layout)\n )\n );\n\n this.setGridBackgroundVisible(\n this._backgroundConfig?.show === 'whenDragging' ||\n this._backgroundConfig?.show === 'always'\n );\n\n // Perform drag sequence\n return this.performDragSequence$(gridItem, event, type).pipe(\n map((layout) => ({ layout, gridItem, type }))\n );\n })\n )\n )\n )\n .subscribe(({ layout, gridItem, type }) => {\n this.layout = layout;\n // Calculate new rendering data given the new layout.\n this.calculateRenderData();\n // Emit drag or resize end events.\n (type === 'drag' ? this.dragEnded : this.resizeEnded).emit(\n getDragResizeEventData(gridItem, layout)\n );\n // Notify that the layout has been updated.\n this.layoutUpdated.emit(layout);\n\n this.setGridBackgroundVisible(this._backgroundConfig?.show === 'always');\n })\n ];\n }\n\n /**\n * Perform a general grid drag action, from start to end. A general grid drag action basically includes creating the placeholder element and adding\n * some class animations. calcNewStateFunc needs to be provided in order to calculate the new state of the layout.\n * @param gridItem that is been dragged\n * @param pointerDownEvent event (mousedown or touchdown) where the user initiated the drag\n * @param calcNewStateFunc function that return the new layout state and the drag element position\n */\n private performDragSequence$(\n gridItem: KtdGridItemComponent,\n pointerDownEvent: MouseEvent | TouchEvent,\n type: DragActionType\n ): Observable<KtdGridLayout> {\n return new Observable<KtdGridLayout>((observer: Observer<KtdGridLayout>) => {\n // Retrieve grid (parent) and gridItem (draggedElem) client rects.\n const gridElemClientRect: KtdClientRect = getMutableClientRect(\n this.elementRef.nativeElement as HTMLElement\n );\n const dragElemClientRect: KtdClientRect = getMutableClientRect(\n gridItem.el.nativeElement as HTMLElement\n );\n\n const scrollableParent =\n typeof this.scrollableParent === 'string'\n ? document.getElementById(this.scrollableParent)\n : this.scrollableParent;\n\n this.renderer.addClass(gridItem.el.nativeElement, 'no-transitions');\n this.renderer.addClass(gridItem.el.nativeElement, 'buw-grid-item-dragging');\n\n const placeholderClientRect: KtdClientRect = {\n ...dragElemClientRect,\n left: dragElemClientRect.left - gridElemClientRect.left,\n top: dragElemClientRect.top - gridElemClientRect.top\n };\n this.createPlaceholderElement(placeholderClientRect, gridItem.placeholder);\n\n let newLayout: KtdGridLayoutItem[];\n\n // TODO (enhancement): consider move this 'side effect' observable inside the main drag loop.\n // - Pros are that we would not repeat subscriptions and takeUntil would shut down observables at the same time.\n // - Cons are that moving this functionality as a side effect inside the main drag loop would be confusing.\n const scrollSubscription = this.ngZone.runOutsideAngular(() =>\n (!scrollableParent\n ? NEVER\n : this.gridService.mouseOrTouchMove$(document).pipe(\n map((event) => ({\n pointerX: ktdPointerClientX(event),\n pointerY: ktdPointerClientY(event)\n })),\n ktdScrollIfNearElementClientRect$(scrollableParent, { scrollStep: this.scrollSpeed })\n )\n )\n .pipe(takeUntil(ktdPointerUp(document)))\n .subscribe()\n );\n\n /**\n * Main subscription, it listens for 'pointer move' and 'scroll' events and recalculates the layout on each emission\n */\n const subscription = this.ngZone.runOutsideAngular(() =>\n merge(\n combineLatest([\n this.gridService.mouseOrTouchMove$(document),\n ...(!scrollableParent\n ? [of({ top: 0, left: 0 })]\n : [\n ktdGetScrollTotalRelativeDifference$(scrollableParent).pipe(\n startWith({ top: 0, left: 0 }) // Force first emission to allow CombineLatest to emit even no scroll event has occurred\n )\n ])\n ])\n )\n .pipe(takeUntil(ktdPointerUp(document)))\n .subscribe(\n ([pointerDragEvent, scrollDifference]) =>\n // : [MouseEvent | TouchEvent | PointerEvent{ top: number; left: number }]\n {\n pointerDragEvent.preventDefault();\n\n /**\n * Set the new layout to be the layout in which the calcNewStateFunc would be executed.\n * NOTE: using the mutated layout is the way to go by 'react-grid-layout' utils. If we don't use the previous layout,\n * some utilities from 'react-grid-layout' would not work as expected.\n */\n const currentLayout: KtdGridLayout = newLayout || this.layout;\n\n // Get the correct newStateFunc depending on if we are dragging or resizing\n const calcNewStateFunc = type === 'drag' ? ktdGridItemDragging : ktdGridItemResizing;\n\n const { layout, draggedItemPos } = calcNewStateFunc(\n gridItem,\n {\n layout: currentLayout,\n rowHeight: this.rowHeight,\n height: this.height,\n cols: this.cols,\n preventCollision: this.preventCollision,\n gap: this.gap\n },\n this.compactType,\n {\n pointerDownEvent,\n pointerDragEvent,\n gridElemClientRect,\n dragElemClientRect,\n scrollDifference\n }\n );\n newLayout = layout;\n\n this.gridCurrentHeight =\n this.height ??\n (this.rowHeight === 'fit'\n ? gridElemClientRect.height\n : getGridHeight(newLayout, this.rowHeight, this.gap));\n\n this._gridItemsRenderData = layoutToRenderItems(\n {\n cols: this.cols,\n rowHeight: this.rowHeight,\n height: this.height,\n layout: newLayout,\n preventCollision: this.preventCollision,\n gap: this.gap\n },\n gridElemClientRect.width,\n gridElemClientRect.height\n );\n\n const newGridItemRenderData = { ...this._gridItemsRenderData[gridItem.id] };\n const placeholderStyles = parseRenderItemToPixels(newGridItemRenderData);\n\n // Put the real final position to the placeholder element\n this.placeholder!.style.width = placeholderStyles.width;\n this.placeholder!.style.height = placeholderStyles.height;\n this.placeholder!.style.transform = `translateX(${placeholderStyles.left}) translateY(${placeholderStyles.top})`;\n\n // modify the position of the dragged item to be the once we want (for example the mouse position or whatever)\n this._gridItemsRenderData[gridItem.id] = {\n ...draggedItemPos,\n id: this._gridItemsRenderData[gridItem.id].id\n };\n\n this.setBackgroundCssVariables(\n this.rowHeight === 'fit'\n ? ktdGetGridItemRowHeight(newLayout, gridElemClientRect.height, this.gap)\n : this.rowHeight\n );\n\n this.render();\n\n // If we are performing a resize, and bounds have changed, emit event.\n // NOTE: Only emit on resize for now. Use case for normal drag is not justified for now. Emitting on resize is,\n // since we may want to re-render the grid item or the placeholder in order to fit the new bounds.\n if (type === 'resize') {\n const prevGridItem = currentLayout.find((item) => item.id === gridItem.id)!;\n const newGridItem = newLayout.find((item) => item.id === gridItem.id)!;\n // Check if item resized has changed, if so, emit resize change event\n if (!ktdGridItemLayoutItemAreEqual(prevGridItem, newGridItem)) {\n this.gridItemResize.emit({\n width: newGridItemRenderData.width,\n height: newGridItemRenderData.height,\n gridItemRef: getDragResizeEventData(gridItem, newLayout).gridItemRef\n });\n }\n }\n },\n (error) => observer.error(error),\n () => {\n this.ngZone.run(() => {\n // Remove drag classes\n this.renderer.removeClass(gridItem.el.nativeElement, 'no-transitions');\n this.renderer.removeClass(gridItem.el.nativeElement, 'buw-grid-item-dragging');\n\n this.addGridItemAnimatingClass(gridItem).subscribe();\n // Consider destroying the placeholder after the animation has finished.\n this.destroyPlaceholder();\n\n if (newLayout) {\n // TODO: newLayout should already be pruned. If not, it should have type Layout, not KtdGridLayout as it is now.\n // Prune react-grid-layout compact extra properties.\n observer.next(\n newLayout.map((item) => ({\n id: item.id,\n x: item.x,\n y: item.y,\n w: item.w,\n h: item.h,\n minW: item.minW,\n minH: item.minH,\n maxW: item.maxW,\n maxH: item.maxH\n })) as KtdGridLayout\n );\n } else {\n // TODO: Need we really to emit if there is no layout change but drag started and ended?\n observer.next(this.layout);\n }\n\n observer.complete();\n });\n }\n )\n );\n\n return () => {\n scrollSubscription.unsubscribe();\n subscription.unsubscribe();\n };\n });\n }\n\n /**\n * It adds the `buw-grid-item-animating` class and removes it when the animated transition is complete.\n * This function is meant to be executed when the drag has ended.\n * @param gridItem that has been dragged\n */\n private addGridItemAnimatingClass(gridItem: KtdGridItemComponent): Observable<undefined> {\n return new Observable((observer) => {\n const duration = getTransformTransitionDurationInMs(gridItem.el.nativeElement);\n\n if (duration === 0) {\n observer.next(undefined);\n observer.complete();\n return;\n }\n\n this.renderer.addClass(gridItem.el.nativeElement, 'buw-grid-item-animating');\n const handler = ((event: TransitionEvent) => {\n if (\n !event ||\n (event.target === gridItem.el.nativeElement && event.propertyName === 'transform')\n ) {\n this.renderer.removeClass(gridItem.el.nativeElement, 'buw-grid-item-animating');\n removeEventListener();\n clearTimeout(timeout);\n observer.next(undefined);\n observer.complete();\n }\n }) as EventListener;\n\n // If a transition is short enough, the browser might not fire the `transitionend` event.\n // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll\n // fire if the transition hasn't completed when it was supposed to.\n const timeout = setTimeout(handler, duration * 1.5);\n const removeEventListener = this.renderer.listen(\n gridItem.el.nativeElement,\n 'transitionend',\n handler\n );\n });\n }\n\n /** Creates placeholder element */\n private createPlaceholderElement(clientRect: KtdClientRect, gridItemPlaceholder?: KtdGridItemPlaceholder): void {\n this.placeholder = this.renderer.createElement('div');\n this.placeholder!.style.width = `${clientRect.width}px`;\n this.placeholder!.style.height = `${clientRect.height}px`;\n this.placeholder!.style.transform = `translateX(${clientRect.left}px) translateY(${clientRect.top}px)`;\n this.placeholder!.classList.add('buw-grid-item-placeholder');\n this.renderer.appendChild(this.elementRef.nativeElement, this.placeholder);\n\n // Create and append custom placeholder if provided.\n // Important: Append it after creating & appending the container placeholder. This way we ensure parent bounds are set when creating the embeddedView.\n if (gridItemPlaceholder) {\n this.placeholderRef = this.viewContainerRef.createEmbeddedView(\n gridItemPlaceholder.templateRef,\n gridItemPlaceholder.data\n );\n this.placeholderRef.rootNodes.forEach((node) => this.placeholder!.appendChild(node));\n this.placeholderRef.detectChanges();\n } else {\n this.placeholder!.classList.add('buw-grid-item-placeholder-default');\n }\n }\n\n /** Destroys the placeholder element and its ViewRef. */\n private destroyPlaceholder(): void {\n this.placeholder?.remove();\n this.placeholderRef?.destroy();\n this.placeholder = this.placeholderRef = null!;\n }\n\n static ngAcceptInputType_cols: NumberInput;\n static ngAcceptInputType_rowHeight: NumberInput;\n static ngAcceptInputType_scrollSpeed: NumberInput;\n static ngAcceptInputType_compactOnPropsChange: BooleanInput;\n static ngAcceptInputType_preventCollision: BooleanInput;\n}\n\n","<ng-content></ng-content>","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { BaseComponent } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'buw-nav-container',\r\n templateUrl: './nav-container.component.html',\r\n styleUrls: ['./nav-container.component.scss'],\r\n providers: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class NavContainerComponent extends BaseComponent implements OnInit, OnDestroy {\r\n _router = inject(Router);\r\n onTabSelect(e): void {\r\n console.log(e);\r\n if (e.label === 'صفحه اصلی') {\r\n this._router.navigate(['/home']);\r\n }\r\n if (e.label === 'برنامه ها') {\r\n this._router.navigate(['/home/launchpad']);\r\n }\r\n }\r\n}\r\n","<div class=\"fd-shellbar fd-shellbar--xl\">\r\n <fdp-icon-tab-bar layoutMode=\"row\" maxContentHeight=\"250px\" (iconTabSelected)=\"onTabSelect($event)\">\r\n <fdp-icon-tab-bar-tab label=\"صفحه اصلی\" active> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میز کار من\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"تیکتینگ\">\r\n <fdp-icon-tab-bar-tab label=\"میزکار1\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار2\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار3\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار4\"> </fdp-icon-tab-bar-tab>\r\n </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"منابع انسانی\">\r\n <fdp-icon-tab-bar-tab label=\"میزکار1\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار2\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار3\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار4\"> </fdp-icon-tab-bar-tab>\r\n </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکارها\">\r\n <fdp-icon-tab-bar-tab label=\"میزکار1\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار2\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار3\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار4\"> </fdp-icon-tab-bar-tab>\r\n </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"برنامه ها\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"ابزارها\"> </fdp-icon-tab-bar-tab>\r\n </fdp-icon-tab-bar>\r\n</div>","/**\r\n * Removes and item from an array. Returns a new array instance (it doesn't mutate the source array).\r\n * @param array source array to be returned without the element to remove\r\n * @param condition function that will return true for the item that we want to remove\r\n */\r\nexport function ktdArrayRemoveItem<T>(array: T[], condition: (item: T) => boolean): any {\r\n const arrayCopy = [...array];\r\n const index = array.findIndex((item) => condition(item));\r\n if (index > -1) {\r\n arrayCopy.splice(index, 1);\r\n }\r\n return arrayCopy;\r\n}\r\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n Input,\r\n SimpleChanges,\r\n DOCUMENT,\r\n inject\r\n} from '@angular/core';\r\n\r\nimport { BaseComponent, MetaobjectDataModel } from 'barsa-novin-ray-core';\r\nimport { debounceTime, filter, fromEvent, merge, Subscription } from 'rxjs';\r\nimport { KtdDragEnd, KtdDragStart, KtdGridComponent, KtdResizeEnd, KtdResizeStart } from '../grid/grid.component';\r\nimport { ktdGridCompact, ktdTrackById } from '../utils/grid.utils';\r\nimport { KtdGridBackgroundCfg, KtdGridLayout, KtdGridLayoutItem } from '../grid.definitions';\r\nimport { ktdArrayRemoveItem } from '../utils';\r\n\r\n@Component({\r\n selector: 'buw-layout-container',\r\n templateUrl: './layout-container.component.html',\r\n styleUrls: ['./layout-container.component.scss'],\r\n providers: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class LayoutContainerComponent extends BaseComponent implements OnInit, OnDestroy {\r\n @ViewChild(KtdGridComponent, { static: true }) grid: KtdGridComponent;\r\n // @Input() layout: KtdGridLayout = [{ id: '0', x: 5, y: 0, w: 2, h: 3 }];\r\n @Input() layout: KtdGridLayout = [];\r\n @Input() moDataList: MetaobjectDataModel[] = [];\r\n\r\n trackById = ktdTrackById;\r\n\r\n cols = 12;\r\n rowHeight = 50;\r\n rowHeightFit = false;\r\n gridHeight: null | number = null;\r\n compactType: 'vertical' | 'horizontal' | null = 'vertical';\r\n transitions: { name: string; value: string }[] = [\r\n { name: 'ease', value: 'transform 500ms ease, width 500ms ease, height 500ms ease' },\r\n { name: 'ease-out', value: 'transform 500ms ease-out, width 500ms ease-out, height 500ms ease-out' },\r\n { name: 'linear', value: 'transform 500ms linear, width 500ms linear, height 500ms linear' },\r\n {\r\n name: 'overflowing',\r\n value: 'transform 500ms cubic-bezier(.28,.49,.79,1.35), width 500ms cubic-bezier(.28,.49,.79,1.35), height 500ms cubic-bezier(.28,.49,.79,1.35)'\r\n },\r\n { name: 'fast', value: 'transform 200ms ease, width 200ms linear, height 200ms linear' },\r\n { name: 'slow-motion', value: 'transform 1000ms linear, width 1000ms linear, height 1000ms linear' },\r\n { name: 'transform-only', value: 'transform 500ms ease' }\r\n ];\r\n currentTransition: string = this.transitions[0].value;\r\n\r\n placeholders: string[] = ['None', 'Default', 'Custom 1', 'Custom 2', 'Custom 3'];\r\n\r\n currentPlaceholder = 'Default';\r\n\r\n dragStartThreshold = 0;\r\n gap = 10;\r\n autoScroll = true;\r\n disableDrag = false;\r\n disableResize = false;\r\n disableRemove = false;\r\n autoResize = true;\r\n preventCollision = false;\r\n isDragging = false;\r\n isResizing = false;\r\n showBackground = false;\r\n resizeSubscription: Subscription;\r\n\r\n gridBackgroundVisibilityOptions = ['never', 'always', 'whenDragging'];\r\n gridBackgroundConfig: Required<KtdGridBackgroundCfg> = {\r\n show: 'always',\r\n borderColor: 'rgba(255, 128, 0, 0.25)',\r\n gapColor: 'transparent',\r\n borderWidth: 1,\r\n rowColor: 'rgba(128, 128, 128, 0.10)',\r\n columnColor: 'rgba(128, 128, 128, 0.10)'\r\n };\r\n\r\n public document = inject(DOCUMENT);\r\n\r\n ngOnInit(): void {\r\n this.resizeSubscription = merge(fromEvent(window, 'resize'), fromEvent(window, 'orientationchange'))\r\n .pipe(\r\n debounceTime(50),\r\n filter(() => this.autoResize)\r\n )\r\n .subscribe(() => {\r\n this.grid.resize();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.resizeSubscription.unsubscribe();\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n super.ngOnChanges(changes);\r\n const { layout } = changes;\r\n if (layout && !layout.firstChange) {\r\n this.grid.resize();\r\n }\r\n }\r\n\r\n onDragStarted(_event: KtdDragStart): void {\r\n this.isDragging = true;\r\n }\r\n\r\n onResizeStarted(_event: KtdResizeStart): void {\r\n this.isResizing = true;\r\n }\r\n\r\n onDragEnded(_event: KtdDragEnd): void {\r\n this.isDragging = false;\r\n }\r\n\r\n onResizeEnded(_event: KtdResizeEnd): void {\r\n this.isResizing = false;\r\n }\r\n\r\n onLayoutUpdated(layout: KtdGridLayout): void {\r\n console.log('on layout updated', layout);\r\n this.layout = layout;\r\n }\r\n\r\n onAutoScrollChange(checked: boolean): void {\r\n this.autoScroll = checked;\r\n }\r\n\r\n onDisableDragChange(checked: boolean): void {\r\n this.disableDrag = checked;\r\n }\r\n\r\n onDisableResizeChange(checked: boolean): void {\r\n this.disableResize = checked;\r\n }\r\n\r\n onShowBackgroundChange(checked: boolean): void {\r\n this.showBackground = checked;\r\n }\r\n\r\n onDisableRemoveChange(checked: boolean): void {\r\n this.disableRemove = checked;\r\n }\r\n\r\n onAutoResizeChange(checked: boolean): void {\r\n this.autoResize = checked;\r\n }\r\n\r\n onPreventCollisionChange(checked: boolean): void {\r\n this.preventCollision = checked;\r\n }\r\n\r\n onColsChange(event: Event): void {\r\n this.cols = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n onRowHeightChange(event: Event): void {\r\n this.rowHeight = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n onGridHeightChange(event: Event): void {\r\n this.gridHeight = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n onDragStartThresholdChange(event: Event): void {\r\n this.dragStartThreshold = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n onGapChange(event: Event): void {\r\n this.gap = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n generateLayout(): void {\r\n const layout: KtdGridLayout = [];\r\n for (let i = 0; i < this.cols; i++) {\r\n const y = Math.ceil(Math.random() * 4) + 1;\r\n layout.push({\r\n x: Math.round(Math.random() * Math.floor(this.cols / 2 - 1)) * 2,\r\n y: Math.floor(i / 6) * y,\r\n w: 2,\r\n h: y,\r\n id: i.toString()\r\n // static: Math.random() < 0.05\r\n });\r\n }\r\n this.layout = ktdGridCompact(layout, this.compactType, this.cols);\r\n console.log('generateLayout', this.layout);\r\n }\r\n\r\n /** Adds a grid item to the layout */\r\n addItemToLayout(): void {\r\n const maxId = this.layout.reduce((acc, cur) => Math.max(acc, parseInt(cur.id, 10)), -1);\r\n const nextId = maxId + 1;\r\n\r\n const newLayoutItem: KtdGridLayoutItem = {\r\n id: nextId.toString(),\r\n x: -1,\r\n y: -1,\r\n w: 2,\r\n h: 2\r\n };\r\n\r\n // Important: Don't mutate the array, create new instance. This way notifies the Grid component that the layout has changed.\r\n this.layout = [newLayoutItem, ...this.layout];\r\n\r\n this.layout = ktdGridCompact(this.layout, this.compactType, this.cols);\r\n }\r\n\r\n /**\r\n * Fired when a mousedown happens on the remove grid item button.\r\n * Stops the event from propagating an causing the drag to start.\r\n * We don't want to drag when mousedown is fired on remove icon button.\r\n */\r\n stopEventPropagation(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n /** Removes the item from the layout */\r\n removeItem(id: string): void {\r\n // Important: Don't mutate the array. Let Angular know that the layout has changed creating a new reference.\r\n this.layout = ktdArrayRemoveItem(this.layout, (item) => item.id === id);\r\n }\r\n\r\n updateGridBgBorderWidth(borderWidth: string): void {\r\n this.gridBackgroundConfig = {\r\n ...this.gridBackgroundConfig,\r\n borderWidth: Number(borderWidth)\r\n };\r\n }\r\n\r\n updateGridBgColor(color: string, property: string): void {\r\n this.gridBackgroundConfig = {\r\n ...this.gridBackgroundConfig,\r\n [property]: color\r\n };\r\n }\r\n\r\n getCurrentBackgroundVisibility(): string {\r\n return this.gridBackgroundConfig?.show ?? 'never';\r\n }\r\n}\r\n","<div style=\"position: relative\" dir=\"ltr\" fillEmptySpace [setMinHeight]=\"true\">\r\n <buw-grid\r\n [cols]=\"cols\"\r\n [backgroundConfig]=\"gridBackgroundConfig\"\r\n [height]=\"rowHeightFit && gridHeight ? gridHeight : null\"\r\n [rowHeight]=\"rowHeightFit ? 'fit' : rowHeight\"\r\n [layout]=\"layout\"\r\n [compactType]=\"compactType\"\r\n [preventCollision]=\"preventCollision\"\r\n [scrollableParent]=\"autoScroll ? document : null\"\r\n [gap]=\"gap\"\r\n [scrollSpeed]=\"4\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (resizeStarted)=\"onResizeStarted($event)\"\r\n (dragEnded)=\"onDragEnded($event)\"\r\n (resizeEnded)=\"onResizeEnded($event)\"\r\n (layoutUpdated)=\"onLayoutUpdated($event)\"\r\n >\r\n <buw-grid-item\r\n *ngFor=\"let item of layout; trackBy: trackById; let i = index\"\r\n [id]=\"item.id\"\r\n [transition]=\"currentTransition\"\r\n [dragStartThreshold]=\"dragStartThreshold\"\r\n [draggable]=\"!disableDrag\"\r\n [resizable]=\"!disableResize\"\r\n >\r\n <div class=\"grid-item-content\">\r\n @if(moDataList?.length && moDataList[i]?.EjrayOlgo ){\r\n <bnrc-dynamic-item-component [component]=\"moDataList[i].EjrayOlgo\"> </bnrc-dynamic-item-component>\r\n }\r\n \r\n </div>\r\n <div\r\n class=\"grid-item-remove-handle\"\r\n *ngIf=\"!disableRemove\"\r\n (mousedown)=\"stopEventPropagation($event)\"\r\n (click)=\"removeItem(item.id)\"\r\n ></div>\r\n <ng-template *ngIf=\"currentPlaceholder !== 'Default'\" buwGridItemPlaceholder>\r\n <div\r\n *ngIf=\"currentPlaceholder === 'Custom 1'\"\r\n class=\"grid-item-content custom-placeholder custom-placeholder-1\"\r\n >\r\n {{ item.id }}\r\n </div>\r\n <div\r\n *ngIf=\"currentPlaceholder === 'Custom 2'\"\r\n class=\"grid-item-content custom-placeholder custom-placeholder-2\"\r\n >\r\n {{ item.id }}\r\n </div>\r\n <div\r\n *ngIf=\"currentPlaceholder === 'Custom 3'\"\r\n class=\"grid-item-content custom-placeholder custom-placeholder-3\"\r\n >\r\n {{ item.id }}\r\n </div>\r\n </ng-template>\r\n </buw-grid-item>\r\n </buw-grid>\r\n</div>\r\n","import { PipeTransform, Pipe } from '@angular/core';\r\nimport { MetaobjectDataModel } from 'barsa-novin-ray-core';\r\nimport { KtdGridLayout } from './grid.definitions';\r\n\r\n@Pipe({\r\n name: 'layoutGridMapper',\r\n standalone: false\r\n})\r\nexport class LayoutGridMapperPipe implements PipeTransform {\r\n transform(molist: MetaobjectDataModel[]): KtdGridLayout {\r\n const x = molist.map((c) => ({\r\n id: c.Id,\r\n x: +c.x,\r\n y: +c.y,\r\n w: +c.w,\r\n h: +c.h,\r\n minW: c.minW,\r\n minH: c.minH,\r\n maxW: c.maxW,\r\n maxH: c.maxH,\r\n ejrayOlgo: c.EjrayOlgo\r\n }));\r\n return x;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport { ReportViewBaseComponent, UiReportViewBaseSetting } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'buw-report-grid-layout',\r\n templateUrl: './report-grid-layout.component.html',\r\n styleUrls: ['./report-grid-layout.component.scss'],\r\n providers: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class ReportGridLayoutComponent\r\n extends ReportViewBaseComponent<UiReportViewBaseSetting>\r\n implements OnInit, OnDestroy {}\r\n","<div style=\"position: relative\" dir=\"ltr\" fillEmptySpace [setMinHeight]=\"true\">\r\n <buw-layout-container [moDataList]=\"moDataList\" [layout]=\"moDataList | layoutGridMapper\"> </buw-layout-container>\r\n</div>\r\n","import { ComponentFactoryResolver, NgModule, inject } from '@angular/core';\nimport { KtdGridComponent } from './grid/grid.component';\nimport { KtdGridItemComponent } from './grid-item/grid-item.component';\nimport { KtdGridDragHandle } from './directives/drag-handle';\nimport { KtdGridResizeHandle } from './directives/resize-handle';\nimport { KtdGridService } from './grid.service';\nimport { KtdGridItemPlaceholder } from './directives/placeholder';\nimport { BarsaNovinRayCoreModule, BaseModule, DynamicComponentService } from 'barsa-novin-ray-core';\nimport { NavContainerComponent } from './nav-container/nav-container.component';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { FundamentalNgxCoreModule } from '@fundamental-ngx/core';\nimport { FundamentalNgxPlatformModule } from '@fundamental-ngx/platform';\nimport { LayoutContainerComponent } from './layout-container/layout-container.component';\nimport { ReportGridLayoutComponent } from './report-grid-layout/report-grid-layout.component';\nimport { LayoutGridMapperPipe } from './layout-grid-mapper.pipe';\n\nconst components = [\n KtdGridComponent,\n KtdGridItemComponent,\n NavContainerComponent,\n LayoutContainerComponent,\n ReportGridLayoutComponent\n];\nconst pipes = [LayoutGridMapperPipe];\nconst directives = [KtdGridDragHandle, KtdGridResizeHandle, KtdGridItemPlaceholder];\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n DragDropModule,\n CdkTableModule,\n FundamentalNgxCoreModule,\n FundamentalNgxPlatformModule,\n BarsaNovinRayCoreModule\n ],\n declarations: [...components, ...directives, ...pipes],\n providers: [KtdGridService, ...pipes],\n exports: [...components, ...directives]\n})\nexport class BarsaUserWorkspaceModule extends BaseModule {\n protected dcm: DynamicComponentService;\n protected componentFactoryResolver: ComponentFactoryResolver;\n\n protected dynamicComponents = [...components];\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n\n constructor() {\n const dcm = inject(DynamicComponentService);\n const componentFactoryResolver = inject(ComponentFactoryResolver);\n\n super(dcm, componentFactoryResolver, 'BarsaUserWorkspaceModule');\n \n this.dcm = dcm;\n this.componentFactoryResolver = componentFactoryResolver;\n }\n}\n\n","/*\n * Public API Surface of grid\n */\nexport { ktdGridCompact, ktdTrackById } from './lib/utils/grid.utils';\nexport { KtdClientRect } from './lib/utils/client-rect';\nexport * from './lib/directives/drag-handle';\nexport * from './lib/directives/resize-handle';\nexport * from './lib/directives/placeholder';\nexport * from './lib/grid-item/grid-item.component';\nexport * from './lib/grid.definitions';\nexport * from './lib/grid/grid.component';\nexport * from './lib/nav-container/nav-container.component';\nexport * from './lib/layout-container/layout-container.component';\nexport * from './lib/report-grid-layout/report-grid-layout.component';\nexport * from './lib/barsa-user-workspace.module';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter","coerceNumberProperty","i1","i3.KtdGridComponent","i4.KtdGridItemComponent","i5.KtdGridItemPlaceholder","i2.LayoutContainerComponent","i3.LayoutGridMapperPipe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"barsa-user-workspace.mjs","sources":["../../../projects/barsa-user-workspace/src/lib/utils/react-grid-layout.utils.ts","../../../projects/barsa-user-workspace/src/lib/utils/passive-listeners.ts","../../../projects/barsa-user-workspace/src/lib/utils/pointer.utils.ts","../../../projects/barsa-user-workspace/src/lib/utils/grid.utils.ts","../../../projects/barsa-user-workspace/src/lib/directives/drag-handle.ts","../../../projects/barsa-user-workspace/src/lib/directives/resize-handle.ts","../../../projects/barsa-user-workspace/src/lib/directives/placeholder.ts","../../../projects/barsa-user-workspace/src/lib/coercion/boolean-property.ts","../../../projects/barsa-user-workspace/src/lib/coercion/number-property.ts","../../../projects/barsa-user-workspace/src/lib/grid.definitions.ts","../../../projects/barsa-user-workspace/src/lib/grid.service.ts","../../../projects/barsa-user-workspace/src/lib/utils/operators.ts","../../../projects/barsa-user-workspace/src/lib/grid-item/grid-item.component.ts","../../../projects/barsa-user-workspace/src/lib/grid-item/grid-item.component.html","../../../projects/barsa-user-workspace/src/lib/utils/client-rect.ts","../../../projects/barsa-user-workspace/src/lib/utils/scroll.ts","../../../projects/barsa-user-workspace/src/lib/utils/transition-duration.ts","../../../projects/barsa-user-workspace/src/lib/grid/grid.component.ts","../../../projects/barsa-user-workspace/src/lib/grid/grid.component.html","../../../projects/barsa-user-workspace/src/lib/nav-container/nav-container.component.ts","../../../projects/barsa-user-workspace/src/lib/nav-container/nav-container.component.html","../../../projects/barsa-user-workspace/src/lib/utils.ts","../../../projects/barsa-user-workspace/src/lib/layout-container/layout-container.component.ts","../../../projects/barsa-user-workspace/src/lib/layout-container/layout-container.component.html","../../../projects/barsa-user-workspace/src/lib/layout-grid-mapper.pipe.ts","../../../projects/barsa-user-workspace/src/lib/report-grid-layout/report-grid-layout.component.ts","../../../projects/barsa-user-workspace/src/lib/report-grid-layout/report-grid-layout.component.html","../../../projects/barsa-user-workspace/src/lib/barsa-user-workspace.module.ts","../../../projects/barsa-user-workspace/src/public-api.ts","../../../projects/barsa-user-workspace/src/barsa-user-workspace.ts"],"sourcesContent":["/**\n * IMPORTANT:\n * This utils are taken from the project: https://github.com/STRML/react-grid-layout.\n * The code should be as less modified as possible for easy maintenance.\n */\n\n// Disable lint since we don't want to modify this code\n/* eslint-disable */\nexport type LayoutItem = {\n w: number;\n h: number;\n x: number;\n y: number;\n id: string;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n moved?: boolean;\n static?: boolean;\n isDraggable?: boolean | null | undefined;\n isResizable?: boolean | null | undefined;\n};\nexport type Layout = Array<LayoutItem>;\nexport type Position = {\n left: number;\n top: number;\n width: number;\n height: number;\n};\nexport type ReactDraggableCallbackData = {\n node: HTMLElement;\n x?: number;\n y?: number;\n deltaX: number;\n deltaY: number;\n lastX?: number;\n lastY?: number;\n};\n\nexport type PartialPosition = { left: number; top: number };\nexport type DroppingPosition = { x: number; y: number; e: Event };\nexport type Size = { width: number; height: number };\nexport type GridDragEvent = {\n e: Event;\n node: HTMLElement;\n newPosition: PartialPosition;\n};\nexport type GridResizeEvent = { e: Event; node: HTMLElement; size: Size };\nexport type DragOverEvent = MouseEvent & {\n nativeEvent: {\n layerX: number;\n layerY: number;\n target: {\n className: String;\n };\n };\n};\n\n//type REl = ReactElement<any>;\n//export type ReactChildren = ReactChildrenArray<REl>;\n\n// All callbacks are of the signature (layout, oldItem, newItem, placeholder, e).\nexport type EventCallback = (\n arg0: Layout,\n oldItem: LayoutItem | null | undefined,\n newItem: LayoutItem | null | undefined,\n placeholder: LayoutItem | null | undefined,\n arg4: Event,\n arg5: HTMLElement | null | undefined\n) => void;\nexport type CompactType = ('horizontal' | 'vertical') | null | undefined;\n\nconst DEBUG = false;\n\n/**\n * Return the bottom coordinate of the layout.\n *\n * @param {Array} layout Layout array.\n * @return {Number} Bottom coordinate.\n */\nexport function bottom(layout: Layout): number {\n let max = 0,\n bottomY;\n for (let i = 0, len = layout.length; i < len; i++) {\n bottomY = layout[i].y + layout[i].h;\n if (bottomY > max) {\n max = bottomY;\n }\n }\n return max;\n}\n\nexport function cloneLayout(layout: Layout): Layout {\n const newLayout = Array(layout.length);\n for (let i = 0, len = layout.length; i < len; i++) {\n newLayout[i] = cloneLayoutItem(layout[i]);\n }\n return newLayout;\n}\n\n// Fast path to cloning, since this is monomorphic\n/** NOTE: This code has been modified from the original source */\nexport function cloneLayoutItem(layoutItem: LayoutItem): LayoutItem {\n const clonedLayoutItem: LayoutItem = {\n w: layoutItem.w,\n h: layoutItem.h,\n x: layoutItem.x,\n y: layoutItem.y,\n id: layoutItem.id,\n moved: !!layoutItem.moved,\n static: !!layoutItem.static\n };\n\n if (layoutItem.minW !== undefined) {\n clonedLayoutItem.minW = layoutItem.minW;\n }\n if (layoutItem.maxW !== undefined) {\n clonedLayoutItem.maxW = layoutItem.maxW;\n }\n if (layoutItem.minH !== undefined) {\n clonedLayoutItem.minH = layoutItem.minH;\n }\n if (layoutItem.maxH !== undefined) {\n clonedLayoutItem.maxH = layoutItem.maxH;\n }\n // These can be null\n if (layoutItem.isDraggable !== undefined) {\n clonedLayoutItem.isDraggable = layoutItem.isDraggable;\n }\n if (layoutItem.isResizable !== undefined) {\n clonedLayoutItem.isResizable = layoutItem.isResizable;\n }\n\n return clonedLayoutItem;\n}\n\n/**\n * Given two layoutitems, check if they collide.\n */\nexport function collides(l1: LayoutItem, l2: LayoutItem): boolean {\n if (l1.id === l2.id) {\n return false;\n } // same element\n if (l1.x + l1.w <= l2.x) {\n return false;\n } // l1 is left of l2\n if (l1.x >= l2.x + l2.w) {\n return false;\n } // l1 is right of l2\n if (l1.y + l1.h <= l2.y) {\n return false;\n } // l1 is above l2\n if (l1.y >= l2.y + l2.h) {\n return false;\n } // l1 is below l2\n return true; // boxes overlap\n}\n\n/**\n * Given a layout, compact it. This involves going down each y coordinate and removing gaps\n * between items.\n *\n * @param {Array} layout Layout.\n * @param {Boolean} verticalCompact Whether or not to compact the layout\n * vertically.\n * @return {Array} Compacted Layout.\n */\nexport function compact(layout: Layout, compactType: CompactType, cols: number): Layout {\n // Statics go in the compareWith array right away so items flow around them.\n const compareWith = getStatics(layout);\n // We go through the items by row and column.\n const sorted = sortLayoutItems(layout, compactType);\n // Holding for new items.\n const out = Array(layout.length);\n\n for (let i = 0, len = sorted.length; i < len; i++) {\n let l = cloneLayoutItem(sorted[i]);\n\n // Don't move static elements\n if (!l.static) {\n l = compactItem(compareWith, l, compactType, cols, sorted);\n\n // Add to comparison array. We only collide with items before this one.\n // Statics are already in this array.\n compareWith.push(l);\n }\n\n // Add to output array to make sure they still come out in the right order.\n out[layout.indexOf(sorted[i])] = l;\n\n // Clear moved flag, if it exists.\n l.moved = false;\n }\n\n return out;\n}\n\nconst heightWidth = { x: 'w', y: 'h' };\n\n/**\n * Before moving item down, it will check if the movement will cause collisions and move those items down before.\n */\nfunction resolveCompactionCollision(layout: Layout, item: LayoutItem, moveToCoord: number, axis: 'x' | 'y') {\n const sizeProp = heightWidth[axis];\n item[axis] += 1;\n const itemIndex = layout\n .map((layoutItem) => {\n return layoutItem.id;\n })\n .indexOf(item.id);\n\n // Go through each item we collide with.\n for (let i = itemIndex + 1; i < layout.length; i++) {\n const otherItem = layout[i];\n // Ignore static items\n if (otherItem.static) {\n continue;\n }\n\n // Optimization: we can break early if we know we're past this el\n // We can do this b/c it's a sorted layout\n if (otherItem.y > item.y + item.h) {\n break;\n }\n\n if (collides(item, otherItem)) {\n resolveCompactionCollision(layout, otherItem, moveToCoord + item[sizeProp], axis);\n }\n }\n\n item[axis] = moveToCoord;\n}\n\n/**\n * Compact an item in the layout.\n */\nexport function compactItem(\n compareWith: Layout,\n l: LayoutItem,\n compactType: CompactType,\n cols: number,\n fullLayout: Layout\n): LayoutItem {\n const compactV = compactType === 'vertical';\n const compactH = compactType === 'horizontal';\n if (compactV) {\n // Bottom 'y' possible is the bottom of the layout.\n // This allows you to do nice stuff like specify {y: Infinity}\n // This is here because the layout must be sorted in order to get the correct bottom `y`.\n l.y = Math.min(bottom(compareWith), l.y);\n // Move the element up as far as it can go without colliding.\n while (l.y > 0 && !getFirstCollision(compareWith, l)) {\n l.y--;\n }\n } else if (compactH) {\n // Move the element left as far as it can go without colliding.\n while (l.x > 0 && !getFirstCollision(compareWith, l)) {\n l.x--;\n }\n }\n\n // Move it down, and keep moving it down if it's colliding.\n let collides;\n while ((collides = getFirstCollision(compareWith, l))) {\n if (compactH) {\n resolveCompactionCollision(fullLayout, l, collides.x + collides.w, 'x');\n } else {\n resolveCompactionCollision(fullLayout, l, collides.y + collides.h, 'y');\n }\n // Since we can't grow without bounds horizontally, if we've overflown, let's move it down and try again.\n if (compactH && l.x + l.w > cols) {\n l.x = cols - l.w;\n l.y++;\n\n // ALso move element as left as much as we can (buw-custom-change)\n while (l.x > 0 && !getFirstCollision(compareWith, l)) {\n l.x--;\n }\n }\n }\n\n // Ensure that there are no negative positions\n l.y = Math.max(l.y, 0);\n l.x = Math.max(l.x, 0);\n\n return l;\n}\n\n/**\n * Given a layout, make sure all elements fit within its bounds.\n *\n * @param {Array} layout Layout array.\n * @param {Number} bounds Number of columns.\n */\nexport function correctBounds(layout: Layout, bounds: { cols: number }): Layout {\n const collidesWith = getStatics(layout);\n for (let i = 0, len = layout.length; i < len; i++) {\n const l = layout[i];\n // Overflows right\n if (l.x + l.w > bounds.cols) {\n l.x = bounds.cols - l.w;\n }\n // Overflows left\n if (l.x < 0) {\n l.x = 0;\n l.w = bounds.cols;\n }\n if (!l.static) {\n collidesWith.push(l);\n } else {\n // If this is static and collides with other statics, we must move it down.\n // We have to do something nicer than just letting them overlap.\n while (getFirstCollision(collidesWith, l)) {\n l.y++;\n }\n }\n }\n return layout;\n}\n\n/**\n * Get a layout item by ID. Used so we can override later on if necessary.\n *\n * @param {Array} layout Layout array.\n * @param {String} id ID\n * @return {LayoutItem} Item at ID.\n */\nexport function getLayoutItem(layout: Layout, id: string): LayoutItem | null | undefined {\n for (let i = 0, len = layout.length; i < len; i++) {\n if (layout[i].id === id) {\n return layout[i];\n }\n }\n return null;\n}\n\n/**\n * Returns the first item this layout collides with.\n * It doesn't appear to matter which order we approach this from, although\n * perhaps that is the wrong thing to do.\n *\n * @param {Object} layoutItem Layout item.\n * @return {Object|undefined} A colliding layout item, or undefined.\n */\nexport function getFirstCollision(layout: Layout, layoutItem: LayoutItem): LayoutItem | null | undefined {\n for (let i = 0, len = layout.length; i < len; i++) {\n if (collides(layout[i], layoutItem)) {\n return layout[i];\n }\n }\n return null;\n}\n\nexport function getAllCollisions(layout: Layout, layoutItem: LayoutItem): Array<LayoutItem> {\n return layout.filter((l) => collides(l, layoutItem));\n}\n\n/**\n * Get all static elements.\n * @param {Array} layout Array of layout objects.\n * @return {Array} Array of static layout items..\n */\nexport function getStatics(layout: Layout): Array<LayoutItem> {\n return layout.filter((l) => l.static);\n}\n\n/**\n * Move an element. Responsible for doing cascading movements of other elements.\n *\n * @param {Array} layout Full layout to modify.\n * @param {LayoutItem} l element to move.\n * @param {Number} [x] X position in grid units.\n * @param {Number} [y] Y position in grid units.\n */\nexport function moveElement(\n layout: Layout,\n l: LayoutItem,\n x: number | null | undefined,\n y: number | null | undefined,\n isUserAction: boolean | null | undefined,\n preventCollision: boolean | null | undefined,\n compactType: CompactType,\n cols: number\n): Layout {\n // If this is static and not explicitly enabled as draggable,\n // no move is possible, so we can short-circuit this immediately.\n if (l.static && l.isDraggable !== true) {\n return layout;\n }\n\n // Short-circuit if nothing to do.\n if (l.y === y && l.x === x) {\n return layout;\n }\n\n log(`Moving element ${l.id} to [${String(x)},${String(y)}] from [${l.x},${l.y}]`);\n const oldX = l.x;\n const oldY = l.y;\n\n // This is quite a bit faster than extending the object\n if (typeof x === 'number') {\n l.x = x;\n }\n if (typeof y === 'number') {\n l.y = y;\n }\n l.moved = true;\n\n // If this collides with anything, move it.\n // When doing this comparison, we have to sort the items we compare with\n // to ensure, in the case of multiple collisions, that we're getting the\n // nearest collision.\n let sorted = sortLayoutItems(layout, compactType);\n const movingUp =\n compactType === 'vertical' && typeof y === 'number'\n ? oldY >= y\n : compactType === 'horizontal' && typeof x === 'number'\n ? oldX >= x\n : false;\n if (movingUp) {\n sorted = sorted.reverse();\n }\n const collisions = getAllCollisions(sorted, l);\n\n // There was a collision; abort\n if (preventCollision && collisions.length) {\n log(`Collision prevented on ${l.id}, reverting.`);\n l.x = oldX;\n l.y = oldY;\n l.moved = false;\n return layout;\n }\n\n // Move each item that collides away from this element.\n for (let i = 0, len = collisions.length; i < len; i++) {\n const collision = collisions[i];\n log(\n `Resolving collision between ${l.id} at [${l.x},${l.y}] and ${collision.id} at [${collision.x},${collision.y}]`\n );\n\n // Short circuit so we can't infinite loop\n if (collision.moved) {\n continue;\n }\n\n // Don't move static items - we have to move *this* element away\n if (collision.static) {\n layout = moveElementAwayFromCollision(layout, collision, l, isUserAction, compactType, cols);\n } else {\n layout = moveElementAwayFromCollision(layout, l, collision, isUserAction, compactType, cols);\n }\n }\n\n return layout;\n}\n\n/**\n * This is where the magic needs to happen - given a collision, move an element away from the collision.\n * We attempt to move it up if there's room, otherwise it goes below.\n *\n * @param {Array} layout Full layout to modify.\n * @param {LayoutItem} collidesWith Layout item we're colliding with.\n * @param {LayoutItem} itemToMove Layout item we're moving.\n */\nexport function moveElementAwayFromCollision(\n layout: Layout,\n collidesWith: LayoutItem,\n itemToMove: LayoutItem,\n isUserAction: boolean | null | undefined,\n compactType: CompactType,\n cols: number\n): Layout {\n const compactH = compactType === 'horizontal';\n // Compact vertically if not set to horizontal\n const compactV = compactType !== 'horizontal';\n const preventCollision = collidesWith.static; // we're already colliding (not for static items)\n\n // If there is enough space above the collision to put this element, move it there.\n // We only do this on the main collision as this can get funky in cascades and cause\n // unwanted swapping behavior.\n if (isUserAction) {\n // Reset isUserAction flag because we're not in the main collision anymore.\n isUserAction = false;\n\n // Make a mock item so we don't modify the item here, only modify in moveElement.\n const fakeItem: LayoutItem = {\n x: compactH ? Math.max(collidesWith.x - itemToMove.w, 0) : itemToMove.x,\n y: compactV ? Math.max(collidesWith.y - itemToMove.h, 0) : itemToMove.y,\n w: itemToMove.w,\n h: itemToMove.h,\n id: '-1'\n };\n\n // No collision? If so, we can go up there; otherwise, we'll end up moving down as normal\n if (!getFirstCollision(layout, fakeItem)) {\n log(`Doing reverse collision on ${itemToMove.id} up to [${fakeItem.x},${fakeItem.y}].`);\n return moveElement(\n layout,\n itemToMove,\n compactH ? fakeItem.x : undefined,\n compactV ? fakeItem.y : undefined,\n isUserAction,\n preventCollision,\n compactType,\n cols\n );\n }\n }\n\n return moveElement(\n layout,\n itemToMove,\n compactH ? itemToMove.x + 1 : undefined,\n compactV ? itemToMove.y + 1 : undefined,\n isUserAction,\n preventCollision,\n compactType,\n cols\n );\n}\n\n/**\n * Helper to convert a number to a percentage string.\n *\n * @param {Number} num Any number\n * @return {String} That number as a percentage.\n */\nexport function perc(num: number): string {\n return num * 100 + '%';\n}\n\nexport function setTransform({ top, left, width, height }: Position): Object {\n // Replace unitless items with px\n const translate = `translate(${left}px,${top}px)`;\n return {\n transform: translate,\n WebkitTransform: translate,\n MozTransform: translate,\n msTransform: translate,\n OTransform: translate,\n width: `${width}px`,\n height: `${height}px`,\n position: 'absolute'\n };\n}\n\nexport function setTopLeft({ top, left, width, height }: Position): Object {\n return {\n top: `${top}px`,\n left: `${left}px`,\n width: `${width}px`,\n height: `${height}px`,\n position: 'absolute'\n };\n}\n\n/**\n * Get layout items sorted from top left to right and down.\n *\n * @return {Array} Array of layout objects.\n * @return {Array} Layout, sorted static items first.\n */\nexport function sortLayoutItems(layout: Layout, compactType: CompactType): Layout {\n if (compactType === 'horizontal') {\n return sortLayoutItemsByColRow(layout);\n } else {\n return sortLayoutItemsByRowCol(layout);\n }\n}\n\nexport function sortLayoutItemsByRowCol(layout: Layout): Layout {\n return ([] as any[]).concat(layout).sort(function (a, b) {\n if (a.y > b.y || (a.y === b.y && a.x > b.x)) {\n return 1;\n } else if (a.y === b.y && a.x === b.x) {\n // Without this, we can get different sort results in IE vs. Chrome/FF\n return 0;\n }\n return -1;\n });\n}\n\nexport function sortLayoutItemsByColRow(layout: Layout): Layout {\n return ([] as any[]).concat(layout).sort(function (a, b) {\n if (a.x > b.x || (a.x === b.x && a.y > b.y)) {\n return 1;\n }\n return -1;\n });\n}\n\n/**\n * Validate a layout. Throws errors.\n *\n * @param {Array} layout Array of layout items.\n * @param {String} [contextName] Context name for errors.\n * @throw {Error} Validation error.\n */\nexport function validateLayout(layout: Layout, contextName: string = 'Layout'): void {\n const subProps = ['x', 'y', 'w', 'h'];\n if (!Array.isArray(layout)) {\n throw new Error(contextName + ' must be an array!');\n }\n for (let i = 0, len = layout.length; i < len; i++) {\n const item = layout[i];\n for (let j = 0; j < subProps.length; j++) {\n if (typeof item[subProps[j]] !== 'number') {\n throw new Error(\n 'ReactGridLayout: ' + contextName + '[' + i + '].' + subProps[j] + ' must be a number!'\n );\n }\n }\n if (item.id && typeof item.id !== 'string') {\n throw new Error('ReactGridLayout: ' + contextName + '[' + i + '].i must be a string!');\n }\n if (item.static !== undefined && typeof item.static !== 'boolean') {\n throw new Error('ReactGridLayout: ' + contextName + '[' + i + '].static must be a boolean!');\n }\n }\n}\n\n// Flow can't really figure this out, so we just use Object\nexport function autoBindHandlers(el: Object, fns: Array<string>): void {\n fns.forEach((key) => (el[key] = el[key].bind(el)));\n}\n\nfunction log(...args) {\n if (!DEBUG) {\n return;\n }\n\n console.log(...args);\n}\n\nexport const noop = () => {};\n\n","/** Cached result of whether the user's browser supports passive event listeners. */\nlet supportsPassiveEvents: boolean;\n\n/**\n * Checks whether the user's browser supports passive event listeners.\n * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n */\nexport function ktdSupportsPassiveEventListeners(): boolean {\n if (supportsPassiveEvents == null && typeof window !== 'undefined') {\n try {\n window.addEventListener('test', null!, Object.defineProperty({}, 'passive', {\n get: () => supportsPassiveEvents = true\n }));\n } finally {\n supportsPassiveEvents = supportsPassiveEvents || false;\n }\n }\n\n return supportsPassiveEvents;\n}\n\n/**\n * Normalizes an `AddEventListener` object to something that can be passed\n * to `addEventListener` on any browser, no matter whether it supports the\n * `options` parameter.\n * @param options Object to be normalized.\n */\nexport function ktdNormalizePassiveListenerOptions(options: AddEventListenerOptions):\n AddEventListenerOptions | boolean {\n return ktdSupportsPassiveEventListeners() ? options : !!options.capture;\n}\n","import { fromEvent, iif, merge, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { ktdNormalizePassiveListenerOptions } from './passive-listeners';\n\n/** Options that can be used to bind a passive event listener. */\nconst passiveEventListenerOptions = ktdNormalizePassiveListenerOptions({ passive: true });\n\n/** Options that can be used to bind an active event listener. */\nconst activeEventListenerOptions = ktdNormalizePassiveListenerOptions({ passive: false });\n\nlet isMobile: boolean | null = null;\n\nexport function ktdIsMobileOrTablet(): boolean {\n if (isMobile != null) {\n return isMobile;\n }\n\n // Generic match pattern to identify mobile or tablet devices\n const isMobileDevice = /Android|webOS|BlackBerry|Windows Phone|iPad|iPhone|iPod/i.test(navigator.userAgent);\n\n // Since IOS 13 is not safe to just check for the generic solution.\n // See: https://stackoverflow.com/questions/58019463/how-to-detect-device-name-in-safari-on-ios-13-while-it-doesnt-show-the-correct\n const isIOSMobileDevice =\n /iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n\n isMobile = isMobileDevice || isIOSMobileDevice;\n\n return isMobile;\n}\n\nexport function ktdIsMouseEvent(event: any): event is MouseEvent {\n return (event as MouseEvent).clientX != null;\n}\n\nexport function ktdIsTouchEvent(event: any): event is TouchEvent {\n return (event as TouchEvent).touches != null && (event as TouchEvent).touches.length != null;\n}\n\nexport function ktdPointerClientX(event: MouseEvent | TouchEvent): number {\n return ktdIsMouseEvent(event) ? event.clientX : event.touches[0].clientX;\n}\n\nexport function ktdPointerClientY(event: MouseEvent | TouchEvent): number {\n return ktdIsMouseEvent(event) ? event.clientY : event.touches[0].clientY;\n}\n\nexport function ktdPointerClient(event: MouseEvent | TouchEvent): { clientX: number; clientY: number } {\n return {\n clientX: ktdIsMouseEvent(event) ? event.clientX : event.touches[0].clientX,\n clientY: ktdIsMouseEvent(event) ? event.clientY : event.touches[0].clientY\n };\n}\n\nexport function ktdIsMouseEventOrMousePointerEvent(event: MouseEvent | TouchEvent | PointerEvent): boolean {\n return (\n event.type === 'mousedown' || (event.type === 'pointerdown' && (event as PointerEvent).pointerType === 'mouse')\n );\n}\n\n/** Returns true if browser supports pointer events */\nexport function ktdSupportsPointerEvents(): boolean {\n return !!window.PointerEvent;\n}\n\n/**\n * Emits when a mousedown or touchstart emits. Avoids conflicts between both events.\n * @param element, html element where to listen the events.\n * @param touchNumber number of the touch to track the event, default to the first one.\n */\nfunction ktdMouseOrTouchDown(element, touchNumber = 1): Observable<MouseEvent | TouchEvent> {\n return iif(\n () => ktdIsMobileOrTablet(),\n fromEvent<TouchEvent>(element, 'touchstart', passiveEventListenerOptions as AddEventListenerOptions).pipe(\n filter((touchEvent) => touchEvent.touches.length === touchNumber)\n ),\n fromEvent<MouseEvent>(element, 'mousedown', activeEventListenerOptions as AddEventListenerOptions).pipe(\n filter((mouseEvent: MouseEvent) => \n /**\n * 0 : Left mouse button\n * 1 : Wheel button or middle button (if present)\n * 2 : Right mouse button\n */\n mouseEvent.button === 0 // Mouse down to be only fired if is left click\n )\n )\n );\n}\n\n/**\n * Emits when a 'mousemove' or a 'touchmove' event gets fired.\n * @param element, html element where to listen the events.\n * @param touchNumber number of the touch to track the event, default to the first one.\n */\nfunction ktdMouseOrTouchMove(element: HTMLElement, touchNumber = 1): Observable<MouseEvent | TouchEvent> {\n return iif(\n () => ktdIsMobileOrTablet(),\n fromEvent<TouchEvent>(element, 'touchmove', activeEventListenerOptions as AddEventListenerOptions).pipe(\n filter((touchEvent) => touchEvent.touches.length === touchNumber)\n ),\n fromEvent<MouseEvent>(element, 'mousemove', activeEventListenerOptions as AddEventListenerOptions)\n );\n}\n\nexport function ktdTouchEnd(element, touchNumber = 1): Observable<TouchEvent> {\n return merge(\n fromEvent<TouchEvent>(element, 'touchend').pipe(\n filter((touchEvent) => touchEvent.touches.length === touchNumber - 1)\n ),\n fromEvent<TouchEvent>(element, 'touchcancel').pipe(\n filter((touchEvent) => touchEvent.touches.length === touchNumber - 1)\n )\n );\n}\n\n/**\n * Emits when a there is a 'mouseup' or the touch ends.\n * @param element, html element where to listen the events.\n * @param touchNumber number of the touch to track the event, default to the first one.\n */\nfunction ktdMouserOrTouchEnd(element: HTMLElement, touchNumber = 1): Observable<MouseEvent | TouchEvent> {\n return iif(\n () => ktdIsMobileOrTablet(),\n ktdTouchEnd(element, touchNumber),\n fromEvent<MouseEvent>(element, 'mouseup')\n );\n}\n\n/**\n * Emits when a 'pointerdown' event occurs (only for the primary pointer). Fallbacks to 'mousemove' or a 'touchmove' if pointer events are not supported.\n * @param element, html element where to listen the events.\n */\nexport function ktdPointerDown(element): Observable<MouseEvent | TouchEvent | PointerEvent> {\n if (!ktdSupportsPointerEvents()) {\n return ktdMouseOrTouchDown(element);\n }\n\n return fromEvent<PointerEvent>(element, 'pointerdown', activeEventListenerOptions as AddEventListenerOptions).pipe(\n filter((pointerEvent) => pointerEvent.isPrimary)\n );\n}\n\n/**\n * Emits when a 'pointermove' event occurs (only for the primary pointer). Fallbacks to 'mousemove' or a 'touchmove' if pointer events are not supported.\n * @param element, html element where to listen the events.\n */\nexport function ktdPointerMove(element): Observable<MouseEvent | TouchEvent | PointerEvent> {\n if (!ktdSupportsPointerEvents()) {\n return ktdMouseOrTouchMove(element);\n }\n return fromEvent<PointerEvent>(element, 'pointermove', activeEventListenerOptions as AddEventListenerOptions).pipe(\n filter((pointerEvent) => pointerEvent.isPrimary)\n );\n}\n\n/**\n * Emits when a 'pointerup' event occurs (only for the primary pointer). Fallbacks to 'mousemove' or a 'touchmove' if pointer events are not supported.\n * @param element, html element where to listen the events.\n */\nexport function ktdPointerUp(element): Observable<MouseEvent | TouchEvent | PointerEvent> {\n if (!ktdSupportsPointerEvents()) {\n return ktdMouserOrTouchEnd(element);\n }\n return fromEvent<PointerEvent>(element, 'pointerup').pipe(filter((pointerEvent) => pointerEvent.isPrimary));\n}\n\n","import { compact, CompactType, getFirstCollision, Layout, LayoutItem, moveElement } from './react-grid-layout.utils';\nimport {\n KtdDraggingData,\n KtdGridCfg,\n KtdGridCompactType,\n KtdGridItemRect,\n KtdGridLayout,\n KtdGridLayoutItem\n} from '../grid.definitions';\nimport { ktdPointerClientX, ktdPointerClientY } from './pointer.utils';\nimport { KtdDictionary } from '../../types';\nimport { KtdGridItemComponent } from '../grid-item/grid-item.component';\n\n/** Tracks items by id. This function is mean to be used in conjunction with the ngFor that renders the 'buw-grid-items' */\nexport function ktdTrackById(_index: number, item: { id: string }): any {\n return item.id;\n}\n\n/** Given a layout, the gridHeight and the gap return the resulting rowHeight */\nexport function ktdGetGridItemRowHeight(layout: KtdGridLayout, gridHeight: number, gap: number): number {\n const numberOfRows = layout.reduce((acc, cur) => Math.max(acc, Math.max(cur.y + cur.h, 0)), 0);\n const gapTotalHeight = (numberOfRows - 1) * gap;\n const gridHeightMinusGap = gridHeight - gapTotalHeight;\n return gridHeightMinusGap / numberOfRows;\n}\n\n/**\n * Call react-grid-layout utils 'compact()' function and return the compacted layout.\n * @param layout to be compacted.\n * @param compactType, type of compaction.\n * @param cols, number of columns of the grid.\n */\nexport function ktdGridCompact(layout: KtdGridLayout, compactType: KtdGridCompactType, cols: number): KtdGridLayout {\n return (\n compact(layout, compactType, cols)\n // Prune react-grid-layout compact extra properties.\n .map((item) => ({\n id: item.id,\n x: item.x,\n y: item.y,\n w: item.w,\n h: item.h,\n minW: item.minW,\n minH: item.minH,\n maxW: item.maxW,\n maxH: item.maxH\n }))\n );\n}\n\nfunction screenXToGridX(screenXPos: number, cols: number, width: number, gap: number): number {\n const widthMinusGaps = width - gap * (cols - 1);\n const itemWidth = widthMinusGaps / cols;\n const widthMinusOneItem = width - itemWidth;\n const colWidthWithGap = widthMinusOneItem / (cols - 1);\n return Math.round(screenXPos / colWidthWithGap);\n}\n\nfunction screenYToGridY(screenYPos: number, rowHeight: number, _height: number, gap: number): number {\n return Math.round(screenYPos / (rowHeight + gap));\n}\n\nfunction screenWidthToGridWidth(gridScreenWidth: number, cols: number, width: number, gap: number): number {\n const widthMinusGaps = width - gap * (cols - 1);\n const itemWidth = widthMinusGaps / cols;\n const gridScreenWidthMinusFirst = gridScreenWidth - itemWidth;\n return Math.round(gridScreenWidthMinusFirst / (itemWidth + gap)) + 1;\n}\n\nfunction screenHeightToGridHeight(gridScreenHeight: number, rowHeight: number, _height: number, gap: number): number {\n const gridScreenHeightMinusFirst = gridScreenHeight - rowHeight;\n return Math.round(gridScreenHeightMinusFirst / (rowHeight + gap)) + 1;\n}\n\n/** Returns a Dictionary where the key is the id and the value is the change applied to that item. If no changes Dictionary is empty. */\nexport function ktdGetGridLayoutDiff(\n gridLayoutA: KtdGridLayoutItem[],\n gridLayoutB: KtdGridLayoutItem[]\n): KtdDictionary<{ change: 'move' | 'resize' | 'moveresize' }> {\n const diff: KtdDictionary<{ change: 'move' | 'resize' | 'moveresize' }> = {};\n\n gridLayoutA.forEach((itemA) => {\n const itemB = gridLayoutB.find((_itemB) => _itemB.id === itemA.id);\n if (itemB != null) {\n const posChanged = itemA.x !== itemB.x || itemA.y !== itemB.y;\n const sizeChanged = itemA.w !== itemB.w || itemA.h !== itemB.h;\n const change: 'move' | 'resize' | 'moveresize' | null =\n posChanged && sizeChanged ? 'moveresize' : posChanged ? 'move' : sizeChanged ? 'resize' : null;\n if (change) {\n diff[itemB.id] = { change };\n }\n }\n });\n return diff;\n}\n\n/**\n * Given the grid config & layout data and the current drag position & information, returns the corresponding layout and drag item position\n * @param gridItem grid item that is been dragged\n * @param config current grid configuration\n * @param compactionType type of compaction that will be performed\n * @param draggingData contains all the information about the drag\n */\nexport function ktdGridItemDragging(\n gridItem: KtdGridItemComponent,\n config: KtdGridCfg,\n compactionType: CompactType,\n draggingData: KtdDraggingData\n): { layout: KtdGridLayoutItem[]; draggedItemPos: KtdGridItemRect } {\n const { pointerDownEvent, pointerDragEvent, gridElemClientRect, dragElemClientRect, scrollDifference } =\n draggingData;\n\n const gridItemId = gridItem.id;\n\n const draggingElemPrevItem = config.layout.find((item) => item.id === gridItemId)!;\n\n const clientStartX = ktdPointerClientX(pointerDownEvent);\n const clientStartY = ktdPointerClientY(pointerDownEvent);\n const clientX = ktdPointerClientX(pointerDragEvent);\n const clientY = ktdPointerClientY(pointerDragEvent);\n\n const offsetX = clientStartX - dragElemClientRect.left;\n const offsetY = clientStartY - dragElemClientRect.top;\n\n // Grid element positions taking into account the possible scroll total difference from the beginning.\n const gridElementLeftPosition = gridElemClientRect.left + scrollDifference.left;\n const gridElementTopPosition = gridElemClientRect.top + scrollDifference.top;\n\n // Calculate position relative to the grid element.\n const gridRelXPos = clientX - gridElementLeftPosition - offsetX;\n const gridRelYPos = clientY - gridElementTopPosition - offsetY;\n\n const rowHeightInPixels =\n config.rowHeight === 'fit'\n ? ktdGetGridItemRowHeight(config.layout, config.height ?? gridElemClientRect.height, config.gap)\n : config.rowHeight;\n\n // Get layout item position\n const layoutItem: KtdGridLayoutItem = {\n ...draggingElemPrevItem,\n x: screenXToGridX(gridRelXPos, config.cols, gridElemClientRect.width, config.gap),\n y: screenYToGridY(gridRelYPos, rowHeightInPixels, gridElemClientRect.height, config.gap)\n };\n\n // Correct the values if they overflow, since 'moveElement' function doesn't do it\n layoutItem.x = Math.max(0, layoutItem.x);\n layoutItem.y = Math.max(0, layoutItem.y);\n if (layoutItem.x + layoutItem.w > config.cols) {\n layoutItem.x = Math.max(0, config.cols - layoutItem.w);\n }\n\n // Parse to LayoutItem array data in order to use 'react.grid-layout' utils\n const layoutItems: LayoutItem[] = config.layout;\n const draggedLayoutItem: LayoutItem = layoutItems.find((item) => item.id === gridItemId)!;\n\n let newLayoutItems: LayoutItem[] = moveElement(\n layoutItems,\n draggedLayoutItem,\n layoutItem.x,\n layoutItem.y,\n true,\n config.preventCollision,\n compactionType,\n config.cols\n );\n\n newLayoutItems = compact(newLayoutItems, compactionType, config.cols);\n\n return {\n layout: newLayoutItems,\n draggedItemPos: {\n top: gridRelYPos,\n left: gridRelXPos,\n width: dragElemClientRect.width,\n height: dragElemClientRect.height\n }\n };\n}\n\n/**\n * Given the grid config & layout data and the current drag position & information, returns the corresponding layout and drag item position\n * @param gridItem grid item that is been dragged\n * @param config current grid configuration\n * @param compactionType type of compaction that will be performed\n * @param draggingData contains all the information about the drag\n */\nexport function ktdGridItemResizing(\n gridItem: KtdGridItemComponent,\n config: KtdGridCfg,\n compactionType: CompactType,\n draggingData: KtdDraggingData\n): { layout: KtdGridLayoutItem[]; draggedItemPos: KtdGridItemRect } {\n const { pointerDownEvent, pointerDragEvent, gridElemClientRect, dragElemClientRect, scrollDifference } =\n draggingData;\n const gridItemId = gridItem.id;\n\n const clientStartX = ktdPointerClientX(pointerDownEvent);\n const clientStartY = ktdPointerClientY(pointerDownEvent);\n const clientX = ktdPointerClientX(pointerDragEvent);\n const clientY = ktdPointerClientY(pointerDragEvent);\n\n // Get the difference between the mouseDown and the position 'right' of the resize element.\n const resizeElemOffsetX = dragElemClientRect.width - (clientStartX - dragElemClientRect.left);\n const resizeElemOffsetY = dragElemClientRect.height - (clientStartY - dragElemClientRect.top);\n\n const draggingElemPrevItem = config.layout.find((item) => item.id === gridItemId)!;\n const width = clientX + resizeElemOffsetX - (dragElemClientRect.left + scrollDifference.left);\n const height = clientY + resizeElemOffsetY - (dragElemClientRect.top + scrollDifference.top);\n\n const rowHeightInPixels =\n config.rowHeight === 'fit'\n ? ktdGetGridItemRowHeight(config.layout, config.height ?? gridElemClientRect.height, config.gap)\n : config.rowHeight;\n\n // Get layout item grid position\n const layoutItem: KtdGridLayoutItem = {\n ...draggingElemPrevItem,\n w: screenWidthToGridWidth(width, config.cols, gridElemClientRect.width, config.gap),\n h: screenHeightToGridHeight(height, rowHeightInPixels, gridElemClientRect.height, config.gap)\n };\n\n layoutItem.w = limitNumberWithinRange(\n layoutItem.w,\n gridItem.minW ?? layoutItem.minW,\n gridItem.maxW ?? layoutItem.maxW\n );\n layoutItem.h = limitNumberWithinRange(\n layoutItem.h,\n gridItem.minH ?? layoutItem.minH,\n gridItem.maxH ?? layoutItem.maxH\n );\n\n if (layoutItem.x + layoutItem.w > config.cols) {\n layoutItem.w = Math.max(1, config.cols - layoutItem.x);\n }\n\n if (config.preventCollision) {\n const maxW = layoutItem.w;\n const maxH = layoutItem.h;\n\n let colliding = hasCollision(config.layout, layoutItem);\n let shrunkDimension: 'w' | 'h' | undefined;\n\n while (colliding) {\n shrunkDimension = getDimensionToShrink(layoutItem, shrunkDimension);\n layoutItem[shrunkDimension]--;\n colliding = hasCollision(config.layout, layoutItem);\n }\n\n if (shrunkDimension === 'w') {\n layoutItem.h = maxH;\n\n colliding = hasCollision(config.layout, layoutItem);\n while (colliding) {\n layoutItem.h--;\n colliding = hasCollision(config.layout, layoutItem);\n }\n }\n if (shrunkDimension === 'h') {\n layoutItem.w = maxW;\n\n colliding = hasCollision(config.layout, layoutItem);\n while (colliding) {\n layoutItem.w--;\n colliding = hasCollision(config.layout, layoutItem);\n }\n }\n }\n\n const newLayoutItems: LayoutItem[] = config.layout.map((item): any => (item.id === gridItemId ? layoutItem : item));\n\n return {\n layout: compact(newLayoutItems, compactionType, config.cols),\n draggedItemPos: {\n top: dragElemClientRect.top - gridElemClientRect.top,\n left: dragElemClientRect.left - gridElemClientRect.left,\n width,\n height\n }\n };\n}\n\nfunction hasCollision(layout: Layout, layoutItem: LayoutItem): boolean {\n return !!getFirstCollision(layout, layoutItem);\n}\n\nfunction getDimensionToShrink(layoutItem, lastShrunk): 'w' | 'h' {\n if (layoutItem.h <= 1) {\n return 'w';\n }\n if (layoutItem.w <= 1) {\n return 'h';\n }\n\n return lastShrunk === 'w' ? 'h' : 'w';\n}\n\n/**\n * Given the current number and min/max values, returns the number within the range\n * @param number can be any numeric value\n * @param min minimum value of range\n * @param max maximum value of range\n */\nfunction limitNumberWithinRange(num: number, min: number = 1, max: number = Infinity): any {\n return Math.min(Math.max(num, min < 1 ? 1 : min), max);\n}\n\n/** Returns true if both item1 and item2 KtdGridLayoutItems are equivalent. */\nexport function ktdGridItemLayoutItemAreEqual(item1: KtdGridLayoutItem, item2: KtdGridLayoutItem): boolean {\n return (\n item1.id === item2.id &&\n item1.x === item2.x &&\n item1.y === item2.y &&\n item1.w === item2.w &&\n item1.h === item2.h\n );\n}\n\n","import { Directive, ElementRef, InjectionToken, inject } from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `KtdGridDragHandle`. It serves as\n * alternative token to the actual `KtdGridDragHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const KTD_GRID_DRAG_HANDLE = new InjectionToken<KtdGridDragHandle>('KtdGridDragHandle');\n\n/** Handle that can be used to drag a KtdGridItem instance. */\n@Directive({\n selector: '[buwGridDragHandle]', \n host: {\n class: 'buw-grid-drag-handle'\n },\n providers: [{ provide: KTD_GRID_DRAG_HANDLE, useExisting: KtdGridDragHandle }],\n standalone: false\n})\n \nexport class KtdGridDragHandle {\n element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n\n constructor() {}\n}\n\n","import { Directive, ElementRef, InjectionToken, inject } from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `KtdGridResizeHandle`. It serves as\n * alternative token to the actual `KtdGridResizeHandle` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const KTD_GRID_RESIZE_HANDLE = new InjectionToken<KtdGridResizeHandle>('KtdGridResizeHandle');\n\n/** Handle that can be used to drag a KtdGridItem instance. */\n@Directive({\n selector: '[buwGridResizeHandle]', \n host: {\n class: 'buw-grid-resize-handle'\n },\n providers: [{ provide: KTD_GRID_RESIZE_HANDLE, useExisting: KtdGridResizeHandle }],\n standalone: false\n})\n \nexport class KtdGridResizeHandle {\n element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n\n constructor() {}\n}\n\n","import { Directive, InjectionToken, Input, TemplateRef, inject } from '@angular/core';\n\n/**\n * Injection token that can be used to reference instances of `KtdGridItemPlaceholder`. It serves as\n * alternative token to the actual `KtdGridItemPlaceholder` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nexport const KTD_GRID_ITEM_PLACEHOLDER = new InjectionToken<KtdGridItemPlaceholder>('KtdGridItemPlaceholder');\n\n/** Directive that can be used to create a custom placeholder for a KtdGridItem instance. */\n@Directive({\n selector: 'ng-template[buwGridItemPlaceholder]', \n host: {\n class: 'buw-grid-item-placeholder-content'\n },\n providers: [{ provide: KTD_GRID_ITEM_PLACEHOLDER, useExisting: KtdGridItemPlaceholder }],\n standalone: false\n})\n \nexport class KtdGridItemPlaceholder<T = any> {\n templateRef = inject<TemplateRef<T>>(TemplateRef);\n\n /** Context data to be added to the placeholder template instance. */\n @Input() data: T;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n constructor() {}\n}\n\n"," \n/**\n * Type describing the allowed values for a boolean input.\n * @docs-private\n */\nexport type BooleanInput = string | boolean | null | undefined;\n\n/** Coerces a data-bound value (typically a string) to a boolean. */\nexport function coerceBooleanProperty(value: any): boolean {\n return value != null && `${value}` !== 'false';\n}\n","/* eslint-disable */\nexport type NumberInput = string | number | null | undefined;\n\n/** Coerces a data-bound value (typically a string) to a number. */\nexport function coerceNumberProperty(value: any): number;\nexport function coerceNumberProperty<D>(value: any, fallback: D): number | D;\nexport function coerceNumberProperty(value: any, fallbackValue = 0) {\n return _isNumberValue(value) ? Number(value) : fallbackValue;\n}\n\n/**\n * Whether the provided value is considered a number.\n * @docs-private\n */\nexport function _isNumberValue(value: any): boolean {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n return !isNaN(parseFloat(value as any)) && !isNaN(Number(value));\n}\n","import { InjectionToken } from '@angular/core';\nimport { CompactType } from './utils/react-grid-layout.utils';\nimport { KtdClientRect } from './utils/client-rect';\n\nexport interface KtdGridLayoutItem {\n id: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number \n}\n\nexport type KtdGridCompactType = CompactType;\n\nexport interface KtdGridBackgroundCfg {\n show: 'never' | 'always' | 'whenDragging';\n borderColor?: string;\n gapColor?: string;\n rowColor?: string;\n columnColor?: string;\n borderWidth?: number;\n}\n\nexport interface KtdGridCfg {\n cols: number;\n rowHeight: number | 'fit'; // row height in pixels\n height?: number | null;\n layout: KtdGridLayoutItem[];\n preventCollision: boolean;\n gap: number;\n}\n\nexport type KtdGridLayout = KtdGridLayoutItem[];\n\n// TODO: Remove this interface. If can't remove, move and rename this interface in the core module or similar.\nexport interface KtdGridItemRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface KtdGridItemRenderData<T = number | string> {\n id: string;\n top: T;\n left: T;\n width: T;\n height: T;\n}\n\n/**\n * We inject a token because of the 'circular dependency issue warning'. In case we don't had this issue with the circular dependency, we could just\n * import KtdGridComponent on KtdGridItem and execute the needed function to get the rendering data.\n */\nexport type KtdGridItemRenderDataTokenType = (id: string) => KtdGridItemRenderData<string>;\nexport const GRID_ITEM_GET_RENDER_DATA_TOKEN: InjectionToken<KtdGridItemRenderDataTokenType> = new InjectionToken(\n 'GRID_ITEM_GET_RENDER_DATA_TOKEN'\n);\n\nexport interface KtdDraggingData {\n pointerDownEvent: MouseEvent | TouchEvent;\n pointerDragEvent: MouseEvent | TouchEvent;\n gridElemClientRect: KtdClientRect;\n dragElemClientRect: KtdClientRect;\n scrollDifference: { top: number; left: number };\n}\n\n","import { Injectable, NgZone, OnDestroy, inject } from '@angular/core';\nimport { ktdNormalizePassiveListenerOptions } from './utils/passive-listeners';\nimport { fromEvent, iif, Observable, Subject, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { ktdIsMobileOrTablet, ktdSupportsPointerEvents } from './utils/pointer.utils';\n\n/** Event options that can be used to bind an active, capturing event. */\nconst activeCapturingEventOptions = ktdNormalizePassiveListenerOptions({\n passive: false,\n capture: true\n});\n\n@Injectable({ providedIn: 'root' })\nexport class KtdGridService implements OnDestroy {\n touchMove$: Observable<TouchEvent>;\n \n private ngZone = inject(NgZone);\n private touchMoveSubject: Subject<TouchEvent> = new Subject<TouchEvent>();\n private touchMoveSubscription: Subscription; \n\n constructor() {\n this.touchMove$ = this.touchMoveSubject.asObservable();\n this.registerTouchMoveSubscription();\n }\n\n ngOnDestroy(): void {\n this.touchMoveSubscription.unsubscribe();\n }\n\n mouseOrTouchMove$(element): Observable<MouseEvent | TouchEvent> {\n if (!ktdSupportsPointerEvents()) {\n return iif(\n () => ktdIsMobileOrTablet(),\n this.touchMove$,\n fromEvent<MouseEvent>(element, 'mousemove', activeCapturingEventOptions as AddEventListenerOptions)\n // TODO: Fix rxjs typings, boolean should be a good param too.\n );\n }\n\n return fromEvent<MouseEvent>(element, 'pointermove', activeCapturingEventOptions as AddEventListenerOptions);\n }\n\n private registerTouchMoveSubscription(): void {\n // The `touchmove` event gets bound once, ahead of time, because WebKit\n // won't preventDefault on a dynamically-added `touchmove` listener.\n // See https://bugs.webkit.org/show_bug.cgi?id=184250.\n this.touchMoveSubscription = this.ngZone.runOutsideAngular(() =>\n // The event handler has to be explicitly active,\n // because newer browsers make it passive by default.\n fromEvent(document, 'touchmove', activeCapturingEventOptions as AddEventListenerOptions)\n // TODO: Fix rxjs typings, boolean should be a good param too.\n .pipe(filter((touchEvent: any) => (touchEvent as TouchEvent).touches.length === 1))\n .subscribe((touchEvent: TouchEvent) => this.touchMoveSubject.next(touchEvent))\n );\n }\n}\n\n","import { NgZone } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n/** Runs source observable outside the zone */\nexport function ktdOutsideZone<T>(zone: NgZone) {\n return (source: Observable<T>) =>\n new Observable<T>((observer) => zone.runOutsideAngular<Subscription>(() => source.subscribe(observer)));\n}\n\n/** Rxjs operator that makes source observable to no emit any data */\nexport function ktdNoEmit() {\n return (source$: Observable<any>): Observable<any> => source$.pipe(filter(() => false));\n}\n\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n Renderer2,\n ViewChild,\n inject\n} from '@angular/core';\nimport { BehaviorSubject, NEVER, Observable, Subject, Subscription, iif, merge } from 'rxjs';\nimport { exhaustMap, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { BooleanInput, coerceBooleanProperty } from '../coercion/boolean-property';\nimport { NumberInput, coerceNumberProperty } from '../coercion/number-property';\nimport { KTD_GRID_DRAG_HANDLE, KtdGridDragHandle } from '../directives/drag-handle';\nimport { KTD_GRID_ITEM_PLACEHOLDER, KtdGridItemPlaceholder } from '../directives/placeholder';\nimport { KTD_GRID_RESIZE_HANDLE, KtdGridResizeHandle } from '../directives/resize-handle';\nimport { GRID_ITEM_GET_RENDER_DATA_TOKEN, KtdGridItemRenderDataTokenType } from '../grid.definitions';\nimport { KtdGridService } from '../grid.service';\nimport { ktdOutsideZone } from '../utils/operators';\nimport {\n ktdIsMouseEventOrMousePointerEvent,\n ktdPointerClient,\n ktdPointerDown,\n ktdPointerUp\n} from '../utils/pointer.utils';\nimport { BaseComponent } from 'barsa-novin-ray-core';\n\n@Component({\n selector: 'buw-grid-item',\n templateUrl: './grid-item.component.html',\n styleUrls: ['./grid-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class KtdGridItemComponent extends BaseComponent implements OnInit, OnDestroy, AfterContentInit {\n static ngAcceptInputType_minW: NumberInput;\n static ngAcceptInputType_minH: NumberInput;\n static ngAcceptInputType_maxW: NumberInput;\n static ngAcceptInputType_maxH: NumberInput;\n static ngAcceptInputType_draggable: BooleanInput;\n static ngAcceptInputType_resizable: BooleanInput;\n static ngAcceptInputType_dragStartThreshold: NumberInput;\n /** Elements that can be used to drag the grid item. */\n @ContentChildren(KTD_GRID_DRAG_HANDLE, { descendants: true }) _dragHandles: QueryList<KtdGridDragHandle>;\n @ContentChildren(KTD_GRID_RESIZE_HANDLE, { descendants: true }) _resizeHandles: QueryList<KtdGridResizeHandle>;\n @ViewChild('resizeElem', { static: true, read: ElementRef }) resizeElem: ElementRef;\n\n /** Template ref for placeholder */\n @ContentChild(KTD_GRID_ITEM_PLACEHOLDER) placeholder: KtdGridItemPlaceholder;\n\n /** Min and max size input properties. Any of these would 'override' the min/max values specified in the layout. */\n @Input() minW?: number;\n @Input() minH?: number;\n @Input() maxW?: number;\n @Input() maxH?: number;\n\n /** CSS transition style. Note that for more performance is preferable only make transition on transform property. */\n @Input() transition = 'transform 500ms ease, width 500ms ease, height 500ms ease';\n\n dragStart$: Observable<MouseEvent | TouchEvent>;\n resizeStart$: Observable<MouseEvent | TouchEvent>;\n\n private _dragStartThreshold = 0;\n private gridService = inject(KtdGridService);\n private renderer = inject(Renderer2);\n private ngZone = inject(NgZone);\n private getItemRenderData = inject<KtdGridItemRenderDataTokenType>(GRID_ITEM_GET_RENDER_DATA_TOKEN);\n /** Id of the grid item. This property is strictly compulsory. */\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(val: string) {\n this._id = val;\n }\n\n private _id: string;\n\n /** Minimum amount of pixels that the user should move before it starts the drag sequence. */\n @Input()\n get dragStartThreshold(): number {\n return this._dragStartThreshold;\n }\n\n set dragStartThreshold(val: number) {\n this._dragStartThreshold = coerceNumberProperty(val);\n }\n\n /** Whether the item is draggable or not. Defaults to true. Does not affect manual dragging using the startDragManually method. */\n @Input()\n get draggable(): boolean {\n return this._draggable;\n }\n\n set draggable(val: boolean) {\n this._draggable = coerceBooleanProperty(val);\n this._draggable$.next(this._draggable);\n }\n\n private _draggable = true;\n private _draggable$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(this._draggable);\n\n private _manualDragEvents$: Subject<MouseEvent | TouchEvent> = new Subject<MouseEvent | TouchEvent>();\n\n /** Whether the item is resizable or not. Defaults to true. */\n @Input()\n get resizable(): boolean {\n return this._resizable;\n }\n\n set resizable(val: boolean) {\n this._resizable = coerceBooleanProperty(val);\n this._resizable$.next(this._resizable);\n }\n\n private _resizable = true;\n private _resizable$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(this._resizable);\n\n private dragStartSubject: Subject<MouseEvent | TouchEvent> = new Subject<MouseEvent | TouchEvent>();\n private resizeStartSubject: Subject<MouseEvent | TouchEvent> = new Subject<MouseEvent | TouchEvent>();\n\n private subscriptions: Subscription[] = [];\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n\n constructor() {\n super();\n this.dragStart$ = this.dragStartSubject.asObservable();\n this.resizeStart$ = this.resizeStartSubject.asObservable();\n }\n\n ngOnInit(): void {\n const gridItemRenderData = this.getItemRenderData(this.id)!;\n this.setStyles(gridItemRenderData);\n }\n\n ngAfterContentInit(): void {\n this.subscriptions.push(\n this._dragStart$().subscribe(this.dragStartSubject),\n this._resizeStart$().subscribe(this.resizeStartSubject)\n );\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n /**\n * To manually start dragging, route the desired pointer events to this method.\n * Dragging initiated by this method will work regardless of the value of the draggable Input.\n * It is the caller's responsibility to call this method with only the events that are desired to cause a drag.\n * For example, if you only want left clicks to cause a drag, it is your responsibility to filter out other mouse button events.\n * @param startEvent The pointer event that should initiate the drag.\n */\n startDragManually(startEvent: MouseEvent | TouchEvent): void {\n this._manualDragEvents$.next(startEvent);\n }\n\n setStyles({ top, left, width, height }: { top: string; left: string; width?: string; height?: string }): void {\n // transform is 6x times faster than top/left\n this.renderer.setStyle(this._el.nativeElement, 'transform', `translateX(${left}) translateY(${top})`);\n this.renderer.setStyle(this._el.nativeElement, 'display', `block`);\n this.renderer.setStyle(this._el.nativeElement, 'transition', this.transition);\n if (width != null) {\n this.renderer.setStyle(this._el.nativeElement, 'width', width);\n }\n if (height != null) {\n this.renderer.setStyle(this._el.nativeElement, 'height', height);\n }\n }\n\n private _dragStart$(): Observable<MouseEvent | TouchEvent> {\n return merge(\n this._manualDragEvents$,\n this._draggable$.pipe(\n switchMap((draggable) => {\n if (!draggable) {\n return NEVER;\n }\n return this._dragHandles.changes.pipe(\n startWith(this._dragHandles),\n switchMap((dragHandles: QueryList<KtdGridDragHandle>) =>\n iif(\n () => dragHandles.length > 0,\n merge(\n ...dragHandles\n .toArray()\n .map((dragHandle) => ktdPointerDown(dragHandle.element.nativeElement))\n ),\n ktdPointerDown(this._el.nativeElement)\n )\n )\n );\n })\n )\n ).pipe(\n exhaustMap((startEvent) => {\n // If the event started from an element with the native HTML drag&drop, it'll interfere\n // with our own dragging (e.g. `img` tags do it by default). Prevent the default action\n // to stop it from happening. Note that preventing on `dragstart` also seems to work, but\n // it's flaky and it fails if the user drags it away quickly. Also note that we only want\n // to do this for `mousedown` and `pointerdown` since doing the same for `touchstart` will\n // stop any `click` events from firing on touch devices.\n if (ktdIsMouseEventOrMousePointerEvent(startEvent)) {\n startEvent.preventDefault();\n }\n\n const startPointer = ktdPointerClient(startEvent);\n return this.gridService.mouseOrTouchMove$(document).pipe(\n takeUntil(ktdPointerUp(document)),\n ktdOutsideZone(this.ngZone),\n filter((moveEvent) => {\n moveEvent.preventDefault();\n const movePointer = ktdPointerClient(moveEvent);\n const distanceX = Math.abs(startPointer.clientX - movePointer.clientX);\n const distanceY = Math.abs(startPointer.clientY - movePointer.clientY);\n // When this conditions returns true mean that we are over threshold.\n return distanceX + distanceY >= this.dragStartThreshold;\n }),\n take(1),\n // Return the original start event\n map(() => startEvent)\n );\n })\n );\n }\n\n private _resizeStart$(): Observable<MouseEvent | TouchEvent> {\n return this._resizable$.pipe(\n switchMap((resizable) => {\n if (!resizable) {\n // Side effect to hide the resizeElem if resize is disabled.\n this.renderer.setStyle(this.resizeElem.nativeElement, 'display', 'none');\n return NEVER;\n } else {\n return this._resizeHandles.changes.pipe(\n startWith(this._resizeHandles),\n switchMap((resizeHandles: QueryList<KtdGridResizeHandle>) => {\n if (resizeHandles.length > 0) {\n // Side effect to hide the resizeElem if there are resize handles.\n this.renderer.setStyle(this.resizeElem.nativeElement, 'display', 'none');\n return merge(\n ...resizeHandles\n .toArray()\n .map((resizeHandle) => ktdPointerDown(resizeHandle.element.nativeElement))\n );\n } else {\n this.renderer.setStyle(this.resizeElem.nativeElement, 'display', 'block');\n return ktdPointerDown(this.resizeElem.nativeElement);\n }\n }),\n tap((startEvent) => {\n if (ktdIsMouseEventOrMousePointerEvent(startEvent)) {\n startEvent.preventDefault();\n }\n })\n );\n }\n })\n );\n }\n}\n\n","<ng-content></ng-content>\n<div #resizeElem class=\"grid-item-resize-icon\"></div>","/**\n * Client rect utilities.\n * This file is taken from Angular Material repository.\n */\n\n/* eslint-disable */\n\nexport interface KtdClientRect {\n top: number;\n bottom: number;\n left: number;\n right: number;\n width: number;\n height: number;\n}\n\n/** Gets a mutable version of an element's bounding `ClientRect`. */\nexport function getMutableClientRect(element: Element): KtdClientRect {\n const clientRect = element.getBoundingClientRect();\n\n // We need to clone the `clientRect` here, because all the values on it are readonly\n // and we need to be able to update them. Also we can't use a spread here, because\n // the values on a `ClientRect` aren't own properties. See:\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#Notes\n return {\n top: clientRect.top,\n right: clientRect.right,\n bottom: clientRect.bottom,\n left: clientRect.left,\n width: clientRect.width,\n height: clientRect.height\n };\n}\n\n/**\n * Checks whether some coordinates are within a `ClientRect`.\n * @param clientRect ClientRect that is being checked.\n * @param x Coordinates along the X axis.\n * @param y Coordinates along the Y axis.\n */\nexport function isInsideClientRect(clientRect: ClientRect, x: number, y: number) {\n const {top, bottom, left, right} = clientRect;\n return y >= top && y <= bottom && x >= left && x <= right;\n}\n\n/**\n * Updates the top/left positions of a `ClientRect`, as well as their bottom/right counterparts.\n * @param clientRect `ClientRect` that should be updated.\n * @param top Amount to add to the `top` position.\n * @param left Amount to add to the `left` position.\n */\nexport function adjustClientRect(clientRect: KtdClientRect, top: number, left: number) {\n clientRect.top += top;\n clientRect.bottom = clientRect.top + clientRect.height;\n\n clientRect.left += left;\n clientRect.right = clientRect.left + clientRect.width;\n}\n\n/**\n * Checks whether the pointer coordinates are close to a ClientRect.\n * @param rect ClientRect to check against.\n * @param threshold Threshold around the ClientRect.\n * @param pointerX Coordinates along the X axis.\n * @param pointerY Coordinates along the Y axis.\n */\nexport function isPointerNearClientRect(rect: KtdClientRect,\n threshold: number,\n pointerX: number,\n pointerY: number): boolean {\n const {top, right, bottom, left, width, height} = rect;\n const xThreshold = width * threshold;\n const yThreshold = height * threshold;\n\n return pointerY > top - yThreshold && pointerY < bottom + yThreshold &&\n pointerX > left - xThreshold && pointerX < right + xThreshold;\n}\n","import { animationFrameScheduler, fromEvent, interval, NEVER, Observable } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators';\nimport { ktdNormalizePassiveListenerOptions } from './passive-listeners';\nimport { getMutableClientRect, KtdClientRect } from './client-rect';\nimport { ktdNoEmit } from './operators';\n\n/**\n * Proximity, as a ratio to width/height at which to start auto-scrolling.\n * The value comes from trying it out manually until it feels right.\n */\nconst SCROLL_PROXIMITY_THRESHOLD = 0.05;\n\n/** Vertical direction in which we can auto-scroll. */\nconst enum AutoScrollVerticalDirection {\n NONE,\n UP,\n DOWN\n}\n\n/** Horizontal direction in which we can auto-scroll. */\nconst enum AutoScrollHorizontalDirection {\n NONE,\n LEFT,\n RIGHT\n}\n\nexport interface KtdScrollPosition {\n top: number;\n left: number;\n}\n\n/**\n * Increments the vertical scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementVerticalScroll(node: HTMLElement | Window, amount: number): void {\n if (node === window) {\n (node as Window).scrollBy(0, amount);\n } else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n (node as HTMLElement).scrollTop += amount;\n }\n}\n\n/**\n * Increments the horizontal scroll position of a node.\n * @param node Node whose scroll position should change.\n * @param amount Amount of pixels that the `node` should be scrolled.\n */\nfunction incrementHorizontalScroll(node: HTMLElement | Window, amount: number): void {\n if (node === window) {\n (node as Window).scrollBy(amount, 0);\n } else {\n // Ideally we could use `Element.scrollBy` here as well, but IE and Edge don't support it.\n (node as HTMLElement).scrollLeft += amount;\n }\n}\n\n/**\n * Gets whether the vertical auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerY Position of the user's pointer along the y axis.\n */\nfunction getVerticalScrollDirection(clientRect: KtdClientRect, pointerY: number): any {\n const { top, bottom, height } = clientRect;\n const yThreshold = height * SCROLL_PROXIMITY_THRESHOLD;\n\n if (pointerY >= top - yThreshold && pointerY <= top + yThreshold) {\n return AutoScrollVerticalDirection.UP;\n } else if (pointerY >= bottom - yThreshold && pointerY <= bottom + yThreshold) {\n return AutoScrollVerticalDirection.DOWN;\n }\n\n return AutoScrollVerticalDirection.NONE;\n}\n\n/**\n * Gets whether the horizontal auto-scroll direction of a node.\n * @param clientRect Dimensions of the node.\n * @param pointerX Position of the user's pointer along the x axis.\n */\nfunction getHorizontalScrollDirection(clientRect: KtdClientRect, pointerX: number): any {\n const { left, right, width } = clientRect;\n const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;\n\n if (pointerX >= left - xThreshold && pointerX <= left + xThreshold) {\n return AutoScrollHorizontalDirection.LEFT;\n } else if (pointerX >= right - xThreshold && pointerX <= right + xThreshold) {\n return AutoScrollHorizontalDirection.RIGHT;\n }\n\n return AutoScrollHorizontalDirection.NONE;\n}\n\n/**\n * Returns an observable that schedules a loop and apply scroll on the scrollNode into the specified direction/s.\n * This observable doesn't emit, it just performs the 'scroll' side effect.\n * @param scrollNode, node where the scroll would be applied.\n * @param verticalScrollDirection, vertical direction of the scroll.\n * @param horizontalScrollDirection, horizontal direction of the scroll.\n * @param scrollStep, scroll step in CSS pixels that would be applied in every loop.\n */\nfunction scrollToDirectionInterval$(\n scrollNode: HTMLElement | Window,\n verticalScrollDirection: AutoScrollVerticalDirection,\n horizontalScrollDirection: AutoScrollHorizontalDirection,\n scrollStep: number = 2\n): any {\n return interval(0, animationFrameScheduler).pipe(\n tap(() => {\n if (verticalScrollDirection === AutoScrollVerticalDirection.UP) {\n incrementVerticalScroll(scrollNode, -scrollStep);\n } else if (verticalScrollDirection === AutoScrollVerticalDirection.DOWN) {\n incrementVerticalScroll(scrollNode, scrollStep);\n }\n\n if (horizontalScrollDirection === AutoScrollHorizontalDirection.LEFT) {\n incrementHorizontalScroll(scrollNode, -scrollStep);\n } else if (horizontalScrollDirection === AutoScrollHorizontalDirection.RIGHT) {\n incrementHorizontalScroll(scrollNode, scrollStep);\n }\n }),\n ktdNoEmit()\n );\n}\n\nexport interface KtdScrollIfNearElementOptions {\n scrollStep?: number;\n disableVertical?: boolean;\n disableHorizontal?: boolean;\n}\n\n/**\n * Given a source$ observable with pointer location, scroll the scrollNode if the pointer is near to it.\n * This observable doesn't emit, it just performs a 'scroll' side effect.\n * @param scrollableParent, parent node in which the scroll would be performed.\n * @param options, configuration options.\n */\nexport function ktdScrollIfNearElementClientRect$(\n scrollableParent: HTMLElement | Document,\n options?: KtdScrollIfNearElementOptions\n): (source$: Observable<{ pointerX: number; pointerY: number }>) => Observable<any> {\n let scrollNode: Window | HTMLElement;\n let scrollableParentClientRect: KtdClientRect;\n let scrollableParentScrollWidth: number;\n\n if (scrollableParent === document) {\n scrollNode = document.defaultView as Window;\n const { width, height } = getViewportSize();\n scrollableParentClientRect = { width, height, top: 0, right: width, bottom: height, left: 0 };\n scrollableParentScrollWidth = getDocumentScrollWidth();\n } else {\n scrollNode = scrollableParent as HTMLElement;\n scrollableParentClientRect = getMutableClientRect(scrollableParent as HTMLElement);\n scrollableParentScrollWidth = (scrollableParent as HTMLElement).scrollWidth;\n }\n\n /**\n * IMPORTANT: By design, only let scroll horizontal if the scrollable parent has explicitly an scroll horizontal.\n * This layout solution is not designed in mind to have any scroll horizontal, but exceptionally we allow it in this\n * specific use case.\n */\n options = options || {};\n if (options.disableHorizontal == null && scrollableParentScrollWidth <= scrollableParentClientRect.width) {\n options.disableHorizontal = true;\n }\n\n return (source$) =>\n source$.pipe(\n map(({ pointerX, pointerY }) => {\n let verticalScrollDirection = getVerticalScrollDirection(scrollableParentClientRect, pointerY);\n let horizontalScrollDirection = getHorizontalScrollDirection(scrollableParentClientRect, pointerX);\n\n // Check if scroll directions are disabled.\n if (options?.disableVertical) {\n verticalScrollDirection = AutoScrollVerticalDirection.NONE;\n }\n if (options?.disableHorizontal) {\n horizontalScrollDirection = AutoScrollHorizontalDirection.NONE;\n }\n\n return { verticalScrollDirection, horizontalScrollDirection };\n }),\n distinctUntilChanged(\n (prev, actual) =>\n prev.verticalScrollDirection === actual.verticalScrollDirection &&\n prev.horizontalScrollDirection === actual.horizontalScrollDirection\n ),\n switchMap(({ verticalScrollDirection, horizontalScrollDirection }) => {\n if (verticalScrollDirection || horizontalScrollDirection) {\n return scrollToDirectionInterval$(\n scrollNode,\n verticalScrollDirection,\n horizontalScrollDirection,\n options?.scrollStep\n );\n } else {\n return NEVER;\n }\n })\n );\n}\n\n/**\n * Emits on EVERY scroll event and returns the accumulated scroll offset relative to the initial scroll position.\n * @param scrollableParent, node in which scroll events would be listened.\n */\nexport function ktdGetScrollTotalRelativeDifference$(\n scrollableParent: HTMLElement | Document\n): Observable<{ top: number; left: number }> {\n let scrollInitialPosition;\n\n // Calculate initial scroll position\n if (scrollableParent === document) {\n scrollInitialPosition = getViewportScrollPosition();\n } else {\n scrollInitialPosition = {\n top: (scrollableParent as HTMLElement).scrollTop,\n left: (scrollableParent as HTMLElement).scrollLeft\n };\n }\n\n return fromEvent(\n scrollableParent,\n 'scroll',\n ktdNormalizePassiveListenerOptions({ capture: true }) as AddEventListenerOptions\n ).pipe(\n map(() => {\n let newTop: number;\n let newLeft: number;\n\n if (scrollableParent === document) {\n const viewportScrollPosition = getViewportScrollPosition();\n newTop = viewportScrollPosition.top;\n newLeft = viewportScrollPosition.left;\n } else {\n newTop = (scrollableParent as HTMLElement).scrollTop;\n newLeft = (scrollableParent as HTMLElement).scrollLeft;\n }\n\n const topDifference = scrollInitialPosition.top - newTop;\n const leftDifference = scrollInitialPosition.left - newLeft;\n\n return { top: topDifference, left: leftDifference };\n })\n );\n}\n\n/** Returns the viewport's width and height. */\nfunction getViewportSize(): { width: number; height: number } {\n const _window = document.defaultView || window;\n return {\n width: _window.innerWidth,\n height: _window.innerHeight\n };\n}\n\n/** Gets a ClientRect for the viewport's bounds. */\n// eslint-disable-next-line\nfunction getViewportRect(): KtdClientRect {\n // Use the document element's bounding rect rather than the window scroll properties\n // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n // can disagree when the page is pinch-zoomed (on devices that support touch).\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n // We use the documentElement instead of the body because, by default (without a css reset)\n // browsers typically give the document body an 8px margin, which is not included in\n // getBoundingClientRect().\n const scrollPosition = getViewportScrollPosition();\n const { width, height } = getViewportSize();\n\n return {\n top: scrollPosition.top,\n left: scrollPosition.left,\n bottom: scrollPosition.top + height,\n right: scrollPosition.left + width,\n height,\n width\n };\n}\n\n/** Gets the (top, left) scroll position of the viewport. */\nfunction getViewportScrollPosition(): { top: number; left: number } {\n // The top-left-corner of the viewport is determined by the scroll position of the document\n // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n // `document.documentElement` works consistently, where the `top` and `left` values will\n // equal negative the scroll position.\n const windowRef = document.defaultView || window;\n const documentElement = document.documentElement!;\n const documentRect = documentElement.getBoundingClientRect();\n\n const top = -documentRect.top || document.body.scrollTop || windowRef.scrollY || documentElement.scrollTop || 0;\n\n const left = -documentRect.left || document.body.scrollLeft || windowRef.scrollX || documentElement.scrollLeft || 0;\n\n return { top, left };\n}\n\n/** Returns the document scroll width */\nfunction getDocumentScrollWidth(): any {\n return Math.max(document.body.scrollWidth, document.documentElement.scrollWidth);\n}\n\n","/**\n * Transition duration utilities.\n * This file is taken from Angular Material repository.\n */\n\n/** Parses a CSS time value to milliseconds. */\nfunction parseCssTimeUnitsToMs(value: string): number {\n // Some browsers will return it in seconds, whereas others will return milliseconds.\n const multiplier = value.toLowerCase().indexOf('ms') > -1 ? 1 : 1000;\n return parseFloat(value) * multiplier;\n}\n\n/** Gets the transform transition duration, including the delay, of an element in milliseconds. */\nexport function getTransformTransitionDurationInMs(element: HTMLElement): number {\n const computedStyle = getComputedStyle(element);\n const transitionedProperties = parseCssPropertyValue(computedStyle, 'transition-property');\n const property = transitionedProperties.find(prop => prop === 'transform' || prop === 'all');\n\n // If there's no transition for `all` or `transform`, we shouldn't do anything.\n if (!property) {\n return 0;\n }\n\n // Get the index of the property that we're interested in and match\n // it up to the same index in `transition-delay` and `transition-duration`.\n const propertyIndex = transitionedProperties.indexOf(property);\n const rawDurations = parseCssPropertyValue(computedStyle, 'transition-duration');\n const rawDelays = parseCssPropertyValue(computedStyle, 'transition-delay');\n\n return parseCssTimeUnitsToMs(rawDurations[propertyIndex]) +\n parseCssTimeUnitsToMs(rawDelays[propertyIndex]);\n}\n\n/** Parses out multiple values from a computed style into an array. */\nfunction parseCssPropertyValue(computedStyle: CSSStyleDeclaration, name: string): string[] {\n const value = computedStyle.getPropertyValue(name);\n return value.split(',').map(part => part.trim());\n}\n","import { AfterContentChecked, AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EmbeddedViewRef, EventEmitter, Input, NgZone, OnChanges, OnDestroy, Output, QueryList, Renderer2, SimpleChanges, ViewContainerRef, ViewEncapsulation, inject } from '@angular/core';\nimport { coerceNumberProperty, NumberInput } from '../coercion/number-property';\nimport { KtdGridItemComponent } from '../grid-item/grid-item.component';\nimport { combineLatest, merge, NEVER, Observable, Observer, of, Subscription } from 'rxjs';\nimport { exhaustMap, map, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport {\n ktdGetGridItemRowHeight,\n ktdGridItemDragging,\n ktdGridItemLayoutItemAreEqual,\n ktdGridItemResizing\n} from '../utils/grid.utils';\nimport { compact } from '../utils/react-grid-layout.utils';\nimport {\n GRID_ITEM_GET_RENDER_DATA_TOKEN,\n KtdGridBackgroundCfg,\n KtdGridCfg,\n KtdGridCompactType,\n KtdGridItemRenderData,\n KtdGridLayout,\n KtdGridLayoutItem\n} from '../grid.definitions';\nimport { ktdPointerUp, ktdPointerClientX, ktdPointerClientY } from '../utils/pointer.utils';\nimport { KtdDictionary } from '../../types';\nimport { KtdGridService } from '../grid.service';\nimport { getMutableClientRect, KtdClientRect } from '../utils/client-rect';\nimport { ktdGetScrollTotalRelativeDifference$, ktdScrollIfNearElementClientRect$ } from '../utils/scroll';\nimport { BooleanInput, coerceBooleanProperty } from '../coercion/boolean-property';\nimport { KtdGridItemPlaceholder } from '../directives/placeholder';\nimport { getTransformTransitionDurationInMs } from '../utils/transition-duration';\n/* eslint-disable */\ninterface KtdDragResizeEvent {\n layout: KtdGridLayout;\n layoutItem: KtdGridLayoutItem;\n gridItemRef: KtdGridItemComponent;\n}\n\nexport type KtdDragStart = KtdDragResizeEvent;\nexport type KtdResizeStart = KtdDragResizeEvent;\nexport type KtdDragEnd = KtdDragResizeEvent;\nexport type KtdResizeEnd = KtdDragResizeEvent;\n\nexport interface KtdGridItemResizeEvent {\n width: number;\n height: number;\n gridItemRef: KtdGridItemComponent;\n}\n\ntype DragActionType = 'drag' | 'resize';\n\nfunction getDragResizeEventData(gridItem: KtdGridItemComponent, layout: KtdGridLayout): KtdDragResizeEvent {\n return {\n layout,\n layoutItem: layout.find((item) => item.id === gridItem.id)!,\n gridItemRef: gridItem\n };\n}\n\nfunction getColumnWidth(config: KtdGridCfg, width: number): number {\n const { cols, gap } = config;\n const widthExcludingGap = width - Math.max(gap * (cols - 1), 0);\n return widthExcludingGap / cols;\n}\n\nfunction getRowHeightInPixels(config: KtdGridCfg, height: number): number {\n const { rowHeight, layout, gap } = config;\n return rowHeight === 'fit' ? ktdGetGridItemRowHeight(layout, height, gap) : rowHeight;\n}\n\nfunction layoutToRenderItems(\n config: KtdGridCfg,\n width: number,\n height: number\n): KtdDictionary<KtdGridItemRenderData<number>> {\n const { layout, gap } = config;\n const rowHeightInPixels = getRowHeightInPixels(config, height);\n const itemWidthPerColumn = getColumnWidth(config, width);\n const renderItems: KtdDictionary<KtdGridItemRenderData<number>> = {};\n for (const item of layout) {\n renderItems[item.id] = {\n id: item.id,\n top: item.y * rowHeightInPixels + gap * item.y,\n left: item.x * itemWidthPerColumn + gap * item.x,\n width: item.w * itemWidthPerColumn + gap * Math.max(item.w - 1, 0),\n height: item.h * rowHeightInPixels + gap * Math.max(item.h - 1, 0)\n };\n }\n return renderItems;\n}\n\nfunction getGridHeight(layout: KtdGridLayout, rowHeight: number, gap: number): number {\n return layout.reduce(\n (acc, cur) => Math.max(acc, (cur.y + cur.h) * rowHeight + Math.max(cur.y + cur.h - 1, 0) * gap),\n 0\n );\n}\nexport function parseRenderItemToPixels(renderItem: KtdGridItemRenderData<number>): KtdGridItemRenderData<string> {\n return {\n id: renderItem.id,\n top: `${renderItem.top}px`,\n left: `${renderItem.left}px`,\n width: `${renderItem.width}px`,\n height: `${renderItem.height}px`\n };\n}\nexport function __gridItemGetRenderDataFactoryFunc(gridCmp: KtdGridComponent) {\n return function (id: string) {\n return parseRenderItemToPixels(gridCmp.getItemRenderData(id));\n };\n}\n\nexport function ktdGridItemGetRenderDataFactoryFunc(gridCmp: KtdGridComponent): any {\n // Workaround explained: https://github.com/ng-packagr/ng-packagr/issues/696#issuecomment-387114613\n const resultFunc = __gridItemGetRenderDataFactoryFunc(gridCmp);\n return resultFunc;\n}\n\nconst defaultBackgroundConfig: Required<Omit<KtdGridBackgroundCfg, 'show'>> = {\n borderColor: '#ffa72678',\n gapColor: 'transparent',\n rowColor: 'transparent',\n columnColor: 'transparent',\n borderWidth: 1\n};\n\n@Component({\n selector: 'buw-grid',\n templateUrl: './grid.component.html',\n styleUrls: ['./grid.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: GRID_ITEM_GET_RENDER_DATA_TOKEN,\n useFactory: ktdGridItemGetRenderDataFactoryFunc,\n deps: [KtdGridComponent]\n }\n ],\n standalone: false\n})\nexport class KtdGridComponent implements OnChanges, AfterContentInit, AfterContentChecked, OnDestroy {\n private gridService = inject(KtdGridService);\n private elementRef = inject(ElementRef);\n private viewContainerRef = inject(ViewContainerRef);\n private renderer = inject(Renderer2);\n private ngZone = inject(NgZone);\n\n /** Query list of grid items that are being rendered. */\n @ContentChildren(KtdGridItemComponent, { descendants: true }) _gridItems: QueryList<KtdGridItemComponent>;\n\n /** Emits when layout change */\n @Output() layoutUpdated: EventEmitter<KtdGridLayout> = new EventEmitter<KtdGridLayout>();\n\n /** Emits when drag starts */\n @Output() dragStarted: EventEmitter<KtdDragStart> = new EventEmitter<KtdDragStart>();\n\n /** Emits when resize starts */\n @Output() resizeStarted: EventEmitter<KtdResizeStart> = new EventEmitter<KtdResizeStart>();\n\n /** Emits when drag ends */\n @Output() dragEnded: EventEmitter<KtdDragEnd> = new EventEmitter<KtdDragEnd>();\n\n /** Emits when resize ends */\n @Output() resizeEnded: EventEmitter<KtdResizeEnd> = new EventEmitter<KtdResizeEnd>();\n\n /** Emits when a grid item is being resized and its bounds have changed */\n @Output() gridItemResize: EventEmitter<KtdGridItemResizeEvent> = new EventEmitter<KtdGridItemResizeEvent>();\n\n /**\n * Parent element that contains the scroll. If an string is provided it would search that element by id on the dom.\n * If no data provided or null autoscroll is not performed.\n */\n @Input() scrollableParent: HTMLElement | Document | string | null = null;\n\n /** Whether or not to update the internal layout when some dependent property change. */\n @Input()\n get compactOnPropsChange(): boolean {\n return this._compactOnPropsChange;\n }\n\n set compactOnPropsChange(value: boolean) {\n this._compactOnPropsChange = coerceBooleanProperty(value);\n }\n\n private _compactOnPropsChange = true;\n\n /** If true, grid items won't change position when being dragged over. Handy when using no compaction */\n @Input()\n get preventCollision(): boolean {\n return this._preventCollision;\n }\n\n set preventCollision(value: boolean) {\n this._preventCollision = coerceBooleanProperty(value);\n }\n\n private _preventCollision = false;\n\n /** Number of CSS pixels that would be scrolled on each 'tick' when auto scroll is performed. */\n @Input()\n get scrollSpeed(): number {\n return this._scrollSpeed;\n }\n\n set scrollSpeed(value: number) {\n this._scrollSpeed = coerceNumberProperty(value, 2);\n }\n\n private _scrollSpeed = 2;\n\n /** Type of compaction that will be applied to the layout (vertical, horizontal or free). Defaults to 'vertical' */\n @Input()\n get compactType(): KtdGridCompactType {\n return this._compactType;\n }\n\n set compactType(val: KtdGridCompactType) {\n this._compactType = val;\n }\n\n private _compactType: KtdGridCompactType = 'vertical';\n\n /**\n * Row height as number or as 'fit'.\n * If rowHeight is a number value, it means that each row would have those css pixels in height.\n * if rowHeight is 'fit', it means that rows will fit in the height available. If 'fit' value is set, a 'height' should be also provided.\n */\n @Input()\n get rowHeight(): number | 'fit' {\n return this._rowHeight;\n }\n\n set rowHeight(val: number | 'fit') {\n this._rowHeight = val === 'fit' ? val : Math.max(1, Math.round(coerceNumberProperty(val)));\n }\n\n private _rowHeight: number | 'fit' = 100;\n\n /** Number of columns */\n @Input()\n get cols(): number {\n return this._cols;\n }\n\n set cols(val: number) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(val)));\n }\n\n private _cols = 6;\n\n /** Layout of the grid. Array of all the grid items with its 'id' and position on the grid. */\n @Input()\n get layout(): KtdGridLayout {\n return this._layout;\n }\n\n set layout(layout: KtdGridLayout) {\n /**\n * Enhancement:\n * Only set layout if it's reference has changed and use a boolean to track whenever recalculate the layout on ngOnChanges.\n *\n * Why:\n * The normal use of this lib is having the variable layout in the outer component or in a store, assigning it whenever it changes and\n * binded in the component with it's input [layout]. In this scenario, we would always calculate one unnecessary change on the layout when\n * it is re-binded on the input.\n */\n this._layout = layout;\n }\n\n private _layout: KtdGridLayout;\n\n /** Grid gap in css pixels */\n @Input()\n get gap(): number {\n return this._gap;\n }\n\n set gap(val: number) {\n this._gap = Math.max(coerceNumberProperty(val), 0);\n }\n\n private _gap = 0;\n\n /**\n * If height is a number, fixes the height of the grid to it, recommended when rowHeight = 'fit' is used.\n * If height is null, height will be automatically set according to its inner grid items.\n * Defaults to null.\n * */\n @Input()\n get height(): number | null {\n return this._height;\n }\n\n set height(val: number | null) {\n this._height = typeof val === 'number' ? Math.max(val, 0) : null;\n }\n\n private _height: number | null = null;\n\n @Input()\n get backgroundConfig(): KtdGridBackgroundCfg | null {\n return this._backgroundConfig;\n }\n\n set backgroundConfig(val: KtdGridBackgroundCfg | null) {\n this._backgroundConfig = val;\n\n // If there is background configuration, add main grid background class. Grid background class comes with opacity 0.\n // It is done this way for adding opacity animation and to don't add any styles when grid background is null.\n const classList = (this.elementRef.nativeElement as HTMLDivElement).classList;\n this._backgroundConfig !== null\n ? classList.add('buw-grid-background')\n : classList.remove('buw-grid-background');\n\n // Set background visibility\n this.setGridBackgroundVisible(this._backgroundConfig?.show === 'always');\n }\n\n private _backgroundConfig: KtdGridBackgroundCfg | null = null;\n\n private gridCurrentHeight: number;\n\n get config(): KtdGridCfg {\n return {\n cols: this.cols,\n rowHeight: this.rowHeight,\n height: this.height,\n layout: this.layout,\n preventCollision: this.preventCollision,\n gap: this.gap\n };\n }\n\n /** Reference to the view of the placeholder element. */\n private placeholderRef: EmbeddedViewRef<any> | null;\n\n /** Element that is rendered as placeholder when a grid item is being dragged */\n private placeholder: HTMLElement | null;\n\n private _gridItemsRenderData: KtdDictionary<KtdGridItemRenderData<number>>;\n private subscriptions: Subscription[] = [];\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.rowHeight === 'fit' && this.height == null) {\n console.warn(`KtdGridComponent: The @Input() height should not be null when using rowHeight 'fit'`);\n }\n\n let needsCompactLayout = false;\n let needsRecalculateRenderData = false;\n\n // TODO: Does fist change need to be compacted by default?\n // Compact layout whenever some dependent prop changes.\n if (changes.compactType || changes.cols || changes.layout) {\n needsCompactLayout = true;\n }\n\n // Check if wee need to recalculate rendering data.\n if (needsCompactLayout || changes.rowHeight || changes.height || changes.gap || changes.backgroundConfig) {\n needsRecalculateRenderData = true;\n }\n\n // Only compact layout if lib user has provided it. Lib users that want to save/store always the same layout as it is represented (compacted)\n // can use KtdCompactGrid utility and pre-compact the layout. This is the recommended behaviour for always having a the same layout on this component\n // and the ones that uses it.\n if (needsCompactLayout && this.compactOnPropsChange) {\n this.compactLayout();\n }\n\n if (needsRecalculateRenderData) {\n this.calculateRenderData();\n }\n }\n\n ngAfterContentInit(): void {\n this.initSubscriptions();\n }\n\n ngAfterContentChecked(): void {\n this.render();\n }\n\n resize(): void {\n this.calculateRenderData();\n this.render();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n compactLayout(): void {\n this.layout = compact(this.layout, this.compactType, this.cols);\n }\n\n getItemsRenderData(): KtdDictionary<KtdGridItemRenderData<number>> {\n return { ...this._gridItemsRenderData };\n }\n\n getItemRenderData(itemId: string): KtdGridItemRenderData<number> {\n return this._gridItemsRenderData[itemId];\n }\n\n calculateRenderData(): void {\n const clientRect = (this.elementRef.nativeElement as HTMLElement).getBoundingClientRect();\n this.gridCurrentHeight =\n this.height ??\n (this.rowHeight === 'fit' ? clientRect.height : getGridHeight(this.layout, this.rowHeight, this.gap));\n this._gridItemsRenderData = layoutToRenderItems(this.config, clientRect.width, this.gridCurrentHeight);\n\n // Set Background CSS variables\n this.setBackgroundCssVariables(getRowHeightInPixels(this.config, this.gridCurrentHeight));\n }\n\n render(): void {\n this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${this.gridCurrentHeight}px`);\n this.updateGridItemsStyles();\n }\n\n private setBackgroundCssVariables(rowHeight: number): void {\n const style = (this.elementRef.nativeElement as HTMLDivElement).style;\n\n if (this._backgroundConfig) {\n // structure\n style.setProperty('--gap', this.gap + 'px');\n style.setProperty('--row-height', rowHeight + 'px');\n style.setProperty('--columns', `${this.cols}`);\n style.setProperty(\n '--border-width',\n (this._backgroundConfig.borderWidth ?? defaultBackgroundConfig.borderWidth) + 'px'\n );\n\n // colors\n style.setProperty(\n '--border-color',\n this._backgroundConfig.borderColor ?? defaultBackgroundConfig.borderColor\n );\n style.setProperty('--gap-color', this._backgroundConfig.gapColor ?? defaultBackgroundConfig.gapColor);\n style.setProperty('--row-color', this._backgroundConfig.rowColor ?? defaultBackgroundConfig.rowColor);\n style.setProperty(\n '--column-color',\n this._backgroundConfig.columnColor ?? defaultBackgroundConfig.columnColor\n );\n } else {\n style.removeProperty('--gap');\n style.removeProperty('--row-height');\n style.removeProperty('--columns');\n style.removeProperty('--border-width');\n style.removeProperty('--border-color');\n style.removeProperty('--gap-color');\n style.removeProperty('--row-color');\n style.removeProperty('--column-color');\n }\n }\n\n private updateGridItemsStyles(): void {\n this._gridItems.forEach((item) => {\n const gridItemRenderData: KtdGridItemRenderData<number> | undefined = this._gridItemsRenderData[item.id];\n if (gridItemRenderData == null) {\n console.error(`Couldn't find the specified grid item for the id: ${item.id}`);\n } else {\n item.setStyles(parseRenderItemToPixels(gridItemRenderData));\n }\n });\n }\n\n private setGridBackgroundVisible(visible: boolean): void {\n const classList = (this.elementRef.nativeElement as HTMLDivElement).classList;\n visible ? classList.add('buw-grid-background-visible') : classList.remove('buw-grid-background-visible');\n }\n\n private initSubscriptions(): any {\n this.subscriptions = [\n this._gridItems.changes\n .pipe(\n startWith(this._gridItems),\n switchMap((gridItems: QueryList<KtdGridItemComponent>) =>\n merge(\n ...gridItems.map((gridItem) =>\n gridItem.dragStart$.pipe(\n map((event) => ({ event, gridItem, type: 'drag' as DragActionType }))\n )\n ),\n ...gridItems.map((gridItem) =>\n gridItem.resizeStart$.pipe(\n map((event) => ({\n event,\n gridItem,\n type: 'resize' as DragActionType\n }))\n )\n )\n ).pipe(\n exhaustMap(({ event, gridItem, type }) => {\n // Emit drag or resize start events. Ensure that is start event is inside the zone.\n this.ngZone.run(() =>\n (type === 'drag' ? this.dragStarted : this.resizeStarted).emit(\n getDragResizeEventData(gridItem, this.layout)\n )\n );\n\n this.setGridBackgroundVisible(\n this._backgroundConfig?.show === 'whenDragging' ||\n this._backgroundConfig?.show === 'always'\n );\n\n // Perform drag sequence\n return this.performDragSequence$(gridItem, event, type).pipe(\n map((layout) => ({ layout, gridItem, type }))\n );\n })\n )\n )\n )\n .subscribe(({ layout, gridItem, type }) => {\n this.layout = layout;\n // Calculate new rendering data given the new layout.\n this.calculateRenderData();\n // Emit drag or resize end events.\n (type === 'drag' ? this.dragEnded : this.resizeEnded).emit(\n getDragResizeEventData(gridItem, layout)\n );\n // Notify that the layout has been updated.\n this.layoutUpdated.emit(layout);\n\n this.setGridBackgroundVisible(this._backgroundConfig?.show === 'always');\n })\n ];\n }\n\n /**\n * Perform a general grid drag action, from start to end. A general grid drag action basically includes creating the placeholder element and adding\n * some class animations. calcNewStateFunc needs to be provided in order to calculate the new state of the layout.\n * @param gridItem that is been dragged\n * @param pointerDownEvent event (mousedown or touchdown) where the user initiated the drag\n * @param calcNewStateFunc function that return the new layout state and the drag element position\n */\n private performDragSequence$(\n gridItem: KtdGridItemComponent,\n pointerDownEvent: MouseEvent | TouchEvent,\n type: DragActionType\n ): Observable<KtdGridLayout> {\n return new Observable<KtdGridLayout>((observer: Observer<KtdGridLayout>) => {\n // Retrieve grid (parent) and gridItem (draggedElem) client rects.\n const gridElemClientRect: KtdClientRect = getMutableClientRect(\n this.elementRef.nativeElement as HTMLElement\n );\n const dragElemClientRect: KtdClientRect = getMutableClientRect(\n gridItem.el.nativeElement as HTMLElement\n );\n\n const scrollableParent =\n typeof this.scrollableParent === 'string'\n ? document.getElementById(this.scrollableParent)\n : this.scrollableParent;\n\n this.renderer.addClass(gridItem.el.nativeElement, 'no-transitions');\n this.renderer.addClass(gridItem.el.nativeElement, 'buw-grid-item-dragging');\n\n const placeholderClientRect: KtdClientRect = {\n ...dragElemClientRect,\n left: dragElemClientRect.left - gridElemClientRect.left,\n top: dragElemClientRect.top - gridElemClientRect.top\n };\n this.createPlaceholderElement(placeholderClientRect, gridItem.placeholder);\n\n let newLayout: KtdGridLayoutItem[];\n\n // TODO (enhancement): consider move this 'side effect' observable inside the main drag loop.\n // - Pros are that we would not repeat subscriptions and takeUntil would shut down observables at the same time.\n // - Cons are that moving this functionality as a side effect inside the main drag loop would be confusing.\n const scrollSubscription = this.ngZone.runOutsideAngular(() =>\n (!scrollableParent\n ? NEVER\n : this.gridService.mouseOrTouchMove$(document).pipe(\n map((event) => ({\n pointerX: ktdPointerClientX(event),\n pointerY: ktdPointerClientY(event)\n })),\n ktdScrollIfNearElementClientRect$(scrollableParent, { scrollStep: this.scrollSpeed })\n )\n )\n .pipe(takeUntil(ktdPointerUp(document)))\n .subscribe()\n );\n\n /**\n * Main subscription, it listens for 'pointer move' and 'scroll' events and recalculates the layout on each emission\n */\n const subscription = this.ngZone.runOutsideAngular(() =>\n merge(\n combineLatest([\n this.gridService.mouseOrTouchMove$(document),\n ...(!scrollableParent\n ? [of({ top: 0, left: 0 })]\n : [\n ktdGetScrollTotalRelativeDifference$(scrollableParent).pipe(\n startWith({ top: 0, left: 0 }) // Force first emission to allow CombineLatest to emit even no scroll event has occurred\n )\n ])\n ])\n )\n .pipe(takeUntil(ktdPointerUp(document)))\n .subscribe(\n ([pointerDragEvent, scrollDifference]) =>\n // : [MouseEvent | TouchEvent | PointerEvent{ top: number; left: number }]\n {\n pointerDragEvent.preventDefault();\n\n /**\n * Set the new layout to be the layout in which the calcNewStateFunc would be executed.\n * NOTE: using the mutated layout is the way to go by 'react-grid-layout' utils. If we don't use the previous layout,\n * some utilities from 'react-grid-layout' would not work as expected.\n */\n const currentLayout: KtdGridLayout = newLayout || this.layout;\n\n // Get the correct newStateFunc depending on if we are dragging or resizing\n const calcNewStateFunc = type === 'drag' ? ktdGridItemDragging : ktdGridItemResizing;\n\n const { layout, draggedItemPos } = calcNewStateFunc(\n gridItem,\n {\n layout: currentLayout,\n rowHeight: this.rowHeight,\n height: this.height,\n cols: this.cols,\n preventCollision: this.preventCollision,\n gap: this.gap\n },\n this.compactType,\n {\n pointerDownEvent,\n pointerDragEvent,\n gridElemClientRect,\n dragElemClientRect,\n scrollDifference\n }\n );\n newLayout = layout;\n\n this.gridCurrentHeight =\n this.height ??\n (this.rowHeight === 'fit'\n ? gridElemClientRect.height\n : getGridHeight(newLayout, this.rowHeight, this.gap));\n\n this._gridItemsRenderData = layoutToRenderItems(\n {\n cols: this.cols,\n rowHeight: this.rowHeight,\n height: this.height,\n layout: newLayout,\n preventCollision: this.preventCollision,\n gap: this.gap\n },\n gridElemClientRect.width,\n gridElemClientRect.height\n );\n\n const newGridItemRenderData = { ...this._gridItemsRenderData[gridItem.id] };\n const placeholderStyles = parseRenderItemToPixels(newGridItemRenderData);\n\n // Put the real final position to the placeholder element\n this.placeholder!.style.width = placeholderStyles.width;\n this.placeholder!.style.height = placeholderStyles.height;\n this.placeholder!.style.transform = `translateX(${placeholderStyles.left}) translateY(${placeholderStyles.top})`;\n\n // modify the position of the dragged item to be the once we want (for example the mouse position or whatever)\n this._gridItemsRenderData[gridItem.id] = {\n ...draggedItemPos,\n id: this._gridItemsRenderData[gridItem.id].id\n };\n\n this.setBackgroundCssVariables(\n this.rowHeight === 'fit'\n ? ktdGetGridItemRowHeight(newLayout, gridElemClientRect.height, this.gap)\n : this.rowHeight\n );\n\n this.render();\n\n // If we are performing a resize, and bounds have changed, emit event.\n // NOTE: Only emit on resize for now. Use case for normal drag is not justified for now. Emitting on resize is,\n // since we may want to re-render the grid item or the placeholder in order to fit the new bounds.\n if (type === 'resize') {\n const prevGridItem = currentLayout.find((item) => item.id === gridItem.id)!;\n const newGridItem = newLayout.find((item) => item.id === gridItem.id)!;\n // Check if item resized has changed, if so, emit resize change event\n if (!ktdGridItemLayoutItemAreEqual(prevGridItem, newGridItem)) {\n this.gridItemResize.emit({\n width: newGridItemRenderData.width,\n height: newGridItemRenderData.height,\n gridItemRef: getDragResizeEventData(gridItem, newLayout).gridItemRef\n });\n }\n }\n },\n (error) => observer.error(error),\n () => {\n this.ngZone.run(() => {\n // Remove drag classes\n this.renderer.removeClass(gridItem.el.nativeElement, 'no-transitions');\n this.renderer.removeClass(gridItem.el.nativeElement, 'buw-grid-item-dragging');\n\n this.addGridItemAnimatingClass(gridItem).subscribe();\n // Consider destroying the placeholder after the animation has finished.\n this.destroyPlaceholder();\n\n if (newLayout) {\n // TODO: newLayout should already be pruned. If not, it should have type Layout, not KtdGridLayout as it is now.\n // Prune react-grid-layout compact extra properties.\n observer.next(\n newLayout.map((item) => ({\n id: item.id,\n x: item.x,\n y: item.y,\n w: item.w,\n h: item.h,\n minW: item.minW,\n minH: item.minH,\n maxW: item.maxW,\n maxH: item.maxH\n })) as KtdGridLayout\n );\n } else {\n // TODO: Need we really to emit if there is no layout change but drag started and ended?\n observer.next(this.layout);\n }\n\n observer.complete();\n });\n }\n )\n );\n\n return () => {\n scrollSubscription.unsubscribe();\n subscription.unsubscribe();\n };\n });\n }\n\n /**\n * It adds the `buw-grid-item-animating` class and removes it when the animated transition is complete.\n * This function is meant to be executed when the drag has ended.\n * @param gridItem that has been dragged\n */\n private addGridItemAnimatingClass(gridItem: KtdGridItemComponent): Observable<undefined> {\n return new Observable((observer) => {\n const duration = getTransformTransitionDurationInMs(gridItem.el.nativeElement);\n\n if (duration === 0) {\n observer.next(undefined);\n observer.complete();\n return;\n }\n\n this.renderer.addClass(gridItem.el.nativeElement, 'buw-grid-item-animating');\n const handler = ((event: TransitionEvent) => {\n if (\n !event ||\n (event.target === gridItem.el.nativeElement && event.propertyName === 'transform')\n ) {\n this.renderer.removeClass(gridItem.el.nativeElement, 'buw-grid-item-animating');\n removeEventListener();\n clearTimeout(timeout);\n observer.next(undefined);\n observer.complete();\n }\n }) as EventListener;\n\n // If a transition is short enough, the browser might not fire the `transitionend` event.\n // Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll\n // fire if the transition hasn't completed when it was supposed to.\n const timeout = setTimeout(handler, duration * 1.5);\n const removeEventListener = this.renderer.listen(\n gridItem.el.nativeElement,\n 'transitionend',\n handler\n );\n });\n }\n\n /** Creates placeholder element */\n private createPlaceholderElement(clientRect: KtdClientRect, gridItemPlaceholder?: KtdGridItemPlaceholder): void {\n this.placeholder = this.renderer.createElement('div');\n this.placeholder!.style.width = `${clientRect.width}px`;\n this.placeholder!.style.height = `${clientRect.height}px`;\n this.placeholder!.style.transform = `translateX(${clientRect.left}px) translateY(${clientRect.top}px)`;\n this.placeholder!.classList.add('buw-grid-item-placeholder');\n this.renderer.appendChild(this.elementRef.nativeElement, this.placeholder);\n\n // Create and append custom placeholder if provided.\n // Important: Append it after creating & appending the container placeholder. This way we ensure parent bounds are set when creating the embeddedView.\n if (gridItemPlaceholder) {\n this.placeholderRef = this.viewContainerRef.createEmbeddedView(\n gridItemPlaceholder.templateRef,\n gridItemPlaceholder.data\n );\n this.placeholderRef.rootNodes.forEach((node) => this.placeholder!.appendChild(node));\n this.placeholderRef.detectChanges();\n } else {\n this.placeholder!.classList.add('buw-grid-item-placeholder-default');\n }\n }\n\n /** Destroys the placeholder element and its ViewRef. */\n private destroyPlaceholder(): void {\n this.placeholder?.remove();\n this.placeholderRef?.destroy();\n this.placeholder = this.placeholderRef = null!;\n }\n\n static ngAcceptInputType_cols: NumberInput;\n static ngAcceptInputType_rowHeight: NumberInput;\n static ngAcceptInputType_scrollSpeed: NumberInput;\n static ngAcceptInputType_compactOnPropsChange: BooleanInput;\n static ngAcceptInputType_preventCollision: BooleanInput;\n}\n\n","<ng-content></ng-content>","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { BaseComponent } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'buw-nav-container',\r\n templateUrl: './nav-container.component.html',\r\n styleUrls: ['./nav-container.component.scss'],\r\n providers: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class NavContainerComponent extends BaseComponent implements OnInit, OnDestroy {\r\n _router = inject(Router);\r\n onTabSelect(e): void { \r\n if (e.label === 'صفحه اصلی') {\r\n this._router.navigate(['/home']);\r\n }\r\n if (e.label === 'برنامه ها') {\r\n this._router.navigate(['/home/launchpad']);\r\n }\r\n }\r\n}\r\n","<div class=\"fd-shellbar fd-shellbar--xl\">\r\n <fdp-icon-tab-bar layoutMode=\"row\" maxContentHeight=\"250px\" (iconTabSelected)=\"onTabSelect($event)\">\r\n <fdp-icon-tab-bar-tab label=\"صفحه اصلی\" active> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میز کار من\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"تیکتینگ\">\r\n <fdp-icon-tab-bar-tab label=\"میزکار1\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار2\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار3\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار4\"> </fdp-icon-tab-bar-tab>\r\n </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"منابع انسانی\">\r\n <fdp-icon-tab-bar-tab label=\"میزکار1\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار2\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار3\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار4\"> </fdp-icon-tab-bar-tab>\r\n </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکارها\">\r\n <fdp-icon-tab-bar-tab label=\"میزکار1\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار2\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار3\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"میزکار4\"> </fdp-icon-tab-bar-tab>\r\n </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"برنامه ها\"> </fdp-icon-tab-bar-tab>\r\n <fdp-icon-tab-bar-tab label=\"ابزارها\"> </fdp-icon-tab-bar-tab>\r\n </fdp-icon-tab-bar>\r\n</div>","/**\r\n * Removes and item from an array. Returns a new array instance (it doesn't mutate the source array).\r\n * @param array source array to be returned without the element to remove\r\n * @param condition function that will return true for the item that we want to remove\r\n */\r\nexport function ktdArrayRemoveItem<T>(array: T[], condition: (item: T) => boolean): any {\r\n const arrayCopy = [...array];\r\n const index = array.findIndex((item) => condition(item));\r\n if (index > -1) {\r\n arrayCopy.splice(index, 1);\r\n }\r\n return arrayCopy;\r\n}\r\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n Input,\r\n SimpleChanges,\r\n DOCUMENT,\r\n inject\r\n} from '@angular/core';\r\n\r\nimport { BaseComponent, MetaobjectDataModel } from 'barsa-novin-ray-core';\r\nimport { debounceTime, filter, fromEvent, merge, Subscription } from 'rxjs';\r\nimport { KtdDragEnd, KtdDragStart, KtdGridComponent, KtdResizeEnd, KtdResizeStart } from '../grid/grid.component';\r\nimport { ktdGridCompact, ktdTrackById } from '../utils/grid.utils';\r\nimport { KtdGridBackgroundCfg, KtdGridLayout, KtdGridLayoutItem } from '../grid.definitions';\r\nimport { ktdArrayRemoveItem } from '../utils';\r\n\r\n@Component({\r\n selector: 'buw-layout-container',\r\n templateUrl: './layout-container.component.html',\r\n styleUrls: ['./layout-container.component.scss'],\r\n providers: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class LayoutContainerComponent extends BaseComponent implements OnInit, OnDestroy {\r\n @ViewChild(KtdGridComponent, { static: true }) grid: KtdGridComponent;\r\n // @Input() layout: KtdGridLayout = [{ id: '0', x: 5, y: 0, w: 2, h: 3 }];\r\n @Input() layout: KtdGridLayout = [];\r\n @Input() moDataList: MetaobjectDataModel[] = [];\r\n\r\n trackById = ktdTrackById;\r\n\r\n cols = 12;\r\n rowHeight = 50;\r\n rowHeightFit = false;\r\n gridHeight: null | number = null;\r\n compactType: 'vertical' | 'horizontal' | null = 'vertical';\r\n transitions: { name: string; value: string }[] = [\r\n { name: 'ease', value: 'transform 500ms ease, width 500ms ease, height 500ms ease' },\r\n { name: 'ease-out', value: 'transform 500ms ease-out, width 500ms ease-out, height 500ms ease-out' },\r\n { name: 'linear', value: 'transform 500ms linear, width 500ms linear, height 500ms linear' },\r\n {\r\n name: 'overflowing',\r\n value: 'transform 500ms cubic-bezier(.28,.49,.79,1.35), width 500ms cubic-bezier(.28,.49,.79,1.35), height 500ms cubic-bezier(.28,.49,.79,1.35)'\r\n },\r\n { name: 'fast', value: 'transform 200ms ease, width 200ms linear, height 200ms linear' },\r\n { name: 'slow-motion', value: 'transform 1000ms linear, width 1000ms linear, height 1000ms linear' },\r\n { name: 'transform-only', value: 'transform 500ms ease' }\r\n ];\r\n currentTransition: string = this.transitions[0].value;\r\n\r\n placeholders: string[] = ['None', 'Default', 'Custom 1', 'Custom 2', 'Custom 3'];\r\n\r\n currentPlaceholder = 'Default';\r\n\r\n dragStartThreshold = 0;\r\n gap = 10;\r\n autoScroll = true;\r\n disableDrag = false;\r\n disableResize = false;\r\n disableRemove = false;\r\n autoResize = true;\r\n preventCollision = false;\r\n isDragging = false;\r\n isResizing = false;\r\n showBackground = false;\r\n resizeSubscription: Subscription;\r\n\r\n gridBackgroundVisibilityOptions = ['never', 'always', 'whenDragging'];\r\n gridBackgroundConfig: Required<KtdGridBackgroundCfg> = {\r\n show: 'always',\r\n borderColor: 'rgba(255, 128, 0, 0.25)',\r\n gapColor: 'transparent',\r\n borderWidth: 1,\r\n rowColor: 'rgba(128, 128, 128, 0.10)',\r\n columnColor: 'rgba(128, 128, 128, 0.10)'\r\n };\r\n\r\n public document = inject(DOCUMENT);\r\n\r\n ngOnInit(): void {\r\n this.resizeSubscription = merge(fromEvent(window, 'resize'), fromEvent(window, 'orientationchange'))\r\n .pipe(\r\n debounceTime(50),\r\n filter(() => this.autoResize)\r\n )\r\n .subscribe(() => {\r\n this.grid.resize();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.resizeSubscription.unsubscribe();\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n super.ngOnChanges(changes);\r\n const { layout } = changes;\r\n if (layout && !layout.firstChange) {\r\n this.grid.resize();\r\n }\r\n }\r\n\r\n onDragStarted(_event: KtdDragStart): void {\r\n this.isDragging = true;\r\n }\r\n\r\n onResizeStarted(_event: KtdResizeStart): void {\r\n this.isResizing = true;\r\n }\r\n\r\n onDragEnded(_event: KtdDragEnd): void {\r\n this.isDragging = false;\r\n }\r\n\r\n onResizeEnded(_event: KtdResizeEnd): void {\r\n this.isResizing = false;\r\n }\r\n\r\n onLayoutUpdated(layout: KtdGridLayout): void { \r\n this.layout = layout;\r\n }\r\n\r\n onAutoScrollChange(checked: boolean): void {\r\n this.autoScroll = checked;\r\n }\r\n\r\n onDisableDragChange(checked: boolean): void {\r\n this.disableDrag = checked;\r\n }\r\n\r\n onDisableResizeChange(checked: boolean): void {\r\n this.disableResize = checked;\r\n }\r\n\r\n onShowBackgroundChange(checked: boolean): void {\r\n this.showBackground = checked;\r\n }\r\n\r\n onDisableRemoveChange(checked: boolean): void {\r\n this.disableRemove = checked;\r\n }\r\n\r\n onAutoResizeChange(checked: boolean): void {\r\n this.autoResize = checked;\r\n }\r\n\r\n onPreventCollisionChange(checked: boolean): void {\r\n this.preventCollision = checked;\r\n }\r\n\r\n onColsChange(event: Event): void {\r\n this.cols = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n onRowHeightChange(event: Event): void {\r\n this.rowHeight = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n onGridHeightChange(event: Event): void {\r\n this.gridHeight = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n onDragStartThresholdChange(event: Event): void {\r\n this.dragStartThreshold = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n onGapChange(event: Event): void {\r\n this.gap = coerceNumberProperty((event.target as HTMLInputElement).value);\r\n }\r\n\r\n generateLayout(): void {\r\n const layout: KtdGridLayout = [];\r\n for (let i = 0; i < this.cols; i++) {\r\n const y = Math.ceil(Math.random() * 4) + 1;\r\n layout.push({\r\n x: Math.round(Math.random() * Math.floor(this.cols / 2 - 1)) * 2,\r\n y: Math.floor(i / 6) * y,\r\n w: 2,\r\n h: y,\r\n id: i.toString()\r\n // static: Math.random() < 0.05\r\n });\r\n }\r\n this.layout = ktdGridCompact(layout, this.compactType, this.cols); \r\n }\r\n\r\n /** Adds a grid item to the layout */\r\n addItemToLayout(): void {\r\n const maxId = this.layout.reduce((acc, cur) => Math.max(acc, parseInt(cur.id, 10)), -1);\r\n const nextId = maxId + 1;\r\n\r\n const newLayoutItem: KtdGridLayoutItem = {\r\n id: nextId.toString(),\r\n x: -1,\r\n y: -1,\r\n w: 2,\r\n h: 2\r\n };\r\n\r\n // Important: Don't mutate the array, create new instance. This way notifies the Grid component that the layout has changed.\r\n this.layout = [newLayoutItem, ...this.layout];\r\n\r\n this.layout = ktdGridCompact(this.layout, this.compactType, this.cols);\r\n }\r\n\r\n /**\r\n * Fired when a mousedown happens on the remove grid item button.\r\n * Stops the event from propagating an causing the drag to start.\r\n * We don't want to drag when mousedown is fired on remove icon button.\r\n */\r\n stopEventPropagation(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n /** Removes the item from the layout */\r\n removeItem(id: string): void {\r\n // Important: Don't mutate the array. Let Angular know that the layout has changed creating a new reference.\r\n this.layout = ktdArrayRemoveItem(this.layout, (item) => item.id === id);\r\n }\r\n\r\n updateGridBgBorderWidth(borderWidth: string): void {\r\n this.gridBackgroundConfig = {\r\n ...this.gridBackgroundConfig,\r\n borderWidth: Number(borderWidth)\r\n };\r\n }\r\n\r\n updateGridBgColor(color: string, property: string): void {\r\n this.gridBackgroundConfig = {\r\n ...this.gridBackgroundConfig,\r\n [property]: color\r\n };\r\n }\r\n\r\n getCurrentBackgroundVisibility(): string {\r\n return this.gridBackgroundConfig?.show ?? 'never';\r\n }\r\n}\r\n","<div style=\"position: relative\" dir=\"ltr\" fillEmptySpace [setMinHeight]=\"true\">\r\n <buw-grid\r\n [cols]=\"cols\"\r\n [backgroundConfig]=\"gridBackgroundConfig\"\r\n [height]=\"rowHeightFit && gridHeight ? gridHeight : null\"\r\n [rowHeight]=\"rowHeightFit ? 'fit' : rowHeight\"\r\n [layout]=\"layout\"\r\n [compactType]=\"compactType\"\r\n [preventCollision]=\"preventCollision\"\r\n [scrollableParent]=\"autoScroll ? document : null\"\r\n [gap]=\"gap\"\r\n [scrollSpeed]=\"4\"\r\n (dragStarted)=\"onDragStarted($event)\"\r\n (resizeStarted)=\"onResizeStarted($event)\"\r\n (dragEnded)=\"onDragEnded($event)\"\r\n (resizeEnded)=\"onResizeEnded($event)\"\r\n (layoutUpdated)=\"onLayoutUpdated($event)\"\r\n >\r\n <buw-grid-item\r\n *ngFor=\"let item of layout; trackBy: trackById; let i = index\"\r\n [id]=\"item.id\"\r\n [transition]=\"currentTransition\"\r\n [dragStartThreshold]=\"dragStartThreshold\"\r\n [draggable]=\"!disableDrag\"\r\n [resizable]=\"!disableResize\"\r\n >\r\n <div class=\"grid-item-content\">\r\n @if(moDataList?.length && moDataList[i]?.EjrayOlgo ){\r\n <bnrc-dynamic-item-component [component]=\"moDataList[i].EjrayOlgo\"> </bnrc-dynamic-item-component>\r\n }\r\n \r\n </div>\r\n <div\r\n class=\"grid-item-remove-handle\"\r\n *ngIf=\"!disableRemove\"\r\n (mousedown)=\"stopEventPropagation($event)\"\r\n (click)=\"removeItem(item.id)\"\r\n ></div>\r\n <ng-template *ngIf=\"currentPlaceholder !== 'Default'\" buwGridItemPlaceholder>\r\n <div\r\n *ngIf=\"currentPlaceholder === 'Custom 1'\"\r\n class=\"grid-item-content custom-placeholder custom-placeholder-1\"\r\n >\r\n {{ item.id }}\r\n </div>\r\n <div\r\n *ngIf=\"currentPlaceholder === 'Custom 2'\"\r\n class=\"grid-item-content custom-placeholder custom-placeholder-2\"\r\n >\r\n {{ item.id }}\r\n </div>\r\n <div\r\n *ngIf=\"currentPlaceholder === 'Custom 3'\"\r\n class=\"grid-item-content custom-placeholder custom-placeholder-3\"\r\n >\r\n {{ item.id }}\r\n </div>\r\n </ng-template>\r\n </buw-grid-item>\r\n </buw-grid>\r\n</div>\r\n","import { PipeTransform, Pipe } from '@angular/core';\r\nimport { MetaobjectDataModel } from 'barsa-novin-ray-core';\r\nimport { KtdGridLayout } from './grid.definitions';\r\n\r\n@Pipe({\r\n name: 'layoutGridMapper',\r\n standalone: false\r\n})\r\nexport class LayoutGridMapperPipe implements PipeTransform {\r\n transform(molist: MetaobjectDataModel[]): KtdGridLayout {\r\n const x = molist.map((c) => ({\r\n id: c.Id,\r\n x: +c.x,\r\n y: +c.y,\r\n w: +c.w,\r\n h: +c.h,\r\n minW: c.minW,\r\n minH: c.minH,\r\n maxW: c.maxW,\r\n maxH: c.maxH,\r\n ejrayOlgo: c.EjrayOlgo\r\n }));\r\n return x;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport { ReportViewBaseComponent, UiReportViewBaseSetting } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'buw-report-grid-layout',\r\n templateUrl: './report-grid-layout.component.html',\r\n styleUrls: ['./report-grid-layout.component.scss'],\r\n providers: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class ReportGridLayoutComponent\r\n extends ReportViewBaseComponent<UiReportViewBaseSetting>\r\n implements OnInit, OnDestroy {}\r\n","<div style=\"position: relative\" dir=\"ltr\" fillEmptySpace [setMinHeight]=\"true\">\r\n <buw-layout-container [moDataList]=\"moDataList\" [layout]=\"moDataList | layoutGridMapper\"> </buw-layout-container>\r\n</div>\r\n","import { ComponentFactoryResolver, NgModule, inject } from '@angular/core';\nimport { KtdGridComponent } from './grid/grid.component';\nimport { KtdGridItemComponent } from './grid-item/grid-item.component';\nimport { KtdGridDragHandle } from './directives/drag-handle';\nimport { KtdGridResizeHandle } from './directives/resize-handle';\nimport { KtdGridService } from './grid.service';\nimport { KtdGridItemPlaceholder } from './directives/placeholder';\nimport { BarsaNovinRayCoreModule, BaseModule, DynamicComponentService } from 'barsa-novin-ray-core';\nimport { NavContainerComponent } from './nav-container/nav-container.component';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { FundamentalNgxCoreModule } from '@fundamental-ngx/core';\nimport { FundamentalNgxPlatformModule } from '@fundamental-ngx/platform';\nimport { LayoutContainerComponent } from './layout-container/layout-container.component';\nimport { ReportGridLayoutComponent } from './report-grid-layout/report-grid-layout.component';\nimport { LayoutGridMapperPipe } from './layout-grid-mapper.pipe';\n\nconst components = [\n KtdGridComponent,\n KtdGridItemComponent,\n NavContainerComponent,\n LayoutContainerComponent,\n ReportGridLayoutComponent\n];\nconst pipes = [LayoutGridMapperPipe];\nconst directives = [KtdGridDragHandle, KtdGridResizeHandle, KtdGridItemPlaceholder];\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n DragDropModule,\n CdkTableModule,\n FundamentalNgxCoreModule,\n FundamentalNgxPlatformModule,\n BarsaNovinRayCoreModule\n ],\n declarations: [...components, ...directives, ...pipes],\n providers: [KtdGridService, ...pipes],\n exports: [...components, ...directives]\n})\nexport class BarsaUserWorkspaceModule extends BaseModule {\n protected dcm: DynamicComponentService;\n protected componentFactoryResolver: ComponentFactoryResolver;\n\n protected dynamicComponents = [...components];\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n \n\n constructor() {\n const dcm = inject(DynamicComponentService);\n const componentFactoryResolver = inject(ComponentFactoryResolver);\n\n super(dcm, componentFactoryResolver, 'BarsaUserWorkspaceModule');\n \n this.dcm = dcm;\n this.componentFactoryResolver = componentFactoryResolver;\n }\n}\n\n","/*\n * Public API Surface of grid\n */\nexport { ktdGridCompact, ktdTrackById } from './lib/utils/grid.utils';\nexport { KtdClientRect } from './lib/utils/client-rect';\nexport * from './lib/directives/drag-handle';\nexport * from './lib/directives/resize-handle';\nexport * from './lib/directives/placeholder';\nexport * from './lib/grid-item/grid-item.component';\nexport * from './lib/grid.definitions';\nexport * from './lib/grid/grid.component';\nexport * from './lib/nav-container/nav-container.component';\nexport * from './lib/layout-container/layout-container.component';\nexport * from './lib/report-grid-layout/report-grid-layout.component';\nexport * from './lib/barsa-user-workspace.module';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter","coerceNumberProperty","i1","i3.KtdGridComponent","i4.KtdGridItemComponent","i5.KtdGridItemPlaceholder","i2.LayoutContainerComponent","i3.LayoutGridMapperPipe"],"mappings":"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"}
|