@schneideress/dashboardframework 20.0.25 → 20.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schneideress-dashboardframework.mjs","sources":["../../../projects/ra-dashboard-framework/src/lib/ra.dashboard.service.ts","../../../projects/ra-dashboard-framework/src/lib/ra.event.enum.ts","../../../projects/ra-dashboard-framework/src/lib/ra.gridster.config.ts","../../../projects/ra-dashboard-framework/src/lib/ra.dashboard.responsive.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterConfig.interface.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterCompact.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterConfig.constant.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterUtils.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterEmptyCell.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterPreview.component.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterRenderer.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridster.component.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridster.html","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterPush.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterScroll.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterSwap.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterDraggable.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterPushResize.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterResizable.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterItem.component.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterItem.html","../../../projects/ra-dashboard-framework/src/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.ts","../../../projects/ra-dashboard-framework/src/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.html","../../../projects/ra-dashboard-framework/src/lib/ra-widget-container/ra.widget.container.component.ts","../../../projects/ra-dashboard-framework/src/lib/ra-widget-container/ra.widget.container.component.html","../../../projects/ra-dashboard-framework/src/lib/ra-dashboard-area/ra.dashboard.area.ts","../../../projects/ra-dashboard-framework/src/lib/ra-dashboard-area/ra.dashboard.area.html","../../../projects/ra-dashboard-framework/src/lib/custom.notifier.options.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridster.module.ts","../../../projects/ra-dashboard-framework/src/lib/ra.dashboard.module.ts","../../../projects/ra-dashboard-framework/src/lib/ra.dashbard.event.bus.ts","../../../projects/ra-dashboard-framework/src/lib/ra.base.dashboard.template.ts","../../../projects/ra-dashboard-framework/src/lib/ra.base.dashboard.filter.ts","../../../projects/ra-dashboard-framework/src/public-api.ts","../../../projects/ra-dashboard-framework/src/schneideress-dashboardframework.ts"],"sourcesContent":["import { Injectable, Injector } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { BaseService } from '@schneideress/ra-common';\r\nimport { IAppConfig, IDashboardInfo, IWidgetInfo } from '@schneideress/widgetframework';\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RaDashboardService extends BaseService {\r\n\r\n constructor(injector: Injector) {\r\n super(injector, '');\r\n }\r\n\r\n private loadedScripts: string[] = [];\r\n public clientId: any = undefined;\r\n /* \r\n * To load external scripts in the dom\r\n */\r\n public loadExternalScript(scriptPath: string, callback: any): void {\r\n if (this.loadedScripts.indexOf(scriptPath) == -1) {\r\n const script = document.createElement('script');\r\n script.src = scriptPath;\r\n // script.addEventListener(\"load\", callback(), true);\r\n script.onload = function () {\r\n callback();\r\n };\r\n document.body.appendChild(script);\r\n this.loadedScripts.push(scriptPath);\r\n\r\n }\r\n else {\r\n callback();\r\n }\r\n }\r\n\r\n /*\r\n * To retrieve the list of widgets based on dashboard id & areaId\r\n */\r\n public getWidgetsByDashboardArea(widgetInfo: IWidgetInfo, appConfig: IAppConfig) {\r\n\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n return this.post('widget/GetWidgetByArea', widgetInfo);\r\n\r\n }\r\n\r\n public updateWidgets(widgetList: Array<IWidgetInfo>, appConfig: IAppConfig) {\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n return this.post('widget/UpdateAreaWidgets', widgetList);\r\n }\r\n\r\n public getWidgetConfigInfo(widgetInfo:any) {\r\n return of();\r\n }\r\n\r\n /*\r\n * To update the configuration of a widget.\r\n */\r\n public updateConfig(config: any, widgetInstanceId: number) {\r\n\r\n }\r\n\r\n /**To add widget to the database */\r\n public addWidget(widgetInfo: any, appConfig: IAppConfig) {\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n return this.post('widget/AddWidgetUser', widgetInfo);\r\n }\r\n\r\n /** To Delete current widget from DOM*/\r\n public deleteWidget(widgetInfo: any, appConfig: IAppConfig) {\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n return this.delete('widget/DeleteWidgetUser?widgetInstanceId=' + widgetInfo.widgetInstanceId);\r\n }\r\n\r\n /**To Update widgetInfo in database */\r\n public updateWidget(widgetInfo: IWidgetInfo, appConfig: IAppConfig) {\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n \r\n let info:any = {};\r\n info.widgetConfigInfo = widgetInfo.widgetConfigInfo;\r\n info.widgetInstanceId = widgetInfo.widgetInstanceId;\r\n info.widgetTitle = widgetInfo.widgetTitle;\r\n info.widgetType = widgetInfo.widgetType;\r\n info.widgetId = widgetInfo.widgetId;\r\n\r\n return this.post('widget/UpdateUserWidget', widgetInfo);\r\n }\r\n\r\n /** To Move or change position if current widget container*/\r\n public moveWidget(widgetInfo: any) {\r\n\r\n }\r\n\r\n\r\n /** To Copy Current widget with same configuration*/\r\n public copyWidget(widgetInfo: any) {\r\n\r\n }\r\n}\r\n","export enum RAEvent {\r\n\r\n /** widget selection click on widget library */\r\n WidgetSelected = \"widgetSelected\",\r\n\r\n /** triggers when user click on the edit link in widget container */\r\n WidgetEditClicked = \"widgetEditClicked\",\r\n\r\n /** triggers when user clicks the cancel button on widget configuration window */\r\n ConfigCancelClick = \"configCancelClick\",\r\n\r\n /** triggers when user click on the close button on widget configuration window */\r\n ConfigCloseClick = \"configCloseClick\",\r\n\r\n /** add button click on widget configuration window */\r\n ConfigAddClick = \"configAddClick\",\r\n\r\n /** triggers when a user click on the save button in widget configuration window */\r\n ConfigChanged = \"configChanged\",\r\n\r\n /**To rearrange widgets in a dashboard */\r\n RearrangeClicked = \"rearrangeClicked\",\r\n\r\n /**dashboard customize button click */\r\n DashboardCustomizeClick = \"dashboardCustomizeClick\",\r\n\r\n /**triggers when user clicks on the dashboard change icon in header section */\r\n DashboardChanged = \"dashboardChanged\",\r\n\r\n /** triggers when user clicks the close button on library */\r\n WidgetLibraryCloseBtnClicked = \"WidgetLibraryCloseBtnClicked\",\r\n\r\n /** triggers when user clicks on view dashboard*/\r\n LoadDashboard = \"LoadDashboard\",\r\n\r\n /** triggers when user clicks on copywidget */\r\n CopyWidget = \"CopyWidget\",\r\n\r\n /**triggers when user clicks on Move widget */\r\n MoveWidget = \"MoveWidget\",\r\n\r\n /**triggers when user raise delete widget event */\r\n WidgetDelete = \"WidgetDelete\",\r\n\r\n /** used to add widget to widgetlist when user copies a widget to current dashboard */\r\n AddWidget = \"AddWidget\",\r\n\r\n /** done button click on widget library flyout */\r\n widgetLibraryDoneClick = \"widgetLibraryDoneClick\",\r\n\r\n /**refresh favorite icon after srtting and resetting favorites */\r\n favoriteIconRefresh = \"favoriteIconRefresh\",\r\n\r\n /**to refresh menu content */\r\n QuickLinkRefresh = \"QuickLinkRefresh\",\r\n\r\n /**To raise widget added event */\r\n WidgetAdded = \"WidgetAdded\",\r\n\r\n /**To update global filter site from map widget selected site */\r\n UpdateGlobalFilterFromMapWidget = \"UpdateGlobalFilterFromMapWidget\",\r\n\r\n /**To add widget on empty dashboard */\r\n AddWidgetEmptyDashboard = \"AddWidgetEmptyDashboard\",\r\n\r\n /**To raise new widget add click event */\r\n AddNewWidgetToDashboard = \"AddNewWidgetToDashboard\",\r\n\r\n HideDashboardBanner = \"HideDashboardBanner\",\r\n\r\n /**To launch flyout from custom widget library */\r\n LaunchCustomWidgetFlyout = \"LaunchCustomWidgetFlyout\",\r\n\r\n /**update applied filter badge for inaplicable filters */\r\n UpdateAppledFiterForInapplicableFilter = \"UpdateAppledFiterForInapplicableFilter\",\r\n\r\n /**show inapplicable filter message in global filter flyout */\r\n ShowInapplicableFilterMessage = \"ShowInapplicableFilterMessage\",\r\n\r\n /** Bulk Action Clicked */\r\n BulkActionClick = \"BulkActionClick\",\r\n\r\n /** Global Filter Clicked */\r\n /** When user change the curated filter(eg:data streams), system will create/delete widgets */\r\n CuratedFilterChange = \"CuratedFilterChange\",\r\n GlobalFilterClick = \"GlobalFilterClick\",\r\n LayoutChange = \"LayoutChange\",\r\n /** Event raised when DownloadOnlyState is activated */\r\n DownloadOnlyState= \"DownloadOnlyState\",\r\n /** Event on excel download button clicked*/\r\n DownloadExcelClick = \"DownloadExcelClick\",\r\n /** Event on emission report snapshot button clicked*/\r\n SnapShotClick = \"SnapShotClick\",\r\n /** Event on emission report snapshot selected from list*/\r\n SnapShotSelected = \"SnapShotSelected\",\r\n /** Event to update widget count */\r\n UpdateWidgetCount = \"UpdateWidgetCount\",\r\n\r\n /** Trends Report: open download format modal (payload: { widgetInstanceId, isChartDownloadVisible, isGridDownloadVisible }) */\r\n TrendsReportDownloadModalOpen = \"TrendsReportDownloadModalOpen\",\r\n\r\n /** Trends Report: execute download for widget (payload: { widgetInstanceId, format }) */\r\n TrendsReportDownloadRequest = \"TrendsReportDownloadRequest\"\r\n}\r\n\r\nexport enum RAEventKey {\r\n /** on edit widget click */\r\n WidgetInstanceId = \"widgetInstanceId\"\r\n}\r\n\r\n","import { CompactType, DisplayGrid, GridsterConfig, GridType } from './../gridster/lib/gridsterConfig.interface';\r\nexport const GridsterConfigDefaultSettings: GridsterConfig = {\r\n gridType: 'scrollVertical',\r\n compactType: 'none',\r\n margin: 10,\r\n outerMargin: true,\r\n outerMarginTop: 10,\r\n outerMarginRight: 0,\r\n outerMarginBottom: 30,\r\n outerMarginLeft: 0,\r\n useTransformPositioning: true,\r\n mobileBreakpoint: 640,\r\n minCols: 10,\r\n maxCols: 10,\r\n minRows: 1,\r\n maxRows: 100,\r\n maxItemCols: 10,\r\n minItemCols: 1,\r\n maxItemRows: 1000,\r\n minItemRows: 1,\r\n maxItemArea: 1000,\r\n minItemArea: 1,\r\n defaultItemCols: 1,\r\n defaultItemRows: 1,\r\n keepFixedHeightInMobile: false,\r\n keepFixedWidthInMobile: false,\r\n scrollSensitivity: 10,\r\n scrollSpeed: 20,\r\n enableEmptyCellClick: false,\r\n enableEmptyCellContextMenu: false,\r\n enableEmptyCellDrop: false,\r\n enableEmptyCellDrag: false,\r\n emptyCellDragMaxCols: 50,\r\n emptyCellDragMaxRows: 50,\r\n ignoreMarginInRow: true,\r\n draggable: {\r\n enabled: true,\r\n dragHandleClass: 'widget-move',\r\n ignoreContent: true\r\n },\r\n resizable: {\r\n enabled: true,\r\n },\r\n swap: true,\r\n pushItems: true,\r\n disablePushOnDrag: false,\r\n disablePushOnResize: false,\r\n pushDirections: { north: true, east: true, south: true, west: true },\r\n pushResizeItems: false,\r\n displayGrid: 'none',\r\n disableWindowResize: false,\r\n disableWarnings: false,\r\n scrollToNewItems: true,\r\n autoResizeonDrag: false,\r\n setGridSize: false\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { GridsterConfig, GridsterItem } from \"../gridster\";\r\nimport { GridsterConfigDefaultSettings } from \"./ra.gridster.config\";\r\nimport { Subject } from \"rxjs\";\r\n\r\ndeclare var window: any;\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class RADashboardResponsiveService {\r\n public resized = new Subject();\r\n public maxColsDesktop: number = 8;\r\n private screenWidthAdjusted: any;\r\n private screenWidth!: number;\r\n private resInfo = [\r\n { id: 1, start: 0, end: 767, minCols: 1, maxCols: 1 },\r\n { id: 2, start: 768, end: 1024, minCols: 1, maxCols: 2 },\r\n { id: 3, start: 1025, end: 1366, minCols: 1, maxCols: 6 },\r\n {\r\n id: 4,\r\n start: 1367,\r\n end: 9999999999,\r\n minCols: 1,\r\n maxCols: this.maxColsDesktop,\r\n },\r\n ];\r\n private currentResInfo: any;\r\n\r\n constructor() {\r\n this.setScreenWidth();\r\n window.addEventListener(\"resize\", () => {\r\n var context = this;\r\n if (this.screenWidthAdjusted) clearTimeout(this.screenWidthAdjusted);\r\n this.screenWidthAdjusted = setTimeout(() => {\r\n context.setScreenWidth();\r\n }, 500);\r\n });\r\n }\r\n\r\n private setScreenWidth() {\r\n this.screenWidth = window.outerWidth;\r\n if (this.IsDesktopView) {\r\n this.currentResInfo = this.resInfo[3];\r\n this.resized.next(true);\r\n } else {\r\n let resInfo = this.resInfo.filter((item) => {\r\n return item.end >= this.screenWidth && item.start <= this.screenWidth;\r\n })[0];\r\n if (!this.currentResInfo || this.currentResInfo.id != resInfo.id) {\r\n this.currentResInfo = resInfo;\r\n this.resized.next(null);\r\n }\r\n }\r\n }\r\n\r\n public get IsDesktopView(): boolean {\r\n let agent = navigator.userAgent || navigator.vendor || window.opera;\r\n if (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\r\n agent\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n agent.substring(0, 4)\r\n )\r\n )\r\n return false;\r\n return true;\r\n }\r\n\r\n public get IsMobile(): boolean {\r\n let check = false;\r\n let agent = navigator.userAgent || navigator.vendor || window.opera;\r\n if (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\r\n agent\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n agent.substring(0, 4)\r\n )\r\n )\r\n check = true;\r\n return check;\r\n }\r\n\r\n public getGridsterConfig(isWidgetMgmnt: boolean, resize: boolean, canMove: boolean): GridsterConfig {\r\n let config: GridsterConfig = GridsterConfigDefaultSettings;\r\n\r\n config.minCols = this.currentResInfo.maxCols;\r\n config.maxCols = this.currentResInfo.maxCols;\r\n config.minRows = this.currentResInfo.minCols;\r\n config.maxItemCols = this.currentResInfo.maxCols;\r\n config.minItemCols = this.currentResInfo.minCols;\r\n config.minItemRows = this.currentResInfo.minCols;\r\n config.minItemArea =\r\n this.currentResInfo.minCols * this.currentResInfo.minCols;\r\n config.defaultItemCols = this.currentResInfo.minCols;\r\n config.defaultItemRows = this.currentResInfo.minCols;\r\n\r\n if (!this.IsDesktopView || !isWidgetMgmnt) {\r\n config.resizable!.enabled = false;\r\n config.swap = false;\r\n config.draggable!.enabled = false;\r\n } else {\r\n config.resizable!.enabled = true;\r\n config.swap = true;\r\n config.draggable!.enabled = true;\r\n }\r\n if (!resize) {\r\n config.resizable!.enabled = false;\r\n config.swap = false;\r\n }\r\n if (!canMove) {\r\n config.draggable!.enabled = false;\r\n }\r\n return config;\r\n }\r\n\r\n /**To map IwidgetInfo object to gridsterItem */\r\n public getGridsterItem(widget: any) {\r\n if (widget.widgetSettings) {\r\n widget.settings = JSON.parse(widget.widgetSettings);\r\n }\r\n if (widget.templateSettings) {\r\n widget.templateWidgetSettings = JSON.parse(widget.templateSettings);\r\n }\r\n let gridsterItem = <GridsterItem>{\r\n cols: this.getWidth(widget.width),\r\n rows: this.getHeight(widget.height),\r\n x: this.IsDesktopView ? widget.position_x : 0,\r\n y: this.IsDesktopView ? widget.position_y : 0,\r\n widgetInfo: widget,\r\n minItemRows: this.getMinItemRows(widget),\r\n minItemCols: this.getMinItemCols(widget),\r\n };\r\n return gridsterItem;\r\n }\r\n\r\n private getWidth(width: number): number {\r\n if (!this.IsDesktopView) {\r\n width = Math.floor(\r\n (width / this.maxColsDesktop) * this.currentResInfo.maxCols\r\n );\r\n if (width < this.currentResInfo.minCols)\r\n width = this.currentResInfo.minCols;\r\n }\r\n return width;\r\n }\r\n private getMinItemRows(widget: any): any {\r\n if (this.IsDesktopView) {\r\n if (widget.settings && widget.settings.minRows) {\r\n return widget.settings.minRows;\r\n }\r\n }\r\n }\r\n private getMinItemCols(widget: any): any {\r\n if (this.IsDesktopView) {\r\n if (widget.settings && widget.settings.minCols) {\r\n return widget.settings.minCols;\r\n }\r\n }\r\n }\r\n private getHeight(height: number) {\r\n if (!this.IsDesktopView) {\r\n height = Math.floor(\r\n (height / this.maxColsDesktop) * this.currentResInfo.maxCols\r\n );\r\n if (height < this.currentResInfo.minCols)\r\n height = this.currentResInfo.minCols;\r\n }\r\n return height;\r\n }\r\n}\r\n","import { GridsterComponentInterface } from './gridster.interface';\r\nimport {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\n\r\nexport type gridTypes =\r\n | 'fit'\r\n | 'scrollVertical'\r\n | 'scrollHorizontal'\r\n | 'fixed'\r\n | 'verticalFixed'\r\n | 'horizontalFixed';\r\nexport type displayGrids = 'always' | 'onDrag&Resize' | 'none';\r\nexport type compactTypes =\r\n | 'none'\r\n | 'compactUp'\r\n | 'compactLeft'\r\n | 'compactUp&Left'\r\n | 'compactLeft&Up'\r\n | 'compactRight'\r\n | 'compactUp&Right'\r\n | 'compactRight&Up'\r\n | 'compactDown'\r\n | 'compactDown&Left'\r\n | 'compactLeft&Down'\r\n | 'compactDown&Right'\r\n | 'compactRight&Down';\r\n\r\nexport enum GridType {\r\n Fit = 'fit',\r\n ScrollVertical = 'scrollVertical',\r\n ScrollHorizontal = 'scrollHorizontal',\r\n Fixed = 'fixed',\r\n VerticalFixed = 'verticalFixed',\r\n HorizontalFixed = 'horizontalFixed'\r\n}\r\n\r\nexport enum DisplayGrid {\r\n Always = 'always',\r\n OnDragAndResize = 'onDrag&Resize',\r\n None = 'none'\r\n}\r\n\r\nexport enum CompactType {\r\n None = 'none',\r\n CompactUp = 'compactUp',\r\n CompactLeft = 'compactLeft',\r\n CompactUpAndLeft = 'compactUp&Left',\r\n CompactLeftAndUp = 'compactLeft&Up',\r\n CompactRight = 'compactRight',\r\n CompactUpAndRight = 'compactUp&Right',\r\n CompactRightAndUp = 'compactRight&Up',\r\n CompactDown = 'compactDown',\r\n CompactDownAndLeft = 'compactDown&Left',\r\n CompactLeftAndDown = 'compactLeft&Down',\r\n CompactDownAndRight = 'compactDown&Right',\r\n CompactRightAndDown = 'compactRight&Down'\r\n}\r\n\r\nexport enum DirTypes {\r\n LTR = 'ltr',\r\n RTL = 'rtl'\r\n}\r\n\r\nexport type dirTypes = 'ltr' | 'rtl';\r\n\r\nexport interface GridsterConfig {\r\n gridType?: gridTypes;\r\n scale?: number;\r\n fixedColWidth?: number;\r\n fixedRowHeight?: number;\r\n keepFixedHeightInMobile?: boolean;\r\n keepFixedWidthInMobile?: boolean;\r\n setGridSize?: boolean;\r\n compactType?: compactTypes;\r\n mobileBreakpoint?: number;\r\n allowMultiLayer?: boolean;\r\n defaultLayerIndex?: number;\r\n maxLayerIndex?: number;\r\n baseLayerIndex?: number;\r\n minCols?: number;\r\n maxCols?: number;\r\n minRows?: number;\r\n maxRows?: number;\r\n defaultItemCols?: number;\r\n defaultItemRows?: number;\r\n maxItemCols?: number;\r\n maxItemRows?: number;\r\n minItemCols?: number;\r\n minItemRows?: number;\r\n minItemArea?: number;\r\n maxItemArea?: number;\r\n addEmptyRowsCount?: number;\r\n rowHeightRatio?: number;\r\n margin?: number;\r\n outerMargin?: boolean;\r\n outerMarginTop?: number | null;\r\n outerMarginRight?: number | null;\r\n outerMarginBottom?: number | null;\r\n outerMarginLeft?: number | null;\r\n useTransformPositioning?: boolean;\r\n scrollSensitivity?: number | null;\r\n scrollSpeed?: number;\r\n initCallback?: (gridster: GridsterComponentInterface) => void;\r\n destroyCallback?: (gridster: GridsterComponentInterface) => void;\r\n gridSizeChangedCallback?: (gridster: GridsterComponentInterface) => void;\r\n itemChangeCallback?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface\r\n ) => void;\r\n itemResizeCallback?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface\r\n ) => void;\r\n itemInitCallback?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface\r\n ) => void;\r\n itemRemovedCallback?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface\r\n ) => void;\r\n itemValidateCallback?: (item: GridsterItem) => boolean;\r\n draggable?: Draggable;\r\n resizable?: Resizable;\r\n swap?: boolean;\r\n swapWhileDragging?: boolean;\r\n pushItems?: boolean;\r\n disablePushOnDrag?: boolean;\r\n disablePushOnResize?: boolean;\r\n disableAutoPositionOnConflict?: boolean;\r\n pushDirections?: PushDirections;\r\n pushResizeItems?: boolean;\r\n displayGrid?: displayGrids;\r\n disableWindowResize?: boolean;\r\n disableWarnings?: boolean;\r\n scrollToNewItems?: boolean;\r\n disableScrollHorizontal?: boolean;\r\n disableScrollVertical?: boolean;\r\n enableBoundaryControl?: boolean;\r\n enableEmptyCellClick?: boolean;\r\n enableEmptyCellContextMenu?: boolean;\r\n enableEmptyCellDrop?: boolean;\r\n enableEmptyCellDrag?: boolean;\r\n enableOccupiedCellDrop?: boolean;\r\n emptyCellClickCallback?: (event: MouseEvent, item: GridsterItem) => void;\r\n emptyCellContextMenuCallback?: (\r\n event: MouseEvent,\r\n item: GridsterItem\r\n ) => void;\r\n emptyCellDropCallback?: (event: DragEvent, item: GridsterItem) => void;\r\n emptyCellDragCallback?: (event: MouseEvent, item: GridsterItem) => void;\r\n emptyCellDragMaxCols?: number;\r\n emptyCellDragMaxRows?: number;\r\n ignoreMarginInRow?: boolean;\r\n dirType?: dirTypes;\r\n api?: {\r\n resize?: () => void;\r\n optionsChanged?: () => void;\r\n getNextPossiblePosition?: (newItem: GridsterItem) => boolean;\r\n getFirstPossiblePosition?: (item: GridsterItem) => GridsterItem;\r\n getLastPossiblePosition?: (item: GridsterItem) => GridsterItem;\r\n getCurrentRowHeight?:()=>number;\r\n getItemComponent?: (\r\n item: GridsterItem\r\n ) => GridsterItemComponentInterface | undefined;\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n [propName: string]: any;\r\n}\r\n\r\nexport interface DragBase {\r\n enabled?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n stop?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface,\r\n event: MouseEvent\r\n ) => Promise<any> | void;\r\n start?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface,\r\n event: MouseEvent\r\n ) => void;\r\n delayStart?: number;\r\n}\r\n\r\nexport interface Draggable extends DragBase {\r\n ignoreContentClass?: string;\r\n ignoreContent?: boolean;\r\n dragHandleClass?: string;\r\n dropOverItems?: boolean;\r\n dropOverItemsCallback?: (\r\n source: GridsterItem,\r\n target: GridsterItem,\r\n grid?: GridsterComponentInterface\r\n ) => void;\r\n}\r\n\r\nexport interface Resizable extends DragBase {\r\n handles?: {\r\n s: boolean;\r\n e: boolean;\r\n n: boolean;\r\n w: boolean;\r\n se: boolean;\r\n ne: boolean;\r\n sw: boolean;\r\n nw: boolean;\r\n };\r\n}\r\n\r\nexport interface PushDirections {\r\n north: boolean;\r\n east: boolean;\r\n south: boolean;\r\n west: boolean;\r\n}\r\n","import { GridsterComponentInterface } from './gridster.interface';\r\nimport {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\nimport { CompactType } from './gridsterConfig.interface';\r\n\r\nexport class GridsterCompact {\r\n constructor(private gridster: GridsterComponentInterface) {}\r\n\r\n destroy(): void {\r\n this.gridster = null!;\r\n }\r\n\r\n checkCompact(): void {\r\n if (this.gridster.$options.compactType !== CompactType.None) {\r\n if (this.gridster.$options.compactType === CompactType.CompactUp) {\r\n this.checkCompactMovement('y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeft\r\n ) {\r\n this.checkCompactMovement('x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactUpAndLeft\r\n ) {\r\n this.checkCompactMovement('y', -1);\r\n this.checkCompactMovement('x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeftAndUp\r\n ) {\r\n this.checkCompactMovement('x', -1);\r\n this.checkCompactMovement('y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactRight\r\n ) {\r\n this.checkCompactMovement('x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactUpAndRight\r\n ) {\r\n this.checkCompactMovement('y', -1);\r\n this.checkCompactMovement('x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactRightAndUp\r\n ) {\r\n this.checkCompactMovement('x', 1);\r\n this.checkCompactMovement('y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDown\r\n ) {\r\n this.checkCompactMovement('y', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDownAndLeft\r\n ) {\r\n this.checkCompactMovement('y', 1);\r\n this.checkCompactMovement('x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDownAndRight\r\n ) {\r\n this.checkCompactMovement('y', 1);\r\n this.checkCompactMovement('x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeftAndDown\r\n ) {\r\n this.checkCompactMovement('x', -1);\r\n this.checkCompactMovement('y', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactRightAndDown\r\n ) {\r\n this.checkCompactMovement('x', 1);\r\n this.checkCompactMovement('y', 1);\r\n }\r\n }\r\n }\r\n\r\n checkCompactItem(item: GridsterItem): void {\r\n if (this.gridster.$options.compactType !== CompactType.None) {\r\n if (this.gridster.$options.compactType === CompactType.CompactUp) {\r\n this.moveTillCollision(item, 'y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeft\r\n ) {\r\n this.moveTillCollision(item, 'x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactUpAndLeft\r\n ) {\r\n this.moveTillCollision(item, 'y', -1);\r\n this.moveTillCollision(item, 'x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeftAndUp\r\n ) {\r\n this.moveTillCollision(item, 'x', -1);\r\n this.moveTillCollision(item, 'y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactUpAndRight\r\n ) {\r\n this.moveTillCollision(item, 'y', -1);\r\n this.moveTillCollision(item, 'x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDown\r\n ) {\r\n this.moveTillCollision(item, 'y', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDownAndLeft\r\n ) {\r\n this.moveTillCollision(item, 'y', 1);\r\n this.moveTillCollision(item, 'x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeftAndDown\r\n ) {\r\n this.moveTillCollision(item, 'x', -1);\r\n this.moveTillCollision(item, 'y', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDownAndRight\r\n ) {\r\n this.moveTillCollision(item, 'y', 1);\r\n this.moveTillCollision(item, 'x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactRightAndDown\r\n ) {\r\n this.moveTillCollision(item, 'x', 1);\r\n this.moveTillCollision(item, 'y', 1);\r\n }\r\n }\r\n }\r\n\r\n private checkCompactMovement(direction: 'x' | 'y', delta: number): void {\r\n let widgetMoved = false;\r\n this.gridster.grid.forEach((widget: GridsterItemComponentInterface) => {\r\n if (widget.$item.compactEnabled !== false) {\r\n const moved = this.moveTillCollision(widget.$item, direction, delta);\r\n if (moved) {\r\n widgetMoved = true;\r\n widget.item[direction] = widget.$item[direction];\r\n widget.itemChanged();\r\n }\r\n }\r\n });\r\n if (widgetMoved) {\r\n this.checkCompact();\r\n }\r\n }\r\n\r\n private moveTillCollision(\r\n item: GridsterItem,\r\n direction: 'x' | 'y',\r\n delta: number\r\n ): boolean {\r\n item[direction] += delta;\r\n if (this.gridster.checkCollision(item)) {\r\n item[direction] -= delta;\r\n return false;\r\n } else {\r\n this.moveTillCollision(item, direction, delta);\r\n return true;\r\n }\r\n }\r\n}\r\n","import {\r\n CompactType,\r\n DirTypes,\r\n DisplayGrid,\r\n GridsterConfig,\r\n GridType\r\n} from './gridsterConfig.interface';\r\n\r\nexport const GridsterConfigService: GridsterConfig = {\r\n gridType: GridType.Fit, // 'fit' will fit the items in the container without scroll;\r\n scale: 1, // scale param to zoom in/zoom out\r\n // 'scrollVertical' will fit on width and height of the items will be the same as the width\r\n // 'scrollHorizontal' will fit on height and width of the items will be the same as the height\r\n // 'fixed' will set the rows and columns dimensions based on fixedColWidth and fixedRowHeight options\r\n // 'verticalFixed' will set the rows to fixedRowHeight and columns width will fit the space available\r\n // 'horizontalFixed' will set the columns to fixedColWidth and rows height will fit the space available\r\n fixedColWidth: 250, // fixed col width for gridType: 'fixed'\r\n fixedRowHeight: 250, // fixed row height for gridType: 'fixed'\r\n keepFixedHeightInMobile: false, // keep the height from fixed gridType in mobile layout\r\n keepFixedWidthInMobile: false, // keep the width from fixed gridType in mobile layout\r\n setGridSize: false, // sets grid size depending on content\r\n compactType: CompactType.None, // compact items: 'none' | 'compactUp' | 'compactLeft' | 'compactUp&Left' | 'compactLeft&Up'\r\n mobileBreakpoint: 640, // if the screen is not wider that this, remove the grid layout and stack the items\r\n useBodyForBreakpoint: false, // whether to use the body width to determine the mobile breakpoint. Uses the element width when false.\r\n allowMultiLayer: false,\r\n defaultLayerIndex: 0,\r\n maxLayerIndex: 2,\r\n baseLayerIndex: 1,\r\n minCols: 1, // minimum amount of columns in the grid\r\n maxCols: 100, // maximum amount of columns in the grid\r\n minRows: 1, // minimum amount of rows in the grid\r\n maxRows: 100, // maximum amount of rows in the grid\r\n defaultItemCols: 1, // default width of an item in columns\r\n defaultItemRows: 1, // default height of an item in rows\r\n maxItemCols: 50, // max item number of cols\r\n maxItemRows: 50, // max item number of rows\r\n minItemCols: 1, // min item number of columns\r\n minItemRows: 1, // min item number of rows\r\n minItemArea: 1, // min item area: cols * rows\r\n maxItemArea: 2500, // max item area: cols * rows\r\n addEmptyRowsCount: 0, // add a number of extra empty rows at the end\r\n rowHeightRatio: 1, // row height ratio from column width\r\n margin: 10, // margin between grid items\r\n outerMargin: true, // if margins will apply to the sides of the container\r\n outerMarginTop: null, // override outer margin for grid\r\n outerMarginRight: null, // override outer margin for grid\r\n outerMarginBottom: null, // override outer margin for grid\r\n outerMarginLeft: null, // override outer margin for grid\r\n useTransformPositioning: true, // toggle between transform or top/left positioning of items\r\n scrollSensitivity: 10, // margin of the dashboard where to start scrolling\r\n scrollSpeed: 20, // how much to scroll each mouse move when in the scrollSensitivity zone\r\n initCallback: undefined, // callback to call after grid has initialized. Arguments: gridsterComponent\r\n destroyCallback: undefined, // callback to call after grid has destroyed. Arguments: gridsterComponent\r\n gridSizeChangedCallback: undefined, // callback to call after grid has changed size. Arguments: gridsterComponent\r\n itemChangeCallback: undefined, // callback to call for each item when is changes x, y, rows, cols.\r\n // Arguments: gridsterItem, gridsterItemComponent\r\n itemResizeCallback: undefined, // callback to call for each item when width/height changes.\r\n // Arguments: gridsterItem, gridsterItemComponent\r\n itemInitCallback: undefined, // callback to call for each item when is initialized.\r\n // Arguments: gridsterItem, gridsterItemComponent\r\n itemRemovedCallback: undefined, // callback to call for each item when is initialized.\r\n // Arguments: gridsterItem, gridsterItemComponent\r\n itemValidateCallback: undefined, // callback to call to validate item position/size. Return true if valid.\r\n // Arguments: gridsterItem\r\n enableEmptyCellClick: false, // enable empty cell click events\r\n enableEmptyCellContextMenu: false, // enable empty cell context menu (right click) events\r\n enableEmptyCellDrop: false, // enable empty cell drop events\r\n enableEmptyCellDrag: false, // enable empty cell drag events\r\n enableOccupiedCellDrop: false, // enable occupied cell drop events\r\n emptyCellClickCallback: undefined, // empty cell click callback\r\n emptyCellContextMenuCallback: undefined, // empty cell context menu (right click) callback\r\n emptyCellDropCallback: undefined, // empty cell drag drop callback. HTML5 Drag & Drop\r\n emptyCellDragCallback: undefined, // empty cell drag and create item like excel cell selection\r\n emptyCellDragMaxCols: 50, // limit empty cell drag max cols\r\n emptyCellDragMaxRows: 50, // limit empty cell drag max rows\r\n // Arguments: event, gridsterItem{x, y, rows: defaultItemRows, cols: defaultItemCols}\r\n ignoreMarginInRow: false, // ignore the gap between rows for items which span multiple rows (see #162, #224)\r\n draggable: {\r\n delayStart: 0, // milliseconds to delay the start of drag, useful for touch interaction\r\n enabled: false, // enable/disable draggable items\r\n ignoreContentClass: 'gridster-item-content', // default content class to ignore the drag event from\r\n ignoreContent: false, // if true drag will start only from elements from `dragHandleClass`\r\n dragHandleClass: 'drag-handler', // drag event only from this class. If `ignoreContent` is true.\r\n stop: undefined, // callback when dragging an item stops. Accepts Promise return to cancel/approve drag.\r\n start: undefined, // callback when dragging an item starts.\r\n // Arguments: item, gridsterItem, event\r\n dropOverItems: false, // enable drop items on top other item\r\n dropOverItemsCallback: undefined // callback on drop over another item\r\n // Arguments: source, target, gridComponent\r\n },\r\n resizable: {\r\n delayStart: 0, // milliseconds to delay the start of resize, useful for touch interaction\r\n enabled: false, // enable/disable resizable items\r\n handles: {\r\n s: true,\r\n e: true,\r\n n: true,\r\n w: true,\r\n se: true,\r\n ne: true,\r\n sw: true,\r\n nw: true\r\n }, // resizable edges of an item\r\n stop: undefined, // callback when resizing an item stops. Accepts Promise return to cancel/approve resize.\r\n start: undefined // callback when resizing an item starts.\r\n // Arguments: item, gridsterItem, event\r\n },\r\n swap: true, // allow items to switch position if drop on top of another\r\n swapWhileDragging: false, // allow items to switch position while dragging\r\n pushItems: false, // push items when resizing and dragging\r\n disablePushOnDrag: false, // disable push on drag\r\n disablePushOnResize: false, // disable push on resize\r\n pushDirections: { north: true, east: true, south: true, west: true }, // control the directions items are pushed\r\n pushResizeItems: false, // on resize of item will shrink adjacent items\r\n displayGrid: DisplayGrid.OnDragAndResize, // display background grid of rows and columns\r\n disableWindowResize: false, // disable the window on resize listener. This will stop grid to recalculate on window resize.\r\n disableWarnings: false, // disable console log warnings about misplacement of grid items\r\n scrollToNewItems: false, // scroll to new items placed in a scrollable view\r\n disableScrollHorizontal: false, // disable horizontal scrolling\r\n disableScrollVertical: false, // disable vertical scrolling\r\n enableBoundaryControl: false, // enable boundary control while dragging items\r\n disableAutoPositionOnConflict: false, // disable auto-position of items on conflict state,\r\n dirType: DirTypes.LTR // page direction, rtl=right to left ltr= left to right, if you use rtl language set dirType to rtl\r\n};\r\n","import { GridsterComponentInterface } from './gridster.interface';\r\n\r\nexport class GridsterUtils {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static merge(obj1: any, obj2: any, properties: any): any {\r\n for (const p in obj2) {\r\n if (obj2[p] !== void 0 && properties.hasOwnProperty(p)) {\r\n if (typeof obj2[p] === 'object') {\r\n // create an empty object for the property if obj1 does not already have one.\r\n if (!(p in obj1)) {\r\n obj1[p] = {};\r\n }\r\n obj1[p] = GridsterUtils.merge(obj1[p], obj2[p], properties[p]);\r\n } else {\r\n obj1[p] = obj2[p];\r\n }\r\n }\r\n }\r\n\r\n return obj1;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static checkTouchEvent(e: any): void {\r\n if (e.clientX === undefined && e.touches) {\r\n if (e.touches && e.touches.length) {\r\n e.clientX = e.touches[0].clientX;\r\n e.clientY = e.touches[0].clientY;\r\n } else if (e.changedTouches && e.changedTouches.length) {\r\n e.clientX = e.changedTouches[0].clientX;\r\n e.clientY = e.changedTouches[0].clientY;\r\n }\r\n }\r\n }\r\n\r\n static checkContentClassForEvent(\r\n gridster: GridsterComponentInterface,\r\n e: MouseEvent\r\n ): boolean {\r\n if (gridster.$options.draggable.ignoreContent) {\r\n if (\r\n !GridsterUtils.checkDragHandleClass(\r\n e.target as HTMLElement,\r\n e.currentTarget as HTMLElement,\r\n gridster.$options.draggable.dragHandleClass,\r\n gridster.$options.draggable.ignoreContentClass\r\n )\r\n ) {\r\n return true;\r\n }\r\n } else {\r\n if (\r\n GridsterUtils.checkContentClass(\r\n e.target as HTMLElement,\r\n e.currentTarget as HTMLElement,\r\n gridster.$options.draggable.ignoreContentClass\r\n )\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static checkContentClassForEmptyCellClickEvent(\r\n gridster: GridsterComponentInterface,\r\n e: MouseEvent\r\n ): boolean {\r\n return (\r\n GridsterUtils.checkContentClass(\r\n e.target as HTMLElement,\r\n e.currentTarget as HTMLElement,\r\n gridster.$options.draggable.ignoreContentClass\r\n ) ||\r\n GridsterUtils.checkContentClass(\r\n e.target as HTMLElement,\r\n e.currentTarget as HTMLElement,\r\n gridster.$options.draggable.dragHandleClass\r\n )\r\n );\r\n }\r\n\r\n static checkDragHandleClass(\r\n target: HTMLElement,\r\n current: HTMLElement,\r\n dragHandleClass: string,\r\n ignoreContentClass: any\r\n ): boolean {\r\n if (!target || target === current) {\r\n return false;\r\n }\r\n if (target.hasAttribute('class')) {\r\n const classnames = target.getAttribute('class')!.split(' ');\r\n if (classnames.indexOf(dragHandleClass) > -1) {\r\n return true;\r\n }\r\n if (classnames.indexOf(ignoreContentClass) > -1) {\r\n return false;\r\n }\r\n }\r\n return GridsterUtils.checkDragHandleClass(\r\n target.parentNode as HTMLElement,\r\n current,\r\n dragHandleClass,\r\n ignoreContentClass\r\n );\r\n }\r\n\r\n static checkContentClass(\r\n target: HTMLElement,\r\n current: HTMLElement,\r\n contentClass: string\r\n ): boolean {\r\n if (!target || target === current) {\r\n return false;\r\n }\r\n if (\r\n target.hasAttribute('class') &&\r\n target.getAttribute('class')!.split(' ').indexOf(contentClass) > -1\r\n ) {\r\n return true;\r\n } else {\r\n return GridsterUtils.checkContentClass(\r\n target.parentNode as HTMLElement,\r\n current,\r\n contentClass\r\n );\r\n }\r\n }\r\n\r\n static compareItems(\r\n a: { x: number; y: number },\r\n b: { x: number; y: number }\r\n ): number {\r\n if (a.y > b.y) {\r\n return -1;\r\n } else if (a.y < b.y) {\r\n return 1;\r\n } else if (a.x > b.x) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n }\r\n}\r\n","import { GridsterUtils } from './gridsterUtils.service';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { GridsterItem } from './gridsterItem.interface';\r\n\r\nexport class GridsterEmptyCell {\r\n initialItem!: GridsterItem | null;\r\n removeEmptyCellClickListenerFn!: (() => void) | null;\r\n removeEmptyCellTouchendListenerFn!: (() => void) | null;\r\n removeEmptyCellContextMenuListenerFn!: (() => void) | null;\r\n removeEmptyCellDropListenerFn!: (() => void) | null;\r\n removeEmptyCellMousedownListenerFn!: (() => void) | null;\r\n removeEmptyCellTouchstartListenerFn!: (() => void) | null;\r\n removeWindowMousemoveListenerFn!: () => void;\r\n removeWindowTouchmoveListenerFn!: () => void;\r\n removeWindowMouseupListenerFn!: () => void;\r\n removeWindowTouchendListenerFn!: () => void;\r\n removeEmptyCellDragoverListenerFn!: (() => void) | null;\r\n removeDocumentDragendListenerFn!: (() => void) | null;\r\n\r\n constructor(private gridster: GridsterComponentInterface) {}\r\n\r\n destroy(): void {\r\n if (this.gridster.previewStyle) {\r\n this.gridster.previewStyle();\r\n }\r\n this.gridster.movingItem = null;\r\n this.initialItem = this.gridster = null!;\r\n if (this.removeDocumentDragendListenerFn) {\r\n this.removeDocumentDragendListenerFn();\r\n this.removeDocumentDragendListenerFn = null;\r\n }\r\n }\r\n\r\n updateOptions(): void {\r\n if (\r\n this.gridster.$options.enableEmptyCellClick &&\r\n !this.removeEmptyCellClickListenerFn &&\r\n this.gridster.options.emptyCellClickCallback\r\n ) {\r\n this.removeEmptyCellClickListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'click',\r\n this.emptyCellClickCb\r\n );\r\n this.removeEmptyCellTouchendListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'touchend',\r\n this.emptyCellClickCb\r\n );\r\n } else if (\r\n !this.gridster.$options.enableEmptyCellClick &&\r\n this.removeEmptyCellClickListenerFn &&\r\n this.removeEmptyCellTouchendListenerFn\r\n ) {\r\n this.removeEmptyCellClickListenerFn();\r\n this.removeEmptyCellTouchendListenerFn();\r\n this.removeEmptyCellClickListenerFn = null;\r\n this.removeEmptyCellTouchendListenerFn = null;\r\n }\r\n if (\r\n this.gridster.$options.enableEmptyCellContextMenu &&\r\n !this.removeEmptyCellContextMenuListenerFn &&\r\n this.gridster.options.emptyCellContextMenuCallback\r\n ) {\r\n this.removeEmptyCellContextMenuListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'contextmenu',\r\n this.emptyCellContextMenuCb\r\n );\r\n } else if (\r\n !this.gridster.$options.enableEmptyCellContextMenu &&\r\n this.removeEmptyCellContextMenuListenerFn\r\n ) {\r\n this.removeEmptyCellContextMenuListenerFn();\r\n this.removeEmptyCellContextMenuListenerFn = null;\r\n }\r\n if (\r\n this.gridster.$options.enableEmptyCellDrop &&\r\n !this.removeEmptyCellDropListenerFn &&\r\n this.gridster.options.emptyCellDropCallback\r\n ) {\r\n this.removeEmptyCellDropListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'drop',\r\n this.emptyCellDragDrop\r\n );\r\n this.gridster.zone.runOutsideAngular(() => {\r\n this.removeEmptyCellDragoverListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'dragover',\r\n this.emptyCellDragOver\r\n );\r\n });\r\n this.removeDocumentDragendListenerFn = this.gridster.renderer.listen(\r\n 'document',\r\n 'dragend',\r\n () => {\r\n this.gridster.movingItem = null;\r\n this.gridster.previewStyle();\r\n }\r\n );\r\n } else if (\r\n !this.gridster.$options.enableEmptyCellDrop &&\r\n this.removeEmptyCellDropListenerFn &&\r\n this.removeEmptyCellDragoverListenerFn &&\r\n this.removeDocumentDragendListenerFn\r\n ) {\r\n this.removeEmptyCellDropListenerFn();\r\n this.removeEmptyCellDragoverListenerFn();\r\n this.removeDocumentDragendListenerFn();\r\n this.removeEmptyCellDragoverListenerFn = null;\r\n this.removeEmptyCellDropListenerFn = null;\r\n this.removeDocumentDragendListenerFn = null;\r\n }\r\n if (\r\n this.gridster.$options.enableEmptyCellDrag &&\r\n !this.removeEmptyCellMousedownListenerFn &&\r\n this.gridster.options.emptyCellDragCallback\r\n ) {\r\n this.removeEmptyCellMousedownListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'mousedown',\r\n this.emptyCellMouseDown\r\n );\r\n this.removeEmptyCellTouchstartListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'touchstart',\r\n this.emptyCellMouseDown\r\n );\r\n } else if (\r\n !this.gridster.$options.enableEmptyCellDrag &&\r\n this.removeEmptyCellMousedownListenerFn &&\r\n this.removeEmptyCellTouchstartListenerFn\r\n ) {\r\n this.removeEmptyCellMousedownListenerFn();\r\n this.removeEmptyCellTouchstartListenerFn();\r\n this.removeEmptyCellMousedownListenerFn = null;\r\n this.removeEmptyCellTouchstartListenerFn = null;\r\n }\r\n }\r\n\r\n emptyCellClickCb = (e: MouseEvent): void => {\r\n if (\r\n !this.gridster ||\r\n this.gridster.movingItem ||\r\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\r\n ) {\r\n return;\r\n }\r\n const item = this.getValidItemFromEvent(e);\r\n if (!item) {\r\n return;\r\n }\r\n if (this.gridster.options.emptyCellClickCallback) {\r\n this.gridster.options.emptyCellClickCallback(e, item);\r\n }\r\n this.gridster.cdRef.markForCheck();\r\n };\r\n\r\n emptyCellContextMenuCb = (e: MouseEvent): void => {\r\n if (\r\n this.gridster.movingItem ||\r\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\r\n ) {\r\n return;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const item = this.getValidItemFromEvent(e);\r\n if (!item) {\r\n return;\r\n }\r\n if (this.gridster.options.emptyCellContextMenuCallback) {\r\n this.gridster.options.emptyCellContextMenuCallback(e, item);\r\n }\r\n this.gridster.cdRef.markForCheck();\r\n };\r\n\r\n emptyCellDragDrop = (e: DragEvent): void => {\r\n const item = this.getValidItemFromEvent(e);\r\n if (!item) {\r\n return;\r\n }\r\n if (this.gridster.options.emptyCellDropCallback) {\r\n this.gridster.options.emptyCellDropCallback(e, item);\r\n }\r\n this.gridster.cdRef.markForCheck();\r\n };\r\n\r\n emptyCellDragOver = (e: DragEvent): void => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const item = this.getValidItemFromEvent(e);\r\n if (item) {\r\n if (e.dataTransfer) {\r\n e.dataTransfer.dropEffect = 'move';\r\n }\r\n this.gridster.movingItem = item;\r\n } else {\r\n if (e.dataTransfer) {\r\n e.dataTransfer.dropEffect = 'none';\r\n }\r\n this.gridster.movingItem = null;\r\n }\r\n this.gridster.previewStyle();\r\n };\r\n\r\n emptyCellMouseDown = (e: MouseEvent): void => {\r\n if (\r\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\r\n ) {\r\n return;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const item = this.getValidItemFromEvent(e);\r\n const leftMouseButtonCode = 1;\r\n if (\r\n !item ||\r\n (e.buttons !== leftMouseButtonCode && !(e instanceof TouchEvent))\r\n ) {\r\n return;\r\n }\r\n this.initialItem = item;\r\n this.gridster.movingItem = item;\r\n this.gridster.previewStyle();\r\n this.gridster.zone.runOutsideAngular(() => {\r\n this.removeWindowMousemoveListenerFn = this.gridster.renderer.listen(\r\n 'window',\r\n 'mousemove',\r\n this.emptyCellMouseMove\r\n );\r\n this.removeWindowTouchmoveListenerFn = this.gridster.renderer.listen(\r\n 'window',\r\n 'touchmove',\r\n this.emptyCellMouseMove\r\n );\r\n });\r\n this.removeWindowMouseupListenerFn = this.gridster.renderer.listen(\r\n 'window',\r\n 'mouseup',\r\n this.emptyCellMouseUp\r\n );\r\n this.removeWindowTouchendListenerFn = this.gridster.renderer.listen(\r\n 'window',\r\n 'touchend',\r\n this.emptyCellMouseUp\r\n );\r\n };\r\n\r\n emptyCellMouseMove = (e: MouseEvent): void => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const item = this.getValidItemFromEvent(e, this.initialItem);\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.gridster.movingItem = item;\r\n this.gridster.previewStyle();\r\n };\r\n\r\n emptyCellMouseUp = (e: MouseEvent): void => {\r\n this.removeWindowMousemoveListenerFn();\r\n this.removeWindowTouchmoveListenerFn();\r\n this.removeWindowMouseupListenerFn();\r\n this.removeWindowTouchendListenerFn();\r\n const item = this.getValidItemFromEvent(e, this.initialItem);\r\n if (item) {\r\n this.gridster.movingItem = item;\r\n }\r\n if (\r\n this.gridster.options.emptyCellDragCallback &&\r\n this.gridster.movingItem\r\n ) {\r\n this.gridster.options.emptyCellDragCallback(e, this.gridster.movingItem);\r\n }\r\n setTimeout(() => {\r\n this.initialItem = null;\r\n if (this.gridster) {\r\n this.gridster.movingItem = null;\r\n this.gridster.previewStyle();\r\n }\r\n });\r\n this.gridster.cdRef.markForCheck();\r\n };\r\n\r\n getPixelsX(e: MouseEvent, rect: ClientRect): number {\r\n const scale = this.gridster.options.scale;\r\n if (scale) {\r\n return (\r\n (e.clientX - rect.left) / scale +\r\n this.gridster.el.scrollLeft -\r\n this.gridster.gridRenderer.getLeftMargin()\r\n );\r\n }\r\n return (\r\n e.clientX +\r\n this.gridster.el.scrollLeft -\r\n rect.left -\r\n this.gridster.gridRenderer.getLeftMargin()\r\n );\r\n }\r\n\r\n getPixelsY(e: MouseEvent, rect: ClientRect): number {\r\n const scale = this.gridster.options.scale;\r\n if (scale) {\r\n return (\r\n (e.clientY - rect.top) / scale +\r\n this.gridster.el.scrollTop -\r\n this.gridster.gridRenderer.getTopMargin()\r\n );\r\n }\r\n return (\r\n e.clientY +\r\n this.gridster.el.scrollTop -\r\n rect.top -\r\n this.gridster.gridRenderer.getTopMargin()\r\n );\r\n }\r\n\r\n getValidItemFromEvent(\r\n e: MouseEvent,\r\n oldItem?: GridsterItem | null\r\n ): GridsterItem | undefined {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n GridsterUtils.checkTouchEvent(e);\r\n const rect = this.gridster.el.getBoundingClientRect();\r\n const x = this.getPixelsX(e, rect);\r\n const y = this.getPixelsY(e, rect);\r\n const item: GridsterItem = {\r\n x: this.gridster.pixelsToPositionX(x, Math.floor, true),\r\n y: this.gridster.pixelsToPositionY(y, Math.floor, true),\r\n cols: this.gridster.$options.defaultItemCols,\r\n rows: this.gridster.$options.defaultItemRows\r\n };\r\n if (oldItem) {\r\n item.cols = Math.min(\r\n Math.abs(oldItem.x - item.x) + 1,\r\n this.gridster.$options.emptyCellDragMaxCols\r\n );\r\n item.rows = Math.min(\r\n Math.abs(oldItem.y - item.y) + 1,\r\n this.gridster.$options.emptyCellDragMaxRows\r\n );\r\n if (oldItem.x < item.x) {\r\n item.x = oldItem.x;\r\n } else if (\r\n oldItem.x - item.x >\r\n this.gridster.$options.emptyCellDragMaxCols - 1\r\n ) {\r\n item.x = this.gridster.movingItem ? this.gridster.movingItem.x : 0;\r\n }\r\n if (oldItem.y < item.y) {\r\n item.y = oldItem.y;\r\n } else if (\r\n oldItem.y - item.y >\r\n this.gridster.$options.emptyCellDragMaxRows - 1\r\n ) {\r\n item.y = this.gridster.movingItem ? this.gridster.movingItem.y : 0;\r\n }\r\n }\r\n if (\r\n !this.gridster.$options.enableOccupiedCellDrop &&\r\n this.gridster.checkCollision(item)\r\n ) {\r\n return;\r\n }\r\n return item;\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { GridsterItem } from './gridsterItem.interface';\r\nimport { GridsterRenderer } from './gridsterRenderer.service';\r\n\r\n@Component({\r\n selector: 'gridster-preview',\r\n template: '',\r\n styleUrls: ['./gridsterPreview.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true\r\n})\r\nexport class GridsterPreviewComponent implements OnInit, OnDestroy {\r\n @Input() previewStyle$!: EventEmitter<GridsterItem | null>;\r\n @Input() gridRenderer!: GridsterRenderer;\r\n private el: HTMLElement;\r\n private sub!: Subscription;\r\n\r\n constructor(el: ElementRef, private renderer: Renderer2) {\r\n this.el = el.nativeElement;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.sub = this.previewStyle$.subscribe(options =>\r\n this.previewStyle(options)\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if(this.sub) {\r\n this.sub.unsubscribe();\r\n }\r\n }\r\n\r\n private previewStyle(item: GridsterItem | null): void {\r\n if (item) {\r\n this.renderer.setStyle(this.el, 'display', 'block');\r\n this.gridRenderer.updateItem(this.el, item, this.renderer);\r\n } else {\r\n this.renderer.setStyle(this.el, 'display', '');\r\n }\r\n }\r\n}\r\n","import { Injectable, Renderer2 } from '@angular/core';\r\n\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { DirTypes, GridType } from './gridsterConfig.interface';\r\nimport { GridsterItem } from './gridsterItem.interface';\r\nimport {\r\n CommonGridStyle,\r\n GridColumnCachedStyle,\r\n GridRowCachedStyle\r\n} from './gridsterRenderer.interface';\r\n\r\nexport class GridsterRenderer {\r\n /**\r\n * Caches the last grid column styles.\r\n * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.\r\n */\r\n private lastGridColumnStyles: Record<number, GridColumnCachedStyle> = {};\r\n\r\n /**\r\n * Caches the last grid column styles.\r\n * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.\r\n */\r\n private lastGridRowStyles: Record<number, GridRowCachedStyle> = {};\r\n\r\n constructor(private gridster: GridsterComponentInterface) {}\r\n\r\n destroy(): void {\r\n this.gridster = null!;\r\n }\r\n\r\n updateItem(el: Element, item: GridsterItem, renderer: Renderer2): void {\r\n if (this.gridster.mobile) {\r\n this.clearCellPosition(renderer, el);\r\n if (this.gridster.$options.keepFixedHeightInMobile) {\r\n renderer.setStyle(\r\n el,\r\n 'height',\r\n (item.rows - 1) * this.gridster.$options.margin +\r\n item.rows * this.gridster.$options.fixedRowHeight +\r\n 'px'\r\n );\r\n } else {\r\n renderer.setStyle(\r\n el,\r\n 'height',\r\n (item.rows * this.gridster.curWidth) / item.cols + 'px'\r\n );\r\n }\r\n if (this.gridster.$options.keepFixedWidthInMobile) {\r\n renderer.setStyle(\r\n el,\r\n 'width',\r\n this.gridster.$options.fixedColWidth + 'px'\r\n );\r\n } else {\r\n renderer.setStyle(el, 'width', '');\r\n }\r\n\r\n renderer.setStyle(\r\n el,\r\n 'margin-bottom',\r\n this.gridster.$options.margin + 'px'\r\n );\r\n renderer.setStyle(el, DirTypes.LTR ? 'margin-right' : 'margin-left', '');\r\n } else {\r\n const x = Math.round(this.gridster.curColWidth * item.x);\r\n const y = Math.round(this.gridster.curRowHeight * item.y);\r\n const width =\r\n this.gridster.curColWidth * item.cols - this.gridster.$options.margin - 1; // added -1 to avoid the right side of widgets not showing borders\r\n const height =\r\n this.gridster.curRowHeight * item.rows - this.gridster.$options.margin;\r\n // set the cell style\r\n this.setCellPosition(renderer, el, x, y);\r\n renderer.setStyle(el, 'width', width + 'px');\r\n renderer.setStyle(el, 'height', height + 'px');\r\n let marginBottom: string | null = null;\r\n let marginRight: string | null = null;\r\n if (this.gridster.$options.outerMargin) {\r\n if (this.gridster.rows === item.rows + item.y) {\r\n if (this.gridster.$options.outerMarginBottom !== null) {\r\n marginBottom = this.gridster.$options.outerMarginBottom + 'px';\r\n } else {\r\n marginBottom = this.gridster.$options.margin + 'px';\r\n }\r\n }\r\n if (this.gridster.columns === item.cols + item.x) {\r\n if (this.gridster.$options.outerMarginBottom !== null) {\r\n marginRight = this.gridster.$options.outerMarginRight + 'px';\r\n } else {\r\n marginRight = this.gridster.$options.margin + 'px';\r\n }\r\n }\r\n }\r\n\r\n renderer.setStyle(el, 'margin-bottom', marginBottom);\r\n renderer.setStyle(\r\n el,\r\n DirTypes.LTR ? 'margin-right' : 'margin-left',\r\n marginRight\r\n );\r\n }\r\n }\r\n\r\n updateGridster(): void {\r\n let addClass = '';\r\n let removeClass1 = '';\r\n let removeClass2 = '';\r\n let removeClass3 = '';\r\n if (this.gridster.$options.gridType === GridType.Fit) {\r\n addClass = GridType.Fit;\r\n removeClass1 = GridType.ScrollVertical;\r\n removeClass2 = GridType.ScrollHorizontal;\r\n removeClass3 = GridType.Fixed;\r\n } else if (this.gridster.$options.gridType === GridType.ScrollVertical) {\r\n this.gridster.curRowHeight =\r\n this.gridster.curColWidth * this.gridster.$options.rowHeightRatio;\r\n addClass = GridType.ScrollVertical;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollHorizontal;\r\n removeClass3 = GridType.Fixed;\r\n } else if (this.gridster.$options.gridType === GridType.ScrollHorizontal) {\r\n const widthRatio = this.gridster.$options.rowHeightRatio;\r\n const calWidthRatio = widthRatio >= 1 ? widthRatio : widthRatio + 1;\r\n this.gridster.curColWidth = this.gridster.curRowHeight * calWidthRatio;\r\n addClass = GridType.ScrollHorizontal;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollVertical;\r\n removeClass3 = GridType.Fixed;\r\n } else if (this.gridster.$options.gridType === GridType.Fixed) {\r\n this.gridster.curColWidth =\r\n this.gridster.$options.fixedColWidth +\r\n (this.gridster.$options.ignoreMarginInRow\r\n ? 0\r\n : this.gridster.$options.margin);\r\n this.gridster.curRowHeight =\r\n this.gridster.$options.fixedRowHeight +\r\n (this.gridster.$options.ignoreMarginInRow\r\n ? 0\r\n : this.gridster.$options.margin);\r\n addClass = GridType.Fixed;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollVertical;\r\n removeClass3 = GridType.ScrollHorizontal;\r\n } else if (this.gridster.$options.gridType === GridType.VerticalFixed) {\r\n this.gridster.curRowHeight =\r\n this.gridster.$options.fixedRowHeight +\r\n (this.gridster.$options.ignoreMarginInRow\r\n ? 0\r\n : this.gridster.$options.margin);\r\n addClass = GridType.ScrollVertical;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollHorizontal;\r\n removeClass3 = GridType.Fixed;\r\n } else if (this.gridster.$options.gridType === GridType.HorizontalFixed) {\r\n this.gridster.curColWidth =\r\n this.gridster.$options.fixedColWidth +\r\n (this.gridster.$options.ignoreMarginInRow\r\n ? 0\r\n : this.gridster.$options.margin);\r\n addClass = GridType.ScrollHorizontal;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollVertical;\r\n removeClass3 = GridType.Fixed;\r\n }\r\n\r\n if (\r\n this.gridster.mobile ||\r\n (this.gridster.$options.setGridSize &&\r\n this.gridster.$options.gridType !== GridType.Fit)\r\n ) {\r\n this.gridster.renderer.removeClass(this.gridster.el, addClass);\r\n } else {\r\n this.gridster.renderer.addClass(this.gridster.el, addClass);\r\n }\r\n this.gridster.renderer.removeClass(this.gridster.el, removeClass1);\r\n this.gridster.renderer.removeClass(this.gridster.el, removeClass2);\r\n this.gridster.renderer.removeClass(this.gridster.el, removeClass3);\r\n }\r\n\r\n getGridColumnStyle(i: number): CommonGridStyle {\r\n // generates the new style\r\n const newPos: GridColumnCachedStyle = {\r\n left: this.gridster.curColWidth * i,\r\n width: this.gridster.curColWidth - this.gridster.$options.margin,\r\n height:\r\n this.gridster.gridRows.length * this.gridster.curRowHeight -\r\n this.gridster.$options.margin,\r\n style: {}\r\n };\r\n newPos.style = {\r\n ...this.getLeftPosition(newPos.left),\r\n width: newPos.width + 'px',\r\n height: newPos.height + 'px'\r\n };\r\n\r\n // use the last cached style if it has same values as the generated one\r\n const last = this.lastGridColumnStyles[i];\r\n if (\r\n last &&\r\n last.left === newPos.left &&\r\n last.width === newPos.width &&\r\n last.height === newPos.height\r\n ) {\r\n return last.style;\r\n }\r\n\r\n // cache and set new style\r\n this.lastGridColumnStyles[i] = newPos;\r\n return newPos.style;\r\n }\r\n\r\n getGridRowStyle(i: number): CommonGridStyle {\r\n // generates the new style\r\n const newPos: GridRowCachedStyle = {\r\n top: this.gridster.curRowHeight * i,\r\n width:\r\n this.gridster.gridColumns.length * this.gridster.curColWidth +\r\n this.gridster.$options.margin,\r\n height: this.gridster.curRowHeight - this.gridster.$options.margin,\r\n style: {}\r\n };\r\n newPos.style = {\r\n ...this.getTopPosition(newPos.top),\r\n width: newPos.width + 'px',\r\n height: newPos.height + 'px'\r\n };\r\n\r\n // use the last cached style if it has same values as the generated one\r\n const last = this.lastGridRowStyles[i];\r\n if (\r\n last &&\r\n last.top === newPos.top &&\r\n last.width === newPos.width &&\r\n last.height === newPos.height\r\n ) {\r\n return last.style;\r\n }\r\n\r\n // cache and set new style\r\n this.lastGridRowStyles[i] = newPos;\r\n return newPos.style;\r\n }\r\n\r\n getLeftPosition(d: number): { left: string } | { transform: string } {\r\n const dPosition = this.gridster.$options.dirType === DirTypes.RTL ? -d : d;\r\n if (this.gridster.$options.useTransformPositioning) {\r\n return {\r\n transform: 'translateX(' + dPosition + 'px)'\r\n };\r\n } else {\r\n return {\r\n left: this.getLeftMargin() + dPosition + 'px'\r\n };\r\n }\r\n }\r\n\r\n getTopPosition(d: number): { top: string } | { transform: string } {\r\n if (this.gridster.$options.useTransformPositioning) {\r\n return {\r\n transform: 'translateY(' + d + 'px)'\r\n };\r\n } else {\r\n return {\r\n top: this.getTopMargin() + d + 'px'\r\n };\r\n }\r\n }\r\n\r\n clearCellPosition(renderer: Renderer2, el: Element): void {\r\n if (this.gridster.$options.useTransformPositioning) {\r\n renderer.setStyle(el, 'transform', '');\r\n } else {\r\n renderer.setStyle(el, 'top', '');\r\n renderer.setStyle(el, 'left', '');\r\n }\r\n }\r\n\r\n setCellPosition(\r\n renderer: Renderer2,\r\n el: Element,\r\n x: number,\r\n y: number\r\n ): void {\r\n const xPosition = this.gridster.$options.dirType === DirTypes.RTL ? -x : x;\r\n if (this.gridster.$options.useTransformPositioning) {\r\n const transform = 'translate3d(' + xPosition + 'px, ' + y + 'px, 0)';\r\n renderer.setStyle(el, 'transform', transform);\r\n } else {\r\n renderer.setStyle(el, 'left', this.getLeftMargin() + xPosition + 'px');\r\n renderer.setStyle(el, 'top', this.getTopMargin() + y + 'px');\r\n }\r\n }\r\n\r\n getLeftMargin(): number {\r\n if (this.gridster.$options.outerMargin) {\r\n if (this.gridster.$options.outerMarginLeft !== null) {\r\n return this.gridster.$options.outerMarginLeft;\r\n } else {\r\n return this.gridster.$options.margin;\r\n }\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n getTopMargin(): number {\r\n if (this.gridster.$options.outerMargin) {\r\n if (this.gridster.$options.outerMarginTop !== null) {\r\n return this.gridster.$options.outerMarginTop;\r\n } else {\r\n return this.gridster.$options.margin;\r\n }\r\n } else {\r\n return 0;\r\n }\r\n }\r\n}\r\n","import { NgForOf, NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { debounceTime, Subject, switchMap, takeUntil, timer } from 'rxjs';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { GridsterCompact } from './gridsterCompact.service';\r\n\r\nimport { GridsterConfigService } from './gridsterConfig.constant';\r\nimport { GridsterConfig, GridType } from './gridsterConfig.interface';\r\nimport { GridsterConfigS } from './gridsterConfigS.interface';\r\nimport { GridsterEmptyCell } from './gridsterEmptyCell.service';\r\nimport {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\nimport { GridsterPreviewComponent } from './gridsterPreview.component';\r\nimport { GridsterRenderer } from './gridsterRenderer.service';\r\nimport { GridsterUtils } from './gridsterUtils.service';\r\n\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'gridster',\r\n templateUrl: './gridster.html',\r\n styleUrls: ['./gridster.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgForOf, NgStyle, GridsterPreviewComponent]\r\n})\r\nexport class GridsterComponent\r\n implements OnInit, OnChanges, OnDestroy, GridsterComponentInterface {\r\n @Input() options!: GridsterConfig;\r\n movingItem!: GridsterItem | null;\r\n el: HTMLElement;\r\n $options: GridsterConfigS;\r\n mobile: boolean;\r\n curWidth: number;\r\n curHeight: number;\r\n grid: GridsterItemComponentInterface[];\r\n columns = 0;\r\n rows = 0;\r\n curColWidth: number;\r\n curRowHeight: number;\r\n gridColumns = [];\r\n gridRows = [];\r\n windowResize!: (() => void) | null;\r\n dragInProgress: boolean;\r\n emptyCell: GridsterEmptyCell;\r\n compact: GridsterCompact;\r\n gridRenderer: GridsterRenderer;\r\n previewStyle$: EventEmitter<GridsterItem | null> =\r\n new EventEmitter<GridsterItem | null>();\r\n\r\n calculateLayout$ = new Subject<void>();\r\n\r\n private resize$ = new Subject<void>();\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n @Inject(ElementRef) el: ElementRef,\r\n @Inject(Renderer2) public renderer: Renderer2,\r\n @Inject(ChangeDetectorRef) public cdRef: ChangeDetectorRef,\r\n @Inject(NgZone) public zone: NgZone\r\n ) {\r\n this.el = el.nativeElement;\r\n this.$options = JSON.parse(JSON.stringify(GridsterConfigService));\r\n this.mobile = false;\r\n this.curWidth = 0;\r\n this.curHeight = 0;\r\n this.grid = [];\r\n this.curColWidth = 0;\r\n this.curRowHeight = 0;\r\n this.dragInProgress = false;\r\n this.emptyCell = new GridsterEmptyCell(this);\r\n this.compact = new GridsterCompact(this);\r\n this.gridRenderer = new GridsterRenderer(this);\r\n }\r\n\r\n // ------ Function for swapWhileDragging option\r\n\r\n // identical to checkCollision() except that here we add boundaries.\r\n static checkCollisionTwoItemsForSwaping(\r\n item: GridsterItem,\r\n item2: GridsterItem\r\n ): boolean {\r\n // if the cols or rows of the items are 1 , doesnt make any sense to set a boundary. Only if the item is bigger we set a boundary\r\n const horizontalBoundaryItem1 = item.cols === 1 ? 0 : 1;\r\n const horizontalBoundaryItem2 = item2.cols === 1 ? 0 : 1;\r\n const verticalBoundaryItem1 = item.rows === 1 ? 0 : 1;\r\n const verticalBoundaryItem2 = item2.rows === 1 ? 0 : 1;\r\n return (\r\n item.x + horizontalBoundaryItem1 < item2.x + item2.cols &&\r\n item.x + item.cols > item2.x + horizontalBoundaryItem2 &&\r\n item.y + verticalBoundaryItem1 < item2.y + item2.rows &&\r\n item.y + item.rows > item2.y + verticalBoundaryItem2\r\n );\r\n }\r\n\r\n checkCollisionTwoItems(item: GridsterItem, item2: GridsterItem): boolean {\r\n const collision =\r\n item.x < item2.x + item2.cols &&\r\n item.x + item.cols > item2.x &&\r\n item.y < item2.y + item2.rows &&\r\n item.y + item.rows > item2.y;\r\n if (!collision) {\r\n return false;\r\n }\r\n if (!this.$options.allowMultiLayer) {\r\n return true;\r\n }\r\n const defaultLayerIndex = this.$options.defaultLayerIndex;\r\n const layerIndex =\r\n item.layerIndex === undefined ? defaultLayerIndex : item.layerIndex;\r\n const layerIndex2 =\r\n item2.layerIndex === undefined ? defaultLayerIndex : item2.layerIndex;\r\n return layerIndex === layerIndex2;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.options.initCallback) {\r\n this.options.initCallback(this);\r\n }\r\n\r\n this.calculateLayout$\r\n .pipe(debounceTime(0), takeUntil(this.destroy$))\r\n .subscribe(() => this.calculateLayout());\r\n\r\n this.resize$\r\n .pipe(\r\n // Cancel previously scheduled DOM timer if `calculateLayout()` has been called\r\n // within this time range.\r\n switchMap(() => timer(100)),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe(() => this.resize());\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['options']) {\r\n this.setOptions();\r\n this.options.api = {\r\n optionsChanged: this.optionsChanged?.bind(this),\r\n resize: this.onResize.bind(this),\r\n getNextPossiblePosition: this.getNextPossiblePosition.bind(this),\r\n getFirstPossiblePosition: this.getFirstPossiblePosition.bind(this),\r\n getLastPossiblePosition: this.getLastPossiblePosition.bind(this),\r\n getItemComponent: (item: GridsterItem) => this.getItemComponent(item),\r\n getCurrentRowHeight: this.getCurrentRowHeight.bind(this)\r\n };\r\n this.columns = this.$options.minCols;\r\n this.rows = this.$options.minRows + this.$options.addEmptyRowsCount;\r\n this.setGridSize();\r\n this.calculateLayout();\r\n }\r\n }\r\n\r\n getCurrentRowHeight(): number {\r\n return this.curRowHeight;\r\n }\r\n\r\n private resize(): void {\r\n let height;\r\n let width;\r\n if (this.$options.gridType === 'fit' && !this.mobile) {\r\n width = this.el.offsetWidth;\r\n height = this.el.offsetHeight;\r\n } else {\r\n width = this.el.clientWidth;\r\n height = this.el.clientHeight;\r\n }\r\n if (\r\n (width !== this.curWidth || height !== this.curHeight) &&\r\n this.checkIfToResize()\r\n ) {\r\n this.onResize();\r\n }\r\n }\r\n\r\n setOptions(): void {\r\n this.$options = GridsterUtils.merge(\r\n this.$options,\r\n this.options,\r\n this.$options\r\n );\r\n if (!this.$options.disableWindowResize && !this.windowResize) {\r\n this.windowResize = this.renderer.listen(\r\n 'window',\r\n 'resize',\r\n this.onResize\r\n );\r\n } else if (this.$options.disableWindowResize && this.windowResize) {\r\n this.windowResize();\r\n this.windowResize = null;\r\n }\r\n this.emptyCell.updateOptions();\r\n }\r\n\r\n optionsChanged = (): void => {\r\n this.setOptions();\r\n let widgetsIndex: number = this.grid.length - 1;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex >= 0; widgetsIndex--) {\r\n widget = this.grid[widgetsIndex];\r\n widget.updateOptions();\r\n }\r\n this.calculateLayout();\r\n };\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.previewStyle$.complete();\r\n if (this.windowResize) {\r\n this.windowResize();\r\n }\r\n if (this.options && this.options.destroyCallback) {\r\n this.options.destroyCallback(this);\r\n }\r\n if (this.options && this.options.api) {\r\n this.options.api.resize = undefined;\r\n this.options.api.optionsChanged = undefined;\r\n this.options.api.getNextPossiblePosition = undefined;\r\n this.options.api = undefined;\r\n }\r\n this.emptyCell.destroy();\r\n this.emptyCell = null!;\r\n this.compact.destroy();\r\n this.compact = null!;\r\n }\r\n\r\n onResize = (): void => {\r\n if (this.el.clientWidth) {\r\n if (this.options.setGridSize) {\r\n // reset width/height so the size is recalculated afterwards\r\n this.renderer.setStyle(this.el, 'width', '');\r\n this.renderer.setStyle(this.el, 'height', '');\r\n }\r\n this.setGridSize();\r\n this.calculateLayout();\r\n }\r\n };\r\n\r\n checkIfToResize(): boolean {\r\n const clientWidth = this.el.clientWidth;\r\n const offsetWidth = this.el.offsetWidth;\r\n const scrollWidth = this.el.scrollWidth;\r\n const clientHeight = this.el.clientHeight;\r\n const offsetHeight = this.el.offsetHeight;\r\n const scrollHeight = this.el.scrollHeight;\r\n const verticalScrollPresent =\r\n clientWidth < offsetWidth &&\r\n scrollHeight > offsetHeight &&\r\n scrollHeight - offsetHeight < offsetWidth - clientWidth;\r\n const horizontalScrollPresent =\r\n clientHeight < offsetHeight &&\r\n scrollWidth > offsetWidth &&\r\n scrollWidth - offsetWidth < offsetHeight - clientHeight;\r\n if (verticalScrollPresent) {\r\n return false;\r\n }\r\n return !horizontalScrollPresent;\r\n }\r\n\r\n checkIfMobile(): boolean {\r\n if (this.$options.useBodyForBreakpoint) {\r\n return this.$options.mobileBreakpoint > document.body.clientWidth;\r\n } else {\r\n return this.$options.mobileBreakpoint > this.curWidth;\r\n }\r\n }\r\n\r\n setGridSize(): void {\r\n const el = this.el;\r\n let width;\r\n let height;\r\n if (\r\n this.$options.setGridSize ||\r\n (this.$options.gridType === GridType.Fit && !this.mobile)\r\n ) {\r\n width = el.offsetWidth;\r\n height = el.offsetHeight;\r\n } else {\r\n width = el.clientWidth;\r\n height = el.clientHeight;\r\n }\r\n this.curWidth = width;\r\n this.curHeight = height;\r\n }\r\n\r\n setGridDimensions(): void {\r\n this.setGridSize();\r\n if (!this.mobile && this.checkIfMobile()) {\r\n this.mobile = !this.mobile;\r\n this.renderer.addClass(this.el, 'mobile');\r\n } else if (this.mobile && !this.checkIfMobile()) {\r\n this.mobile = !this.mobile;\r\n this.renderer.removeClass(this.el, 'mobile');\r\n }\r\n let rows = this.$options.minRows;\r\n let columns = this.$options.minCols;\r\n\r\n let widgetsIndex = this.grid.length - 1;\r\n let widget;\r\n for (; widgetsIndex >= 0; widgetsIndex--) {\r\n widget = this.grid[widgetsIndex];\r\n if (!widget.notPlaced) {\r\n rows = Math.max(rows, widget.$item.y + widget.$item.rows);\r\n columns = Math.max(columns, widget.$item.x + widget.$item.cols);\r\n }\r\n }\r\n rows += this.$options.addEmptyRowsCount;\r\n if (this.columns !== columns || this.rows !== rows) {\r\n this.columns = columns;\r\n this.rows = rows;\r\n if (this.options.gridSizeChangedCallback) {\r\n this.options.gridSizeChangedCallback(this);\r\n }\r\n }\r\n }\r\n\r\n private calculateLayout(): void {\r\n if (this.compact) {\r\n this.compact.checkCompact();\r\n }\r\n\r\n this.setGridDimensions();\r\n if (this.$options.outerMargin) {\r\n let marginWidth = -this.$options.margin;\r\n if (this.$options.outerMarginLeft !== null) {\r\n marginWidth += this.$options.outerMarginLeft;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-left',\r\n this.$options.outerMarginLeft + 'px'\r\n );\r\n } else {\r\n marginWidth += this.$options.margin;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-left',\r\n this.$options.margin + 'px'\r\n );\r\n }\r\n if (this.$options.outerMarginRight !== null) {\r\n marginWidth += this.$options.outerMarginRight;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-right',\r\n this.$options.outerMarginRight + 'px'\r\n );\r\n } else {\r\n marginWidth += this.$options.margin;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-right',\r\n this.$options.margin + 'px'\r\n );\r\n }\r\n this.curColWidth = (this.curWidth - marginWidth) / this.columns;\r\n let marginHeight = -this.$options.margin;\r\n if (this.$options.outerMarginTop !== null) {\r\n marginHeight += this.$options.outerMarginTop;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-top',\r\n this.$options.outerMarginTop + 'px'\r\n );\r\n } else {\r\n marginHeight += this.$options.margin;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-top',\r\n this.$options.margin + 'px'\r\n );\r\n }\r\n if (this.$options.outerMarginBottom !== null) {\r\n marginHeight += this.$options.outerMarginBottom;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-bottom',\r\n this.$options.outerMarginBottom + 'px'\r\n );\r\n } else {\r\n marginHeight += this.$options.margin;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-bottom',\r\n this.$options.margin + 'px'\r\n );\r\n }\r\n this.curRowHeight =\r\n ((this.curHeight - marginHeight) / this.rows) *\r\n this.$options.rowHeightRatio;\r\n } else {\r\n this.curColWidth = (this.curWidth + this.$options.margin) / this.columns;\r\n this.curRowHeight =\r\n ((this.curHeight + this.$options.margin) / this.rows) *\r\n this.$options.rowHeightRatio;\r\n this.renderer.setStyle(this.el, 'padding-left', 0 + 'px');\r\n this.renderer.setStyle(this.el, 'padding-right', 0 + 'px');\r\n this.renderer.setStyle(this.el, 'padding-top', 0 + 'px');\r\n this.renderer.setStyle(this.el, 'padding-bottom', 0 + 'px');\r\n }\r\n this.gridRenderer.updateGridster();\r\n\r\n if (this.$options.setGridSize) {\r\n this.renderer.addClass(this.el, 'gridSize');\r\n if (!this.mobile) {\r\n this.renderer.setStyle(\r\n this.el,\r\n 'width',\r\n this.columns * this.curColWidth + this.$options.margin + 'px'\r\n );\r\n this.renderer.setStyle(\r\n this.el,\r\n 'height',\r\n this.rows * this.curRowHeight + this.$options.margin + 'px'\r\n );\r\n }\r\n } else {\r\n this.renderer.removeClass(this.el, 'gridSize');\r\n this.renderer.setStyle(this.el, 'width', '');\r\n this.renderer.setStyle(this.el, 'height', '');\r\n }\r\n this.updateGrid();\r\n\r\n let widgetsIndex: number = this.grid.length - 1;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex >= 0; widgetsIndex--) {\r\n widget = this.grid[widgetsIndex];\r\n widget.setSize();\r\n widget.drag.toggle();\r\n widget.resize.toggle();\r\n }\r\n\r\n this.resize$.next();\r\n }\r\n\r\n updateGrid(): void {\r\n if (this.$options.displayGrid === 'always' && !this.mobile) {\r\n this.renderer.addClass(this.el, 'display-grid');\r\n } else if (\r\n this.$options.displayGrid === 'onDrag&Resize' &&\r\n this.dragInProgress\r\n ) {\r\n this.renderer.addClass(this.el, 'display-grid');\r\n } else if (\r\n this.$options.displayGrid === 'none' ||\r\n !this.dragInProgress ||\r\n this.mobile\r\n ) {\r\n this.renderer.removeClass(this.el, 'display-grid');\r\n }\r\n this.setGridDimensions();\r\n this.gridColumns.length = GridsterComponent.getNewArrayLength(\r\n this.columns,\r\n this.curWidth,\r\n this.curColWidth\r\n );\r\n this.gridRows.length = GridsterComponent.getNewArrayLength(\r\n this.rows,\r\n this.curHeight,\r\n this.curRowHeight\r\n );\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n addItem(itemComponent: GridsterItemComponentInterface): void {\r\n if (itemComponent.$item.cols === undefined) {\r\n itemComponent.$item.cols = this.$options.defaultItemCols;\r\n itemComponent.item.cols = itemComponent.$item.cols;\r\n itemComponent.itemChanged();\r\n }\r\n if (itemComponent.$item.rows === undefined) {\r\n itemComponent.$item.rows = this.$options.defaultItemRows;\r\n itemComponent.item.rows = itemComponent.$item.rows;\r\n itemComponent.itemChanged();\r\n }\r\n if (itemComponent.$item.x === -1 || itemComponent.$item.y === -1) {\r\n this.autoPositionItem(itemComponent);\r\n } else if (this.checkCollision(itemComponent.$item)) {\r\n if (!this.$options.disableWarnings) {\r\n itemComponent.notPlaced = true;\r\n console.warn(\r\n \"Can't be placed in the bounds of the dashboard, trying to auto position!/n\" +\r\n JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y'])\r\n );\r\n }\r\n if (!this.$options.disableAutoPositionOnConflict) {\r\n this.autoPositionItem(itemComponent);\r\n } else {\r\n itemComponent.notPlaced = true;\r\n }\r\n }\r\n this.grid.push(itemComponent);\r\n this.calculateLayout$.next();\r\n }\r\n\r\n removeItem(itemComponent: GridsterItemComponentInterface): void {\r\n this.grid.splice(this.grid.indexOf(itemComponent), 1);\r\n this.calculateLayout$.next();\r\n if (this.options.itemRemovedCallback) {\r\n this.options.itemRemovedCallback(itemComponent.item, itemComponent);\r\n }\r\n }\r\n\r\n checkCollision(item: GridsterItem): GridsterItemComponentInterface | boolean {\r\n let collision: GridsterItemComponentInterface | boolean = false;\r\n if (this.options.itemValidateCallback) {\r\n collision = !this.options.itemValidateCallback(item);\r\n }\r\n if (!collision && this.checkGridCollision(item)) {\r\n collision = true;\r\n }\r\n if (!collision) {\r\n const c = this.findItemWithItem(item);\r\n if (c) {\r\n collision = c;\r\n }\r\n }\r\n return collision;\r\n }\r\n\r\n checkGridCollision(item: GridsterItem): boolean {\r\n const noNegativePosition = item.y > -1 && item.x > -1;\r\n const maxGridCols = item.cols + item.x <= this.$options.maxCols;\r\n const maxGridRows = item.rows + item.y <= this.$options.maxRows;\r\n const maxItemCols =\r\n item.maxItemCols === undefined\r\n ? this.$options.maxItemCols\r\n : item.maxItemCols;\r\n const minItemCols =\r\n item.minItemCols === undefined\r\n ? this.$options.minItemCols\r\n : item.minItemCols;\r\n const maxItemRows =\r\n item.maxItemRows === undefined\r\n ? this.$options.maxItemRows\r\n : item.maxItemRows;\r\n const minItemRows =\r\n item.minItemRows === undefined\r\n ? this.$options.minItemRows\r\n : item.minItemRows;\r\n const inColsLimits = item.cols <= maxItemCols && item.cols >= minItemCols;\r\n const inRowsLimits = item.rows <= maxItemRows && item.rows >= minItemRows;\r\n const minAreaLimit =\r\n item.minItemArea === undefined\r\n ? this.$options.minItemArea\r\n : item.minItemArea;\r\n const maxAreaLimit =\r\n item.maxItemArea === undefined\r\n ? this.$options.maxItemArea\r\n : item.maxItemArea;\r\n const area = item.cols * item.rows;\r\n const inMinArea = minAreaLimit <= area;\r\n const inMaxArea = maxAreaLimit >= area;\r\n return !(\r\n noNegativePosition &&\r\n maxGridCols &&\r\n maxGridRows &&\r\n inColsLimits &&\r\n inRowsLimits &&\r\n inMinArea &&\r\n inMaxArea\r\n );\r\n }\r\n\r\n findItemWithItem(\r\n item: GridsterItem\r\n ): GridsterItemComponentInterface | boolean {\r\n let widgetsIndex = 0;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex < this.grid.length; widgetsIndex++) {\r\n widget = this.grid[widgetsIndex];\r\n if (\r\n widget.$item !== item &&\r\n this.checkCollisionTwoItems(widget.$item, item)\r\n ) {\r\n return widget;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n findItemsWithItem(item: GridsterItem): Array<GridsterItemComponentInterface> {\r\n const a: Array<GridsterItemComponentInterface> = [];\r\n let widgetsIndex = 0;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex < this.grid.length; widgetsIndex++) {\r\n widget = this.grid[widgetsIndex];\r\n if (\r\n widget.$item !== item &&\r\n this.checkCollisionTwoItems(widget.$item, item)\r\n ) {\r\n a.push(widget);\r\n }\r\n }\r\n return a;\r\n }\r\n\r\n autoPositionItem(itemComponent: GridsterItemComponentInterface): void {\r\n if (this.getNextPossiblePosition(itemComponent.$item)) {\r\n itemComponent.notPlaced = false;\r\n itemComponent.item.x = itemComponent.$item.x;\r\n itemComponent.item.y = itemComponent.$item.y;\r\n itemComponent.itemChanged();\r\n } else {\r\n itemComponent.notPlaced = true;\r\n if (!this.$options.disableWarnings) {\r\n console.warn(\r\n \"Can't be placed in the bounds of the dashboard!/n\" +\r\n JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y'])\r\n );\r\n }\r\n }\r\n }\r\n\r\n getNextPossiblePosition = (\r\n newItem: GridsterItem,\r\n startingFrom: { y?: number; x?: number } = {}\r\n ): boolean => {\r\n if (newItem.cols === -1) {\r\n newItem.cols = this.$options.defaultItemCols;\r\n }\r\n if (newItem.rows === -1) {\r\n newItem.rows = this.$options.defaultItemRows;\r\n }\r\n this.setGridDimensions();\r\n let rowsIndex = startingFrom.y || 0;\r\n let colsIndex;\r\n for (; rowsIndex < this.rows; rowsIndex++) {\r\n newItem.y = rowsIndex;\r\n colsIndex = startingFrom.x || 0;\r\n for (; colsIndex < this.columns; colsIndex++) {\r\n newItem.x = colsIndex;\r\n if (!this.checkCollision(newItem)) {\r\n return true;\r\n }\r\n }\r\n }\r\n const canAddToRows = this.$options.maxRows >= this.rows + newItem.rows;\r\n const canAddToColumns =\r\n this.$options.maxCols >= this.columns + newItem.cols;\r\n const addToRows = this.rows <= this.columns && canAddToRows;\r\n if (!addToRows && canAddToColumns) {\r\n newItem.x = this.columns;\r\n newItem.y = 0;\r\n return true;\r\n } else if (canAddToRows) {\r\n newItem.y = this.rows;\r\n newItem.x = 0;\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n getFirstPossiblePosition = (item: GridsterItem): GridsterItem => {\r\n const tmpItem = Object.assign({}, item);\r\n this.getNextPossiblePosition(tmpItem);\r\n return tmpItem;\r\n };\r\n\r\n getLastPossiblePosition = (item: GridsterItem): GridsterItem => {\r\n let farthestItem: { y: number; x: number } = { y: 0, x: 0 };\r\n farthestItem = this.grid.reduce(\r\n (\r\n prev: { y: number; x: number },\r\n curr: GridsterItemComponentInterface\r\n ) => {\r\n const currCoords = {\r\n y: curr.$item.y + curr.$item.rows - 1,\r\n x: curr.$item.x + curr.$item.cols - 1\r\n };\r\n if (GridsterUtils.compareItems(prev, currCoords) === 1) {\r\n return currCoords;\r\n } else {\r\n return prev;\r\n }\r\n },\r\n farthestItem\r\n );\r\n\r\n const tmpItem = Object.assign({}, item);\r\n this.getNextPossiblePosition(tmpItem, farthestItem);\r\n return tmpItem;\r\n };\r\n\r\n pixelsToPositionX(\r\n x: number,\r\n roundingMethod: (x: number) => number,\r\n noLimit?: boolean\r\n ): number {\r\n const position = roundingMethod(x / this.curColWidth);\r\n if (noLimit) {\r\n return position;\r\n } else {\r\n return Math.max(position, 0);\r\n }\r\n }\r\n\r\n pixelsToPositionY(\r\n y: number,\r\n roundingMethod: (x: number) => number,\r\n noLimit?: boolean\r\n ): number {\r\n const position = roundingMethod(y / this.curRowHeight);\r\n if (noLimit) {\r\n return position;\r\n } else {\r\n return Math.max(position, 0);\r\n }\r\n }\r\n\r\n positionXToPixels(x: number): number {\r\n return x * this.curColWidth;\r\n }\r\n\r\n positionYToPixels(y: number): number {\r\n return y * this.curRowHeight;\r\n }\r\n\r\n getItemComponent(\r\n item: GridsterItem\r\n ): GridsterItemComponentInterface | undefined {\r\n return this.grid.find(c => c.item === item);\r\n }\r\n\r\n // ------ Functions for swapWhileDragging option\r\n\r\n // identical to checkCollision() except that this function calls findItemWithItemForSwaping() instead of findItemWithItem()\r\n checkCollisionForSwaping(\r\n item: GridsterItem\r\n ): GridsterItemComponentInterface | boolean {\r\n let collision: GridsterItemComponentInterface | boolean = false;\r\n if (this.options.itemValidateCallback) {\r\n collision = !this.options.itemValidateCallback(item);\r\n }\r\n if (!collision && this.checkGridCollision(item)) {\r\n collision = true;\r\n }\r\n if (!collision) {\r\n const c = this.findItemWithItemForSwapping(item);\r\n if (c) {\r\n collision = c;\r\n }\r\n }\r\n return collision;\r\n }\r\n\r\n // identical to findItemWithItem() except that this function calls checkCollisionTwoItemsForSwaping() instead of checkCollisionTwoItems()\r\n findItemWithItemForSwapping(\r\n item: GridsterItem\r\n ): GridsterItemComponentInterface | boolean {\r\n let widgetsIndex: number = this.grid.length - 1;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex > -1; widgetsIndex--) {\r\n widget = this.grid[widgetsIndex];\r\n if (\r\n widget.$item !== item &&\r\n GridsterComponent.checkCollisionTwoItemsForSwaping(widget.$item, item)\r\n ) {\r\n return widget;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n previewStyle(drag = false): void {\r\n if (this.movingItem) {\r\n if (this.compact && drag) {\r\n this.compact.checkCompactItem(this.movingItem);\r\n }\r\n this.previewStyle$.next(this.movingItem);\r\n } else {\r\n this.previewStyle$.next(null);\r\n }\r\n }\r\n\r\n // ------ End of functions for swapWhileDragging option\r\n\r\n // eslint-disable-next-line @typescript-eslint/member-ordering\r\n private static getNewArrayLength(\r\n length: number,\r\n overallSize: number,\r\n size: number\r\n ): number {\r\n const newLength = Math.max(length, Math.floor(overallSize / size));\r\n\r\n if (newLength < 0) {\r\n return 0;\r\n }\r\n\r\n if (Number.isFinite(newLength)) {\r\n return Math.floor(newLength);\r\n }\r\n\r\n return 0;\r\n }\r\n}\r\n","<div\r\n class=\"gridster-column\"\r\n *ngFor=\"let column of gridColumns; let i = index;\"\r\n [ngStyle]=\"gridRenderer.getGridColumnStyle(i)\"\r\n></div>\r\n<div\r\n class=\"gridster-row\"\r\n *ngFor=\"let row of gridRows; let i = index;\"\r\n [ngStyle]=\"gridRenderer.getGridRowStyle(i)\"\r\n></div>\r\n<ng-content></ng-content>\r\n<gridster-preview\r\n [gridRenderer]=\"gridRenderer\"\r\n [previewStyle$]=\"previewStyle$\"\r\n class=\"gridster-preview\"\r\n></gridster-preview>\r\n","import { GridsterItemComponentInterface } from './gridsterItem.interface';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\n\r\nexport class GridsterPush {\r\n public fromSouth: string;\r\n public fromNorth: string;\r\n public fromEast: string;\r\n public fromWest: string;\r\n private pushedItems: GridsterItemComponentInterface[];\r\n private pushedItemsTemp: GridsterItemComponentInterface[];\r\n private pushedItemsTempPath: { x: number; y: number }[][];\r\n private pushedItemsPath: { x: number; y: number }[][];\r\n private gridsterItem: GridsterItemComponentInterface;\r\n private gridster: GridsterComponentInterface;\r\n private pushedItemsOrder!: GridsterItemComponentInterface[];\r\n private tryPattern: {\r\n fromEast: ((\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ) => boolean)[];\r\n fromWest: ((\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ) => boolean)[];\r\n fromNorth: ((\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ) => boolean)[];\r\n fromSouth: ((\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ) => boolean)[];\r\n };\r\n private iteration = 0;\r\n\r\n constructor(gridsterItem: GridsterItemComponentInterface) {\r\n this.pushedItems = [];\r\n this.pushedItemsTemp = [];\r\n this.pushedItemsTempPath = [];\r\n this.pushedItemsPath = [];\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridsterItem.gridster;\r\n this.tryPattern = {\r\n fromEast: [this.tryWest, this.trySouth, this.tryNorth, this.tryEast],\r\n fromWest: [this.tryEast, this.trySouth, this.tryNorth, this.tryWest],\r\n fromNorth: [this.trySouth, this.tryEast, this.tryWest, this.tryNorth],\r\n fromSouth: [this.tryNorth, this.tryEast, this.tryWest, this.trySouth]\r\n };\r\n this.fromSouth = 'fromSouth';\r\n this.fromNorth = 'fromNorth';\r\n this.fromEast = 'fromEast';\r\n this.fromWest = 'fromWest';\r\n }\r\n\r\n destroy(): void {\r\n this.gridster = this.gridsterItem = null!;\r\n }\r\n\r\n pushItems(direction: string, disable?: boolean): boolean {\r\n if (this.gridster.$options.pushItems && !disable) {\r\n this.pushedItemsOrder = [];\r\n this.iteration = 0;\r\n const pushed = this.push(this.gridsterItem, direction);\r\n if (!pushed) {\r\n this.restoreTempItems();\r\n }\r\n this.pushedItemsOrder = [];\r\n this.pushedItemsTemp = [];\r\n this.pushedItemsTempPath = [];\r\n return pushed;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n restoreTempItems(): void {\r\n let i = this.pushedItemsTemp.length - 1;\r\n for (; i > -1; i--) {\r\n this.removeFromTempPushed(this.pushedItemsTemp[i]);\r\n }\r\n }\r\n\r\n restoreItems(): void {\r\n let i = 0;\r\n const l: number = this.pushedItems.length;\r\n let pushedItem: GridsterItemComponentInterface;\r\n for (; i < l; i++) {\r\n pushedItem = this.pushedItems[i];\r\n pushedItem.$item.x = pushedItem.item.x || 0;\r\n pushedItem.$item.y = pushedItem.item.y || 0;\r\n pushedItem.setSize();\r\n }\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n }\r\n\r\n setPushedItems(): void {\r\n let i = 0;\r\n const l: number = this.pushedItems.length;\r\n let pushedItem: GridsterItemComponentInterface;\r\n for (; i < l; i++) {\r\n pushedItem = this.pushedItems[i];\r\n pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);\r\n }\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n }\r\n\r\n checkPushBack(): void {\r\n let i: number = this.pushedItems.length - 1;\r\n let change = false;\r\n for (; i > -1; i--) {\r\n if (this.checkPushedItem(this.pushedItems[i], i)) {\r\n change = true;\r\n }\r\n }\r\n if (change) {\r\n this.checkPushBack();\r\n }\r\n }\r\n\r\n private push(\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n if (this.iteration > 100) {\r\n console.warn('max iteration reached');\r\n return false;\r\n }\r\n if (this.gridster.checkGridCollision(gridsterItem.$item)) {\r\n return false;\r\n }\r\n if (direction === '') {\r\n return false;\r\n }\r\n const conflicts: GridsterItemComponentInterface[] =\r\n this.gridster.findItemsWithItem(gridsterItem.$item);\r\n const invert = direction === this.fromNorth || direction === this.fromWest;\r\n // sort the list of conflicts in order of [y,x]. Invert when the push is from north and west\r\n // this is done so they don't conflict witch each other and revert positions, keeping the previous order\r\n conflicts.sort((a, b) => {\r\n if (invert) {\r\n return b.$item.y - a.$item.y || b.$item.x - a.$item.x;\r\n } else {\r\n return a.$item.y - b.$item.y || a.$item.x - b.$item.x;\r\n }\r\n });\r\n let i = 0;\r\n let itemCollision: GridsterItemComponentInterface;\r\n let makePush = true;\r\n const pushedItems: GridsterItemComponentInterface[] = [];\r\n for (; i < conflicts.length; i++) {\r\n itemCollision = conflicts[i];\r\n if (itemCollision === this.gridsterItem) {\r\n continue;\r\n }\r\n if (!itemCollision.canBeDragged()) {\r\n makePush = false;\r\n break;\r\n }\r\n const p = this.pushedItemsTemp.indexOf(itemCollision);\r\n if (p > -1 && this.pushedItemsTempPath[p].length > 10) {\r\n // stop if item is pushed more than 10 times to break infinite loops\r\n makePush = false;\r\n break;\r\n }\r\n let tryPattern :any = this.tryPattern;\r\n if (\r\n tryPattern[direction][0].call(this, itemCollision, gridsterItem)\r\n ) {\r\n this.pushedItemsOrder.push(itemCollision);\r\n pushedItems.push(itemCollision);\r\n } else if (\r\n tryPattern[direction][1].call(this, itemCollision, gridsterItem)\r\n ) {\r\n this.pushedItemsOrder.push(itemCollision);\r\n pushedItems.push(itemCollision);\r\n } else if (\r\n tryPattern[direction][2].call(this, itemCollision, gridsterItem)\r\n ) {\r\n this.pushedItemsOrder.push(itemCollision);\r\n pushedItems.push(itemCollision);\r\n } else if (\r\n tryPattern[direction][3].call(this, itemCollision, gridsterItem)\r\n ) {\r\n this.pushedItemsOrder.push(itemCollision);\r\n pushedItems.push(itemCollision);\r\n } else {\r\n makePush = false;\r\n break;\r\n }\r\n }\r\n if (!makePush) {\r\n i = this.pushedItemsOrder.lastIndexOf(pushedItems[0]);\r\n if (i > -1) {\r\n let j = this.pushedItemsOrder.length - 1;\r\n for (; j >= i; j--) {\r\n itemCollision = this.pushedItemsOrder[j];\r\n this.pushedItemsOrder.pop();\r\n this.removeFromTempPushed(itemCollision);\r\n this.removeFromPushedItem(itemCollision);\r\n }\r\n }\r\n }\r\n this.iteration++;\r\n return makePush;\r\n }\r\n\r\n private trySouth(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ): boolean {\r\n if (!this.gridster.$options.pushDirections.south) {\r\n return false;\r\n }\r\n this.addToTempPushed(gridsterItemCollide);\r\n gridsterItemCollide.$item.y =\r\n gridsterItem.$item.y + gridsterItem.$item.rows;\r\n if (this.push(gridsterItemCollide, this.fromNorth)) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n return true;\r\n } else {\r\n this.removeFromTempPushed(gridsterItemCollide);\r\n }\r\n return false;\r\n }\r\n\r\n private tryNorth(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ): boolean {\r\n if (!this.gridster.$options.pushDirections.north) {\r\n return false;\r\n }\r\n this.addToTempPushed(gridsterItemCollide);\r\n gridsterItemCollide.$item.y =\r\n gridsterItem.$item.y - gridsterItemCollide.$item.rows;\r\n if (this.push(gridsterItemCollide, this.fromSouth)) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n return true;\r\n } else {\r\n this.removeFromTempPushed(gridsterItemCollide);\r\n }\r\n return false;\r\n }\r\n\r\n private tryEast(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ): boolean {\r\n if (!this.gridster.$options.pushDirections.east) {\r\n return false;\r\n }\r\n this.addToTempPushed(gridsterItemCollide);\r\n gridsterItemCollide.$item.x =\r\n gridsterItem.$item.x + gridsterItem.$item.cols;\r\n if (this.push(gridsterItemCollide, this.fromWest)) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n return true;\r\n } else {\r\n this.removeFromTempPushed(gridsterItemCollide);\r\n }\r\n return false;\r\n }\r\n\r\n private tryWest(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ): boolean {\r\n if (!this.gridster.$options.pushDirections.west) {\r\n return false;\r\n }\r\n this.addToTempPushed(gridsterItemCollide);\r\n gridsterItemCollide.$item.x =\r\n gridsterItem.$item.x - gridsterItemCollide.$item.cols;\r\n if (this.push(gridsterItemCollide, this.fromEast)) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n return true;\r\n } else {\r\n this.removeFromTempPushed(gridsterItemCollide);\r\n }\r\n return false;\r\n }\r\n\r\n private addToTempPushed(gridsterItem: GridsterItemComponentInterface): void {\r\n let i = this.pushedItemsTemp.indexOf(gridsterItem);\r\n if (i === -1) {\r\n i = this.pushedItemsTemp.push(gridsterItem) - 1;\r\n this.pushedItemsTempPath[i] = [];\r\n }\r\n this.pushedItemsTempPath[i].push({\r\n x: gridsterItem.$item.x,\r\n y: gridsterItem.$item.y\r\n });\r\n }\r\n\r\n private removeFromTempPushed(\r\n gridsterItem: GridsterItemComponentInterface\r\n ): void {\r\n const i = this.pushedItemsTemp.indexOf(gridsterItem);\r\n const tempPosition = this.pushedItemsTempPath[i].pop();\r\n if (!tempPosition) {\r\n return;\r\n }\r\n gridsterItem.$item.x = tempPosition.x;\r\n gridsterItem.$item.y = tempPosition.y;\r\n gridsterItem.setSize();\r\n if (!this.pushedItemsTempPath[i].length) {\r\n this.pushedItemsTemp.splice(i, 1);\r\n this.pushedItemsTempPath.splice(i, 1);\r\n }\r\n }\r\n\r\n private addToPushed(gridsterItem: GridsterItemComponentInterface): void {\r\n if (this.pushedItems.indexOf(gridsterItem) < 0) {\r\n this.pushedItems.push(gridsterItem);\r\n this.pushedItemsPath.push([\r\n { x: gridsterItem.item.x || 0, y: gridsterItem.item.y || 0 },\r\n { x: gridsterItem.$item.x, y: gridsterItem.$item.y }\r\n ]);\r\n } else {\r\n const i = this.pushedItems.indexOf(gridsterItem);\r\n this.pushedItemsPath[i].push({\r\n x: gridsterItem.$item.x,\r\n y: gridsterItem.$item.y\r\n });\r\n }\r\n }\r\n\r\n private removeFromPushed(i: number): void {\r\n if (i > -1) {\r\n this.pushedItems.splice(i, 1);\r\n this.pushedItemsPath.splice(i, 1);\r\n }\r\n }\r\n\r\n private removeFromPushedItem(\r\n gridsterItem: GridsterItemComponentInterface\r\n ): void {\r\n const i = this.pushedItems.indexOf(gridsterItem);\r\n if (i > -1) {\r\n this.pushedItemsPath[i].pop();\r\n if (!this.pushedItemsPath.length) {\r\n this.pushedItems.splice(i, 1);\r\n this.pushedItemsPath.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n private checkPushedItem(\r\n pushedItem: GridsterItemComponentInterface,\r\n i: number\r\n ): boolean {\r\n const path = this.pushedItemsPath[i];\r\n let j = path.length - 2;\r\n let lastPosition;\r\n let x;\r\n let y;\r\n let change = false;\r\n for (; j > -1; j--) {\r\n lastPosition = path[j];\r\n x = pushedItem.$item.x;\r\n y = pushedItem.$item.y;\r\n pushedItem.$item.x = lastPosition.x;\r\n pushedItem.$item.y = lastPosition.y;\r\n if (!this.gridster.findItemWithItem(pushedItem.$item)) {\r\n pushedItem.setSize();\r\n path.splice(j + 1, path.length - j - 1);\r\n change = true;\r\n } else {\r\n pushedItem.$item.x = x;\r\n pushedItem.$item.y = y;\r\n }\r\n }\r\n if (path.length < 2) {\r\n this.removeFromPushed(i);\r\n }\r\n return change;\r\n }\r\n}\r\n","import { GridsterResizeEventType } from './gridsterResizeEventType.interface';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\n\r\nlet scrollSensitivity: number;\r\nlet scrollSpeed: number;\r\nconst intervalDuration = 50;\r\nlet gridsterElement: HTMLElement | null;\r\nlet resizeEvent: boolean | undefined;\r\nlet resizeEventType: GridsterResizeEventType | undefined;\r\nlet intervalE: number;\r\nlet intervalW: number;\r\nlet intervalN: number;\r\nlet intervalS: number;\r\n\r\ntype Position = Pick<MouseEvent, 'clientX' | 'clientY'>;\r\n\r\ntype CalculatePosition = (position: Position) => void;\r\n\r\nexport function scroll(\r\n gridster: GridsterComponentInterface,\r\n left: number,\r\n top: number,\r\n width: number,\r\n height: number,\r\n event: MouseEvent,\r\n lastMouse: Position,\r\n calculateItemPosition: CalculatePosition,\r\n resize?: boolean,\r\n resizeEventScrollType?: GridsterResizeEventType\r\n): void {\r\n scrollSensitivity = gridster.$options.scrollSensitivity;\r\n scrollSpeed = gridster.$options.scrollSpeed;\r\n gridsterElement = gridster.el;\r\n resizeEvent = resize;\r\n resizeEventType = resizeEventScrollType;\r\n\r\n const offsetWidth = gridsterElement.offsetWidth;\r\n const offsetHeight = gridsterElement.offsetHeight;\r\n const offsetLeft = gridsterElement.scrollLeft;\r\n const offsetTop = gridsterElement.scrollTop;\r\n const elemTopOffset = top - offsetTop;\r\n const elemBottomOffset = offsetHeight + offsetTop - top - height;\r\n\r\n const { clientX, clientY } = event;\r\n\r\n if (!gridster.$options.disableScrollVertical) {\r\n if (lastMouse.clientY < clientY && elemBottomOffset < scrollSensitivity) {\r\n cancelN();\r\n if (\r\n (resizeEvent && resizeEventType && !resizeEventType.south) ||\r\n intervalS\r\n ) {\r\n return;\r\n }\r\n intervalS = startVertical(1, calculateItemPosition, lastMouse);\r\n } else if (\r\n lastMouse.clientY > clientY &&\r\n offsetTop > 0 &&\r\n elemTopOffset < scrollSensitivity\r\n ) {\r\n cancelS();\r\n if (\r\n (resizeEvent && resizeEventType && !resizeEventType.north) ||\r\n intervalN\r\n ) {\r\n return;\r\n }\r\n intervalN = startVertical(-1, calculateItemPosition, lastMouse);\r\n } else if (lastMouse.clientY !== clientY) {\r\n cancelVertical();\r\n }\r\n }\r\n\r\n const elemRightOffset = offsetLeft + offsetWidth - left - width;\r\n const elemLeftOffset = left - offsetLeft;\r\n\r\n if (!gridster.$options.disableScrollHorizontal) {\r\n if (lastMouse.clientX < clientX && elemRightOffset <= scrollSensitivity) {\r\n cancelW();\r\n if (\r\n (resizeEvent && resizeEventType && !resizeEventType.east) ||\r\n intervalE\r\n ) {\r\n return;\r\n }\r\n intervalE = startHorizontal(1, calculateItemPosition, lastMouse);\r\n } else if (\r\n lastMouse.clientX > clientX &&\r\n offsetLeft > 0 &&\r\n elemLeftOffset < scrollSensitivity\r\n ) {\r\n cancelE();\r\n if (\r\n (resizeEvent && resizeEventType && !resizeEventType.west) ||\r\n intervalW\r\n ) {\r\n return;\r\n }\r\n intervalW = startHorizontal(-1, calculateItemPosition, lastMouse);\r\n } else if (lastMouse.clientX !== clientX) {\r\n cancelHorizontal();\r\n }\r\n }\r\n}\r\n\r\nfunction startVertical(\r\n sign: number,\r\n calculateItemPosition: CalculatePosition,\r\n lastMouse: Position\r\n): number {\r\n let clientY = lastMouse.clientY;\r\n return window.setInterval(() => {\r\n if (\r\n !gridsterElement ||\r\n (sign === -1 && gridsterElement.scrollTop - scrollSpeed < 0)\r\n ) {\r\n cancelVertical();\r\n }\r\n gridsterElement!.scrollTop += sign * scrollSpeed;\r\n clientY += sign * scrollSpeed;\r\n calculateItemPosition({ clientX: lastMouse.clientX, clientY });\r\n }, intervalDuration);\r\n}\r\n\r\nfunction startHorizontal(\r\n sign: number,\r\n calculateItemPosition: CalculatePosition,\r\n lastMouse: Position\r\n): number {\r\n let clientX = lastMouse.clientX;\r\n return window.setInterval(() => {\r\n if (\r\n !gridsterElement ||\r\n (sign === -1 && gridsterElement.scrollLeft - scrollSpeed < 0)\r\n ) {\r\n cancelHorizontal();\r\n }\r\n gridsterElement!.scrollLeft += sign * scrollSpeed;\r\n clientX += sign * scrollSpeed;\r\n calculateItemPosition({ clientX, clientY: lastMouse.clientY });\r\n }, intervalDuration);\r\n}\r\n\r\nexport function cancelScroll(): void {\r\n cancelHorizontal();\r\n cancelVertical();\r\n gridsterElement = null;\r\n}\r\n\r\nfunction cancelHorizontal(): void {\r\n cancelE();\r\n cancelW();\r\n}\r\n\r\nfunction cancelVertical(): void {\r\n cancelN();\r\n cancelS();\r\n}\r\n\r\nfunction cancelE(): void {\r\n if (intervalE) {\r\n clearInterval(intervalE);\r\n intervalE = 0;\r\n }\r\n}\r\n\r\nfunction cancelW(): void {\r\n if (intervalW) {\r\n clearInterval(intervalW);\r\n intervalW = 0;\r\n }\r\n}\r\n\r\nfunction cancelS(): void {\r\n if (intervalS) {\r\n clearInterval(intervalS);\r\n intervalS = 0;\r\n }\r\n}\r\n\r\nfunction cancelN(): void {\r\n if (intervalN) {\r\n clearInterval(intervalN);\r\n intervalN = 0;\r\n }\r\n}\r\n","import { GridsterItemComponentInterface } from './gridsterItem.interface';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\n\r\nexport class GridsterSwap {\r\n private swapedItem: GridsterItemComponentInterface | undefined;\r\n private gridsterItem: GridsterItemComponentInterface;\r\n private gridster: GridsterComponentInterface;\r\n\r\n constructor(gridsterItem: GridsterItemComponentInterface) {\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridsterItem.gridster;\r\n }\r\n\r\n destroy(): void {\r\n this.gridster = this.gridsterItem = this.swapedItem = null!;\r\n }\r\n\r\n swapItems(): void {\r\n if (this.gridster.$options.swap) {\r\n this.checkSwapBack();\r\n this.checkSwap(this.gridsterItem);\r\n }\r\n }\r\n\r\n checkSwapBack(): void {\r\n if (this.swapedItem) {\r\n const x: number = this.swapedItem.$item.x;\r\n const y: number = this.swapedItem.$item.y;\r\n this.swapedItem.$item.x = this.swapedItem.item.x || 0;\r\n this.swapedItem.$item.y = this.swapedItem.item.y || 0;\r\n if (this.gridster.checkCollision(this.swapedItem.$item)) {\r\n this.swapedItem.$item.x = x;\r\n this.swapedItem.$item.y = y;\r\n } else {\r\n this.swapedItem.setSize();\r\n this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\r\n this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\r\n this.swapedItem = undefined;\r\n }\r\n }\r\n }\r\n\r\n restoreSwapItem(): void {\r\n if (this.swapedItem) {\r\n this.swapedItem.$item.x = this.swapedItem.item.x || 0;\r\n this.swapedItem.$item.y = this.swapedItem.item.y || 0;\r\n this.swapedItem.setSize();\r\n this.swapedItem = undefined;\r\n }\r\n }\r\n\r\n setSwapItem(): void {\r\n if (this.swapedItem) {\r\n this.swapedItem.checkItemChanges(\r\n this.swapedItem.$item,\r\n this.swapedItem.item\r\n );\r\n this.swapedItem = undefined;\r\n }\r\n }\r\n\r\n checkSwap(pushedBy: GridsterItemComponentInterface): void {\r\n let gridsterItemCollision;\r\n if (this.gridster.$options.swapWhileDragging) {\r\n gridsterItemCollision = this.gridster.checkCollisionForSwaping(\r\n pushedBy.$item\r\n );\r\n } else {\r\n gridsterItemCollision = this.gridster.checkCollision(pushedBy.$item);\r\n }\r\n if (\r\n gridsterItemCollision &&\r\n gridsterItemCollision !== true &&\r\n gridsterItemCollision.canBeDragged()\r\n ) {\r\n const gridsterItemCollide: GridsterItemComponentInterface =\r\n gridsterItemCollision;\r\n const copyCollisionX = gridsterItemCollide.$item.x;\r\n const copyCollisionY = gridsterItemCollide.$item.y;\r\n const copyX = pushedBy.$item.x;\r\n const copyY = pushedBy.$item.y;\r\n const diffX = copyX - copyCollisionX;\r\n const diffY = copyY - copyCollisionY;\r\n gridsterItemCollide.$item.x = pushedBy.item.x - diffX;\r\n gridsterItemCollide.$item.y = pushedBy.item.y - diffY;\r\n pushedBy.$item.x = gridsterItemCollide.item.x + diffX;\r\n pushedBy.$item.y = gridsterItemCollide.item.y + diffY;\r\n if (\r\n this.gridster.checkCollision(gridsterItemCollide.$item) ||\r\n this.gridster.checkCollision(pushedBy.$item)\r\n ) {\r\n pushedBy.$item.x = copyX;\r\n pushedBy.$item.y = copyY;\r\n gridsterItemCollide.$item.x = copyCollisionX;\r\n gridsterItemCollide.$item.y = copyCollisionY;\r\n } else {\r\n gridsterItemCollide.setSize();\r\n this.swapedItem = gridsterItemCollide;\r\n if (this.gridster.$options.swapWhileDragging) {\r\n this.gridsterItem.checkItemChanges(\r\n this.gridsterItem.$item,\r\n this.gridsterItem.item\r\n );\r\n this.setSwapItem();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { NgZone } from '@angular/core';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { DirTypes } from './gridsterConfig.interface';\r\nimport { GridsterItemComponentInterface } from './gridsterItem.interface';\r\nimport { GridsterPush } from './gridsterPush.service';\r\nimport { cancelScroll, scroll } from './gridsterScroll.service';\r\n\r\nimport { GridsterSwap } from './gridsterSwap.service';\r\nimport { GridsterUtils } from './gridsterUtils.service';\r\n\r\nconst GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS = 'gridster-item-resizable-handler';\r\n\r\nenum Direction {\r\n UP = 'UP',\r\n DOWN = 'DOWN',\r\n LEFT = 'LEFT',\r\n RIGHT = 'RIGHT'\r\n}\r\n\r\nexport class GridsterDraggable {\r\n gridsterItem: GridsterItemComponentInterface;\r\n gridster: GridsterComponentInterface;\r\n lastMouse: {\r\n clientX: number;\r\n clientY: number;\r\n };\r\n offsetLeft!: number;\r\n offsetTop!: number;\r\n margin!: number;\r\n outerMarginTop!: number | null;\r\n outerMarginRight!: number | null;\r\n outerMarginBottom!: number | null;\r\n outerMarginLeft!: number | null;\r\n diffTop!: number;\r\n diffLeft!: number;\r\n originalClientX!: number;\r\n originalClientY!: number;\r\n top!: number;\r\n left!: number;\r\n height!: number;\r\n width!: number;\r\n positionX!: number;\r\n positionY!: number;\r\n positionXBackup!: number;\r\n positionYBackup!: number;\r\n enabled!: boolean;\r\n mousemove!: () => void;\r\n mouseup!: () => void;\r\n mouseleave!: () => void;\r\n cancelOnBlur!: () => void;\r\n touchmove!: () => void;\r\n touchend!: () => void;\r\n touchcancel!: () => void;\r\n mousedown!: () => void;\r\n touchstart!: () => void;\r\n push!: GridsterPush;\r\n swap!: GridsterSwap;\r\n path: Array<{ x: number; y: number }>;\r\n collision: GridsterItemComponentInterface | boolean = false;\r\n\r\n constructor(\r\n gridsterItem: GridsterItemComponentInterface,\r\n gridster: GridsterComponentInterface,\r\n private zone: NgZone\r\n ) {\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridster;\r\n this.lastMouse = {\r\n clientX: 0,\r\n clientY: 0\r\n };\r\n this.path = [];\r\n }\r\n\r\n destroy(): void {\r\n if (this.gridster.previewStyle) {\r\n this.gridster.previewStyle(true);\r\n }\r\n this.gridsterItem = this.gridster = this.collision = null!;\r\n if (this.mousedown) {\r\n this.mousedown();\r\n this.touchstart();\r\n }\r\n }\r\n\r\n dragStart(e: MouseEvent): void {\r\n if (e.which && e.which !== 1) {\r\n return;\r\n }\r\n\r\n if (\r\n this.gridster.options.draggable &&\r\n this.gridster.options.draggable.start\r\n ) {\r\n this.gridster.options.draggable.start(\r\n this.gridsterItem.item,\r\n this.gridsterItem,\r\n e\r\n );\r\n }\r\n\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.mousemove = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mousemove',\r\n this.dragMove\r\n );\r\n this.touchmove = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'touchmove',\r\n this.dragMove\r\n );\r\n });\r\n this.mouseup = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n this.dragStop\r\n );\r\n this.mouseleave = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseleave',\r\n this.dragStop\r\n );\r\n this.cancelOnBlur = this.gridsterItem.renderer.listen(\r\n 'window',\r\n 'blur',\r\n this.dragStop\r\n );\r\n this.touchend = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchend',\r\n this.dragStop\r\n );\r\n this.touchcancel = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchcancel',\r\n this.dragStop\r\n );\r\n this.gridsterItem.renderer.addClass(\r\n this.gridsterItem.el,\r\n 'gridster-item-moving'\r\n );\r\n this.margin = this.gridster.$options.margin;\r\n this.outerMarginTop = this.gridster.$options.outerMarginTop;\r\n this.outerMarginRight = this.gridster.$options.outerMarginRight;\r\n this.outerMarginBottom = this.gridster.$options.outerMarginBottom;\r\n this.outerMarginLeft = this.gridster.$options.outerMarginLeft;\r\n this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\r\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\r\n this.left = this.gridsterItem.left - this.margin;\r\n this.top = this.gridsterItem.top - this.margin;\r\n this.originalClientX = e.clientX;\r\n this.originalClientY = e.clientY;\r\n this.width = this.gridsterItem.width;\r\n this.height = this.gridsterItem.height;\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.diffLeft =\r\n e.clientX - this.gridster.el.scrollWidth + this.gridsterItem.left;\r\n } else {\r\n this.diffLeft = e.clientX + this.offsetLeft - this.margin - this.left;\r\n }\r\n this.diffTop = e.clientY + this.offsetTop - this.margin - this.top;\r\n this.gridster.movingItem = this.gridsterItem.$item;\r\n this.gridster.previewStyle(true);\r\n this.push = new GridsterPush(this.gridsterItem);\r\n this.swap = new GridsterSwap(this.gridsterItem);\r\n this.gridster.dragInProgress = true;\r\n this.gridster.updateGrid();\r\n this.path.push({\r\n x: this.gridsterItem.item.x || 0,\r\n y: this.gridsterItem.item.y || 0\r\n });\r\n }\r\n\r\n dragMove = (e: MouseEvent): void => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n GridsterUtils.checkTouchEvent(e);\r\n\r\n // get the directions of the mouse event\r\n let directions = this.getDirections(e);\r\n\r\n if (this.gridster.options.enableBoundaryControl) {\r\n // prevent moving up at the top of gridster\r\n if (\r\n directions.includes(Direction.UP) &&\r\n this.gridsterItem.el.getBoundingClientRect().top <\r\n this.gridster.el.getBoundingClientRect().top +\r\n (this.outerMarginTop ?? this.margin)\r\n ) {\r\n directions = directions.filter(direction => direction != Direction.UP);\r\n e = new MouseEvent(e.type, {\r\n clientX: e.clientX,\r\n clientY: this.lastMouse.clientY\r\n });\r\n }\r\n // prevent moving left at the leftmost column of gridster\r\n if (\r\n directions.includes(Direction.LEFT) &&\r\n this.gridsterItem.el.getBoundingClientRect().left <\r\n this.gridster.el.getBoundingClientRect().left +\r\n (this.outerMarginLeft ?? this.margin)\r\n ) {\r\n directions = directions.filter(\r\n direction => direction != Direction.LEFT\r\n );\r\n e = new MouseEvent(e.type, {\r\n clientX: this.lastMouse.clientX,\r\n clientY: e.clientY\r\n });\r\n }\r\n // prevent moving right at the rightmost column of gridster\r\n if (\r\n directions.includes(Direction.RIGHT) &&\r\n this.gridsterItem.el.getBoundingClientRect().right >\r\n this.gridster.el.getBoundingClientRect().right -\r\n (this.outerMarginRight ?? this.margin)\r\n ) {\r\n directions = directions.filter(\r\n direction => direction != Direction.RIGHT\r\n );\r\n e = new MouseEvent(e.type, {\r\n clientX: this.lastMouse.clientX,\r\n clientY: e.clientY\r\n });\r\n }\r\n // prevent moving down at the bottom of gridster\r\n if (\r\n directions.includes(Direction.DOWN) &&\r\n this.gridsterItem.el.getBoundingClientRect().bottom >\r\n this.gridster.el.getBoundingClientRect().bottom - \r\n (this.outerMarginBottom ?? this.margin)\r\n ) {\r\n directions = directions.filter(\r\n direction => direction != Direction.DOWN\r\n );\r\n e = new MouseEvent(e.type, {\r\n clientX: e.clientX,\r\n clientY: this.lastMouse.clientY\r\n });\r\n }\r\n }\r\n\r\n // do not change item location when there is no direction to go\r\n if (directions.length) {\r\n this.offsetLeft =\r\n this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\r\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\r\n scroll(\r\n this.gridster,\r\n this.left,\r\n this.top,\r\n this.width,\r\n this.height,\r\n e,\r\n this.lastMouse,\r\n <any>this.calculateItemPositionFromMousePosition\r\n );\r\n\r\n this.calculateItemPositionFromMousePosition(e);\r\n }\r\n };\r\n\r\n calculateItemPositionFromMousePosition = (e: MouseEvent): void => {\r\n if (this.gridster.options.scale) {\r\n this.calculateItemPositionWithScale(e, this.gridster.options.scale);\r\n } else {\r\n this.calculateItemPositionWithoutScale(e);\r\n }\r\n this.calculateItemPosition();\r\n this.lastMouse.clientX = e.clientX;\r\n this.lastMouse.clientY = e.clientY;\r\n this.zone.run(() => {\r\n this.gridster.updateGrid();\r\n });\r\n };\r\n\r\n calculateItemPositionWithScale(e: MouseEvent, scale: number): void {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.left =\r\n this.gridster.el.scrollWidth -\r\n this.originalClientX +\r\n (e.clientX - this.originalClientX) / scale +\r\n this.diffLeft;\r\n } else {\r\n this.left =\r\n this.originalClientX +\r\n (e.clientX - this.originalClientX) / scale +\r\n this.offsetLeft -\r\n this.diffLeft;\r\n }\r\n this.top =\r\n this.originalClientY +\r\n (e.clientY - this.originalClientY) / scale +\r\n this.offsetTop -\r\n this.diffTop;\r\n }\r\n\r\n calculateItemPositionWithoutScale(e: MouseEvent): void {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.left = this.gridster.el.scrollWidth - e.clientX + this.diffLeft;\r\n } else {\r\n this.left = e.clientX + this.offsetLeft - this.diffLeft;\r\n }\r\n\r\n this.top = e.clientY + this.offsetTop - this.diffTop;\r\n }\r\n\r\n dragStop = (e: MouseEvent): void => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n cancelScroll();\r\n this.cancelOnBlur();\r\n this.mousemove();\r\n this.mouseup();\r\n this.mouseleave();\r\n this.touchmove();\r\n this.touchend();\r\n this.touchcancel();\r\n this.gridsterItem.renderer.removeClass(\r\n this.gridsterItem.el,\r\n 'gridster-item-moving'\r\n );\r\n this.gridster.dragInProgress = false;\r\n this.gridster.updateGrid();\r\n this.path = [];\r\n if (\r\n this.gridster.options.draggable &&\r\n this.gridster.options.draggable.stop\r\n ) {\r\n Promise.resolve(\r\n this.gridster.options.draggable.stop(\r\n this.gridsterItem.item,\r\n this.gridsterItem,\r\n e\r\n )\r\n ).then(this.makeDrag, this.cancelDrag);\r\n } else {\r\n this.makeDrag();\r\n }\r\n setTimeout(() => {\r\n if (this.gridster) {\r\n this.gridster.movingItem = null;\r\n this.gridster.previewStyle(true);\r\n }\r\n });\r\n };\r\n\r\n cancelDrag = (): void => {\r\n this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\r\n this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\r\n this.gridsterItem.setSize();\r\n if (this.push) {\r\n this.push.restoreItems();\r\n }\r\n if (this.swap) {\r\n this.swap.restoreSwapItem();\r\n }\r\n if (this.push) {\r\n this.push.destroy();\r\n this.push = null!;\r\n }\r\n if (this.swap) {\r\n this.swap.destroy();\r\n this.swap = null!;\r\n }\r\n };\r\n\r\n makeDrag = (): void => {\r\n if (\r\n this.gridster.$options.draggable.dropOverItems &&\r\n this.gridster.options.draggable &&\r\n this.gridster.options.draggable.dropOverItemsCallback &&\r\n this.collision &&\r\n this.collision !== true &&\r\n this.collision.$item\r\n ) {\r\n this.gridster.options.draggable.dropOverItemsCallback(\r\n this.gridsterItem.item,\r\n this.collision.item,\r\n this.gridster\r\n );\r\n }\r\n this.collision = false;\r\n this.gridsterItem.setSize();\r\n this.gridsterItem.checkItemChanges(\r\n this.gridsterItem.$item,\r\n this.gridsterItem.item\r\n );\r\n if (this.push) {\r\n this.push.setPushedItems();\r\n }\r\n if (this.swap) {\r\n this.swap.setSwapItem();\r\n }\r\n if (this.push) {\r\n this.push.destroy();\r\n this.push = null!;\r\n }\r\n if (this.swap) {\r\n this.swap.destroy();\r\n this.swap = null!;\r\n }\r\n };\r\n\r\n calculateItemPosition(): void {\r\n this.gridster.movingItem = this.gridsterItem.$item;\r\n this.positionX = this.gridster.pixelsToPositionX(this.left, Math.round);\r\n this.positionY = this.gridster.pixelsToPositionY(this.top, Math.round);\r\n this.positionXBackup = this.gridsterItem.$item.x;\r\n this.positionYBackup = this.gridsterItem.$item.y;\r\n this.gridsterItem.$item.x = this.positionX;\r\n if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.x = this.positionXBackup;\r\n }\r\n this.gridsterItem.$item.y = this.positionY;\r\n if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.y = this.positionYBackup;\r\n }\r\n this.gridster.gridRenderer.setCellPosition(\r\n this.gridsterItem.renderer,\r\n this.gridsterItem.el,\r\n this.left,\r\n this.top\r\n );\r\n\r\n if (\r\n this.positionXBackup !== this.gridsterItem.$item.x ||\r\n this.positionYBackup !== this.gridsterItem.$item.y\r\n ) {\r\n const lastPosition = this.path[this.path.length - 1];\r\n let direction = '';\r\n if (lastPosition.x < this.gridsterItem.$item.x) {\r\n direction = this.push.fromWest;\r\n } else if (lastPosition.x > this.gridsterItem.$item.x) {\r\n direction = this.push.fromEast;\r\n } else if (lastPosition.y < this.gridsterItem.$item.y) {\r\n direction = this.push.fromNorth;\r\n } else if (lastPosition.y > this.gridsterItem.$item.y) {\r\n direction = this.push.fromSouth;\r\n }\r\n this.push.pushItems(direction, this.gridster.$options.disablePushOnDrag);\r\n this.swap.swapItems();\r\n this.collision = this.gridster.checkCollision(this.gridsterItem.$item);\r\n if (this.collision) {\r\n this.gridsterItem.$item.x = this.positionXBackup;\r\n this.gridsterItem.$item.y = this.positionYBackup;\r\n if (\r\n this.gridster.$options.draggable.dropOverItems &&\r\n this.collision !== true &&\r\n this.collision.$item\r\n ) {\r\n this.gridster.movingItem = null;\r\n }\r\n } else {\r\n this.path.push({\r\n x: this.gridsterItem.$item.x,\r\n y: this.gridsterItem.$item.y\r\n });\r\n }\r\n this.push.checkPushBack();\r\n } else {\r\n // reset the collision when you drag and drop on an adjacent cell that is not empty\r\n // and go back to the cell you were in from the beginning,\r\n // this is to prevent `dropOverItemsCallback'\r\n this.collision = false;\r\n }\r\n this.gridster.previewStyle(true);\r\n }\r\n\r\n toggle(): void {\r\n const enableDrag = this.gridsterItem.canBeDragged();\r\n if (!this.enabled && enableDrag) {\r\n this.enabled = !this.enabled;\r\n this.mousedown = this.gridsterItem.renderer.listen(\r\n this.gridsterItem.el,\r\n 'mousedown',\r\n this.dragStartDelay\r\n );\r\n this.touchstart = this.gridsterItem.renderer.listen(\r\n this.gridsterItem.el,\r\n 'touchstart',\r\n this.dragStartDelay\r\n );\r\n } else if (this.enabled && !enableDrag) {\r\n this.enabled = !this.enabled;\r\n this.mousedown();\r\n this.touchstart();\r\n }\r\n }\r\n\r\n dragStartDelay = (e: MouseEvent): void => {\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS)) {\r\n return;\r\n }\r\n if (GridsterUtils.checkContentClassForEvent(this.gridster, e)) {\r\n return;\r\n }\r\n GridsterUtils.checkTouchEvent(e);\r\n if (!this.gridster.$options.draggable.delayStart) {\r\n this.dragStart(e);\r\n return;\r\n }\r\n const timeout = setTimeout(() => {\r\n this.dragStart(e);\r\n cancelDrag();\r\n }, this.gridster.$options.draggable.delayStart);\r\n const cancelMouse = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n cancelDrag\r\n );\r\n const cancelMouseLeave = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseleave',\r\n cancelDrag\r\n );\r\n const cancelOnBlur = this.gridsterItem.renderer.listen(\r\n 'window',\r\n 'blur',\r\n cancelDrag\r\n );\r\n const cancelTouchMove = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchmove',\r\n cancelMove\r\n );\r\n const cancelTouchEnd = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchend',\r\n cancelDrag\r\n );\r\n const cancelTouchCancel = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchcancel',\r\n cancelDrag\r\n );\r\n\r\n function cancelMove(eventMove: MouseEvent): void {\r\n GridsterUtils.checkTouchEvent(eventMove);\r\n if (\r\n Math.abs(eventMove.clientX - e.clientX) > 9 ||\r\n Math.abs(eventMove.clientY - e.clientY) > 9\r\n ) {\r\n cancelDrag();\r\n }\r\n }\r\n\r\n function cancelDrag(): void {\r\n clearTimeout(timeout);\r\n cancelOnBlur();\r\n cancelMouse();\r\n cancelMouseLeave();\r\n cancelTouchMove();\r\n cancelTouchEnd();\r\n cancelTouchCancel();\r\n }\r\n };\r\n\r\n /**\r\n * Returns the list of directions for given mouse event\r\n * @param e Mouse event\r\n * */\r\n private getDirections(e: MouseEvent) {\r\n const directions: string[] = [];\r\n if (this.lastMouse.clientX === 0 && this.lastMouse.clientY === 0) {\r\n this.lastMouse.clientY = e.clientY;\r\n this.lastMouse.clientX = e.clientX;\r\n }\r\n if (this.lastMouse.clientY > e.clientY) {\r\n directions.push(Direction.UP);\r\n }\r\n if (this.lastMouse.clientY < e.clientY) {\r\n directions.push(Direction.DOWN);\r\n }\r\n if (this.lastMouse.clientX < e.clientX) {\r\n directions.push(Direction.RIGHT);\r\n }\r\n if (this.lastMouse.clientX > e.clientX) {\r\n directions.push(Direction.LEFT);\r\n }\r\n return directions;\r\n }\r\n}\r\n","import {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\n\r\nexport class GridsterPushResize {\r\n public fromSouth: string;\r\n public fromNorth: string;\r\n public fromEast: string;\r\n public fromWest: string;\r\n private pushedItems: Array<GridsterItemComponentInterface>;\r\n private pushedItemsPath: Array<Array<GridsterItem>>;\r\n private gridsterItem: GridsterItemComponentInterface;\r\n private gridster: GridsterComponentInterface;\r\n private tryPattern: {\r\n fromEast: (\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ) => boolean;\r\n fromWest: (\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ) => boolean;\r\n fromNorth: (\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ) => boolean;\r\n fromSouth: (\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ) => boolean;\r\n };\r\n\r\n constructor(gridsterItem: GridsterItemComponentInterface) {\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridsterItem.gridster;\r\n this.tryPattern = {\r\n fromEast: this.tryWest,\r\n fromWest: this.tryEast,\r\n fromNorth: this.trySouth,\r\n fromSouth: this.tryNorth\r\n };\r\n this.fromSouth = 'fromSouth';\r\n this.fromNorth = 'fromNorth';\r\n this.fromEast = 'fromEast';\r\n this.fromWest = 'fromWest';\r\n }\r\n\r\n destroy(): void {\r\n this.gridster = this.gridsterItem = null!;\r\n }\r\n\r\n pushItems(direction: string): boolean {\r\n if (this.gridster.$options.pushResizeItems) {\r\n return this.push(this.gridsterItem, direction);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n restoreItems(): void {\r\n let i = 0;\r\n const l: number = this.pushedItems.length;\r\n let pushedItem: GridsterItemComponentInterface;\r\n for (; i < l; i++) {\r\n pushedItem = this.pushedItems[i];\r\n pushedItem.$item.x = pushedItem.item.x || 0;\r\n pushedItem.$item.y = pushedItem.item.y || 0;\r\n pushedItem.$item.cols = pushedItem.item.cols || 1;\r\n pushedItem.$item.row = pushedItem.item.row || 1;\r\n pushedItem.setSize();\r\n }\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n }\r\n\r\n setPushedItems(): void {\r\n let i = 0;\r\n const l: number = this.pushedItems.length;\r\n let pushedItem: GridsterItemComponentInterface;\r\n for (; i < l; i++) {\r\n pushedItem = this.pushedItems[i];\r\n pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);\r\n }\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n }\r\n\r\n checkPushBack(): void {\r\n let i: number = this.pushedItems.length - 1;\r\n let change = false;\r\n for (; i > -1; i--) {\r\n if (this.checkPushedItem(this.pushedItems[i], i)) {\r\n change = true;\r\n }\r\n }\r\n if (change) {\r\n this.checkPushBack();\r\n }\r\n }\r\n\r\n private push(\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const gridsterItemCollision: GridsterItemComponentInterface | boolean =\r\n this.gridster.checkCollision(gridsterItem.$item);\r\n if (\r\n gridsterItemCollision &&\r\n gridsterItemCollision !== true &&\r\n gridsterItemCollision !== this.gridsterItem &&\r\n gridsterItemCollision.canBeResized()\r\n ) {\r\n let tryPattern: any = this.tryPattern;\r\n if (\r\n tryPattern[direction].call(\r\n this,\r\n gridsterItemCollision,\r\n gridsterItem,\r\n direction\r\n )\r\n ) {\r\n return true;\r\n }\r\n } else if (gridsterItemCollision === false) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private trySouth(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const backUpY = gridsterItemCollide.$item.y;\r\n const backUpRows = gridsterItemCollide.$item.rows;\r\n gridsterItemCollide.$item.y =\r\n gridsterItem.$item.y + gridsterItem.$item.rows;\r\n gridsterItemCollide.$item.rows =\r\n backUpRows + backUpY - gridsterItemCollide.$item.y;\r\n if (\r\n !this.gridster.checkCollisionTwoItems(\r\n gridsterItemCollide.$item,\r\n gridsterItem.$item\r\n ) &&\r\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\r\n ) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n this.push(gridsterItem, direction);\r\n return true;\r\n } else {\r\n gridsterItemCollide.$item.y = backUpY;\r\n gridsterItemCollide.$item.rows = backUpRows;\r\n }\r\n return false;\r\n }\r\n\r\n private tryNorth(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const backUpRows = gridsterItemCollide.$item.rows;\r\n gridsterItemCollide.$item.rows =\r\n gridsterItem.$item.y - gridsterItemCollide.$item.y;\r\n if (\r\n !this.gridster.checkCollisionTwoItems(\r\n gridsterItemCollide.$item,\r\n gridsterItem.$item\r\n ) &&\r\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\r\n ) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n this.push(gridsterItem, direction);\r\n return true;\r\n } else {\r\n gridsterItemCollide.$item.rows = backUpRows;\r\n }\r\n return false;\r\n }\r\n\r\n private tryEast(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const backUpX = gridsterItemCollide.$item.x;\r\n const backUpCols = gridsterItemCollide.$item.cols;\r\n gridsterItemCollide.$item.x =\r\n gridsterItem.$item.x + gridsterItem.$item.cols;\r\n gridsterItemCollide.$item.cols =\r\n backUpCols + backUpX - gridsterItemCollide.$item.x;\r\n if (\r\n !this.gridster.checkCollisionTwoItems(\r\n gridsterItemCollide.$item,\r\n gridsterItem.$item\r\n ) &&\r\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\r\n ) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n this.push(gridsterItem, direction);\r\n return true;\r\n } else {\r\n gridsterItemCollide.$item.x = backUpX;\r\n gridsterItemCollide.$item.cols = backUpCols;\r\n }\r\n return false;\r\n }\r\n\r\n private tryWest(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const backUpCols = gridsterItemCollide.$item.cols;\r\n gridsterItemCollide.$item.cols =\r\n gridsterItem.$item.x - gridsterItemCollide.$item.x;\r\n if (\r\n !this.gridster.checkCollisionTwoItems(\r\n gridsterItemCollide.$item,\r\n gridsterItem.$item\r\n ) &&\r\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\r\n ) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n this.push(gridsterItem, direction);\r\n return true;\r\n } else {\r\n gridsterItemCollide.$item.cols = backUpCols;\r\n }\r\n return false;\r\n }\r\n\r\n private addToPushed(gridsterItem: GridsterItemComponentInterface): void {\r\n if (this.pushedItems.indexOf(gridsterItem) < 0) {\r\n this.pushedItems.push(gridsterItem);\r\n this.pushedItemsPath.push([\r\n {\r\n x: gridsterItem.item.x || 0,\r\n y: gridsterItem.item.y || 0,\r\n cols: gridsterItem.item.cols || 0,\r\n rows: gridsterItem.item.rows || 0\r\n },\r\n {\r\n x: gridsterItem.$item.x,\r\n y: gridsterItem.$item.y,\r\n cols: gridsterItem.$item.cols,\r\n rows: gridsterItem.$item.rows\r\n }\r\n ]);\r\n } else {\r\n const i = this.pushedItems.indexOf(gridsterItem);\r\n this.pushedItemsPath[i].push({\r\n x: gridsterItem.$item.x,\r\n y: gridsterItem.$item.y,\r\n cols: gridsterItem.$item.cols,\r\n rows: gridsterItem.$item.rows\r\n });\r\n }\r\n }\r\n\r\n private removeFromPushed(i: number): void {\r\n if (i > -1) {\r\n this.pushedItems.splice(i, 1);\r\n this.pushedItemsPath.splice(i, 1);\r\n }\r\n }\r\n\r\n private checkPushedItem(\r\n pushedItem: GridsterItemComponentInterface,\r\n i: number\r\n ): boolean {\r\n const path = this.pushedItemsPath[i];\r\n let j = path.length - 2;\r\n let lastPosition: { x: number; y: number; cols: number; rows: number };\r\n let x;\r\n let y;\r\n let cols;\r\n let rows;\r\n for (; j > -1; j--) {\r\n lastPosition = path[j];\r\n x = pushedItem.$item.x;\r\n y = pushedItem.$item.y;\r\n cols = pushedItem.$item.cols;\r\n rows = pushedItem.$item.rows;\r\n pushedItem.$item.x = lastPosition.x;\r\n pushedItem.$item.y = lastPosition.y;\r\n pushedItem.$item.cols = lastPosition.cols;\r\n pushedItem.$item.rows = lastPosition.rows;\r\n if (!this.gridster.findItemWithItem(pushedItem.$item)) {\r\n pushedItem.setSize();\r\n path.splice(j + 1, path.length - 1 - j);\r\n } else {\r\n pushedItem.$item.x = x;\r\n pushedItem.$item.y = y;\r\n pushedItem.$item.cols = cols;\r\n pushedItem.$item.rows = rows;\r\n }\r\n }\r\n if (path.length < 2) {\r\n this.removeFromPushed(i);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { NgZone } from '@angular/core';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { DirTypes } from './gridsterConfig.interface';\r\nimport { GridsterItemComponentInterface } from './gridsterItem.interface';\r\nimport { GridsterPush } from './gridsterPush.service';\r\nimport { GridsterPushResize } from './gridsterPushResize.service';\r\nimport { GridsterResizeEventType } from './gridsterResizeEventType.interface';\r\n\r\nimport { cancelScroll, scroll } from './gridsterScroll.service';\r\nimport { GridsterUtils } from './gridsterUtils.service';\r\n\r\nexport class GridsterResizable {\r\n gridsterItem: GridsterItemComponentInterface;\r\n gridster: GridsterComponentInterface;\r\n lastMouse: {\r\n clientX: number;\r\n clientY: number;\r\n };\r\n itemBackup: number[];\r\n resizeEventScrollType: GridsterResizeEventType;\r\n\r\n /**\r\n * The direction function may reference any of the `GridsterResizable` class methods, that are\r\n * responsible for gridster resize when the `dragmove` event is being handled. E.g. it may reference\r\n * the `handleNorth` method when the north handle is pressed and moved by a mouse.\r\n */\r\n private directionFunction:\r\n | ((event: Pick<MouseEvent, 'clientX' | 'clientY'>) => void)\r\n | null = null;\r\n\r\n resizeEnabled!: boolean;\r\n resizableHandles!: {\r\n s: boolean;\r\n e: boolean;\r\n n: boolean;\r\n w: boolean;\r\n se: boolean;\r\n ne: boolean;\r\n sw: boolean;\r\n nw: boolean;\r\n };\r\n mousemove!: () => void;\r\n mouseup!: () => void;\r\n mouseleave!: () => void;\r\n cancelOnBlur!: () => void;\r\n touchmove!: () => void;\r\n touchend!: () => void;\r\n touchcancel!: () => void;\r\n push!: GridsterPush;\r\n pushResize!: GridsterPushResize;\r\n minHeight!: number;\r\n minWidth!: number;\r\n offsetTop!: number;\r\n offsetLeft!: number;\r\n diffTop!: number;\r\n diffLeft!: number;\r\n diffRight!: number;\r\n diffBottom!: number;\r\n margin!: number;\r\n outerMarginTop!: number | null;\r\n outerMarginRight!: number | null;\r\n outerMarginBottom!: number | null;\r\n outerMarginLeft!: number | null;\r\n originalClientX!: number;\r\n originalClientY!: number;\r\n top!: number;\r\n left!: number;\r\n bottom!: number;\r\n right!: number;\r\n width!: number;\r\n height!: number;\r\n newPosition!: number;\r\n\r\n constructor(\r\n gridsterItem: GridsterItemComponentInterface,\r\n gridster: GridsterComponentInterface,\r\n private zone: NgZone\r\n ) {\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridster;\r\n this.lastMouse = {\r\n clientX: 0,\r\n clientY: 0\r\n };\r\n this.itemBackup = [0, 0, 0, 0];\r\n this.resizeEventScrollType = {\r\n west: false,\r\n east: false,\r\n north: false,\r\n south: false\r\n };\r\n }\r\n\r\n destroy(): void {\r\n this.gridster?.previewStyle();\r\n this.gridster = this.gridsterItem = null!;\r\n }\r\n\r\n dragStart(e: MouseEvent): void {\r\n if (e.which && e.which !== 1) {\r\n return;\r\n }\r\n if (\r\n this.gridster.options.resizable &&\r\n this.gridster.options.resizable.start\r\n ) {\r\n this.gridster.options.resizable.start(\r\n this.gridsterItem.item,\r\n this.gridsterItem,\r\n e\r\n );\r\n }\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.mousemove = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mousemove',\r\n this.dragMove\r\n );\r\n this.touchmove = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'touchmove',\r\n this.dragMove\r\n );\r\n });\r\n this.mouseup = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n this.dragStop\r\n );\r\n this.mouseleave = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseleave',\r\n this.dragStop\r\n );\r\n this.cancelOnBlur = this.gridsterItem.renderer.listen(\r\n 'window',\r\n 'blur',\r\n this.dragStop\r\n );\r\n this.touchend = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchend',\r\n this.dragStop\r\n );\r\n this.touchcancel = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchcancel',\r\n this.dragStop\r\n );\r\n\r\n this.gridsterItem.renderer.addClass(\r\n this.gridsterItem.el,\r\n 'gridster-item-resizing'\r\n );\r\n this.lastMouse.clientX = e.clientX;\r\n this.lastMouse.clientY = e.clientY;\r\n this.left = this.gridsterItem.left;\r\n this.top = this.gridsterItem.top;\r\n this.originalClientX = e.clientX;\r\n this.originalClientY = e.clientY;\r\n this.width = this.gridsterItem.width;\r\n this.height = this.gridsterItem.height;\r\n this.bottom = this.gridsterItem.top + this.gridsterItem.height;\r\n this.right = this.gridsterItem.left + this.gridsterItem.width;\r\n this.margin = this.gridster.$options.margin;\r\n this.outerMarginTop = this.gridster.$options.outerMarginTop;\r\n this.outerMarginRight = this.gridster.$options.outerMarginRight;\r\n this.outerMarginBottom = this.gridster.$options.outerMarginBottom;\r\n this.outerMarginLeft = this.gridster.$options.outerMarginLeft;\r\n this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\r\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\r\n this.diffLeft = e.clientX + this.offsetLeft - this.left;\r\n this.diffRight = e.clientX + this.offsetLeft - this.right;\r\n this.diffTop = e.clientY + this.offsetTop - this.top;\r\n this.diffBottom = e.clientY + this.offsetTop - this.bottom;\r\n this.minHeight =\r\n this.gridster.positionYToPixels(\r\n this.gridsterItem.$item.minItemRows ||\r\n this.gridster.$options.minItemRows\r\n ) - this.margin;\r\n this.minWidth =\r\n this.gridster.positionXToPixels(\r\n this.gridsterItem.$item.minItemCols ||\r\n this.gridster.$options.minItemCols\r\n ) - this.margin;\r\n this.gridster.movingItem = this.gridsterItem.$item;\r\n this.gridster.previewStyle();\r\n this.push = new GridsterPush(this.gridsterItem);\r\n this.pushResize = new GridsterPushResize(this.gridsterItem);\r\n this.gridster.dragInProgress = true;\r\n this.gridster.updateGrid();\r\n\r\n const { classList } = e.target as HTMLElement;\r\n\r\n if (classList.contains('handle-n')) {\r\n this.resizeEventScrollType.north = true;\r\n this.directionFunction = <any> this.handleNorth;\r\n } else if (classList.contains('handle-w')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleEast;\r\n } else {\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleWest;\r\n }\r\n } else if (classList.contains('handle-s')) {\r\n this.resizeEventScrollType.south = true;\r\n this.directionFunction =<any> this.handleSouth;\r\n } else if (classList.contains('handle-e')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleWest;\r\n } else {\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleEast;\r\n }\r\n } else if (classList.contains('handle-nw')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.north = true;\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleNorthEast;\r\n } else {\r\n this.resizeEventScrollType.north = true;\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleNorthWest;\r\n }\r\n } else if (classList.contains('handle-ne')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.north = true;\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleNorthWest;\r\n } else {\r\n this.resizeEventScrollType.north = true;\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleNorthEast;\r\n }\r\n } else if (classList.contains('handle-sw')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.south = true;\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleSouthEast;\r\n } else {\r\n this.resizeEventScrollType.south = true;\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleSouthWest;\r\n }\r\n } else if (classList.contains('handle-se')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.south = true;\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleSouthWest;\r\n } else {\r\n this.resizeEventScrollType.south = true;\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleSouthEast;\r\n }\r\n }\r\n }\r\n\r\n dragMove = (e: MouseEvent): void => {\r\n if (this.directionFunction === null) {\r\n throw new Error(\r\n 'The `directionFunction` has not been set before calling `dragMove`.'\r\n );\r\n }\r\n\r\n e.stopPropagation();\r\n e.preventDefault();\r\n GridsterUtils.checkTouchEvent(e);\r\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\r\n this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\r\n scroll(\r\n this.gridster,\r\n this.left,\r\n this.top,\r\n this.width,\r\n this.height,\r\n e,\r\n this.lastMouse,\r\n this.directionFunction,\r\n true,\r\n this.resizeEventScrollType\r\n );\r\n\r\n const scale = this.gridster.options.scale || 1;\r\n this.directionFunction({\r\n clientX:\r\n this.originalClientX + (e.clientX - this.originalClientX) / scale,\r\n clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale\r\n });\r\n\r\n this.lastMouse.clientX = e.clientX;\r\n this.lastMouse.clientY = e.clientY;\r\n this.zone.run(() => {\r\n this.gridster.updateGrid();\r\n });\r\n };\r\n\r\n dragStop = (e: MouseEvent): void => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n cancelScroll();\r\n this.mousemove();\r\n this.mouseup();\r\n this.mouseleave();\r\n this.cancelOnBlur();\r\n this.touchmove();\r\n this.touchend();\r\n this.touchcancel();\r\n this.gridster.dragInProgress = false;\r\n this.gridster.updateGrid();\r\n if (\r\n this.gridster.options.resizable &&\r\n this.gridster.options.resizable.stop\r\n ) {\r\n Promise.resolve(\r\n this.gridster.options.resizable.stop(\r\n this.gridsterItem.item,\r\n this.gridsterItem,\r\n e\r\n )\r\n ).then(this.makeResize, this.cancelResize);\r\n } else {\r\n this.makeResize();\r\n }\r\n setTimeout(() => {\r\n this.gridsterItem.renderer.removeClass(\r\n this.gridsterItem.el,\r\n 'gridster-item-resizing'\r\n );\r\n if (this.gridster) {\r\n this.gridster.movingItem = null;\r\n this.gridster.previewStyle();\r\n }\r\n });\r\n };\r\n\r\n cancelResize = (): void => {\r\n this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;\r\n this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;\r\n this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\r\n this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\r\n this.gridsterItem.setSize();\r\n this.push.restoreItems();\r\n this.pushResize.restoreItems();\r\n this.push.destroy();\r\n this.push = null!;\r\n this.pushResize.destroy();\r\n this.pushResize = null!;\r\n };\r\n\r\n makeResize = (): void => {\r\n this.gridsterItem.setSize();\r\n this.gridsterItem.checkItemChanges(\r\n this.gridsterItem.$item,\r\n this.gridsterItem.item\r\n );\r\n this.push.setPushedItems();\r\n this.pushResize.setPushedItems();\r\n this.push.destroy();\r\n this.push = null!;\r\n this.pushResize.destroy();\r\n this.pushResize = null!;\r\n };\r\n\r\n private handleNorth = (e: MouseEvent): void => {\r\n this.top = e.clientY + this.offsetTop - this.diffTop;\r\n this.height = this.bottom - this.top;\r\n if (this.minHeight > this.height) {\r\n this.height = this.minHeight;\r\n this.top = this.bottom - this.minHeight;\r\n } else if (this.gridster.options.enableBoundaryControl) {\r\n this.top = Math.max(0, this.top);\r\n this.height = this.bottom - this.top;\r\n }\r\n const marginTop = this.gridster.options.pushItems ? this.margin : 0;\r\n this.newPosition = this.gridster.pixelsToPositionY(\r\n this.top + marginTop,\r\n Math.floor\r\n );\r\n if (this.gridsterItem.$item.y !== this.newPosition) {\r\n this.itemBackup[1] = this.gridsterItem.$item.y;\r\n this.itemBackup[3] = this.gridsterItem.$item.rows;\r\n this.gridsterItem.$item.rows +=\r\n this.gridsterItem.$item.y - this.newPosition;\r\n this.gridsterItem.$item.y = this.newPosition;\r\n this.pushResize.pushItems(this.pushResize.fromSouth);\r\n this.push.pushItems(\r\n this.push.fromSouth,\r\n this.gridster.$options.disablePushOnResize\r\n );\r\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.y = this.itemBackup[1];\r\n this.gridsterItem.$item.rows = this.itemBackup[3];\r\n this.top = this.gridster.positionYToPixels(this.gridsterItem.$item.y);\r\n this.setItemTop(\r\n this.gridster.positionYToPixels(this.gridsterItem.$item.y)\r\n );\r\n this.setItemHeight(\r\n this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -\r\n this.margin\r\n );\r\n return;\r\n } else {\r\n this.gridster.previewStyle();\r\n }\r\n this.pushResize.checkPushBack();\r\n this.push.checkPushBack();\r\n }\r\n this.setItemTop(this.top);\r\n this.setItemHeight(this.height);\r\n };\r\n\r\n private handleWest = (e: MouseEvent): void => {\r\n const clientX =\r\n this.gridster.$options.dirType === DirTypes.RTL\r\n ? this.originalClientX + (this.originalClientX - e.clientX)\r\n : e.clientX;\r\n this.left = clientX + this.offsetLeft - this.diffLeft;\r\n\r\n this.width = this.right - this.left;\r\n if (this.minWidth > this.width) {\r\n this.width = this.minWidth;\r\n this.left = this.right - this.minWidth;\r\n } else if (this.gridster.options.enableBoundaryControl) {\r\n this.left = Math.max(0, this.left);\r\n this.width = this.right - this.left;\r\n }\r\n const marginLeft = this.gridster.options.pushItems ? this.margin : 0;\r\n this.newPosition = this.gridster.pixelsToPositionX(\r\n this.left + marginLeft,\r\n Math.floor\r\n );\r\n if (this.gridsterItem.$item.x !== this.newPosition) {\r\n this.itemBackup[0] = this.gridsterItem.$item.x;\r\n this.itemBackup[2] = this.gridsterItem.$item.cols;\r\n this.gridsterItem.$item.cols +=\r\n this.gridsterItem.$item.x - this.newPosition;\r\n this.gridsterItem.$item.x = this.newPosition;\r\n this.pushResize.pushItems(this.pushResize.fromEast);\r\n this.push.pushItems(\r\n this.push.fromEast,\r\n this.gridster.$options.disablePushOnResize\r\n );\r\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.x = this.itemBackup[0];\r\n this.gridsterItem.$item.cols = this.itemBackup[2];\r\n this.left = this.gridster.positionXToPixels(this.gridsterItem.$item.x);\r\n this.setItemLeft(\r\n this.gridster.positionXToPixels(this.gridsterItem.$item.x)\r\n );\r\n this.setItemWidth(\r\n this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -\r\n this.margin\r\n );\r\n return;\r\n } else {\r\n this.gridster.previewStyle();\r\n }\r\n this.pushResize.checkPushBack();\r\n this.push.checkPushBack();\r\n }\r\n this.setItemLeft(this.left);\r\n this.setItemWidth(this.width);\r\n };\r\n\r\n private handleSouth = (e: MouseEvent): void => {\r\n this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;\r\n if (this.minHeight > this.height) {\r\n this.height = this.minHeight;\r\n }\r\n this.bottom = this.top + this.height;\r\n if (this.gridster.options.enableBoundaryControl) {\r\n const margin = this.outerMarginBottom ?? this.margin;\r\n const box = this.gridster.el.getBoundingClientRect();\r\n this.bottom = Math.min(\r\n this.bottom,\r\n box.bottom - box.top - 2 * margin\r\n );\r\n this.height = this.bottom - this.top;\r\n }\r\n const marginBottom = this.gridster.options.pushItems ? 0 : this.margin;\r\n this.newPosition = this.gridster.pixelsToPositionY(\r\n this.bottom + marginBottom,\r\n Math.ceil\r\n );\r\n if (\r\n this.gridsterItem.$item.y + this.gridsterItem.$item.rows !==\r\n this.newPosition\r\n ) {\r\n this.itemBackup[3] = this.gridsterItem.$item.rows;\r\n this.gridsterItem.$item.rows =\r\n this.newPosition - this.gridsterItem.$item.y;\r\n this.pushResize.pushItems(this.pushResize.fromNorth);\r\n this.push.pushItems(\r\n this.push.fromNorth,\r\n this.gridster.$options.disablePushOnResize\r\n );\r\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.rows = this.itemBackup[3];\r\n this.setItemHeight(\r\n this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -\r\n this.margin\r\n );\r\n return;\r\n } else {\r\n this.gridster.previewStyle();\r\n }\r\n this.pushResize.checkPushBack();\r\n this.push.checkPushBack();\r\n }\r\n this.setItemHeight(this.height);\r\n };\r\n\r\n private handleEast = (e: MouseEvent): void => {\r\n const clientX =\r\n this.gridster.$options.dirType === DirTypes.RTL\r\n ? this.originalClientX + (this.originalClientX - e.clientX)\r\n : e.clientX;\r\n this.width = clientX + this.offsetLeft - this.diffRight - this.left;\r\n\r\n if (this.minWidth > this.width) {\r\n this.width = this.minWidth;\r\n }\r\n this.right = this.left + this.width;\r\n if (this.gridster.options.enableBoundaryControl) {\r\n const margin = this.outerMarginRight ?? this.margin;\r\n const box = this.gridster.el.getBoundingClientRect();\r\n this.right = Math.min(this.right, box.right - box.left - 2 * margin);\r\n this.width = this.right - this.left;\r\n }\r\n const marginRight = this.gridster.options.pushItems ? 0 : this.margin;\r\n this.newPosition = this.gridster.pixelsToPositionX(\r\n this.right + marginRight,\r\n Math.ceil\r\n );\r\n if (\r\n this.gridsterItem.$item.x + this.gridsterItem.$item.cols !==\r\n this.newPosition\r\n ) {\r\n this.itemBackup[2] = this.gridsterItem.$item.cols;\r\n this.gridsterItem.$item.cols =\r\n this.newPosition - this.gridsterItem.$item.x;\r\n this.pushResize.pushItems(this.pushResize.fromWest);\r\n this.push.pushItems(\r\n this.push.fromWest,\r\n this.gridster.$options.disablePushOnResize\r\n );\r\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.cols = this.itemBackup[2];\r\n this.setItemWidth(\r\n this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -\r\n this.margin\r\n );\r\n return;\r\n } else {\r\n this.gridster.previewStyle();\r\n }\r\n this.pushResize.checkPushBack();\r\n this.push.checkPushBack();\r\n }\r\n this.setItemWidth(this.width);\r\n };\r\n\r\n private handleNorthWest = (e: MouseEvent): void => {\r\n this.handleNorth(e);\r\n this.handleWest(e);\r\n };\r\n\r\n private handleNorthEast = (e: MouseEvent): void => {\r\n this.handleNorth(e);\r\n this.handleEast(e);\r\n };\r\n\r\n private handleSouthWest = (e: MouseEvent): void => {\r\n this.handleSouth(e);\r\n this.handleWest(e);\r\n };\r\n\r\n private handleSouthEast = (e: MouseEvent): void => {\r\n this.handleSouth(e);\r\n this.handleEast(e);\r\n };\r\n\r\n toggle(): void {\r\n this.resizeEnabled = this.gridsterItem.canBeResized();\r\n this.resizableHandles = this.gridsterItem.getResizableHandles();\r\n }\r\n\r\n dragStartDelay(e: MouseEvent | TouchEvent): void {\r\n GridsterUtils.checkTouchEvent(e);\r\n\r\n if (!this.gridster.$options.resizable.delayStart) {\r\n this.dragStart(e as MouseEvent);\r\n return;\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n this.dragStart(e as MouseEvent);\r\n cancelDrag();\r\n }, this.gridster.$options.resizable.delayStart);\r\n\r\n const {\r\n cancelMouse,\r\n cancelMouseLeave,\r\n cancelOnBlur,\r\n cancelTouchMove,\r\n cancelTouchEnd,\r\n cancelTouchCancel\r\n } = this.zone.runOutsideAngular(() => {\r\n // Note: all of these events are being added within the `<root>` zone since they all\r\n // don't do any view updates and don't require Angular running change detection.\r\n // All event listeners call `cancelDrag` once the event is dispatched, the `cancelDrag`\r\n // is responsible only for removing event listeners.\r\n\r\n const cancelMouse = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n cancelDrag\r\n );\r\n const cancelMouseLeave = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseleave',\r\n cancelDrag\r\n );\r\n const cancelOnBlur = this.gridsterItem.renderer.listen(\r\n 'window',\r\n 'blur',\r\n cancelDrag\r\n );\r\n const cancelTouchMove = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchmove',\r\n cancelMove\r\n );\r\n const cancelTouchEnd = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchend',\r\n cancelDrag\r\n );\r\n const cancelTouchCancel = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchcancel',\r\n cancelDrag\r\n );\r\n return {\r\n cancelMouse,\r\n cancelMouseLeave,\r\n cancelOnBlur,\r\n cancelTouchMove,\r\n cancelTouchEnd,\r\n cancelTouchCancel\r\n };\r\n });\r\n\r\n function cancelMove(eventMove: MouseEvent): void {\r\n GridsterUtils.checkTouchEvent(eventMove);\r\n if (\r\n Math.abs(eventMove.clientX - (e as MouseEvent).clientX) > 9 ||\r\n Math.abs(eventMove.clientY - (e as MouseEvent).clientY) > 9\r\n ) {\r\n cancelDrag();\r\n }\r\n }\r\n\r\n function cancelDrag(): void {\r\n clearTimeout(timeout);\r\n cancelOnBlur();\r\n cancelMouse();\r\n cancelMouseLeave();\r\n cancelTouchMove();\r\n cancelTouchEnd();\r\n cancelTouchCancel();\r\n }\r\n }\r\n\r\n setItemTop(top: number): void {\r\n this.gridster.gridRenderer.setCellPosition(\r\n this.gridsterItem.renderer,\r\n this.gridsterItem.el,\r\n this.left,\r\n top\r\n );\r\n }\r\n\r\n setItemLeft(left: number): void {\r\n this.gridster.gridRenderer.setCellPosition(\r\n this.gridsterItem.renderer,\r\n this.gridsterItem.el,\r\n left,\r\n this.top\r\n );\r\n }\r\n\r\n setItemHeight(height: number): void {\r\n this.gridsterItem.renderer.setStyle(\r\n this.gridsterItem.el,\r\n 'height',\r\n height + 'px'\r\n );\r\n }\r\n\r\n setItemWidth(width: number): void {\r\n this.gridsterItem.renderer.setStyle(\r\n this.gridsterItem.el,\r\n 'width',\r\n width + 'px'\r\n );\r\n }\r\n}\r\n","import { NgIf } from '@angular/common';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { GridsterComponent } from './gridster.component';\r\n\r\nimport { GridsterDraggable } from './gridsterDraggable.service';\r\nimport {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\nimport { GridsterResizable } from './gridsterResizable.service';\r\nimport { GridsterUtils } from './gridsterUtils.service';\r\n\r\n\r\n@Component({\r\n selector: 'gridster-item',\r\n templateUrl: './gridsterItem.html',\r\n styleUrls: ['./gridsterItem.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf]\r\n})\r\nexport class GridsterItemComponent\r\n implements OnInit, OnDestroy, OnChanges, GridsterItemComponentInterface\r\n{\r\n @Input() item!: GridsterItem;\r\n @Output() itemInit = new EventEmitter<{\r\n item: GridsterItem;\r\n itemComponent: GridsterItemComponentInterface;\r\n }>();\r\n @Output() itemChange = new EventEmitter<{\r\n item: GridsterItem;\r\n itemComponent: GridsterItemComponentInterface;\r\n }>();\r\n @Output() itemResize = new EventEmitter<{\r\n item: GridsterItem;\r\n itemComponent: GridsterItemComponentInterface;\r\n }>();\r\n $item: GridsterItem;\r\n el: HTMLElement;\r\n gridster: GridsterComponent;\r\n top!: number;\r\n left!: number;\r\n width!: number;\r\n height!: number;\r\n drag: GridsterDraggable;\r\n resize: GridsterResizable;\r\n notPlaced!: boolean;\r\n init!: boolean;\r\n\r\n @HostBinding('style.z-index')\r\n get zIndex(): number {\r\n return this.getLayerIndex() + this.gridster.$options.baseLayerIndex;\r\n }\r\n\r\n constructor(\r\n @Inject(ElementRef) el: ElementRef,\r\n gridster: GridsterComponent,\r\n @Inject(Renderer2) public renderer: Renderer2,\r\n @Inject(NgZone) private zone: NgZone\r\n ) {\r\n this.el = el.nativeElement;\r\n this.$item = {\r\n cols: -1,\r\n rows: -1,\r\n x: -1,\r\n y: -1\r\n };\r\n this.gridster = gridster;\r\n this.drag = new GridsterDraggable(this, gridster, this.zone);\r\n this.resize = new GridsterResizable(this, gridster, this.zone);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gridster.addItem(this);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['item']) {\r\n this.updateOptions();\r\n\r\n if (!this.init) {\r\n this.gridster.calculateLayout$.next();\r\n }\r\n }\r\n if (changes['item'] && changes['item'].previousValue) {\r\n this.setSize();\r\n }\r\n }\r\n\r\n updateOptions(): void {\r\n this.$item = GridsterUtils.merge(this.$item, this.item, {\r\n cols: undefined,\r\n rows: undefined,\r\n x: undefined,\r\n y: undefined,\r\n layerIndex: undefined,\r\n dragEnabled: undefined,\r\n resizeEnabled: undefined,\r\n compactEnabled: undefined,\r\n maxItemRows: undefined,\r\n minItemRows: undefined,\r\n maxItemCols: undefined,\r\n minItemCols: undefined,\r\n maxItemArea: undefined,\r\n minItemArea: undefined,\r\n resizableHandles: {\r\n s: undefined,\r\n e: undefined,\r\n n: undefined,\r\n w: undefined,\r\n se: undefined,\r\n ne: undefined,\r\n sw: undefined,\r\n nw: undefined\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.gridster.removeItem(this);\r\n this.gridster.movingItem = null;\r\n this.drag.destroy();\r\n this.resize.destroy();\r\n this.gridster = this.drag = this.resize = null!;\r\n }\r\n\r\n setSize(): void {\r\n this.renderer.setStyle(this.el, 'display', this.notPlaced ? '' : 'block');\r\n this.gridster.gridRenderer.updateItem(this.el, this.$item, this.renderer);\r\n this.updateItemSize();\r\n }\r\n\r\n updateItemSize(): void {\r\n const top = this.$item.y * this.gridster.curRowHeight;\r\n const left = this.$item.x * this.gridster.curColWidth;\r\n const width =\r\n this.$item.cols * this.gridster.curColWidth -\r\n this.gridster.$options.margin;\r\n const height =\r\n this.$item.rows * this.gridster.curRowHeight -\r\n this.gridster.$options.margin;\r\n\r\n this.top = top;\r\n this.left = left;\r\n\r\n if (!this.init && width > 0 && height > 0) {\r\n this.init = true;\r\n if (this.item.initCallback) {\r\n this.item.initCallback(this.item, this);\r\n }\r\n if (this.gridster.options.itemInitCallback) {\r\n this.item.curRowHeight = this.gridster.curRowHeight;\r\n this.gridster.options.itemInitCallback(this.item, this);\r\n }\r\n this.itemInit.next({ item: this.item, itemComponent: this });\r\n if (this.gridster.$options.scrollToNewItems) {\r\n this.el.scrollIntoView(false);\r\n }\r\n }\r\n if (width !== this.width || height !== this.height) {\r\n this.width = width;\r\n this.height = height;\r\n if (this.gridster.options.itemResizeCallback) {\r\n this.gridster.options.itemResizeCallback(this.item, this);\r\n }\r\n this.itemResize.next({ item: this.item, itemComponent: this });\r\n }\r\n }\r\n\r\n itemChanged(): void {\r\n if (this.gridster.options.itemChangeCallback) {\r\n this.item.curRowHeight = this.gridster.curRowHeight;\r\n this.gridster.options.itemChangeCallback(this.item, this);\r\n }\r\n this.itemChange.next({ item: this.item, itemComponent: this });\r\n }\r\n\r\n checkItemChanges(newValue: GridsterItem, oldValue: GridsterItem): void {\r\n if (\r\n newValue.rows === oldValue.rows &&\r\n newValue.cols === oldValue.cols &&\r\n newValue.x === oldValue.x &&\r\n newValue.y === oldValue.y\r\n ) {\r\n return;\r\n }\r\n if (this.gridster.checkCollision(this.$item)) {\r\n this.$item.x = oldValue.x || 0;\r\n this.$item.y = oldValue.y || 0;\r\n this.$item.cols = oldValue.cols || 1;\r\n this.$item.rows = oldValue.rows || 1;\r\n this.setSize();\r\n } else {\r\n this.item.cols = this.$item.cols;\r\n this.item.rows = this.$item.rows;\r\n this.item.x = this.$item.x;\r\n this.item.y = this.$item.y;\r\n this.gridster.calculateLayout$.next();\r\n this.itemChanged();\r\n }\r\n }\r\n\r\n canBeDragged(): boolean {\r\n const gridDragEnabled = this.gridster.$options.draggable.enabled;\r\n const itemDragEnabled =\r\n this.$item.dragEnabled === undefined\r\n ? gridDragEnabled\r\n : this.$item.dragEnabled;\r\n return !this.gridster.mobile && gridDragEnabled && itemDragEnabled;\r\n }\r\n\r\n canBeResized(): boolean {\r\n const gridResizable = this.gridster.$options.resizable.enabled;\r\n const itemResizable =\r\n this.$item.resizeEnabled === undefined\r\n ? gridResizable\r\n : this.$item.resizeEnabled;\r\n return !this.gridster.mobile && gridResizable && itemResizable;\r\n }\r\n\r\n getResizableHandles() {\r\n const gridResizableHandles = this.gridster.$options.resizable.handles;\r\n const itemResizableHandles = this.$item.resizableHandles;\r\n // use grid settings if no settings are provided for the item.\r\n if (itemResizableHandles === undefined) {\r\n return gridResizableHandles;\r\n }\r\n // else merge the settings\r\n return {\r\n ...gridResizableHandles,\r\n ...itemResizableHandles\r\n };\r\n }\r\n\r\n bringToFront(offset: number): void {\r\n if (offset && offset <= 0) {\r\n return;\r\n }\r\n const layerIndex = this.getLayerIndex();\r\n const topIndex = this.gridster.$options.maxLayerIndex;\r\n if (layerIndex < topIndex) {\r\n const targetIndex = offset ? layerIndex + offset : topIndex;\r\n this.item.layerIndex = this.$item.layerIndex =\r\n targetIndex > topIndex ? topIndex : targetIndex;\r\n }\r\n }\r\n\r\n sendToBack(offset: number): void {\r\n if (offset && offset <= 0) {\r\n return;\r\n }\r\n const layerIndex = this.getLayerIndex();\r\n if (layerIndex > 0) {\r\n const targetIndex = offset ? layerIndex - offset : 0;\r\n this.item.layerIndex = this.$item.layerIndex =\r\n targetIndex < 0 ? 0 : targetIndex;\r\n }\r\n }\r\n\r\n private getLayerIndex(): number {\r\n if (this.item.layerIndex !== undefined) {\r\n return this.item.layerIndex;\r\n }\r\n if (this.gridster.$options.defaultLayerIndex !== undefined) {\r\n return this.gridster.$options.defaultLayerIndex;\r\n }\r\n return 0;\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.s && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-s\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.e && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-e\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.n && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-n\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.w && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-w\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.se && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-se\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.ne && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-ne\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.sw && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-sw\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.nw && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-nw\"\r\n></div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { DomService } from '@schneideress/ra-common';\r\ndeclare var componentRef: any;\r\n@Component({\r\n selector: 'ra-lock-tooltip',\r\n templateUrl: './lock.tooltip.component.html',\r\n styleUrls: ['./lock.tooltip.component.css'],\r\n standalone: false\r\n})\r\nexport class LockTooltip implements OnInit {\r\n\r\n public element: any;\r\n public title: any;\r\n public data: any;\r\n public footer: any;\r\n public template: any;\r\n\r\n public containerLeft: any;\r\n public containerTop: any;\r\n public containerBottom: any;\r\n constructor(private domService: DomService) {\r\n }\r\n ngOnInit() {\r\n if (this.element) {\r\n this.setPopupPosition();\r\n }\r\n }\r\n private setPopupPosition() {\r\n let rect = this.element.getBoundingClientRect();\r\n if ((rect.left + 250) > window.innerWidth) {\r\n this.containerLeft = (rect.left - ((rect.left + 270)-window.innerWidth)) + 'px';\r\n }\r\n else {\r\n this.containerLeft = rect.left + 'px';\r\n }\r\n if (rect.bottom + 100 < window.innerHeight) {\r\n this.containerTop = (rect.bottom) + 'px';\r\n this.containerBottom = null;\r\n }\r\n else {\r\n this.containerTop = null;\r\n this.containerBottom = (window.innerHeight - rect.top) + 'px';\r\n }\r\n }\r\n\r\n public removeMe(comp: any) {\r\n setTimeout(() => {\r\n this.domService.removeComponent(comp);\r\n });\r\n }\r\n}","<div class=\"lock-popup-content light widget-config-item\"\r\n [ngStyle]=\"{'top': containerTop,'bottom':containerBottom,'position':'fixed','left':containerLeft,'z-index': '9999','width':'250px','min-height':'fit-content'}\">\r\n <div *ngIf=\"data && !template\">\r\n <label style=\"color: #D9F0FA;\">\r\n {{title}}:\r\n </label>\r\n <div style=\"color: white;\">\r\n <label class=\"bold\" style=\"margin-bottom: 0px;width: 100%;\" *ngFor=\"let item of data\">\r\n {{item}}\r\n </label>\r\n </div>\r\n <hr style=\"background-color: white;\">\r\n <div style=\"color: #D9F0FA;\">\r\n <label>{{footer}}</label>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!data && template\">\r\n <ng-container *ngTemplateOutlet=\"template\">\r\n </ng-container>\r\n </div>\r\n</div>","import { Component, OnInit, Input, ViewChild, ElementRef, EventEmitter, Output, OnChanges, SimpleChanges, AfterViewInit, SimpleChange, OnDestroy, NgZone, Renderer2, TemplateRef, ViewContainerRef, ChangeDetectorRef } from '@angular/core';\r\nimport { RaDashboardService } from './../ra.dashboard.service';\r\nimport { RADashboardEventBus } from '../ra.dashbard.event.bus';\r\nimport { RAEvent, RAEventKey } from '../ra.event.enum';\r\nimport { IAppConfig, IWidgetConfigFilter, IWidgetInfo, RADownloadType, RADownloadOption, RaWidgetlockStatus, WidgetViewState, IconfigChanges, IBulkAction, IDashboardInfo } from '@schneideress/widgetframework';\r\nimport { NgxUiLoaderService } from 'ngx-ui-loader';\r\nimport { NotifierService } from 'angular-notifier';\r\nimport { RATranslateService, RAPermissionService, DomService } from '@schneideress/ra-common';\r\nimport { LockTooltip } from './lock-tooltip/lock.tooltip.component'\r\nimport { loadRemoteModule } from '@angular-architects/module-federation';\r\n\r\ndeclare var jQuery: any;\r\ndeclare var window: any;\r\n\r\n@Component({\r\n selector: 'ra-widget-container',\r\n templateUrl: './ra.widget.container.component.html',\r\n standalone: false\r\n})\r\nexport class RAWidgetContainer implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n\r\n public showPanel: boolean = true;\r\n private isWidgetLoaded: boolean = false;\r\n private widgetElement: any;\r\n private configChanged: any;\r\n public widgetHeight!: number;\r\n public lockClass: string = \"unlocked\";\r\n public lockStatus: RaWidgetlockStatus = RaWidgetlockStatus.Unlocked;\r\n public isDownloadIconVisible: boolean = false;\r\n public isChartDownloadVisible: boolean = false;\r\n public isGridDownloadVisible: boolean = false;\r\n public downloadIconType!: RADownloadType;\r\n public enableTitleLine: boolean = false;\r\n public isGlobalFilterApplied: boolean = false;\r\n public toolTipValue: string = ' ';\r\n public toolTipWidth: string = '0px';\r\n public lockDetails: any;\r\n public hideLock:boolean=false;\r\n public lockTemplateInfo!: TemplateRef<any>;\r\n public editToolTipValue: string = ' ';\r\n public copyToolTipValue: string = ' ';\r\n public moveToolTipValue: string = ' ';\r\n public excelToolTipValue: string = ' ';\r\n public deleteToolTipValue: string = ' ';\r\n public editText: string = '';\r\n public copyText: string = '';\r\n public moveText: string = '';\r\n public excelText: string = '';\r\n public deleteText: string = '';\r\n public editToolTipWidth: string = '0px';\r\n public copyToolTipWidth: string = '0px';\r\n public moveToolTipWidth: string = '0px';\r\n public excelToolTipWidth: string = '0px';\r\n public deleteToolTipWidth: string = '0px';\r\n public widgetSettings: any;\r\n public noPadding: boolean = false;\r\n public isMouseHover: boolean = false;\r\n public showSettingsLink: boolean = true;\r\n public isKpiView: boolean = false;\r\n public showExcell: boolean = true;\r\n public hideTitle: boolean = false;\r\n public inapplicableFilters: any = [];\r\n public popupInstance!: LockTooltip;\r\n public currentComponent: any;\r\n\r\n public lockIconTitle: any;\r\n public lockIconFooter: any;\r\n public inapplicableIconTitle: any;\r\n public inapplicableIconFooter: any;\r\n public isCustomElement: any = false;\r\n public showOnlyDropdown: boolean = false;\r\n private trendsReportDownloadRequestSub: any;\r\n\r\n @ViewChild('ctlWidget', { static: false }) ctlWidget!: ElementRef;\r\n @ViewChild('ctlWidgetModule', { read: ViewContainerRef, static: false }) ctlWidgetModule!: ViewContainerRef;\r\n @ViewChild('widgetDropdown', { static: false }) widgetDropdown!: ElementRef;\r\n @ViewChild('searchInput', { static: false }) searchInput!: ElementRef;\r\n @ViewChild('wcWrapper', { static: false }) wcWrapper!: ElementRef;\r\n @ViewChild('banPopupDiv', { static: false }) banPopupDiv!: ElementRef;\r\n @ViewChild('lockPopupDiv', { static: false }) lockPopupDiv!: ElementRef;\r\n\r\n @Input('widget-instance-id') widgetInstanceId!: number;\r\n @Input('global-filter') globalFilter: any;\r\n @Input('dashboard-info') dashboardInfo!: IDashboardInfo;\r\n @Input('data') data: any;\r\n @Input('event-bus') raDashboardEventBus!: RADashboardEventBus;\r\n @Input('app-config') appConfig!: IAppConfig;\r\n @Input('widget-width') width!: number;\r\n @Input('widget-height') height!: number;\r\n @Input('grid-cell-height') gridCellHeight!: number;\r\n @Input('bulk-action-data') bulkActionData!: IBulkAction;\r\n @Input() canLoadData: boolean = false;\r\n\r\n @Output() widgetDeleted = new EventEmitter<string>();\r\n @Output() updateAppliedFilters = new EventEmitter();\r\n public lockTitle!: string;\r\n @Output() dataLoaded = new EventEmitter();\r\n @Output() widgetLoaded = new EventEmitter();\r\n\r\n public isWidgetStateApplicable: boolean = false;\r\n public isWidgetCanMove: boolean = false;\r\n public widgetEmptyState: string = '';\r\n public domResized!: boolean;\r\n public lockVisible: boolean = false;\r\n public lockedFields: any;\r\n public detailPageUrl!: string;\r\n public baseUrl!: string;\r\n public isWidgetMgmnt: boolean = false;\r\n public WidgetDisplayName!: string;\r\n public enableTitleLineActual: boolean = false;\r\n public widgetElementHandler: any;\r\n @Input('dom-resized')\r\n set setResized(resized: boolean) {\r\n this.invokeWidgetResizedEvent();\r\n }\r\n\r\n constructor(private dashboardService: RaDashboardService,\r\n private ngxService: NgxUiLoaderService,\r\n private translateService: RATranslateService,\r\n private ngZone: NgZone,\r\n private notifier: NotifierService,\r\n private renderer: Renderer2,\r\n private cdr: ChangeDetectorRef,\r\n private raPermissionService: RAPermissionService,\r\n private domService: DomService) {\r\n this.renderer.listen('window', 'click', (e: any) => {\r\n if (e.target.className) {\r\n if (e.target.className != 'fal fa-ellipsis-v widget-menu-ellipse') {\r\n this.removeMenu();\r\n }\r\n }\r\n else {\r\n this.removeMenu();\r\n }\r\n });\r\n }\r\n ngOnInit() {\r\n this.WidgetDisplayName = this.getwidgetTitleTranslation(this.data.widgetInfo.widgetTitle);\r\n this.lockIconTitle = this.translateService.translate('Common.lockedfields');\r\n this.lockIconFooter = this.translateService.translate('Common.lockedfieldseditinfo');\r\n this.inapplicableIconTitle = this.translateService.translate('Common.InapplicableFilters');\r\n this.inapplicableIconFooter = this.translateService.translate('Common.InapplicableFiltersDesc');\r\n if (this.dashboardInfo.templateName == 'Emission Report' || this.dashboardInfo.templateName == 'CostUsage Report' || this.dashboardInfo.templateName == 'Savings Report') {\r\n this.hideTitle = true;\r\n this.showOnlyDropdown = true;\r\n }\r\n if (this.raDashboardEventBus && this.hideEllipses) {\r\n this.trendsReportDownloadRequestSub = this.raDashboardEventBus.subscribe(RAEvent.TrendsReportDownloadRequest).subscribe((payload: { widgetInstanceId: number; format: string }) => {\r\n if (payload && payload.widgetInstanceId === this.data?.widgetInfo?.widgetInstanceId) {\r\n this.ngZone.run(() => this.downloadIconClicked(payload.format));\r\n }\r\n });\r\n }\r\n }\r\n get widgetViewState() { return WidgetViewState; }\r\n\r\n /** True when Widget_Config has hideEllipses: true (widget shows inline actions instead of ellipsis menu). */\r\n get hideEllipses(): boolean {\r\n return this.data?.widgetInfo?.templateWidgetSettings?.hideEllipses === true;\r\n }\r\n\r\n /** True when the inline Download icon should be shown (hidden when Statistics tab is selected). */\r\n get showInlineDownloadIcon(): boolean {\r\n return this.hideEllipses\r\n && this.widgetElement?.selectedTabIndex !== 1\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.isWidgetMgmnt = this.raPermissionService.hasPermission('ra.widgetmanagement');\r\n if (changes['raDashboardEventBus'] && changes['raDashboardEventBus'].currentValue != changes['raDashboardEventBus'].previousValue) {\r\n this.configChanged = this.raDashboardEventBus.subscribeWithKey(RAEvent.ConfigChanged, RAEventKey.WidgetInstanceId, this.data.widgetInfo.widgetInstanceId.toString()).subscribe((e) => {\r\n this.ngZone.run(() => {\r\n this.configChangeEventHandler(e);\r\n });\r\n\r\n });\r\n }\r\n if (this.widgetElement) {\r\n if (changes['bulkActionData'] && changes['bulkActionData'].currentValue != changes['bulkActionData'].previousValue) {\r\n if (typeof this.widgetElement.bulkActionClicked === \"function\") {\r\n this.widgetElement.bulkActionClicked(this.bulkActionData);\r\n }\r\n }\r\n if (changes['globalFilter'] && changes['globalFilter'].currentValue != changes['globalFilter'].previousValue) {\r\n if (!this.dashboardInfo.curatedFilters) {\r\n let filterObj = this.getParsedConfig(this.globalFilter);\r\n if (filterObj.WidgetInstanceId) {\r\n if (this.data.widgetInfo.widgetInstanceId != filterObj.WidgetInstanceId)\r\n this.refreshWidget(this.data.widgetInfo);\r\n }\r\n else {\r\n this.refreshWidget(this.data.widgetInfo);\r\n }\r\n }\r\n }\r\n\r\n if (changes['width'] && changes['width'].currentValue != changes['width'].previousValue ||\r\n (changes['height'] && changes['height'].currentValue != changes['height'].previousValue)) {\r\n this.invokeWidgetResizedEvent();\r\n }\r\n }\r\n if (changes['canLoadData'] && (changes['canLoadData'].currentValue != changes['canLoadData'].previousValue)) {\r\n if (this.canLoadData)\r\n this.loadWidget(this.data.widgetInfo);\r\n }\r\n }\r\n invokeWidgetResizedEvent() {\r\n if (this.widgetElement) {\r\n if (typeof this.widgetElement?.widgetResized === \"function\") {\r\n let size: any = {};\r\n size.height = this.height;\r\n size.width = this.width;\r\n size.cellHeight = this.gridCellHeight;\r\n this.widgetElement.widgetResized(size);\r\n if (this.height == 1 || this.width == 1)\r\n this.isKpiView = true\r\n else\r\n this.isKpiView = false;\r\n }\r\n }\r\n }\r\n\r\n mouseHover(isHover = true) {\r\n this.isMouseHover = isHover;\r\n\r\n if (this.widgetElement) {\r\n if (typeof this.widgetElement.hoverStatus === \"function\") {\r\n this.widgetElement.hoverStatus(isHover);\r\n }\r\n else {\r\n console.warn('widget framework outdated, please update to version 0.0.96');\r\n }\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.widgetLoaded.emit(this.wcWrapper.nativeElement);\r\n },100);\r\n\r\n document.addEventListener(\"scroll\", () => {\r\n this.removeMenu();\r\n this.closePopup();\r\n })\r\n\r\n setTimeout(() => {\r\n let item = jQuery(this.wcWrapper.nativeElement).closest('gridster-item');\r\n item.bind('mouseenter', () => {\r\n window.gridsterItemEnter = true;\r\n });\r\n\r\n item.bind('mouseleave', () => {\r\n window.gridsterItemEnter = false;\r\n setTimeout(() => {\r\n if (!window.mouseOverWidgetMenu) {\r\n this.removeMenu();\r\n }\r\n });\r\n });\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.configChanged)\r\n this.configChanged.unsubscribe();\r\n if (this.trendsReportDownloadRequestSub)\r\n this.trendsReportDownloadRequestSub.unsubscribe();\r\n if (this.widgetElementHandler && this.data && this.data.widgetInfo && this.data.widgetInfo.widgetInstanceId) {\r\n document.body.removeEventListener('widgetinitiated' + this.data.widgetInfo.widgetInstanceId, this.widgetElementHandler);\r\n }\r\n }\r\n\r\n\r\n /** To Edit current widget configuration*/\r\n public editWidget() {\r\n let widgetConfigFilter: IWidgetConfigFilter;\r\n if (this.widgetElement && typeof (this.widgetElement.getConfigFilter) == 'function') {\r\n let configData = this.widgetElement.getConfigFilter();\r\n if (configData) {\r\n widgetConfigFilter = configData;\r\n }\r\n }\r\n if (widgetConfigFilter!) {\r\n this.raDashboardEventBus.publish(RAEvent.WidgetEditClicked, widgetConfigFilter);\r\n }\r\n else {\r\n let widgetConfigFilterData = this.generateConfigFilter(false);\r\n this.raDashboardEventBus.publish(RAEvent.WidgetEditClicked, widgetConfigFilterData);\r\n }\r\n }\r\n\r\n /** To Delete current widget from DOM*/\r\n public deleteWidget() {\r\n let widgetContainerContext = this;\r\n widgetContainerContext.ngxService.start();\r\n widgetContainerContext.dashboardService.deleteWidget(this.data.widgetInfo, this.appConfig).subscribe(status => {\r\n widgetContainerContext.ngxService.stop();\r\n if (status) {\r\n widgetContainerContext.widgetDeleted.emit(this.data.widgetInfo.widgetInstanceId);\r\n this.setInapplicableFilters(undefined, this.data.widgetInfo.widgetInstanceId);\r\n }\r\n else {\r\n widgetContainerContext.notifier.notify('error', \" \" + this.translateService.translate('Dashboard.FailedToRemoveWidget') + \" (\" + this.translateService.translate('Common.' + this.data.widgetInfo.widgetTitle, true) + \")!\");\r\n\r\n }\r\n });\r\n }\r\n\r\n /** To Move or change position if current widget container*/\r\n public moveWidget() {\r\n this.raDashboardEventBus.publish(RAEvent.MoveWidget, this.data.widgetInfo);\r\n this.setInapplicableFilters(undefined, this.data.widgetInfo.widgetInstanceId);\r\n // this.dashboardService.moveWidget(widgetInfo);\r\n }\r\n\r\n /** To Copy Current widget with same configuration*/\r\n public copyWidget() {\r\n this.raDashboardEventBus.publish(RAEvent.CopyWidget, this.data.widgetInfo);\r\n //this.dashboardService.copyWidget(widgetInfo);\r\n }\r\n\r\n public visitPage() {\r\n this.baseUrl = this.getHostUrl();\r\n let url = this.baseUrl + this.detailPageUrl;\r\n if (this.data.widgetInfo && this.data.widgetInfo.widgetSettings) {\r\n this.widgetSettings = this.getParsedConfig(this.data.widgetInfo.widgetSettings);\r\n if (this.widgetSettings.customPageParams || this.widgetSettings.customPageURL) {\r\n let params = this.widgetElement.getPageParamsClicked();\r\n if (params) {\r\n if (this.data.widgetInfo.widgetType == 'AV Widget' || this.widgetSettings.customPageURL)\r\n url = url + params;\r\n else\r\n url = url + '?' + params;\r\n }\r\n }\r\n }\r\n window.open(url, '_blank');\r\n }\r\n\r\n public getHostUrl() {\r\n return window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\r\n }\r\n\r\n public configChangeEventHandler(widgetInfo: any) {\r\n this.data.widgetInfo = widgetInfo;\r\n if (widgetInfo.templateSettings) {\r\n this.data.widgetInfo.templateWidgetSettings = JSON.parse(widgetInfo.templateSettings);\r\n }\r\n if (this.gridCellHeight > 0) {\r\n this.data.widgetInfo.rowHeight = this.gridCellHeight;\r\n }\r\n if (this.widgetElement && typeof (this.widgetElement.setConfigFilter) == 'function') {\r\n this.widgetElement.setConfigFilter(this.generateConfigFilter(true));\r\n }\r\n else {\r\n console.warn('widget framework outdated, please update to version 0.0.98');\r\n }\r\n this.refreshWidget(this.data.widgetInfo, true);\r\n }\r\n\r\n\r\n private generateConfigFilter(configChanged: boolean = false) {\r\n let widgetConfigFilterData = <IWidgetConfigFilter>{\r\n appConfig: this.appConfig,\r\n globalFilter: this.globalFilter,\r\n widgetInfo: this.data.widgetInfo,\r\n config: this.data.widgetInfo.widgetConfigInfo.config,\r\n configChanges: this.getConfigChanges(configChanged)\r\n }\r\n return widgetConfigFilterData;\r\n }\r\n\r\n\r\n /** To load external custom element to the widget container*/\r\n async loadWidget(widgetInfo: any) {\r\n widgetInfo.rowHeight = this.gridCellHeight;\r\n let widgetConfigFilter = <IWidgetConfigFilter>{\r\n config: widgetInfo.widgetConfigInfo.config,\r\n globalFilter: this.globalFilter,\r\n configChanges: this.getConfigChanges(false),\r\n bulkActions:this.bulkActionData\r\n }\r\n this.isWidgetCanMove= this.dashboardInfo.templateConfig.widget.canMove;\r\n if (widgetInfo.widgetSettings) {\r\n this.widgetSettings = this.getParsedConfig(widgetInfo.widgetSettings);\r\n this.applayWidgetSettings(this.widgetSettings);\r\n }\r\n this.detailPageUrl = widgetInfo.detailPageUrl;\r\n let me = this;\r\n this.isCustomElement = widgetInfo.isCustomElement;\r\n if (this.isCustomElement) {\r\n this.dashboardService.loadExternalScript(widgetInfo.scriptUrl, () => {\r\n this.setNotConfiguredState(widgetInfo);\r\n let appModule = this.data.widgetInfo.widgetName;\r\n if (this.data.widgetInfo.applicationModule && this.data.widgetInfo.applicationModule.length > 0) {\r\n appModule = this.data.widgetInfo.applicationModule;\r\n }\r\n this.translateService.loadTranslations(this.appConfig.appManagementBaseUrl, appModule, false).then(() => {\r\n me.widgetElement = document.createElement(widgetInfo.customTag);\r\n me.widgetElement.setAttribute(\"widget-instance-id\", widgetInfo.widgetInstanceId);\r\n\r\n let handler = function (event: any) {\r\n setTimeout(async () => {\r\n me.widgetElement.addEventListener('on-widget-respond', (e: any) => {\r\n var type: string = e.detail.type;\r\n switch (type) {\r\n case 'onDataLoad':\r\n if (e.detail.data)\r\n me.showPanel = true;\r\n else\r\n me.showPanel = false;\r\n\r\n if (!me.data.dataLoaded) {\r\n me.data.dataLoaded = true;\r\n me.dataLoaded.emit(widgetInfo);\r\n }\r\n break;\r\n case 'onConfigEditClicked':\r\n me.editWidget();\r\n break;\r\n case 'onEnableDefaultState':\r\n me.setEmptyState(e.detail.data);\r\n break;\r\n case 'onSetTitleUnderline':\r\n if (e.detail.data == true)\r\n me.enableTitleLine = true;\r\n else\r\n me.enableTitleLine = me.enableTitleLineActual;\r\n break;\r\n case 'onWidgetTitleHidden':\r\n if (e.detail.data == true)\r\n me.hideTitle = true;\r\n else\r\n me.hideTitle = false;\r\n break;\r\n case 'onUpdateLockData':\r\n me.setLock(e.detail.data);\r\n break;\r\n case 'onGlobalFilterApplicableCheck':\r\n me.setInapplicableFilters(e.detail.data, widgetInfo.widgetInstanceId);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n if (typeof (me.widgetElement.titleLineEnabled) != 'undefined') {\r\n let titleLineEnabled = me.widgetElement.titleLineEnabled();\r\n if (titleLineEnabled) {\r\n me.enableTitleLine = titleLineEnabled;\r\n me.enableTitleLineActual = titleLineEnabled;\r\n }\r\n }\r\n me.editText = me.translateService.translate('Common.edit');\r\n if (me.translateService.translate('Common.edit').length > 6) {\r\n me.editText = (me.translateService.translate('Common.edit').substring(0, 6) + '...');\r\n me.editToolTipValue = me.translateService.translate('Common.edit');\r\n me.editToolTipWidth = \"300px\";\r\n }\r\n me.copyText = me.translateService.translate('Common.copy');\r\n if (me.translateService.translate('Common.copy').length > 6) {\r\n me.copyText = (me.translateService.translate('Common.copy').substring(0, 6) + '...');\r\n me.copyToolTipValue = me.translateService.translate('Common.copy');\r\n me.copyToolTipWidth = \"300px\";\r\n }\r\n me.moveText = me.translateService.translate('Common.move')\r\n if (me.translateService.translate('Common.move').length > 6) {\r\n me.moveText = (me.translateService.translate('Common.move').substring(0, 6) + '...');\r\n me.moveToolTipValue = me.translateService.translate('Common.move');\r\n me.moveToolTipWidth = \"300px\";\r\n }\r\n me.excelText = me.translateService.translate('Common.excel');\r\n if (me.translateService.translate('Common.excel').length > 6) {\r\n me.excelText = (me.translateService.translate('Common.excel').substring(0, 6) + '...');\r\n me.excelToolTipValue = me.translateService.translate('Common.excel');\r\n me.excelToolTipWidth = \"300px\";\r\n }\r\n me.deleteText = me.translateService.translate('Common.delete');\r\n if (me.translateService.translate('Common.delete').length > 6) {\r\n me.deleteText = (me.translateService.translate('Common.delete').substring(0, 6) + '...');\r\n me.deleteToolTipValue = me.translateService.translate('Common.delete');\r\n me.deleteToolTipWidth = \"300px\";\r\n }\r\n\r\n me.isWidgetLoaded = true;\r\n widgetConfigFilter.appConfig = me.appConfig;\r\n widgetConfigFilter.widgetInfo = widgetInfo;\r\n widgetConfigFilter.configChanges = me.getConfigChanges(false);\r\n widgetConfigFilter.widgetInfo.widgetName = widgetInfo.widgetName;\r\n widgetConfigFilter.globalFilter = me.globalFilter;\r\n widgetConfigFilter.dashboardInfo = me.dashboardInfo;\r\n me.widgetElement.loadContent(widgetConfigFilter);\r\n await me.setLock(widgetConfigFilter.config);\r\n await me.setDownloadIcon();\r\n })\r\n }.bind(this);\r\n\r\n this.widgetElementHandler = handler;\r\n document.body.addEventListener('widgetinitiated' + widgetInfo.widgetInstanceId, handler);\r\n this.ctlWidget.nativeElement.appendChild(this.widgetElement);\r\n });\r\n });\r\n }\r\n else {\r\n let basePath = document.baseURI;\r\n loadRemoteModule({\r\n type: 'module',\r\n remoteEntry: basePath + widgetInfo.scriptUrl,\r\n exposedModule: './' + widgetInfo.widgetComponent\r\n }).then((m: any) => {\r\n let appModule = this.data.widgetInfo.widgetName;\r\n this.translateService.loadTranslations(this.appConfig.appManagementBaseUrl, appModule, false).then(() => {\r\n me.ctlWidgetModule.clear();\r\n var component = me.ctlWidgetModule.createComponent(m[widgetInfo.widgetComponent]);\r\n let instance: any = component.instance;\r\n let widgetElement = component.instance;\r\n this.setNotConfiguredState(widgetInfo);\r\n\r\n if (this.data.widgetInfo.applicationModule && this.data.widgetInfo.applicationModule.length > 0) {\r\n appModule = this.data.widgetInfo.applicationModule;\r\n }\r\n me.widgetElement = widgetElement;\r\n let element = component.location.nativeElement;\r\n element.setAttribute(\"widget-instance-id\", widgetInfo.widgetInstanceId);\r\n instance.widgetInstanceId = widgetInfo.widgetInstanceId;\r\n let handler = function (event: any) {\r\n setTimeout(async () => {\r\n instance.onWidgetRespond.subscribe((e: any) => {\r\n var type: string = e.type;\r\n switch (type) {\r\n case 'onDataLoad':\r\n if (e.data)\r\n me.showPanel = true;\r\n else\r\n me.showPanel = false;\r\n if (!me.data.dataLoaded) {\r\n me.data.dataLoaded = true;\r\n me.dataLoaded.emit(me.widgetElement);\r\n }\r\n break;\r\n case 'onConfigEditClicked':\r\n me.editWidget();\r\n break;\r\n case 'onEnableDefaultState':\r\n me.setEmptyState(e.data);\r\n break;\r\n case 'onSetTitleUnderline':\r\n if (e.data == true)\r\n me.enableTitleLine = true;\r\n else\r\n me.enableTitleLine = me.enableTitleLineActual;\r\n break;\r\n case 'onWidgetTitleHidden':\r\n if (e.data == true)\r\n me.hideTitle = true;\r\n else\r\n me.hideTitle = false;\r\n break;\r\n case 'onUpdateLockData':\r\n me.setLock(e.data);\r\n break;\r\n case 'onGlobalFilterApplicableCheck':\r\n me.setInapplicableFilters(e.data, widgetInfo.widgetInstanceId);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n if (typeof (me.widgetElement.titleLineEnabled) != 'undefined') {\r\n let titleLineEnabled = me.widgetElement.titleLineEnabled();\r\n if (titleLineEnabled) {\r\n me.enableTitleLine = titleLineEnabled;\r\n me.enableTitleLineActual = titleLineEnabled;\r\n }\r\n }\r\n me.editText = me.translateService.translate('Common.edit');\r\n if (me.translateService.translate('Common.edit').length > 6) {\r\n me.editText = (me.translateService.translate('Common.edit').substring(0, 6) + '...');\r\n me.editToolTipValue = me.translateService.translate('Common.edit');\r\n me.editToolTipWidth = \"300px\";\r\n }\r\n me.copyText = me.translateService.translate('Common.copy');\r\n if (me.translateService.translate('Common.copy').length > 6) {\r\n me.copyText = (me.translateService.translate('Common.copy').substring(0, 6) + '...');\r\n me.copyToolTipValue = me.translateService.translate('Common.copy');\r\n me.copyToolTipWidth = \"300px\";\r\n }\r\n me.moveText = me.translateService.translate('Common.move')\r\n if (me.translateService.translate('Common.move').length > 6) {\r\n me.moveText = (me.translateService.translate('Common.move').substring(0, 6) + '...');\r\n me.moveToolTipValue = me.translateService.translate('Common.move');\r\n me.moveToolTipWidth = \"300px\";\r\n }\r\n me.excelText = me.translateService.translate('Common.excel');\r\n if (me.translateService.translate('Common.excel').length > 6) {\r\n me.excelText = (me.translateService.translate('Common.excel').substring(0, 6) + '...');\r\n me.excelToolTipValue = me.translateService.translate('Common.excel');\r\n me.excelToolTipWidth = \"300px\";\r\n }\r\n me.deleteText = me.translateService.translate('Common.delete');\r\n if (me.translateService.translate('Common.delete').length > 6) {\r\n me.deleteText = (me.translateService.translate('Common.delete').substring(0, 6) + '...');\r\n me.deleteToolTipValue = me.translateService.translate('Common.delete');\r\n me.deleteToolTipWidth = \"300px\";\r\n }\r\n me.isWidgetLoaded = true;\r\n widgetConfigFilter.appConfig = me.appConfig;\r\n widgetConfigFilter.widgetInfo = widgetInfo;\r\n widgetConfigFilter.configChanges = me.getConfigChanges(false);\r\n widgetConfigFilter.widgetInfo.widgetName = widgetInfo.widgetName;\r\n widgetConfigFilter.globalFilter = me.globalFilter;\r\n widgetConfigFilter.dashboardInfo = me.dashboardInfo;\r\n me.widgetElement.loadContent(widgetConfigFilter);\r\n\r\n await me.setLock(widgetConfigFilter.config);\r\n await me.setDownloadIcon();\r\n })\r\n }.bind(this);\r\n\r\n this.widgetElementHandler = handler;\r\n document.body.addEventListener('widgetinitiated' + widgetInfo.widgetInstanceId, handler);\r\n component.changeDetectorRef.detectChanges();\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**To set Default State for the widget when it is not configured */\r\n setNotConfiguredState(widgetInfo: IWidgetInfo, forceEnable: boolean = false) {\r\n if ((widgetInfo.showDefaultState && (widgetInfo.widgetConfigInfo.config == \"\" || Object.keys(JSON.parse(widgetInfo.widgetConfigInfo.config)).length == 0)) || (forceEnable)) {\r\n this.isWidgetStateApplicable = true;\r\n this.widgetEmptyState = WidgetViewState.emptyConfig.toString();\r\n }\r\n else {\r\n this.widgetEmptyState = '';\r\n this.isWidgetStateApplicable = false;\r\n }\r\n }\r\n\r\n /**To configure empty state for the widget */\r\n setEmptyState(widgetState: any) {\r\n if (this.height == 1 || this.width == 1)\r\n this.isKpiView = true\r\n else\r\n this.isKpiView = false;\r\n this.widgetEmptyState = widgetState.widgetViewState;\r\n this.isGlobalFilterApplied = widgetState.isGlobalFilterApplied;\r\n if (widgetState != WidgetViewState.normal) {\r\n this.isWidgetStateApplicable = true;\r\n this.isDownloadIconVisible = false;\r\n }\r\n else {\r\n this.isWidgetStateApplicable = false;\r\n }\r\n switch (widgetState) {\r\n case WidgetViewState.emptyConfig:\r\n this.setNotConfiguredState(this.data.widgetInfo, true);\r\n break;\r\n case WidgetViewState.emptyData:\r\n break;\r\n case WidgetViewState.error:\r\n break;\r\n case WidgetViewState.sqlTimeoutError:\r\n break;\r\n }\r\n }\r\n\r\n getConfigChanges(configChanged: boolean = false) {\r\n let configChanges = <IconfigChanges>{\r\n isConfigUpdated: configChanged,\r\n updatedConfigProperty: []\r\n }\r\n return configChanges;\r\n }\r\n\r\n /** To refresh widget on input config changes */\r\n async refreshWidget(widgetInfo: IWidgetInfo, configChanged: boolean = false) {\r\n this.WidgetDisplayName = this.getwidgetTitleTranslation(this.data.widgetInfo.widgetTitle);\r\n widgetInfo.rowHeight = this.gridCellHeight;\r\n this.setNotConfiguredState(widgetInfo);\r\n let widgetContainerContext = this;\r\n\r\n let widgetConfigFilter = <IWidgetConfigFilter>{\r\n config: widgetInfo.widgetConfigInfo.config,\r\n globalFilter: this.globalFilter,\r\n appConfig: this.appConfig,\r\n widgetInfo: widgetInfo,\r\n configChanges: this.getConfigChanges(configChanged),\r\n dashboardInfo: this.dashboardInfo,\r\n bulkActions: this.bulkActionData\r\n }\r\n\r\n if (widgetContainerContext.isWidgetLoaded) {\r\n if (this.widgetElement && typeof (this.widgetElement.setConfigFilter) == 'function') {\r\n widgetContainerContext.widgetElement.setConfigFilter(widgetConfigFilter);\r\n }\r\n widgetContainerContext.widgetElement.loadContent(widgetConfigFilter);\r\n await this.setLock(widgetConfigFilter.config);\r\n await this.setDownloadIcon();\r\n }\r\n }\r\n\r\n public mouseOver(event: any) {\r\n this.toolTipValue = ' ';\r\n this.toolTipWidth = '0px';\r\n let element = this.searchInput.nativeElement;\r\n if (element.offsetWidth < element.scrollWidth) {\r\n this.toolTipValue = element.innerHTML;\r\n this.toolTipWidth = '300px';\r\n }\r\n else {\r\n this.toolTipWidth = '0px';\r\n }\r\n }\r\n\r\n private async setLock(config: string) {\r\n this.lockTemplateInfo = this.widgetElement.loadLockInfo();\r\n this.hideLock = this.dashboardInfo.templateConfig.widget.hideLock;\r\n var configObj: any;\r\n if (config) {\r\n configObj = JSON.parse(config);\r\n if (configObj && configObj.Locks != undefined) {\r\n if (configObj.Locks.IsDateLocked || configObj.Locks.IsDatesLocked || configObj.Locks.IsParticipantLocked || configObj.Locks.IsSourceLocked) {\r\n this.lockDetails = [];\r\n if (configObj.Locks.IsDateLocked || configObj.Locks.IsDatesLocked)\r\n this.lockDetails.push(this.translateService.translate('Common.DateRange'));\r\n\r\n if (configObj.Locks.IsParticipantLocked) {\r\n this.lockDetails.push(this.translateService.translate('Common.DivisionOrGrouporSite'));\r\n }\r\n if (configObj.Locks.IsSourceLocked)\r\n this.lockDetails.push(this.translateService.translate('Common.DataStream'));\r\n }\r\n else {\r\n this.lockDetails = undefined;\r\n }\r\n }\r\n else {\r\n this.lockDetails = undefined;\r\n }\r\n }\r\n }\r\n\r\n public async setDownloadIcon() {\r\n let downloadType = await this.widgetElement?.getDownloadType();\r\n this.downloadIconType = downloadType;\r\n this.isDownloadIconVisible = false;\r\n this.isChartDownloadVisible = false;\r\n this.isGridDownloadVisible = false;\r\n this.showExcell = true;\r\n if (downloadType != RADownloadType.None) {\r\n this.isDownloadIconVisible = true;\r\n }\r\n else {\r\n if (!this.isWidgetMgmnt && !this.detailPageUrl) {\r\n this.showSettingsLink = false;\r\n }\r\n }\r\n\r\n if (downloadType == RADownloadType.Chart) {\r\n this.isChartDownloadVisible = true;\r\n }\r\n\r\n if (downloadType == RADownloadType.Grid) {\r\n this.isGridDownloadVisible = true;\r\n }\r\n\r\n if (downloadType == RADownloadType.Statistics) {\r\n this.isGridDownloadVisible = true;\r\n this.showExcell = false;\r\n }\r\n }\r\n\r\n public downloadIconClicked(type: string) {\r\n if (!this.widgetElement || typeof this.widgetElement.downloadClicked !== 'function') return;\r\n switch (type) {\r\n case \"CSV\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.CSV);\r\n break;\r\n case \"PNG\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.PNG);\r\n break;\r\n case \"PDF\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.PDF);\r\n break;\r\n case \"SVG\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.SVG);\r\n break;\r\n case \"JPEG\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.JPEG);\r\n break;\r\n }\r\n }\r\n\r\n /** Trends Report: open download format modal (persistent Download icon click) */\r\n public async onTrendReportDownloadClick() {\r\n await this.setDownloadIcon();\r\n if (!this.isDownloadIconVisible) return;\r\n this.raDashboardEventBus.publish(RAEvent.TrendsReportDownloadModalOpen, {\r\n widgetInstanceId: this.data.widgetInfo.widgetInstanceId,\r\n isChartDownloadVisible: this.isChartDownloadVisible,\r\n isGridDownloadVisible: this.isGridDownloadVisible,\r\n showExcell: this.showExcell\r\n });\r\n }\r\n\r\n private removeMenu() {\r\n jQuery('#ra-db-widget-menu').remove();\r\n }\r\n\r\n private checkVisitLinkVisiblity() {\r\n let isVisitApplicable = true;\r\n if (this.widgetElement && typeof this.widgetElement.getVisitLinkVisibilityStatus === \"function\") {\r\n isVisitApplicable = this.widgetElement.getVisitLinkVisibilityStatus();\r\n }\r\n return isVisitApplicable;\r\n }\r\n\r\n /**Show dropdown on gear icon click */\r\n public showDropDown(e: any) {\r\n this.setDownloadIcon();\r\n\r\n this.removeMenu();\r\n setTimeout(() => {\r\n\r\n\r\n let targetPos = e.target.getBoundingClientRect();\r\n let style: string = \"position:fixed;top:\" + (targetPos.y + 15) + 'px' + ';left:' + (e.pageX - 122) + 'px;z-index:1000;';\r\n let html = this.getContenxtHtml(style);\r\n\r\n jQuery(html).appendTo('body');\r\n\r\n if (this.isWidgetMgmnt) {\r\n this.addEventListener('wcEditWidget', this.editWidget);\r\n this.addEventListener('wcCopyWidget', this.copyWidget);\r\n this.addEventListener('wcMoveWidget', this.moveWidget);\r\n this.addEventListener('wcWidgetDelete', this.deleteWidget);\r\n }\r\n let customPageParams = false;\r\n if (this.data.widgetInfo && this.data.widgetInfo.widgetSettings) {\r\n this.widgetSettings = this.getParsedConfig(this.data.widgetInfo.widgetSettings);\r\n if (this.widgetSettings.customPageParams || this.widgetSettings.customPageURL) {\r\n customPageParams = true;\r\n }\r\n }\r\n\r\n if ((this.detailPageUrl || customPageParams) && this.checkVisitLinkVisiblity()) {\r\n this.addEventListener('wcVisitWidget', this.visitPage);\r\n }\r\n if (this.isChartDownloadVisible) {\r\n this.addEventListener('wcDownloadPng', this.downloadIconClicked, 'PNG');\r\n this.addEventListener('wcDownloadJpg', this.downloadIconClicked, 'JPEG');\r\n this.addEventListener('wcDownloadPdf', this.downloadIconClicked, 'PDF');\r\n this.addEventListener('wcDownloadSvg', this.downloadIconClicked, 'SVG');\r\n }\r\n if (this.isGridDownloadVisible && this.showExcell) {\r\n this.addEventListener('wcDownloadExcel', this.downloadIconClicked, 'CSV');\r\n }\r\n\r\n document.getElementById('ra-db-widget-menu')?.addEventListener('mouseenter', () => {\r\n window.mouseOverWidgetMenu = true;\r\n });\r\n document.getElementById('ra-db-widget-menu')?.addEventListener('mouseleave', () => {\r\n window.mouseOverWidgetMenu = false;\r\n setTimeout(() => {\r\n if (!window.gridsterItemEnter) {\r\n this.removeMenu();\r\n }\r\n });\r\n });\r\n });\r\n\r\n }\r\n\r\n private addEventListener(id: string, event: any, params?: any) {\r\n let element = document.getElementById(id);\r\n if (element) {\r\n element.addEventListener('click', () => {\r\n event.call(this, params);\r\n });\r\n }\r\n }\r\n\r\n private getContenxtHtml(style: string) {\r\n let html: string = '<div id=\"ra-db-widget-menu\"' + 'style=\"' + style + '\" class=\"download-content dropdown-content widget-config-item dropdown-click\" style=\"z-index: 1002;\">';\r\n\r\n let settings = '';\r\n if (this.isWidgetMgmnt) {\r\n if (!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideEdit)\r\n settings += this.getHtmlForButton('wcEditWidget', 'fal fa-edit', this.editText);\r\n if (!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideCopy)\r\n settings += this.getHtmlForButton('wcCopyWidget', 'fal fa-copy', this.copyText);\r\n if (!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideMove)\r\n settings += this.getHtmlForButton('wcMoveWidget', 'fal fa-arrows-alt', this.moveText);\r\n }\r\n let customPageParams = false;\r\n if (this.data.widgetInfo && this.data.widgetInfo.widgetSettings) {\r\n this.widgetSettings = this.getParsedConfig(this.data.widgetInfo.widgetSettings);\r\n if (this.widgetSettings.customPageParams || this.widgetSettings.customPageURL) {\r\n customPageParams = true;\r\n }\r\n }\r\n if ((!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideVisitPage) && (this.detailPageUrl || customPageParams) && this.checkVisitLinkVisiblity()) {\r\n settings += '<a style=\"max-height: 30px;align-items: center;align-content: center; display: flex;\" id=\"wcVisitWidget\">';\r\n settings += '<i style=\"padding-left: 4px;font-size: 27px !important;\" class=\"fal fa-angle-right\"></i> ';\r\n settings += '<span style=\"padding-left: 11px;margin-top: 2px;\" style=\"padding-left: 6px;\">';\r\n settings += this.translateService.translate('Common.visitpage');\r\n settings += '</span></a>';\r\n }\r\n if ((!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideVisitPage) && (this.detailPageUrl && this.checkVisitLinkVisiblity()) || this.isWidgetMgmnt) {\r\n html += '<div style=\"color: #9FA0A4;font-size: 12px;padding-top: 8px;padding-left: 12px;\">';\r\n html += this.translateService.translate('Common.settings') + '</div>';\r\n html += settings;\r\n html += this.getHr();\r\n }\r\n\r\n if (this.isDownloadIconVisible) {\r\n if (this.showExcell) {\r\n if (this.detailPageUrl || this.isWidgetMgmnt)\r\n html += '<span style=\"color: #9FA0A4;font-size: 12px;\">';\r\n else\r\n html += '<span style=\"color: #9FA0A4;font-size: 12px;padding-top:5px;display:block;\">';\r\n\r\n html += this.translateService.translate('Common.downloads');\r\n html += '</span>';\r\n }\r\n\r\n if (this.isChartDownloadVisible) {\r\n html += '<div style=\"padding-top: 10px;\" class=\"chartDownload\">';\r\n html += this.getHtmlForButton('wcDownloadPng', 'fal fa-file-image', this.translateService.translate('Common.png'));\r\n html += this.getHtmlForButton('wcDownloadJpg', 'fal fa-file-image', this.translateService.translate('Common.jpeg'));\r\n html += this.getHtmlForButton('wcDownloadPdf', 'fal fa-file-pdf', this.translateService.translate('Common.pdf'));\r\n html += this.getHtmlForButton('wcDownloadSvg', 'fal fa-file-alt', this.translateService.translate('Common.svg'));\r\n html += '</div>';\r\n }\r\n if (this.isGridDownloadVisible && this.showExcell) {\r\n html += '<div class=\"gridDownload\">';\r\n html += this.getHtmlForButton('wcDownloadExcel', 'fal fa-download', this.excelText);\r\n html += '</div>';\r\n }\r\n }\r\n if (this.isDownloadIconVisible && this.isWidgetMgmnt && this.showExcell) {\r\n html += this.getHr();\r\n }\r\n if (this.isWidgetMgmnt && !this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideDelete) {\r\n html += '<a id=\"wcWidgetDelete\"><i class=\"fal fa-times\" style=\"padding-left: 3px;color: red;\"></i><span>';\r\n html += this.deleteText;\r\n html += '</span></a>';\r\n }\r\n\r\n html += '</div>';\r\n return html;\r\n }\r\n\r\n private getHr() {\r\n return '<hr class=\"hr\" style=\"margin-top: 5px;margin-bottom: 5px;\">';\r\n }\r\n\r\n private getHtmlForButton(id: string, fontClass: string, text: string) {\r\n let html = '<a id=\"' + id + '\"><i style=\"width:16px\" class=\"' + fontClass + '\"></i> <span style=\"padding-left: 6px;\">';\r\n html += text;\r\n html += '</span></a>';\r\n return html;\r\n }\r\n\r\n\r\n private getParsedConfig(config: any) {\r\n let parsedConfig: any;\r\n if (config) {\r\n if (typeof config === 'string') {\r\n try {\r\n parsedConfig = JSON.parse(config);\r\n }\r\n catch {\r\n parsedConfig = {};\r\n }\r\n return parsedConfig;\r\n }\r\n }\r\n return config;\r\n }\r\n\r\n private applayWidgetSettings(settings: any) {\r\n if (settings.NoPadding)\r\n this.noPadding = true\r\n else\r\n this.noPadding = false\r\n }\r\n\r\n private setInapplicableFilters(data: any, instanceId: any) {\r\n var widgetData: any = {};\r\n this.inapplicableFilters = [];\r\n widgetData.instanceId = instanceId;\r\n if (data && data.length > 0) {\r\n data.forEach((element: any) => {\r\n if (element == 'dateRange')\r\n this.inapplicableFilters.push(this.translateService.translate('Common.DateRange'));\r\n else if (element == 'participant') {\r\n this.inapplicableFilters.push(this.translateService.translate('Common.DivisionGroup'));\r\n }\r\n else if (element == 'source')\r\n this.inapplicableFilters.push(this.translateService.translate('Common.DataStream'));\r\n else\r\n this.inapplicableFilters.push(element);\r\n });\r\n widgetData.data = data;\r\n }\r\n else {\r\n widgetData.data = undefined;\r\n }\r\n this.updateAppliedFilters.emit(widgetData);\r\n }\r\n\r\n public openPopup(title: any, data: any, footer: any, type: any, template: any = undefined) {\r\n let props: any = {};\r\n if (type == 'innaplicable' && this.banPopupDiv)\r\n props.element = this.banPopupDiv.nativeElement;\r\n if (type == 'lock' && this.lockPopupDiv)\r\n props.element = this.lockPopupDiv.nativeElement;\r\n props.title = title;\r\n props.data = data;\r\n props.footer = footer;\r\n if (template)\r\n props.template = template;\r\n this.currentComponent = this.domService.appendComponent(LockTooltip, document.body, props);\r\n this.popupInstance = <any>this.currentComponent.instance;\r\n }\r\n public closePopup() {\r\n if (this.currentComponent)\r\n this.popupInstance.removeMe(this.currentComponent);\r\n }\r\n getwidgetTitleTranslation(item: any) {\r\n let rKey = this.translateService.makeCode(item);\r\n let translatedString = '';\r\n if(this.data?.widgetInfo?.widgetComponent.startsWith('PAM'))\r\n translatedString = this.translateService.translate('common.' + rKey);\r\n else if(this.dashboardService.clientId) {\r\n rKey = 'DBW_' + rKey;\r\n translatedString = this.translateService.translate(this.dashboardService.clientId + '_DBW.' + rKey);\r\n }\r\n else\r\n return item;\r\n return translatedString.toLowerCase() === rKey.toLowerCase() ? item : translatedString;\r\n }\r\n}\r\n","<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" *ngIf=\"!hideTitle && !showOnlyDropdown\"\r\n [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12\" [ngClass]=\"{'wc-mover' : isWidgetCanMove }\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-9 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div [hidden]=\"hideTitle\" style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\"\r\n (mouseover)=\"mouseOver($event)\" #searchInput>{{WidgetDisplayName}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-3\" style=\"cursor:default;padding-right: 0px;\"> \r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div #banPopupDiv (mouseover)=\"openPopup(inapplicableIconTitle,inapplicableFilters,inapplicableIconFooter,'innaplicable')\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!inapplicableFilters || inapplicableFilters.length == 0 || !globalFilter || globalFilter == '{}'\">\r\n <i class=\"fal fa-ban lock\"></i> \r\n </div>\r\n <div #lockPopupDiv (mouseover)=\"openPopup(lockIconTitle,lockDetails,lockIconFooter,'lock',lockTemplateInfo)\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"(!lockDetails && !lockTemplateInfo) || hideLock\">\r\n <i class=\"fal fa-lock lock\"></i> \r\n </div>\r\n <ng-container *ngIf=\"!hideEllipses\">\r\n <div class=\"widget-menu\" style=\"width:10px;\"\r\n [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"hideEllipses\" class=\"widget-action-icons-card\">\r\n <div class=\"widget-menu-trend-report\" style=\"display: flex;\">\r\n <div *ngIf=\"showInlineDownloadIcon\" class=\"title-bar-action-icon\" title=\"{{'Common.downloads' | translate}}\" aria-label=\"{{'Common.downloads' | translate}}\">\r\n <i (click)=\"onTrendReportDownloadClick()\" class=\"fal fa-download\"></i>\r\n </div>\r\n <div class=\"title-bar-action-icon\" *ngIf=\"isWidgetMgmnt && (!data.widgetInfo.templateWidgetSettings || !data.widgetInfo.templateWidgetSettings.hideEdit)\" title=\"{{'Common.edit' | translate}}\" aria-label=\"{{'Common.edit' | translate}}\">\r\n <i (click)=\"editWidget()\" class=\"fal fa-edit\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown\" class=\"wcheader widget-move\"\r\n style=\"height: 45px;width: 95%;cursor: move;z-index: 99;opacity: 0;\">\r\n </div>\r\n <ng-container *ngIf=\"hideTitle && !showOnlyDropdown && !hideEllipses\">\r\n <div class=\"widget-menu widget-menu-title-hidden\" [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" class=\"fal fa-ellipsis-v\" style=\"text-align: center;\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown && hideEllipses\" class=\"widget-menu-title-hidden widget-action-icons-card\">\r\n <div class=\"widget-menu-trend-report\" style=\"display: flex;\">\r\n <div *ngIf=\"showInlineDownloadIcon\" class=\"title-bar-action-icon\" title=\"{{'Common.downloads' | translate}}\" aria-label=\"{{'Common.downloads' | translate}}\">\r\n <i (click)=\"onTrendReportDownloadClick()\" class=\"fal fa-download\"></i>\r\n </div>\r\n <div class=\"title-bar-action-icon\" *ngIf=\"isWidgetMgmnt && (!data.widgetInfo.templateWidgetSettings || !data.widgetInfo.templateWidgetSettings.hideEdit)\" title=\"{{'Common.edit' | translate}}\" aria-label=\"{{'Common.edit' | translate}}\">\r\n <i (click)=\"editWidget()\" class=\"fal fa-edit\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px','top':hideTitle || showOnlyDropdown?'10px':'46px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div [hidden]=\"!isCustomElement\" #ctlWidget></div>\r\n <div [hidden]=\"isCustomElement\">\r\n <ng-container #ctlWidgetModule></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;height: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\"\r\n [isGlobalFilterApplied]=\"isGlobalFilterApplied\" [widgetEmptyState]=\"widgetEmptyState\"\r\n (editWidgetClicked)=editWidget() [widthCol]=\"width\" [heightCol]=\"height\">\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>","import { Input, OnInit, Component, OnChanges, SimpleChanges, NgZone, OnDestroy, ViewChild, ElementRef, HostListener, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\r\n\r\nimport { GridsterConfig, GridsterItem } from '../../gridster/index';\r\nimport { RaDashboardService } from '../ra.dashboard.service';\r\nimport { RADashboardEventBus } from '../ra.dashbard.event.bus';\r\nimport { RAEvent } from '../ra.event.enum';\r\nimport { IWidgetInfo, IAppConfig, IBulkAction } from '@schneideress/widgetframework';\r\nimport { NgxUiLoaderService } from 'ngx-ui-loader';\r\nimport { NotifierService } from 'angular-notifier';\r\nimport { RATranslateService, RAPermissionService } from '@schneideress/ra-common';\r\nimport { RADashboardResponsiveService } from '../ra.dashboard.responsive.service';\r\nimport { IDashboardInfo } from '@schneideress/widgetframework';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'ra-dashboard-area',\r\n templateUrl: './ra.dashboard.area.html',\r\n styleUrls: ['./ra.dashboard.area.css'],\r\n standalone: false\r\n})\r\nexport class RADashboardArea implements OnInit, OnChanges, OnDestroy {\r\n\r\n public widgetList = Array<GridsterItem>();\r\n public options!: GridsterConfig;\r\n public gridheight: number = 300;\r\n public gridsterHeight: string = '75vh';\r\n public gridcellHeight: number = 0;\r\n public userWidgets: any[] = [];\r\n public PAMWidgets: any = [];\r\n\r\n private conifgAddClick: any;\r\n private curatedFilterChange: any;\r\n private bulkActionClick: any;\r\n private calculateLayout:any;\r\n private rearrangeWidgetClick: any;\r\n private widgetDeleteEvent: any;\r\n private widgetAddEvent: any;\r\n private widgetLibraryDoneClick: any;\r\n private isWidgetLoaded: boolean = false;\r\n public domResized: boolean = false;\r\n public showEmptyDashboard: boolean = false;\r\n public showDownloadOnlyState:boolean=false;\r\n public isWidgetMgmnt: boolean = false;\r\n public lastViewType!: string;\r\n public emptyDashboardTitle: any;\r\n public emptyDashboardMsg1: any;\r\n public emptyDashboardMsg2: any;\r\n public emptyDashboardButtonText: any;\r\n public emptyDashboardButtonIcon: any;\r\n public DownloadOnlyStateTitle: any;\r\n public DownloadOnlyStateMsg1: any;\r\n public DownloadOnlyStateMsg2: any;\r\n public DownloadOnlyStateButtonText1: any;\r\n public DownloadOnlyStateButtonIcon1: any;\r\n public DownloadOnlyStateButtonText2: any;\r\n public DownloadOnlyStateButtonIcon2: any;\r\n public emptyDashboardButtonAction: any;\r\n public DownloadOnlyStateButtonAction1: any;\r\n public DownloadOnlyStateButtonAction2: any;\r\n public hasGrid: boolean = false;\r\n private initialWidgetCount: number = 10;\r\n private currentLoadingCount: number = 0;\r\n\r\n public isSiteDetailDashboard: boolean = false;\r\n\r\n @Input('user-dashboard-id') userDashboardId!: number;\r\n @Input('area-key') areaKey!: string;\r\n @Input('download-datastream-limit') downloadDatastreamLimit: any=200;\r\n @Input('report-datastream-limit') reportDatastreamLimit: any=50;\r\n @Input('global-filter') globalFilter!: any;\r\n @Input('event-bus') raDashboardEventBus!: RADashboardEventBus;\r\n @Input('widget-height') widgetHeight: number = 2;\r\n @Input('widget-width') widgetWidth: number = 4;\r\n @Input('app-config') appConfig!: IAppConfig;\r\n @Input('dashboard-info') dashboardInfo!: IDashboardInfo;\r\n @Input('isIndicatorDashboard') isIndicatorDashboard: boolean = false;\r\n @Input() templateConfig: any;\r\n @Input('bulk_Action_Data') bulkActionData!: IBulkAction;\r\n @Input('widget-count') widgetCount: number = 0;\r\n @Output() hideDashboardBanner = new EventEmitter();\r\n\r\n @ViewChild('gridWrapper', { static: false }) gridWrapper!: ElementRef;\r\n private scrollTrigger: any;\r\n @ViewChild('gridItem') gridItem!: any;\r\n constructor(private dashboardService: RaDashboardService,\r\n private ngZone: NgZone,\r\n private ngxService: NgxUiLoaderService,\r\n private translateService: RATranslateService,\r\n private notifier: NotifierService,\r\n private cdr: ChangeDetectorRef,\r\n private responsiveService: RADashboardResponsiveService,\r\n private permissionService: RAPermissionService\r\n ) {\r\n }\r\n\r\n @HostListener('document:scroll')\r\n scroll() {\r\n if (this.scrollTrigger)\r\n clearTimeout(this.scrollTrigger);\r\n\r\n this.scrollTrigger = setTimeout(() => {\r\n this.loadData();\r\n }, 500);\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.isWidgetMgmnt = this.permissionService.hasPermission('ra.widgetmanagement');\r\n this.initiateGridsterConfig();\r\n this.setEmptyDashboardConfig();\r\n this.setDownloadOnlyStateConfig();\r\n this.lastViewType = this.responsiveService.IsDesktopView ? 'desktop' : 'mobile';\r\n const gridTemplates = ['Emission Report', 'CostUsage Report', 'Site Detail', 'Savings Report'];\r\n this.hasGrid = gridTemplates.includes(this.dashboardInfo.templateName);\r\n this.responsiveService.resized.subscribe((isDesktop) => {\r\n if (this.lastViewType != (isDesktop ? 'desktop' : 'mobile') || !isDesktop) {\r\n this.lastViewType = (isDesktop ? 'desktop' : 'mobile');\r\n this.widgetList = [];\r\n setTimeout(() => {\r\n this.initiateGridsterConfig();\r\n this.options.api?.optionsChanged!();\r\n if (this.userWidgets) {\r\n let widgets = this.mapObjectListToGridsterItemList(this.userWidgets);\r\n this.currentLoadingCount = 0;\r\n this.widgetList = widgets;\r\n setTimeout(() => {\r\n this.setAreaHeight();\r\n });\r\n }\r\n else {\r\n this.loadWidgets(this.userDashboardId, this.areaKey);\r\n }\r\n this.domResized = !this.domResized;\r\n });\r\n } else {\r\n setTimeout(() => {\r\n if (this.options?.api) {\r\n this.gridcellHeight = this.options.api!.getCurrentRowHeight!();\r\n }\r\n this.domResized = !this.domResized;\r\n this.setAreaHeight();\r\n }, 100);\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n this.bulkActionClick = this.raDashboardEventBus.subscribe(RAEvent.BulkActionClick).subscribe((data: IBulkAction) => {\r\n this.bulkActionData = JSON.parse(JSON.stringify(data)); // To create a new reference;\r\n });\r\n });\r\n setTimeout(() => {\r\n this.calculateLayout = this.raDashboardEventBus.subscribe(RAEvent.LayoutChange).subscribe(() => {\r\n this.options.api?.optionsChanged!();\r\n });\r\n }, 2000);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.isWidgetMgmnt = this.permissionService.hasPermission('ra.widgetmanagement');\r\n if (this.raDashboardEventBus && this.appConfig && !this.isWidgetLoaded) {\r\n this.isWidgetLoaded = true;\r\n this.loadWidgets(this.userDashboardId, this.areaKey);\r\n }\r\n this.initiateGridsterConfig();\r\n\r\n if (changes['raDashboardEventBus'] && changes['raDashboardEventBus'].currentValue != changes['raDashboardEventBus'].previousValue) {\r\n this.inititateEventBusSubscritions();\r\n }\r\n }\r\n ngAfterViewChecked() {\r\n //this.cdr.detectChanges();\r\n }\r\n public setEmptyDashboardConfig() {\r\n if (this.dashboardInfo && this.dashboardInfo.templateConfig.emptyDashboardHeader) {\r\n this.emptyDashboardTitle = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.emptyDashboardHeader.titleKey);\r\n this.emptyDashboardMsg1 = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.emptyDashboardHeader.descriptionKey1);\r\n this.emptyDashboardMsg2 = (this.dashboardInfo.templateConfig.emptyDashboardHeader.descriptionKey2) ? this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.emptyDashboardHeader.descriptionKey2) : '';\r\n this.emptyDashboardButtonText = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonTextKey);\r\n this.emptyDashboardButtonIcon = this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonIcon ? this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonIcon : '';\r\n this.emptyDashboardButtonAction = this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonAction ? this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonAction : '';\r\n }\r\n }\r\n public setDownloadOnlyStateConfig() {\r\n if (this.dashboardInfo && this.dashboardInfo.templateConfig.downloadOnlyStateHeader) {\r\n this.DownloadOnlyStateTitle = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.titleKey);\r\n this.DownloadOnlyStateMsg1 = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.descriptionKey1).replace('{0}',this.reportDatastreamLimit);\r\n this.DownloadOnlyStateMsg2 = (this.dashboardInfo.templateConfig.downloadOnlyStateHeader.descriptionKey2) ? this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.descriptionKey2) : '';\r\n this.DownloadOnlyStateButtonText1 = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonTextKey1);\r\n this.DownloadOnlyStateButtonText2 =(this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonTextKey2) ? this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonTextKey2):'';\r\n this.DownloadOnlyStateButtonIcon1 = this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonIcon1 ? this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonIcon1 : '';\r\n this.DownloadOnlyStateButtonIcon2 = this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonIcon2 ? this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonIcon2 : '';\r\n this.DownloadOnlyStateButtonAction1 = this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonAction1 ? this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonAction1: '';\r\n this.DownloadOnlyStateButtonAction2 = this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonAction2 ? this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonAction2 : '';\r\n }\r\n }\r\n /**To set GridsterConfig */\r\n public initiateGridsterConfig() {\r\n if (this.dashboardInfo) {\r\n /**To override default configuration values to the gridster control */\r\n this.options = this.responsiveService.getGridsterConfig(this.isWidgetMgmnt,\r\n this.dashboardInfo.templateConfig.widget.canResize, this.dashboardInfo.templateConfig.widget.canMove);\r\n this.options.initCallback = (gridster: any) => {\r\n if (this.options.api) {\r\n this.gridcellHeight = this.options.api.getCurrentRowHeight!();\r\n }\r\n };\r\n this.options.itemChangeCallback = (item: GridsterItem) => {\r\n if (this.responsiveService.IsDesktopView) {\r\n if (item.widgetInfo && item.widgetInfo.widgetInstanceId) {\r\n this.updateWidgetPosition(item.widgetInfo.widgetInstanceId);\r\n }\r\n }\r\n this.setAreaHeight();\r\n };\r\n }\r\n }\r\n\r\n public widgetLoaded(widgetElement: any, widget: any) {\r\n widget.widgetElement = widgetElement;\r\n let items = this.widgetList.filter((item: any) => item.widgetInfo.widgetInstanceId == widget.widgetInfo.widgetInstanceId)\r\n if (items.length > 0) {\r\n this.loadData(items[0]);\r\n }\r\n }\r\n\r\n private loadData(item?: any) {\r\n let items = [];\r\n let totalLoadedCount = this.widgetList.filter((w => w.canLoadData)).length;\r\n if (!item)\r\n items = this.widgetList.filter((w => !w.canLoadData));\r\n else\r\n items.push(item);\r\n if (items.length > 0) {\r\n this.initialWidgetCount === this.currentLoadingCount ? this.changeInitialWidgetCount():null;\r\n if (this.initialWidgetCount > this.currentLoadingCount) {\r\n for (let i = 0; i < items.length; i++) {\r\n if (this.isElementLoaded(items[i]?.widgetElement) ||\r\n (totalLoadedCount <= this.initialWidgetCount)) {\r\n this.currentLoadingCount++;\r\n items[i].canLoadData = true;\r\n totalLoadedCount = this.widgetList.filter((w => w.canLoadData)).length;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n changeInitialWidgetCount(){\r\n this.isElementLoaded(this.widgetList[this.currentLoadingCount]?.widgetElement)? \r\n this.initialWidgetCount++ : null;\r\n }\r\n\r\n public dataLoaded(widgetInfo: any) {\r\n setTimeout(() => {\r\n this.currentLoadingCount--;\r\n }, 100);\r\n // this.loadData()\r\n }\r\n\r\n private isElementLoaded(el: any) {\r\n if (el) {\r\n let rect = el.getBoundingClientRect();\r\n const height = rect.height;\r\n if(this.hasGrid){\r\n const effectiveCount = (this.widgetList.length % 2 === 1) ? this.widgetList.length + 1 : this.widgetList.length;\r\n const multiplier = Math.max(1, effectiveCount / 2);\r\n this.gridsterHeight = (height + 20) * multiplier + 'px';\r\n }\r\n return rect && rect.top < window.innerHeight;\r\n }\r\n }\r\n\r\n private loadWidgetWrappers(isInitialLoad: boolean = true) {\r\n let widgets: GridsterItem[] = this.mapObjectListToGridsterItemList(this.userWidgets);\r\n\r\n this.widgetList.push(...widgets);\r\n this.setAreaHeight();\r\n }\r\n\r\n /** To initiate eventbus subsctiptions */\r\n inititateEventBusSubscritions() {\r\n this.widgetDeleteEvent = this.raDashboardEventBus.subscribe(RAEvent.WidgetDelete).subscribe((instanceId) => {\r\n this.ngZone.run(() => {\r\n this.deleteWidget(instanceId, true);\r\n });\r\n });\r\n\r\n this.widgetAddEvent = this.raDashboardEventBus.subscribe(RAEvent.AddWidget).subscribe((widgetInfo) => {\r\n this.ngZone.run(() => {\r\n this.copyWidget(widgetInfo);\r\n });\r\n });\r\n\r\n this.conifgAddClick = this.raDashboardEventBus.subscribe(RAEvent.ConfigAddClick).subscribe((e) => {\r\n this.ngZone.run(() => {\r\n this.addWidget(e);\r\n });\r\n });\r\n\r\n this.curatedFilterChange = this.raDashboardEventBus.subscribe(RAEvent.CuratedFilterChange).subscribe((e) => {\r\n this.ngZone.run(() => {\r\n this.loadWidgets(this.userDashboardId, this.areaKey);\r\n });\r\n });\r\n\r\n this.rearrangeWidgetClick = this.raDashboardEventBus.subscribe(RAEvent.RearrangeClicked).subscribe((e) => {\r\n this.ngZone.run(() => {\r\n this.rearrangeWidgets();\r\n });\r\n });\r\n\r\n this.widgetLibraryDoneClick = this.raDashboardEventBus.subscribe(RAEvent.widgetLibraryDoneClick).subscribe((widgetList) => {\r\n this.ngZone.run(() => {\r\n if (widgetList) {\r\n this.addWidgetListToGridster(widgetList, 0);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * temp fix- recursive method to iterate over the list of items\r\n * and add them to gridster in the given order\r\n * @param widgetList -list of widgets\r\n * @param index -index of the current value to be added\r\n */\r\n addWidgetListToGridster(widgetList: any, index: number) {\r\n let areaContext = this;\r\n let indexVal = index + 1;\r\n if (index > widgetList.length - 1)\r\n return;\r\n else {\r\n if (index == 0) {\r\n areaContext.addWidget(widgetList[index]);\r\n areaContext.addWidgetListToGridster(widgetList, indexVal);\r\n }\r\n else {\r\n setTimeout(() => {\r\n areaContext.addWidget(widgetList[index]);\r\n areaContext.addWidgetListToGridster(widgetList, indexVal);\r\n }, 1000);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.conifgAddClick)\r\n this.conifgAddClick.unsubscribe();\r\n\r\n if (this.widgetAddEvent)\r\n this.widgetAddEvent.unsubscribe();\r\n\r\n if (this.widgetDeleteEvent)\r\n this.widgetDeleteEvent.unsubscribe();\r\n\r\n if (this.widgetLibraryDoneClick)\r\n this.widgetLibraryDoneClick.unsubscribe();\r\n\r\n if (this.rearrangeWidgetClick)\r\n this.rearrangeWidgetClick.unsubscribe();\r\n\r\n if (this.curatedFilterChange)\r\n this.curatedFilterChange.unsubscribe();\r\n\r\n if (this.bulkActionClick)\r\n this.bulkActionClick.unsubscribe();\r\n if (this.calculateLayout)\r\n this.calculateLayout.unsubscribe();\r\n }\r\n\r\n /**To update position/dimention of all widgets in the area */\r\n updateWidgets() {\r\n this.dashboardService.updateWidgets(this.formatWidgetDataForPositionDetails(this.mapGridsterListToObject(this.widgetList)),\r\n this.appConfig).subscribe(widgets => {\r\n });\r\n return true;\r\n }\r\n\r\n /**To update widget dimensions */\r\n updateWidgetPosition(widgetInstanceId: number) {\r\n\r\n let widgetFilteredList = [];\r\n let widget = this.widgetList.filter(filtered => filtered.widgetInfo && filtered.widgetInfo.widgetInstanceId == widgetInstanceId);\r\n if (widget && widget.length > 0) {\r\n widgetFilteredList.push(widget[0]);\r\n let widgetList = this.mapGridsterListToObject(widgetFilteredList);\r\n this.dashboardService.updateWidgets(this.formatWidgetDataForPositionDetails(widgetList), this.appConfig).subscribe(widgets => {\r\n });\r\n }\r\n return true;\r\n }\r\n\r\n /**To restrict request payload to be of min size (position & size details) */\r\n formatWidgetDataForPositionDetails(widgetItemList: IWidgetInfo[]) {\r\n let itemList: any = [];\r\n widgetItemList.forEach(function (widgetItem) {\r\n let item = {} as IWidgetInfo;\r\n item.widgetInstanceId = widgetItem.widgetInstanceId;\r\n item.position_x = widgetItem.position_x;\r\n item.position_y = widgetItem.position_y;\r\n item.width = widgetItem.width;\r\n item.height = widgetItem.height;\r\n itemList.push(item);\r\n });\r\n return itemList;\r\n }\r\n\r\n /** To retrieve widgets based on userDashboardid and area name */\r\n loadWidgets(userDashboarId: number, areaKey: string) {\r\n if (this.templateConfig && this.templateConfig.initialWidgetCount)\r\n this.initialWidgetCount = this.templateConfig.initialWidgetCount;\r\n window.scrollTo(0, 0);\r\n if (location.href.indexOf('/kiosk/') > -1)\r\n this.initialWidgetCount = 1000;\r\n\r\n let widgetInfo = <IWidgetInfo>{\r\n dashboardId: userDashboarId.toString(),\r\n dashboardAreaKey: areaKey,\r\n isIndicatorDashboard: this.isIndicatorDashboard\r\n }\r\n \r\n let _the = this;\r\n this.isSiteDetailDashboard = this.dashboardInfo?.templateName === 'Site Detail';\r\n this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe(widgets => {\r\n if(this.isSiteDetailDashboard){\r\n widgets = this.arrangeWidgetsInTwoColumnGrid(widgets);\r\n }\r\n _the.widgetList = [];\r\n this.userWidgets = widgets;\r\n this.PAMWidgets = [];\r\n widgets.forEach((element: any) => {\r\n var settings: any = undefined\r\n if (element.widgetSettings) {\r\n settings = JSON.parse(element.widgetSettings);\r\n if (settings && settings.isPAMWidget)\r\n this.PAMWidgets.push(element.widgetInstanceId);\r\n }\r\n if(this.isSiteDetailDashboard)\r\n element.templateSettings = JSON.stringify(this.dashboardInfo?.templateConfig?.widget);\r\n });\r\n this.checkPAMWidgets();\r\n if( this.dashboardInfo?.isReport && widgets && widgets.length> this.reportDatastreamLimit){\r\n this.showDownloadOnlyState = true;\r\n this.raDashboardEventBus.publish(RAEvent.DownloadOnlyState, this.showDownloadOnlyState);\r\n }\r\n else if (widgets && widgets.length > 0) {\r\n this.showDownloadOnlyState = false;\r\n this.dashboardService.clientId = widgets[0].clientId;\r\n this.loadWidgetWrappers();\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, false);\r\n }\r\n else {\r\n this.showDownloadOnlyState = false;\r\n this.showEmptyDashboard = true;\r\n if (this.isSiteDetailDashboard) {\r\n this.showDownloadOnlyState = false;\r\n this.showEmptyDashboard = false;\r\n }\r\n else {\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, this.showEmptyDashboard);\r\n }\r\n }\r\n this.raDashboardEventBus.publish(RAEvent.UpdateWidgetCount, this.userWidgets.length);\r\n });\r\n }\r\n\r\n /**\r\n * Arranges widgets in a 2-column grid layout for Site Detail dashboard\r\n * @param widgets - Array of widget objects to be arranged\r\n * @returns Modified widgets array with updated positions and dimensions. If more widgets exist than maxWidgetCount, only the last N widgets are positioned in the grid.\r\n * \r\n * Layout pattern (for last N widgets in 2-column layout):\r\n * - Widget n-3: x=0, y=0 (top-left)\r\n * - Widget n-2: x=4, y=0 (top-right)\r\n * - Widget n-1: x=0, y=2 (second row-left)\r\n * - Widget n: x=4, y=2 (second row-right)\r\n * \r\n * Additional widgets beyond maxWidgetCount are removed from the beginning of the array.\r\n */\r\n arrangeWidgetsInTwoColumnGrid(widgets: any) {\r\n const colWidth = 4;\r\n const rowHeight = 2;\r\n const maxWidgets = this.templateConfig?.maxWidgetCount || 4;\r\n \r\n // If more widgets than allowed, keep only the last N widgets\r\n if (widgets.length > maxWidgets) {\r\n widgets = widgets.slice(-maxWidgets);\r\n }\r\n \r\n widgets.forEach((widget: any, index: number) => {\r\n const row = Math.floor(index / 2);\r\n const col = index % 2;\r\n \r\n widget.position_x = col * colWidth; // 0 for left column, 4 for right column\r\n widget.position_y = row * rowHeight; // 0, 2, 4, etc.\r\n widget.width = colWidth;\r\n widget.height = rowHeight;\r\n });\r\n return widgets;\r\n }\r\n /** To set Area(Gridster) height dynamically as widgets are added/removed */\r\n setAreaHeight() {\r\n setTimeout(() => {\r\n let isMobile: boolean = false;\r\n if (this.options.mobileBreakpoint! > this.gridWrapper.nativeElement.clientWidth) {\r\n isMobile = true;\r\n }\r\n let areaScrollHeight = 0;\r\n let areaHeight = 0;\r\n let curRowHeight = 0;\r\n if (this.options.api) {\r\n curRowHeight = this.options.api.getCurrentRowHeight!();\r\n }\r\n\r\n if (this.isSiteDetailDashboard) {\r\n this.showEmptyDashboard = false;\r\n } else {\r\n this.showEmptyDashboard = this.userWidgets.length === 0;\r\n }\r\n\r\n this.widgetList.forEach((t) => {\r\n let currentHeight = t.y! + t.rows;\r\n if (currentHeight > areaScrollHeight) {\r\n areaScrollHeight = currentHeight;\r\n }\r\n if (curRowHeight == 0) {\r\n currentHeight = this.widgetList[0].curRowHeight!;\r\n }\r\n t.widgetInfo.rowHeight = curRowHeight;\r\n });\r\n this.gridcellHeight = curRowHeight;\r\n if (this.options.api) {\r\n areaHeight = areaScrollHeight * this.options.api.getCurrentRowHeight!() + 100;\r\n }\r\n let areaScrollHeightMob = 0;\r\n if (isMobile) {\r\n areaScrollHeightMob = this.widgetList.length * 300 + 200;\r\n areaHeight = areaScrollHeightMob;\r\n }\r\n if (areaHeight < 600) {\r\n areaHeight = 600;\r\n }\r\n this.gridheight = areaHeight;\r\n if (this.hasGrid) {\r\n const baseHeight = this.gridItem?.height; // gridster container current height\r\n if (baseHeight) {\r\n const effectiveCount = (this.widgetList.length % 2 === 1) ? this.widgetList.length + 1 : this.widgetList.length;\r\n const multiplier = Math.max(1, effectiveCount / 2);\r\n this.gridsterHeight = (baseHeight + 20) * multiplier + 'px';\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** To remove a widget instance from dashboard and to save info in database */\r\n deleteWidget(widgetInstanceId: any, isalertDisabled: boolean = false) {\r\n\r\n let widget = this.userWidgets.filter((item) => {\r\n return item.widgetInstanceId === widgetInstanceId;\r\n });\r\n if (widget.length > 0) {\r\n this.userWidgets.splice(this.userWidgets.indexOf(widget[0]), 1);\r\n }\r\n\r\n if (this.PAMWidgets.length > 0) {\r\n var indx = this.PAMWidgets.indexOf(widgetInstanceId);\r\n if (indx > -1)\r\n this.PAMWidgets.splice(indx, 1);\r\n this.checkPAMWidgets();\r\n }\r\n\r\n let gridsterItem = this.widgetList.filter((item) => {\r\n return item.widgetInfo.widgetInstanceId === widgetInstanceId;\r\n });\r\n if (gridsterItem.length > 0) {\r\n this.widgetList.splice(this.widgetList.indexOf(gridsterItem[0]), 1);\r\n this.setAreaHeight();\r\n if (!isalertDisabled) {\r\n this.notifier.notify('success', \" \" + this.translateService.translate('Common.Widgettext') + \" \" + gridsterItem[0].widgetInfo.widgetTitle + \" \" + this.translateService.translate('Common.deletedSuccesfully') + \" \");\r\n }\r\n }\r\n this.showEmptyDashboard = this.userWidgets.length > 0 ? false : true;\r\n if (this.showEmptyDashboard == true && !this.isSiteDetailDashboard) {\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, this.showEmptyDashboard);\r\n }\r\n if(this.isSiteDetailDashboard){\r\n this.raDashboardEventBus.publish(RAEvent.UpdateWidgetCount, -1);\r\n this.raDashboardEventBus.publish(RAEvent.RearrangeClicked, true);\r\n }\r\n }\r\n\r\n /**To rearrange widgets position in the dashboard, compactLeft&Up,compactLeft,compactUp,etc*/\r\n rearrangeWidgets() {\r\n\r\n for (let i = 0; i < this.userWidgets.length; i++) {\r\n this.userWidgets[i].position_x = 0;\r\n this.userWidgets[i].position_y = 0;\r\n }\r\n\r\n this.widgetList = [];\r\n this.loadWidgetWrappers();\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, false);\r\n\r\n if (this.widgetList.length > 0)\r\n this.updateWidgetPosition(this.widgetList[0].widgetInfo.widgetInstanceId);\r\n setTimeout(() => {\r\n this.setAreaHeight();\r\n });\r\n\r\n }\r\n\r\n /**To add widget instance to the database with the next available position and to make changes in\r\n * dashboard area.\r\n */\r\n addWidget(data: any) {\r\n data.height = this.widgetHeight;\r\n data.width = this.widgetWidth;\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, false);\r\n if (data.widgetSettings) {\r\n if (typeof data.widgetSettings === 'string')\r\n data.widgetSettings = JSON.parse(data.widgetSettings);\r\n\r\n if (data.widgetSettings.defaultCols) {\r\n data.width = data.widgetSettings.defaultCols;\r\n }\r\n if (data.widgetSettings.defaultRows) {\r\n data.height = data.widgetSettings.defaultRows;\r\n }\r\n data.widgetSettings = null;\r\n }\r\n data = this.setPositions(data);\r\n\r\n /** to find the available position in gridster, temp commenting the code-returning higher y value than normal */\r\n data.dashboardAreaKey = this.areaKey;\r\n data.dashboardId = this.userDashboardId;\r\n this.ngxService.start();\r\n this.dashboardService.addWidget(data, this.appConfig).subscribe(widget => {\r\n if(this.isSiteDetailDashboard)\r\n widget.templateSettings = JSON.stringify(this.dashboardInfo?.templateConfig?.widget);\r\n this.userWidgets.push(widget);\r\n let gridsterItem = this.responsiveService.getGridsterItem(widget);\r\n this.widgetList.push(gridsterItem);\r\n this.setAreaHeight();\r\n\r\n if (this.options.api) {\r\n let curRowHeight: number = Number(this.options.api.getCurrentRowHeight!());\r\n if (curRowHeight > 0) {\r\n widget.rowHeight = curRowHeight;\r\n this.gridcellHeight = curRowHeight;\r\n }\r\n }\r\n var widgetInstanceId = 0;\r\n if (widget && widget.widgetInstanceId) {\r\n widgetInstanceId = widget.widgetInstanceId;\r\n /**To save added widget position in db */\r\n if (this.responsiveService.IsDesktopView) {\r\n setTimeout(() => {\r\n this.updateWidgetPosition(widgetInstanceId);\r\n });\r\n }\r\n }\r\n if (widget.settings && widget.settings.isPAMWidget) {\r\n this.PAMWidgets.push(widget.widgetInstanceId);\r\n this.checkPAMWidgets();\r\n }\r\n\r\n this.raDashboardEventBus.publish(RAEvent.WidgetAdded, widget);\r\n });\r\n }\r\n\r\n private setPositions(data: any) {\r\n data.position_x = 0;\r\n data.position_y = 0;\r\n if (!this.responsiveService.IsDesktopView) {\r\n if (this.userWidgets.length > 0) {\r\n let widget = this.userWidgets[this.userWidgets.length - 1];\r\n if (widget.position_x + widget.width > (this.responsiveService.maxColsDesktop / 2)) {\r\n data.position_y = widget.position_y + 1;\r\n }\r\n else {\r\n data.position_y = widget.position_y;\r\n data.position_x = this.responsiveService.maxColsDesktop - (widget.position_x + widget.width);\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n /** To add widget to current widget list ,invoked from copy widget window*/\r\n copyWidget(data: any) {\r\n data = this.setPositions(data);\r\n if (!this.responsiveService.IsDesktopView) {\r\n this.dashboardService.updateWidgets(this.formatWidgetDataForPositionDetails([data]), this.appConfig).subscribe(widgets => {\r\n });\r\n }\r\n this.userWidgets.push(data);\r\n let gridsterItem = this.responsiveService.getGridsterItem(data);\r\n this.widgetList.push(gridsterItem);\r\n this.setAreaHeight();\r\n if (data.settings && data.settings.isPAMWidget) {\r\n this.PAMWidgets.push(data.widgetInstanceId);\r\n this.checkPAMWidgets();\r\n }\r\n\r\n }\r\n\r\n mapObjectListToGridsterItemList(widgetList: Array<IWidgetInfo>) {\r\n let widgetArray = Array<GridsterItem>();\r\n widgetList.forEach(widget => {\r\n widgetArray.push(this.responsiveService.getGridsterItem(widget));\r\n });\r\n return widgetArray;\r\n }\r\n\r\n mapGridsterItemToObject(widgetItem: GridsterItem) {\r\n let widget: IWidgetInfo;\r\n widget = widgetItem.widgetInfo;\r\n widget.height = widgetItem.rows;\r\n widget.width = widgetItem.cols;\r\n widget.position_x = widgetItem.x!;\r\n widget.position_y = widgetItem.y!;\r\n widget.rowHeight = widgetItem.curRowHeight!;\r\n return widget;\r\n }\r\n\r\n mapGridsterListToObject(widgetItemList: Array<GridsterItem>) {\r\n let widgetListArray = Array<IWidgetInfo>();\r\n widgetItemList.forEach(widget => {\r\n widgetListArray.push(this.mapGridsterItemToObject(widget));\r\n });\r\n return widgetListArray;\r\n }\r\n\r\n public buttonClick() {\r\n if (this.emptyDashboardButtonAction == \"widgets\")\r\n this.raDashboardEventBus.publish(RAEvent.AddNewWidgetToDashboard, null);\r\n else if (this.emptyDashboardButtonAction == \"filter\")\r\n this.raDashboardEventBus.publish(RAEvent.GlobalFilterClick, null);\r\n else if (this.emptyDashboardButtonAction == \"download\")\r\n this.raDashboardEventBus.publish(RAEvent.DownloadExcelClick, null);\r\n }\r\n public buttonActionClick(action:any) {\r\n if (action == \"filter\")\r\n this.raDashboardEventBus.publish(RAEvent.GlobalFilterClick, null);\r\n else if (action == \"download\")\r\n this.raDashboardEventBus.publish(RAEvent.DownloadExcelClick, null);\r\n }\r\n\r\n public updateAppliedFilters(data: any) {\r\n this.raDashboardEventBus.publish(RAEvent.UpdateAppledFiterForInapplicableFilter, data);\r\n }\r\n\r\n public checkPAMWidgets() {\r\n if (this.PAMWidgets.length > 0) {\r\n this.raDashboardEventBus.publish(RAEvent.ShowInapplicableFilterMessage, true);\r\n }\r\n else {\r\n this.raDashboardEventBus.publish(RAEvent.ShowInapplicableFilterMessage, false);\r\n }\r\n }\r\n\r\n}","<div #gridWrapper class=\"wrap gridster gridster-mobile\" [ngClass]=\"{'no-hover': isSiteDetailDashboard}\"\r\n [ngStyle]=\"{'height': (userWidgets.length > 0 && !showDownloadOnlyState) && !hasGrid ? ( gridheight + 'px') : 'unset'}\">\r\n <!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [style.min-height]=\"gridsterHeight + '!important'\" [options]=\"options\" style=\"height:100%;\" *ngIf=\"userWidgets.length > 0 && !showDownloadOnlyState\">\r\n <gridster-item #gridItem [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container (widgetLoaded)=\"widgetLoaded($event, item)\" [canLoadData]=\"item.canLoadData\" (dataLoaded)=\"dataLoaded($event)\"\r\n [bulk-action-data]=\"bulkActionData\" [dashboard-info]=\"dashboardInfo\" [app-config]=\"appConfig\"\r\n [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\r\n [global-filter]=\"globalFilter\" [grid-cell-height]=\"gridcellHeight\" *ngIf=\"gridcellHeight && gridcellHeight > 0\"\r\n [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"\r\n [dom-resized]=\"domResized\" (updateAppliedFilters)=\"updateAppliedFilters($event)\">\r\n </ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showEmptyDashboard\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{emptyDashboardTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{emptyDashboardMsg1}} <br />\r\n {{emptyDashboardMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonClick()\">\r\n <i class=\"{{emptyDashboardButtonIcon}}\"></i>{{emptyDashboardButtonText}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showDownloadOnlyState\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{DownloadOnlyStateTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{DownloadOnlyStateMsg1}} <br />\r\n {{DownloadOnlyStateMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction1)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon1}}\"></i>{{DownloadOnlyStateButtonText1}}</button>\r\n <button class=\"btn btnLib btn-sm dashboard-button light button-margin\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction2)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon2}}\"></i>{{DownloadOnlyStateButtonText2}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <notifier-container></notifier-container>\r\n</div>\r\n","import { NotifierOptions } from \"angular-notifier\";\r\n\r\nexport const customNotifierOptions: NotifierOptions = {\r\n position: {\r\n horizontal: {\r\n position: 'right',\r\n distance: 12\r\n },\r\n vertical: {\r\n position: 'top',\r\n distance: 12,\r\n gap: 10\r\n }\r\n },\r\n theme: 'material',\r\n behaviour: {\r\n autoHide: 5000,\r\n onClick: 'hide',\r\n onMouseover: 'pauseAutoHide',\r\n showDismissButton: true,\r\n stacking: 4\r\n },\r\n animations: {\r\n enabled: true,\r\n show: {\r\n preset: 'slide',\r\n speed: 300,\r\n easing: 'ease'\r\n },\r\n hide: {\r\n preset: 'fade',\r\n speed: 300,\r\n easing: 'ease',\r\n offset: 50\r\n },\r\n shift: {\r\n speed: 300,\r\n easing: 'ease'\r\n },\r\n overlap: 150\r\n }\r\n };\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { GridsterComponent } from './gridster.component';\r\nimport { GridsterItemComponent } from './gridsterItem.component';\r\n\r\n@NgModule({\r\n imports: [GridsterComponent, GridsterItemComponent],\r\n exports: [GridsterComponent, GridsterItemComponent]\r\n})\r\nexport class GridsterModule {}\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NotifierModule } from 'angular-notifier';\r\nimport { customNotifierOptions } from './custom.notifier.options';\r\n\r\nimport { GridsterModule } from './../gridster/lib/gridster.module';\r\nimport { RADashboardArea } from './ra-dashboard-area/ra.dashboard.area';\r\nimport { RAWidgetContainer } from './ra-widget-container/ra.widget.container.component';\r\nimport { NgxUiLoaderModule } from 'ngx-ui-loader';\r\nimport { RACommonModule } from '@schneideress/ra-common';\r\nimport { RACommonControlsModule } from '@schneideress/common-controls';\r\nimport { LockTooltip } from './ra-widget-container/lock-tooltip/lock.tooltip.component'\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n RADashboardArea,\r\n RAWidgetContainer,\r\n LockTooltip\r\n ],\r\n imports: [\r\n CommonModule,\r\n GridsterModule,\r\n HttpClientModule,\r\n NgxUiLoaderModule,\r\n NotifierModule.withConfig(customNotifierOptions),\r\n RACommonModule,\r\n RACommonControlsModule\r\n ],\r\n exports: [\r\n RADashboardArea\r\n ],\r\n bootstrap: [RADashboardArea]\r\n})\r\nexport class DashboardFrameworkModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class RADashboardEventBus {\r\n\r\n private eventQueue: Subject<any> = new Subject();\r\n\r\n /**\r\n * To emit an event with the name & data\r\n */\r\n public publish(eventName: string, data: any) {\r\n this.eventQueue.next({ eventName, data })\r\n }\r\n\r\n /**\r\n * To emit an event with the name, data, key & value\r\n */\r\n public publishWithKey(eventName: string, data: any, key: string, value: string) {\r\n this.eventQueue.next({ eventName, data, key, value })\r\n }\r\n\r\n /**\r\n * To subscribe to an event with the name\r\n */\r\n public subscribe(eventName: string): Observable<any> {\r\n return this.eventQueue.asObservable().pipe(\r\n filter((event) => {\r\n return event.eventName == eventName;\r\n }),\r\n map(event => event.data)\r\n )\r\n }\r\n\r\n /**\r\n * To subscribe to an event with the name key & value\r\n */\r\n public subscribeWithKey(eventName: string, key: string, value: string): Observable<any> {\r\n return this.eventQueue.asObservable().pipe(\r\n filter((event) => {\r\n return event.eventName == eventName && event.key == key && event.value == value;\r\n }),\r\n map(event => event.data)\r\n )\r\n }\r\n}","import { Input, OnChanges, SimpleChanges, NgZone, Directive } from '@angular/core';\r\nimport { RADashboardEventBus } from './ra.dashbard.event.bus';\r\nimport { IAppConfig, IDashboardInfo } from '@schneideress/widgetframework';\r\n\r\n@Directive()\r\nexport abstract class RaBaseDashboardTemplate {\r\n\r\n public userDashboardId!: number;\r\n public raDashboardEventBus!: RADashboardEventBus;\r\n public appConfig!: IAppConfig;\r\n public dashboardInfo!: IDashboardInfo;\r\n public isIndicatorDashboard!: boolean;\r\n public templateConfig: any;\r\n\r\n @Input('dashboard-id') dashboardId!: number;\r\n @Input('global-filter') globalFilter: any;\r\n @Input('download-datastream-limit') downloadDatastreamLimit: any;\r\n @Input('report-datastream-limit') reportDatastreamLimit: any;\r\n @Input('bulk_Action_Data') bulkActionData: any;\r\n\r\n constructor(private ngZone: NgZone) {\r\n }\r\n @Input() initialize = (eventBus: RADashboardEventBus, userDashboardId: number, \r\n appConfig: IAppConfig, dashboardInfo: IDashboardInfo, isIndicatorDashboard: boolean, templateConfig?: any) => {\r\n this.ngZone.run(() => {\r\n this.userDashboardId = userDashboardId;\r\n this.appConfig = appConfig;\r\n this.raDashboardEventBus = eventBus;\r\n this.dashboardInfo = dashboardInfo;\r\n this.isIndicatorDashboard = isIndicatorDashboard;\r\n this.templateConfig = templateConfig;\r\n });\r\n this.init();\r\n }\r\n abstract init(): void;\r\n\r\n ngOnInit(): void {\r\n var myEvent = new CustomEvent(\"event-template-initiated\");\r\n document.body.dispatchEvent(myEvent);\r\n }\r\n\r\n\r\n}","import { Directive, Input } from '@angular/core';\r\nimport { IAppConfig } from '@schneideress/widgetframework';\r\n\r\n@Directive()\r\nexport abstract class RaBaseDashboardFilter {\r\n\r\n abstract getFilterConfig(): any;\r\n abstract setFilterConfig(filter: string, appConfig: IAppConfig): any;\r\n abstract clearData(): void;\r\n abstract isValid(): boolean;\r\n abstract showHideInapplicableMsg(status: boolean): any;\r\n abstract showDateRangeControl(isIndicatorDashboard: boolean):any;\r\n\r\n @Input() private getAllFilterConfig = () => {\r\n return this.getFilterConfig();\r\n }\r\n\r\n @Input() setInapplicableFilterMsg = (status: boolean) => {\r\n this.showHideInapplicableMsg(status);\r\n }\r\n\r\n @Input() isValidEntry = () => {\r\n return this.isValid();\r\n }\r\n\r\n @Input() clearAllData = () => {\r\n this.clearData();\r\n }\r\n\r\n @Input() setAllFilterConfig = (globalFilter: string, appConfig: IAppConfig) => {\r\n this.setFilterConfig(globalFilter, appConfig);\r\n }\r\n\r\n @Input() showOnlyDateRangeControl = (isIndicatorDashboard: boolean) => {\r\n this.showDateRangeControl(isIndicatorDashboard)\r\n }\r\n \r\n ngOnInit(): void {\r\n var myEvent = new CustomEvent(\"global-filter-initiated\");\r\n document.body.dispatchEvent(myEvent);\r\n }\r\n}","/*\r\n * Public API Surface of ra-dashboard-framework\r\n */\r\n\r\nexport * from './lib/ra.dashboard.service';\r\nexport * from './lib/ra-dashboard-area/ra.dashboard.area';\r\nexport * from './lib/ra-widget-container/ra.widget.container.component';\r\nexport * from './lib/ra.dashboard.module';\r\nexport * from './lib/ra.dashbard.event.bus';\r\nexport * from './lib/ra.event.enum';\r\nexport * from './lib/ra.base.dashboard.template';\r\nexport * from './lib/ra.base.dashboard.filter';\r\nexport * from './lib/ra.dashboard.responsive.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GridsterComponent","i1","i1.RaDashboardService","i2","i5","i5.RADashboardResponsiveService","i6","i7.GridsterComponent","i8.GridsterItemComponent","i9.RAWidgetContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schneideress-dashboardframework.mjs","sources":["../../../projects/ra-dashboard-framework/src/lib/ra.dashboard.service.ts","../../../projects/ra-dashboard-framework/src/lib/ra.event.enum.ts","../../../projects/ra-dashboard-framework/src/lib/ra.gridster.config.ts","../../../projects/ra-dashboard-framework/src/lib/ra.dashboard.responsive.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterConfig.interface.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterCompact.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterConfig.constant.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterUtils.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterEmptyCell.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterPreview.component.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterRenderer.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridster.component.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridster.html","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterPush.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterScroll.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterSwap.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterDraggable.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterPushResize.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterResizable.service.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterItem.component.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridsterItem.html","../../../projects/ra-dashboard-framework/src/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.ts","../../../projects/ra-dashboard-framework/src/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.html","../../../projects/ra-dashboard-framework/src/lib/ra-widget-container/ra.widget.container.component.ts","../../../projects/ra-dashboard-framework/src/lib/ra-widget-container/ra.widget.container.component.html","../../../projects/ra-dashboard-framework/src/lib/ra-dashboard-area/ra.dashboard.area.ts","../../../projects/ra-dashboard-framework/src/lib/ra-dashboard-area/ra.dashboard.area.html","../../../projects/ra-dashboard-framework/src/lib/custom.notifier.options.ts","../../../projects/ra-dashboard-framework/src/gridster/lib/gridster.module.ts","../../../projects/ra-dashboard-framework/src/lib/ra.dashboard.module.ts","../../../projects/ra-dashboard-framework/src/lib/ra.dashbard.event.bus.ts","../../../projects/ra-dashboard-framework/src/lib/ra.base.dashboard.template.ts","../../../projects/ra-dashboard-framework/src/lib/ra.base.dashboard.filter.ts","../../../projects/ra-dashboard-framework/src/public-api.ts","../../../projects/ra-dashboard-framework/src/schneideress-dashboardframework.ts"],"sourcesContent":["import { Injectable, Injector } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { BaseService } from '@schneideress/ra-common';\r\nimport { IAppConfig, IDashboardInfo, IWidgetInfo } from '@schneideress/widgetframework';\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RaDashboardService extends BaseService {\r\n\r\n constructor(injector: Injector) {\r\n super(injector, '');\r\n }\r\n\r\n private loadedScripts: string[] = [];\r\n public clientId: any = undefined;\r\n /* \r\n * To load external scripts in the dom\r\n */\r\n public loadExternalScript(scriptPath: string, callback: any): void {\r\n if (this.loadedScripts.indexOf(scriptPath) == -1) {\r\n const script = document.createElement('script');\r\n script.src = scriptPath;\r\n // script.addEventListener(\"load\", callback(), true);\r\n script.onload = function () {\r\n callback();\r\n };\r\n document.body.appendChild(script);\r\n this.loadedScripts.push(scriptPath);\r\n\r\n }\r\n else {\r\n callback();\r\n }\r\n }\r\n\r\n /*\r\n * To retrieve the list of widgets based on dashboard id & areaId\r\n */\r\n public getWidgetsByDashboardArea(widgetInfo: IWidgetInfo, appConfig: IAppConfig) {\r\n\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n return this.post('widget/GetWidgetByArea', widgetInfo);\r\n\r\n }\r\n\r\n public updateWidgets(widgetList: Array<IWidgetInfo>, appConfig: IAppConfig) {\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n return this.post('widget/UpdateAreaWidgets', widgetList);\r\n }\r\n\r\n public getWidgetConfigInfo(widgetInfo:any) {\r\n return of();\r\n }\r\n\r\n /*\r\n * To update the configuration of a widget.\r\n */\r\n public updateConfig(config: any, widgetInstanceId: number) {\r\n\r\n }\r\n\r\n /**To add widget to the database */\r\n public addWidget(widgetInfo: any, appConfig: IAppConfig) {\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n return this.post('widget/AddWidgetUser', widgetInfo);\r\n }\r\n\r\n /** To Delete current widget from DOM*/\r\n public deleteWidget(widgetInfo: any, appConfig: IAppConfig) {\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n return this.delete('widget/DeleteWidgetUser?widgetInstanceId=' + widgetInfo.widgetInstanceId);\r\n }\r\n\r\n /**To Update widgetInfo in database */\r\n public updateWidget(widgetInfo: IWidgetInfo, appConfig: IAppConfig) {\r\n this.baseUrl = appConfig.apiBaseUrl;\r\n \r\n let info:any = {};\r\n info.widgetConfigInfo = widgetInfo.widgetConfigInfo;\r\n info.widgetInstanceId = widgetInfo.widgetInstanceId;\r\n info.widgetTitle = widgetInfo.widgetTitle;\r\n info.widgetType = widgetInfo.widgetType;\r\n info.widgetId = widgetInfo.widgetId;\r\n\r\n return this.post('widget/UpdateUserWidget', widgetInfo);\r\n }\r\n\r\n /** To Move or change position if current widget container*/\r\n public moveWidget(widgetInfo: any) {\r\n\r\n }\r\n\r\n\r\n /** To Copy Current widget with same configuration*/\r\n public copyWidget(widgetInfo: any) {\r\n\r\n }\r\n}\r\n","export enum RAEvent {\r\n\r\n /** widget selection click on widget library */\r\n WidgetSelected = \"widgetSelected\",\r\n\r\n /** triggers when user click on the edit link in widget container */\r\n WidgetEditClicked = \"widgetEditClicked\",\r\n\r\n /** triggers when user clicks the cancel button on widget configuration window */\r\n ConfigCancelClick = \"configCancelClick\",\r\n\r\n /** triggers when user click on the close button on widget configuration window */\r\n ConfigCloseClick = \"configCloseClick\",\r\n\r\n /** add button click on widget configuration window */\r\n ConfigAddClick = \"configAddClick\",\r\n\r\n /** triggers when a user click on the save button in widget configuration window */\r\n ConfigChanged = \"configChanged\",\r\n\r\n /**To rearrange widgets in a dashboard */\r\n RearrangeClicked = \"rearrangeClicked\",\r\n\r\n /**dashboard customize button click */\r\n DashboardCustomizeClick = \"dashboardCustomizeClick\",\r\n\r\n /**triggers when user clicks on the dashboard change icon in header section */\r\n DashboardChanged = \"dashboardChanged\",\r\n\r\n /** triggers when user clicks the close button on library */\r\n WidgetLibraryCloseBtnClicked = \"WidgetLibraryCloseBtnClicked\",\r\n\r\n /** triggers when user clicks on view dashboard*/\r\n LoadDashboard = \"LoadDashboard\",\r\n\r\n /** triggers when user clicks on copywidget */\r\n CopyWidget = \"CopyWidget\",\r\n\r\n /**triggers when user clicks on Move widget */\r\n MoveWidget = \"MoveWidget\",\r\n\r\n /**triggers when user raise delete widget event */\r\n WidgetDelete = \"WidgetDelete\",\r\n\r\n /** used to add widget to widgetlist when user copies a widget to current dashboard */\r\n AddWidget = \"AddWidget\",\r\n\r\n /** done button click on widget library flyout */\r\n widgetLibraryDoneClick = \"widgetLibraryDoneClick\",\r\n\r\n /**refresh favorite icon after srtting and resetting favorites */\r\n favoriteIconRefresh = \"favoriteIconRefresh\",\r\n\r\n /**to refresh menu content */\r\n QuickLinkRefresh = \"QuickLinkRefresh\",\r\n\r\n /**To raise widget added event */\r\n WidgetAdded = \"WidgetAdded\",\r\n\r\n /**To update global filter site from map widget selected site */\r\n UpdateGlobalFilterFromMapWidget = \"UpdateGlobalFilterFromMapWidget\",\r\n\r\n /**To add widget on empty dashboard */\r\n AddWidgetEmptyDashboard = \"AddWidgetEmptyDashboard\",\r\n\r\n /**To raise new widget add click event */\r\n AddNewWidgetToDashboard = \"AddNewWidgetToDashboard\",\r\n\r\n HideDashboardBanner = \"HideDashboardBanner\",\r\n\r\n /**To launch flyout from custom widget library */\r\n LaunchCustomWidgetFlyout = \"LaunchCustomWidgetFlyout\",\r\n\r\n /**update applied filter badge for inaplicable filters */\r\n UpdateAppledFiterForInapplicableFilter = \"UpdateAppledFiterForInapplicableFilter\",\r\n\r\n /**show inapplicable filter message in global filter flyout */\r\n ShowInapplicableFilterMessage = \"ShowInapplicableFilterMessage\",\r\n\r\n /** Bulk Action Clicked */\r\n BulkActionClick = \"BulkActionClick\",\r\n\r\n /** Global Filter Clicked */\r\n /** When user change the curated filter(eg:data streams), system will create/delete widgets */\r\n CuratedFilterChange = \"CuratedFilterChange\",\r\n GlobalFilterClick = \"GlobalFilterClick\",\r\n LayoutChange = \"LayoutChange\",\r\n /** Event raised when DownloadOnlyState is activated */\r\n DownloadOnlyState= \"DownloadOnlyState\",\r\n /** Event on excel download button clicked*/\r\n DownloadExcelClick = \"DownloadExcelClick\",\r\n /** Event on emission report snapshot button clicked*/\r\n SnapShotClick = \"SnapShotClick\",\r\n /** Event on emission report snapshot selected from list*/\r\n SnapShotSelected = \"SnapShotSelected\",\r\n /** Event to update widget count */\r\n UpdateWidgetCount = \"UpdateWidgetCount\",\r\n\r\n /** Trends Report: open download format modal (payload: { widgetInstanceId, isChartDownloadVisible, isGridDownloadVisible }) */\r\n TrendsReportDownloadModalOpen = \"TrendsReportDownloadModalOpen\",\r\n\r\n /** Trends Report: execute download for widget (payload: { widgetInstanceId, format }) */\r\n TrendsReportDownloadRequest = \"TrendsReportDownloadRequest\"\r\n}\r\n\r\nexport enum RAEventKey {\r\n /** on edit widget click */\r\n WidgetInstanceId = \"widgetInstanceId\"\r\n}\r\n\r\n","import { CompactType, DisplayGrid, GridsterConfig, GridType } from './../gridster/lib/gridsterConfig.interface';\r\nexport const GridsterConfigDefaultSettings: GridsterConfig = {\r\n gridType: 'scrollVertical',\r\n compactType: 'none',\r\n margin: 10,\r\n outerMargin: true,\r\n outerMarginTop: 10,\r\n outerMarginRight: 0,\r\n outerMarginBottom: 30,\r\n outerMarginLeft: 0,\r\n useTransformPositioning: true,\r\n mobileBreakpoint: 640,\r\n minCols: 10,\r\n maxCols: 10,\r\n minRows: 1,\r\n maxRows: 100,\r\n maxItemCols: 10,\r\n minItemCols: 1,\r\n maxItemRows: 1000,\r\n minItemRows: 1,\r\n maxItemArea: 1000,\r\n minItemArea: 1,\r\n defaultItemCols: 1,\r\n defaultItemRows: 1,\r\n keepFixedHeightInMobile: false,\r\n keepFixedWidthInMobile: false,\r\n scrollSensitivity: 10,\r\n scrollSpeed: 20,\r\n enableEmptyCellClick: false,\r\n enableEmptyCellContextMenu: false,\r\n enableEmptyCellDrop: false,\r\n enableEmptyCellDrag: false,\r\n emptyCellDragMaxCols: 50,\r\n emptyCellDragMaxRows: 50,\r\n ignoreMarginInRow: true,\r\n draggable: {\r\n enabled: true,\r\n dragHandleClass: 'widget-move',\r\n ignoreContent: true\r\n },\r\n resizable: {\r\n enabled: true,\r\n },\r\n swap: true,\r\n pushItems: true,\r\n disablePushOnDrag: false,\r\n disablePushOnResize: false,\r\n pushDirections: { north: true, east: true, south: true, west: true },\r\n pushResizeItems: false,\r\n displayGrid: 'none',\r\n disableWindowResize: false,\r\n disableWarnings: false,\r\n scrollToNewItems: true,\r\n autoResizeonDrag: false,\r\n setGridSize: false\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { GridsterConfig, GridsterItem } from \"../gridster\";\r\nimport { GridsterConfigDefaultSettings } from \"./ra.gridster.config\";\r\nimport { Subject } from \"rxjs\";\r\n\r\ndeclare var window: any;\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class RADashboardResponsiveService {\r\n public resized = new Subject();\r\n public maxColsDesktop: number = 8;\r\n private screenWidthAdjusted: any;\r\n private screenWidth!: number;\r\n private resInfo = [\r\n { id: 1, start: 0, end: 767, minCols: 1, maxCols: 1 },\r\n { id: 2, start: 768, end: 1024, minCols: 1, maxCols: 2 },\r\n { id: 3, start: 1025, end: 1366, minCols: 1, maxCols: 6 },\r\n {\r\n id: 4,\r\n start: 1367,\r\n end: 9999999999,\r\n minCols: 1,\r\n maxCols: this.maxColsDesktop,\r\n },\r\n ];\r\n private currentResInfo: any;\r\n\r\n constructor() {\r\n this.setScreenWidth();\r\n window.addEventListener(\"resize\", () => {\r\n var context = this;\r\n if (this.screenWidthAdjusted) clearTimeout(this.screenWidthAdjusted);\r\n this.screenWidthAdjusted = setTimeout(() => {\r\n context.setScreenWidth();\r\n }, 500);\r\n });\r\n }\r\n\r\n private setScreenWidth() {\r\n this.screenWidth = window.outerWidth;\r\n if (this.IsDesktopView) {\r\n this.currentResInfo = this.resInfo[3];\r\n this.resized.next(true);\r\n } else {\r\n let resInfo = this.resInfo.filter((item) => {\r\n return item.end >= this.screenWidth && item.start <= this.screenWidth;\r\n })[0];\r\n if (!this.currentResInfo || this.currentResInfo.id != resInfo.id) {\r\n this.currentResInfo = resInfo;\r\n this.resized.next(null);\r\n }\r\n }\r\n }\r\n\r\n public get IsDesktopView(): boolean {\r\n let agent = navigator.userAgent || navigator.vendor || window.opera;\r\n if (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\r\n agent\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n agent.substring(0, 4)\r\n )\r\n )\r\n return false;\r\n return true;\r\n }\r\n\r\n public get IsMobile(): boolean {\r\n let check = false;\r\n let agent = navigator.userAgent || navigator.vendor || window.opera;\r\n if (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\r\n agent\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n agent.substring(0, 4)\r\n )\r\n )\r\n check = true;\r\n return check;\r\n }\r\n\r\n public getGridsterConfig(isWidgetMgmnt: boolean, resize: boolean, canMove: boolean): GridsterConfig {\r\n let config: GridsterConfig = GridsterConfigDefaultSettings;\r\n\r\n config.minCols = this.currentResInfo.maxCols;\r\n config.maxCols = this.currentResInfo.maxCols;\r\n config.minRows = this.currentResInfo.minCols;\r\n config.maxItemCols = this.currentResInfo.maxCols;\r\n config.minItemCols = this.currentResInfo.minCols;\r\n config.minItemRows = this.currentResInfo.minCols;\r\n config.minItemArea =\r\n this.currentResInfo.minCols * this.currentResInfo.minCols;\r\n config.defaultItemCols = this.currentResInfo.minCols;\r\n config.defaultItemRows = this.currentResInfo.minCols;\r\n\r\n if (!this.IsDesktopView || !isWidgetMgmnt) {\r\n config.resizable!.enabled = false;\r\n config.swap = false;\r\n config.draggable!.enabled = false;\r\n } else {\r\n config.resizable!.enabled = true;\r\n config.swap = true;\r\n config.draggable!.enabled = true;\r\n }\r\n if (!resize) {\r\n config.resizable!.enabled = false;\r\n config.swap = false;\r\n }\r\n if (!canMove) {\r\n config.draggable!.enabled = false;\r\n }\r\n return config;\r\n }\r\n\r\n /**To map IwidgetInfo object to gridsterItem */\r\n public getGridsterItem(widget: any) {\r\n if (widget.widgetSettings) {\r\n widget.settings = JSON.parse(widget.widgetSettings);\r\n }\r\n if (widget.templateSettings) {\r\n widget.templateWidgetSettings = JSON.parse(widget.templateSettings);\r\n }\r\n let gridsterItem = <GridsterItem>{\r\n cols: this.getWidth(widget.width),\r\n rows: this.getHeight(widget.height),\r\n x: this.IsDesktopView ? widget.position_x : 0,\r\n y: this.IsDesktopView ? widget.position_y : 0,\r\n widgetInfo: widget,\r\n minItemRows: this.getMinItemRows(widget),\r\n minItemCols: this.getMinItemCols(widget),\r\n };\r\n return gridsterItem;\r\n }\r\n\r\n private getWidth(width: number): number {\r\n if (!this.IsDesktopView) {\r\n width = Math.floor(\r\n (width / this.maxColsDesktop) * this.currentResInfo.maxCols\r\n );\r\n if (width < this.currentResInfo.minCols)\r\n width = this.currentResInfo.minCols;\r\n }\r\n return width;\r\n }\r\n private getMinItemRows(widget: any): any {\r\n if (this.IsDesktopView) {\r\n if (widget.settings && widget.settings.minRows) {\r\n return widget.settings.minRows;\r\n }\r\n }\r\n }\r\n private getMinItemCols(widget: any): any {\r\n if (this.IsDesktopView) {\r\n if (widget.settings && widget.settings.minCols) {\r\n return widget.settings.minCols;\r\n }\r\n }\r\n }\r\n private getHeight(height: number) {\r\n if (!this.IsDesktopView) {\r\n height = Math.floor(\r\n (height / this.maxColsDesktop) * this.currentResInfo.maxCols\r\n );\r\n if (height < this.currentResInfo.minCols)\r\n height = this.currentResInfo.minCols;\r\n }\r\n return height;\r\n }\r\n}\r\n","import { GridsterComponentInterface } from './gridster.interface';\r\nimport {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\n\r\nexport type gridTypes =\r\n | 'fit'\r\n | 'scrollVertical'\r\n | 'scrollHorizontal'\r\n | 'fixed'\r\n | 'verticalFixed'\r\n | 'horizontalFixed';\r\nexport type displayGrids = 'always' | 'onDrag&Resize' | 'none';\r\nexport type compactTypes =\r\n | 'none'\r\n | 'compactUp'\r\n | 'compactLeft'\r\n | 'compactUp&Left'\r\n | 'compactLeft&Up'\r\n | 'compactRight'\r\n | 'compactUp&Right'\r\n | 'compactRight&Up'\r\n | 'compactDown'\r\n | 'compactDown&Left'\r\n | 'compactLeft&Down'\r\n | 'compactDown&Right'\r\n | 'compactRight&Down';\r\n\r\nexport enum GridType {\r\n Fit = 'fit',\r\n ScrollVertical = 'scrollVertical',\r\n ScrollHorizontal = 'scrollHorizontal',\r\n Fixed = 'fixed',\r\n VerticalFixed = 'verticalFixed',\r\n HorizontalFixed = 'horizontalFixed'\r\n}\r\n\r\nexport enum DisplayGrid {\r\n Always = 'always',\r\n OnDragAndResize = 'onDrag&Resize',\r\n None = 'none'\r\n}\r\n\r\nexport enum CompactType {\r\n None = 'none',\r\n CompactUp = 'compactUp',\r\n CompactLeft = 'compactLeft',\r\n CompactUpAndLeft = 'compactUp&Left',\r\n CompactLeftAndUp = 'compactLeft&Up',\r\n CompactRight = 'compactRight',\r\n CompactUpAndRight = 'compactUp&Right',\r\n CompactRightAndUp = 'compactRight&Up',\r\n CompactDown = 'compactDown',\r\n CompactDownAndLeft = 'compactDown&Left',\r\n CompactLeftAndDown = 'compactLeft&Down',\r\n CompactDownAndRight = 'compactDown&Right',\r\n CompactRightAndDown = 'compactRight&Down'\r\n}\r\n\r\nexport enum DirTypes {\r\n LTR = 'ltr',\r\n RTL = 'rtl'\r\n}\r\n\r\nexport type dirTypes = 'ltr' | 'rtl';\r\n\r\nexport interface GridsterConfig {\r\n gridType?: gridTypes;\r\n scale?: number;\r\n fixedColWidth?: number;\r\n fixedRowHeight?: number;\r\n keepFixedHeightInMobile?: boolean;\r\n keepFixedWidthInMobile?: boolean;\r\n setGridSize?: boolean;\r\n compactType?: compactTypes;\r\n mobileBreakpoint?: number;\r\n allowMultiLayer?: boolean;\r\n defaultLayerIndex?: number;\r\n maxLayerIndex?: number;\r\n baseLayerIndex?: number;\r\n minCols?: number;\r\n maxCols?: number;\r\n minRows?: number;\r\n maxRows?: number;\r\n defaultItemCols?: number;\r\n defaultItemRows?: number;\r\n maxItemCols?: number;\r\n maxItemRows?: number;\r\n minItemCols?: number;\r\n minItemRows?: number;\r\n minItemArea?: number;\r\n maxItemArea?: number;\r\n addEmptyRowsCount?: number;\r\n rowHeightRatio?: number;\r\n margin?: number;\r\n outerMargin?: boolean;\r\n outerMarginTop?: number | null;\r\n outerMarginRight?: number | null;\r\n outerMarginBottom?: number | null;\r\n outerMarginLeft?: number | null;\r\n useTransformPositioning?: boolean;\r\n scrollSensitivity?: number | null;\r\n scrollSpeed?: number;\r\n initCallback?: (gridster: GridsterComponentInterface) => void;\r\n destroyCallback?: (gridster: GridsterComponentInterface) => void;\r\n gridSizeChangedCallback?: (gridster: GridsterComponentInterface) => void;\r\n itemChangeCallback?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface\r\n ) => void;\r\n itemResizeCallback?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface\r\n ) => void;\r\n itemInitCallback?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface\r\n ) => void;\r\n itemRemovedCallback?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface\r\n ) => void;\r\n itemValidateCallback?: (item: GridsterItem) => boolean;\r\n draggable?: Draggable;\r\n resizable?: Resizable;\r\n swap?: boolean;\r\n swapWhileDragging?: boolean;\r\n pushItems?: boolean;\r\n disablePushOnDrag?: boolean;\r\n disablePushOnResize?: boolean;\r\n disableAutoPositionOnConflict?: boolean;\r\n pushDirections?: PushDirections;\r\n pushResizeItems?: boolean;\r\n displayGrid?: displayGrids;\r\n disableWindowResize?: boolean;\r\n disableWarnings?: boolean;\r\n scrollToNewItems?: boolean;\r\n disableScrollHorizontal?: boolean;\r\n disableScrollVertical?: boolean;\r\n enableBoundaryControl?: boolean;\r\n enableEmptyCellClick?: boolean;\r\n enableEmptyCellContextMenu?: boolean;\r\n enableEmptyCellDrop?: boolean;\r\n enableEmptyCellDrag?: boolean;\r\n enableOccupiedCellDrop?: boolean;\r\n emptyCellClickCallback?: (event: MouseEvent, item: GridsterItem) => void;\r\n emptyCellContextMenuCallback?: (\r\n event: MouseEvent,\r\n item: GridsterItem\r\n ) => void;\r\n emptyCellDropCallback?: (event: DragEvent, item: GridsterItem) => void;\r\n emptyCellDragCallback?: (event: MouseEvent, item: GridsterItem) => void;\r\n emptyCellDragMaxCols?: number;\r\n emptyCellDragMaxRows?: number;\r\n ignoreMarginInRow?: boolean;\r\n dirType?: dirTypes;\r\n api?: {\r\n resize?: () => void;\r\n optionsChanged?: () => void;\r\n getNextPossiblePosition?: (newItem: GridsterItem) => boolean;\r\n getFirstPossiblePosition?: (item: GridsterItem) => GridsterItem;\r\n getLastPossiblePosition?: (item: GridsterItem) => GridsterItem;\r\n getCurrentRowHeight?:()=>number;\r\n getItemComponent?: (\r\n item: GridsterItem\r\n ) => GridsterItemComponentInterface | undefined;\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n [propName: string]: any;\r\n}\r\n\r\nexport interface DragBase {\r\n enabled?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n stop?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface,\r\n event: MouseEvent\r\n ) => Promise<any> | void;\r\n start?: (\r\n item: GridsterItem,\r\n itemComponent: GridsterItemComponentInterface,\r\n event: MouseEvent\r\n ) => void;\r\n delayStart?: number;\r\n}\r\n\r\nexport interface Draggable extends DragBase {\r\n ignoreContentClass?: string;\r\n ignoreContent?: boolean;\r\n dragHandleClass?: string;\r\n dropOverItems?: boolean;\r\n dropOverItemsCallback?: (\r\n source: GridsterItem,\r\n target: GridsterItem,\r\n grid?: GridsterComponentInterface\r\n ) => void;\r\n}\r\n\r\nexport interface Resizable extends DragBase {\r\n handles?: {\r\n s: boolean;\r\n e: boolean;\r\n n: boolean;\r\n w: boolean;\r\n se: boolean;\r\n ne: boolean;\r\n sw: boolean;\r\n nw: boolean;\r\n };\r\n}\r\n\r\nexport interface PushDirections {\r\n north: boolean;\r\n east: boolean;\r\n south: boolean;\r\n west: boolean;\r\n}\r\n","import { GridsterComponentInterface } from './gridster.interface';\r\nimport {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\nimport { CompactType } from './gridsterConfig.interface';\r\n\r\nexport class GridsterCompact {\r\n constructor(private gridster: GridsterComponentInterface) {}\r\n\r\n destroy(): void {\r\n this.gridster = null!;\r\n }\r\n\r\n checkCompact(): void {\r\n if (this.gridster.$options.compactType !== CompactType.None) {\r\n if (this.gridster.$options.compactType === CompactType.CompactUp) {\r\n this.checkCompactMovement('y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeft\r\n ) {\r\n this.checkCompactMovement('x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactUpAndLeft\r\n ) {\r\n this.checkCompactMovement('y', -1);\r\n this.checkCompactMovement('x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeftAndUp\r\n ) {\r\n this.checkCompactMovement('x', -1);\r\n this.checkCompactMovement('y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactRight\r\n ) {\r\n this.checkCompactMovement('x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactUpAndRight\r\n ) {\r\n this.checkCompactMovement('y', -1);\r\n this.checkCompactMovement('x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactRightAndUp\r\n ) {\r\n this.checkCompactMovement('x', 1);\r\n this.checkCompactMovement('y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDown\r\n ) {\r\n this.checkCompactMovement('y', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDownAndLeft\r\n ) {\r\n this.checkCompactMovement('y', 1);\r\n this.checkCompactMovement('x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDownAndRight\r\n ) {\r\n this.checkCompactMovement('y', 1);\r\n this.checkCompactMovement('x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeftAndDown\r\n ) {\r\n this.checkCompactMovement('x', -1);\r\n this.checkCompactMovement('y', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactRightAndDown\r\n ) {\r\n this.checkCompactMovement('x', 1);\r\n this.checkCompactMovement('y', 1);\r\n }\r\n }\r\n }\r\n\r\n checkCompactItem(item: GridsterItem): void {\r\n if (this.gridster.$options.compactType !== CompactType.None) {\r\n if (this.gridster.$options.compactType === CompactType.CompactUp) {\r\n this.moveTillCollision(item, 'y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeft\r\n ) {\r\n this.moveTillCollision(item, 'x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactUpAndLeft\r\n ) {\r\n this.moveTillCollision(item, 'y', -1);\r\n this.moveTillCollision(item, 'x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeftAndUp\r\n ) {\r\n this.moveTillCollision(item, 'x', -1);\r\n this.moveTillCollision(item, 'y', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactUpAndRight\r\n ) {\r\n this.moveTillCollision(item, 'y', -1);\r\n this.moveTillCollision(item, 'x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDown\r\n ) {\r\n this.moveTillCollision(item, 'y', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDownAndLeft\r\n ) {\r\n this.moveTillCollision(item, 'y', 1);\r\n this.moveTillCollision(item, 'x', -1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactLeftAndDown\r\n ) {\r\n this.moveTillCollision(item, 'x', -1);\r\n this.moveTillCollision(item, 'y', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactDownAndRight\r\n ) {\r\n this.moveTillCollision(item, 'y', 1);\r\n this.moveTillCollision(item, 'x', 1);\r\n } else if (\r\n this.gridster.$options.compactType === CompactType.CompactRightAndDown\r\n ) {\r\n this.moveTillCollision(item, 'x', 1);\r\n this.moveTillCollision(item, 'y', 1);\r\n }\r\n }\r\n }\r\n\r\n private checkCompactMovement(direction: 'x' | 'y', delta: number): void {\r\n let widgetMoved = false;\r\n this.gridster.grid.forEach((widget: GridsterItemComponentInterface) => {\r\n if (widget.$item.compactEnabled !== false) {\r\n const moved = this.moveTillCollision(widget.$item, direction, delta);\r\n if (moved) {\r\n widgetMoved = true;\r\n widget.item[direction] = widget.$item[direction];\r\n widget.itemChanged();\r\n }\r\n }\r\n });\r\n if (widgetMoved) {\r\n this.checkCompact();\r\n }\r\n }\r\n\r\n private moveTillCollision(\r\n item: GridsterItem,\r\n direction: 'x' | 'y',\r\n delta: number\r\n ): boolean {\r\n item[direction] += delta;\r\n if (this.gridster.checkCollision(item)) {\r\n item[direction] -= delta;\r\n return false;\r\n } else {\r\n this.moveTillCollision(item, direction, delta);\r\n return true;\r\n }\r\n }\r\n}\r\n","import {\r\n CompactType,\r\n DirTypes,\r\n DisplayGrid,\r\n GridsterConfig,\r\n GridType\r\n} from './gridsterConfig.interface';\r\n\r\nexport const GridsterConfigService: GridsterConfig = {\r\n gridType: GridType.Fit, // 'fit' will fit the items in the container without scroll;\r\n scale: 1, // scale param to zoom in/zoom out\r\n // 'scrollVertical' will fit on width and height of the items will be the same as the width\r\n // 'scrollHorizontal' will fit on height and width of the items will be the same as the height\r\n // 'fixed' will set the rows and columns dimensions based on fixedColWidth and fixedRowHeight options\r\n // 'verticalFixed' will set the rows to fixedRowHeight and columns width will fit the space available\r\n // 'horizontalFixed' will set the columns to fixedColWidth and rows height will fit the space available\r\n fixedColWidth: 250, // fixed col width for gridType: 'fixed'\r\n fixedRowHeight: 250, // fixed row height for gridType: 'fixed'\r\n keepFixedHeightInMobile: false, // keep the height from fixed gridType in mobile layout\r\n keepFixedWidthInMobile: false, // keep the width from fixed gridType in mobile layout\r\n setGridSize: false, // sets grid size depending on content\r\n compactType: CompactType.None, // compact items: 'none' | 'compactUp' | 'compactLeft' | 'compactUp&Left' | 'compactLeft&Up'\r\n mobileBreakpoint: 640, // if the screen is not wider that this, remove the grid layout and stack the items\r\n useBodyForBreakpoint: false, // whether to use the body width to determine the mobile breakpoint. Uses the element width when false.\r\n allowMultiLayer: false,\r\n defaultLayerIndex: 0,\r\n maxLayerIndex: 2,\r\n baseLayerIndex: 1,\r\n minCols: 1, // minimum amount of columns in the grid\r\n maxCols: 100, // maximum amount of columns in the grid\r\n minRows: 1, // minimum amount of rows in the grid\r\n maxRows: 100, // maximum amount of rows in the grid\r\n defaultItemCols: 1, // default width of an item in columns\r\n defaultItemRows: 1, // default height of an item in rows\r\n maxItemCols: 50, // max item number of cols\r\n maxItemRows: 50, // max item number of rows\r\n minItemCols: 1, // min item number of columns\r\n minItemRows: 1, // min item number of rows\r\n minItemArea: 1, // min item area: cols * rows\r\n maxItemArea: 2500, // max item area: cols * rows\r\n addEmptyRowsCount: 0, // add a number of extra empty rows at the end\r\n rowHeightRatio: 1, // row height ratio from column width\r\n margin: 10, // margin between grid items\r\n outerMargin: true, // if margins will apply to the sides of the container\r\n outerMarginTop: null, // override outer margin for grid\r\n outerMarginRight: null, // override outer margin for grid\r\n outerMarginBottom: null, // override outer margin for grid\r\n outerMarginLeft: null, // override outer margin for grid\r\n useTransformPositioning: true, // toggle between transform or top/left positioning of items\r\n scrollSensitivity: 10, // margin of the dashboard where to start scrolling\r\n scrollSpeed: 20, // how much to scroll each mouse move when in the scrollSensitivity zone\r\n initCallback: undefined, // callback to call after grid has initialized. Arguments: gridsterComponent\r\n destroyCallback: undefined, // callback to call after grid has destroyed. Arguments: gridsterComponent\r\n gridSizeChangedCallback: undefined, // callback to call after grid has changed size. Arguments: gridsterComponent\r\n itemChangeCallback: undefined, // callback to call for each item when is changes x, y, rows, cols.\r\n // Arguments: gridsterItem, gridsterItemComponent\r\n itemResizeCallback: undefined, // callback to call for each item when width/height changes.\r\n // Arguments: gridsterItem, gridsterItemComponent\r\n itemInitCallback: undefined, // callback to call for each item when is initialized.\r\n // Arguments: gridsterItem, gridsterItemComponent\r\n itemRemovedCallback: undefined, // callback to call for each item when is initialized.\r\n // Arguments: gridsterItem, gridsterItemComponent\r\n itemValidateCallback: undefined, // callback to call to validate item position/size. Return true if valid.\r\n // Arguments: gridsterItem\r\n enableEmptyCellClick: false, // enable empty cell click events\r\n enableEmptyCellContextMenu: false, // enable empty cell context menu (right click) events\r\n enableEmptyCellDrop: false, // enable empty cell drop events\r\n enableEmptyCellDrag: false, // enable empty cell drag events\r\n enableOccupiedCellDrop: false, // enable occupied cell drop events\r\n emptyCellClickCallback: undefined, // empty cell click callback\r\n emptyCellContextMenuCallback: undefined, // empty cell context menu (right click) callback\r\n emptyCellDropCallback: undefined, // empty cell drag drop callback. HTML5 Drag & Drop\r\n emptyCellDragCallback: undefined, // empty cell drag and create item like excel cell selection\r\n emptyCellDragMaxCols: 50, // limit empty cell drag max cols\r\n emptyCellDragMaxRows: 50, // limit empty cell drag max rows\r\n // Arguments: event, gridsterItem{x, y, rows: defaultItemRows, cols: defaultItemCols}\r\n ignoreMarginInRow: false, // ignore the gap between rows for items which span multiple rows (see #162, #224)\r\n draggable: {\r\n delayStart: 0, // milliseconds to delay the start of drag, useful for touch interaction\r\n enabled: false, // enable/disable draggable items\r\n ignoreContentClass: 'gridster-item-content', // default content class to ignore the drag event from\r\n ignoreContent: false, // if true drag will start only from elements from `dragHandleClass`\r\n dragHandleClass: 'drag-handler', // drag event only from this class. If `ignoreContent` is true.\r\n stop: undefined, // callback when dragging an item stops. Accepts Promise return to cancel/approve drag.\r\n start: undefined, // callback when dragging an item starts.\r\n // Arguments: item, gridsterItem, event\r\n dropOverItems: false, // enable drop items on top other item\r\n dropOverItemsCallback: undefined // callback on drop over another item\r\n // Arguments: source, target, gridComponent\r\n },\r\n resizable: {\r\n delayStart: 0, // milliseconds to delay the start of resize, useful for touch interaction\r\n enabled: false, // enable/disable resizable items\r\n handles: {\r\n s: true,\r\n e: true,\r\n n: true,\r\n w: true,\r\n se: true,\r\n ne: true,\r\n sw: true,\r\n nw: true\r\n }, // resizable edges of an item\r\n stop: undefined, // callback when resizing an item stops. Accepts Promise return to cancel/approve resize.\r\n start: undefined // callback when resizing an item starts.\r\n // Arguments: item, gridsterItem, event\r\n },\r\n swap: true, // allow items to switch position if drop on top of another\r\n swapWhileDragging: false, // allow items to switch position while dragging\r\n pushItems: false, // push items when resizing and dragging\r\n disablePushOnDrag: false, // disable push on drag\r\n disablePushOnResize: false, // disable push on resize\r\n pushDirections: { north: true, east: true, south: true, west: true }, // control the directions items are pushed\r\n pushResizeItems: false, // on resize of item will shrink adjacent items\r\n displayGrid: DisplayGrid.OnDragAndResize, // display background grid of rows and columns\r\n disableWindowResize: false, // disable the window on resize listener. This will stop grid to recalculate on window resize.\r\n disableWarnings: false, // disable console log warnings about misplacement of grid items\r\n scrollToNewItems: false, // scroll to new items placed in a scrollable view\r\n disableScrollHorizontal: false, // disable horizontal scrolling\r\n disableScrollVertical: false, // disable vertical scrolling\r\n enableBoundaryControl: false, // enable boundary control while dragging items\r\n disableAutoPositionOnConflict: false, // disable auto-position of items on conflict state,\r\n dirType: DirTypes.LTR // page direction, rtl=right to left ltr= left to right, if you use rtl language set dirType to rtl\r\n};\r\n","import { GridsterComponentInterface } from './gridster.interface';\r\n\r\nexport class GridsterUtils {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static merge(obj1: any, obj2: any, properties: any): any {\r\n for (const p in obj2) {\r\n if (obj2[p] !== void 0 && properties.hasOwnProperty(p)) {\r\n if (typeof obj2[p] === 'object') {\r\n // create an empty object for the property if obj1 does not already have one.\r\n if (!(p in obj1)) {\r\n obj1[p] = {};\r\n }\r\n obj1[p] = GridsterUtils.merge(obj1[p], obj2[p], properties[p]);\r\n } else {\r\n obj1[p] = obj2[p];\r\n }\r\n }\r\n }\r\n\r\n return obj1;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static checkTouchEvent(e: any): void {\r\n if (e.clientX === undefined && e.touches) {\r\n if (e.touches && e.touches.length) {\r\n e.clientX = e.touches[0].clientX;\r\n e.clientY = e.touches[0].clientY;\r\n } else if (e.changedTouches && e.changedTouches.length) {\r\n e.clientX = e.changedTouches[0].clientX;\r\n e.clientY = e.changedTouches[0].clientY;\r\n }\r\n }\r\n }\r\n\r\n static checkContentClassForEvent(\r\n gridster: GridsterComponentInterface,\r\n e: MouseEvent\r\n ): boolean {\r\n if (gridster.$options.draggable.ignoreContent) {\r\n if (\r\n !GridsterUtils.checkDragHandleClass(\r\n e.target as HTMLElement,\r\n e.currentTarget as HTMLElement,\r\n gridster.$options.draggable.dragHandleClass,\r\n gridster.$options.draggable.ignoreContentClass\r\n )\r\n ) {\r\n return true;\r\n }\r\n } else {\r\n if (\r\n GridsterUtils.checkContentClass(\r\n e.target as HTMLElement,\r\n e.currentTarget as HTMLElement,\r\n gridster.$options.draggable.ignoreContentClass\r\n )\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static checkContentClassForEmptyCellClickEvent(\r\n gridster: GridsterComponentInterface,\r\n e: MouseEvent\r\n ): boolean {\r\n return (\r\n GridsterUtils.checkContentClass(\r\n e.target as HTMLElement,\r\n e.currentTarget as HTMLElement,\r\n gridster.$options.draggable.ignoreContentClass\r\n ) ||\r\n GridsterUtils.checkContentClass(\r\n e.target as HTMLElement,\r\n e.currentTarget as HTMLElement,\r\n gridster.$options.draggable.dragHandleClass\r\n )\r\n );\r\n }\r\n\r\n static checkDragHandleClass(\r\n target: HTMLElement,\r\n current: HTMLElement,\r\n dragHandleClass: string,\r\n ignoreContentClass: any\r\n ): boolean {\r\n if (!target || target === current) {\r\n return false;\r\n }\r\n if (target.hasAttribute('class')) {\r\n const classnames = target.getAttribute('class')!.split(' ');\r\n if (classnames.indexOf(dragHandleClass) > -1) {\r\n return true;\r\n }\r\n if (classnames.indexOf(ignoreContentClass) > -1) {\r\n return false;\r\n }\r\n }\r\n return GridsterUtils.checkDragHandleClass(\r\n target.parentNode as HTMLElement,\r\n current,\r\n dragHandleClass,\r\n ignoreContentClass\r\n );\r\n }\r\n\r\n static checkContentClass(\r\n target: HTMLElement,\r\n current: HTMLElement,\r\n contentClass: string\r\n ): boolean {\r\n if (!target || target === current) {\r\n return false;\r\n }\r\n if (\r\n target.hasAttribute('class') &&\r\n target.getAttribute('class')!.split(' ').indexOf(contentClass) > -1\r\n ) {\r\n return true;\r\n } else {\r\n return GridsterUtils.checkContentClass(\r\n target.parentNode as HTMLElement,\r\n current,\r\n contentClass\r\n );\r\n }\r\n }\r\n\r\n static compareItems(\r\n a: { x: number; y: number },\r\n b: { x: number; y: number }\r\n ): number {\r\n if (a.y > b.y) {\r\n return -1;\r\n } else if (a.y < b.y) {\r\n return 1;\r\n } else if (a.x > b.x) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n }\r\n}\r\n","import { GridsterUtils } from './gridsterUtils.service';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { GridsterItem } from './gridsterItem.interface';\r\n\r\nexport class GridsterEmptyCell {\r\n initialItem!: GridsterItem | null;\r\n removeEmptyCellClickListenerFn!: (() => void) | null;\r\n removeEmptyCellTouchendListenerFn!: (() => void) | null;\r\n removeEmptyCellContextMenuListenerFn!: (() => void) | null;\r\n removeEmptyCellDropListenerFn!: (() => void) | null;\r\n removeEmptyCellMousedownListenerFn!: (() => void) | null;\r\n removeEmptyCellTouchstartListenerFn!: (() => void) | null;\r\n removeWindowMousemoveListenerFn!: () => void;\r\n removeWindowTouchmoveListenerFn!: () => void;\r\n removeWindowMouseupListenerFn!: () => void;\r\n removeWindowTouchendListenerFn!: () => void;\r\n removeEmptyCellDragoverListenerFn!: (() => void) | null;\r\n removeDocumentDragendListenerFn!: (() => void) | null;\r\n\r\n constructor(private gridster: GridsterComponentInterface) {}\r\n\r\n destroy(): void {\r\n if (this.gridster.previewStyle) {\r\n this.gridster.previewStyle();\r\n }\r\n this.gridster.movingItem = null;\r\n this.initialItem = this.gridster = null!;\r\n if (this.removeDocumentDragendListenerFn) {\r\n this.removeDocumentDragendListenerFn();\r\n this.removeDocumentDragendListenerFn = null;\r\n }\r\n }\r\n\r\n updateOptions(): void {\r\n if (\r\n this.gridster.$options.enableEmptyCellClick &&\r\n !this.removeEmptyCellClickListenerFn &&\r\n this.gridster.options.emptyCellClickCallback\r\n ) {\r\n this.removeEmptyCellClickListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'click',\r\n this.emptyCellClickCb\r\n );\r\n this.removeEmptyCellTouchendListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'touchend',\r\n this.emptyCellClickCb\r\n );\r\n } else if (\r\n !this.gridster.$options.enableEmptyCellClick &&\r\n this.removeEmptyCellClickListenerFn &&\r\n this.removeEmptyCellTouchendListenerFn\r\n ) {\r\n this.removeEmptyCellClickListenerFn();\r\n this.removeEmptyCellTouchendListenerFn();\r\n this.removeEmptyCellClickListenerFn = null;\r\n this.removeEmptyCellTouchendListenerFn = null;\r\n }\r\n if (\r\n this.gridster.$options.enableEmptyCellContextMenu &&\r\n !this.removeEmptyCellContextMenuListenerFn &&\r\n this.gridster.options.emptyCellContextMenuCallback\r\n ) {\r\n this.removeEmptyCellContextMenuListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'contextmenu',\r\n this.emptyCellContextMenuCb\r\n );\r\n } else if (\r\n !this.gridster.$options.enableEmptyCellContextMenu &&\r\n this.removeEmptyCellContextMenuListenerFn\r\n ) {\r\n this.removeEmptyCellContextMenuListenerFn();\r\n this.removeEmptyCellContextMenuListenerFn = null;\r\n }\r\n if (\r\n this.gridster.$options.enableEmptyCellDrop &&\r\n !this.removeEmptyCellDropListenerFn &&\r\n this.gridster.options.emptyCellDropCallback\r\n ) {\r\n this.removeEmptyCellDropListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'drop',\r\n this.emptyCellDragDrop\r\n );\r\n this.gridster.zone.runOutsideAngular(() => {\r\n this.removeEmptyCellDragoverListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'dragover',\r\n this.emptyCellDragOver\r\n );\r\n });\r\n this.removeDocumentDragendListenerFn = this.gridster.renderer.listen(\r\n 'document',\r\n 'dragend',\r\n () => {\r\n this.gridster.movingItem = null;\r\n this.gridster.previewStyle();\r\n }\r\n );\r\n } else if (\r\n !this.gridster.$options.enableEmptyCellDrop &&\r\n this.removeEmptyCellDropListenerFn &&\r\n this.removeEmptyCellDragoverListenerFn &&\r\n this.removeDocumentDragendListenerFn\r\n ) {\r\n this.removeEmptyCellDropListenerFn();\r\n this.removeEmptyCellDragoverListenerFn();\r\n this.removeDocumentDragendListenerFn();\r\n this.removeEmptyCellDragoverListenerFn = null;\r\n this.removeEmptyCellDropListenerFn = null;\r\n this.removeDocumentDragendListenerFn = null;\r\n }\r\n if (\r\n this.gridster.$options.enableEmptyCellDrag &&\r\n !this.removeEmptyCellMousedownListenerFn &&\r\n this.gridster.options.emptyCellDragCallback\r\n ) {\r\n this.removeEmptyCellMousedownListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'mousedown',\r\n this.emptyCellMouseDown\r\n );\r\n this.removeEmptyCellTouchstartListenerFn = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'touchstart',\r\n this.emptyCellMouseDown\r\n );\r\n } else if (\r\n !this.gridster.$options.enableEmptyCellDrag &&\r\n this.removeEmptyCellMousedownListenerFn &&\r\n this.removeEmptyCellTouchstartListenerFn\r\n ) {\r\n this.removeEmptyCellMousedownListenerFn();\r\n this.removeEmptyCellTouchstartListenerFn();\r\n this.removeEmptyCellMousedownListenerFn = null;\r\n this.removeEmptyCellTouchstartListenerFn = null;\r\n }\r\n }\r\n\r\n emptyCellClickCb = (e: MouseEvent): void => {\r\n if (\r\n !this.gridster ||\r\n this.gridster.movingItem ||\r\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\r\n ) {\r\n return;\r\n }\r\n const item = this.getValidItemFromEvent(e);\r\n if (!item) {\r\n return;\r\n }\r\n if (this.gridster.options.emptyCellClickCallback) {\r\n this.gridster.options.emptyCellClickCallback(e, item);\r\n }\r\n this.gridster.cdRef.markForCheck();\r\n };\r\n\r\n emptyCellContextMenuCb = (e: MouseEvent): void => {\r\n if (\r\n this.gridster.movingItem ||\r\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\r\n ) {\r\n return;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const item = this.getValidItemFromEvent(e);\r\n if (!item) {\r\n return;\r\n }\r\n if (this.gridster.options.emptyCellContextMenuCallback) {\r\n this.gridster.options.emptyCellContextMenuCallback(e, item);\r\n }\r\n this.gridster.cdRef.markForCheck();\r\n };\r\n\r\n emptyCellDragDrop = (e: DragEvent): void => {\r\n const item = this.getValidItemFromEvent(e);\r\n if (!item) {\r\n return;\r\n }\r\n if (this.gridster.options.emptyCellDropCallback) {\r\n this.gridster.options.emptyCellDropCallback(e, item);\r\n }\r\n this.gridster.cdRef.markForCheck();\r\n };\r\n\r\n emptyCellDragOver = (e: DragEvent): void => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const item = this.getValidItemFromEvent(e);\r\n if (item) {\r\n if (e.dataTransfer) {\r\n e.dataTransfer.dropEffect = 'move';\r\n }\r\n this.gridster.movingItem = item;\r\n } else {\r\n if (e.dataTransfer) {\r\n e.dataTransfer.dropEffect = 'none';\r\n }\r\n this.gridster.movingItem = null;\r\n }\r\n this.gridster.previewStyle();\r\n };\r\n\r\n emptyCellMouseDown = (e: MouseEvent): void => {\r\n if (\r\n GridsterUtils.checkContentClassForEmptyCellClickEvent(this.gridster, e)\r\n ) {\r\n return;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const item = this.getValidItemFromEvent(e);\r\n const leftMouseButtonCode = 1;\r\n if (\r\n !item ||\r\n (e.buttons !== leftMouseButtonCode && !(e instanceof TouchEvent))\r\n ) {\r\n return;\r\n }\r\n this.initialItem = item;\r\n this.gridster.movingItem = item;\r\n this.gridster.previewStyle();\r\n this.gridster.zone.runOutsideAngular(() => {\r\n this.removeWindowMousemoveListenerFn = this.gridster.renderer.listen(\r\n 'window',\r\n 'mousemove',\r\n this.emptyCellMouseMove\r\n );\r\n this.removeWindowTouchmoveListenerFn = this.gridster.renderer.listen(\r\n 'window',\r\n 'touchmove',\r\n this.emptyCellMouseMove\r\n );\r\n });\r\n this.removeWindowMouseupListenerFn = this.gridster.renderer.listen(\r\n 'window',\r\n 'mouseup',\r\n this.emptyCellMouseUp\r\n );\r\n this.removeWindowTouchendListenerFn = this.gridster.renderer.listen(\r\n 'window',\r\n 'touchend',\r\n this.emptyCellMouseUp\r\n );\r\n };\r\n\r\n emptyCellMouseMove = (e: MouseEvent): void => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const item = this.getValidItemFromEvent(e, this.initialItem);\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.gridster.movingItem = item;\r\n this.gridster.previewStyle();\r\n };\r\n\r\n emptyCellMouseUp = (e: MouseEvent): void => {\r\n this.removeWindowMousemoveListenerFn();\r\n this.removeWindowTouchmoveListenerFn();\r\n this.removeWindowMouseupListenerFn();\r\n this.removeWindowTouchendListenerFn();\r\n const item = this.getValidItemFromEvent(e, this.initialItem);\r\n if (item) {\r\n this.gridster.movingItem = item;\r\n }\r\n if (\r\n this.gridster.options.emptyCellDragCallback &&\r\n this.gridster.movingItem\r\n ) {\r\n this.gridster.options.emptyCellDragCallback(e, this.gridster.movingItem);\r\n }\r\n setTimeout(() => {\r\n this.initialItem = null;\r\n if (this.gridster) {\r\n this.gridster.movingItem = null;\r\n this.gridster.previewStyle();\r\n }\r\n });\r\n this.gridster.cdRef.markForCheck();\r\n };\r\n\r\n getPixelsX(e: MouseEvent, rect: ClientRect): number {\r\n const scale = this.gridster.options.scale;\r\n if (scale) {\r\n return (\r\n (e.clientX - rect.left) / scale +\r\n this.gridster.el.scrollLeft -\r\n this.gridster.gridRenderer.getLeftMargin()\r\n );\r\n }\r\n return (\r\n e.clientX +\r\n this.gridster.el.scrollLeft -\r\n rect.left -\r\n this.gridster.gridRenderer.getLeftMargin()\r\n );\r\n }\r\n\r\n getPixelsY(e: MouseEvent, rect: ClientRect): number {\r\n const scale = this.gridster.options.scale;\r\n if (scale) {\r\n return (\r\n (e.clientY - rect.top) / scale +\r\n this.gridster.el.scrollTop -\r\n this.gridster.gridRenderer.getTopMargin()\r\n );\r\n }\r\n return (\r\n e.clientY +\r\n this.gridster.el.scrollTop -\r\n rect.top -\r\n this.gridster.gridRenderer.getTopMargin()\r\n );\r\n }\r\n\r\n getValidItemFromEvent(\r\n e: MouseEvent,\r\n oldItem?: GridsterItem | null\r\n ): GridsterItem | undefined {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n GridsterUtils.checkTouchEvent(e);\r\n const rect = this.gridster.el.getBoundingClientRect();\r\n const x = this.getPixelsX(e, rect);\r\n const y = this.getPixelsY(e, rect);\r\n const item: GridsterItem = {\r\n x: this.gridster.pixelsToPositionX(x, Math.floor, true),\r\n y: this.gridster.pixelsToPositionY(y, Math.floor, true),\r\n cols: this.gridster.$options.defaultItemCols,\r\n rows: this.gridster.$options.defaultItemRows\r\n };\r\n if (oldItem) {\r\n item.cols = Math.min(\r\n Math.abs(oldItem.x - item.x) + 1,\r\n this.gridster.$options.emptyCellDragMaxCols\r\n );\r\n item.rows = Math.min(\r\n Math.abs(oldItem.y - item.y) + 1,\r\n this.gridster.$options.emptyCellDragMaxRows\r\n );\r\n if (oldItem.x < item.x) {\r\n item.x = oldItem.x;\r\n } else if (\r\n oldItem.x - item.x >\r\n this.gridster.$options.emptyCellDragMaxCols - 1\r\n ) {\r\n item.x = this.gridster.movingItem ? this.gridster.movingItem.x : 0;\r\n }\r\n if (oldItem.y < item.y) {\r\n item.y = oldItem.y;\r\n } else if (\r\n oldItem.y - item.y >\r\n this.gridster.$options.emptyCellDragMaxRows - 1\r\n ) {\r\n item.y = this.gridster.movingItem ? this.gridster.movingItem.y : 0;\r\n }\r\n }\r\n if (\r\n !this.gridster.$options.enableOccupiedCellDrop &&\r\n this.gridster.checkCollision(item)\r\n ) {\r\n return;\r\n }\r\n return item;\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { GridsterItem } from './gridsterItem.interface';\r\nimport { GridsterRenderer } from './gridsterRenderer.service';\r\n\r\n@Component({\r\n selector: 'gridster-preview',\r\n template: '',\r\n styleUrls: ['./gridsterPreview.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true\r\n})\r\nexport class GridsterPreviewComponent implements OnInit, OnDestroy {\r\n @Input() previewStyle$!: EventEmitter<GridsterItem | null>;\r\n @Input() gridRenderer!: GridsterRenderer;\r\n private el: HTMLElement;\r\n private sub!: Subscription;\r\n\r\n constructor(el: ElementRef, private renderer: Renderer2) {\r\n this.el = el.nativeElement;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.sub = this.previewStyle$.subscribe(options =>\r\n this.previewStyle(options)\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if(this.sub) {\r\n this.sub.unsubscribe();\r\n }\r\n }\r\n\r\n private previewStyle(item: GridsterItem | null): void {\r\n if (item) {\r\n this.renderer.setStyle(this.el, 'display', 'block');\r\n this.gridRenderer.updateItem(this.el, item, this.renderer);\r\n } else {\r\n this.renderer.setStyle(this.el, 'display', '');\r\n }\r\n }\r\n}\r\n","import { Injectable, Renderer2 } from '@angular/core';\r\n\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { DirTypes, GridType } from './gridsterConfig.interface';\r\nimport { GridsterItem } from './gridsterItem.interface';\r\nimport {\r\n CommonGridStyle,\r\n GridColumnCachedStyle,\r\n GridRowCachedStyle\r\n} from './gridsterRenderer.interface';\r\n\r\nexport class GridsterRenderer {\r\n /**\r\n * Caches the last grid column styles.\r\n * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.\r\n */\r\n private lastGridColumnStyles: Record<number, GridColumnCachedStyle> = {};\r\n\r\n /**\r\n * Caches the last grid column styles.\r\n * This improves the grid responsiveness by caching and reusing the last style object instead of creating a new one.\r\n */\r\n private lastGridRowStyles: Record<number, GridRowCachedStyle> = {};\r\n\r\n constructor(private gridster: GridsterComponentInterface) {}\r\n\r\n destroy(): void {\r\n this.gridster = null!;\r\n }\r\n\r\n updateItem(el: Element, item: GridsterItem, renderer: Renderer2): void {\r\n if (this.gridster.mobile) {\r\n this.clearCellPosition(renderer, el);\r\n if (this.gridster.$options.keepFixedHeightInMobile) {\r\n renderer.setStyle(\r\n el,\r\n 'height',\r\n (item.rows - 1) * this.gridster.$options.margin +\r\n item.rows * this.gridster.$options.fixedRowHeight +\r\n 'px'\r\n );\r\n } else {\r\n renderer.setStyle(\r\n el,\r\n 'height',\r\n (item.rows * this.gridster.curWidth) / item.cols + 'px'\r\n );\r\n }\r\n if (this.gridster.$options.keepFixedWidthInMobile) {\r\n renderer.setStyle(\r\n el,\r\n 'width',\r\n this.gridster.$options.fixedColWidth + 'px'\r\n );\r\n } else {\r\n renderer.setStyle(el, 'width', '');\r\n }\r\n\r\n renderer.setStyle(\r\n el,\r\n 'margin-bottom',\r\n this.gridster.$options.margin + 'px'\r\n );\r\n renderer.setStyle(el, DirTypes.LTR ? 'margin-right' : 'margin-left', '');\r\n } else {\r\n const x = Math.round(this.gridster.curColWidth * item.x);\r\n const y = Math.round(this.gridster.curRowHeight * item.y);\r\n const width =\r\n this.gridster.curColWidth * item.cols - this.gridster.$options.margin - 1; // added -1 to avoid the right side of widgets not showing borders\r\n const height =\r\n this.gridster.curRowHeight * item.rows - this.gridster.$options.margin;\r\n // set the cell style\r\n this.setCellPosition(renderer, el, x, y);\r\n renderer.setStyle(el, 'width', width + 'px');\r\n renderer.setStyle(el, 'height', height + 'px');\r\n let marginBottom: string | null = null;\r\n let marginRight: string | null = null;\r\n if (this.gridster.$options.outerMargin) {\r\n if (this.gridster.rows === item.rows + item.y) {\r\n if (this.gridster.$options.outerMarginBottom !== null) {\r\n marginBottom = this.gridster.$options.outerMarginBottom + 'px';\r\n } else {\r\n marginBottom = this.gridster.$options.margin + 'px';\r\n }\r\n }\r\n if (this.gridster.columns === item.cols + item.x) {\r\n if (this.gridster.$options.outerMarginBottom !== null) {\r\n marginRight = this.gridster.$options.outerMarginRight + 'px';\r\n } else {\r\n marginRight = this.gridster.$options.margin + 'px';\r\n }\r\n }\r\n }\r\n\r\n renderer.setStyle(el, 'margin-bottom', marginBottom);\r\n renderer.setStyle(\r\n el,\r\n DirTypes.LTR ? 'margin-right' : 'margin-left',\r\n marginRight\r\n );\r\n }\r\n }\r\n\r\n updateGridster(): void {\r\n let addClass = '';\r\n let removeClass1 = '';\r\n let removeClass2 = '';\r\n let removeClass3 = '';\r\n if (this.gridster.$options.gridType === GridType.Fit) {\r\n addClass = GridType.Fit;\r\n removeClass1 = GridType.ScrollVertical;\r\n removeClass2 = GridType.ScrollHorizontal;\r\n removeClass3 = GridType.Fixed;\r\n } else if (this.gridster.$options.gridType === GridType.ScrollVertical) {\r\n this.gridster.curRowHeight =\r\n this.gridster.curColWidth * this.gridster.$options.rowHeightRatio;\r\n addClass = GridType.ScrollVertical;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollHorizontal;\r\n removeClass3 = GridType.Fixed;\r\n } else if (this.gridster.$options.gridType === GridType.ScrollHorizontal) {\r\n const widthRatio = this.gridster.$options.rowHeightRatio;\r\n const calWidthRatio = widthRatio >= 1 ? widthRatio : widthRatio + 1;\r\n this.gridster.curColWidth = this.gridster.curRowHeight * calWidthRatio;\r\n addClass = GridType.ScrollHorizontal;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollVertical;\r\n removeClass3 = GridType.Fixed;\r\n } else if (this.gridster.$options.gridType === GridType.Fixed) {\r\n this.gridster.curColWidth =\r\n this.gridster.$options.fixedColWidth +\r\n (this.gridster.$options.ignoreMarginInRow\r\n ? 0\r\n : this.gridster.$options.margin);\r\n this.gridster.curRowHeight =\r\n this.gridster.$options.fixedRowHeight +\r\n (this.gridster.$options.ignoreMarginInRow\r\n ? 0\r\n : this.gridster.$options.margin);\r\n addClass = GridType.Fixed;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollVertical;\r\n removeClass3 = GridType.ScrollHorizontal;\r\n } else if (this.gridster.$options.gridType === GridType.VerticalFixed) {\r\n this.gridster.curRowHeight =\r\n this.gridster.$options.fixedRowHeight +\r\n (this.gridster.$options.ignoreMarginInRow\r\n ? 0\r\n : this.gridster.$options.margin);\r\n addClass = GridType.ScrollVertical;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollHorizontal;\r\n removeClass3 = GridType.Fixed;\r\n } else if (this.gridster.$options.gridType === GridType.HorizontalFixed) {\r\n this.gridster.curColWidth =\r\n this.gridster.$options.fixedColWidth +\r\n (this.gridster.$options.ignoreMarginInRow\r\n ? 0\r\n : this.gridster.$options.margin);\r\n addClass = GridType.ScrollHorizontal;\r\n removeClass1 = GridType.Fit;\r\n removeClass2 = GridType.ScrollVertical;\r\n removeClass3 = GridType.Fixed;\r\n }\r\n\r\n if (\r\n this.gridster.mobile ||\r\n (this.gridster.$options.setGridSize &&\r\n this.gridster.$options.gridType !== GridType.Fit)\r\n ) {\r\n this.gridster.renderer.removeClass(this.gridster.el, addClass);\r\n } else {\r\n this.gridster.renderer.addClass(this.gridster.el, addClass);\r\n }\r\n this.gridster.renderer.removeClass(this.gridster.el, removeClass1);\r\n this.gridster.renderer.removeClass(this.gridster.el, removeClass2);\r\n this.gridster.renderer.removeClass(this.gridster.el, removeClass3);\r\n }\r\n\r\n getGridColumnStyle(i: number): CommonGridStyle {\r\n // generates the new style\r\n const newPos: GridColumnCachedStyle = {\r\n left: this.gridster.curColWidth * i,\r\n width: this.gridster.curColWidth - this.gridster.$options.margin,\r\n height:\r\n this.gridster.gridRows.length * this.gridster.curRowHeight -\r\n this.gridster.$options.margin,\r\n style: {}\r\n };\r\n newPos.style = {\r\n ...this.getLeftPosition(newPos.left),\r\n width: newPos.width + 'px',\r\n height: newPos.height + 'px'\r\n };\r\n\r\n // use the last cached style if it has same values as the generated one\r\n const last = this.lastGridColumnStyles[i];\r\n if (\r\n last &&\r\n last.left === newPos.left &&\r\n last.width === newPos.width &&\r\n last.height === newPos.height\r\n ) {\r\n return last.style;\r\n }\r\n\r\n // cache and set new style\r\n this.lastGridColumnStyles[i] = newPos;\r\n return newPos.style;\r\n }\r\n\r\n getGridRowStyle(i: number): CommonGridStyle {\r\n // generates the new style\r\n const newPos: GridRowCachedStyle = {\r\n top: this.gridster.curRowHeight * i,\r\n width:\r\n this.gridster.gridColumns.length * this.gridster.curColWidth +\r\n this.gridster.$options.margin,\r\n height: this.gridster.curRowHeight - this.gridster.$options.margin,\r\n style: {}\r\n };\r\n newPos.style = {\r\n ...this.getTopPosition(newPos.top),\r\n width: newPos.width + 'px',\r\n height: newPos.height + 'px'\r\n };\r\n\r\n // use the last cached style if it has same values as the generated one\r\n const last = this.lastGridRowStyles[i];\r\n if (\r\n last &&\r\n last.top === newPos.top &&\r\n last.width === newPos.width &&\r\n last.height === newPos.height\r\n ) {\r\n return last.style;\r\n }\r\n\r\n // cache and set new style\r\n this.lastGridRowStyles[i] = newPos;\r\n return newPos.style;\r\n }\r\n\r\n getLeftPosition(d: number): { left: string } | { transform: string } {\r\n const dPosition = this.gridster.$options.dirType === DirTypes.RTL ? -d : d;\r\n if (this.gridster.$options.useTransformPositioning) {\r\n return {\r\n transform: 'translateX(' + dPosition + 'px)'\r\n };\r\n } else {\r\n return {\r\n left: this.getLeftMargin() + dPosition + 'px'\r\n };\r\n }\r\n }\r\n\r\n getTopPosition(d: number): { top: string } | { transform: string } {\r\n if (this.gridster.$options.useTransformPositioning) {\r\n return {\r\n transform: 'translateY(' + d + 'px)'\r\n };\r\n } else {\r\n return {\r\n top: this.getTopMargin() + d + 'px'\r\n };\r\n }\r\n }\r\n\r\n clearCellPosition(renderer: Renderer2, el: Element): void {\r\n if (this.gridster.$options.useTransformPositioning) {\r\n renderer.setStyle(el, 'transform', '');\r\n } else {\r\n renderer.setStyle(el, 'top', '');\r\n renderer.setStyle(el, 'left', '');\r\n }\r\n }\r\n\r\n setCellPosition(\r\n renderer: Renderer2,\r\n el: Element,\r\n x: number,\r\n y: number\r\n ): void {\r\n const xPosition = this.gridster.$options.dirType === DirTypes.RTL ? -x : x;\r\n if (this.gridster.$options.useTransformPositioning) {\r\n const transform = 'translate3d(' + xPosition + 'px, ' + y + 'px, 0)';\r\n renderer.setStyle(el, 'transform', transform);\r\n } else {\r\n renderer.setStyle(el, 'left', this.getLeftMargin() + xPosition + 'px');\r\n renderer.setStyle(el, 'top', this.getTopMargin() + y + 'px');\r\n }\r\n }\r\n\r\n getLeftMargin(): number {\r\n if (this.gridster.$options.outerMargin) {\r\n if (this.gridster.$options.outerMarginLeft !== null) {\r\n return this.gridster.$options.outerMarginLeft;\r\n } else {\r\n return this.gridster.$options.margin;\r\n }\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n getTopMargin(): number {\r\n if (this.gridster.$options.outerMargin) {\r\n if (this.gridster.$options.outerMarginTop !== null) {\r\n return this.gridster.$options.outerMarginTop;\r\n } else {\r\n return this.gridster.$options.margin;\r\n }\r\n } else {\r\n return 0;\r\n }\r\n }\r\n}\r\n","import { NgForOf, NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { debounceTime, Subject, switchMap, takeUntil, timer } from 'rxjs';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { GridsterCompact } from './gridsterCompact.service';\r\n\r\nimport { GridsterConfigService } from './gridsterConfig.constant';\r\nimport { GridsterConfig, GridType } from './gridsterConfig.interface';\r\nimport { GridsterConfigS } from './gridsterConfigS.interface';\r\nimport { GridsterEmptyCell } from './gridsterEmptyCell.service';\r\nimport {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\nimport { GridsterPreviewComponent } from './gridsterPreview.component';\r\nimport { GridsterRenderer } from './gridsterRenderer.service';\r\nimport { GridsterUtils } from './gridsterUtils.service';\r\n\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'gridster',\r\n templateUrl: './gridster.html',\r\n styleUrls: ['./gridster.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgForOf, NgStyle, GridsterPreviewComponent]\r\n})\r\nexport class GridsterComponent\r\n implements OnInit, OnChanges, OnDestroy, GridsterComponentInterface {\r\n @Input() options!: GridsterConfig;\r\n movingItem!: GridsterItem | null;\r\n el: HTMLElement;\r\n $options: GridsterConfigS;\r\n mobile: boolean;\r\n curWidth: number;\r\n curHeight: number;\r\n grid: GridsterItemComponentInterface[];\r\n columns = 0;\r\n rows = 0;\r\n curColWidth: number;\r\n curRowHeight: number;\r\n gridColumns = [];\r\n gridRows = [];\r\n windowResize!: (() => void) | null;\r\n dragInProgress: boolean;\r\n emptyCell: GridsterEmptyCell;\r\n compact: GridsterCompact;\r\n gridRenderer: GridsterRenderer;\r\n previewStyle$: EventEmitter<GridsterItem | null> =\r\n new EventEmitter<GridsterItem | null>();\r\n\r\n calculateLayout$ = new Subject<void>();\r\n\r\n private resize$ = new Subject<void>();\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n @Inject(ElementRef) el: ElementRef,\r\n @Inject(Renderer2) public renderer: Renderer2,\r\n @Inject(ChangeDetectorRef) public cdRef: ChangeDetectorRef,\r\n @Inject(NgZone) public zone: NgZone\r\n ) {\r\n this.el = el.nativeElement;\r\n this.$options = JSON.parse(JSON.stringify(GridsterConfigService));\r\n this.mobile = false;\r\n this.curWidth = 0;\r\n this.curHeight = 0;\r\n this.grid = [];\r\n this.curColWidth = 0;\r\n this.curRowHeight = 0;\r\n this.dragInProgress = false;\r\n this.emptyCell = new GridsterEmptyCell(this);\r\n this.compact = new GridsterCompact(this);\r\n this.gridRenderer = new GridsterRenderer(this);\r\n }\r\n\r\n // ------ Function for swapWhileDragging option\r\n\r\n // identical to checkCollision() except that here we add boundaries.\r\n static checkCollisionTwoItemsForSwaping(\r\n item: GridsterItem,\r\n item2: GridsterItem\r\n ): boolean {\r\n // if the cols or rows of the items are 1 , doesnt make any sense to set a boundary. Only if the item is bigger we set a boundary\r\n const horizontalBoundaryItem1 = item.cols === 1 ? 0 : 1;\r\n const horizontalBoundaryItem2 = item2.cols === 1 ? 0 : 1;\r\n const verticalBoundaryItem1 = item.rows === 1 ? 0 : 1;\r\n const verticalBoundaryItem2 = item2.rows === 1 ? 0 : 1;\r\n return (\r\n item.x + horizontalBoundaryItem1 < item2.x + item2.cols &&\r\n item.x + item.cols > item2.x + horizontalBoundaryItem2 &&\r\n item.y + verticalBoundaryItem1 < item2.y + item2.rows &&\r\n item.y + item.rows > item2.y + verticalBoundaryItem2\r\n );\r\n }\r\n\r\n checkCollisionTwoItems(item: GridsterItem, item2: GridsterItem): boolean {\r\n const collision =\r\n item.x < item2.x + item2.cols &&\r\n item.x + item.cols > item2.x &&\r\n item.y < item2.y + item2.rows &&\r\n item.y + item.rows > item2.y;\r\n if (!collision) {\r\n return false;\r\n }\r\n if (!this.$options.allowMultiLayer) {\r\n return true;\r\n }\r\n const defaultLayerIndex = this.$options.defaultLayerIndex;\r\n const layerIndex =\r\n item.layerIndex === undefined ? defaultLayerIndex : item.layerIndex;\r\n const layerIndex2 =\r\n item2.layerIndex === undefined ? defaultLayerIndex : item2.layerIndex;\r\n return layerIndex === layerIndex2;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.options.initCallback) {\r\n this.options.initCallback(this);\r\n }\r\n\r\n this.calculateLayout$\r\n .pipe(debounceTime(0), takeUntil(this.destroy$))\r\n .subscribe(() => this.calculateLayout());\r\n\r\n this.resize$\r\n .pipe(\r\n // Cancel previously scheduled DOM timer if `calculateLayout()` has been called\r\n // within this time range.\r\n switchMap(() => timer(100)),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe(() => this.resize());\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['options']) {\r\n this.setOptions();\r\n this.options.api = {\r\n optionsChanged: this.optionsChanged?.bind(this),\r\n resize: this.onResize.bind(this),\r\n getNextPossiblePosition: this.getNextPossiblePosition.bind(this),\r\n getFirstPossiblePosition: this.getFirstPossiblePosition.bind(this),\r\n getLastPossiblePosition: this.getLastPossiblePosition.bind(this),\r\n getItemComponent: (item: GridsterItem) => this.getItemComponent(item),\r\n getCurrentRowHeight: this.getCurrentRowHeight.bind(this)\r\n };\r\n this.columns = this.$options.minCols;\r\n this.rows = this.$options.minRows + this.$options.addEmptyRowsCount;\r\n this.setGridSize();\r\n this.calculateLayout();\r\n }\r\n }\r\n\r\n getCurrentRowHeight(): number {\r\n return this.curRowHeight;\r\n }\r\n\r\n private resize(): void {\r\n let height;\r\n let width;\r\n if (this.$options.gridType === 'fit' && !this.mobile) {\r\n width = this.el.offsetWidth;\r\n height = this.el.offsetHeight;\r\n } else {\r\n width = this.el.clientWidth;\r\n height = this.el.clientHeight;\r\n }\r\n if (\r\n (width !== this.curWidth || height !== this.curHeight) &&\r\n this.checkIfToResize()\r\n ) {\r\n this.onResize();\r\n }\r\n }\r\n\r\n setOptions(): void {\r\n this.$options = GridsterUtils.merge(\r\n this.$options,\r\n this.options,\r\n this.$options\r\n );\r\n if (!this.$options.disableWindowResize && !this.windowResize) {\r\n this.windowResize = this.renderer.listen(\r\n 'window',\r\n 'resize',\r\n this.onResize\r\n );\r\n } else if (this.$options.disableWindowResize && this.windowResize) {\r\n this.windowResize();\r\n this.windowResize = null;\r\n }\r\n this.emptyCell.updateOptions();\r\n }\r\n\r\n optionsChanged = (): void => {\r\n this.setOptions();\r\n let widgetsIndex: number = this.grid.length - 1;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex >= 0; widgetsIndex--) {\r\n widget = this.grid[widgetsIndex];\r\n widget.updateOptions();\r\n }\r\n this.calculateLayout();\r\n };\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.previewStyle$.complete();\r\n if (this.windowResize) {\r\n this.windowResize();\r\n }\r\n if (this.options && this.options.destroyCallback) {\r\n this.options.destroyCallback(this);\r\n }\r\n if (this.options && this.options.api) {\r\n this.options.api.resize = undefined;\r\n this.options.api.optionsChanged = undefined;\r\n this.options.api.getNextPossiblePosition = undefined;\r\n this.options.api = undefined;\r\n }\r\n this.emptyCell.destroy();\r\n this.emptyCell = null!;\r\n this.compact.destroy();\r\n this.compact = null!;\r\n }\r\n\r\n onResize = (): void => {\r\n if (this.el.clientWidth) {\r\n if (this.options.setGridSize) {\r\n // reset width/height so the size is recalculated afterwards\r\n this.renderer.setStyle(this.el, 'width', '');\r\n this.renderer.setStyle(this.el, 'height', '');\r\n }\r\n this.setGridSize();\r\n this.calculateLayout();\r\n }\r\n };\r\n\r\n checkIfToResize(): boolean {\r\n const clientWidth = this.el.clientWidth;\r\n const offsetWidth = this.el.offsetWidth;\r\n const scrollWidth = this.el.scrollWidth;\r\n const clientHeight = this.el.clientHeight;\r\n const offsetHeight = this.el.offsetHeight;\r\n const scrollHeight = this.el.scrollHeight;\r\n const verticalScrollPresent =\r\n clientWidth < offsetWidth &&\r\n scrollHeight > offsetHeight &&\r\n scrollHeight - offsetHeight < offsetWidth - clientWidth;\r\n const horizontalScrollPresent =\r\n clientHeight < offsetHeight &&\r\n scrollWidth > offsetWidth &&\r\n scrollWidth - offsetWidth < offsetHeight - clientHeight;\r\n if (verticalScrollPresent) {\r\n return false;\r\n }\r\n return !horizontalScrollPresent;\r\n }\r\n\r\n checkIfMobile(): boolean {\r\n if (this.$options.useBodyForBreakpoint) {\r\n return this.$options.mobileBreakpoint > document.body.clientWidth;\r\n } else {\r\n return this.$options.mobileBreakpoint > this.curWidth;\r\n }\r\n }\r\n\r\n setGridSize(): void {\r\n const el = this.el;\r\n let width;\r\n let height;\r\n if (\r\n this.$options.setGridSize ||\r\n (this.$options.gridType === GridType.Fit && !this.mobile)\r\n ) {\r\n width = el.offsetWidth;\r\n height = el.offsetHeight;\r\n } else {\r\n width = el.clientWidth;\r\n height = el.clientHeight;\r\n }\r\n this.curWidth = width;\r\n this.curHeight = height;\r\n }\r\n\r\n setGridDimensions(): void {\r\n this.setGridSize();\r\n if (!this.mobile && this.checkIfMobile()) {\r\n this.mobile = !this.mobile;\r\n this.renderer.addClass(this.el, 'mobile');\r\n } else if (this.mobile && !this.checkIfMobile()) {\r\n this.mobile = !this.mobile;\r\n this.renderer.removeClass(this.el, 'mobile');\r\n }\r\n let rows = this.$options.minRows;\r\n let columns = this.$options.minCols;\r\n\r\n let widgetsIndex = this.grid.length - 1;\r\n let widget;\r\n for (; widgetsIndex >= 0; widgetsIndex--) {\r\n widget = this.grid[widgetsIndex];\r\n if (!widget.notPlaced) {\r\n rows = Math.max(rows, widget.$item.y + widget.$item.rows);\r\n columns = Math.max(columns, widget.$item.x + widget.$item.cols);\r\n }\r\n }\r\n rows += this.$options.addEmptyRowsCount;\r\n if (this.columns !== columns || this.rows !== rows) {\r\n this.columns = columns;\r\n this.rows = rows;\r\n if (this.options.gridSizeChangedCallback) {\r\n this.options.gridSizeChangedCallback(this);\r\n }\r\n }\r\n }\r\n\r\n private calculateLayout(): void {\r\n if (this.compact) {\r\n this.compact.checkCompact();\r\n }\r\n\r\n this.setGridDimensions();\r\n if (this.$options.outerMargin) {\r\n let marginWidth = -this.$options.margin;\r\n if (this.$options.outerMarginLeft !== null) {\r\n marginWidth += this.$options.outerMarginLeft;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-left',\r\n this.$options.outerMarginLeft + 'px'\r\n );\r\n } else {\r\n marginWidth += this.$options.margin;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-left',\r\n this.$options.margin + 'px'\r\n );\r\n }\r\n if (this.$options.outerMarginRight !== null) {\r\n marginWidth += this.$options.outerMarginRight;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-right',\r\n this.$options.outerMarginRight + 'px'\r\n );\r\n } else {\r\n marginWidth += this.$options.margin;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-right',\r\n this.$options.margin + 'px'\r\n );\r\n }\r\n this.curColWidth = (this.curWidth - marginWidth) / this.columns;\r\n let marginHeight = -this.$options.margin;\r\n if (this.$options.outerMarginTop !== null) {\r\n marginHeight += this.$options.outerMarginTop;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-top',\r\n this.$options.outerMarginTop + 'px'\r\n );\r\n } else {\r\n marginHeight += this.$options.margin;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-top',\r\n this.$options.margin + 'px'\r\n );\r\n }\r\n if (this.$options.outerMarginBottom !== null) {\r\n marginHeight += this.$options.outerMarginBottom;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-bottom',\r\n this.$options.outerMarginBottom + 'px'\r\n );\r\n } else {\r\n marginHeight += this.$options.margin;\r\n this.renderer.setStyle(\r\n this.el,\r\n 'padding-bottom',\r\n this.$options.margin + 'px'\r\n );\r\n }\r\n this.curRowHeight =\r\n ((this.curHeight - marginHeight) / this.rows) *\r\n this.$options.rowHeightRatio;\r\n } else {\r\n this.curColWidth = (this.curWidth + this.$options.margin) / this.columns;\r\n this.curRowHeight =\r\n ((this.curHeight + this.$options.margin) / this.rows) *\r\n this.$options.rowHeightRatio;\r\n this.renderer.setStyle(this.el, 'padding-left', 0 + 'px');\r\n this.renderer.setStyle(this.el, 'padding-right', 0 + 'px');\r\n this.renderer.setStyle(this.el, 'padding-top', 0 + 'px');\r\n this.renderer.setStyle(this.el, 'padding-bottom', 0 + 'px');\r\n }\r\n this.gridRenderer.updateGridster();\r\n\r\n if (this.$options.setGridSize) {\r\n this.renderer.addClass(this.el, 'gridSize');\r\n if (!this.mobile) {\r\n this.renderer.setStyle(\r\n this.el,\r\n 'width',\r\n this.columns * this.curColWidth + this.$options.margin + 'px'\r\n );\r\n this.renderer.setStyle(\r\n this.el,\r\n 'height',\r\n this.rows * this.curRowHeight + this.$options.margin + 'px'\r\n );\r\n }\r\n } else {\r\n this.renderer.removeClass(this.el, 'gridSize');\r\n this.renderer.setStyle(this.el, 'width', '');\r\n this.renderer.setStyle(this.el, 'height', '');\r\n }\r\n this.updateGrid();\r\n\r\n let widgetsIndex: number = this.grid.length - 1;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex >= 0; widgetsIndex--) {\r\n widget = this.grid[widgetsIndex];\r\n widget.setSize();\r\n widget.drag.toggle();\r\n widget.resize.toggle();\r\n }\r\n\r\n this.resize$.next();\r\n }\r\n\r\n updateGrid(): void {\r\n if (this.$options.displayGrid === 'always' && !this.mobile) {\r\n this.renderer.addClass(this.el, 'display-grid');\r\n } else if (\r\n this.$options.displayGrid === 'onDrag&Resize' &&\r\n this.dragInProgress\r\n ) {\r\n this.renderer.addClass(this.el, 'display-grid');\r\n } else if (\r\n this.$options.displayGrid === 'none' ||\r\n !this.dragInProgress ||\r\n this.mobile\r\n ) {\r\n this.renderer.removeClass(this.el, 'display-grid');\r\n }\r\n this.setGridDimensions();\r\n this.gridColumns.length = GridsterComponent.getNewArrayLength(\r\n this.columns,\r\n this.curWidth,\r\n this.curColWidth\r\n );\r\n this.gridRows.length = GridsterComponent.getNewArrayLength(\r\n this.rows,\r\n this.curHeight,\r\n this.curRowHeight\r\n );\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n addItem(itemComponent: GridsterItemComponentInterface): void {\r\n if (itemComponent.$item.cols === undefined) {\r\n itemComponent.$item.cols = this.$options.defaultItemCols;\r\n itemComponent.item.cols = itemComponent.$item.cols;\r\n itemComponent.itemChanged();\r\n }\r\n if (itemComponent.$item.rows === undefined) {\r\n itemComponent.$item.rows = this.$options.defaultItemRows;\r\n itemComponent.item.rows = itemComponent.$item.rows;\r\n itemComponent.itemChanged();\r\n }\r\n if (itemComponent.$item.x === -1 || itemComponent.$item.y === -1) {\r\n this.autoPositionItem(itemComponent);\r\n } else if (this.checkCollision(itemComponent.$item)) {\r\n if (!this.$options.disableWarnings) {\r\n itemComponent.notPlaced = true;\r\n console.warn(\r\n \"Can't be placed in the bounds of the dashboard, trying to auto position!/n\" +\r\n JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y'])\r\n );\r\n }\r\n if (!this.$options.disableAutoPositionOnConflict) {\r\n this.autoPositionItem(itemComponent);\r\n } else {\r\n itemComponent.notPlaced = true;\r\n }\r\n }\r\n this.grid.push(itemComponent);\r\n this.calculateLayout$.next();\r\n }\r\n\r\n removeItem(itemComponent: GridsterItemComponentInterface): void {\r\n this.grid.splice(this.grid.indexOf(itemComponent), 1);\r\n this.calculateLayout$.next();\r\n if (this.options.itemRemovedCallback) {\r\n this.options.itemRemovedCallback(itemComponent.item, itemComponent);\r\n }\r\n }\r\n\r\n checkCollision(item: GridsterItem): GridsterItemComponentInterface | boolean {\r\n let collision: GridsterItemComponentInterface | boolean = false;\r\n if (this.options.itemValidateCallback) {\r\n collision = !this.options.itemValidateCallback(item);\r\n }\r\n if (!collision && this.checkGridCollision(item)) {\r\n collision = true;\r\n }\r\n if (!collision) {\r\n const c = this.findItemWithItem(item);\r\n if (c) {\r\n collision = c;\r\n }\r\n }\r\n return collision;\r\n }\r\n\r\n checkGridCollision(item: GridsterItem): boolean {\r\n const noNegativePosition = item.y > -1 && item.x > -1;\r\n const maxGridCols = item.cols + item.x <= this.$options.maxCols;\r\n const maxGridRows = item.rows + item.y <= this.$options.maxRows;\r\n const maxItemCols =\r\n item.maxItemCols === undefined\r\n ? this.$options.maxItemCols\r\n : item.maxItemCols;\r\n const minItemCols =\r\n item.minItemCols === undefined\r\n ? this.$options.minItemCols\r\n : item.minItemCols;\r\n const maxItemRows =\r\n item.maxItemRows === undefined\r\n ? this.$options.maxItemRows\r\n : item.maxItemRows;\r\n const minItemRows =\r\n item.minItemRows === undefined\r\n ? this.$options.minItemRows\r\n : item.minItemRows;\r\n const inColsLimits = item.cols <= maxItemCols && item.cols >= minItemCols;\r\n const inRowsLimits = item.rows <= maxItemRows && item.rows >= minItemRows;\r\n const minAreaLimit =\r\n item.minItemArea === undefined\r\n ? this.$options.minItemArea\r\n : item.minItemArea;\r\n const maxAreaLimit =\r\n item.maxItemArea === undefined\r\n ? this.$options.maxItemArea\r\n : item.maxItemArea;\r\n const area = item.cols * item.rows;\r\n const inMinArea = minAreaLimit <= area;\r\n const inMaxArea = maxAreaLimit >= area;\r\n return !(\r\n noNegativePosition &&\r\n maxGridCols &&\r\n maxGridRows &&\r\n inColsLimits &&\r\n inRowsLimits &&\r\n inMinArea &&\r\n inMaxArea\r\n );\r\n }\r\n\r\n findItemWithItem(\r\n item: GridsterItem\r\n ): GridsterItemComponentInterface | boolean {\r\n let widgetsIndex = 0;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex < this.grid.length; widgetsIndex++) {\r\n widget = this.grid[widgetsIndex];\r\n if (\r\n widget.$item !== item &&\r\n this.checkCollisionTwoItems(widget.$item, item)\r\n ) {\r\n return widget;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n findItemsWithItem(item: GridsterItem): Array<GridsterItemComponentInterface> {\r\n const a: Array<GridsterItemComponentInterface> = [];\r\n let widgetsIndex = 0;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex < this.grid.length; widgetsIndex++) {\r\n widget = this.grid[widgetsIndex];\r\n if (\r\n widget.$item !== item &&\r\n this.checkCollisionTwoItems(widget.$item, item)\r\n ) {\r\n a.push(widget);\r\n }\r\n }\r\n return a;\r\n }\r\n\r\n autoPositionItem(itemComponent: GridsterItemComponentInterface): void {\r\n if (this.getNextPossiblePosition(itemComponent.$item)) {\r\n itemComponent.notPlaced = false;\r\n itemComponent.item.x = itemComponent.$item.x;\r\n itemComponent.item.y = itemComponent.$item.y;\r\n itemComponent.itemChanged();\r\n } else {\r\n itemComponent.notPlaced = true;\r\n if (!this.$options.disableWarnings) {\r\n console.warn(\r\n \"Can't be placed in the bounds of the dashboard!/n\" +\r\n JSON.stringify(itemComponent.item, ['cols', 'rows', 'x', 'y'])\r\n );\r\n }\r\n }\r\n }\r\n\r\n getNextPossiblePosition = (\r\n newItem: GridsterItem,\r\n startingFrom: { y?: number; x?: number } = {}\r\n ): boolean => {\r\n if (newItem.cols === -1) {\r\n newItem.cols = this.$options.defaultItemCols;\r\n }\r\n if (newItem.rows === -1) {\r\n newItem.rows = this.$options.defaultItemRows;\r\n }\r\n this.setGridDimensions();\r\n let rowsIndex = startingFrom.y || 0;\r\n let colsIndex;\r\n for (; rowsIndex < this.rows; rowsIndex++) {\r\n newItem.y = rowsIndex;\r\n colsIndex = startingFrom.x || 0;\r\n for (; colsIndex < this.columns; colsIndex++) {\r\n newItem.x = colsIndex;\r\n if (!this.checkCollision(newItem)) {\r\n return true;\r\n }\r\n }\r\n }\r\n const canAddToRows = this.$options.maxRows >= this.rows + newItem.rows;\r\n const canAddToColumns =\r\n this.$options.maxCols >= this.columns + newItem.cols;\r\n const addToRows = this.rows <= this.columns && canAddToRows;\r\n if (!addToRows && canAddToColumns) {\r\n newItem.x = this.columns;\r\n newItem.y = 0;\r\n return true;\r\n } else if (canAddToRows) {\r\n newItem.y = this.rows;\r\n newItem.x = 0;\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n getFirstPossiblePosition = (item: GridsterItem): GridsterItem => {\r\n const tmpItem = Object.assign({}, item);\r\n this.getNextPossiblePosition(tmpItem);\r\n return tmpItem;\r\n };\r\n\r\n getLastPossiblePosition = (item: GridsterItem): GridsterItem => {\r\n let farthestItem: { y: number; x: number } = { y: 0, x: 0 };\r\n farthestItem = this.grid.reduce(\r\n (\r\n prev: { y: number; x: number },\r\n curr: GridsterItemComponentInterface\r\n ) => {\r\n const currCoords = {\r\n y: curr.$item.y + curr.$item.rows - 1,\r\n x: curr.$item.x + curr.$item.cols - 1\r\n };\r\n if (GridsterUtils.compareItems(prev, currCoords) === 1) {\r\n return currCoords;\r\n } else {\r\n return prev;\r\n }\r\n },\r\n farthestItem\r\n );\r\n\r\n const tmpItem = Object.assign({}, item);\r\n this.getNextPossiblePosition(tmpItem, farthestItem);\r\n return tmpItem;\r\n };\r\n\r\n pixelsToPositionX(\r\n x: number,\r\n roundingMethod: (x: number) => number,\r\n noLimit?: boolean\r\n ): number {\r\n const position = roundingMethod(x / this.curColWidth);\r\n if (noLimit) {\r\n return position;\r\n } else {\r\n return Math.max(position, 0);\r\n }\r\n }\r\n\r\n pixelsToPositionY(\r\n y: number,\r\n roundingMethod: (x: number) => number,\r\n noLimit?: boolean\r\n ): number {\r\n const position = roundingMethod(y / this.curRowHeight);\r\n if (noLimit) {\r\n return position;\r\n } else {\r\n return Math.max(position, 0);\r\n }\r\n }\r\n\r\n positionXToPixels(x: number): number {\r\n return x * this.curColWidth;\r\n }\r\n\r\n positionYToPixels(y: number): number {\r\n return y * this.curRowHeight;\r\n }\r\n\r\n getItemComponent(\r\n item: GridsterItem\r\n ): GridsterItemComponentInterface | undefined {\r\n return this.grid.find(c => c.item === item);\r\n }\r\n\r\n // ------ Functions for swapWhileDragging option\r\n\r\n // identical to checkCollision() except that this function calls findItemWithItemForSwaping() instead of findItemWithItem()\r\n checkCollisionForSwaping(\r\n item: GridsterItem\r\n ): GridsterItemComponentInterface | boolean {\r\n let collision: GridsterItemComponentInterface | boolean = false;\r\n if (this.options.itemValidateCallback) {\r\n collision = !this.options.itemValidateCallback(item);\r\n }\r\n if (!collision && this.checkGridCollision(item)) {\r\n collision = true;\r\n }\r\n if (!collision) {\r\n const c = this.findItemWithItemForSwapping(item);\r\n if (c) {\r\n collision = c;\r\n }\r\n }\r\n return collision;\r\n }\r\n\r\n // identical to findItemWithItem() except that this function calls checkCollisionTwoItemsForSwaping() instead of checkCollisionTwoItems()\r\n findItemWithItemForSwapping(\r\n item: GridsterItem\r\n ): GridsterItemComponentInterface | boolean {\r\n let widgetsIndex: number = this.grid.length - 1;\r\n let widget: GridsterItemComponentInterface;\r\n for (; widgetsIndex > -1; widgetsIndex--) {\r\n widget = this.grid[widgetsIndex];\r\n if (\r\n widget.$item !== item &&\r\n GridsterComponent.checkCollisionTwoItemsForSwaping(widget.$item, item)\r\n ) {\r\n return widget;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n previewStyle(drag = false): void {\r\n if (this.movingItem) {\r\n if (this.compact && drag) {\r\n this.compact.checkCompactItem(this.movingItem);\r\n }\r\n this.previewStyle$.next(this.movingItem);\r\n } else {\r\n this.previewStyle$.next(null);\r\n }\r\n }\r\n\r\n // ------ End of functions for swapWhileDragging option\r\n\r\n // eslint-disable-next-line @typescript-eslint/member-ordering\r\n private static getNewArrayLength(\r\n length: number,\r\n overallSize: number,\r\n size: number\r\n ): number {\r\n const newLength = Math.max(length, Math.floor(overallSize / size));\r\n\r\n if (newLength < 0) {\r\n return 0;\r\n }\r\n\r\n if (Number.isFinite(newLength)) {\r\n return Math.floor(newLength);\r\n }\r\n\r\n return 0;\r\n }\r\n}\r\n","<div\r\n class=\"gridster-column\"\r\n *ngFor=\"let column of gridColumns; let i = index;\"\r\n [ngStyle]=\"gridRenderer.getGridColumnStyle(i)\"\r\n></div>\r\n<div\r\n class=\"gridster-row\"\r\n *ngFor=\"let row of gridRows; let i = index;\"\r\n [ngStyle]=\"gridRenderer.getGridRowStyle(i)\"\r\n></div>\r\n<ng-content></ng-content>\r\n<gridster-preview\r\n [gridRenderer]=\"gridRenderer\"\r\n [previewStyle$]=\"previewStyle$\"\r\n class=\"gridster-preview\"\r\n></gridster-preview>\r\n","import { GridsterItemComponentInterface } from './gridsterItem.interface';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\n\r\nexport class GridsterPush {\r\n public fromSouth: string;\r\n public fromNorth: string;\r\n public fromEast: string;\r\n public fromWest: string;\r\n private pushedItems: GridsterItemComponentInterface[];\r\n private pushedItemsTemp: GridsterItemComponentInterface[];\r\n private pushedItemsTempPath: { x: number; y: number }[][];\r\n private pushedItemsPath: { x: number; y: number }[][];\r\n private gridsterItem: GridsterItemComponentInterface;\r\n private gridster: GridsterComponentInterface;\r\n private pushedItemsOrder!: GridsterItemComponentInterface[];\r\n private tryPattern: {\r\n fromEast: ((\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ) => boolean)[];\r\n fromWest: ((\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ) => boolean)[];\r\n fromNorth: ((\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ) => boolean)[];\r\n fromSouth: ((\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ) => boolean)[];\r\n };\r\n private iteration = 0;\r\n\r\n constructor(gridsterItem: GridsterItemComponentInterface) {\r\n this.pushedItems = [];\r\n this.pushedItemsTemp = [];\r\n this.pushedItemsTempPath = [];\r\n this.pushedItemsPath = [];\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridsterItem.gridster;\r\n this.tryPattern = {\r\n fromEast: [this.tryWest, this.trySouth, this.tryNorth, this.tryEast],\r\n fromWest: [this.tryEast, this.trySouth, this.tryNorth, this.tryWest],\r\n fromNorth: [this.trySouth, this.tryEast, this.tryWest, this.tryNorth],\r\n fromSouth: [this.tryNorth, this.tryEast, this.tryWest, this.trySouth]\r\n };\r\n this.fromSouth = 'fromSouth';\r\n this.fromNorth = 'fromNorth';\r\n this.fromEast = 'fromEast';\r\n this.fromWest = 'fromWest';\r\n }\r\n\r\n destroy(): void {\r\n this.gridster = this.gridsterItem = null!;\r\n }\r\n\r\n pushItems(direction: string, disable?: boolean): boolean {\r\n if (this.gridster.$options.pushItems && !disable) {\r\n this.pushedItemsOrder = [];\r\n this.iteration = 0;\r\n const pushed = this.push(this.gridsterItem, direction);\r\n if (!pushed) {\r\n this.restoreTempItems();\r\n }\r\n this.pushedItemsOrder = [];\r\n this.pushedItemsTemp = [];\r\n this.pushedItemsTempPath = [];\r\n return pushed;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n restoreTempItems(): void {\r\n let i = this.pushedItemsTemp.length - 1;\r\n for (; i > -1; i--) {\r\n this.removeFromTempPushed(this.pushedItemsTemp[i]);\r\n }\r\n }\r\n\r\n restoreItems(): void {\r\n let i = 0;\r\n const l: number = this.pushedItems.length;\r\n let pushedItem: GridsterItemComponentInterface;\r\n for (; i < l; i++) {\r\n pushedItem = this.pushedItems[i];\r\n pushedItem.$item.x = pushedItem.item.x || 0;\r\n pushedItem.$item.y = pushedItem.item.y || 0;\r\n pushedItem.setSize();\r\n }\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n }\r\n\r\n setPushedItems(): void {\r\n let i = 0;\r\n const l: number = this.pushedItems.length;\r\n let pushedItem: GridsterItemComponentInterface;\r\n for (; i < l; i++) {\r\n pushedItem = this.pushedItems[i];\r\n pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);\r\n }\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n }\r\n\r\n checkPushBack(): void {\r\n let i: number = this.pushedItems.length - 1;\r\n let change = false;\r\n for (; i > -1; i--) {\r\n if (this.checkPushedItem(this.pushedItems[i], i)) {\r\n change = true;\r\n }\r\n }\r\n if (change) {\r\n this.checkPushBack();\r\n }\r\n }\r\n\r\n private push(\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n if (this.iteration > 100) {\r\n console.warn('max iteration reached');\r\n return false;\r\n }\r\n if (this.gridster.checkGridCollision(gridsterItem.$item)) {\r\n return false;\r\n }\r\n if (direction === '') {\r\n return false;\r\n }\r\n const conflicts: GridsterItemComponentInterface[] =\r\n this.gridster.findItemsWithItem(gridsterItem.$item);\r\n const invert = direction === this.fromNorth || direction === this.fromWest;\r\n // sort the list of conflicts in order of [y,x]. Invert when the push is from north and west\r\n // this is done so they don't conflict witch each other and revert positions, keeping the previous order\r\n conflicts.sort((a, b) => {\r\n if (invert) {\r\n return b.$item.y - a.$item.y || b.$item.x - a.$item.x;\r\n } else {\r\n return a.$item.y - b.$item.y || a.$item.x - b.$item.x;\r\n }\r\n });\r\n let i = 0;\r\n let itemCollision: GridsterItemComponentInterface;\r\n let makePush = true;\r\n const pushedItems: GridsterItemComponentInterface[] = [];\r\n for (; i < conflicts.length; i++) {\r\n itemCollision = conflicts[i];\r\n if (itemCollision === this.gridsterItem) {\r\n continue;\r\n }\r\n if (!itemCollision.canBeDragged()) {\r\n makePush = false;\r\n break;\r\n }\r\n const p = this.pushedItemsTemp.indexOf(itemCollision);\r\n if (p > -1 && this.pushedItemsTempPath[p].length > 10) {\r\n // stop if item is pushed more than 10 times to break infinite loops\r\n makePush = false;\r\n break;\r\n }\r\n let tryPattern :any = this.tryPattern;\r\n if (\r\n tryPattern[direction][0].call(this, itemCollision, gridsterItem)\r\n ) {\r\n this.pushedItemsOrder.push(itemCollision);\r\n pushedItems.push(itemCollision);\r\n } else if (\r\n tryPattern[direction][1].call(this, itemCollision, gridsterItem)\r\n ) {\r\n this.pushedItemsOrder.push(itemCollision);\r\n pushedItems.push(itemCollision);\r\n } else if (\r\n tryPattern[direction][2].call(this, itemCollision, gridsterItem)\r\n ) {\r\n this.pushedItemsOrder.push(itemCollision);\r\n pushedItems.push(itemCollision);\r\n } else if (\r\n tryPattern[direction][3].call(this, itemCollision, gridsterItem)\r\n ) {\r\n this.pushedItemsOrder.push(itemCollision);\r\n pushedItems.push(itemCollision);\r\n } else {\r\n makePush = false;\r\n break;\r\n }\r\n }\r\n if (!makePush) {\r\n i = this.pushedItemsOrder.lastIndexOf(pushedItems[0]);\r\n if (i > -1) {\r\n let j = this.pushedItemsOrder.length - 1;\r\n for (; j >= i; j--) {\r\n itemCollision = this.pushedItemsOrder[j];\r\n this.pushedItemsOrder.pop();\r\n this.removeFromTempPushed(itemCollision);\r\n this.removeFromPushedItem(itemCollision);\r\n }\r\n }\r\n }\r\n this.iteration++;\r\n return makePush;\r\n }\r\n\r\n private trySouth(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ): boolean {\r\n if (!this.gridster.$options.pushDirections.south) {\r\n return false;\r\n }\r\n this.addToTempPushed(gridsterItemCollide);\r\n gridsterItemCollide.$item.y =\r\n gridsterItem.$item.y + gridsterItem.$item.rows;\r\n if (this.push(gridsterItemCollide, this.fromNorth)) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n return true;\r\n } else {\r\n this.removeFromTempPushed(gridsterItemCollide);\r\n }\r\n return false;\r\n }\r\n\r\n private tryNorth(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ): boolean {\r\n if (!this.gridster.$options.pushDirections.north) {\r\n return false;\r\n }\r\n this.addToTempPushed(gridsterItemCollide);\r\n gridsterItemCollide.$item.y =\r\n gridsterItem.$item.y - gridsterItemCollide.$item.rows;\r\n if (this.push(gridsterItemCollide, this.fromSouth)) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n return true;\r\n } else {\r\n this.removeFromTempPushed(gridsterItemCollide);\r\n }\r\n return false;\r\n }\r\n\r\n private tryEast(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ): boolean {\r\n if (!this.gridster.$options.pushDirections.east) {\r\n return false;\r\n }\r\n this.addToTempPushed(gridsterItemCollide);\r\n gridsterItemCollide.$item.x =\r\n gridsterItem.$item.x + gridsterItem.$item.cols;\r\n if (this.push(gridsterItemCollide, this.fromWest)) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n return true;\r\n } else {\r\n this.removeFromTempPushed(gridsterItemCollide);\r\n }\r\n return false;\r\n }\r\n\r\n private tryWest(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface\r\n ): boolean {\r\n if (!this.gridster.$options.pushDirections.west) {\r\n return false;\r\n }\r\n this.addToTempPushed(gridsterItemCollide);\r\n gridsterItemCollide.$item.x =\r\n gridsterItem.$item.x - gridsterItemCollide.$item.cols;\r\n if (this.push(gridsterItemCollide, this.fromEast)) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n return true;\r\n } else {\r\n this.removeFromTempPushed(gridsterItemCollide);\r\n }\r\n return false;\r\n }\r\n\r\n private addToTempPushed(gridsterItem: GridsterItemComponentInterface): void {\r\n let i = this.pushedItemsTemp.indexOf(gridsterItem);\r\n if (i === -1) {\r\n i = this.pushedItemsTemp.push(gridsterItem) - 1;\r\n this.pushedItemsTempPath[i] = [];\r\n }\r\n this.pushedItemsTempPath[i].push({\r\n x: gridsterItem.$item.x,\r\n y: gridsterItem.$item.y\r\n });\r\n }\r\n\r\n private removeFromTempPushed(\r\n gridsterItem: GridsterItemComponentInterface\r\n ): void {\r\n const i = this.pushedItemsTemp.indexOf(gridsterItem);\r\n const tempPosition = this.pushedItemsTempPath[i].pop();\r\n if (!tempPosition) {\r\n return;\r\n }\r\n gridsterItem.$item.x = tempPosition.x;\r\n gridsterItem.$item.y = tempPosition.y;\r\n gridsterItem.setSize();\r\n if (!this.pushedItemsTempPath[i].length) {\r\n this.pushedItemsTemp.splice(i, 1);\r\n this.pushedItemsTempPath.splice(i, 1);\r\n }\r\n }\r\n\r\n private addToPushed(gridsterItem: GridsterItemComponentInterface): void {\r\n if (this.pushedItems.indexOf(gridsterItem) < 0) {\r\n this.pushedItems.push(gridsterItem);\r\n this.pushedItemsPath.push([\r\n { x: gridsterItem.item.x || 0, y: gridsterItem.item.y || 0 },\r\n { x: gridsterItem.$item.x, y: gridsterItem.$item.y }\r\n ]);\r\n } else {\r\n const i = this.pushedItems.indexOf(gridsterItem);\r\n this.pushedItemsPath[i].push({\r\n x: gridsterItem.$item.x,\r\n y: gridsterItem.$item.y\r\n });\r\n }\r\n }\r\n\r\n private removeFromPushed(i: number): void {\r\n if (i > -1) {\r\n this.pushedItems.splice(i, 1);\r\n this.pushedItemsPath.splice(i, 1);\r\n }\r\n }\r\n\r\n private removeFromPushedItem(\r\n gridsterItem: GridsterItemComponentInterface\r\n ): void {\r\n const i = this.pushedItems.indexOf(gridsterItem);\r\n if (i > -1) {\r\n this.pushedItemsPath[i].pop();\r\n if (!this.pushedItemsPath.length) {\r\n this.pushedItems.splice(i, 1);\r\n this.pushedItemsPath.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n private checkPushedItem(\r\n pushedItem: GridsterItemComponentInterface,\r\n i: number\r\n ): boolean {\r\n const path = this.pushedItemsPath[i];\r\n let j = path.length - 2;\r\n let lastPosition;\r\n let x;\r\n let y;\r\n let change = false;\r\n for (; j > -1; j--) {\r\n lastPosition = path[j];\r\n x = pushedItem.$item.x;\r\n y = pushedItem.$item.y;\r\n pushedItem.$item.x = lastPosition.x;\r\n pushedItem.$item.y = lastPosition.y;\r\n if (!this.gridster.findItemWithItem(pushedItem.$item)) {\r\n pushedItem.setSize();\r\n path.splice(j + 1, path.length - j - 1);\r\n change = true;\r\n } else {\r\n pushedItem.$item.x = x;\r\n pushedItem.$item.y = y;\r\n }\r\n }\r\n if (path.length < 2) {\r\n this.removeFromPushed(i);\r\n }\r\n return change;\r\n }\r\n}\r\n","import { GridsterResizeEventType } from './gridsterResizeEventType.interface';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\n\r\nlet scrollSensitivity: number;\r\nlet scrollSpeed: number;\r\nconst intervalDuration = 50;\r\nlet gridsterElement: HTMLElement | null;\r\nlet resizeEvent: boolean | undefined;\r\nlet resizeEventType: GridsterResizeEventType | undefined;\r\nlet intervalE: number;\r\nlet intervalW: number;\r\nlet intervalN: number;\r\nlet intervalS: number;\r\n\r\ntype Position = Pick<MouseEvent, 'clientX' | 'clientY'>;\r\n\r\ntype CalculatePosition = (position: Position) => void;\r\n\r\nexport function scroll(\r\n gridster: GridsterComponentInterface,\r\n left: number,\r\n top: number,\r\n width: number,\r\n height: number,\r\n event: MouseEvent,\r\n lastMouse: Position,\r\n calculateItemPosition: CalculatePosition,\r\n resize?: boolean,\r\n resizeEventScrollType?: GridsterResizeEventType\r\n): void {\r\n scrollSensitivity = gridster.$options.scrollSensitivity;\r\n scrollSpeed = gridster.$options.scrollSpeed;\r\n gridsterElement = gridster.el;\r\n resizeEvent = resize;\r\n resizeEventType = resizeEventScrollType;\r\n\r\n const offsetWidth = gridsterElement.offsetWidth;\r\n const offsetHeight = gridsterElement.offsetHeight;\r\n const offsetLeft = gridsterElement.scrollLeft;\r\n const offsetTop = gridsterElement.scrollTop;\r\n const elemTopOffset = top - offsetTop;\r\n const elemBottomOffset = offsetHeight + offsetTop - top - height;\r\n\r\n const { clientX, clientY } = event;\r\n\r\n if (!gridster.$options.disableScrollVertical) {\r\n if (lastMouse.clientY < clientY && elemBottomOffset < scrollSensitivity) {\r\n cancelN();\r\n if (\r\n (resizeEvent && resizeEventType && !resizeEventType.south) ||\r\n intervalS\r\n ) {\r\n return;\r\n }\r\n intervalS = startVertical(1, calculateItemPosition, lastMouse);\r\n } else if (\r\n lastMouse.clientY > clientY &&\r\n offsetTop > 0 &&\r\n elemTopOffset < scrollSensitivity\r\n ) {\r\n cancelS();\r\n if (\r\n (resizeEvent && resizeEventType && !resizeEventType.north) ||\r\n intervalN\r\n ) {\r\n return;\r\n }\r\n intervalN = startVertical(-1, calculateItemPosition, lastMouse);\r\n } else if (lastMouse.clientY !== clientY) {\r\n cancelVertical();\r\n }\r\n }\r\n\r\n const elemRightOffset = offsetLeft + offsetWidth - left - width;\r\n const elemLeftOffset = left - offsetLeft;\r\n\r\n if (!gridster.$options.disableScrollHorizontal) {\r\n if (lastMouse.clientX < clientX && elemRightOffset <= scrollSensitivity) {\r\n cancelW();\r\n if (\r\n (resizeEvent && resizeEventType && !resizeEventType.east) ||\r\n intervalE\r\n ) {\r\n return;\r\n }\r\n intervalE = startHorizontal(1, calculateItemPosition, lastMouse);\r\n } else if (\r\n lastMouse.clientX > clientX &&\r\n offsetLeft > 0 &&\r\n elemLeftOffset < scrollSensitivity\r\n ) {\r\n cancelE();\r\n if (\r\n (resizeEvent && resizeEventType && !resizeEventType.west) ||\r\n intervalW\r\n ) {\r\n return;\r\n }\r\n intervalW = startHorizontal(-1, calculateItemPosition, lastMouse);\r\n } else if (lastMouse.clientX !== clientX) {\r\n cancelHorizontal();\r\n }\r\n }\r\n}\r\n\r\nfunction startVertical(\r\n sign: number,\r\n calculateItemPosition: CalculatePosition,\r\n lastMouse: Position\r\n): number {\r\n let clientY = lastMouse.clientY;\r\n return window.setInterval(() => {\r\n if (\r\n !gridsterElement ||\r\n (sign === -1 && gridsterElement.scrollTop - scrollSpeed < 0)\r\n ) {\r\n cancelVertical();\r\n }\r\n gridsterElement!.scrollTop += sign * scrollSpeed;\r\n clientY += sign * scrollSpeed;\r\n calculateItemPosition({ clientX: lastMouse.clientX, clientY });\r\n }, intervalDuration);\r\n}\r\n\r\nfunction startHorizontal(\r\n sign: number,\r\n calculateItemPosition: CalculatePosition,\r\n lastMouse: Position\r\n): number {\r\n let clientX = lastMouse.clientX;\r\n return window.setInterval(() => {\r\n if (\r\n !gridsterElement ||\r\n (sign === -1 && gridsterElement.scrollLeft - scrollSpeed < 0)\r\n ) {\r\n cancelHorizontal();\r\n }\r\n gridsterElement!.scrollLeft += sign * scrollSpeed;\r\n clientX += sign * scrollSpeed;\r\n calculateItemPosition({ clientX, clientY: lastMouse.clientY });\r\n }, intervalDuration);\r\n}\r\n\r\nexport function cancelScroll(): void {\r\n cancelHorizontal();\r\n cancelVertical();\r\n gridsterElement = null;\r\n}\r\n\r\nfunction cancelHorizontal(): void {\r\n cancelE();\r\n cancelW();\r\n}\r\n\r\nfunction cancelVertical(): void {\r\n cancelN();\r\n cancelS();\r\n}\r\n\r\nfunction cancelE(): void {\r\n if (intervalE) {\r\n clearInterval(intervalE);\r\n intervalE = 0;\r\n }\r\n}\r\n\r\nfunction cancelW(): void {\r\n if (intervalW) {\r\n clearInterval(intervalW);\r\n intervalW = 0;\r\n }\r\n}\r\n\r\nfunction cancelS(): void {\r\n if (intervalS) {\r\n clearInterval(intervalS);\r\n intervalS = 0;\r\n }\r\n}\r\n\r\nfunction cancelN(): void {\r\n if (intervalN) {\r\n clearInterval(intervalN);\r\n intervalN = 0;\r\n }\r\n}\r\n","import { GridsterItemComponentInterface } from './gridsterItem.interface';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\n\r\nexport class GridsterSwap {\r\n private swapedItem: GridsterItemComponentInterface | undefined;\r\n private gridsterItem: GridsterItemComponentInterface;\r\n private gridster: GridsterComponentInterface;\r\n\r\n constructor(gridsterItem: GridsterItemComponentInterface) {\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridsterItem.gridster;\r\n }\r\n\r\n destroy(): void {\r\n this.gridster = this.gridsterItem = this.swapedItem = null!;\r\n }\r\n\r\n swapItems(): void {\r\n if (this.gridster.$options.swap) {\r\n this.checkSwapBack();\r\n this.checkSwap(this.gridsterItem);\r\n }\r\n }\r\n\r\n checkSwapBack(): void {\r\n if (this.swapedItem) {\r\n const x: number = this.swapedItem.$item.x;\r\n const y: number = this.swapedItem.$item.y;\r\n this.swapedItem.$item.x = this.swapedItem.item.x || 0;\r\n this.swapedItem.$item.y = this.swapedItem.item.y || 0;\r\n if (this.gridster.checkCollision(this.swapedItem.$item)) {\r\n this.swapedItem.$item.x = x;\r\n this.swapedItem.$item.y = y;\r\n } else {\r\n this.swapedItem.setSize();\r\n this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\r\n this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\r\n this.swapedItem = undefined;\r\n }\r\n }\r\n }\r\n\r\n restoreSwapItem(): void {\r\n if (this.swapedItem) {\r\n this.swapedItem.$item.x = this.swapedItem.item.x || 0;\r\n this.swapedItem.$item.y = this.swapedItem.item.y || 0;\r\n this.swapedItem.setSize();\r\n this.swapedItem = undefined;\r\n }\r\n }\r\n\r\n setSwapItem(): void {\r\n if (this.swapedItem) {\r\n this.swapedItem.checkItemChanges(\r\n this.swapedItem.$item,\r\n this.swapedItem.item\r\n );\r\n this.swapedItem = undefined;\r\n }\r\n }\r\n\r\n checkSwap(pushedBy: GridsterItemComponentInterface): void {\r\n let gridsterItemCollision;\r\n if (this.gridster.$options.swapWhileDragging) {\r\n gridsterItemCollision = this.gridster.checkCollisionForSwaping(\r\n pushedBy.$item\r\n );\r\n } else {\r\n gridsterItemCollision = this.gridster.checkCollision(pushedBy.$item);\r\n }\r\n if (\r\n gridsterItemCollision &&\r\n gridsterItemCollision !== true &&\r\n gridsterItemCollision.canBeDragged()\r\n ) {\r\n const gridsterItemCollide: GridsterItemComponentInterface =\r\n gridsterItemCollision;\r\n const copyCollisionX = gridsterItemCollide.$item.x;\r\n const copyCollisionY = gridsterItemCollide.$item.y;\r\n const copyX = pushedBy.$item.x;\r\n const copyY = pushedBy.$item.y;\r\n const diffX = copyX - copyCollisionX;\r\n const diffY = copyY - copyCollisionY;\r\n gridsterItemCollide.$item.x = pushedBy.item.x - diffX;\r\n gridsterItemCollide.$item.y = pushedBy.item.y - diffY;\r\n pushedBy.$item.x = gridsterItemCollide.item.x + diffX;\r\n pushedBy.$item.y = gridsterItemCollide.item.y + diffY;\r\n if (\r\n this.gridster.checkCollision(gridsterItemCollide.$item) ||\r\n this.gridster.checkCollision(pushedBy.$item)\r\n ) {\r\n pushedBy.$item.x = copyX;\r\n pushedBy.$item.y = copyY;\r\n gridsterItemCollide.$item.x = copyCollisionX;\r\n gridsterItemCollide.$item.y = copyCollisionY;\r\n } else {\r\n gridsterItemCollide.setSize();\r\n this.swapedItem = gridsterItemCollide;\r\n if (this.gridster.$options.swapWhileDragging) {\r\n this.gridsterItem.checkItemChanges(\r\n this.gridsterItem.$item,\r\n this.gridsterItem.item\r\n );\r\n this.setSwapItem();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { NgZone } from '@angular/core';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { DirTypes } from './gridsterConfig.interface';\r\nimport { GridsterItemComponentInterface } from './gridsterItem.interface';\r\nimport { GridsterPush } from './gridsterPush.service';\r\nimport { cancelScroll, scroll } from './gridsterScroll.service';\r\n\r\nimport { GridsterSwap } from './gridsterSwap.service';\r\nimport { GridsterUtils } from './gridsterUtils.service';\r\n\r\nconst GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS = 'gridster-item-resizable-handler';\r\n\r\nenum Direction {\r\n UP = 'UP',\r\n DOWN = 'DOWN',\r\n LEFT = 'LEFT',\r\n RIGHT = 'RIGHT'\r\n}\r\n\r\nexport class GridsterDraggable {\r\n gridsterItem: GridsterItemComponentInterface;\r\n gridster: GridsterComponentInterface;\r\n lastMouse: {\r\n clientX: number;\r\n clientY: number;\r\n };\r\n offsetLeft!: number;\r\n offsetTop!: number;\r\n margin!: number;\r\n outerMarginTop!: number | null;\r\n outerMarginRight!: number | null;\r\n outerMarginBottom!: number | null;\r\n outerMarginLeft!: number | null;\r\n diffTop!: number;\r\n diffLeft!: number;\r\n originalClientX!: number;\r\n originalClientY!: number;\r\n top!: number;\r\n left!: number;\r\n height!: number;\r\n width!: number;\r\n positionX!: number;\r\n positionY!: number;\r\n positionXBackup!: number;\r\n positionYBackup!: number;\r\n enabled!: boolean;\r\n mousemove!: () => void;\r\n mouseup!: () => void;\r\n mouseleave!: () => void;\r\n cancelOnBlur!: () => void;\r\n touchmove!: () => void;\r\n touchend!: () => void;\r\n touchcancel!: () => void;\r\n mousedown!: () => void;\r\n touchstart!: () => void;\r\n push!: GridsterPush;\r\n swap!: GridsterSwap;\r\n path: Array<{ x: number; y: number }>;\r\n collision: GridsterItemComponentInterface | boolean = false;\r\n\r\n constructor(\r\n gridsterItem: GridsterItemComponentInterface,\r\n gridster: GridsterComponentInterface,\r\n private zone: NgZone\r\n ) {\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridster;\r\n this.lastMouse = {\r\n clientX: 0,\r\n clientY: 0\r\n };\r\n this.path = [];\r\n }\r\n\r\n destroy(): void {\r\n if (this.gridster.previewStyle) {\r\n this.gridster.previewStyle(true);\r\n }\r\n this.gridsterItem = this.gridster = this.collision = null!;\r\n if (this.mousedown) {\r\n this.mousedown();\r\n this.touchstart();\r\n }\r\n }\r\n\r\n dragStart(e: MouseEvent): void {\r\n if (e.which && e.which !== 1) {\r\n return;\r\n }\r\n\r\n if (\r\n this.gridster.options.draggable &&\r\n this.gridster.options.draggable.start\r\n ) {\r\n this.gridster.options.draggable.start(\r\n this.gridsterItem.item,\r\n this.gridsterItem,\r\n e\r\n );\r\n }\r\n\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.mousemove = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mousemove',\r\n this.dragMove\r\n );\r\n this.touchmove = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'touchmove',\r\n this.dragMove\r\n );\r\n });\r\n this.mouseup = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n this.dragStop\r\n );\r\n this.mouseleave = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseleave',\r\n this.dragStop\r\n );\r\n this.cancelOnBlur = this.gridsterItem.renderer.listen(\r\n 'window',\r\n 'blur',\r\n this.dragStop\r\n );\r\n this.touchend = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchend',\r\n this.dragStop\r\n );\r\n this.touchcancel = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchcancel',\r\n this.dragStop\r\n );\r\n this.gridsterItem.renderer.addClass(\r\n this.gridsterItem.el,\r\n 'gridster-item-moving'\r\n );\r\n this.margin = this.gridster.$options.margin;\r\n this.outerMarginTop = this.gridster.$options.outerMarginTop;\r\n this.outerMarginRight = this.gridster.$options.outerMarginRight;\r\n this.outerMarginBottom = this.gridster.$options.outerMarginBottom;\r\n this.outerMarginLeft = this.gridster.$options.outerMarginLeft;\r\n this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\r\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\r\n this.left = this.gridsterItem.left - this.margin;\r\n this.top = this.gridsterItem.top - this.margin;\r\n this.originalClientX = e.clientX;\r\n this.originalClientY = e.clientY;\r\n this.width = this.gridsterItem.width;\r\n this.height = this.gridsterItem.height;\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.diffLeft =\r\n e.clientX - this.gridster.el.scrollWidth + this.gridsterItem.left;\r\n } else {\r\n this.diffLeft = e.clientX + this.offsetLeft - this.margin - this.left;\r\n }\r\n this.diffTop = e.clientY + this.offsetTop - this.margin - this.top;\r\n this.gridster.movingItem = this.gridsterItem.$item;\r\n this.gridster.previewStyle(true);\r\n this.push = new GridsterPush(this.gridsterItem);\r\n this.swap = new GridsterSwap(this.gridsterItem);\r\n this.gridster.dragInProgress = true;\r\n this.gridster.updateGrid();\r\n this.path.push({\r\n x: this.gridsterItem.item.x || 0,\r\n y: this.gridsterItem.item.y || 0\r\n });\r\n }\r\n\r\n dragMove = (e: MouseEvent): void => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n GridsterUtils.checkTouchEvent(e);\r\n\r\n // get the directions of the mouse event\r\n let directions = this.getDirections(e);\r\n\r\n if (this.gridster.options.enableBoundaryControl) {\r\n // prevent moving up at the top of gridster\r\n if (\r\n directions.includes(Direction.UP) &&\r\n this.gridsterItem.el.getBoundingClientRect().top <\r\n this.gridster.el.getBoundingClientRect().top +\r\n (this.outerMarginTop ?? this.margin)\r\n ) {\r\n directions = directions.filter(direction => direction != Direction.UP);\r\n e = new MouseEvent(e.type, {\r\n clientX: e.clientX,\r\n clientY: this.lastMouse.clientY\r\n });\r\n }\r\n // prevent moving left at the leftmost column of gridster\r\n if (\r\n directions.includes(Direction.LEFT) &&\r\n this.gridsterItem.el.getBoundingClientRect().left <\r\n this.gridster.el.getBoundingClientRect().left +\r\n (this.outerMarginLeft ?? this.margin)\r\n ) {\r\n directions = directions.filter(\r\n direction => direction != Direction.LEFT\r\n );\r\n e = new MouseEvent(e.type, {\r\n clientX: this.lastMouse.clientX,\r\n clientY: e.clientY\r\n });\r\n }\r\n // prevent moving right at the rightmost column of gridster\r\n if (\r\n directions.includes(Direction.RIGHT) &&\r\n this.gridsterItem.el.getBoundingClientRect().right >\r\n this.gridster.el.getBoundingClientRect().right -\r\n (this.outerMarginRight ?? this.margin)\r\n ) {\r\n directions = directions.filter(\r\n direction => direction != Direction.RIGHT\r\n );\r\n e = new MouseEvent(e.type, {\r\n clientX: this.lastMouse.clientX,\r\n clientY: e.clientY\r\n });\r\n }\r\n // prevent moving down at the bottom of gridster\r\n if (\r\n directions.includes(Direction.DOWN) &&\r\n this.gridsterItem.el.getBoundingClientRect().bottom >\r\n this.gridster.el.getBoundingClientRect().bottom - \r\n (this.outerMarginBottom ?? this.margin)\r\n ) {\r\n directions = directions.filter(\r\n direction => direction != Direction.DOWN\r\n );\r\n e = new MouseEvent(e.type, {\r\n clientX: e.clientX,\r\n clientY: this.lastMouse.clientY\r\n });\r\n }\r\n }\r\n\r\n // do not change item location when there is no direction to go\r\n if (directions.length) {\r\n this.offsetLeft =\r\n this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\r\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\r\n scroll(\r\n this.gridster,\r\n this.left,\r\n this.top,\r\n this.width,\r\n this.height,\r\n e,\r\n this.lastMouse,\r\n <any>this.calculateItemPositionFromMousePosition\r\n );\r\n\r\n this.calculateItemPositionFromMousePosition(e);\r\n }\r\n };\r\n\r\n calculateItemPositionFromMousePosition = (e: MouseEvent): void => {\r\n if (this.gridster.options.scale) {\r\n this.calculateItemPositionWithScale(e, this.gridster.options.scale);\r\n } else {\r\n this.calculateItemPositionWithoutScale(e);\r\n }\r\n this.calculateItemPosition();\r\n this.lastMouse.clientX = e.clientX;\r\n this.lastMouse.clientY = e.clientY;\r\n this.zone.run(() => {\r\n this.gridster.updateGrid();\r\n });\r\n };\r\n\r\n calculateItemPositionWithScale(e: MouseEvent, scale: number): void {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.left =\r\n this.gridster.el.scrollWidth -\r\n this.originalClientX +\r\n (e.clientX - this.originalClientX) / scale +\r\n this.diffLeft;\r\n } else {\r\n this.left =\r\n this.originalClientX +\r\n (e.clientX - this.originalClientX) / scale +\r\n this.offsetLeft -\r\n this.diffLeft;\r\n }\r\n this.top =\r\n this.originalClientY +\r\n (e.clientY - this.originalClientY) / scale +\r\n this.offsetTop -\r\n this.diffTop;\r\n }\r\n\r\n calculateItemPositionWithoutScale(e: MouseEvent): void {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.left = this.gridster.el.scrollWidth - e.clientX + this.diffLeft;\r\n } else {\r\n this.left = e.clientX + this.offsetLeft - this.diffLeft;\r\n }\r\n\r\n this.top = e.clientY + this.offsetTop - this.diffTop;\r\n }\r\n\r\n dragStop = (e: MouseEvent): void => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n cancelScroll();\r\n this.cancelOnBlur();\r\n this.mousemove();\r\n this.mouseup();\r\n this.mouseleave();\r\n this.touchmove();\r\n this.touchend();\r\n this.touchcancel();\r\n this.gridsterItem.renderer.removeClass(\r\n this.gridsterItem.el,\r\n 'gridster-item-moving'\r\n );\r\n this.gridster.dragInProgress = false;\r\n this.gridster.updateGrid();\r\n this.path = [];\r\n if (\r\n this.gridster.options.draggable &&\r\n this.gridster.options.draggable.stop\r\n ) {\r\n Promise.resolve(\r\n this.gridster.options.draggable.stop(\r\n this.gridsterItem.item,\r\n this.gridsterItem,\r\n e\r\n )\r\n ).then(this.makeDrag, this.cancelDrag);\r\n } else {\r\n this.makeDrag();\r\n }\r\n setTimeout(() => {\r\n if (this.gridster) {\r\n this.gridster.movingItem = null;\r\n this.gridster.previewStyle(true);\r\n }\r\n });\r\n };\r\n\r\n cancelDrag = (): void => {\r\n this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\r\n this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\r\n this.gridsterItem.setSize();\r\n if (this.push) {\r\n this.push.restoreItems();\r\n }\r\n if (this.swap) {\r\n this.swap.restoreSwapItem();\r\n }\r\n if (this.push) {\r\n this.push.destroy();\r\n this.push = null!;\r\n }\r\n if (this.swap) {\r\n this.swap.destroy();\r\n this.swap = null!;\r\n }\r\n };\r\n\r\n makeDrag = (): void => {\r\n if (\r\n this.gridster.$options.draggable.dropOverItems &&\r\n this.gridster.options.draggable &&\r\n this.gridster.options.draggable.dropOverItemsCallback &&\r\n this.collision &&\r\n this.collision !== true &&\r\n this.collision.$item\r\n ) {\r\n this.gridster.options.draggable.dropOverItemsCallback(\r\n this.gridsterItem.item,\r\n this.collision.item,\r\n this.gridster\r\n );\r\n }\r\n this.collision = false;\r\n this.gridsterItem.setSize();\r\n this.gridsterItem.checkItemChanges(\r\n this.gridsterItem.$item,\r\n this.gridsterItem.item\r\n );\r\n if (this.push) {\r\n this.push.setPushedItems();\r\n }\r\n if (this.swap) {\r\n this.swap.setSwapItem();\r\n }\r\n if (this.push) {\r\n this.push.destroy();\r\n this.push = null!;\r\n }\r\n if (this.swap) {\r\n this.swap.destroy();\r\n this.swap = null!;\r\n }\r\n };\r\n\r\n calculateItemPosition(): void {\r\n this.gridster.movingItem = this.gridsterItem.$item;\r\n this.positionX = this.gridster.pixelsToPositionX(this.left, Math.round);\r\n this.positionY = this.gridster.pixelsToPositionY(this.top, Math.round);\r\n this.positionXBackup = this.gridsterItem.$item.x;\r\n this.positionYBackup = this.gridsterItem.$item.y;\r\n this.gridsterItem.$item.x = this.positionX;\r\n if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.x = this.positionXBackup;\r\n }\r\n this.gridsterItem.$item.y = this.positionY;\r\n if (this.gridster.checkGridCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.y = this.positionYBackup;\r\n }\r\n this.gridster.gridRenderer.setCellPosition(\r\n this.gridsterItem.renderer,\r\n this.gridsterItem.el,\r\n this.left,\r\n this.top\r\n );\r\n\r\n if (\r\n this.positionXBackup !== this.gridsterItem.$item.x ||\r\n this.positionYBackup !== this.gridsterItem.$item.y\r\n ) {\r\n const lastPosition = this.path[this.path.length - 1];\r\n let direction = '';\r\n if (lastPosition.x < this.gridsterItem.$item.x) {\r\n direction = this.push.fromWest;\r\n } else if (lastPosition.x > this.gridsterItem.$item.x) {\r\n direction = this.push.fromEast;\r\n } else if (lastPosition.y < this.gridsterItem.$item.y) {\r\n direction = this.push.fromNorth;\r\n } else if (lastPosition.y > this.gridsterItem.$item.y) {\r\n direction = this.push.fromSouth;\r\n }\r\n this.push.pushItems(direction, this.gridster.$options.disablePushOnDrag);\r\n this.swap.swapItems();\r\n this.collision = this.gridster.checkCollision(this.gridsterItem.$item);\r\n if (this.collision) {\r\n this.gridsterItem.$item.x = this.positionXBackup;\r\n this.gridsterItem.$item.y = this.positionYBackup;\r\n if (\r\n this.gridster.$options.draggable.dropOverItems &&\r\n this.collision !== true &&\r\n this.collision.$item\r\n ) {\r\n this.gridster.movingItem = null;\r\n }\r\n } else {\r\n this.path.push({\r\n x: this.gridsterItem.$item.x,\r\n y: this.gridsterItem.$item.y\r\n });\r\n }\r\n this.push.checkPushBack();\r\n } else {\r\n // reset the collision when you drag and drop on an adjacent cell that is not empty\r\n // and go back to the cell you were in from the beginning,\r\n // this is to prevent `dropOverItemsCallback'\r\n this.collision = false;\r\n }\r\n this.gridster.previewStyle(true);\r\n }\r\n\r\n toggle(): void {\r\n const enableDrag = this.gridsterItem.canBeDragged();\r\n if (!this.enabled && enableDrag) {\r\n this.enabled = !this.enabled;\r\n this.mousedown = this.gridsterItem.renderer.listen(\r\n this.gridsterItem.el,\r\n 'mousedown',\r\n this.dragStartDelay\r\n );\r\n this.touchstart = this.gridsterItem.renderer.listen(\r\n this.gridsterItem.el,\r\n 'touchstart',\r\n this.dragStartDelay\r\n );\r\n } else if (this.enabled && !enableDrag) {\r\n this.enabled = !this.enabled;\r\n this.mousedown();\r\n this.touchstart();\r\n }\r\n }\r\n\r\n dragStartDelay = (e: MouseEvent): void => {\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(GRIDSTER_ITEM_RESIZABLE_HANDLER_CLASS)) {\r\n return;\r\n }\r\n if (GridsterUtils.checkContentClassForEvent(this.gridster, e)) {\r\n return;\r\n }\r\n GridsterUtils.checkTouchEvent(e);\r\n if (!this.gridster.$options.draggable.delayStart) {\r\n this.dragStart(e);\r\n return;\r\n }\r\n const timeout = setTimeout(() => {\r\n this.dragStart(e);\r\n cancelDrag();\r\n }, this.gridster.$options.draggable.delayStart);\r\n const cancelMouse = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n cancelDrag\r\n );\r\n const cancelMouseLeave = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseleave',\r\n cancelDrag\r\n );\r\n const cancelOnBlur = this.gridsterItem.renderer.listen(\r\n 'window',\r\n 'blur',\r\n cancelDrag\r\n );\r\n const cancelTouchMove = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchmove',\r\n cancelMove\r\n );\r\n const cancelTouchEnd = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchend',\r\n cancelDrag\r\n );\r\n const cancelTouchCancel = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchcancel',\r\n cancelDrag\r\n );\r\n\r\n function cancelMove(eventMove: MouseEvent): void {\r\n GridsterUtils.checkTouchEvent(eventMove);\r\n if (\r\n Math.abs(eventMove.clientX - e.clientX) > 9 ||\r\n Math.abs(eventMove.clientY - e.clientY) > 9\r\n ) {\r\n cancelDrag();\r\n }\r\n }\r\n\r\n function cancelDrag(): void {\r\n clearTimeout(timeout);\r\n cancelOnBlur();\r\n cancelMouse();\r\n cancelMouseLeave();\r\n cancelTouchMove();\r\n cancelTouchEnd();\r\n cancelTouchCancel();\r\n }\r\n };\r\n\r\n /**\r\n * Returns the list of directions for given mouse event\r\n * @param e Mouse event\r\n * */\r\n private getDirections(e: MouseEvent) {\r\n const directions: string[] = [];\r\n if (this.lastMouse.clientX === 0 && this.lastMouse.clientY === 0) {\r\n this.lastMouse.clientY = e.clientY;\r\n this.lastMouse.clientX = e.clientX;\r\n }\r\n if (this.lastMouse.clientY > e.clientY) {\r\n directions.push(Direction.UP);\r\n }\r\n if (this.lastMouse.clientY < e.clientY) {\r\n directions.push(Direction.DOWN);\r\n }\r\n if (this.lastMouse.clientX < e.clientX) {\r\n directions.push(Direction.RIGHT);\r\n }\r\n if (this.lastMouse.clientX > e.clientX) {\r\n directions.push(Direction.LEFT);\r\n }\r\n return directions;\r\n }\r\n}\r\n","import {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\n\r\nexport class GridsterPushResize {\r\n public fromSouth: string;\r\n public fromNorth: string;\r\n public fromEast: string;\r\n public fromWest: string;\r\n private pushedItems: Array<GridsterItemComponentInterface>;\r\n private pushedItemsPath: Array<Array<GridsterItem>>;\r\n private gridsterItem: GridsterItemComponentInterface;\r\n private gridster: GridsterComponentInterface;\r\n private tryPattern: {\r\n fromEast: (\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ) => boolean;\r\n fromWest: (\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ) => boolean;\r\n fromNorth: (\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ) => boolean;\r\n fromSouth: (\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ) => boolean;\r\n };\r\n\r\n constructor(gridsterItem: GridsterItemComponentInterface) {\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridsterItem.gridster;\r\n this.tryPattern = {\r\n fromEast: this.tryWest,\r\n fromWest: this.tryEast,\r\n fromNorth: this.trySouth,\r\n fromSouth: this.tryNorth\r\n };\r\n this.fromSouth = 'fromSouth';\r\n this.fromNorth = 'fromNorth';\r\n this.fromEast = 'fromEast';\r\n this.fromWest = 'fromWest';\r\n }\r\n\r\n destroy(): void {\r\n this.gridster = this.gridsterItem = null!;\r\n }\r\n\r\n pushItems(direction: string): boolean {\r\n if (this.gridster.$options.pushResizeItems) {\r\n return this.push(this.gridsterItem, direction);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n restoreItems(): void {\r\n let i = 0;\r\n const l: number = this.pushedItems.length;\r\n let pushedItem: GridsterItemComponentInterface;\r\n for (; i < l; i++) {\r\n pushedItem = this.pushedItems[i];\r\n pushedItem.$item.x = pushedItem.item.x || 0;\r\n pushedItem.$item.y = pushedItem.item.y || 0;\r\n pushedItem.$item.cols = pushedItem.item.cols || 1;\r\n pushedItem.$item.row = pushedItem.item.row || 1;\r\n pushedItem.setSize();\r\n }\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n }\r\n\r\n setPushedItems(): void {\r\n let i = 0;\r\n const l: number = this.pushedItems.length;\r\n let pushedItem: GridsterItemComponentInterface;\r\n for (; i < l; i++) {\r\n pushedItem = this.pushedItems[i];\r\n pushedItem.checkItemChanges(pushedItem.$item, pushedItem.item);\r\n }\r\n this.pushedItems = [];\r\n this.pushedItemsPath = [];\r\n }\r\n\r\n checkPushBack(): void {\r\n let i: number = this.pushedItems.length - 1;\r\n let change = false;\r\n for (; i > -1; i--) {\r\n if (this.checkPushedItem(this.pushedItems[i], i)) {\r\n change = true;\r\n }\r\n }\r\n if (change) {\r\n this.checkPushBack();\r\n }\r\n }\r\n\r\n private push(\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const gridsterItemCollision: GridsterItemComponentInterface | boolean =\r\n this.gridster.checkCollision(gridsterItem.$item);\r\n if (\r\n gridsterItemCollision &&\r\n gridsterItemCollision !== true &&\r\n gridsterItemCollision !== this.gridsterItem &&\r\n gridsterItemCollision.canBeResized()\r\n ) {\r\n let tryPattern: any = this.tryPattern;\r\n if (\r\n tryPattern[direction].call(\r\n this,\r\n gridsterItemCollision,\r\n gridsterItem,\r\n direction\r\n )\r\n ) {\r\n return true;\r\n }\r\n } else if (gridsterItemCollision === false) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private trySouth(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const backUpY = gridsterItemCollide.$item.y;\r\n const backUpRows = gridsterItemCollide.$item.rows;\r\n gridsterItemCollide.$item.y =\r\n gridsterItem.$item.y + gridsterItem.$item.rows;\r\n gridsterItemCollide.$item.rows =\r\n backUpRows + backUpY - gridsterItemCollide.$item.y;\r\n if (\r\n !this.gridster.checkCollisionTwoItems(\r\n gridsterItemCollide.$item,\r\n gridsterItem.$item\r\n ) &&\r\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\r\n ) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n this.push(gridsterItem, direction);\r\n return true;\r\n } else {\r\n gridsterItemCollide.$item.y = backUpY;\r\n gridsterItemCollide.$item.rows = backUpRows;\r\n }\r\n return false;\r\n }\r\n\r\n private tryNorth(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const backUpRows = gridsterItemCollide.$item.rows;\r\n gridsterItemCollide.$item.rows =\r\n gridsterItem.$item.y - gridsterItemCollide.$item.y;\r\n if (\r\n !this.gridster.checkCollisionTwoItems(\r\n gridsterItemCollide.$item,\r\n gridsterItem.$item\r\n ) &&\r\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\r\n ) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n this.push(gridsterItem, direction);\r\n return true;\r\n } else {\r\n gridsterItemCollide.$item.rows = backUpRows;\r\n }\r\n return false;\r\n }\r\n\r\n private tryEast(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const backUpX = gridsterItemCollide.$item.x;\r\n const backUpCols = gridsterItemCollide.$item.cols;\r\n gridsterItemCollide.$item.x =\r\n gridsterItem.$item.x + gridsterItem.$item.cols;\r\n gridsterItemCollide.$item.cols =\r\n backUpCols + backUpX - gridsterItemCollide.$item.x;\r\n if (\r\n !this.gridster.checkCollisionTwoItems(\r\n gridsterItemCollide.$item,\r\n gridsterItem.$item\r\n ) &&\r\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\r\n ) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n this.push(gridsterItem, direction);\r\n return true;\r\n } else {\r\n gridsterItemCollide.$item.x = backUpX;\r\n gridsterItemCollide.$item.cols = backUpCols;\r\n }\r\n return false;\r\n }\r\n\r\n private tryWest(\r\n gridsterItemCollide: GridsterItemComponentInterface,\r\n gridsterItem: GridsterItemComponentInterface,\r\n direction: string\r\n ): boolean {\r\n const backUpCols = gridsterItemCollide.$item.cols;\r\n gridsterItemCollide.$item.cols =\r\n gridsterItem.$item.x - gridsterItemCollide.$item.x;\r\n if (\r\n !this.gridster.checkCollisionTwoItems(\r\n gridsterItemCollide.$item,\r\n gridsterItem.$item\r\n ) &&\r\n !this.gridster.checkGridCollision(gridsterItemCollide.$item)\r\n ) {\r\n gridsterItemCollide.setSize();\r\n this.addToPushed(gridsterItemCollide);\r\n this.push(gridsterItem, direction);\r\n return true;\r\n } else {\r\n gridsterItemCollide.$item.cols = backUpCols;\r\n }\r\n return false;\r\n }\r\n\r\n private addToPushed(gridsterItem: GridsterItemComponentInterface): void {\r\n if (this.pushedItems.indexOf(gridsterItem) < 0) {\r\n this.pushedItems.push(gridsterItem);\r\n this.pushedItemsPath.push([\r\n {\r\n x: gridsterItem.item.x || 0,\r\n y: gridsterItem.item.y || 0,\r\n cols: gridsterItem.item.cols || 0,\r\n rows: gridsterItem.item.rows || 0\r\n },\r\n {\r\n x: gridsterItem.$item.x,\r\n y: gridsterItem.$item.y,\r\n cols: gridsterItem.$item.cols,\r\n rows: gridsterItem.$item.rows\r\n }\r\n ]);\r\n } else {\r\n const i = this.pushedItems.indexOf(gridsterItem);\r\n this.pushedItemsPath[i].push({\r\n x: gridsterItem.$item.x,\r\n y: gridsterItem.$item.y,\r\n cols: gridsterItem.$item.cols,\r\n rows: gridsterItem.$item.rows\r\n });\r\n }\r\n }\r\n\r\n private removeFromPushed(i: number): void {\r\n if (i > -1) {\r\n this.pushedItems.splice(i, 1);\r\n this.pushedItemsPath.splice(i, 1);\r\n }\r\n }\r\n\r\n private checkPushedItem(\r\n pushedItem: GridsterItemComponentInterface,\r\n i: number\r\n ): boolean {\r\n const path = this.pushedItemsPath[i];\r\n let j = path.length - 2;\r\n let lastPosition: { x: number; y: number; cols: number; rows: number };\r\n let x;\r\n let y;\r\n let cols;\r\n let rows;\r\n for (; j > -1; j--) {\r\n lastPosition = path[j];\r\n x = pushedItem.$item.x;\r\n y = pushedItem.$item.y;\r\n cols = pushedItem.$item.cols;\r\n rows = pushedItem.$item.rows;\r\n pushedItem.$item.x = lastPosition.x;\r\n pushedItem.$item.y = lastPosition.y;\r\n pushedItem.$item.cols = lastPosition.cols;\r\n pushedItem.$item.rows = lastPosition.rows;\r\n if (!this.gridster.findItemWithItem(pushedItem.$item)) {\r\n pushedItem.setSize();\r\n path.splice(j + 1, path.length - 1 - j);\r\n } else {\r\n pushedItem.$item.x = x;\r\n pushedItem.$item.y = y;\r\n pushedItem.$item.cols = cols;\r\n pushedItem.$item.rows = rows;\r\n }\r\n }\r\n if (path.length < 2) {\r\n this.removeFromPushed(i);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { NgZone } from '@angular/core';\r\nimport { GridsterComponentInterface } from './gridster.interface';\r\nimport { DirTypes } from './gridsterConfig.interface';\r\nimport { GridsterItemComponentInterface } from './gridsterItem.interface';\r\nimport { GridsterPush } from './gridsterPush.service';\r\nimport { GridsterPushResize } from './gridsterPushResize.service';\r\nimport { GridsterResizeEventType } from './gridsterResizeEventType.interface';\r\n\r\nimport { cancelScroll, scroll } from './gridsterScroll.service';\r\nimport { GridsterUtils } from './gridsterUtils.service';\r\n\r\nexport class GridsterResizable {\r\n gridsterItem: GridsterItemComponentInterface;\r\n gridster: GridsterComponentInterface;\r\n lastMouse: {\r\n clientX: number;\r\n clientY: number;\r\n };\r\n itemBackup: number[];\r\n resizeEventScrollType: GridsterResizeEventType;\r\n\r\n /**\r\n * The direction function may reference any of the `GridsterResizable` class methods, that are\r\n * responsible for gridster resize when the `dragmove` event is being handled. E.g. it may reference\r\n * the `handleNorth` method when the north handle is pressed and moved by a mouse.\r\n */\r\n private directionFunction:\r\n | ((event: Pick<MouseEvent, 'clientX' | 'clientY'>) => void)\r\n | null = null;\r\n\r\n resizeEnabled!: boolean;\r\n resizableHandles!: {\r\n s: boolean;\r\n e: boolean;\r\n n: boolean;\r\n w: boolean;\r\n se: boolean;\r\n ne: boolean;\r\n sw: boolean;\r\n nw: boolean;\r\n };\r\n mousemove!: () => void;\r\n mouseup!: () => void;\r\n mouseleave!: () => void;\r\n cancelOnBlur!: () => void;\r\n touchmove!: () => void;\r\n touchend!: () => void;\r\n touchcancel!: () => void;\r\n push!: GridsterPush;\r\n pushResize!: GridsterPushResize;\r\n minHeight!: number;\r\n minWidth!: number;\r\n offsetTop!: number;\r\n offsetLeft!: number;\r\n diffTop!: number;\r\n diffLeft!: number;\r\n diffRight!: number;\r\n diffBottom!: number;\r\n margin!: number;\r\n outerMarginTop!: number | null;\r\n outerMarginRight!: number | null;\r\n outerMarginBottom!: number | null;\r\n outerMarginLeft!: number | null;\r\n originalClientX!: number;\r\n originalClientY!: number;\r\n top!: number;\r\n left!: number;\r\n bottom!: number;\r\n right!: number;\r\n width!: number;\r\n height!: number;\r\n newPosition!: number;\r\n\r\n constructor(\r\n gridsterItem: GridsterItemComponentInterface,\r\n gridster: GridsterComponentInterface,\r\n private zone: NgZone\r\n ) {\r\n this.gridsterItem = gridsterItem;\r\n this.gridster = gridster;\r\n this.lastMouse = {\r\n clientX: 0,\r\n clientY: 0\r\n };\r\n this.itemBackup = [0, 0, 0, 0];\r\n this.resizeEventScrollType = {\r\n west: false,\r\n east: false,\r\n north: false,\r\n south: false\r\n };\r\n }\r\n\r\n destroy(): void {\r\n this.gridster?.previewStyle();\r\n this.gridster = this.gridsterItem = null!;\r\n }\r\n\r\n dragStart(e: MouseEvent): void {\r\n if (e.which && e.which !== 1) {\r\n return;\r\n }\r\n if (\r\n this.gridster.options.resizable &&\r\n this.gridster.options.resizable.start\r\n ) {\r\n this.gridster.options.resizable.start(\r\n this.gridsterItem.item,\r\n this.gridsterItem,\r\n e\r\n );\r\n }\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.mousemove = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mousemove',\r\n this.dragMove\r\n );\r\n this.touchmove = this.gridster.renderer.listen(\r\n this.gridster.el,\r\n 'touchmove',\r\n this.dragMove\r\n );\r\n });\r\n this.mouseup = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n this.dragStop\r\n );\r\n this.mouseleave = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseleave',\r\n this.dragStop\r\n );\r\n this.cancelOnBlur = this.gridsterItem.renderer.listen(\r\n 'window',\r\n 'blur',\r\n this.dragStop\r\n );\r\n this.touchend = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchend',\r\n this.dragStop\r\n );\r\n this.touchcancel = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchcancel',\r\n this.dragStop\r\n );\r\n\r\n this.gridsterItem.renderer.addClass(\r\n this.gridsterItem.el,\r\n 'gridster-item-resizing'\r\n );\r\n this.lastMouse.clientX = e.clientX;\r\n this.lastMouse.clientY = e.clientY;\r\n this.left = this.gridsterItem.left;\r\n this.top = this.gridsterItem.top;\r\n this.originalClientX = e.clientX;\r\n this.originalClientY = e.clientY;\r\n this.width = this.gridsterItem.width;\r\n this.height = this.gridsterItem.height;\r\n this.bottom = this.gridsterItem.top + this.gridsterItem.height;\r\n this.right = this.gridsterItem.left + this.gridsterItem.width;\r\n this.margin = this.gridster.$options.margin;\r\n this.outerMarginTop = this.gridster.$options.outerMarginTop;\r\n this.outerMarginRight = this.gridster.$options.outerMarginRight;\r\n this.outerMarginBottom = this.gridster.$options.outerMarginBottom;\r\n this.outerMarginLeft = this.gridster.$options.outerMarginLeft;\r\n this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\r\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\r\n this.diffLeft = e.clientX + this.offsetLeft - this.left;\r\n this.diffRight = e.clientX + this.offsetLeft - this.right;\r\n this.diffTop = e.clientY + this.offsetTop - this.top;\r\n this.diffBottom = e.clientY + this.offsetTop - this.bottom;\r\n this.minHeight =\r\n this.gridster.positionYToPixels(\r\n this.gridsterItem.$item.minItemRows ||\r\n this.gridster.$options.minItemRows\r\n ) - this.margin;\r\n this.minWidth =\r\n this.gridster.positionXToPixels(\r\n this.gridsterItem.$item.minItemCols ||\r\n this.gridster.$options.minItemCols\r\n ) - this.margin;\r\n this.gridster.movingItem = this.gridsterItem.$item;\r\n this.gridster.previewStyle();\r\n this.push = new GridsterPush(this.gridsterItem);\r\n this.pushResize = new GridsterPushResize(this.gridsterItem);\r\n this.gridster.dragInProgress = true;\r\n this.gridster.updateGrid();\r\n\r\n const { classList } = e.target as HTMLElement;\r\n\r\n if (classList.contains('handle-n')) {\r\n this.resizeEventScrollType.north = true;\r\n this.directionFunction = <any> this.handleNorth;\r\n } else if (classList.contains('handle-w')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleEast;\r\n } else {\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleWest;\r\n }\r\n } else if (classList.contains('handle-s')) {\r\n this.resizeEventScrollType.south = true;\r\n this.directionFunction =<any> this.handleSouth;\r\n } else if (classList.contains('handle-e')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleWest;\r\n } else {\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleEast;\r\n }\r\n } else if (classList.contains('handle-nw')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.north = true;\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleNorthEast;\r\n } else {\r\n this.resizeEventScrollType.north = true;\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleNorthWest;\r\n }\r\n } else if (classList.contains('handle-ne')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.north = true;\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleNorthWest;\r\n } else {\r\n this.resizeEventScrollType.north = true;\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleNorthEast;\r\n }\r\n } else if (classList.contains('handle-sw')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.south = true;\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleSouthEast;\r\n } else {\r\n this.resizeEventScrollType.south = true;\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleSouthWest;\r\n }\r\n } else if (classList.contains('handle-se')) {\r\n if (this.gridster.$options.dirType === DirTypes.RTL) {\r\n this.resizeEventScrollType.south = true;\r\n this.resizeEventScrollType.west = true;\r\n this.directionFunction =<any> this.handleSouthWest;\r\n } else {\r\n this.resizeEventScrollType.south = true;\r\n this.resizeEventScrollType.east = true;\r\n this.directionFunction =<any> this.handleSouthEast;\r\n }\r\n }\r\n }\r\n\r\n dragMove = (e: MouseEvent): void => {\r\n if (this.directionFunction === null) {\r\n throw new Error(\r\n 'The `directionFunction` has not been set before calling `dragMove`.'\r\n );\r\n }\r\n\r\n e.stopPropagation();\r\n e.preventDefault();\r\n GridsterUtils.checkTouchEvent(e);\r\n this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;\r\n this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;\r\n scroll(\r\n this.gridster,\r\n this.left,\r\n this.top,\r\n this.width,\r\n this.height,\r\n e,\r\n this.lastMouse,\r\n this.directionFunction,\r\n true,\r\n this.resizeEventScrollType\r\n );\r\n\r\n const scale = this.gridster.options.scale || 1;\r\n this.directionFunction({\r\n clientX:\r\n this.originalClientX + (e.clientX - this.originalClientX) / scale,\r\n clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale\r\n });\r\n\r\n this.lastMouse.clientX = e.clientX;\r\n this.lastMouse.clientY = e.clientY;\r\n this.zone.run(() => {\r\n this.gridster.updateGrid();\r\n });\r\n };\r\n\r\n dragStop = (e: MouseEvent): void => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n cancelScroll();\r\n this.mousemove();\r\n this.mouseup();\r\n this.mouseleave();\r\n this.cancelOnBlur();\r\n this.touchmove();\r\n this.touchend();\r\n this.touchcancel();\r\n this.gridster.dragInProgress = false;\r\n this.gridster.updateGrid();\r\n if (\r\n this.gridster.options.resizable &&\r\n this.gridster.options.resizable.stop\r\n ) {\r\n Promise.resolve(\r\n this.gridster.options.resizable.stop(\r\n this.gridsterItem.item,\r\n this.gridsterItem,\r\n e\r\n )\r\n ).then(this.makeResize, this.cancelResize);\r\n } else {\r\n this.makeResize();\r\n }\r\n setTimeout(() => {\r\n this.gridsterItem.renderer.removeClass(\r\n this.gridsterItem.el,\r\n 'gridster-item-resizing'\r\n );\r\n if (this.gridster) {\r\n this.gridster.movingItem = null;\r\n this.gridster.previewStyle();\r\n }\r\n });\r\n };\r\n\r\n cancelResize = (): void => {\r\n this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;\r\n this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;\r\n this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;\r\n this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;\r\n this.gridsterItem.setSize();\r\n this.push.restoreItems();\r\n this.pushResize.restoreItems();\r\n this.push.destroy();\r\n this.push = null!;\r\n this.pushResize.destroy();\r\n this.pushResize = null!;\r\n };\r\n\r\n makeResize = (): void => {\r\n this.gridsterItem.setSize();\r\n this.gridsterItem.checkItemChanges(\r\n this.gridsterItem.$item,\r\n this.gridsterItem.item\r\n );\r\n this.push.setPushedItems();\r\n this.pushResize.setPushedItems();\r\n this.push.destroy();\r\n this.push = null!;\r\n this.pushResize.destroy();\r\n this.pushResize = null!;\r\n };\r\n\r\n private handleNorth = (e: MouseEvent): void => {\r\n this.top = e.clientY + this.offsetTop - this.diffTop;\r\n this.height = this.bottom - this.top;\r\n if (this.minHeight > this.height) {\r\n this.height = this.minHeight;\r\n this.top = this.bottom - this.minHeight;\r\n } else if (this.gridster.options.enableBoundaryControl) {\r\n this.top = Math.max(0, this.top);\r\n this.height = this.bottom - this.top;\r\n }\r\n const marginTop = this.gridster.options.pushItems ? this.margin : 0;\r\n this.newPosition = this.gridster.pixelsToPositionY(\r\n this.top + marginTop,\r\n Math.floor\r\n );\r\n if (this.gridsterItem.$item.y !== this.newPosition) {\r\n this.itemBackup[1] = this.gridsterItem.$item.y;\r\n this.itemBackup[3] = this.gridsterItem.$item.rows;\r\n this.gridsterItem.$item.rows +=\r\n this.gridsterItem.$item.y - this.newPosition;\r\n this.gridsterItem.$item.y = this.newPosition;\r\n this.pushResize.pushItems(this.pushResize.fromSouth);\r\n this.push.pushItems(\r\n this.push.fromSouth,\r\n this.gridster.$options.disablePushOnResize\r\n );\r\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.y = this.itemBackup[1];\r\n this.gridsterItem.$item.rows = this.itemBackup[3];\r\n this.top = this.gridster.positionYToPixels(this.gridsterItem.$item.y);\r\n this.setItemTop(\r\n this.gridster.positionYToPixels(this.gridsterItem.$item.y)\r\n );\r\n this.setItemHeight(\r\n this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -\r\n this.margin\r\n );\r\n return;\r\n } else {\r\n this.gridster.previewStyle();\r\n }\r\n this.pushResize.checkPushBack();\r\n this.push.checkPushBack();\r\n }\r\n this.setItemTop(this.top);\r\n this.setItemHeight(this.height);\r\n };\r\n\r\n private handleWest = (e: MouseEvent): void => {\r\n const clientX =\r\n this.gridster.$options.dirType === DirTypes.RTL\r\n ? this.originalClientX + (this.originalClientX - e.clientX)\r\n : e.clientX;\r\n this.left = clientX + this.offsetLeft - this.diffLeft;\r\n\r\n this.width = this.right - this.left;\r\n if (this.minWidth > this.width) {\r\n this.width = this.minWidth;\r\n this.left = this.right - this.minWidth;\r\n } else if (this.gridster.options.enableBoundaryControl) {\r\n this.left = Math.max(0, this.left);\r\n this.width = this.right - this.left;\r\n }\r\n const marginLeft = this.gridster.options.pushItems ? this.margin : 0;\r\n this.newPosition = this.gridster.pixelsToPositionX(\r\n this.left + marginLeft,\r\n Math.floor\r\n );\r\n if (this.gridsterItem.$item.x !== this.newPosition) {\r\n this.itemBackup[0] = this.gridsterItem.$item.x;\r\n this.itemBackup[2] = this.gridsterItem.$item.cols;\r\n this.gridsterItem.$item.cols +=\r\n this.gridsterItem.$item.x - this.newPosition;\r\n this.gridsterItem.$item.x = this.newPosition;\r\n this.pushResize.pushItems(this.pushResize.fromEast);\r\n this.push.pushItems(\r\n this.push.fromEast,\r\n this.gridster.$options.disablePushOnResize\r\n );\r\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.x = this.itemBackup[0];\r\n this.gridsterItem.$item.cols = this.itemBackup[2];\r\n this.left = this.gridster.positionXToPixels(this.gridsterItem.$item.x);\r\n this.setItemLeft(\r\n this.gridster.positionXToPixels(this.gridsterItem.$item.x)\r\n );\r\n this.setItemWidth(\r\n this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -\r\n this.margin\r\n );\r\n return;\r\n } else {\r\n this.gridster.previewStyle();\r\n }\r\n this.pushResize.checkPushBack();\r\n this.push.checkPushBack();\r\n }\r\n this.setItemLeft(this.left);\r\n this.setItemWidth(this.width);\r\n };\r\n\r\n private handleSouth = (e: MouseEvent): void => {\r\n this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;\r\n if (this.minHeight > this.height) {\r\n this.height = this.minHeight;\r\n }\r\n this.bottom = this.top + this.height;\r\n if (this.gridster.options.enableBoundaryControl) {\r\n const margin = this.outerMarginBottom ?? this.margin;\r\n const box = this.gridster.el.getBoundingClientRect();\r\n this.bottom = Math.min(\r\n this.bottom,\r\n box.bottom - box.top - 2 * margin\r\n );\r\n this.height = this.bottom - this.top;\r\n }\r\n const marginBottom = this.gridster.options.pushItems ? 0 : this.margin;\r\n this.newPosition = this.gridster.pixelsToPositionY(\r\n this.bottom + marginBottom,\r\n Math.ceil\r\n );\r\n if (\r\n this.gridsterItem.$item.y + this.gridsterItem.$item.rows !==\r\n this.newPosition\r\n ) {\r\n this.itemBackup[3] = this.gridsterItem.$item.rows;\r\n this.gridsterItem.$item.rows =\r\n this.newPosition - this.gridsterItem.$item.y;\r\n this.pushResize.pushItems(this.pushResize.fromNorth);\r\n this.push.pushItems(\r\n this.push.fromNorth,\r\n this.gridster.$options.disablePushOnResize\r\n );\r\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.rows = this.itemBackup[3];\r\n this.setItemHeight(\r\n this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -\r\n this.margin\r\n );\r\n return;\r\n } else {\r\n this.gridster.previewStyle();\r\n }\r\n this.pushResize.checkPushBack();\r\n this.push.checkPushBack();\r\n }\r\n this.setItemHeight(this.height);\r\n };\r\n\r\n private handleEast = (e: MouseEvent): void => {\r\n const clientX =\r\n this.gridster.$options.dirType === DirTypes.RTL\r\n ? this.originalClientX + (this.originalClientX - e.clientX)\r\n : e.clientX;\r\n this.width = clientX + this.offsetLeft - this.diffRight - this.left;\r\n\r\n if (this.minWidth > this.width) {\r\n this.width = this.minWidth;\r\n }\r\n this.right = this.left + this.width;\r\n if (this.gridster.options.enableBoundaryControl) {\r\n const margin = this.outerMarginRight ?? this.margin;\r\n const box = this.gridster.el.getBoundingClientRect();\r\n this.right = Math.min(this.right, box.right - box.left - 2 * margin);\r\n this.width = this.right - this.left;\r\n }\r\n const marginRight = this.gridster.options.pushItems ? 0 : this.margin;\r\n this.newPosition = this.gridster.pixelsToPositionX(\r\n this.right + marginRight,\r\n Math.ceil\r\n );\r\n if (\r\n this.gridsterItem.$item.x + this.gridsterItem.$item.cols !==\r\n this.newPosition\r\n ) {\r\n this.itemBackup[2] = this.gridsterItem.$item.cols;\r\n this.gridsterItem.$item.cols =\r\n this.newPosition - this.gridsterItem.$item.x;\r\n this.pushResize.pushItems(this.pushResize.fromWest);\r\n this.push.pushItems(\r\n this.push.fromWest,\r\n this.gridster.$options.disablePushOnResize\r\n );\r\n if (this.gridster.checkCollision(this.gridsterItem.$item)) {\r\n this.gridsterItem.$item.cols = this.itemBackup[2];\r\n this.setItemWidth(\r\n this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -\r\n this.margin\r\n );\r\n return;\r\n } else {\r\n this.gridster.previewStyle();\r\n }\r\n this.pushResize.checkPushBack();\r\n this.push.checkPushBack();\r\n }\r\n this.setItemWidth(this.width);\r\n };\r\n\r\n private handleNorthWest = (e: MouseEvent): void => {\r\n this.handleNorth(e);\r\n this.handleWest(e);\r\n };\r\n\r\n private handleNorthEast = (e: MouseEvent): void => {\r\n this.handleNorth(e);\r\n this.handleEast(e);\r\n };\r\n\r\n private handleSouthWest = (e: MouseEvent): void => {\r\n this.handleSouth(e);\r\n this.handleWest(e);\r\n };\r\n\r\n private handleSouthEast = (e: MouseEvent): void => {\r\n this.handleSouth(e);\r\n this.handleEast(e);\r\n };\r\n\r\n toggle(): void {\r\n this.resizeEnabled = this.gridsterItem.canBeResized();\r\n this.resizableHandles = this.gridsterItem.getResizableHandles();\r\n }\r\n\r\n dragStartDelay(e: MouseEvent | TouchEvent): void {\r\n GridsterUtils.checkTouchEvent(e);\r\n\r\n if (!this.gridster.$options.resizable.delayStart) {\r\n this.dragStart(e as MouseEvent);\r\n return;\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n this.dragStart(e as MouseEvent);\r\n cancelDrag();\r\n }, this.gridster.$options.resizable.delayStart);\r\n\r\n const {\r\n cancelMouse,\r\n cancelMouseLeave,\r\n cancelOnBlur,\r\n cancelTouchMove,\r\n cancelTouchEnd,\r\n cancelTouchCancel\r\n } = this.zone.runOutsideAngular(() => {\r\n // Note: all of these events are being added within the `<root>` zone since they all\r\n // don't do any view updates and don't require Angular running change detection.\r\n // All event listeners call `cancelDrag` once the event is dispatched, the `cancelDrag`\r\n // is responsible only for removing event listeners.\r\n\r\n const cancelMouse = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseup',\r\n cancelDrag\r\n );\r\n const cancelMouseLeave = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'mouseleave',\r\n cancelDrag\r\n );\r\n const cancelOnBlur = this.gridsterItem.renderer.listen(\r\n 'window',\r\n 'blur',\r\n cancelDrag\r\n );\r\n const cancelTouchMove = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchmove',\r\n cancelMove\r\n );\r\n const cancelTouchEnd = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchend',\r\n cancelDrag\r\n );\r\n const cancelTouchCancel = this.gridsterItem.renderer.listen(\r\n 'document',\r\n 'touchcancel',\r\n cancelDrag\r\n );\r\n return {\r\n cancelMouse,\r\n cancelMouseLeave,\r\n cancelOnBlur,\r\n cancelTouchMove,\r\n cancelTouchEnd,\r\n cancelTouchCancel\r\n };\r\n });\r\n\r\n function cancelMove(eventMove: MouseEvent): void {\r\n GridsterUtils.checkTouchEvent(eventMove);\r\n if (\r\n Math.abs(eventMove.clientX - (e as MouseEvent).clientX) > 9 ||\r\n Math.abs(eventMove.clientY - (e as MouseEvent).clientY) > 9\r\n ) {\r\n cancelDrag();\r\n }\r\n }\r\n\r\n function cancelDrag(): void {\r\n clearTimeout(timeout);\r\n cancelOnBlur();\r\n cancelMouse();\r\n cancelMouseLeave();\r\n cancelTouchMove();\r\n cancelTouchEnd();\r\n cancelTouchCancel();\r\n }\r\n }\r\n\r\n setItemTop(top: number): void {\r\n this.gridster.gridRenderer.setCellPosition(\r\n this.gridsterItem.renderer,\r\n this.gridsterItem.el,\r\n this.left,\r\n top\r\n );\r\n }\r\n\r\n setItemLeft(left: number): void {\r\n this.gridster.gridRenderer.setCellPosition(\r\n this.gridsterItem.renderer,\r\n this.gridsterItem.el,\r\n left,\r\n this.top\r\n );\r\n }\r\n\r\n setItemHeight(height: number): void {\r\n this.gridsterItem.renderer.setStyle(\r\n this.gridsterItem.el,\r\n 'height',\r\n height + 'px'\r\n );\r\n }\r\n\r\n setItemWidth(width: number): void {\r\n this.gridsterItem.renderer.setStyle(\r\n this.gridsterItem.el,\r\n 'width',\r\n width + 'px'\r\n );\r\n }\r\n}\r\n","import { NgIf } from '@angular/common';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { GridsterComponent } from './gridster.component';\r\n\r\nimport { GridsterDraggable } from './gridsterDraggable.service';\r\nimport {\r\n GridsterItem,\r\n GridsterItemComponentInterface\r\n} from './gridsterItem.interface';\r\nimport { GridsterResizable } from './gridsterResizable.service';\r\nimport { GridsterUtils } from './gridsterUtils.service';\r\n\r\n\r\n@Component({\r\n selector: 'gridster-item',\r\n templateUrl: './gridsterItem.html',\r\n styleUrls: ['./gridsterItem.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf]\r\n})\r\nexport class GridsterItemComponent\r\n implements OnInit, OnDestroy, OnChanges, GridsterItemComponentInterface\r\n{\r\n @Input() item!: GridsterItem;\r\n @Output() itemInit = new EventEmitter<{\r\n item: GridsterItem;\r\n itemComponent: GridsterItemComponentInterface;\r\n }>();\r\n @Output() itemChange = new EventEmitter<{\r\n item: GridsterItem;\r\n itemComponent: GridsterItemComponentInterface;\r\n }>();\r\n @Output() itemResize = new EventEmitter<{\r\n item: GridsterItem;\r\n itemComponent: GridsterItemComponentInterface;\r\n }>();\r\n $item: GridsterItem;\r\n el: HTMLElement;\r\n gridster: GridsterComponent;\r\n top!: number;\r\n left!: number;\r\n width!: number;\r\n height!: number;\r\n drag: GridsterDraggable;\r\n resize: GridsterResizable;\r\n notPlaced!: boolean;\r\n init!: boolean;\r\n\r\n @HostBinding('style.z-index')\r\n get zIndex(): number {\r\n return this.getLayerIndex() + this.gridster.$options.baseLayerIndex;\r\n }\r\n\r\n constructor(\r\n @Inject(ElementRef) el: ElementRef,\r\n gridster: GridsterComponent,\r\n @Inject(Renderer2) public renderer: Renderer2,\r\n @Inject(NgZone) private zone: NgZone\r\n ) {\r\n this.el = el.nativeElement;\r\n this.$item = {\r\n cols: -1,\r\n rows: -1,\r\n x: -1,\r\n y: -1\r\n };\r\n this.gridster = gridster;\r\n this.drag = new GridsterDraggable(this, gridster, this.zone);\r\n this.resize = new GridsterResizable(this, gridster, this.zone);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gridster.addItem(this);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['item']) {\r\n this.updateOptions();\r\n\r\n if (!this.init) {\r\n this.gridster.calculateLayout$.next();\r\n }\r\n }\r\n if (changes['item'] && changes['item'].previousValue) {\r\n this.setSize();\r\n }\r\n }\r\n\r\n updateOptions(): void {\r\n this.$item = GridsterUtils.merge(this.$item, this.item, {\r\n cols: undefined,\r\n rows: undefined,\r\n x: undefined,\r\n y: undefined,\r\n layerIndex: undefined,\r\n dragEnabled: undefined,\r\n resizeEnabled: undefined,\r\n compactEnabled: undefined,\r\n maxItemRows: undefined,\r\n minItemRows: undefined,\r\n maxItemCols: undefined,\r\n minItemCols: undefined,\r\n maxItemArea: undefined,\r\n minItemArea: undefined,\r\n resizableHandles: {\r\n s: undefined,\r\n e: undefined,\r\n n: undefined,\r\n w: undefined,\r\n se: undefined,\r\n ne: undefined,\r\n sw: undefined,\r\n nw: undefined\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.gridster.removeItem(this);\r\n this.gridster.movingItem = null;\r\n this.drag.destroy();\r\n this.resize.destroy();\r\n this.gridster = this.drag = this.resize = null!;\r\n }\r\n\r\n setSize(): void {\r\n this.renderer.setStyle(this.el, 'display', this.notPlaced ? '' : 'block');\r\n this.gridster.gridRenderer.updateItem(this.el, this.$item, this.renderer);\r\n this.updateItemSize();\r\n }\r\n\r\n updateItemSize(): void {\r\n const top = this.$item.y * this.gridster.curRowHeight;\r\n const left = this.$item.x * this.gridster.curColWidth;\r\n const width =\r\n this.$item.cols * this.gridster.curColWidth -\r\n this.gridster.$options.margin;\r\n const height =\r\n this.$item.rows * this.gridster.curRowHeight -\r\n this.gridster.$options.margin;\r\n\r\n this.top = top;\r\n this.left = left;\r\n\r\n if (!this.init && width > 0 && height > 0) {\r\n this.init = true;\r\n if (this.item.initCallback) {\r\n this.item.initCallback(this.item, this);\r\n }\r\n if (this.gridster.options.itemInitCallback) {\r\n this.item.curRowHeight = this.gridster.curRowHeight;\r\n this.gridster.options.itemInitCallback(this.item, this);\r\n }\r\n this.itemInit.next({ item: this.item, itemComponent: this });\r\n if (this.gridster.$options.scrollToNewItems) {\r\n this.el.scrollIntoView(false);\r\n }\r\n }\r\n if (width !== this.width || height !== this.height) {\r\n this.width = width;\r\n this.height = height;\r\n if (this.gridster.options.itemResizeCallback) {\r\n this.gridster.options.itemResizeCallback(this.item, this);\r\n }\r\n this.itemResize.next({ item: this.item, itemComponent: this });\r\n }\r\n }\r\n\r\n itemChanged(): void {\r\n if (this.gridster.options.itemChangeCallback) {\r\n this.item.curRowHeight = this.gridster.curRowHeight;\r\n this.gridster.options.itemChangeCallback(this.item, this);\r\n }\r\n this.itemChange.next({ item: this.item, itemComponent: this });\r\n }\r\n\r\n checkItemChanges(newValue: GridsterItem, oldValue: GridsterItem): void {\r\n if (\r\n newValue.rows === oldValue.rows &&\r\n newValue.cols === oldValue.cols &&\r\n newValue.x === oldValue.x &&\r\n newValue.y === oldValue.y\r\n ) {\r\n return;\r\n }\r\n if (this.gridster.checkCollision(this.$item)) {\r\n this.$item.x = oldValue.x || 0;\r\n this.$item.y = oldValue.y || 0;\r\n this.$item.cols = oldValue.cols || 1;\r\n this.$item.rows = oldValue.rows || 1;\r\n this.setSize();\r\n } else {\r\n this.item.cols = this.$item.cols;\r\n this.item.rows = this.$item.rows;\r\n this.item.x = this.$item.x;\r\n this.item.y = this.$item.y;\r\n this.gridster.calculateLayout$.next();\r\n this.itemChanged();\r\n }\r\n }\r\n\r\n canBeDragged(): boolean {\r\n const gridDragEnabled = this.gridster.$options.draggable.enabled;\r\n const itemDragEnabled =\r\n this.$item.dragEnabled === undefined\r\n ? gridDragEnabled\r\n : this.$item.dragEnabled;\r\n return !this.gridster.mobile && gridDragEnabled && itemDragEnabled;\r\n }\r\n\r\n canBeResized(): boolean {\r\n const gridResizable = this.gridster.$options.resizable.enabled;\r\n const itemResizable =\r\n this.$item.resizeEnabled === undefined\r\n ? gridResizable\r\n : this.$item.resizeEnabled;\r\n return !this.gridster.mobile && gridResizable && itemResizable;\r\n }\r\n\r\n getResizableHandles() {\r\n const gridResizableHandles = this.gridster.$options.resizable.handles;\r\n const itemResizableHandles = this.$item.resizableHandles;\r\n // use grid settings if no settings are provided for the item.\r\n if (itemResizableHandles === undefined) {\r\n return gridResizableHandles;\r\n }\r\n // else merge the settings\r\n return {\r\n ...gridResizableHandles,\r\n ...itemResizableHandles\r\n };\r\n }\r\n\r\n bringToFront(offset: number): void {\r\n if (offset && offset <= 0) {\r\n return;\r\n }\r\n const layerIndex = this.getLayerIndex();\r\n const topIndex = this.gridster.$options.maxLayerIndex;\r\n if (layerIndex < topIndex) {\r\n const targetIndex = offset ? layerIndex + offset : topIndex;\r\n this.item.layerIndex = this.$item.layerIndex =\r\n targetIndex > topIndex ? topIndex : targetIndex;\r\n }\r\n }\r\n\r\n sendToBack(offset: number): void {\r\n if (offset && offset <= 0) {\r\n return;\r\n }\r\n const layerIndex = this.getLayerIndex();\r\n if (layerIndex > 0) {\r\n const targetIndex = offset ? layerIndex - offset : 0;\r\n this.item.layerIndex = this.$item.layerIndex =\r\n targetIndex < 0 ? 0 : targetIndex;\r\n }\r\n }\r\n\r\n private getLayerIndex(): number {\r\n if (this.item.layerIndex !== undefined) {\r\n return this.item.layerIndex;\r\n }\r\n if (this.gridster.$options.defaultLayerIndex !== undefined) {\r\n return this.gridster.$options.defaultLayerIndex;\r\n }\r\n return 0;\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.s && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-s\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.e && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-e\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.n && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-n\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.w && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-w\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.se && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-se\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.ne && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-ne\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.sw && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-sw\"\r\n></div>\r\n<div\r\n (mousedown)=\"resize.dragStartDelay($event)\"\r\n (touchstart)=\"resize.dragStartDelay($event)\"\r\n *ngIf=\"resize.resizableHandles?.nw && resize.resizeEnabled\"\r\n class=\"gridster-item-resizable-handler handle-nw\"\r\n></div>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { DomService } from '@schneideress/ra-common';\r\ndeclare var componentRef: any;\r\n@Component({\r\n selector: 'ra-lock-tooltip',\r\n templateUrl: './lock.tooltip.component.html',\r\n styleUrls: ['./lock.tooltip.component.css'],\r\n standalone: false\r\n})\r\nexport class LockTooltip implements OnInit {\r\n\r\n public element: any;\r\n public title: any;\r\n public data: any;\r\n public footer: any;\r\n public template: any;\r\n\r\n public containerLeft: any;\r\n public containerTop: any;\r\n public containerBottom: any;\r\n constructor(private domService: DomService) {\r\n }\r\n ngOnInit() {\r\n if (this.element) {\r\n this.setPopupPosition();\r\n }\r\n }\r\n private setPopupPosition() {\r\n let rect = this.element.getBoundingClientRect();\r\n if ((rect.left + 250) > window.innerWidth) {\r\n this.containerLeft = (rect.left - ((rect.left + 270)-window.innerWidth)) + 'px';\r\n }\r\n else {\r\n this.containerLeft = rect.left + 'px';\r\n }\r\n if (rect.bottom + 100 < window.innerHeight) {\r\n this.containerTop = (rect.bottom) + 'px';\r\n this.containerBottom = null;\r\n }\r\n else {\r\n this.containerTop = null;\r\n this.containerBottom = (window.innerHeight - rect.top) + 'px';\r\n }\r\n }\r\n\r\n public removeMe(comp: any) {\r\n setTimeout(() => {\r\n this.domService.removeComponent(comp);\r\n });\r\n }\r\n}","<div class=\"lock-popup-content light widget-config-item\"\r\n [ngStyle]=\"{'top': containerTop,'bottom':containerBottom,'position':'fixed','left':containerLeft,'z-index': '9999','width':'250px','min-height':'fit-content'}\">\r\n <div *ngIf=\"data && !template\">\r\n <label style=\"color: #D9F0FA;\">\r\n {{title}}:\r\n </label>\r\n <div style=\"color: white;\">\r\n <label class=\"bold\" style=\"margin-bottom: 0px;width: 100%;\" *ngFor=\"let item of data\">\r\n {{item}}\r\n </label>\r\n </div>\r\n <hr style=\"background-color: white;\">\r\n <div style=\"color: #D9F0FA;\">\r\n <label>{{footer}}</label>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!data && template\">\r\n <ng-container *ngTemplateOutlet=\"template\">\r\n </ng-container>\r\n </div>\r\n</div>","import { Component, OnInit, Input, ViewChild, ElementRef, EventEmitter, Output, OnChanges, SimpleChanges, AfterViewInit, SimpleChange, OnDestroy, NgZone, Renderer2, TemplateRef, ViewContainerRef, ChangeDetectorRef } from '@angular/core';\r\nimport { RaDashboardService } from './../ra.dashboard.service';\r\nimport { RADashboardEventBus } from '../ra.dashbard.event.bus';\r\nimport { RAEvent, RAEventKey } from '../ra.event.enum';\r\nimport { IAppConfig, IWidgetConfigFilter, IWidgetInfo, RADownloadType, RADownloadOption, RaWidgetlockStatus, WidgetViewState, IconfigChanges, IBulkAction, IDashboardInfo } from '@schneideress/widgetframework';\r\nimport { NgxUiLoaderService } from 'ngx-ui-loader';\r\nimport { NotifierService } from 'angular-notifier';\r\nimport { RATranslateService, RAPermissionService, DomService } from '@schneideress/ra-common';\r\nimport { LockTooltip } from './lock-tooltip/lock.tooltip.component'\r\nimport { loadRemoteModule } from '@angular-architects/module-federation';\r\n\r\ndeclare var jQuery: any;\r\ndeclare var window: any;\r\n\r\n@Component({\r\n selector: 'ra-widget-container',\r\n templateUrl: './ra.widget.container.component.html',\r\n standalone: false\r\n})\r\nexport class RAWidgetContainer implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n\r\n public showPanel: boolean = true;\r\n private isWidgetLoaded: boolean = false;\r\n private widgetElement: any;\r\n private configChanged: any;\r\n public widgetHeight!: number;\r\n public lockClass: string = \"unlocked\";\r\n public lockStatus: RaWidgetlockStatus = RaWidgetlockStatus.Unlocked;\r\n public isDownloadIconVisible: boolean = false;\r\n public isChartDownloadVisible: boolean = false;\r\n public isGridDownloadVisible: boolean = false;\r\n public downloadIconType!: RADownloadType;\r\n public enableTitleLine: boolean = false;\r\n public isGlobalFilterApplied: boolean = false;\r\n public toolTipValue: string = ' ';\r\n public toolTipWidth: string = '0px';\r\n public lockDetails: any;\r\n public hideLock:boolean=false;\r\n public lockTemplateInfo!: TemplateRef<any>;\r\n public editToolTipValue: string = ' ';\r\n public copyToolTipValue: string = ' ';\r\n public moveToolTipValue: string = ' ';\r\n public excelToolTipValue: string = ' ';\r\n public deleteToolTipValue: string = ' ';\r\n public editText: string = '';\r\n public copyText: string = '';\r\n public moveText: string = '';\r\n public excelText: string = '';\r\n public deleteText: string = '';\r\n public editToolTipWidth: string = '0px';\r\n public copyToolTipWidth: string = '0px';\r\n public moveToolTipWidth: string = '0px';\r\n public excelToolTipWidth: string = '0px';\r\n public deleteToolTipWidth: string = '0px';\r\n public widgetSettings: any;\r\n public noPadding: boolean = false;\r\n public isMouseHover: boolean = false;\r\n public showSettingsLink: boolean = true;\r\n public isKpiView: boolean = false;\r\n public showExcell: boolean = true;\r\n public hideTitle: boolean = false;\r\n public inapplicableFilters: any = [];\r\n public popupInstance!: LockTooltip;\r\n public currentComponent: any;\r\n\r\n public lockIconTitle: any;\r\n public lockIconFooter: any;\r\n public inapplicableIconTitle: any;\r\n public inapplicableIconFooter: any;\r\n public isCustomElement: any = false;\r\n public showOnlyDropdown: boolean = false;\r\n private trendsReportDownloadRequestSub: any;\r\n\r\n @ViewChild('ctlWidget', { static: false }) ctlWidget!: ElementRef;\r\n @ViewChild('ctlWidgetModule', { read: ViewContainerRef, static: false }) ctlWidgetModule!: ViewContainerRef;\r\n @ViewChild('widgetDropdown', { static: false }) widgetDropdown!: ElementRef;\r\n @ViewChild('searchInput', { static: false }) searchInput!: ElementRef;\r\n @ViewChild('wcWrapper', { static: false }) wcWrapper!: ElementRef;\r\n @ViewChild('banPopupDiv', { static: false }) banPopupDiv!: ElementRef;\r\n @ViewChild('lockPopupDiv', { static: false }) lockPopupDiv!: ElementRef;\r\n\r\n @Input('widget-instance-id') widgetInstanceId!: number;\r\n @Input('global-filter') globalFilter: any;\r\n @Input('dashboard-info') dashboardInfo!: IDashboardInfo;\r\n @Input('data') data: any;\r\n @Input('event-bus') raDashboardEventBus!: RADashboardEventBus;\r\n @Input('app-config') appConfig!: IAppConfig;\r\n @Input('widget-width') width!: number;\r\n @Input('widget-height') height!: number;\r\n @Input('grid-cell-height') gridCellHeight!: number;\r\n @Input('bulk-action-data') bulkActionData!: IBulkAction;\r\n @Input() canLoadData: boolean = false;\r\n\r\n @Output() widgetDeleted = new EventEmitter<string>();\r\n @Output() updateAppliedFilters = new EventEmitter();\r\n public lockTitle!: string;\r\n @Output() dataLoaded = new EventEmitter();\r\n @Output() widgetLoaded = new EventEmitter();\r\n\r\n public isWidgetStateApplicable: boolean = false;\r\n public isWidgetCanMove: boolean = false;\r\n public widgetEmptyState: string = '';\r\n public domResized!: boolean;\r\n public lockVisible: boolean = false;\r\n public lockedFields: any;\r\n public detailPageUrl!: string;\r\n public baseUrl!: string;\r\n public isWidgetMgmnt: boolean = false;\r\n public WidgetDisplayName!: string;\r\n public enableTitleLineActual: boolean = false;\r\n public widgetElementHandler: any;\r\n @Input('dom-resized')\r\n set setResized(resized: boolean) {\r\n this.invokeWidgetResizedEvent();\r\n }\r\n\r\n constructor(private dashboardService: RaDashboardService,\r\n private ngxService: NgxUiLoaderService,\r\n private translateService: RATranslateService,\r\n private ngZone: NgZone,\r\n private notifier: NotifierService,\r\n private renderer: Renderer2,\r\n private cdr: ChangeDetectorRef,\r\n private raPermissionService: RAPermissionService,\r\n private domService: DomService) {\r\n this.renderer.listen('window', 'click', (e: any) => {\r\n if (e.target.className) {\r\n if (e.target.className != 'fal fa-ellipsis-v widget-menu-ellipse') {\r\n this.removeMenu();\r\n }\r\n }\r\n else {\r\n this.removeMenu();\r\n }\r\n });\r\n }\r\n ngOnInit() {\r\n this.WidgetDisplayName = this.getwidgetTitleTranslation(this.data.widgetInfo.widgetTitle);\r\n this.lockIconTitle = this.translateService.translate('Common.lockedfields');\r\n this.lockIconFooter = this.translateService.translate('Common.lockedfieldseditinfo');\r\n this.inapplicableIconTitle = this.translateService.translate('Common.InapplicableFilters');\r\n this.inapplicableIconFooter = this.translateService.translate('Common.InapplicableFiltersDesc');\r\n if (this.dashboardInfo.templateName == 'Emission Report' || this.dashboardInfo.templateName == 'CostUsage Report' || this.dashboardInfo.templateName == 'Savings Report' || this.dashboardInfo.templateName == 'Invoice Checklist') {\r\n this.hideTitle = true;\r\n this.showOnlyDropdown = true;\r\n }\r\n if (this.raDashboardEventBus && this.hideEllipses) {\r\n this.trendsReportDownloadRequestSub = this.raDashboardEventBus.subscribe(RAEvent.TrendsReportDownloadRequest).subscribe((payload: { widgetInstanceId: number; format: string }) => {\r\n if (payload && payload.widgetInstanceId === this.data?.widgetInfo?.widgetInstanceId) {\r\n this.ngZone.run(() => this.downloadIconClicked(payload.format));\r\n }\r\n });\r\n }\r\n }\r\n get widgetViewState() { return WidgetViewState; }\r\n\r\n /** True when Widget_Config has hideEllipses: true (widget shows inline actions instead of ellipsis menu). */\r\n get hideEllipses(): boolean {\r\n return this.data?.widgetInfo?.templateWidgetSettings?.hideEllipses === true;\r\n }\r\n\r\n /** True when the inline Download icon should be shown (hidden when Statistics tab is selected). */\r\n get showInlineDownloadIcon(): boolean {\r\n return this.hideEllipses\r\n && this.widgetElement?.selectedTabIndex !== 1\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.isWidgetMgmnt = this.raPermissionService.hasPermission('ra.widgetmanagement');\r\n if (changes['raDashboardEventBus'] && changes['raDashboardEventBus'].currentValue != changes['raDashboardEventBus'].previousValue) {\r\n this.configChanged = this.raDashboardEventBus.subscribeWithKey(RAEvent.ConfigChanged, RAEventKey.WidgetInstanceId, this.data.widgetInfo.widgetInstanceId.toString()).subscribe((e) => {\r\n this.ngZone.run(() => {\r\n this.configChangeEventHandler(e);\r\n });\r\n\r\n });\r\n }\r\n if (this.widgetElement) {\r\n if (changes['bulkActionData'] && changes['bulkActionData'].currentValue != changes['bulkActionData'].previousValue) {\r\n if (typeof this.widgetElement.bulkActionClicked === \"function\") {\r\n this.widgetElement.bulkActionClicked(this.bulkActionData);\r\n }\r\n }\r\n if (changes['globalFilter'] && changes['globalFilter'].currentValue != changes['globalFilter'].previousValue) {\r\n if (!this.dashboardInfo.curatedFilters) {\r\n let filterObj = this.getParsedConfig(this.globalFilter);\r\n if (filterObj.WidgetInstanceId) {\r\n if (this.data.widgetInfo.widgetInstanceId != filterObj.WidgetInstanceId)\r\n this.refreshWidget(this.data.widgetInfo);\r\n }\r\n else {\r\n this.refreshWidget(this.data.widgetInfo);\r\n }\r\n }\r\n }\r\n\r\n if (changes['width'] && changes['width'].currentValue != changes['width'].previousValue ||\r\n (changes['height'] && changes['height'].currentValue != changes['height'].previousValue)) {\r\n this.invokeWidgetResizedEvent();\r\n }\r\n }\r\n if (changes['canLoadData'] && (changes['canLoadData'].currentValue != changes['canLoadData'].previousValue)) {\r\n if (this.canLoadData)\r\n this.loadWidget(this.data.widgetInfo);\r\n }\r\n }\r\n invokeWidgetResizedEvent() {\r\n if (this.widgetElement) {\r\n if (typeof this.widgetElement?.widgetResized === \"function\") {\r\n let size: any = {};\r\n size.height = this.height;\r\n size.width = this.width;\r\n size.cellHeight = this.gridCellHeight;\r\n this.widgetElement.widgetResized(size);\r\n if (this.height == 1 || this.width == 1)\r\n this.isKpiView = true\r\n else\r\n this.isKpiView = false;\r\n }\r\n }\r\n }\r\n\r\n mouseHover(isHover = true) {\r\n this.isMouseHover = isHover;\r\n\r\n if (this.widgetElement) {\r\n if (typeof this.widgetElement.hoverStatus === \"function\") {\r\n this.widgetElement.hoverStatus(isHover);\r\n }\r\n else {\r\n console.warn('widget framework outdated, please update to version 0.0.96');\r\n }\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.widgetLoaded.emit(this.wcWrapper.nativeElement);\r\n },100);\r\n\r\n document.addEventListener(\"scroll\", () => {\r\n this.removeMenu();\r\n this.closePopup();\r\n })\r\n\r\n setTimeout(() => {\r\n let item = jQuery(this.wcWrapper.nativeElement).closest('gridster-item');\r\n item.bind('mouseenter', () => {\r\n window.gridsterItemEnter = true;\r\n });\r\n\r\n item.bind('mouseleave', () => {\r\n window.gridsterItemEnter = false;\r\n setTimeout(() => {\r\n if (!window.mouseOverWidgetMenu) {\r\n this.removeMenu();\r\n }\r\n });\r\n });\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.configChanged)\r\n this.configChanged.unsubscribe();\r\n if (this.trendsReportDownloadRequestSub)\r\n this.trendsReportDownloadRequestSub.unsubscribe();\r\n if (this.widgetElementHandler && this.data && this.data.widgetInfo && this.data.widgetInfo.widgetInstanceId) {\r\n document.body.removeEventListener('widgetinitiated' + this.data.widgetInfo.widgetInstanceId, this.widgetElementHandler);\r\n }\r\n }\r\n\r\n\r\n /** To Edit current widget configuration*/\r\n public editWidget() {\r\n let widgetConfigFilter: IWidgetConfigFilter;\r\n if (this.widgetElement && typeof (this.widgetElement.getConfigFilter) == 'function') {\r\n let configData = this.widgetElement.getConfigFilter();\r\n if (configData) {\r\n widgetConfigFilter = configData;\r\n }\r\n }\r\n if (widgetConfigFilter!) {\r\n this.raDashboardEventBus.publish(RAEvent.WidgetEditClicked, widgetConfigFilter);\r\n }\r\n else {\r\n let widgetConfigFilterData = this.generateConfigFilter(false);\r\n this.raDashboardEventBus.publish(RAEvent.WidgetEditClicked, widgetConfigFilterData);\r\n }\r\n }\r\n\r\n /** To Delete current widget from DOM*/\r\n public deleteWidget() {\r\n let widgetContainerContext = this;\r\n widgetContainerContext.ngxService.start();\r\n widgetContainerContext.dashboardService.deleteWidget(this.data.widgetInfo, this.appConfig).subscribe(status => {\r\n widgetContainerContext.ngxService.stop();\r\n if (status) {\r\n widgetContainerContext.widgetDeleted.emit(this.data.widgetInfo.widgetInstanceId);\r\n this.setInapplicableFilters(undefined, this.data.widgetInfo.widgetInstanceId);\r\n }\r\n else {\r\n widgetContainerContext.notifier.notify('error', \" \" + this.translateService.translate('Dashboard.FailedToRemoveWidget') + \" (\" + this.translateService.translate('Common.' + this.data.widgetInfo.widgetTitle, true) + \")!\");\r\n\r\n }\r\n });\r\n }\r\n\r\n /** To Move or change position if current widget container*/\r\n public moveWidget() {\r\n this.raDashboardEventBus.publish(RAEvent.MoveWidget, this.data.widgetInfo);\r\n this.setInapplicableFilters(undefined, this.data.widgetInfo.widgetInstanceId);\r\n // this.dashboardService.moveWidget(widgetInfo);\r\n }\r\n\r\n /** To Copy Current widget with same configuration*/\r\n public copyWidget() {\r\n this.raDashboardEventBus.publish(RAEvent.CopyWidget, this.data.widgetInfo);\r\n //this.dashboardService.copyWidget(widgetInfo);\r\n }\r\n\r\n public visitPage() {\r\n this.baseUrl = this.getHostUrl();\r\n let url = this.baseUrl + this.detailPageUrl;\r\n if (this.data.widgetInfo && this.data.widgetInfo.widgetSettings) {\r\n this.widgetSettings = this.getParsedConfig(this.data.widgetInfo.widgetSettings);\r\n if (this.widgetSettings.customPageParams || this.widgetSettings.customPageURL) {\r\n let params = this.widgetElement.getPageParamsClicked();\r\n if (params) {\r\n if (this.data.widgetInfo.widgetType == 'AV Widget' || this.widgetSettings.customPageURL)\r\n url = url + params;\r\n else\r\n url = url + '?' + params;\r\n }\r\n }\r\n }\r\n window.open(url, '_blank');\r\n }\r\n\r\n public getHostUrl() {\r\n return window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\r\n }\r\n\r\n public configChangeEventHandler(widgetInfo: any) {\r\n this.data.widgetInfo = widgetInfo;\r\n if (widgetInfo.templateSettings) {\r\n this.data.widgetInfo.templateWidgetSettings = JSON.parse(widgetInfo.templateSettings);\r\n }\r\n if (this.gridCellHeight > 0) {\r\n this.data.widgetInfo.rowHeight = this.gridCellHeight;\r\n }\r\n if (this.widgetElement && typeof (this.widgetElement.setConfigFilter) == 'function') {\r\n this.widgetElement.setConfigFilter(this.generateConfigFilter(true));\r\n }\r\n else {\r\n console.warn('widget framework outdated, please update to version 0.0.98');\r\n }\r\n this.refreshWidget(this.data.widgetInfo, true);\r\n }\r\n\r\n\r\n private generateConfigFilter(configChanged: boolean = false) {\r\n let widgetConfigFilterData = <IWidgetConfigFilter>{\r\n appConfig: this.appConfig,\r\n globalFilter: this.globalFilter,\r\n widgetInfo: this.data.widgetInfo,\r\n config: this.data.widgetInfo.widgetConfigInfo.config,\r\n configChanges: this.getConfigChanges(configChanged)\r\n }\r\n return widgetConfigFilterData;\r\n }\r\n\r\n\r\n /** To load external custom element to the widget container*/\r\n async loadWidget(widgetInfo: any) {\r\n widgetInfo.rowHeight = this.gridCellHeight;\r\n let widgetConfigFilter = <IWidgetConfigFilter>{\r\n config: widgetInfo.widgetConfigInfo.config,\r\n globalFilter: this.globalFilter,\r\n configChanges: this.getConfigChanges(false),\r\n bulkActions:this.bulkActionData\r\n }\r\n this.isWidgetCanMove= this.dashboardInfo.templateConfig.widget.canMove;\r\n if (widgetInfo.widgetSettings) {\r\n this.widgetSettings = this.getParsedConfig(widgetInfo.widgetSettings);\r\n this.applayWidgetSettings(this.widgetSettings);\r\n }\r\n this.detailPageUrl = widgetInfo.detailPageUrl;\r\n let me = this;\r\n this.isCustomElement = widgetInfo.isCustomElement;\r\n if (this.isCustomElement) {\r\n this.dashboardService.loadExternalScript(widgetInfo.scriptUrl, () => {\r\n this.setNotConfiguredState(widgetInfo);\r\n let appModule = this.data.widgetInfo.widgetName;\r\n if (this.data.widgetInfo.applicationModule && this.data.widgetInfo.applicationModule.length > 0) {\r\n appModule = this.data.widgetInfo.applicationModule;\r\n }\r\n this.translateService.loadTranslations(this.appConfig.appManagementBaseUrl, appModule, false).then(() => {\r\n me.widgetElement = document.createElement(widgetInfo.customTag);\r\n me.widgetElement.setAttribute(\"widget-instance-id\", widgetInfo.widgetInstanceId);\r\n\r\n let handler = function (event: any) {\r\n setTimeout(async () => {\r\n me.widgetElement.addEventListener('on-widget-respond', (e: any) => {\r\n var type: string = e.detail.type;\r\n switch (type) {\r\n case 'onDataLoad':\r\n if (e.detail.data)\r\n me.showPanel = true;\r\n else\r\n me.showPanel = false;\r\n\r\n if (!me.data.dataLoaded) {\r\n me.data.dataLoaded = true;\r\n me.dataLoaded.emit(widgetInfo);\r\n }\r\n break;\r\n case 'onConfigEditClicked':\r\n me.editWidget();\r\n break;\r\n case 'onEnableDefaultState':\r\n me.setEmptyState(e.detail.data);\r\n break;\r\n case 'onSetTitleUnderline':\r\n if (e.detail.data == true)\r\n me.enableTitleLine = true;\r\n else\r\n me.enableTitleLine = me.enableTitleLineActual;\r\n break;\r\n case 'onWidgetTitleHidden':\r\n if (e.detail.data == true)\r\n me.hideTitle = true;\r\n else\r\n me.hideTitle = false;\r\n break;\r\n case 'onUpdateLockData':\r\n me.setLock(e.detail.data);\r\n break;\r\n case 'onGlobalFilterApplicableCheck':\r\n me.setInapplicableFilters(e.detail.data, widgetInfo.widgetInstanceId);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n if (typeof (me.widgetElement.titleLineEnabled) != 'undefined') {\r\n let titleLineEnabled = me.widgetElement.titleLineEnabled();\r\n if (titleLineEnabled) {\r\n me.enableTitleLine = titleLineEnabled;\r\n me.enableTitleLineActual = titleLineEnabled;\r\n }\r\n }\r\n me.editText = me.translateService.translate('Common.edit');\r\n if (me.translateService.translate('Common.edit').length > 6) {\r\n me.editText = (me.translateService.translate('Common.edit').substring(0, 6) + '...');\r\n me.editToolTipValue = me.translateService.translate('Common.edit');\r\n me.editToolTipWidth = \"300px\";\r\n }\r\n me.copyText = me.translateService.translate('Common.copy');\r\n if (me.translateService.translate('Common.copy').length > 6) {\r\n me.copyText = (me.translateService.translate('Common.copy').substring(0, 6) + '...');\r\n me.copyToolTipValue = me.translateService.translate('Common.copy');\r\n me.copyToolTipWidth = \"300px\";\r\n }\r\n me.moveText = me.translateService.translate('Common.move')\r\n if (me.translateService.translate('Common.move').length > 6) {\r\n me.moveText = (me.translateService.translate('Common.move').substring(0, 6) + '...');\r\n me.moveToolTipValue = me.translateService.translate('Common.move');\r\n me.moveToolTipWidth = \"300px\";\r\n }\r\n me.excelText = me.translateService.translate('Common.excel');\r\n if (me.translateService.translate('Common.excel').length > 6) {\r\n me.excelText = (me.translateService.translate('Common.excel').substring(0, 6) + '...');\r\n me.excelToolTipValue = me.translateService.translate('Common.excel');\r\n me.excelToolTipWidth = \"300px\";\r\n }\r\n me.deleteText = me.translateService.translate('Common.delete');\r\n if (me.translateService.translate('Common.delete').length > 6) {\r\n me.deleteText = (me.translateService.translate('Common.delete').substring(0, 6) + '...');\r\n me.deleteToolTipValue = me.translateService.translate('Common.delete');\r\n me.deleteToolTipWidth = \"300px\";\r\n }\r\n\r\n me.isWidgetLoaded = true;\r\n widgetConfigFilter.appConfig = me.appConfig;\r\n widgetConfigFilter.widgetInfo = widgetInfo;\r\n widgetConfigFilter.configChanges = me.getConfigChanges(false);\r\n widgetConfigFilter.widgetInfo.widgetName = widgetInfo.widgetName;\r\n widgetConfigFilter.globalFilter = me.globalFilter;\r\n widgetConfigFilter.dashboardInfo = me.dashboardInfo;\r\n me.widgetElement.loadContent(widgetConfigFilter);\r\n await me.setLock(widgetConfigFilter.config);\r\n await me.setDownloadIcon();\r\n })\r\n }.bind(this);\r\n\r\n this.widgetElementHandler = handler;\r\n document.body.addEventListener('widgetinitiated' + widgetInfo.widgetInstanceId, handler);\r\n this.ctlWidget.nativeElement.appendChild(this.widgetElement);\r\n });\r\n });\r\n }\r\n else {\r\n let basePath = document.baseURI;\r\n loadRemoteModule({\r\n type: 'module',\r\n remoteEntry: basePath + widgetInfo.scriptUrl,\r\n exposedModule: './' + widgetInfo.widgetComponent\r\n }).then((m: any) => {\r\n let appModule = this.data.widgetInfo.widgetName;\r\n this.translateService.loadTranslations(this.appConfig.appManagementBaseUrl, appModule, false).then(() => {\r\n me.ctlWidgetModule.clear();\r\n var component = me.ctlWidgetModule.createComponent(m[widgetInfo.widgetComponent]);\r\n let instance: any = component.instance;\r\n let widgetElement = component.instance;\r\n this.setNotConfiguredState(widgetInfo);\r\n\r\n if (this.data.widgetInfo.applicationModule && this.data.widgetInfo.applicationModule.length > 0) {\r\n appModule = this.data.widgetInfo.applicationModule;\r\n }\r\n me.widgetElement = widgetElement;\r\n let element = component.location.nativeElement;\r\n element.setAttribute(\"widget-instance-id\", widgetInfo.widgetInstanceId);\r\n instance.widgetInstanceId = widgetInfo.widgetInstanceId;\r\n let handler = function (event: any) {\r\n setTimeout(async () => {\r\n instance.onWidgetRespond.subscribe((e: any) => {\r\n var type: string = e.type;\r\n switch (type) {\r\n case 'onDataLoad':\r\n if (e.data)\r\n me.showPanel = true;\r\n else\r\n me.showPanel = false;\r\n if (!me.data.dataLoaded) {\r\n me.data.dataLoaded = true;\r\n me.dataLoaded.emit(me.widgetElement);\r\n }\r\n break;\r\n case 'onConfigEditClicked':\r\n me.editWidget();\r\n break;\r\n case 'onEnableDefaultState':\r\n me.setEmptyState(e.data);\r\n break;\r\n case 'onSetTitleUnderline':\r\n if (e.data == true)\r\n me.enableTitleLine = true;\r\n else\r\n me.enableTitleLine = me.enableTitleLineActual;\r\n break;\r\n case 'onWidgetTitleHidden':\r\n if (e.data == true)\r\n me.hideTitle = true;\r\n else\r\n me.hideTitle = false;\r\n break;\r\n case 'onUpdateLockData':\r\n me.setLock(e.data);\r\n break;\r\n case 'onGlobalFilterApplicableCheck':\r\n me.setInapplicableFilters(e.data, widgetInfo.widgetInstanceId);\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n if (typeof (me.widgetElement.titleLineEnabled) != 'undefined') {\r\n let titleLineEnabled = me.widgetElement.titleLineEnabled();\r\n if (titleLineEnabled) {\r\n me.enableTitleLine = titleLineEnabled;\r\n me.enableTitleLineActual = titleLineEnabled;\r\n }\r\n }\r\n me.editText = me.translateService.translate('Common.edit');\r\n if (me.translateService.translate('Common.edit').length > 6) {\r\n me.editText = (me.translateService.translate('Common.edit').substring(0, 6) + '...');\r\n me.editToolTipValue = me.translateService.translate('Common.edit');\r\n me.editToolTipWidth = \"300px\";\r\n }\r\n me.copyText = me.translateService.translate('Common.copy');\r\n if (me.translateService.translate('Common.copy').length > 6) {\r\n me.copyText = (me.translateService.translate('Common.copy').substring(0, 6) + '...');\r\n me.copyToolTipValue = me.translateService.translate('Common.copy');\r\n me.copyToolTipWidth = \"300px\";\r\n }\r\n me.moveText = me.translateService.translate('Common.move')\r\n if (me.translateService.translate('Common.move').length > 6) {\r\n me.moveText = (me.translateService.translate('Common.move').substring(0, 6) + '...');\r\n me.moveToolTipValue = me.translateService.translate('Common.move');\r\n me.moveToolTipWidth = \"300px\";\r\n }\r\n me.excelText = me.translateService.translate('Common.excel');\r\n if (me.translateService.translate('Common.excel').length > 6) {\r\n me.excelText = (me.translateService.translate('Common.excel').substring(0, 6) + '...');\r\n me.excelToolTipValue = me.translateService.translate('Common.excel');\r\n me.excelToolTipWidth = \"300px\";\r\n }\r\n me.deleteText = me.translateService.translate('Common.delete');\r\n if (me.translateService.translate('Common.delete').length > 6) {\r\n me.deleteText = (me.translateService.translate('Common.delete').substring(0, 6) + '...');\r\n me.deleteToolTipValue = me.translateService.translate('Common.delete');\r\n me.deleteToolTipWidth = \"300px\";\r\n }\r\n me.isWidgetLoaded = true;\r\n widgetConfigFilter.appConfig = me.appConfig;\r\n widgetConfigFilter.widgetInfo = widgetInfo;\r\n widgetConfigFilter.configChanges = me.getConfigChanges(false);\r\n widgetConfigFilter.widgetInfo.widgetName = widgetInfo.widgetName;\r\n widgetConfigFilter.globalFilter = me.globalFilter;\r\n widgetConfigFilter.dashboardInfo = me.dashboardInfo;\r\n me.widgetElement.loadContent(widgetConfigFilter);\r\n\r\n await me.setLock(widgetConfigFilter.config);\r\n await me.setDownloadIcon();\r\n })\r\n }.bind(this);\r\n\r\n this.widgetElementHandler = handler;\r\n document.body.addEventListener('widgetinitiated' + widgetInfo.widgetInstanceId, handler);\r\n component.changeDetectorRef.detectChanges();\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**To set Default State for the widget when it is not configured */\r\n setNotConfiguredState(widgetInfo: IWidgetInfo, forceEnable: boolean = false) {\r\n if ((widgetInfo.showDefaultState && (widgetInfo.widgetConfigInfo.config == \"\" || Object.keys(JSON.parse(widgetInfo.widgetConfigInfo.config)).length == 0)) || (forceEnable)) {\r\n this.isWidgetStateApplicable = true;\r\n this.widgetEmptyState = WidgetViewState.emptyConfig.toString();\r\n }\r\n else {\r\n this.widgetEmptyState = '';\r\n this.isWidgetStateApplicable = false;\r\n }\r\n }\r\n\r\n /**To configure empty state for the widget */\r\n setEmptyState(widgetState: any) {\r\n if (this.height == 1 || this.width == 1)\r\n this.isKpiView = true\r\n else\r\n this.isKpiView = false;\r\n this.widgetEmptyState = widgetState.widgetViewState;\r\n this.isGlobalFilterApplied = widgetState.isGlobalFilterApplied;\r\n if (widgetState != WidgetViewState.normal) {\r\n this.isWidgetStateApplicable = true;\r\n this.isDownloadIconVisible = false;\r\n }\r\n else {\r\n this.isWidgetStateApplicable = false;\r\n }\r\n switch (widgetState) {\r\n case WidgetViewState.emptyConfig:\r\n this.setNotConfiguredState(this.data.widgetInfo, true);\r\n break;\r\n case WidgetViewState.emptyData:\r\n break;\r\n case WidgetViewState.error:\r\n break;\r\n case WidgetViewState.sqlTimeoutError:\r\n break;\r\n }\r\n }\r\n\r\n getConfigChanges(configChanged: boolean = false) {\r\n let configChanges = <IconfigChanges>{\r\n isConfigUpdated: configChanged,\r\n updatedConfigProperty: []\r\n }\r\n return configChanges;\r\n }\r\n\r\n /** To refresh widget on input config changes */\r\n async refreshWidget(widgetInfo: IWidgetInfo, configChanged: boolean = false) {\r\n this.WidgetDisplayName = this.getwidgetTitleTranslation(this.data.widgetInfo.widgetTitle);\r\n widgetInfo.rowHeight = this.gridCellHeight;\r\n this.setNotConfiguredState(widgetInfo);\r\n let widgetContainerContext = this;\r\n\r\n let widgetConfigFilter = <IWidgetConfigFilter>{\r\n config: widgetInfo.widgetConfigInfo.config,\r\n globalFilter: this.globalFilter,\r\n appConfig: this.appConfig,\r\n widgetInfo: widgetInfo,\r\n configChanges: this.getConfigChanges(configChanged),\r\n dashboardInfo: this.dashboardInfo,\r\n bulkActions: this.bulkActionData\r\n }\r\n\r\n if (widgetContainerContext.isWidgetLoaded) {\r\n if (this.widgetElement && typeof (this.widgetElement.setConfigFilter) == 'function') {\r\n widgetContainerContext.widgetElement.setConfigFilter(widgetConfigFilter);\r\n }\r\n widgetContainerContext.widgetElement.loadContent(widgetConfigFilter);\r\n await this.setLock(widgetConfigFilter.config);\r\n await this.setDownloadIcon();\r\n }\r\n }\r\n\r\n public mouseOver(event: any) {\r\n this.toolTipValue = ' ';\r\n this.toolTipWidth = '0px';\r\n let element = this.searchInput.nativeElement;\r\n if (element.offsetWidth < element.scrollWidth) {\r\n this.toolTipValue = element.innerHTML;\r\n this.toolTipWidth = '300px';\r\n }\r\n else {\r\n this.toolTipWidth = '0px';\r\n }\r\n }\r\n\r\n private async setLock(config: string) {\r\n this.lockTemplateInfo = this.widgetElement.loadLockInfo();\r\n this.hideLock = this.dashboardInfo.templateConfig.widget.hideLock;\r\n var configObj: any;\r\n if (config) {\r\n configObj = JSON.parse(config);\r\n if (configObj && configObj.Locks != undefined) {\r\n if (configObj.Locks.IsDateLocked || configObj.Locks.IsDatesLocked || configObj.Locks.IsParticipantLocked || configObj.Locks.IsSourceLocked) {\r\n this.lockDetails = [];\r\n if (configObj.Locks.IsDateLocked || configObj.Locks.IsDatesLocked)\r\n this.lockDetails.push(this.translateService.translate('Common.DateRange'));\r\n\r\n if (configObj.Locks.IsParticipantLocked) {\r\n this.lockDetails.push(this.translateService.translate('Common.DivisionOrGrouporSite'));\r\n }\r\n if (configObj.Locks.IsSourceLocked)\r\n this.lockDetails.push(this.translateService.translate('Common.DataStream'));\r\n }\r\n else {\r\n this.lockDetails = undefined;\r\n }\r\n }\r\n else {\r\n this.lockDetails = undefined;\r\n }\r\n }\r\n }\r\n\r\n public async setDownloadIcon() {\r\n let downloadType = await this.widgetElement?.getDownloadType();\r\n this.downloadIconType = downloadType;\r\n this.isDownloadIconVisible = false;\r\n this.isChartDownloadVisible = false;\r\n this.isGridDownloadVisible = false;\r\n this.showExcell = true;\r\n if (downloadType != RADownloadType.None) {\r\n this.isDownloadIconVisible = true;\r\n }\r\n else {\r\n if (!this.isWidgetMgmnt && !this.detailPageUrl) {\r\n this.showSettingsLink = false;\r\n }\r\n }\r\n\r\n if (downloadType == RADownloadType.Chart) {\r\n this.isChartDownloadVisible = true;\r\n }\r\n\r\n if (downloadType == RADownloadType.Grid) {\r\n this.isGridDownloadVisible = true;\r\n }\r\n\r\n if (downloadType == RADownloadType.Statistics) {\r\n this.isGridDownloadVisible = true;\r\n this.showExcell = false;\r\n }\r\n }\r\n\r\n public downloadIconClicked(type: string) {\r\n if (!this.widgetElement || typeof this.widgetElement.downloadClicked !== 'function') return;\r\n switch (type) {\r\n case \"CSV\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.CSV);\r\n break;\r\n case \"PNG\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.PNG);\r\n break;\r\n case \"PDF\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.PDF);\r\n break;\r\n case \"SVG\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.SVG);\r\n break;\r\n case \"JPEG\":\r\n this.widgetElement.downloadClicked(this.downloadIconType, RADownloadOption.JPEG);\r\n break;\r\n }\r\n }\r\n\r\n /** Trends Report: open download format modal (persistent Download icon click) */\r\n public async onTrendReportDownloadClick() {\r\n await this.setDownloadIcon();\r\n if (!this.isDownloadIconVisible) return;\r\n this.raDashboardEventBus.publish(RAEvent.TrendsReportDownloadModalOpen, {\r\n widgetInstanceId: this.data.widgetInfo.widgetInstanceId,\r\n isChartDownloadVisible: this.isChartDownloadVisible,\r\n isGridDownloadVisible: this.isGridDownloadVisible,\r\n showExcell: this.showExcell\r\n });\r\n }\r\n\r\n private removeMenu() {\r\n jQuery('#ra-db-widget-menu').remove();\r\n }\r\n\r\n private checkVisitLinkVisiblity() {\r\n let isVisitApplicable = true;\r\n if (this.widgetElement && typeof this.widgetElement.getVisitLinkVisibilityStatus === \"function\") {\r\n isVisitApplicable = this.widgetElement.getVisitLinkVisibilityStatus();\r\n }\r\n return isVisitApplicable;\r\n }\r\n\r\n /**Show dropdown on gear icon click */\r\n public showDropDown(e: any) {\r\n this.setDownloadIcon();\r\n\r\n this.removeMenu();\r\n setTimeout(() => {\r\n\r\n\r\n let targetPos = e.target.getBoundingClientRect();\r\n let style: string = \"position:fixed;top:\" + (targetPos.y + 15) + 'px' + ';left:' + (e.pageX - 122) + 'px;z-index:1000;';\r\n let html = this.getContenxtHtml(style);\r\n\r\n jQuery(html).appendTo('body');\r\n\r\n if (this.isWidgetMgmnt) {\r\n this.addEventListener('wcEditWidget', this.editWidget);\r\n this.addEventListener('wcCopyWidget', this.copyWidget);\r\n this.addEventListener('wcMoveWidget', this.moveWidget);\r\n this.addEventListener('wcWidgetDelete', this.deleteWidget);\r\n }\r\n let customPageParams = false;\r\n if (this.data.widgetInfo && this.data.widgetInfo.widgetSettings) {\r\n this.widgetSettings = this.getParsedConfig(this.data.widgetInfo.widgetSettings);\r\n if (this.widgetSettings.customPageParams || this.widgetSettings.customPageURL) {\r\n customPageParams = true;\r\n }\r\n }\r\n\r\n if ((this.detailPageUrl || customPageParams) && this.checkVisitLinkVisiblity()) {\r\n this.addEventListener('wcVisitWidget', this.visitPage);\r\n }\r\n if (this.isChartDownloadVisible) {\r\n this.addEventListener('wcDownloadPng', this.downloadIconClicked, 'PNG');\r\n this.addEventListener('wcDownloadJpg', this.downloadIconClicked, 'JPEG');\r\n this.addEventListener('wcDownloadPdf', this.downloadIconClicked, 'PDF');\r\n this.addEventListener('wcDownloadSvg', this.downloadIconClicked, 'SVG');\r\n }\r\n if (this.isGridDownloadVisible && this.showExcell) {\r\n this.addEventListener('wcDownloadExcel', this.downloadIconClicked, 'CSV');\r\n }\r\n\r\n document.getElementById('ra-db-widget-menu')?.addEventListener('mouseenter', () => {\r\n window.mouseOverWidgetMenu = true;\r\n });\r\n document.getElementById('ra-db-widget-menu')?.addEventListener('mouseleave', () => {\r\n window.mouseOverWidgetMenu = false;\r\n setTimeout(() => {\r\n if (!window.gridsterItemEnter) {\r\n this.removeMenu();\r\n }\r\n });\r\n });\r\n });\r\n\r\n }\r\n\r\n private addEventListener(id: string, event: any, params?: any) {\r\n let element = document.getElementById(id);\r\n if (element) {\r\n element.addEventListener('click', () => {\r\n event.call(this, params);\r\n });\r\n }\r\n }\r\n\r\n private getContenxtHtml(style: string) {\r\n let html: string = '<div id=\"ra-db-widget-menu\"' + 'style=\"' + style + '\" class=\"download-content dropdown-content widget-config-item dropdown-click\" style=\"z-index: 1002;\">';\r\n\r\n let settings = '';\r\n if (this.isWidgetMgmnt) {\r\n if (!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideEdit)\r\n settings += this.getHtmlForButton('wcEditWidget', 'fal fa-edit', this.editText);\r\n if (!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideCopy)\r\n settings += this.getHtmlForButton('wcCopyWidget', 'fal fa-copy', this.copyText);\r\n if (!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideMove)\r\n settings += this.getHtmlForButton('wcMoveWidget', 'fal fa-arrows-alt', this.moveText);\r\n }\r\n let customPageParams = false;\r\n if (this.data.widgetInfo && this.data.widgetInfo.widgetSettings) {\r\n this.widgetSettings = this.getParsedConfig(this.data.widgetInfo.widgetSettings);\r\n if (this.widgetSettings.customPageParams || this.widgetSettings.customPageURL) {\r\n customPageParams = true;\r\n }\r\n }\r\n if ((!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideVisitPage) && (this.detailPageUrl || customPageParams) && this.checkVisitLinkVisiblity()) {\r\n settings += '<a style=\"max-height: 30px;align-items: center;align-content: center; display: flex;\" id=\"wcVisitWidget\">';\r\n settings += '<i style=\"padding-left: 4px;font-size: 27px !important;\" class=\"fal fa-angle-right\"></i> ';\r\n settings += '<span style=\"padding-left: 11px;margin-top: 2px;\" style=\"padding-left: 6px;\">';\r\n settings += this.translateService.translate('Common.visitpage');\r\n settings += '</span></a>';\r\n }\r\n if ((!this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideVisitPage) && (this.detailPageUrl && this.checkVisitLinkVisiblity()) || this.isWidgetMgmnt) {\r\n html += '<div style=\"color: #9FA0A4;font-size: 12px;padding-top: 8px;padding-left: 12px;\">';\r\n html += this.translateService.translate('Common.settings') + '</div>';\r\n html += settings;\r\n html += this.getHr();\r\n }\r\n\r\n if (this.isDownloadIconVisible) {\r\n if (this.showExcell) {\r\n if (this.detailPageUrl || this.isWidgetMgmnt)\r\n html += '<span style=\"color: #9FA0A4;font-size: 12px;\">';\r\n else\r\n html += '<span style=\"color: #9FA0A4;font-size: 12px;padding-top:5px;display:block;\">';\r\n\r\n html += this.translateService.translate('Common.downloads');\r\n html += '</span>';\r\n }\r\n\r\n if (this.isChartDownloadVisible) {\r\n html += '<div style=\"padding-top: 10px;\" class=\"chartDownload\">';\r\n html += this.getHtmlForButton('wcDownloadPng', 'fal fa-file-image', this.translateService.translate('Common.png'));\r\n html += this.getHtmlForButton('wcDownloadJpg', 'fal fa-file-image', this.translateService.translate('Common.jpeg'));\r\n html += this.getHtmlForButton('wcDownloadPdf', 'fal fa-file-pdf', this.translateService.translate('Common.pdf'));\r\n html += this.getHtmlForButton('wcDownloadSvg', 'fal fa-file-alt', this.translateService.translate('Common.svg'));\r\n html += '</div>';\r\n }\r\n if (this.isGridDownloadVisible && this.showExcell) {\r\n html += '<div class=\"gridDownload\">';\r\n html += this.getHtmlForButton('wcDownloadExcel', 'fal fa-download', this.excelText);\r\n html += '</div>';\r\n }\r\n }\r\n if (this.isDownloadIconVisible && this.isWidgetMgmnt && this.showExcell) {\r\n html += this.getHr();\r\n }\r\n if (this.isWidgetMgmnt && !this.data.widgetInfo.templateWidgetSettings || !this.data.widgetInfo.templateWidgetSettings.hideDelete) {\r\n html += '<a id=\"wcWidgetDelete\"><i class=\"fal fa-times\" style=\"padding-left: 3px;color: red;\"></i><span>';\r\n html += this.deleteText;\r\n html += '</span></a>';\r\n }\r\n\r\n html += '</div>';\r\n return html;\r\n }\r\n\r\n private getHr() {\r\n return '<hr class=\"hr\" style=\"margin-top: 5px;margin-bottom: 5px;\">';\r\n }\r\n\r\n private getHtmlForButton(id: string, fontClass: string, text: string) {\r\n let html = '<a id=\"' + id + '\"><i style=\"width:16px\" class=\"' + fontClass + '\"></i> <span style=\"padding-left: 6px;\">';\r\n html += text;\r\n html += '</span></a>';\r\n return html;\r\n }\r\n\r\n\r\n private getParsedConfig(config: any) {\r\n let parsedConfig: any;\r\n if (config) {\r\n if (typeof config === 'string') {\r\n try {\r\n parsedConfig = JSON.parse(config);\r\n }\r\n catch {\r\n parsedConfig = {};\r\n }\r\n return parsedConfig;\r\n }\r\n }\r\n return config;\r\n }\r\n\r\n private applayWidgetSettings(settings: any) {\r\n if (settings.NoPadding)\r\n this.noPadding = true\r\n else\r\n this.noPadding = false\r\n }\r\n\r\n private setInapplicableFilters(data: any, instanceId: any) {\r\n var widgetData: any = {};\r\n this.inapplicableFilters = [];\r\n widgetData.instanceId = instanceId;\r\n if (data && data.length > 0) {\r\n data.forEach((element: any) => {\r\n if (element == 'dateRange')\r\n this.inapplicableFilters.push(this.translateService.translate('Common.DateRange'));\r\n else if (element == 'participant') {\r\n this.inapplicableFilters.push(this.translateService.translate('Common.DivisionGroup'));\r\n }\r\n else if (element == 'source')\r\n this.inapplicableFilters.push(this.translateService.translate('Common.DataStream'));\r\n else\r\n this.inapplicableFilters.push(element);\r\n });\r\n widgetData.data = data;\r\n }\r\n else {\r\n widgetData.data = undefined;\r\n }\r\n this.updateAppliedFilters.emit(widgetData);\r\n }\r\n\r\n public openPopup(title: any, data: any, footer: any, type: any, template: any = undefined) {\r\n let props: any = {};\r\n if (type == 'innaplicable' && this.banPopupDiv)\r\n props.element = this.banPopupDiv.nativeElement;\r\n if (type == 'lock' && this.lockPopupDiv)\r\n props.element = this.lockPopupDiv.nativeElement;\r\n props.title = title;\r\n props.data = data;\r\n props.footer = footer;\r\n if (template)\r\n props.template = template;\r\n this.currentComponent = this.domService.appendComponent(LockTooltip, document.body, props);\r\n this.popupInstance = <any>this.currentComponent.instance;\r\n }\r\n public closePopup() {\r\n if (this.currentComponent)\r\n this.popupInstance.removeMe(this.currentComponent);\r\n }\r\n getwidgetTitleTranslation(item: any) {\r\n let rKey = this.translateService.makeCode(item);\r\n let translatedString = '';\r\n if(this.data?.widgetInfo?.widgetComponent.startsWith('PAM'))\r\n translatedString = this.translateService.translate('common.' + rKey);\r\n else if(this.dashboardService.clientId) {\r\n rKey = 'DBW_' + rKey;\r\n translatedString = this.translateService.translate(this.dashboardService.clientId + '_DBW.' + rKey);\r\n }\r\n else\r\n return item;\r\n return translatedString.toLowerCase() === rKey.toLowerCase() ? item : translatedString;\r\n }\r\n}\r\n","<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" *ngIf=\"!hideTitle && !showOnlyDropdown\"\r\n [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12\" [ngClass]=\"{'wc-mover' : isWidgetCanMove }\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-9 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div [hidden]=\"hideTitle\" style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\"\r\n (mouseover)=\"mouseOver($event)\" #searchInput>{{WidgetDisplayName}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-3\" style=\"cursor:default;padding-right: 0px;\"> \r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div #banPopupDiv (mouseover)=\"openPopup(inapplicableIconTitle,inapplicableFilters,inapplicableIconFooter,'innaplicable')\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!inapplicableFilters || inapplicableFilters.length == 0 || !globalFilter || globalFilter == '{}'\">\r\n <i class=\"fal fa-ban lock\"></i> \r\n </div>\r\n <div #lockPopupDiv (mouseover)=\"openPopup(lockIconTitle,lockDetails,lockIconFooter,'lock',lockTemplateInfo)\" (mouseout)=\"closePopup()\" class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"(!lockDetails && !lockTemplateInfo) || hideLock\">\r\n <i class=\"fal fa-lock lock\"></i> \r\n </div>\r\n <ng-container *ngIf=\"!hideEllipses\">\r\n <div class=\"widget-menu\" style=\"width:10px;\"\r\n [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"hideEllipses\" class=\"widget-action-icons-card\">\r\n <div class=\"widget-menu-trend-report\" style=\"display: flex;\">\r\n <div *ngIf=\"showInlineDownloadIcon\" class=\"title-bar-action-icon\" title=\"{{'Common.downloads' | translate}}\" aria-label=\"{{'Common.downloads' | translate}}\">\r\n <i (click)=\"onTrendReportDownloadClick()\" class=\"fal fa-download\"></i>\r\n </div>\r\n <div class=\"title-bar-action-icon\" *ngIf=\"isWidgetMgmnt && (!data.widgetInfo.templateWidgetSettings || !data.widgetInfo.templateWidgetSettings.hideEdit)\" title=\"{{'Common.edit' | translate}}\" aria-label=\"{{'Common.edit' | translate}}\">\r\n <i (click)=\"editWidget()\" class=\"fal fa-edit\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown\" class=\"wcheader widget-move\"\r\n style=\"height: 45px;width: 95%;cursor: move;z-index: 99;opacity: 0;\">\r\n </div>\r\n <ng-container *ngIf=\"hideTitle && !showOnlyDropdown && !hideEllipses\">\r\n <div class=\"widget-menu widget-menu-title-hidden\" [ngClass]=\"{'widget-menu-show': isMouseHover && showSettingsLink}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" class=\"fal fa-ellipsis-v\" style=\"text-align: center;\"></i>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"hideTitle && !showOnlyDropdown && hideEllipses\" class=\"widget-menu-title-hidden widget-action-icons-card\">\r\n <div class=\"widget-menu-trend-report\" style=\"display: flex;\">\r\n <div *ngIf=\"showInlineDownloadIcon\" class=\"title-bar-action-icon\" title=\"{{'Common.downloads' | translate}}\" aria-label=\"{{'Common.downloads' | translate}}\">\r\n <i (click)=\"onTrendReportDownloadClick()\" class=\"fal fa-download\"></i>\r\n </div>\r\n <div class=\"title-bar-action-icon\" *ngIf=\"isWidgetMgmnt && (!data.widgetInfo.templateWidgetSettings || !data.widgetInfo.templateWidgetSettings.hideEdit)\" title=\"{{'Common.edit' | translate}}\" aria-label=\"{{'Common.edit' | translate}}\">\r\n <i (click)=\"editWidget()\" class=\"fal fa-edit\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px','top':hideTitle || showOnlyDropdown?'10px':'46px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div [hidden]=\"!isCustomElement\" #ctlWidget></div>\r\n <div [hidden]=\"isCustomElement\">\r\n <ng-container #ctlWidgetModule></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;height: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\"\r\n [isGlobalFilterApplied]=\"isGlobalFilterApplied\" [widgetEmptyState]=\"widgetEmptyState\"\r\n (editWidgetClicked)=editWidget() [widthCol]=\"width\" [heightCol]=\"height\">\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>","import { Input, OnInit, Component, OnChanges, SimpleChanges, NgZone, OnDestroy, ViewChild, ElementRef, HostListener, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\r\n\r\nimport { GridsterConfig, GridsterItem } from '../../gridster/index';\r\nimport { RaDashboardService } from '../ra.dashboard.service';\r\nimport { RADashboardEventBus } from '../ra.dashbard.event.bus';\r\nimport { RAEvent } from '../ra.event.enum';\r\nimport { IWidgetInfo, IAppConfig, IBulkAction } from '@schneideress/widgetframework';\r\nimport { NgxUiLoaderService } from 'ngx-ui-loader';\r\nimport { NotifierService } from 'angular-notifier';\r\nimport { RATranslateService, RAPermissionService } from '@schneideress/ra-common';\r\nimport { RADashboardResponsiveService } from '../ra.dashboard.responsive.service';\r\nimport { IDashboardInfo } from '@schneideress/widgetframework';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'ra-dashboard-area',\r\n templateUrl: './ra.dashboard.area.html',\r\n styleUrls: ['./ra.dashboard.area.css'],\r\n standalone: false\r\n})\r\nexport class RADashboardArea implements OnInit, OnChanges, OnDestroy {\r\n\r\n public widgetList = Array<GridsterItem>();\r\n public options!: GridsterConfig;\r\n public gridheight: number = 300;\r\n public gridsterHeight: string = '75vh';\r\n public gridcellHeight: number = 0;\r\n public userWidgets: any[] = [];\r\n public PAMWidgets: any = [];\r\n\r\n private conifgAddClick: any;\r\n private curatedFilterChange: any;\r\n private bulkActionClick: any;\r\n private calculateLayout:any;\r\n private rearrangeWidgetClick: any;\r\n private widgetDeleteEvent: any;\r\n private widgetAddEvent: any;\r\n private widgetLibraryDoneClick: any;\r\n private isWidgetLoaded: boolean = false;\r\n public domResized: boolean = false;\r\n public showEmptyDashboard: boolean = false;\r\n public showDownloadOnlyState:boolean=false;\r\n public isWidgetMgmnt: boolean = false;\r\n public lastViewType!: string;\r\n public emptyDashboardTitle: any;\r\n public emptyDashboardMsg1: any;\r\n public emptyDashboardMsg2: any;\r\n public emptyDashboardButtonText: any;\r\n public emptyDashboardButtonIcon: any;\r\n public DownloadOnlyStateTitle: any;\r\n public DownloadOnlyStateMsg1: any;\r\n public DownloadOnlyStateMsg2: any;\r\n public DownloadOnlyStateButtonText1: any;\r\n public DownloadOnlyStateButtonIcon1: any;\r\n public DownloadOnlyStateButtonText2: any;\r\n public DownloadOnlyStateButtonIcon2: any;\r\n public emptyDashboardButtonAction: any;\r\n public DownloadOnlyStateButtonAction1: any;\r\n public DownloadOnlyStateButtonAction2: any;\r\n public hasGrid: boolean = false;\r\n private initialWidgetCount: number = 10;\r\n private currentLoadingCount: number = 0;\r\n\r\n public isSiteDetailDashboard: boolean = false;\r\n\r\n @Input('user-dashboard-id') userDashboardId!: number;\r\n @Input('area-key') areaKey!: string;\r\n @Input('download-datastream-limit') downloadDatastreamLimit: any=200;\r\n @Input('report-datastream-limit') reportDatastreamLimit: any=50;\r\n @Input('global-filter') globalFilter!: any;\r\n @Input('event-bus') raDashboardEventBus!: RADashboardEventBus;\r\n @Input('widget-height') widgetHeight: number = 2;\r\n @Input('widget-width') widgetWidth: number = 4;\r\n @Input('app-config') appConfig!: IAppConfig;\r\n @Input('dashboard-info') dashboardInfo!: IDashboardInfo;\r\n @Input('isIndicatorDashboard') isIndicatorDashboard: boolean = false;\r\n @Input() templateConfig: any;\r\n @Input('bulk_Action_Data') bulkActionData!: IBulkAction;\r\n @Input('widget-count') widgetCount: number = 0;\r\n @Output() hideDashboardBanner = new EventEmitter();\r\n\r\n @ViewChild('gridWrapper', { static: false }) gridWrapper!: ElementRef;\r\n private scrollTrigger: any;\r\n @ViewChild('gridItem') gridItem!: any;\r\n constructor(private dashboardService: RaDashboardService,\r\n private ngZone: NgZone,\r\n private ngxService: NgxUiLoaderService,\r\n private translateService: RATranslateService,\r\n private notifier: NotifierService,\r\n private cdr: ChangeDetectorRef,\r\n private responsiveService: RADashboardResponsiveService,\r\n private permissionService: RAPermissionService\r\n ) {\r\n }\r\n\r\n @HostListener('document:scroll')\r\n scroll() {\r\n if (this.scrollTrigger)\r\n clearTimeout(this.scrollTrigger);\r\n\r\n this.scrollTrigger = setTimeout(() => {\r\n this.loadData();\r\n }, 500);\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.isWidgetMgmnt = this.permissionService.hasPermission('ra.widgetmanagement');\r\n this.initiateGridsterConfig();\r\n this.setEmptyDashboardConfig();\r\n this.setDownloadOnlyStateConfig();\r\n this.lastViewType = this.responsiveService.IsDesktopView ? 'desktop' : 'mobile';\r\n const gridTemplates = ['Emission Report', 'CostUsage Report', 'Site Detail', 'Savings Report', 'Invoice Checklist'];\r\n this.hasGrid = gridTemplates.includes(this.dashboardInfo.templateName);\r\n this.responsiveService.resized.subscribe((isDesktop) => {\r\n if (this.lastViewType != (isDesktop ? 'desktop' : 'mobile') || !isDesktop) {\r\n this.lastViewType = (isDesktop ? 'desktop' : 'mobile');\r\n this.widgetList = [];\r\n setTimeout(() => {\r\n this.initiateGridsterConfig();\r\n this.options.api?.optionsChanged!();\r\n if (this.userWidgets) {\r\n let widgets = this.mapObjectListToGridsterItemList(this.userWidgets);\r\n this.currentLoadingCount = 0;\r\n this.widgetList = widgets;\r\n setTimeout(() => {\r\n this.setAreaHeight();\r\n });\r\n }\r\n else {\r\n this.loadWidgets(this.userDashboardId, this.areaKey);\r\n }\r\n this.domResized = !this.domResized;\r\n });\r\n } else {\r\n setTimeout(() => {\r\n if (this.options?.api) {\r\n this.gridcellHeight = this.options.api!.getCurrentRowHeight!();\r\n }\r\n this.domResized = !this.domResized;\r\n this.setAreaHeight();\r\n }, 100);\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n this.bulkActionClick = this.raDashboardEventBus.subscribe(RAEvent.BulkActionClick).subscribe((data: IBulkAction) => {\r\n this.bulkActionData = JSON.parse(JSON.stringify(data)); // To create a new reference;\r\n });\r\n });\r\n setTimeout(() => {\r\n this.calculateLayout = this.raDashboardEventBus.subscribe(RAEvent.LayoutChange).subscribe(() => {\r\n this.options.api?.optionsChanged!();\r\n });\r\n }, 2000);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.isWidgetMgmnt = this.permissionService.hasPermission('ra.widgetmanagement');\r\n if (this.raDashboardEventBus && this.appConfig && !this.isWidgetLoaded) {\r\n this.isWidgetLoaded = true;\r\n this.loadWidgets(this.userDashboardId, this.areaKey);\r\n }\r\n this.initiateGridsterConfig();\r\n\r\n if (changes['raDashboardEventBus'] && changes['raDashboardEventBus'].currentValue != changes['raDashboardEventBus'].previousValue) {\r\n this.inititateEventBusSubscritions();\r\n }\r\n }\r\n ngAfterViewChecked() {\r\n //this.cdr.detectChanges();\r\n }\r\n public setEmptyDashboardConfig() {\r\n if (this.dashboardInfo && this.dashboardInfo.templateConfig.emptyDashboardHeader) {\r\n this.emptyDashboardTitle = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.emptyDashboardHeader.titleKey);\r\n this.emptyDashboardMsg1 = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.emptyDashboardHeader.descriptionKey1);\r\n this.emptyDashboardMsg2 = (this.dashboardInfo.templateConfig.emptyDashboardHeader.descriptionKey2) ? this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.emptyDashboardHeader.descriptionKey2) : '';\r\n this.emptyDashboardButtonText = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonTextKey);\r\n this.emptyDashboardButtonIcon = this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonIcon ? this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonIcon : '';\r\n this.emptyDashboardButtonAction = this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonAction ? this.dashboardInfo.templateConfig.emptyDashboardHeader.buttonAction : '';\r\n }\r\n }\r\n public setDownloadOnlyStateConfig() {\r\n if (this.dashboardInfo && this.dashboardInfo.templateConfig.downloadOnlyStateHeader) {\r\n this.DownloadOnlyStateTitle = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.titleKey);\r\n this.DownloadOnlyStateMsg1 = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.descriptionKey1).replace('{0}',this.reportDatastreamLimit);\r\n this.DownloadOnlyStateMsg2 = (this.dashboardInfo.templateConfig.downloadOnlyStateHeader.descriptionKey2) ? this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.descriptionKey2) : '';\r\n this.DownloadOnlyStateButtonText1 = this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonTextKey1);\r\n this.DownloadOnlyStateButtonText2 =(this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonTextKey2) ? this.translateService.translate(\"dashboard.\" + this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonTextKey2):'';\r\n this.DownloadOnlyStateButtonIcon1 = this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonIcon1 ? this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonIcon1 : '';\r\n this.DownloadOnlyStateButtonIcon2 = this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonIcon2 ? this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonIcon2 : '';\r\n this.DownloadOnlyStateButtonAction1 = this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonAction1 ? this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonAction1: '';\r\n this.DownloadOnlyStateButtonAction2 = this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonAction2 ? this.dashboardInfo.templateConfig.downloadOnlyStateHeader.buttonAction2 : '';\r\n }\r\n }\r\n /**To set GridsterConfig */\r\n public initiateGridsterConfig() {\r\n if (this.dashboardInfo) {\r\n /**To override default configuration values to the gridster control */\r\n this.options = this.responsiveService.getGridsterConfig(this.isWidgetMgmnt,\r\n this.dashboardInfo.templateConfig.widget.canResize, this.dashboardInfo.templateConfig.widget.canMove);\r\n this.options.initCallback = (gridster: any) => {\r\n if (this.options.api) {\r\n this.gridcellHeight = this.options.api.getCurrentRowHeight!();\r\n }\r\n };\r\n this.options.itemChangeCallback = (item: GridsterItem) => {\r\n if (this.responsiveService.IsDesktopView) {\r\n if (item.widgetInfo && item.widgetInfo.widgetInstanceId) {\r\n this.updateWidgetPosition(item.widgetInfo.widgetInstanceId);\r\n }\r\n }\r\n this.setAreaHeight();\r\n };\r\n }\r\n }\r\n\r\n public widgetLoaded(widgetElement: any, widget: any) {\r\n widget.widgetElement = widgetElement;\r\n let items = this.widgetList.filter((item: any) => item.widgetInfo.widgetInstanceId == widget.widgetInfo.widgetInstanceId)\r\n if (items.length > 0) {\r\n this.loadData(items[0]);\r\n }\r\n }\r\n\r\n private loadData(item?: any) {\r\n let items = [];\r\n let totalLoadedCount = this.widgetList.filter((w => w.canLoadData)).length;\r\n if (!item)\r\n items = this.widgetList.filter((w => !w.canLoadData));\r\n else\r\n items.push(item);\r\n if (items.length > 0) {\r\n this.initialWidgetCount === this.currentLoadingCount ? this.changeInitialWidgetCount():null;\r\n if (this.initialWidgetCount > this.currentLoadingCount) {\r\n for (let i = 0; i < items.length; i++) {\r\n if (this.isElementLoaded(items[i]?.widgetElement) ||\r\n (totalLoadedCount <= this.initialWidgetCount)) {\r\n this.currentLoadingCount++;\r\n items[i].canLoadData = true;\r\n totalLoadedCount = this.widgetList.filter((w => w.canLoadData)).length;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n changeInitialWidgetCount(){\r\n this.isElementLoaded(this.widgetList[this.currentLoadingCount]?.widgetElement)? \r\n this.initialWidgetCount++ : null;\r\n }\r\n\r\n public dataLoaded(widgetInfo: any) {\r\n setTimeout(() => {\r\n this.currentLoadingCount--;\r\n }, 100);\r\n \r\n // For expanded view, override widget dimensions after data loads\r\n const isExpandedView = new URLSearchParams(window.location.search).get('expanded') === 'true';\r\n if (isExpandedView && widgetInfo && widgetInfo.widgetInstanceId) {\r\n this.overrideWidgetDimensions(widgetInfo);\r\n }\r\n // this.loadData()\r\n }\r\n\r\n /**\r\n * Override widget height and width for expanded view based on actual data content\r\n * Reinitializes gridster after updating dimensions\r\n */\r\n private overrideWidgetDimensions(widgetInfo: any) {\r\n // Find the gridster item for this widget\r\n const gridsterItem = this.widgetList.find((item: any) => \r\n item.widgetInfo && item.widgetInfo.widgetInstanceId === widgetInfo.widgetInstanceId\r\n );\r\n \r\n if (gridsterItem && gridsterItem.widgetElement) {\r\n // Wait for DOM to update after data load - use multiple attempts to catch async rendering\r\n this.measureAndUpdateWidgetDimensions(gridsterItem, 0);\r\n }\r\n }\r\n\r\n /**\r\n * Measure widget content and update dimensions, with retry logic for async data loading\r\n */\r\n private measureAndUpdateWidgetDimensions(gridsterItem: any, attempt: number = 0, maxAttempts: number = 8) {\r\n setTimeout(() => {\r\n // Get the actual rendered height of the widget content\r\n const widgetElement = gridsterItem.widgetElement;\r\n let element: HTMLElement | null = null;\r\n \r\n // widgetElement is the ElementRef from widgetLoaded event (wcWrapper.nativeElement)\r\n if (widgetElement) {\r\n if (widgetElement.nativeElement) {\r\n element = widgetElement.nativeElement;\r\n } else if (widgetElement instanceof HTMLElement) {\r\n element = widgetElement;\r\n }\r\n }\r\n \r\n if (!element || this.gridcellHeight <= 0) {\r\n if (attempt < maxAttempts) {\r\n this.measureAndUpdateWidgetDimensions(gridsterItem, attempt + 1, maxAttempts);\r\n }\r\n return;\r\n }\r\n \r\n // Find the table body or grid content that contains the actual data rows\r\n const tbody = element.querySelector('tbody') as HTMLElement;\r\n const table = element.querySelector('table') as HTMLElement;\r\n const wcBody = element.querySelector('.wcBody') as HTMLElement;\r\n const wc = element.querySelector('.wc') as HTMLElement;\r\n const kendoGridContent = element.querySelector('.k-grid-content') as HTMLElement;\r\n const kendoGridTable = element.querySelector('.k-grid-table') as HTMLElement;\r\n \r\n // Measure the actual content height - try multiple strategies to get accurate measurement\r\n let contentHeight = 0;\r\n let measuredElement: HTMLElement | null = null;\r\n \r\n // Strategy 1: Measure table body (most accurate for row count)\r\n if (tbody) {\r\n measuredElement = tbody;\r\n // Count actual rows and calculate height\r\n const rows = tbody.querySelectorAll('tr');\r\n if (rows.length > 0) {\r\n // Get height of first row to estimate\r\n const firstRow = rows[0] as HTMLElement;\r\n const rowHeight = firstRow.offsetHeight || 30; // Default row height if not available\r\n // Calculate total height based on row count\r\n const estimatedHeight = rows.length * rowHeight;\r\n // Use scrollHeight if available, otherwise use estimated\r\n contentHeight = Math.max(tbody.scrollHeight, estimatedHeight);\r\n } else {\r\n contentHeight = tbody.scrollHeight;\r\n }\r\n } \r\n // Strategy 2: Measure Kendo grid content\r\n else if (kendoGridContent) {\r\n measuredElement = kendoGridContent;\r\n contentHeight = kendoGridContent.scrollHeight;\r\n // Also check the table inside\r\n if (kendoGridTable) {\r\n const tableHeight = kendoGridTable.scrollHeight;\r\n contentHeight = Math.max(contentHeight, tableHeight);\r\n }\r\n }\r\n // Strategy 3: Measure table\r\n else if (table) {\r\n measuredElement = table;\r\n contentHeight = table.scrollHeight;\r\n } \r\n // Strategy 4: Measure widget content\r\n else if (wc) {\r\n measuredElement = wc;\r\n contentHeight = wc.scrollHeight;\r\n } \r\n // Strategy 5: Measure widget body\r\n else if (wcBody) {\r\n measuredElement = wcBody;\r\n contentHeight = wcBody.scrollHeight;\r\n } \r\n // Fallback: measure the wrapper\r\n else {\r\n measuredElement = element;\r\n contentHeight = element.scrollHeight;\r\n }\r\n \r\n // If scrollHeight seems constrained, try alternative measurements\r\n if (measuredElement) {\r\n // Check if scrollHeight is accurate (should be > clientHeight if content overflows)\r\n const scrollH = measuredElement.scrollHeight;\r\n const clientH = measuredElement.clientHeight;\r\n const offsetH = measuredElement.offsetHeight;\r\n \r\n // If scrollHeight equals clientHeight and seems too small, content might be constrained\r\n if (scrollH === clientH && scrollH < 200) {\r\n // Try offsetHeight\r\n contentHeight = Math.max(contentHeight, offsetH);\r\n }\r\n \r\n // For tables, also try measuring all rows directly\r\n if (tbody || table) {\r\n const allRows = (tbody || table)?.querySelectorAll('tr') || [];\r\n if (allRows.length > 0) {\r\n let totalRowHeight = 0;\r\n allRows.forEach((row: HTMLElement) => {\r\n totalRowHeight += row.offsetHeight || 30;\r\n });\r\n // Use the maximum of scrollHeight and calculated row heights\r\n contentHeight = Math.max(contentHeight, totalRowHeight);\r\n }\r\n }\r\n }\r\n \r\n // Get header height\r\n const header = element.querySelector('.wcheader') as HTMLElement;\r\n const headerHeight = header ? header.offsetHeight : 46;\r\n \r\n // Calculate total height needed (content + header + padding)\r\n // Add sufficient padding to ensure no scrolling\r\n const padding = 40; // Padding for margins and spacing\r\n const totalHeight = contentHeight + headerHeight + padding;\r\n \r\n // Check if content is loaded (reasonable height)\r\n // For expanded view, we expect significant content\r\n const hasValidContent = contentHeight > 100 || (attempt >= 3 && contentHeight > 50);\r\n \r\n if (!hasValidContent && attempt < maxAttempts) {\r\n // Content not fully loaded, retry with longer delay\r\n this.measureAndUpdateWidgetDimensions(gridsterItem, attempt + 1, maxAttempts);\r\n return;\r\n }\r\n \r\n // Calculate rows needed based on grid cell height\r\n // Use Math.ceil to ensure we have enough space (round up)\r\n const calculatedRows = Math.ceil(totalHeight / this.gridcellHeight);\r\n \r\n // Add a small buffer (0.5 rows) to ensure no scrolling, then round up\r\n // This accounts for any rounding errors or minor spacing issues\r\n const bufferedRows = calculatedRows + 0.5;\r\n const newRows = Math.max(Math.ceil(bufferedRows), 4);\r\n \r\n // For expanded view, use full available width (no spacing needed since widgets stack vertically)\r\n const maxCols = this.responsiveService.maxColsDesktop || 12;\r\n const newCols = maxCols; // Full width\r\n \r\n // Update gridster item dimensions if changed\r\n const needsUpdate = gridsterItem.rows !== newRows || gridsterItem.cols !== newCols || gridsterItem.x !== 0;\r\n \r\n if (needsUpdate) {\r\n gridsterItem.rows = newRows;\r\n gridsterItem.cols = newCols;\r\n gridsterItem.x = 0; // Always start at the beginning of the row (full width)\r\n \r\n // Update widget info\r\n if (gridsterItem.widgetInfo) {\r\n gridsterItem.widgetInfo.height = newRows;\r\n gridsterItem.widgetInfo.width = newCols;\r\n gridsterItem.widgetInfo.position_x = 0; // Start at position 0 for full width\r\n }\r\n \r\n // Reposition widgets to prevent overlapping after dimension change\r\n this.repositionWidgetsAfterDimensionChange();\r\n \r\n // Force gridster to recalculate layout\r\n this.ngZone.run(() => {\r\n // Trigger change detection by updating the array reference\r\n this.widgetList = [...this.widgetList];\r\n \r\n // Call optionsChanged if API is available\r\n if (this.options && this.options.api) {\r\n this.options.api?.optionsChanged!();\r\n }\r\n \r\n // Update area height after dimensions change\r\n setTimeout(() => {\r\n this.setAreaHeight();\r\n \r\n // Re-verify height after layout update to ensure accuracy\r\n // Check if there's still scrolling and adjust if needed\r\n if (attempt < maxAttempts - 1) {\r\n setTimeout(() => {\r\n // Re-measure to verify the height is correct\r\n const widgetEl = gridsterItem.widgetElement;\r\n let el: HTMLElement | null = null;\r\n if (widgetEl) {\r\n el = widgetEl.nativeElement || widgetEl;\r\n }\r\n \r\n if (el) {\r\n const wcBody = el.querySelector('.wcBody') as HTMLElement;\r\n const tbody = el.querySelector('tbody') as HTMLElement;\r\n const contentEl = tbody || wcBody || el;\r\n \r\n // Check if there's scrolling (scrollHeight > clientHeight)\r\n if (contentEl && contentEl.scrollHeight > contentEl.clientHeight + 10) {\r\n // Still has scrolling, need more height\r\n const additionalHeight = contentEl.scrollHeight - contentEl.clientHeight;\r\n const additionalRows = Math.ceil(additionalHeight / this.gridcellHeight);\r\n if (additionalRows > 0) {\r\n gridsterItem.rows = gridsterItem.rows + additionalRows;\r\n if (gridsterItem.widgetInfo) {\r\n gridsterItem.widgetInfo.height = gridsterItem.rows;\r\n }\r\n this.widgetList = [...this.widgetList];\r\n if (this.options && this.options.api) {\r\n this.options.api?.optionsChanged!();\r\n }\r\n setTimeout(() => this.setAreaHeight(), 100);\r\n }\r\n }\r\n }\r\n \r\n // Continue with normal retry logic\r\n this.measureAndUpdateWidgetDimensions(gridsterItem, attempt + 1, maxAttempts);\r\n }, 400);\r\n }\r\n }, 200);\r\n });\r\n } else if (attempt < maxAttempts - 1) {\r\n // Dimensions didn't change, but verify one more time that content is fully loaded\r\n this.measureAndUpdateWidgetDimensions(gridsterItem, attempt + 1, maxAttempts);\r\n }\r\n }, attempt === 0 ? 1500 : attempt < 3 ? 800 : 500); // Longer initial wait for data to fully render\r\n }\r\n\r\n /**\r\n * Reposition widgets to prevent overlapping after dimension changes in expanded view\r\n * When 2 widgets are in the same row, the 2nd widget moves to next row after the 1st widget's height\r\n */\r\n private repositionWidgetsAfterDimensionChange() {\r\n if (this.widgetList.length === 0) return;\r\n\r\n // Sort widgets by their original Y position (row), then by X position (left to right)\r\n const sortedWidgets = [...this.widgetList].sort((a, b) => {\r\n const aY = a.y || 0;\r\n const bY = b.y || 0;\r\n if (aY !== bY) {\r\n return aY - bY;\r\n }\r\n // If same row, sort by X position (left to right)\r\n return (a.x || 0) - (b.x || 0);\r\n });\r\n\r\n // Group widgets by their original row (Y position) before repositioning\r\n const rowGroups = new Map<number, any[]>();\r\n sortedWidgets.forEach(widget => {\r\n const originalY = widget.y || 0;\r\n if (!rowGroups.has(originalY)) {\r\n rowGroups.set(originalY, []);\r\n }\r\n rowGroups.get(originalY)!.push(widget);\r\n });\r\n\r\n // Sort rows by Y position\r\n const sortedRows = Array.from(rowGroups.entries()).sort((a, b) => a[0] - b[0]);\r\n\r\n let currentY = 0;\r\n\r\n // Process each original row\r\n sortedRows.forEach(([originalRowY, widgetsInRow]) => {\r\n // Sort widgets in this row by X position (left to right)\r\n widgetsInRow.sort((a, b) => (a.x || 0) - (b.x || 0));\r\n\r\n // Process widgets sequentially: first widget at currentY, subsequent widgets after previous widget's height\r\n // All widgets get x=0 since they take full width and stack vertically\r\n widgetsInRow.forEach((widget, index) => {\r\n if (index === 0) {\r\n // First widget in row: place at currentY\r\n widget.y = currentY;\r\n } else {\r\n // Subsequent widgets: place after the previous widget's bottom edge\r\n const previousWidget = widgetsInRow[index - 1];\r\n const previousWidgetHeight = previousWidget.rows || 0;\r\n const previousWidgetY = previousWidget.y || 0;\r\n widget.y = previousWidgetY + previousWidgetHeight;\r\n }\r\n \r\n // Set x to 0 for all widgets (full width, no horizontal spacing)\r\n widget.x = 0;\r\n \r\n // Update widget info\r\n if (widget.widgetInfo) {\r\n widget.widgetInfo.position_y = widget.y;\r\n widget.widgetInfo.position_x = 0; // Full width, start at position 0\r\n }\r\n });\r\n\r\n // Calculate where the next row should start\r\n // If multiple widgets in row, use the last widget's bottom edge\r\n // Otherwise, use the first widget's bottom edge\r\n if (widgetsInRow.length > 0) {\r\n const lastWidget = widgetsInRow[widgetsInRow.length - 1];\r\n const lastWidgetY = lastWidget.y || 0;\r\n const lastWidgetHeight = lastWidget.rows || 0;\r\n currentY = lastWidgetY + lastWidgetHeight;\r\n }\r\n });\r\n }\r\n\r\n private isElementLoaded(el: any) {\r\n if (el) {\r\n let rect = el.getBoundingClientRect();\r\n const height = rect.height;\r\n if(this.hasGrid){\r\n const effectiveCount = (this.widgetList.length % 2 === 1) ? this.widgetList.length + 1 : this.widgetList.length;\r\n const multiplier = Math.max(1, effectiveCount / 2);\r\n this.gridsterHeight = (height + 20) * multiplier + 'px';\r\n }\r\n return rect && rect.top < window.innerHeight;\r\n }\r\n }\r\n\r\n private loadWidgetWrappers(isInitialLoad: boolean = true) {\r\n let widgets: GridsterItem[] = this.mapObjectListToGridsterItemList(this.userWidgets);\r\n\r\n this.widgetList.push(...widgets);\r\n this.setAreaHeight();\r\n }\r\n\r\n /** To initiate eventbus subsctiptions */\r\n inititateEventBusSubscritions() {\r\n this.widgetDeleteEvent = this.raDashboardEventBus.subscribe(RAEvent.WidgetDelete).subscribe((instanceId) => {\r\n this.ngZone.run(() => {\r\n this.deleteWidget(instanceId, true);\r\n });\r\n });\r\n\r\n this.widgetAddEvent = this.raDashboardEventBus.subscribe(RAEvent.AddWidget).subscribe((widgetInfo) => {\r\n this.ngZone.run(() => {\r\n this.copyWidget(widgetInfo);\r\n });\r\n });\r\n\r\n this.conifgAddClick = this.raDashboardEventBus.subscribe(RAEvent.ConfigAddClick).subscribe((e) => {\r\n this.ngZone.run(() => {\r\n this.addWidget(e);\r\n });\r\n });\r\n\r\n this.curatedFilterChange = this.raDashboardEventBus.subscribe(RAEvent.CuratedFilterChange).subscribe((e) => {\r\n this.ngZone.run(() => {\r\n this.loadWidgets(this.userDashboardId, this.areaKey);\r\n });\r\n });\r\n\r\n this.rearrangeWidgetClick = this.raDashboardEventBus.subscribe(RAEvent.RearrangeClicked).subscribe((e) => {\r\n this.ngZone.run(() => {\r\n this.rearrangeWidgets();\r\n });\r\n });\r\n\r\n this.widgetLibraryDoneClick = this.raDashboardEventBus.subscribe(RAEvent.widgetLibraryDoneClick).subscribe((widgetList) => {\r\n this.ngZone.run(() => {\r\n if (widgetList) {\r\n this.addWidgetListToGridster(widgetList, 0);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * temp fix- recursive method to iterate over the list of items\r\n * and add them to gridster in the given order\r\n * @param widgetList -list of widgets\r\n * @param index -index of the current value to be added\r\n */\r\n addWidgetListToGridster(widgetList: any, index: number) {\r\n let areaContext = this;\r\n let indexVal = index + 1;\r\n if (index > widgetList.length - 1)\r\n return;\r\n else {\r\n if (index == 0) {\r\n areaContext.addWidget(widgetList[index]);\r\n areaContext.addWidgetListToGridster(widgetList, indexVal);\r\n }\r\n else {\r\n setTimeout(() => {\r\n areaContext.addWidget(widgetList[index]);\r\n areaContext.addWidgetListToGridster(widgetList, indexVal);\r\n }, 1000);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.conifgAddClick)\r\n this.conifgAddClick.unsubscribe();\r\n\r\n if (this.widgetAddEvent)\r\n this.widgetAddEvent.unsubscribe();\r\n\r\n if (this.widgetDeleteEvent)\r\n this.widgetDeleteEvent.unsubscribe();\r\n\r\n if (this.widgetLibraryDoneClick)\r\n this.widgetLibraryDoneClick.unsubscribe();\r\n\r\n if (this.rearrangeWidgetClick)\r\n this.rearrangeWidgetClick.unsubscribe();\r\n\r\n if (this.curatedFilterChange)\r\n this.curatedFilterChange.unsubscribe();\r\n\r\n if (this.bulkActionClick)\r\n this.bulkActionClick.unsubscribe();\r\n if (this.calculateLayout)\r\n this.calculateLayout.unsubscribe();\r\n }\r\n\r\n /**To update position/dimention of all widgets in the area */\r\n updateWidgets() {\r\n this.dashboardService.updateWidgets(this.formatWidgetDataForPositionDetails(this.mapGridsterListToObject(this.widgetList)),\r\n this.appConfig).subscribe(widgets => {\r\n });\r\n return true;\r\n }\r\n\r\n /**To update widget dimensions */\r\n updateWidgetPosition(widgetInstanceId: number) {\r\n\r\n let widgetFilteredList = [];\r\n let widget = this.widgetList.filter(filtered => filtered.widgetInfo && filtered.widgetInfo.widgetInstanceId == widgetInstanceId);\r\n if (widget && widget.length > 0) {\r\n widgetFilteredList.push(widget[0]);\r\n let widgetList = this.mapGridsterListToObject(widgetFilteredList);\r\n this.dashboardService.updateWidgets(this.formatWidgetDataForPositionDetails(widgetList), this.appConfig).subscribe(widgets => {\r\n });\r\n }\r\n return true;\r\n }\r\n\r\n /**To restrict request payload to be of min size (position & size details) */\r\n formatWidgetDataForPositionDetails(widgetItemList: IWidgetInfo[]) {\r\n let itemList: any = [];\r\n widgetItemList.forEach(function (widgetItem) {\r\n let item = {} as IWidgetInfo;\r\n item.widgetInstanceId = widgetItem.widgetInstanceId;\r\n item.position_x = widgetItem.position_x;\r\n item.position_y = widgetItem.position_y;\r\n item.width = widgetItem.width;\r\n item.height = widgetItem.height;\r\n itemList.push(item);\r\n });\r\n return itemList;\r\n }\r\n\r\n /** To retrieve widgets based on userDashboardid and area name */\r\n loadWidgets(userDashboarId: number, areaKey: string) {\r\n if (this.templateConfig && this.templateConfig.initialWidgetCount)\r\n this.initialWidgetCount = this.templateConfig.initialWidgetCount;\r\n window.scrollTo(0, 0);\r\n if (location.href.indexOf('/kiosk/') > -1)\r\n this.initialWidgetCount = 1000;\r\n\r\n let widgetInfo = <IWidgetInfo>{\r\n dashboardId: userDashboarId.toString(),\r\n dashboardAreaKey: areaKey,\r\n isIndicatorDashboard: this.isIndicatorDashboard\r\n }\r\n \r\n let _the = this;\r\n this.isSiteDetailDashboard = this.dashboardInfo?.templateName === 'Site Detail';\r\n // Check if expanded view is requested\r\n //const isExpandedView = new URLSearchParams(window.location.search).get('expanded') === 'true';\r\n this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe(widgets => {\r\n if(this.isSiteDetailDashboard){\r\n widgets = this.arrangeWidgetsInTwoColumnGrid(widgets);\r\n }\r\n _the.widgetList = [];\r\n this.userWidgets = widgets;\r\n this.PAMWidgets = [];\r\n widgets.forEach((element: any) => {\r\n var settings: any = undefined\r\n if (element.widgetSettings) {\r\n settings = JSON.parse(element.widgetSettings);\r\n if (settings && settings.isPAMWidget)\r\n this.PAMWidgets.push(element.widgetInstanceId);\r\n }\r\n if(this.isSiteDetailDashboard)\r\n element.templateSettings = JSON.stringify(this.dashboardInfo?.templateConfig?.widget);\r\n });\r\n this.checkPAMWidgets();\r\n if( this.dashboardInfo?.isReport && widgets && widgets.length> this.reportDatastreamLimit){\r\n this.showDownloadOnlyState = true;\r\n this.raDashboardEventBus.publish(RAEvent.DownloadOnlyState, this.showDownloadOnlyState);\r\n }\r\n else if (widgets && widgets.length > 0) {\r\n this.showDownloadOnlyState = false;\r\n this.dashboardService.clientId = widgets[0].clientId;\r\n this.loadWidgetWrappers();\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, false);\r\n }\r\n else {\r\n this.showDownloadOnlyState = false;\r\n this.showEmptyDashboard = true;\r\n if (this.isSiteDetailDashboard) {\r\n this.showDownloadOnlyState = false;\r\n this.showEmptyDashboard = false;\r\n }\r\n else {\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, this.showEmptyDashboard);\r\n }\r\n }\r\n this.raDashboardEventBus.publish(RAEvent.UpdateWidgetCount, this.userWidgets.length);\r\n });\r\n }\r\n\r\n /**\r\n * Arranges widgets in a 2-column grid layout for Site Detail dashboard\r\n * @param widgets - Array of widget objects to be arranged\r\n * @returns Modified widgets array with updated positions and dimensions. If more widgets exist than maxWidgetCount, only the last N widgets are positioned in the grid.\r\n * \r\n * Layout pattern (for last N widgets in 2-column layout):\r\n * - Widget n-3: x=0, y=0 (top-left)\r\n * - Widget n-2: x=4, y=0 (top-right)\r\n * - Widget n-1: x=0, y=2 (second row-left)\r\n * - Widget n: x=4, y=2 (second row-right)\r\n * \r\n * Additional widgets beyond maxWidgetCount are removed from the beginning of the array.\r\n */\r\n arrangeWidgetsInTwoColumnGrid(widgets: any) {\r\n const colWidth = 4;\r\n const rowHeight = 2;\r\n const maxWidgets = this.templateConfig?.maxWidgetCount || 4;\r\n \r\n // If more widgets than allowed, keep only the last N widgets\r\n if (widgets.length > maxWidgets) {\r\n widgets = widgets.slice(-maxWidgets);\r\n }\r\n \r\n widgets.forEach((widget: any, index: number) => {\r\n const row = Math.floor(index / 2);\r\n const col = index % 2;\r\n \r\n widget.position_x = col * colWidth; // 0 for left column, 4 for right column\r\n widget.position_y = row * rowHeight; // 0, 2, 4, etc.\r\n widget.width = colWidth;\r\n widget.height = rowHeight;\r\n });\r\n return widgets;\r\n }\r\n /** To set Area(Gridster) height dynamically as widgets are added/removed */\r\n setAreaHeight() {\r\n setTimeout(() => {\r\n let isMobile: boolean = false;\r\n if (this.options.mobileBreakpoint! > this.gridWrapper.nativeElement.clientWidth) {\r\n isMobile = true;\r\n }\r\n let areaScrollHeight = 0;\r\n let areaHeight = 0;\r\n let curRowHeight = 0;\r\n if (this.options.api) {\r\n curRowHeight = this.options.api.getCurrentRowHeight!();\r\n }\r\n\r\n if (this.isSiteDetailDashboard) {\r\n this.showEmptyDashboard = false;\r\n } else {\r\n this.showEmptyDashboard = this.userWidgets.length === 0;\r\n }\r\n\r\n this.widgetList.forEach((t) => {\r\n let currentHeight = t.y! + t.rows;\r\n if (currentHeight > areaScrollHeight) {\r\n areaScrollHeight = currentHeight;\r\n }\r\n if (curRowHeight == 0) {\r\n currentHeight = this.widgetList[0].curRowHeight!;\r\n }\r\n t.widgetInfo.rowHeight = curRowHeight;\r\n });\r\n this.gridcellHeight = curRowHeight;\r\n if (this.options.api) {\r\n areaHeight = areaScrollHeight * this.options.api.getCurrentRowHeight!() + 100;\r\n }\r\n let areaScrollHeightMob = 0;\r\n if (isMobile) {\r\n areaScrollHeightMob = this.widgetList.length * 300 + 200;\r\n areaHeight = areaScrollHeightMob;\r\n }\r\n if (areaHeight < 600) {\r\n areaHeight = 600;\r\n }\r\n this.gridheight = areaHeight;\r\n if (this.hasGrid) {\r\n const baseHeight = this.gridItem?.height; // gridster container current height\r\n if (baseHeight) {\r\n const effectiveCount = (this.widgetList.length % 2 === 1) ? this.widgetList.length + 1 : this.widgetList.length;\r\n const multiplier = Math.max(1, effectiveCount / 2);\r\n this.gridsterHeight = (baseHeight + 20) * multiplier + 'px';\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** To remove a widget instance from dashboard and to save info in database */\r\n deleteWidget(widgetInstanceId: any, isalertDisabled: boolean = false) {\r\n\r\n let widget = this.userWidgets.filter((item) => {\r\n return item.widgetInstanceId === widgetInstanceId;\r\n });\r\n if (widget.length > 0) {\r\n this.userWidgets.splice(this.userWidgets.indexOf(widget[0]), 1);\r\n }\r\n\r\n if (this.PAMWidgets.length > 0) {\r\n var indx = this.PAMWidgets.indexOf(widgetInstanceId);\r\n if (indx > -1)\r\n this.PAMWidgets.splice(indx, 1);\r\n this.checkPAMWidgets();\r\n }\r\n\r\n let gridsterItem = this.widgetList.filter((item) => {\r\n return item.widgetInfo.widgetInstanceId === widgetInstanceId;\r\n });\r\n if (gridsterItem.length > 0) {\r\n this.widgetList.splice(this.widgetList.indexOf(gridsterItem[0]), 1);\r\n this.setAreaHeight();\r\n if (!isalertDisabled) {\r\n this.notifier.notify('success', \" \" + this.translateService.translate('Common.Widgettext') + \" \" + gridsterItem[0].widgetInfo.widgetTitle + \" \" + this.translateService.translate('Common.deletedSuccesfully') + \" \");\r\n }\r\n }\r\n this.showEmptyDashboard = this.userWidgets.length > 0 ? false : true;\r\n if (this.showEmptyDashboard == true && !this.isSiteDetailDashboard) {\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, this.showEmptyDashboard);\r\n }\r\n if(this.isSiteDetailDashboard){\r\n this.raDashboardEventBus.publish(RAEvent.UpdateWidgetCount, -1);\r\n this.raDashboardEventBus.publish(RAEvent.RearrangeClicked, true);\r\n }\r\n }\r\n\r\n /**To rearrange widgets position in the dashboard, compactLeft&Up,compactLeft,compactUp,etc*/\r\n rearrangeWidgets() {\r\n\r\n for (let i = 0; i < this.userWidgets.length; i++) {\r\n this.userWidgets[i].position_x = 0;\r\n this.userWidgets[i].position_y = 0;\r\n }\r\n\r\n this.widgetList = [];\r\n this.loadWidgetWrappers();\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, false);\r\n\r\n if (this.widgetList.length > 0)\r\n this.updateWidgetPosition(this.widgetList[0].widgetInfo.widgetInstanceId);\r\n setTimeout(() => {\r\n this.setAreaHeight();\r\n });\r\n\r\n }\r\n\r\n /**To add widget instance to the database with the next available position and to make changes in\r\n * dashboard area.\r\n */\r\n addWidget(data: any) {\r\n data.height = this.widgetHeight;\r\n data.width = this.widgetWidth;\r\n this.raDashboardEventBus.publish(RAEvent.HideDashboardBanner, false);\r\n if (data.widgetSettings) {\r\n if (typeof data.widgetSettings === 'string')\r\n data.widgetSettings = JSON.parse(data.widgetSettings);\r\n\r\n if (data.widgetSettings.defaultCols) {\r\n data.width = data.widgetSettings.defaultCols;\r\n }\r\n if (data.widgetSettings.defaultRows) {\r\n data.height = data.widgetSettings.defaultRows;\r\n }\r\n data.widgetSettings = null;\r\n }\r\n data = this.setPositions(data);\r\n\r\n /** to find the available position in gridster, temp commenting the code-returning higher y value than normal */\r\n data.dashboardAreaKey = this.areaKey;\r\n data.dashboardId = this.userDashboardId;\r\n this.ngxService.start();\r\n this.dashboardService.addWidget(data, this.appConfig).subscribe(widget => {\r\n if(this.isSiteDetailDashboard)\r\n widget.templateSettings = JSON.stringify(this.dashboardInfo?.templateConfig?.widget);\r\n this.userWidgets.push(widget);\r\n let gridsterItem = this.responsiveService.getGridsterItem(widget);\r\n this.widgetList.push(gridsterItem);\r\n this.setAreaHeight();\r\n\r\n if (this.options.api) {\r\n let curRowHeight: number = Number(this.options.api.getCurrentRowHeight!());\r\n if (curRowHeight > 0) {\r\n widget.rowHeight = curRowHeight;\r\n this.gridcellHeight = curRowHeight;\r\n }\r\n }\r\n var widgetInstanceId = 0;\r\n if (widget && widget.widgetInstanceId) {\r\n widgetInstanceId = widget.widgetInstanceId;\r\n /**To save added widget position in db */\r\n if (this.responsiveService.IsDesktopView) {\r\n setTimeout(() => {\r\n this.updateWidgetPosition(widgetInstanceId);\r\n });\r\n }\r\n }\r\n if (widget.settings && widget.settings.isPAMWidget) {\r\n this.PAMWidgets.push(widget.widgetInstanceId);\r\n this.checkPAMWidgets();\r\n }\r\n\r\n this.raDashboardEventBus.publish(RAEvent.WidgetAdded, widget);\r\n });\r\n }\r\n\r\n private setPositions(data: any) {\r\n data.position_x = 0;\r\n data.position_y = 0;\r\n if (!this.responsiveService.IsDesktopView) {\r\n if (this.userWidgets.length > 0) {\r\n let widget = this.userWidgets[this.userWidgets.length - 1];\r\n if (widget.position_x + widget.width > (this.responsiveService.maxColsDesktop / 2)) {\r\n data.position_y = widget.position_y + 1;\r\n }\r\n else {\r\n data.position_y = widget.position_y;\r\n data.position_x = this.responsiveService.maxColsDesktop - (widget.position_x + widget.width);\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n /** To add widget to current widget list ,invoked from copy widget window*/\r\n copyWidget(data: any) {\r\n data = this.setPositions(data);\r\n if (!this.responsiveService.IsDesktopView) {\r\n this.dashboardService.updateWidgets(this.formatWidgetDataForPositionDetails([data]), this.appConfig).subscribe(widgets => {\r\n });\r\n }\r\n this.userWidgets.push(data);\r\n let gridsterItem = this.responsiveService.getGridsterItem(data);\r\n this.widgetList.push(gridsterItem);\r\n this.setAreaHeight();\r\n if (data.settings && data.settings.isPAMWidget) {\r\n this.PAMWidgets.push(data.widgetInstanceId);\r\n this.checkPAMWidgets();\r\n }\r\n\r\n }\r\n\r\n mapObjectListToGridsterItemList(widgetList: Array<IWidgetInfo>) {\r\n let widgetArray = Array<GridsterItem>();\r\n widgetList.forEach(widget => {\r\n widgetArray.push(this.responsiveService.getGridsterItem(widget));\r\n });\r\n return widgetArray;\r\n }\r\n\r\n mapGridsterItemToObject(widgetItem: GridsterItem) {\r\n let widget: IWidgetInfo;\r\n widget = widgetItem.widgetInfo;\r\n widget.height = widgetItem.rows;\r\n widget.width = widgetItem.cols;\r\n widget.position_x = widgetItem.x!;\r\n widget.position_y = widgetItem.y!;\r\n widget.rowHeight = widgetItem.curRowHeight!;\r\n return widget;\r\n }\r\n\r\n mapGridsterListToObject(widgetItemList: Array<GridsterItem>) {\r\n let widgetListArray = Array<IWidgetInfo>();\r\n widgetItemList.forEach(widget => {\r\n widgetListArray.push(this.mapGridsterItemToObject(widget));\r\n });\r\n return widgetListArray;\r\n }\r\n\r\n public buttonClick() {\r\n if (this.emptyDashboardButtonAction == \"widgets\")\r\n this.raDashboardEventBus.publish(RAEvent.AddNewWidgetToDashboard, null);\r\n else if (this.emptyDashboardButtonAction == \"filter\")\r\n this.raDashboardEventBus.publish(RAEvent.GlobalFilterClick, null);\r\n else if (this.emptyDashboardButtonAction == \"download\")\r\n this.raDashboardEventBus.publish(RAEvent.DownloadExcelClick, null);\r\n }\r\n public buttonActionClick(action:any) {\r\n if (action == \"filter\")\r\n this.raDashboardEventBus.publish(RAEvent.GlobalFilterClick, null);\r\n else if (action == \"download\")\r\n this.raDashboardEventBus.publish(RAEvent.DownloadExcelClick, null);\r\n }\r\n\r\n public updateAppliedFilters(data: any) {\r\n this.raDashboardEventBus.publish(RAEvent.UpdateAppledFiterForInapplicableFilter, data);\r\n }\r\n\r\n public checkPAMWidgets() {\r\n if (this.PAMWidgets.length > 0) {\r\n this.raDashboardEventBus.publish(RAEvent.ShowInapplicableFilterMessage, true);\r\n }\r\n else {\r\n this.raDashboardEventBus.publish(RAEvent.ShowInapplicableFilterMessage, false);\r\n }\r\n }\r\n\r\n}","<div #gridWrapper class=\"wrap gridster gridster-mobile\" [ngClass]=\"{'no-hover': isSiteDetailDashboard}\"\r\n [ngStyle]=\"{'height': (userWidgets.length > 0 && !showDownloadOnlyState) && !hasGrid ? ( gridheight + 'px') : 'unset'}\">\r\n <!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [style.min-height]=\"gridsterHeight + '!important'\" [options]=\"options\" style=\"height:100%;\" *ngIf=\"userWidgets.length > 0 && !showDownloadOnlyState\">\r\n <gridster-item #gridItem [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container (widgetLoaded)=\"widgetLoaded($event, item)\" [canLoadData]=\"item.canLoadData\" (dataLoaded)=\"dataLoaded($event)\"\r\n [bulk-action-data]=\"bulkActionData\" [dashboard-info]=\"dashboardInfo\" [app-config]=\"appConfig\"\r\n [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\r\n [global-filter]=\"globalFilter\" [grid-cell-height]=\"gridcellHeight\" *ngIf=\"gridcellHeight && gridcellHeight > 0\"\r\n [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"\r\n [dom-resized]=\"domResized\" (updateAppliedFilters)=\"updateAppliedFilters($event)\">\r\n </ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showEmptyDashboard\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{emptyDashboardTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{emptyDashboardMsg1}} <br />\r\n {{emptyDashboardMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonClick()\">\r\n <i class=\"{{emptyDashboardButtonIcon}}\"></i>{{emptyDashboardButtonText}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"empty-padding kiosk-hide\" *ngIf=\"showDownloadOnlyState\">\r\n <div class=\"empty-wrapper\">\r\n <div></div>\r\n <div class=\"empty-prefix\">\r\n <!-- <i class=\"fal fa-edit edit-icon\"></i> -->\r\n <span>{{DownloadOnlyStateTitle}}</span>\r\n </div>\r\n <hr class=\"horizontalLine-solid\" />\r\n <div class=\"empty-content light\">\r\n <div>\r\n <div class=\"col-sm-12 empty-msg\">\r\n {{DownloadOnlyStateMsg1}} <br />\r\n {{DownloadOnlyStateMsg2}}\r\n </div>\r\n <button *ngIf=\"isWidgetMgmnt\" class=\"btn btnLib btn-sm dashboard-button light\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction1)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon1}}\"></i>{{DownloadOnlyStateButtonText1}}</button>\r\n <button class=\"btn btnLib btn-sm dashboard-button light button-margin\" (click)=\"buttonActionClick(DownloadOnlyStateButtonAction2)\">\r\n <i class=\"{{DownloadOnlyStateButtonIcon2}}\"></i>{{DownloadOnlyStateButtonText2}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <notifier-container></notifier-container>\r\n</div>\r\n","import { NotifierOptions } from \"angular-notifier\";\r\n\r\nexport const customNotifierOptions: NotifierOptions = {\r\n position: {\r\n horizontal: {\r\n position: 'right',\r\n distance: 12\r\n },\r\n vertical: {\r\n position: 'top',\r\n distance: 12,\r\n gap: 10\r\n }\r\n },\r\n theme: 'material',\r\n behaviour: {\r\n autoHide: 5000,\r\n onClick: 'hide',\r\n onMouseover: 'pauseAutoHide',\r\n showDismissButton: true,\r\n stacking: 4\r\n },\r\n animations: {\r\n enabled: true,\r\n show: {\r\n preset: 'slide',\r\n speed: 300,\r\n easing: 'ease'\r\n },\r\n hide: {\r\n preset: 'fade',\r\n speed: 300,\r\n easing: 'ease',\r\n offset: 50\r\n },\r\n shift: {\r\n speed: 300,\r\n easing: 'ease'\r\n },\r\n overlap: 150\r\n }\r\n };\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { GridsterComponent } from './gridster.component';\r\nimport { GridsterItemComponent } from './gridsterItem.component';\r\n\r\n@NgModule({\r\n imports: [GridsterComponent, GridsterItemComponent],\r\n exports: [GridsterComponent, GridsterItemComponent]\r\n})\r\nexport class GridsterModule {}\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NotifierModule } from 'angular-notifier';\r\nimport { customNotifierOptions } from './custom.notifier.options';\r\n\r\nimport { GridsterModule } from './../gridster/lib/gridster.module';\r\nimport { RADashboardArea } from './ra-dashboard-area/ra.dashboard.area';\r\nimport { RAWidgetContainer } from './ra-widget-container/ra.widget.container.component';\r\nimport { NgxUiLoaderModule } from 'ngx-ui-loader';\r\nimport { RACommonModule } from '@schneideress/ra-common';\r\nimport { RACommonControlsModule } from '@schneideress/common-controls';\r\nimport { LockTooltip } from './ra-widget-container/lock-tooltip/lock.tooltip.component'\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n RADashboardArea,\r\n RAWidgetContainer,\r\n LockTooltip\r\n ],\r\n imports: [\r\n CommonModule,\r\n GridsterModule,\r\n HttpClientModule,\r\n NgxUiLoaderModule,\r\n NotifierModule.withConfig(customNotifierOptions),\r\n RACommonModule,\r\n RACommonControlsModule\r\n ],\r\n exports: [\r\n RADashboardArea\r\n ],\r\n bootstrap: [RADashboardArea]\r\n})\r\nexport class DashboardFrameworkModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class RADashboardEventBus {\r\n\r\n private eventQueue: Subject<any> = new Subject();\r\n\r\n /**\r\n * To emit an event with the name & data\r\n */\r\n public publish(eventName: string, data: any) {\r\n this.eventQueue.next({ eventName, data })\r\n }\r\n\r\n /**\r\n * To emit an event with the name, data, key & value\r\n */\r\n public publishWithKey(eventName: string, data: any, key: string, value: string) {\r\n this.eventQueue.next({ eventName, data, key, value })\r\n }\r\n\r\n /**\r\n * To subscribe to an event with the name\r\n */\r\n public subscribe(eventName: string): Observable<any> {\r\n return this.eventQueue.asObservable().pipe(\r\n filter((event) => {\r\n return event.eventName == eventName;\r\n }),\r\n map(event => event.data)\r\n )\r\n }\r\n\r\n /**\r\n * To subscribe to an event with the name key & value\r\n */\r\n public subscribeWithKey(eventName: string, key: string, value: string): Observable<any> {\r\n return this.eventQueue.asObservable().pipe(\r\n filter((event) => {\r\n return event.eventName == eventName && event.key == key && event.value == value;\r\n }),\r\n map(event => event.data)\r\n )\r\n }\r\n}","import { Input, OnChanges, SimpleChanges, NgZone, Directive } from '@angular/core';\r\nimport { RADashboardEventBus } from './ra.dashbard.event.bus';\r\nimport { IAppConfig, IDashboardInfo } from '@schneideress/widgetframework';\r\n\r\n@Directive()\r\nexport abstract class RaBaseDashboardTemplate {\r\n\r\n public userDashboardId!: number;\r\n public raDashboardEventBus!: RADashboardEventBus;\r\n public appConfig!: IAppConfig;\r\n public dashboardInfo!: IDashboardInfo;\r\n public isIndicatorDashboard!: boolean;\r\n public templateConfig: any;\r\n\r\n @Input('dashboard-id') dashboardId!: number;\r\n @Input('global-filter') globalFilter: any;\r\n @Input('download-datastream-limit') downloadDatastreamLimit: any;\r\n @Input('report-datastream-limit') reportDatastreamLimit: any;\r\n @Input('bulk_Action_Data') bulkActionData: any;\r\n\r\n constructor(private ngZone: NgZone) {\r\n }\r\n @Input() initialize = (eventBus: RADashboardEventBus, userDashboardId: number, \r\n appConfig: IAppConfig, dashboardInfo: IDashboardInfo, isIndicatorDashboard: boolean, templateConfig?: any) => {\r\n this.ngZone.run(() => {\r\n this.userDashboardId = userDashboardId;\r\n this.appConfig = appConfig;\r\n this.raDashboardEventBus = eventBus;\r\n this.dashboardInfo = dashboardInfo;\r\n this.isIndicatorDashboard = isIndicatorDashboard;\r\n this.templateConfig = templateConfig;\r\n });\r\n this.init();\r\n }\r\n abstract init(): void;\r\n\r\n ngOnInit(): void {\r\n var myEvent = new CustomEvent(\"event-template-initiated\");\r\n document.body.dispatchEvent(myEvent);\r\n }\r\n\r\n\r\n}","import { Directive, Input } from '@angular/core';\r\nimport { IAppConfig } from '@schneideress/widgetframework';\r\n\r\n@Directive()\r\nexport abstract class RaBaseDashboardFilter {\r\n\r\n abstract getFilterConfig(): any;\r\n abstract setFilterConfig(filter: string, appConfig: IAppConfig): any;\r\n abstract clearData(): void;\r\n abstract isValid(): boolean;\r\n abstract showHideInapplicableMsg(status: boolean): any;\r\n abstract showDateRangeControl(isIndicatorDashboard: boolean):any;\r\n\r\n @Input() private getAllFilterConfig = () => {\r\n return this.getFilterConfig();\r\n }\r\n\r\n @Input() setInapplicableFilterMsg = (status: boolean) => {\r\n this.showHideInapplicableMsg(status);\r\n }\r\n\r\n @Input() isValidEntry = () => {\r\n return this.isValid();\r\n }\r\n\r\n @Input() clearAllData = () => {\r\n this.clearData();\r\n }\r\n\r\n @Input() setAllFilterConfig = (globalFilter: string, appConfig: IAppConfig) => {\r\n this.setFilterConfig(globalFilter, appConfig);\r\n }\r\n\r\n @Input() showOnlyDateRangeControl = (isIndicatorDashboard: boolean) => {\r\n this.showDateRangeControl(isIndicatorDashboard)\r\n }\r\n \r\n ngOnInit(): void {\r\n var myEvent = new CustomEvent(\"global-filter-initiated\");\r\n document.body.dispatchEvent(myEvent);\r\n }\r\n}","/*\r\n * Public API Surface of ra-dashboard-framework\r\n */\r\n\r\nexport * from './lib/ra.dashboard.service';\r\nexport * from './lib/ra-dashboard-area/ra.dashboard.area';\r\nexport * from './lib/ra-widget-container/ra.widget.container.component';\r\nexport * from './lib/ra.dashboard.module';\r\nexport * from './lib/ra.dashbard.event.bus';\r\nexport * from './lib/ra.event.enum';\r\nexport * from './lib/ra.base.dashboard.template';\r\nexport * from './lib/ra.base.dashboard.filter';\r\nexport * from './lib/ra.dashboard.responsive.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GridsterComponent","i1","i1.RaDashboardService","i2","i5","i5.RADashboardResponsiveService","i6","i7.GridsterComponent","i8.GridsterItemComponent","i9.RAWidgetContainer"],"mappings":"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"}
|