{"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)\" fixMore>\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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"}