{"version":3,"file":"DashboardPage.0dfd49f78dc93c695e30.js","mappings":"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a++D,EAAeyE,GAAWrgE,KA+wB1D,SAASM,GAAKiV,GACZ,OA1NgB,OADGvV,EA2NAuV,IA1NKqvD,GAAS5kE,EAAMnD,UAAYumE,GAAWpjE,GA0NjCw/D,GAAcjqD,GAAU8tD,GAAS9tD,GA3NhE,IAAqBvV,EAqQrBw0D,EAAOtR,QAlNP,SAAiBljD,EAAOuzD,GACtB,OAAOqN,GAAY5gE,EAAOuzD,K,iJCrmD5BiB,EAAOtR,QAAU,CACf,eACA,kBACA,qBACA,iBACA,gBACA,aACA,gBACA,mBACA,eACA,cACA,YACA,eACA,kBACA,cACA,aACA,MACA,SACA,YACA,QACA,OACA,YACA,eACA,kBACA,cACA,aACA,iBACA,oBACA,uBACA,mBACA,kBACA,qBACA,wBACA,2BACA,uBACA,sBACA,oBACA,uBACA,0BACA,sBACA,qBACA,oBACA,uBACA,0BACA,sBACA,qBACA,0BACA,6BACA,gCACA,4BACA,2BACA,gBACA,mBACA,sBACA,kBACA,iBACA,qBACA,wBACA,2BACA,uBACA,sBACA,0BACA,6BACA,gCACA,4BACA,2BACA,qBACA,wBACA,2BACA,uBACA,sBACA,aACA,gBACA,mBACA,eACA,cACA,uBACA,0BACA,6BACA,yBACA,wBACA,sBACA,yBACA,4BACA,wBACA,uBACA,iBACA,oBACA,uBACA,mBACA,kBACA,kBACA,qBACA,wBACA,oBACA,mBACA,kBACA,qBACA,wBACA,oBACA,mBACA,mBACA,sBACA,yBACA,qBACA,oBACA,qBACA,wBACA,2BACA,uBACA,sBACA,mBACA,sBACA,yBACA,qBACA,oBACA,iBACA,oBACA,uBACA,mBACA,kBACA,YACA,eACA,kBACA,cACA,aACA,SACA,YACA,eACA,WACA,UACA,iBACA,oBACA,uBACA,mBACA,kBACA,sBACA,yBACA,4BACA,wBACA,uBACA,sBACA,yBACA,4BACA,wBACA,uBACA,sBACA,yBACA,4BACA,wBACA,uBACA,mBACA,sBACA,yBACA,qBACA,oBACA,wBACA,2BACA,8BACA,0BACA,yBACA,wBACA,2BACA,8BACA,0BACA,yBACA,wBACA,2BACA,8BACA,0BACA,yBACA,eACA,kBACA,qBACA,iBACA,gBACA,oBACA,uBACA,0BACA,sBACA,qBACA,yBACA,4BACA,+BACA,2BACA,0BACA,0BACA,6BACA,gCACA,4BACA,2BACA,oBACA,uBACA,0BACA,sBACA,qBACA,oBACA,uBACA,0BACA,sBACA,qBACA,iBACA,oBACA,uBACA,mBACA,kBACA,cACA,iBACA,oBACA,gBACA,eACA,cACA,iBACA,oBACA,gBACA,eACA,oBACA,uBACA,0BACA,sBACA,qBACA,oBACA,uBACA,0BACA,sBACA,qBACA,mBACA,sBACA,yBACA,qBACA,oBACA,oBACA,uBACA,0BACA,sBACA,qBACA,mBACA,sBACA,yBACA,qBACA,oBACA,kBACA,qBACA,wBACA,oBACA,mBACA,uBACA,0BACA,6BACA,yBACA,wBACA,uBACA,0BACA,6BACA,yBACA,wBACA,uBACA,0BACA,6BACA,yBACA,wBACA,oBACA,uBACA,0BACA,sBACA,qBACA,yBACA,4BACA,+BACA,2BACA,0BACA,yBACA,4BACA,+BACA,2BACA,0BACA,yBACA,4BACA,+BACA,2BACA,0BACA,aACA,gBACA,mBACA,eACA,cACA,kBACA,qBACA,wBACA,oBACA,mBACA,kBACA,qBACA,wBACA,oBACA,mBACA,kBACA,qBACA,wBACA,oBACA,mBACA,eACA,kBACA,qBACA,iBACA,gBACA,cACA,iBACA,oBACA,gBACA,eACA,mBACA,sBACA,yBACA,qBACA,oBACA,mBACA,sBACA,yBACA,qBACA,oBACA,mBACA,sBACA,yBACA,qBACA,oBACA,gBACA,mBACA,sBACA,kBACA,iBACA,cACA,iBACA,oBACA,gBACA,eACA,YACA,eACA,kBACA,cACA,aACA,iBACA,oBACA,uBACA,mBACA,kBACA,sBACA,yBACA,4BACA,wBACA,uBACA,uBACA,0BACA,6BACA,yBACA,wBACA,iBACA,oBACA,uBACA,mBACA,kBACA,iBACA,oBACA,uBACA,mBACA,kBACA,cACA,iBACA,oBACA,gBACA,eACA,SACA,YACA,eACA,WACA,UACA,qBACA,wBACA,2BACA,uBACA,sBACA,YACA,eACA,kBACA,cACA,aACA,YACA,eACA,kBACA,cACA,aACA,aACA,gBACA,mBACA,eACA,cACA,cACA,iBACA,oBACA,gBACA,eACA,cACA,iBACA,oBACA,gBACA,eACA,cACA,iBACA,oBACA,gBACA,eACA,aACA,gBACA,mBACA,eACA,cACA,KACA,QACA,WACA,OACA,MACA,QACA,WACA,cACA,UACA,SACA,OACA,UACA,aACA,SACA,QACA,WACA,cACA,iBACA,aACA,YACA,KACA,QACA,WACA,OACA,MACA,QACA,WACA,cACA,UACA,SACA,cACA,iBACA,oBACA,gBACA,eACA,aACA,gBACA,mBACA,eACA,cACA,YACA,eACA,kBACA,cACA,aACA,aACA,gBACA,mBACA,eACA,cACA,kBACA,qBACA,wBACA,oBACA,mBACA,kBACA,qBACA,wBACA,oBACA,mBACA,kBACA,qBACA,wBACA,oBACA,mBACA,aACA,gBACA,mBACA,eACA,cACA,cACA,iBACA,oBACA,gBACA,eACA,UACA,aACA,gBACA,YACA,WACA,UACA,aACA,gBACA,YACA,WACA,mBACA,sBACA,yBACA,qBACA,oBACA,eACA,kBACA,qBACA,iBACA,gBACA,SACA,YACA,eACA,WACA,UACA,MACA,SACA,YACA,QACA,OACA,YACA,eACA,kBACA,cACA,aACA,UACA,aACA,gBACA,YACA,WACA,OACA,UACA,aACA,SACA,QACA,MACA,SACA,YACA,QACA,OACA,OACA,UACA,aACA,SACA,QACA,KACA,QACA,WACA,OACA,MACA,aACA,gBACA,mBACA,eACA,cACA,KACA,QACA,WACA,OACA,MACA,SACA,YACA,eACA,WACA,UACA,YACA,eACA,kBACA,cACA,aACA,gBACA,mBACA,sBACA,kBACA,iBACA,WACA,cACA,iBACA,aACA,YACA,WACA,cACA,iBACA,aACA,YACA,aACA,gBACA,mBACA,eACA,cACA,WACA,cACA,iBACA,aACA,YACA,QACA,WACA,cACA,UACA,SACA,OACA,UACA,aACA,SACA,QACA,aACA,gBACA,mBACA,eACA,cACA,sBACA,yBACA,4BACA,wBACA,uBACA,cACA,iBACA,oBACA,gBACA,eACA,uBACA,0BACA,6BACA,yBACA,wBACA,WACA,cACA,iBACA,aACA,YACA,iBACA,oBACA,uBACA,mBACA,kBACA,cACA,iBACA,oBACA,gBACA,eACA,YACA,eACA,kBACA,cACA,aACA,gBACA,mBACA,sBACA,kBACA,iBACA,cACA,iBACA,oBACA,gBACA,eACA,wBACA,2BACA,8BACA,0BACA,yBACA,kBACA,qBACA,wBACA,oBACA,mBACA,uBACA,0BACA,6BACA,yBACA,wBACA,uBACA,0BACA,6BACA,yBACA,wBACA,qBACA,wBACA,2BACA,uBACA,sBACA,sBACA,yBACA,4BACA,wBACA,uBACA,aACA,gBACA,mBACA,eACA,cACA,KACA,QACA,WACA,OACA,MACA,OACA,UACA,aACA,SACA,QACA,OACA,UACA,aACA,SACA,QACA,WACA,cACA,iBACA,aACA,YACA,kBACA,qBACA,wBACA,oBACA,mBACA,eACA,kBACA,qBACA,iBACA,gBACA,eACA,kBACA,qBACA,iBACA,gBACA,aACA,gBACA,mBACA,eACA,cACA,gBACA,mBACA,sBACA,kBACA,iBACA,gBACA,mBACA,sBACA,kBACA,iBACA,kBACA,qBACA,wBACA,oBACA,mBACA,UACA,aACA,gBACA,YACA,WACA,UACA,aACA,gBACA,YACA,WACA,aACA,gBACA,mBACA,eACA,cACA,aACA,gBACA,mBACA,eACA,cACA,eACA,kBACA,qBACA,iBACA,gBACA,eACA,kBACA,qBACA,iBACA,gBACA,oBACA,uBACA,0BACA,sBACA,qBACA,sBACA,yBACA,4BACA,wBACA,uBACA,mBACA,sBACA,yBACA,qBACA,oBACA,SACA,YACA,eACA,WACA,UACA,UACA,aACA,gBACA,YACA,WACA,KACA,QACA,WACA,OACA,MACA,mBACA,sBACA,yBACA,qBACA,oBACA,iBACA,oBACA,uBACA,mBACA,kBACA,kBACA,qBACA,wBACA,oBACA,mBACA,UACA,aACA,gBACA,YACA,WACA,KACA,QACA,WACA,OACA,MACA,UACA,aACA,gBACA,YACA,WACA,UACA,aACA,gBACA,YACA,WACA,aACA,gBACA,mBACA,eACA,cACA,YACA,eACA,kBACA,cACA,aACA,iBACA,oBACA,uBACA,mBACA,kBACA,MACA,SACA,YACA,QACA,OACA,OACA,UACA,aACA,SACA,QACA,gBACA,mBACA,sBACA,kBACA,iBACA,YACA,eACA,kBACA,cACA,aACA,aACA,gBACA,mBACA,eACA,cACA,YACA,eACA,kBACA,cACA,aACA,iBACA,oBACA,uBACA,mBACA,kBACA,oBACA,uBACA,0BACA,sBACA,qBACA,gBACA,mBACA,sBACA,kBACA,iBACA,SACA,YACA,eACA,WACA,UACA,iBACA,oBACA,uBACA,mBACA,kBACA,mBACA,sBACA,yBACA,qBACA,oBACA,eACA,kBACA,qBACA,iBACA,gBACA,kBACA,qBACA,wBACA,oBACA,mBACA,oBACA,uBACA,0BACA,sBACA,qBACA,aACA,gBACA,mBACA,eACA,cACA,cACA,iBACA,oBACA,gBACA,eACA,YACA,eACA,kBACA,cACA,aACA,OACA,UACA,aACA,SACA,QACA,WACA,cACA,iBACA,aACA,YACA,gBACA,mBACA,sBACA,kBACA,iBACA,YACA,eACA,kBACA,cACA,aACA,WACA,cACA,iBACA,aACA,YACA,aACA,gBACA,mBACA,eACA,cACA,eACA,kBACA,qBACA,iBACA,gBACA,aACA,gBACA,mBACA,eACA,cACA,WACA,cACA,iBACA,aACA,YACA,WACA,cACA,iBACA,aACA,YACA,YACA,eACA,kBACA,cACA,aACA,WACA,cACA,iBACA,aACA,YACA,eACA,kBACA,qBACA,iBACA,gBACA,YACA,eACA,kBACA,cACA,aACA,gBACA,mBACA,sBACA,kBACA,iBACA,WACA,cACA,iBACA,aACA,YACA,eACA,kBACA,qBACA,iBACA,gBACA,KACA,QACA,WACA,OACA,MACA,KACA,QACA,WACA,OACA,MACA,YACA,eACA,kBACA,cACA,aACA,iBACA,oBACA,uBACA,mBACA,kBACA,iBACA,oBACA,uBACA,mBACA,kBACA,mBACA,sBACA,yBACA,qBACA,oBACA,kBACA,qBACA,wBACA,oBACA,mBACA,oBACA,uBACA,0BACA,sBACA,qBACA,UACA,aACA,gBACA,YACA,WACA,QACA,WACA,cACA,UACA,SACA,UACA,aACA,gBACA,YACA,WACA,UACA,aACA,gBACA,YACA,WACA,eACA,kBACA,qBACA,iBACA,gBACA,gBACA,mBACA,sBACA,kBACA,iBACA,eACA,kBACA,qBACA,iBACA,gBACA,eACA,kBACA,qBACA,iBACA,gBACA,WACA,cACA,iBACA,aACA,YACA,eACA,kBACA,qBACA,iBACA,gBACA,YACA,eACA,kBACA,cACA,aACA,YACA,eACA,kBACA,cACA,aACA,UACA,aACA,gBACA,YACA,WACA,kBACA,qBACA,wBACA,oBACA,mBACA,oBACA,uBACA,0BACA,sBACA,qBACA,gBACA,mBACA,sBACA,kBACA,iBACA,mBACA,sBACA,yBACA,qBACA,oBACA,qBACA,wBACA,2BACA,uBACA,sBACA,cACA,iBACA,oBACA,gBACA,eACA,eACA,kBACA,qBACA,iBACA,gBACA,aACA,gBACA,mBACA,eACA,cACA,iBACA,oBACA,uBACA,mBACA,kBACA,kBACA,qBACA,wBACA,oBACA,mBACA,kBACA,qBACA,wBACA,oBACA,mBACA,KACA,QACA,WACA,OACA,MACA,cACA,iBACA,oBACA,gBACA,eACA,oBACA,uBACA,0BACA,sBACA,qBACA,gBACA,mBACA,sBACA,kBACA,iBACA,WACA,cACA,iBACA,aACA,YACA,KACA,QACA,WACA,OACA,MACA,KACA,QACA,WACA,OACA,MACA,IACA,OACA,UACA,MACA,KACA,SACA,YACA,eACA,WACA,UACA,MACA,SACA,YACA,QACA,OACA,MACA,SACA,YACA,QACA,OACA,SACA,YACA,eACA,WACA,UACA,SACA,YACA,eACA,WACA,UACA,QACA,WACA,cACA,UACA,SACA,YACA,eACA,kBACA,cACA,aACA,YACA,eACA,kBACA,cACA,aACA,eACA,kBACA,qBACA,iBACA,gBACA,IACA,OACA,UACA,MACA,KACA,iBACA,oBACA,uBACA,mBACA,kBACA,uBACA,0BACA,6BACA,yBACA,wBACA,wBACA,2BACA,8BACA,0BACA,yBACA,iBACA,oBACA,uBACA,mBACA,kBACA,sBACA,yBACA,4BACA,wBACA,uBACA,cACA,iBACA,oBACA,gBACA,eACA,eACA,kBACA,qBACA,iBACA,gBACA,UACA,aACA,gBACA,YACA,WACA,cACA,iBACA,oBACA,gBACA,eACA,YACA,eACA,kBACA,cACA,aACA,gBACA,mBACA,sBACA,kBACA,iBACA,qBACA,wBACA,2BACA,uBACA,sBACA,iBACA,oBACA,uBACA,mBACA,kBACA,sBACA,yBACA,4BACA,wBACA,uBACA,qBACA,wBACA,2BACA,uBACA,sBACA,sBACA,yBACA,4BACA,wBACA,uBACA,eACA,kBACA,qBACA,iBACA,gBACA,oBACA,uBACA,0BACA,sBACA,qBACA,uBACA,0BACA,6BACA,yBACA,wBACA,oBACA,uBACA,0BACA,sBACA,qBACA,aACA,gBACA,mBACA,eACA,cACA,kBACA,qBACA,wBACA,oBACA,mBACA,eACA,kBACA,qBACA,iBACA,gBACA,gBACA,mBACA,sBACA,kBACA,iBACA,aACA,gBACA,mBACA,eACA,cACA,gBACA,mBACA,sBACA,kBACA,iBACA,wBACA,2BACA,8BACA,0BACA,yBACA,MACA,SACA,YACA,QACA,OACA,cACA,iBACA,oBACA,gBACA,eACA,YACA,eACA,kBACA,cACA,aACA,eACA,kBACA,qBACA,iBACA,gBACA,kBACA,qBACA,wBACA,oBACA,mBACA,iBACA,oBACA,uBACA,mBACA,kBACA,aACA,gBACA,mBACA,eACA,cACA,kBACA,qBACA,wBACA,oBACA,mBACA,qBACA,wBACA,2BACA,uBACA,sBACA,qBACA,wBACA,2BACA,uBACA,sBACA,2BACA,8BACA,iCACA,6BACA,4BACA,OACA,UACA,aACA,SACA,QACA,cACA,iBACA,oBACA,gBACA,eACA,QACA,WACA,cACA,UACA,SACA,gBACA,mBACA,sBACA,kBACA,iBACA,KACA,QACA,WACA,OACA,MACA,aACA,gBACA,mBACA,eACA,cACA,OACA,UACA,aACA,SACA,QACA,OACA,UACA,aACA,SACA,QACA,KACA,QACA,WACA,OACA,MACA,aACA,gBACA,mBACA,eACA,cACA,SACA,YACA,eACA,WACA,UACA,QACA,WACA,cACA,UACA,SACA,aACA,gBACA,mBACA,eACA,cACA,YACA,eACA,kBACA,cACA,aACA,cACA,iBACA,oBACA,gBACA,eACA,WACA,cACA,iBACA,aACA,YACA,cACA,iBACA,oBACA,gBACA,eACA,SACA,YACA,eACA,WACA,UACA,WACA,cACA,iBACA,aACA,YACA,OACA,UACA,aACA,SACA,QACA,KACA,QACA,WACA,OACA,MACA,oBACA,uBACA,0BACA,sBACA,qBACA,aACA,gBACA,mBACA,eACA,gB,8ICljDF,IAAI96B,EAAa,EAAQ,8IACrB08C,EAAY,EAAQ,8GAExBtQ,EAAOtR,QAAU,SAASzlD,EAAO0sD,EAAU4a,GACzC,IAAIrnE,EAASD,EAAM0sD,GACnB,GAAKzsD,EAAL,CAIA,IAAIsnE,EAAW,GAMf,GALAnlE,OAAOS,KAAK5C,GAAQuY,SAAQ,SAASgvD,IACG,IAAlC78C,EAAWif,QAAQ49B,IACrBD,EAAS/iE,KAAKgjE,MAGdD,EAASnoE,OACX,MAAM,IAAI2oD,MAAM,QAAU2E,EAAW,cAAgB4a,EAAgB,sBAAwBC,EAAS/rD,KAAK,SAI/Gu7C,EAAOtR,QAAQljC,WAAa,SAASviB,EAAO0sD,EAAU4a,GACpD,IAAKtnE,EAAM0sD,GACT,MAAM,IAAI3E,MAAM,QAAU2E,EAAW,cAAgB4a,EAAgB,gBAEvE,OAAOvQ,EAAOtR,QAAQzlD,EAAO0sD,EAAU4a,IAGzCvQ,EAAOtR,QAAQgiB,iBAAmBJ,EAAUtT,UAAU,CACpDsT,EAAUxT,QAAQkD,EAAOtR,SACzBsR,EAAOtR","sources":["webpack://grafana/./public/app/features/alerting/getAlertingValidationMessage.ts","webpack://grafana/./public/app/features/alerting/unified/components/DynamicTableWithGuidelines.tsx","webpack://grafana/./public/app/features/alerting/unified/components/RuleLocation.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RuleDetails.tsx","webpack://grafana/./public/app/features/alerting/unified/components/rules/RulesTable.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/useHasRuler.ts","webpack://grafana/./public/app/features/dashboard/components/DashboardLoading/DashboardFailed.tsx","webpack://grafana/./public/app/features/dashboard/components/DashboardLoading/DashboardLoading.tsx","webpack://grafana/./public/app/features/library-panels/components/SaveLibraryPanelModal/SaveLibraryPanelModal.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/actions.ts","webpack://grafana/./public/app/features/dashboard/components/SaveDashboard/UnsavedChangesModal.tsx","webpack://grafana/./public/app/features/dashboard/components/DashboardPrompt/DashboardPrompt.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/usePanelLatestData.ts","webpack://grafana/./public/app/features/inspector/InspectMetadataTab.tsx","webpack://grafana/./public/app/features/dashboard/components/Inspector/InspectContent.tsx","webpack://grafana/./public/app/features/dashboard/components/Inspector/hooks.ts","webpack://grafana/./public/app/features/dashboard/components/Inspector/PanelInspector.tsx","webpack://grafana/./.yarn/__virtual__/react-split-pane-virtual-057ebfddec/3/opt/drone/yarncache/react-split-pane-npm-0.1.92-93dbf51dff-4890f17263.zip/node_modules/react-split-pane/dist/index.esm.js","webpack://grafana/./public/app/core/components/SplitPaneWrapper/SplitPaneWrapper.tsx","webpack://grafana/./public/app/features/variables/pickers/PickerRenderer.tsx","webpack://grafana/./public/app/features/dashboard/components/SubMenu/SubMenuItems.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/AngularPanelOptions.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/utils.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/DynamicConfigValueEditor.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OverrideCategoryTitle.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/getFieldOverrideElements.tsx","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelInfo/LibraryPanelInfo.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/getLibraryPanelOptions.tsx","webpack://grafana/./public/app/features/dashboard/components/RepeatRowSelect/RepeatRowSelect.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/getPanelFrameOptions.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/OptionSearchEngine.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/getRecentOptions.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OptionsPaneOptions.tsx","webpack://grafana/./public/app/features/dashboard/state/selectors.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/VisualizationButton.tsx","webpack://grafana/./public/app/features/library-panels/components/ChangeLibraryPanelModal/ChangeLibraryPanelModal.tsx","webpack://grafana/./public/app/features/library-panels/components/PanelLibraryOptionsGroup/PanelLibraryOptionsGroup.tsx","webpack://grafana/./public/app/features/panel/state/getAllSuggestions.ts","webpack://grafana/./public/app/features/panel/components/VizTypePicker/VisualizationSuggestionCard.tsx","webpack://grafana/./public/app/features/panel/components/VizTypePicker/VisualizationSuggestions.tsx","webpack://grafana/./public/app/features/panel/components/VizTypePicker/VizTypePickerPlugin.tsx","webpack://grafana/./public/app/features/panel/components/VizTypePicker/VizTypePicker.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/VisualizationSelectPane.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/OptionsPane.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/PanelEditorTableView.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/PanelNotSupported.tsx","webpack://grafana/./public/app/features/alerting/StateHistory.tsx","webpack://grafana/./public/app/features/alerting/TestRuleResult.tsx","webpack://grafana/./public/app/features/alerting/AlertTab.tsx","webpack://grafana/./public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.tsx","webpack://grafana/./public/app/features/alerting/unified/hooks/usePanelCombinedRules.ts","webpack://grafana/./public/app/features/alerting/unified/PanelAlertTabContent.tsx","webpack://grafana/./public/app/features/alerting/AlertTabIndex.tsx","webpack://grafana/./public/app/features/alerting/unified/PanelAlertTab.tsx","webpack://grafana/./public/app/core/utils/docsLinks.ts","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationEditor.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationOperationRow.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationOperationRows.tsx","webpack://grafana/./public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/PanelEditorQueries.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/PanelEditorTabs.tsx","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/state/selectors.ts","webpack://grafana/./public/app/features/dashboard/components/PanelEditor/PanelEditor.tsx","webpack://grafana/./public/app/features/dashboard/components/SubMenu/AnnotationPicker.tsx","webpack://grafana/./public/app/features/dashboard/components/SubMenu/Annotations.tsx","webpack://grafana/./public/app/features/dashboard/components/SubMenu/DashboardLinksDashboard.tsx","webpack://grafana/./public/app/features/dashboard/components/SubMenu/DashboardLinks.tsx","webpack://grafana/./public/app/features/dashboard/components/SubMenu/SubMenu.tsx","webpack://grafana/./public/app/features/dashboard/components/AddPanelWidget/AddPanelWidget.tsx","webpack://grafana/./public/app/features/dashboard/components/RowOptions/RowOptionsForm.tsx","webpack://grafana/./public/app/features/dashboard/components/RowOptions/RowOptionsModal.tsx","webpack://grafana/./public/app/features/dashboard/components/RowOptions/RowOptionsButton.tsx","webpack://grafana/./public/app/features/dashboard/components/DashboardRow/DashboardRow.tsx","webpack://grafana/./public/app/features/dashboard/dashgrid/DashboardGrid.tsx","webpack://grafana/./public/app/features/dashboard/containers/DashboardPage.tsx","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/GridItem.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/ReactGridLayout.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/ReactGridLayoutPropTypes.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/ResponsiveReactGridLayout.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/calculateUtils.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/components/WidthProvider.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/fastRGLPropsEqual.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/responsiveUtils.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/build/utils.js","webpack://grafana/./.yarn/__virtual__/react-grid-layout-virtual-3d00dcc91b/3/opt/drone/yarncache/react-grid-layout-npm-1.3.4-e416174768-f56c8c452a.zip/node_modules/react-grid-layout/index.js","webpack://grafana/./.yarn/__virtual__/react-resizable-virtual-13412137cd/3/opt/drone/yarncache/react-resizable-npm-3.0.4-aa39f9db2b-cbf86ad04b.zip/node_modules/react-resizable/build/Resizable.js","webpack://grafana/./.yarn/__virtual__/react-resizable-virtual-13412137cd/3/opt/drone/yarncache/react-resizable-npm-3.0.4-aa39f9db2b-cbf86ad04b.zip/node_modules/react-resizable/build/ResizableBox.js","webpack://grafana/./.yarn/__virtual__/react-resizable-virtual-13412137cd/3/opt/drone/yarncache/react-resizable-npm-3.0.4-aa39f9db2b-cbf86ad04b.zip/node_modules/react-resizable/build/propTypes.js","webpack://grafana/./.yarn/__virtual__/react-resizable-virtual-13412137cd/3/opt/drone/yarncache/react-resizable-npm-3.0.4-aa39f9db2b-cbf86ad04b.zip/node_modules/react-resizable/build/utils.js","webpack://grafana/./.yarn/__virtual__/react-resizable-virtual-13412137cd/3/opt/drone/yarncache/react-resizable-npm-3.0.4-aa39f9db2b-cbf86ad04b.zip/node_modules/react-resizable/index.js","webpack://grafana/../../opt/drone/yarncache/lodash.isequal-npm-4.5.0-f8b0f64d63-da27515dc5.zip/node_modules/lodash.isequal/index.js","webpack://grafana/../../opt/drone/yarncache/react-style-proptype-npm-3.2.2-d7241ef02d-f0e646e148.zip/node_modules/react-style-proptype/src/css-properties.js","webpack://grafana/../../opt/drone/yarncache/react-style-proptype-npm-3.2.2-d7241ef02d-f0e646e148.zip/node_modules/react-style-proptype/src/index.js"],"sourcesContent":["import { DataQuery, DataSourceRef, DataTransformerConfig } from '@grafana/data';\nimport { DataSourceSrv } from '@grafana/runtime';\n\nexport const getDefaultCondition = () => ({\n  type: 'query',\n  query: { params: ['A', '5m', 'now'] },\n  reducer: { type: 'avg', params: [] as any[] },\n  evaluator: { type: 'gt', params: [null] as any[] },\n  operator: { type: 'and' },\n});\n\nexport const getAlertingValidationMessage = async (\n  transformations: DataTransformerConfig[] | undefined,\n  targets: DataQuery[],\n  datasourceSrv: DataSourceSrv,\n  datasource: DataSourceRef | null\n): Promise<string> => {\n  if (targets.length === 0) {\n    return 'Could not find any metric queries';\n  }\n\n  if (transformations && transformations.length) {\n    return 'Transformations are not supported in alert queries';\n  }\n\n  let alertingNotSupported = 0;\n  let templateVariablesNotSupported = 0;\n\n  for (const target of targets) {\n    const dsRef = target.datasource || datasource;\n    const ds = await datasourceSrv.get(dsRef);\n    if (!ds.meta.alerting) {\n      alertingNotSupported++;\n    } else if (ds.targetContainsTemplate && ds.targetContainsTemplate(target)) {\n      templateVariablesNotSupported++;\n    }\n  }\n\n  if (alertingNotSupported === targets.length) {\n    return 'The datasource does not support alerting queries';\n  }\n\n  if (templateVariablesNotSupported === targets.length) {\n    return 'Template variables are not supported in alert queries';\n  }\n\n  return '';\n};\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { DynamicTable, DynamicTableProps } from './DynamicTable';\n\nexport type DynamicTableWithGuidelinesProps<T> = Omit<DynamicTableProps<T>, 'renderPrefixHeader, renderPrefixCell'>;\n\n// DynamicTable, but renders visual guidelines on the left, for larger screen widths\nexport const DynamicTableWithGuidelines = <T extends object>({\n  renderExpandedContent,\n  ...props\n}: DynamicTableWithGuidelinesProps<T>) => {\n  const styles = useStyles2(getStyles);\n  return (\n    <DynamicTable\n      renderExpandedContent={\n        renderExpandedContent\n          ? (item, index, items) => (\n              <>\n                {!(index === items.length - 1) && <div className={cx(styles.contentGuideline, styles.guideline)} />}\n                {renderExpandedContent(item, index, items)}\n              </>\n            )\n          : undefined\n      }\n      renderPrefixHeader={() => (\n        <div className={styles.relative}>\n          <div className={cx(styles.headerGuideline, styles.guideline)} />\n        </div>\n      )}\n      renderPrefixCell={(_, index, items) => (\n        <div className={styles.relative}>\n          <div className={cx(styles.topGuideline, styles.guideline)} />\n          {!(index === items.length - 1) && <div className={cx(styles.bottomGuideline, styles.guideline)} />}\n        </div>\n      )}\n      {...props}\n    />\n  );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n  relative: css`\n    position: relative;\n    height: 100%;\n  `,\n  guideline: css`\n    left: -19px;\n    border-left: 1px solid ${theme.colors.border.medium};\n    position: absolute;\n\n    ${theme.breakpoints.down('md')} {\n      display: none;\n    }\n  `,\n  topGuideline: css`\n    width: 18px;\n    border-bottom: 1px solid ${theme.colors.border.medium};\n    top: 0;\n    bottom: 50%;\n  `,\n  bottomGuideline: css`\n    top: 50%;\n    bottom: 0;\n  `,\n  contentGuideline: css`\n    top: 0;\n    bottom: 0;\n    left: -49px !important;\n  `,\n  headerGuideline: css`\n    top: -25px;\n    bottom: 0;\n  `,\n});\n","import React, { FC } from 'react';\n\nimport { Icon } from '@grafana/ui';\n\ninterface RuleLocationProps {\n  namespace: string;\n  group?: string;\n}\n\nconst RuleLocation: FC<RuleLocationProps> = ({ namespace, group }) => {\n  if (!group) {\n    return <>{namespace}</>;\n  }\n\n  return (\n    <>\n      {namespace} <Icon name=\"angle-right\" /> {group}\n    </>\n  );\n};\n\nexport { RuleLocation };\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { CombinedRule } from 'app/types/unified-alerting';\n\nimport { AlertLabels } from '../AlertLabels';\nimport { DetailsField } from '../DetailsField';\n\nimport { RuleDetailsActionButtons } from './RuleDetailsActionButtons';\nimport { RuleDetailsAnnotations } from './RuleDetailsAnnotations';\nimport { RuleDetailsDataSources } from './RuleDetailsDataSources';\nimport { RuleDetailsExpression } from './RuleDetailsExpression';\nimport { RuleDetailsMatchingInstances } from './RuleDetailsMatchingInstances';\n\ninterface Props {\n  rule: CombinedRule;\n}\n\nexport const RuleDetails: FC<Props> = ({ rule }) => {\n  const styles = useStyles2(getStyles);\n  const {\n    promRule,\n    namespace: { rulesSource },\n  } = rule;\n\n  const annotations = Object.entries(rule.annotations).filter(([_, value]) => !!value.trim());\n\n  return (\n    <div>\n      <RuleDetailsActionButtons rule={rule} rulesSource={rulesSource} />\n      <div className={styles.wrapper}>\n        <div className={styles.leftSide}>\n          {!!rule.labels && !!Object.keys(rule.labels).length && (\n            <DetailsField label=\"Labels\" horizontal={true}>\n              <AlertLabels labels={rule.labels} />\n            </DetailsField>\n          )}\n          <RuleDetailsExpression rulesSource={rulesSource} rule={rule} annotations={annotations} />\n          <RuleDetailsAnnotations annotations={annotations} />\n        </div>\n        <div className={styles.rightSide}>\n          <RuleDetailsDataSources rulesSource={rulesSource} rule={rule} />\n        </div>\n      </div>\n      <RuleDetailsMatchingInstances promRule={promRule} />\n    </div>\n  );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n  wrapper: css`\n    display: flex;\n    flex-direction: row;\n    ${theme.breakpoints.down('md')} {\n      flex-direction: column;\n    }\n  `,\n  leftSide: css`\n    flex: 1;\n  `,\n  rightSide: css`\n    ${theme.breakpoints.up('md')} {\n      padding-left: 90px;\n      width: 300px;\n    }\n  `,\n});\n","import { css, cx } from '@emotion/css';\nimport React, { FC, useMemo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { CombinedRule } from 'app/types/unified-alerting';\n\nimport { useHasRuler } from '../../hooks/useHasRuler';\nimport { Annotation } from '../../utils/constants';\nimport { DynamicTable, DynamicTableColumnProps, DynamicTableItemProps } from '../DynamicTable';\nimport { DynamicTableWithGuidelines } from '../DynamicTableWithGuidelines';\nimport { RuleLocation } from '../RuleLocation';\n\nimport { RuleDetails } from './RuleDetails';\nimport { RuleHealth } from './RuleHealth';\nimport { RuleState } from './RuleState';\n\ntype RuleTableColumnProps = DynamicTableColumnProps<CombinedRule>;\ntype RuleTableItemProps = DynamicTableItemProps<CombinedRule>;\n\ninterface Props {\n  rules: CombinedRule[];\n  showGuidelines?: boolean;\n  showGroupColumn?: boolean;\n  showSummaryColumn?: boolean;\n  emptyMessage?: string;\n  className?: string;\n}\n\nexport const RulesTable: FC<Props> = ({\n  rules,\n  className,\n  showGuidelines = false,\n  emptyMessage = 'No rules found.',\n  showGroupColumn = false,\n  showSummaryColumn = false,\n}) => {\n  const styles = useStyles2(getStyles);\n\n  const wrapperClass = cx(styles.wrapper, className, { [styles.wrapperMargin]: showGuidelines });\n\n  const items = useMemo((): RuleTableItemProps[] => {\n    const seenKeys: string[] = [];\n    return rules.map((rule, ruleIdx) => {\n      let key = JSON.stringify([rule.promRule?.type, rule.labels, rule.query, rule.name, rule.annotations]);\n      if (seenKeys.includes(key)) {\n        key += `-${ruleIdx}`;\n      }\n      seenKeys.push(key);\n      return {\n        id: key,\n        data: rule,\n      };\n    });\n  }, [rules]);\n\n  const columns = useColumns(showSummaryColumn, showGroupColumn);\n\n  if (!rules.length) {\n    return <div className={cx(wrapperClass, styles.emptyMessage)}>{emptyMessage}</div>;\n  }\n\n  const TableComponent = showGuidelines ? DynamicTableWithGuidelines : DynamicTable;\n\n  return (\n    <div className={wrapperClass} data-testid=\"rules-table\">\n      <TableComponent\n        cols={columns}\n        isExpandable={true}\n        items={items}\n        renderExpandedContent={({ data: rule }) => <RuleDetails rule={rule} />}\n      />\n    </div>\n  );\n};\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n  wrapperMargin: css`\n    ${theme.breakpoints.up('md')} {\n      margin-left: 36px;\n    }\n  `,\n  emptyMessage: css`\n    padding: ${theme.spacing(1)};\n  `,\n  wrapper: css`\n    width: auto;\n    background-color: ${theme.colors.background.secondary};\n    border-radius: ${theme.shape.borderRadius()};\n  `,\n});\n\nfunction useColumns(showSummaryColumn: boolean, showGroupColumn: boolean) {\n  const hasRuler = useHasRuler();\n\n  return useMemo((): RuleTableColumnProps[] => {\n    const columns: RuleTableColumnProps[] = [\n      {\n        id: 'state',\n        label: 'State',\n        // eslint-disable-next-line react/display-name\n        renderCell: ({ data: rule }) => {\n          const { namespace } = rule;\n          const { rulesSource } = namespace;\n          const { promRule, rulerRule } = rule;\n          const isDeleting = !!(hasRuler(rulesSource) && promRule && !rulerRule);\n          const isCreating = !!(hasRuler(rulesSource) && rulerRule && !promRule);\n          return <RuleState rule={rule} isDeleting={isDeleting} isCreating={isCreating} />;\n        },\n        size: '165px',\n      },\n      {\n        id: 'name',\n        label: 'Name',\n        // eslint-disable-next-line react/display-name\n        renderCell: ({ data: rule }) => rule.name,\n        size: 5,\n      },\n      {\n        id: 'health',\n        label: 'Health',\n        // eslint-disable-next-line react/display-name\n        renderCell: ({ data: { promRule } }) => (promRule ? <RuleHealth rule={promRule} /> : null),\n        size: '75px',\n      },\n    ];\n    if (showSummaryColumn) {\n      columns.push({\n        id: 'summary',\n        label: 'Summary',\n        // eslint-disable-next-line react/display-name\n        renderCell: ({ data: rule }) => rule.annotations[Annotation.summary] ?? '',\n        size: 5,\n      });\n    }\n    if (showGroupColumn) {\n      columns.push({\n        id: 'group',\n        label: 'Group',\n        // eslint-disable-next-line react/display-name\n        renderCell: ({ data: rule }) => {\n          const { namespace, group } = rule;\n          // ungrouped rules are rules that are in the \"default\" group name\n          const isUngrouped = group.name === 'default';\n          const groupName = isUngrouped ? (\n            <RuleLocation namespace={namespace.name} />\n          ) : (\n            <RuleLocation namespace={namespace.name} group={group.name} />\n          );\n\n          return groupName;\n        },\n        size: 5,\n      });\n    }\n    return columns;\n  }, [hasRuler, showSummaryColumn, showGroupColumn]);\n}\n","import { useCallback } from 'react';\n\nimport { RulesSource } from 'app/types/unified-alerting';\n\nimport { GRAFANA_RULES_SOURCE_NAME } from '../utils/datasource';\n\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\n// datasource has ruler if it's grafana managed or if we're able to load rules from it\nexport function useHasRuler(): (rulesSource: string | RulesSource) => boolean {\n  const rulerRules = useUnifiedAlertingSelector((state) => state.rulerRules);\n  return useCallback(\n    (rulesSource: string | RulesSource) => {\n      const rulesSourceName = typeof rulesSource === 'string' ? rulesSource : rulesSource.name;\n      return rulesSourceName === GRAFANA_RULES_SOURCE_NAME || !!rulerRules[rulesSourceName]?.result;\n    },\n    [rulerRules]\n  );\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme } from '@grafana/data';\nimport { Alert, useStyles } from '@grafana/ui';\nimport { getMessageFromError } from 'app/core/utils/errors';\nimport { DashboardInitError, AppNotificationSeverity } from 'app/types';\n\nexport interface Props {\n  initError?: DashboardInitError;\n}\n\nexport const DashboardFailed = ({ initError }: Props) => {\n  const styles = useStyles(getStyles);\n  if (!initError) {\n    return null;\n  }\n\n  return (\n    <div className={styles.dashboardLoading}>\n      <Alert severity={AppNotificationSeverity.Error} title={initError.message}>\n        {getMessageFromError(initError.error)}\n      </Alert>\n    </div>\n  );\n};\n\nexport const getStyles = (theme: GrafanaTheme) => {\n  return {\n    dashboardLoading: css`\n      height: 60vh;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    `,\n  };\n};\n","import { css, keyframes } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { Button, HorizontalGroup, Spinner, useStyles, VerticalGroup } from '@grafana/ui';\nimport { DashboardInitPhase } from 'app/types';\n\nexport interface Props {\n  initPhase: DashboardInitPhase;\n}\n\nexport const DashboardLoading = ({ initPhase }: Props) => {\n  const styles = useStyles(getStyles);\n  const cancelVariables = () => {\n    locationService.push('/');\n  };\n\n  return (\n    <div className={styles.dashboardLoading}>\n      <div className={styles.dashboardLoadingText}>\n        <VerticalGroup spacing=\"md\">\n          <HorizontalGroup align=\"center\" justify=\"center\" spacing=\"xs\">\n            <Spinner inline={true} /> {initPhase}\n          </HorizontalGroup>{' '}\n          <HorizontalGroup align=\"center\" justify=\"center\">\n            <Button variant=\"secondary\" size=\"md\" icon=\"repeat\" onClick={cancelVariables}>\n              Cancel loading dashboard\n            </Button>\n          </HorizontalGroup>\n        </VerticalGroup>\n      </div>\n    </div>\n  );\n};\n\nexport const getStyles = (theme: GrafanaTheme) => {\n  // Amount of time we want to pass before we start showing loading spinner\n  const slowStartThreshold = '0.5s';\n\n  const invisibleToVisible = keyframes`\n    0% { opacity: 0%; }\n    100% { opacity: 100%; }\n  `;\n\n  return {\n    dashboardLoading: css`\n      height: 60vh;\n      display: flex;\n      opacity: 0%;\n      align-items: center;\n      justify-content: center;\n      animation: ${invisibleToVisible} 0s step-end ${slowStartThreshold} 1 normal forwards;\n    `,\n    dashboardLoadingText: css`\n      font-size: ${theme.typography.size.lg};\n    `,\n  };\n};\n","import React, { useCallback, useState } from 'react';\nimport { useAsync, useDebounce } from 'react-use';\n\nimport { Button, Icon, Input, Modal, useStyles } from '@grafana/ui';\n\nimport { getConnectedDashboards } from '../../state/api';\nimport { getModalStyles } from '../../styles';\nimport { PanelModelWithLibraryPanel } from '../../types';\nimport { usePanelSave } from '../../utils/usePanelSave';\n\ninterface Props {\n  panel: PanelModelWithLibraryPanel;\n  folderId: number;\n  isUnsavedPrompt?: boolean;\n  onConfirm: () => void;\n  onDismiss: () => void;\n  onDiscard: () => void;\n}\n\nexport const SaveLibraryPanelModal: React.FC<Props> = ({\n  panel,\n  folderId,\n  isUnsavedPrompt,\n  onDismiss,\n  onConfirm,\n  onDiscard,\n}) => {\n  const [searchString, setSearchString] = useState('');\n  const dashState = useAsync(async () => {\n    const searchHits = await getConnectedDashboards(panel.libraryPanel.uid);\n    if (searchHits.length > 0) {\n      return searchHits.map((dash) => dash.title);\n    }\n\n    return [];\n  }, [panel.libraryPanel.uid]);\n\n  const [filteredDashboards, setFilteredDashboards] = useState<string[]>([]);\n  useDebounce(\n    () => {\n      if (!dashState.value) {\n        return setFilteredDashboards([]);\n      }\n\n      return setFilteredDashboards(\n        dashState.value.filter((dashName) => dashName.toLowerCase().includes(searchString.toLowerCase()))\n      );\n    },\n    300,\n    [dashState.value, searchString]\n  );\n\n  const { saveLibraryPanel } = usePanelSave();\n  const styles = useStyles(getModalStyles);\n  const discardAndClose = useCallback(() => {\n    onDiscard();\n  }, [onDiscard]);\n\n  const title = isUnsavedPrompt ? 'Unsaved library panel changes' : 'Save library panel';\n\n  return (\n    <Modal title={title} icon=\"save\" onDismiss={onDismiss} isOpen={true}>\n      <div>\n        <p className={styles.textInfo}>\n          {'This update will affect '}\n          <strong>\n            {panel.libraryPanel.meta.connectedDashboards}{' '}\n            {panel.libraryPanel.meta.connectedDashboards === 1 ? 'dashboard' : 'dashboards'}.\n          </strong>\n          The following dashboards using the panel will be affected:\n        </p>\n        <Input\n          className={styles.dashboardSearch}\n          prefix={<Icon name=\"search\" />}\n          placeholder=\"Search affected dashboards\"\n          value={searchString}\n          onChange={(e) => setSearchString(e.currentTarget.value)}\n        />\n        {dashState.loading ? (\n          <p>Loading connected dashboards...</p>\n        ) : (\n          <table className={styles.myTable}>\n            <thead>\n              <tr>\n                <th>Dashboard name</th>\n              </tr>\n            </thead>\n            <tbody>\n              {filteredDashboards.map((dashName, i) => (\n                <tr key={`dashrow-${i}`}>\n                  <td>{dashName}</td>\n                </tr>\n              ))}\n            </tbody>\n          </table>\n        )}\n        <Modal.ButtonRow>\n          <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n            Cancel\n          </Button>\n          {isUnsavedPrompt && (\n            <Button variant=\"destructive\" onClick={discardAndClose}>\n              Discard\n            </Button>\n          )}\n          <Button\n            onClick={() => {\n              saveLibraryPanel(panel, folderId).then(() => {\n                onConfirm();\n              });\n            }}\n          >\n            Update all\n          </Button>\n        </Modal.ButtonRow>\n      </div>\n    </Modal>\n  );\n};\n","import { pick } from 'lodash';\n\nimport store from 'app/core/store';\nimport { cleanUpPanelState, initPanelState } from 'app/features/panel/state/actions';\nimport { panelModelAndPluginReady } from 'app/features/panel/state/reducers';\nimport { ThunkResult } from 'app/types';\n\nimport { DashboardModel, PanelModel } from '../../../state';\n\nimport {\n  closeEditor,\n  PANEL_EDITOR_UI_STATE_STORAGE_KEY,\n  PanelEditorUIState,\n  setDiscardChanges,\n  setPanelEditorUIState,\n  updateEditorInitState,\n} from './reducers';\n\nexport function initPanelEditor(sourcePanel: PanelModel, dashboard: DashboardModel): ThunkResult<void> {\n  return async (dispatch) => {\n    const panel = dashboard.initEditPanel(sourcePanel);\n\n    await dispatch(initPanelState(panel));\n\n    dispatch(\n      updateEditorInitState({\n        panel,\n        sourcePanel,\n      })\n    );\n  };\n}\n\nexport function discardPanelChanges(): ThunkResult<void> {\n  return async (dispatch, getStore) => {\n    const { getPanel } = getStore().panelEditor;\n    getPanel().configRev = 0;\n    dispatch(setDiscardChanges(true));\n  };\n}\n\nexport function updateDuplicateLibraryPanels(\n  modifiedPanel: PanelModel,\n  dashboard: DashboardModel | null\n): ThunkResult<void> {\n  return (dispatch) => {\n    if (modifiedPanel.libraryPanel?.uid === undefined || !dashboard) {\n      return;\n    }\n\n    const modifiedSaveModel = modifiedPanel.getSaveModel();\n    for (const panel of dashboard.panels) {\n      if (skipPanelUpdate(modifiedPanel, panel)) {\n        continue;\n      }\n\n      panel.restoreModel({\n        ...modifiedSaveModel,\n        ...pick(panel, 'gridPos', 'id'),\n      });\n\n      // Loaded plugin is not included in the persisted properties\n      // So is not handled by restoreModel\n      const pluginChanged = panel.plugin?.meta.id !== modifiedPanel.plugin?.meta.id;\n      panel.plugin = modifiedPanel.plugin;\n      panel.configRev++;\n\n      if (pluginChanged) {\n        const cleanUpKey = panel.key;\n        panel.generateNewKey();\n\n        dispatch(panelModelAndPluginReady({ key: panel.key, plugin: panel.plugin!, cleanUpKey }));\n      }\n\n      // Resend last query result on source panel query runner\n      // But do this after the panel edit editor exit process has completed\n      setTimeout(() => {\n        panel.getQueryRunner().useLastResultFrom(modifiedPanel.getQueryRunner());\n      }, 20);\n    }\n\n    if (modifiedPanel.repeat) {\n      // We skip any repeated library panels so we need to update them by calling processRepeats\n      // But do this after the panel edit editor exit process has completed\n      setTimeout(() => dashboard.processRepeats(), 20);\n    }\n  };\n}\n\nexport function skipPanelUpdate(modifiedPanel: PanelModel, panelToUpdate: PanelModel): boolean {\n  // don't update library panels that aren't of the same type\n  if (panelToUpdate.libraryPanel?.uid !== modifiedPanel.libraryPanel!.uid) {\n    return true;\n  }\n\n  // don't update the modifiedPanel twice\n  if (panelToUpdate.id && panelToUpdate.id === modifiedPanel.id) {\n    return true;\n  }\n\n  // don't update library panels that are repeated\n  if (panelToUpdate.repeatPanelId) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function exitPanelEditor(): ThunkResult<void> {\n  return async (dispatch, getStore) => {\n    const dashboard = getStore().dashboard.getModel();\n    const { getPanel, getSourcePanel, shouldDiscardChanges } = getStore().panelEditor;\n    const panel = getPanel();\n\n    if (dashboard) {\n      dashboard.exitPanelEditor();\n    }\n\n    if (!shouldDiscardChanges) {\n      const modifiedSaveModel = panel.getSaveModel();\n      const sourcePanel = getSourcePanel();\n      const panelTypeChanged = sourcePanel.type !== panel.type;\n\n      dispatch(updateDuplicateLibraryPanels(panel, dashboard));\n\n      sourcePanel.restoreModel(modifiedSaveModel);\n      sourcePanel.configRev++; // force check the configs\n\n      if (panelTypeChanged) {\n        // Loaded plugin is not included in the persisted properties so is not handled by restoreModel\n        sourcePanel.plugin = panel.plugin;\n        const cleanUpKey = sourcePanel.key;\n        sourcePanel.generateNewKey();\n\n        await dispatch(panelModelAndPluginReady({ key: sourcePanel.key, plugin: panel.plugin!, cleanUpKey }));\n      }\n\n      // Resend last query result on source panel query runner\n      // But do this after the panel edit editor exit process has completed\n      setTimeout(() => {\n        sourcePanel.getQueryRunner().useLastResultFrom(panel.getQueryRunner());\n        sourcePanel.render();\n      }, 20);\n    }\n\n    dispatch(cleanUpPanelState(panel.key));\n    dispatch(closeEditor());\n  };\n}\n\nexport function updatePanelEditorUIState(uiState: Partial<PanelEditorUIState>): ThunkResult<void> {\n  return (dispatch, getStore) => {\n    const nextState = { ...getStore().panelEditor.ui, ...uiState };\n    dispatch(setPanelEditorUIState(nextState));\n    try {\n      store.setObject(PANEL_EDITOR_UI_STATE_STORAGE_KEY, nextState);\n    } catch (error) {\n      console.error(error);\n    }\n  };\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { Button, Modal } from '@grafana/ui';\n\nimport { DashboardModel } from '../../state';\n\nimport { SaveDashboardButton } from './SaveDashboardButton';\n\ninterface UnsavedChangesModalProps {\n  dashboard: DashboardModel;\n  onDiscard: () => void;\n  onDismiss: () => void;\n  onSaveSuccess?: () => void;\n}\n\nexport const UnsavedChangesModal: React.FC<UnsavedChangesModalProps> = ({\n  dashboard,\n  onSaveSuccess,\n  onDiscard,\n  onDismiss,\n}) => {\n  return (\n    <Modal\n      isOpen={true}\n      title=\"Unsaved changes\"\n      onDismiss={onDismiss}\n      icon=\"exclamation-triangle\"\n      className={css`\n        width: 500px;\n      `}\n    >\n      <h5>Do you want to save your changes?</h5>\n      <Modal.ButtonRow>\n        <Button variant=\"secondary\" onClick={onDismiss} fill=\"outline\">\n          Cancel\n        </Button>\n        <Button variant=\"destructive\" onClick={onDiscard}>\n          Discard\n        </Button>\n        <SaveDashboardButton dashboard={dashboard} onSaveSuccess={onSaveSuccess} />\n      </Modal.ButtonRow>\n    </Modal>\n  );\n};\n","import * as H from 'history';\nimport { each, filter, find } from 'lodash';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Prompt } from 'react-router-dom';\n\nimport { locationService } from '@grafana/runtime';\nimport { ModalsContext } from '@grafana/ui';\nimport { appEvents } from 'app/core/app_events';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { SaveLibraryPanelModal } from 'app/features/library-panels/components/SaveLibraryPanelModal/SaveLibraryPanelModal';\nimport { PanelModelWithLibraryPanel } from 'app/features/library-panels/types';\nimport { DashboardSavedEvent } from 'app/types/events';\n\nimport { DashboardModel } from '../../state/DashboardModel';\nimport { discardPanelChanges, exitPanelEditor } from '../PanelEditor/state/actions';\nimport { UnsavedChangesModal } from '../SaveDashboard/UnsavedChangesModal';\n\nexport interface Props {\n  dashboard: DashboardModel;\n}\n\ninterface State {\n  original: object | null;\n  originalPath?: string;\n}\n\nexport const DashboardPrompt = React.memo(({ dashboard }: Props) => {\n  const [state, setState] = useState<State>({ original: null });\n  const dispatch = useDispatch();\n  const { original, originalPath } = state;\n  const { showModal, hideModal } = useContext(ModalsContext);\n\n  useEffect(() => {\n    // This timeout delay is to wait for panels to load and migrate scheme before capturing the original state\n    // This is to minimize unsaved changes warnings due to automatic schema migrations\n    const timeoutId = setTimeout(() => {\n      const originalPath = locationService.getLocation().pathname;\n      const original = dashboard.getSaveModelClone();\n      setState({ originalPath, original });\n    }, 1000);\n\n    const savedEventUnsub = appEvents.subscribe(DashboardSavedEvent, () => {\n      const original = dashboard.getSaveModelClone();\n      setState({ originalPath, original });\n    });\n\n    return () => {\n      clearTimeout(timeoutId);\n      savedEventUnsub.unsubscribe();\n    };\n  }, [dashboard, originalPath]);\n\n  useEffect(() => {\n    const handleUnload = (event: BeforeUnloadEvent) => {\n      if (ignoreChanges(dashboard, original)) {\n        return;\n      }\n      if (hasChanges(dashboard, original)) {\n        event.preventDefault();\n        // No browser actually displays this message anymore.\n        // But Chrome requires it to be defined else the popup won't show.\n        event.returnValue = '';\n      }\n    };\n    window.addEventListener('beforeunload', handleUnload);\n    return () => window.removeEventListener('beforeunload', handleUnload);\n  }, [dashboard, original]);\n\n  const onHistoryBlock = (location: H.Location) => {\n    const panelInEdit = dashboard.panelInEdit;\n    const search = new URLSearchParams(location.search);\n\n    // Are we leaving panel edit & library panel?\n    if (panelInEdit && panelInEdit.libraryPanel && panelInEdit.hasChanged && !search.has('editPanel')) {\n      showModal(SaveLibraryPanelModal, {\n        isUnsavedPrompt: true,\n        panel: dashboard.panelInEdit as PanelModelWithLibraryPanel,\n        folderId: dashboard.meta.folderId as number,\n        onConfirm: () => {\n          hideModal();\n          moveToBlockedLocationAfterReactStateUpdate(location);\n        },\n        onDiscard: () => {\n          dispatch(discardPanelChanges());\n          moveToBlockedLocationAfterReactStateUpdate(location);\n          hideModal();\n        },\n        onDismiss: hideModal,\n      });\n      return false;\n    }\n\n    // Are we still on the same dashboard?\n    if (originalPath === location.pathname || !original) {\n      // This is here due to timing reasons we want the exit panel editor state changes to happen before router update\n      if (panelInEdit && !search.has('editPanel')) {\n        dispatch(exitPanelEditor());\n      }\n\n      return true;\n    }\n\n    if (ignoreChanges(dashboard, original)) {\n      return true;\n    }\n\n    if (!hasChanges(dashboard, original)) {\n      return true;\n    }\n\n    showModal(UnsavedChangesModal, {\n      dashboard: dashboard,\n      onSaveSuccess: () => {\n        hideModal();\n        moveToBlockedLocationAfterReactStateUpdate(location);\n      },\n      onDiscard: () => {\n        setState({ ...state, original: null });\n        hideModal();\n        moveToBlockedLocationAfterReactStateUpdate(location);\n      },\n      onDismiss: hideModal,\n    });\n\n    return false;\n  };\n\n  return <Prompt when={true} message={onHistoryBlock} />;\n});\n\nDashboardPrompt.displayName = 'DashboardPrompt';\n\nfunction moveToBlockedLocationAfterReactStateUpdate(location?: H.Location | null) {\n  if (location) {\n    setTimeout(() => locationService.push(location), 10);\n  }\n}\n\n/**\n * For some dashboards and users changes should be ignored *\n */\nexport function ignoreChanges(current: DashboardModel, original: object | null) {\n  if (!original) {\n    return true;\n  }\n\n  // Ignore changes if the user has been signed out\n  if (!contextSrv.isSignedIn) {\n    return true;\n  }\n\n  if (!current || !current.meta) {\n    return true;\n  }\n\n  const { canSave, fromScript, fromFile } = current.meta;\n  if (!contextSrv.isEditor && !canSave) {\n    return true;\n  }\n\n  return !canSave || fromScript || fromFile;\n}\n\n/**\n * Remove stuff that should not count in diff\n */\nfunction cleanDashboardFromIgnoredChanges(dashData: any) {\n  // need to new up the domain model class to get access to expand / collapse row logic\n  const model = new DashboardModel(dashData);\n\n  // Expand all rows before making comparison. This is required because row expand / collapse\n  // change order of panel array and panel positions.\n  model.expandRows();\n\n  const dash = model.getSaveModelClone();\n\n  // ignore time and refresh\n  dash.time = 0;\n  dash.refresh = 0;\n  dash.schemaVersion = 0;\n  dash.timezone = 0;\n\n  // ignore iteration property\n  delete dash.iteration;\n\n  dash.panels = filter(dash.panels, (panel) => {\n    if (panel.repeatPanelId) {\n      return false;\n    }\n\n    // remove scopedVars\n    panel.scopedVars = undefined;\n\n    // ignore panel legend sort\n    if (panel.legend) {\n      delete panel.legend.sort;\n      delete panel.legend.sortDesc;\n    }\n\n    return true;\n  });\n\n  // ignore template variable values\n  each(dash.getVariables(), (variable: any) => {\n    variable.current = null;\n    variable.options = null;\n    variable.filters = null;\n  });\n\n  return dash;\n}\n\nexport function hasChanges(current: DashboardModel, original: any) {\n  const currentClean = cleanDashboardFromIgnoredChanges(current.getSaveModelClone());\n  const originalClean = cleanDashboardFromIgnoredChanges(original);\n\n  const currentTimepicker: any = find((currentClean as any).nav, { type: 'timepicker' });\n  const originalTimepicker: any = find((originalClean as any).nav, { type: 'timepicker' });\n\n  if (currentTimepicker && originalTimepicker) {\n    currentTimepicker.now = originalTimepicker.now;\n  }\n\n  const currentJson = JSON.stringify(currentClean, null);\n  const originalJson = JSON.stringify(originalClean, null);\n\n  return currentJson !== originalJson;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { Unsubscribable } from 'rxjs';\n\nimport { DataQueryError, LoadingState, PanelData } from '@grafana/data';\n\nimport { GetDataOptions } from '../../../query/state/PanelQueryRunner';\nimport { PanelModel } from '../../state';\n\ninterface UsePanelLatestData {\n  data?: PanelData;\n  error?: DataQueryError;\n  isLoading: boolean;\n  hasSeries: boolean;\n}\n\n/**\n * Subscribes and returns latest panel data from PanelQueryRunner\n */\nexport const usePanelLatestData = (\n  panel: PanelModel,\n  options: GetDataOptions,\n  checkSchema?: boolean\n): UsePanelLatestData => {\n  const querySubscription = useRef<Unsubscribable>();\n  const [latestData, setLatestData] = useState<PanelData>();\n\n  useEffect(() => {\n    let lastRev = -1;\n    let lastUpdate = 0;\n\n    querySubscription.current = panel\n      .getQueryRunner()\n      .getData(options)\n      .subscribe({\n        next: (data) => {\n          if (checkSchema) {\n            if (lastRev === data.structureRev) {\n              const now = Date.now();\n              const elapsed = now - lastUpdate;\n              if (elapsed < 10000) {\n                return; // avoid updates if the schema has not changed for 10s\n              }\n              lastUpdate = now;\n            }\n            lastRev = data.structureRev ?? -1;\n          }\n          setLatestData(data);\n        },\n      });\n\n    return () => {\n      if (querySubscription.current) {\n        querySubscription.current.unsubscribe();\n      }\n    };\n    /**\n     * Adding separate options to dependencies array to avoid additional hook for comparing previous options with current.\n     * Otherwise, passing different references to the same object might cause troubles.\n     */\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [panel, options.withFieldConfig, options.withTransforms]);\n\n  return {\n    data: latestData,\n    error: latestData && latestData.error,\n    isLoading: latestData ? latestData.state === LoadingState.Loading : true,\n    hasSeries: latestData ? !!latestData.series : false,\n  };\n};\n","import React from 'react';\n\nimport { DataSourceApi, PanelData } from '@grafana/data';\n\ninterface InspectMetadataTabProps {\n  data: PanelData;\n  metadataDatasource?: DataSourceApi;\n}\nexport const InspectMetadataTab: React.FC<InspectMetadataTabProps> = ({ data, metadataDatasource }) => {\n  if (!metadataDatasource || !metadataDatasource.components?.MetadataInspector) {\n    return <div>No Metadata Inspector</div>;\n  }\n  return <metadataDatasource.components.MetadataInspector datasource={metadataDatasource} data={data.series} />;\n};\n","import React, { useState } from 'react';\n\nimport { DataSourceApi, formattedValueToString, getValueFormat, PanelData, PanelPlugin } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { Drawer, Tab, TabsBar } from '@grafana/ui';\nimport { InspectDataTab } from 'app/features/inspector/InspectDataTab';\nimport { InspectErrorTab } from 'app/features/inspector/InspectErrorTab';\nimport { InspectJSONTab } from 'app/features/inspector/InspectJSONTab';\nimport { InspectMetadataTab } from 'app/features/inspector/InspectMetadataTab';\nimport { InspectStatsTab } from 'app/features/inspector/InspectStatsTab';\nimport { QueryInspector } from 'app/features/inspector/QueryInspector';\nimport { InspectTab } from 'app/features/inspector/types';\n\nimport { GetDataOptions } from '../../../query/state/PanelQueryRunner';\nimport { DashboardModel, PanelModel } from '../../state';\n\ninterface Props {\n  dashboard: DashboardModel;\n  panel: PanelModel;\n  plugin?: PanelPlugin | null;\n  defaultTab?: InspectTab;\n  tabs: Array<{ label: string; value: InspectTab }>;\n  // The last raw response\n  data?: PanelData;\n  isDataLoading: boolean;\n  dataOptions: GetDataOptions;\n  // If the datasource supports custom metadata\n  metadataDatasource?: DataSourceApi;\n  onDataOptionsChange: (options: GetDataOptions) => void;\n  onClose: () => void;\n}\n\nexport const InspectContent: React.FC<Props> = ({\n  panel,\n  plugin,\n  dashboard,\n  tabs,\n  data,\n  isDataLoading,\n  dataOptions,\n  metadataDatasource,\n  defaultTab,\n  onDataOptionsChange,\n  onClose,\n}) => {\n  const [currentTab, setCurrentTab] = useState(defaultTab ?? InspectTab.Data);\n\n  if (!plugin) {\n    return null;\n  }\n\n  const error = data?.error;\n\n  // Validate that the active tab is actually valid and allowed\n  let activeTab = currentTab;\n  if (!tabs.find((item) => item.value === currentTab)) {\n    activeTab = InspectTab.JSON;\n  }\n\n  const title = getTemplateSrv().replace(panel.title, panel.scopedVars, 'text');\n\n  return (\n    <Drawer\n      title={`Inspect: ${title || 'Panel'}`}\n      subtitle={data && formatStats(data)}\n      width=\"50%\"\n      onClose={onClose}\n      expandable\n      scrollableContent\n      tabs={\n        <TabsBar>\n          {tabs.map((t, index) => {\n            return (\n              <Tab\n                key={`${t.value}-${index}`}\n                label={t.label}\n                active={t.value === activeTab}\n                onChangeTab={() => setCurrentTab(t.value || InspectTab.Data)}\n              />\n            );\n          })}\n        </TabsBar>\n      }\n    >\n      {activeTab === InspectTab.Data && (\n        <InspectDataTab\n          panel={panel}\n          data={data && data.series}\n          isLoading={isDataLoading}\n          options={dataOptions}\n          onOptionsChange={onDataOptionsChange}\n          timeZone={dashboard.timezone}\n        />\n      )}\n      {data && activeTab === InspectTab.Meta && (\n        <InspectMetadataTab data={data} metadataDatasource={metadataDatasource} />\n      )}\n\n      {activeTab === InspectTab.JSON && (\n        <InspectJSONTab panel={panel} dashboard={dashboard} data={data} onClose={onClose} />\n      )}\n      {activeTab === InspectTab.Error && <InspectErrorTab error={error} />}\n      {data && activeTab === InspectTab.Stats && <InspectStatsTab data={data} timeZone={dashboard.getTimezone()} />}\n      {data && activeTab === InspectTab.Query && (\n        <QueryInspector panel={panel} data={data.series} onRefreshQuery={() => panel.refresh()} />\n      )}\n    </Drawer>\n  );\n};\n\nfunction formatStats(data: PanelData) {\n  const { request } = data;\n  if (!request) {\n    return '';\n  }\n\n  const queryCount = request.targets.length;\n  const requestTime = request.endTime ? request.endTime - request.startTime : 0;\n  const formatted = formattedValueToString(getValueFormat('ms')(requestTime));\n\n  return `${queryCount} queries with total query time of ${formatted}`;\n}\n","import { useMemo } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\n\nimport { DataQueryError, DataSourceApi, PanelData, PanelPlugin } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\nimport { InspectTab } from 'app/features/inspector/types';\n\nimport { supportsDataQuery } from '../PanelEditor/utils';\n\nimport { PanelInspectActionSupplier } from './PanelInspectActions';\n\n/**\n * Given PanelData return first data source supporting metadata inspector\n */\nexport const useDatasourceMetadata = (data?: PanelData) => {\n  const state = useAsync(async () => {\n    const targets = data?.request?.targets || [];\n\n    if (data && data.series && targets.length) {\n      for (const frame of data.series) {\n        if (frame.meta && frame.meta.custom) {\n          // get data source from first query\n          const dataSource = await getDataSourceSrv().get(targets[0].datasource);\n          if (dataSource && dataSource.components?.MetadataInspector) {\n            return dataSource;\n          }\n        }\n      }\n    }\n\n    return undefined;\n  }, [data]);\n  return state.value;\n};\n\n/**\n * Configures tabs for PanelInspector\n */\nexport const useInspectTabs = (\n  panel: PanelModel,\n  dashboard: DashboardModel,\n  plugin: PanelPlugin | undefined | null,\n  error?: DataQueryError,\n  metaDs?: DataSourceApi\n) => {\n  return useMemo(() => {\n    const tabs = [];\n    if (supportsDataQuery(plugin)) {\n      tabs.push({ label: 'Data', value: InspectTab.Data });\n      tabs.push({ label: 'Stats', value: InspectTab.Stats });\n    }\n\n    if (metaDs) {\n      tabs.push({ label: 'Meta Data', value: InspectTab.Meta });\n    }\n\n    tabs.push({ label: 'JSON', value: InspectTab.JSON });\n\n    if (error && error.message) {\n      tabs.push({ label: 'Error', value: InspectTab.Error });\n    }\n\n    // This is a quick internal hack to allow custom actions in inspect\n    // For 8.1, something like this should be exposed through grafana/runtime\n    const supplier = (window as any).grafanaPanelInspectActionSupplier as PanelInspectActionSupplier;\n    if (supplier && supplier.getActions(panel)) {\n      tabs.push({ label: 'Actions', value: InspectTab.Actions });\n    }\n\n    if (dashboard.meta.canEdit && supportsDataQuery(plugin)) {\n      tabs.push({ label: 'Query', value: InspectTab.Query });\n    }\n    return tabs;\n  }, [panel, plugin, metaDs, dashboard, error]);\n};\n","import React, { useState } from 'react';\nimport { connect, MapStateToProps } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { PanelPlugin } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\nimport { InspectTab } from 'app/features/inspector/types';\nimport { getPanelStateForModel } from 'app/features/panel/state/selectors';\nimport { StoreState } from 'app/types';\n\nimport { GetDataOptions } from '../../../query/state/PanelQueryRunner';\nimport { usePanelLatestData } from '../PanelEditor/usePanelLatestData';\n\nimport { InspectContent } from './InspectContent';\nimport { useDatasourceMetadata, useInspectTabs } from './hooks';\n\ninterface OwnProps {\n  dashboard: DashboardModel;\n  panel: PanelModel;\n}\n\nexport interface ConnectedProps {\n  plugin?: PanelPlugin | null;\n}\n\nexport type Props = OwnProps & ConnectedProps;\n\nconst PanelInspectorUnconnected: React.FC<Props> = ({ panel, dashboard, plugin }) => {\n  const [dataOptions, setDataOptions] = useState<GetDataOptions>({\n    withTransforms: false,\n    withFieldConfig: true,\n  });\n\n  const location = useLocation();\n  const { data, isLoading, error } = usePanelLatestData(panel, dataOptions, true);\n  const metaDs = useDatasourceMetadata(data);\n  const tabs = useInspectTabs(panel, dashboard, plugin, error, metaDs);\n  const defaultTab = new URLSearchParams(location.search).get('inspectTab') as InspectTab;\n\n  const onClose = () => {\n    locationService.partial({\n      inspect: null,\n      inspectTab: null,\n    });\n  };\n\n  if (!plugin) {\n    return null;\n  }\n\n  return (\n    <InspectContent\n      dashboard={dashboard}\n      panel={panel}\n      plugin={plugin}\n      defaultTab={defaultTab}\n      tabs={tabs}\n      data={data}\n      isDataLoading={isLoading}\n      dataOptions={dataOptions}\n      onDataOptionsChange={setDataOptions}\n      metadataDatasource={metaDs}\n      onClose={onClose}\n    />\n  );\n};\n\nconst mapStateToProps: MapStateToProps<ConnectedProps, OwnProps, StoreState> = (state, props) => {\n  const panelState = getPanelStateForModel(state, props.panel);\n  if (!panelState) {\n    return { plugin: null };\n  }\n\n  return {\n    plugin: panelState.plugin,\n  };\n};\n\nexport const PanelInspector = connect(mapStateToProps)(PanelInspectorUnconnected);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport stylePropType from 'react-style-proptype';\nimport { polyfill } from 'react-lifecycles-compat';\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n  return function () {\n    var Super = _getPrototypeOf(Derived),\n        result;\n\n    if (_isNativeReflectConstruct()) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return _possibleConstructorReturn(this, result);\n  };\n}\n\nvar Pane = /*#__PURE__*/function (_React$PureComponent) {\n  _inherits(Pane, _React$PureComponent);\n\n  var _super = _createSuper(Pane);\n\n  function Pane() {\n    _classCallCheck(this, Pane);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Pane, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          children = _this$props.children,\n          className = _this$props.className,\n          split = _this$props.split,\n          styleProps = _this$props.style,\n          size = _this$props.size,\n          eleRef = _this$props.eleRef;\n      var classes = ['Pane', split, className];\n      var style = {\n        flex: 1,\n        position: 'relative',\n        outline: 'none'\n      };\n\n      if (size !== undefined) {\n        if (split === 'vertical') {\n          style.width = size;\n        } else {\n          style.height = size;\n          style.display = 'flex';\n        }\n\n        style.flex = 'none';\n      }\n\n      style = Object.assign({}, style, styleProps || {});\n      return /*#__PURE__*/React.createElement(\"div\", {\n        ref: eleRef,\n        className: classes.join(' '),\n        style: style\n      }, children);\n    }\n  }]);\n\n  return Pane;\n}(React.PureComponent);\n\nPane.propTypes = {\n  className: PropTypes.string.isRequired,\n  children: PropTypes.node.isRequired,\n  size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  split: PropTypes.oneOf(['vertical', 'horizontal']),\n  style: stylePropType,\n  eleRef: PropTypes.func\n};\nPane.defaultProps = {};\n\nvar RESIZER_DEFAULT_CLASSNAME = 'Resizer';\n\nvar Resizer = /*#__PURE__*/function (_React$Component) {\n  _inherits(Resizer, _React$Component);\n\n  var _super = _createSuper(Resizer);\n\n  function Resizer() {\n    _classCallCheck(this, Resizer);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Resizer, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          className = _this$props.className,\n          _onClick = _this$props.onClick,\n          _onDoubleClick = _this$props.onDoubleClick,\n          _onMouseDown = _this$props.onMouseDown,\n          _onTouchEnd = _this$props.onTouchEnd,\n          _onTouchStart = _this$props.onTouchStart,\n          resizerClassName = _this$props.resizerClassName,\n          split = _this$props.split,\n          style = _this$props.style;\n      var classes = [resizerClassName, split, className];\n      return /*#__PURE__*/React.createElement(\"span\", {\n        role: \"presentation\",\n        className: classes.join(' '),\n        style: style,\n        onMouseDown: function onMouseDown(event) {\n          return _onMouseDown(event);\n        },\n        onTouchStart: function onTouchStart(event) {\n          event.preventDefault();\n\n          _onTouchStart(event);\n        },\n        onTouchEnd: function onTouchEnd(event) {\n          event.preventDefault();\n\n          _onTouchEnd(event);\n        },\n        onClick: function onClick(event) {\n          if (_onClick) {\n            event.preventDefault();\n\n            _onClick(event);\n          }\n        },\n        onDoubleClick: function onDoubleClick(event) {\n          if (_onDoubleClick) {\n            event.preventDefault();\n\n            _onDoubleClick(event);\n          }\n        }\n      });\n    }\n  }]);\n\n  return Resizer;\n}(React.Component);\n\nResizer.propTypes = {\n  className: PropTypes.string.isRequired,\n  onClick: PropTypes.func,\n  onDoubleClick: PropTypes.func,\n  onMouseDown: PropTypes.func.isRequired,\n  onTouchStart: PropTypes.func.isRequired,\n  onTouchEnd: PropTypes.func.isRequired,\n  split: PropTypes.oneOf(['vertical', 'horizontal']),\n  style: stylePropType,\n  resizerClassName: PropTypes.string.isRequired\n};\nResizer.defaultProps = {\n  resizerClassName: RESIZER_DEFAULT_CLASSNAME\n};\n\nfunction unFocus(document, window) {\n  if (document.selection) {\n    document.selection.empty();\n  } else {\n    try {\n      window.getSelection().removeAllRanges(); // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\n\nfunction getDefaultSize(defaultSize, minSize, maxSize, draggedSize) {\n  if (typeof draggedSize === 'number') {\n    var min = typeof minSize === 'number' ? minSize : 0;\n    var max = typeof maxSize === 'number' && maxSize >= 0 ? maxSize : Infinity;\n    return Math.max(min, Math.min(max, draggedSize));\n  }\n\n  if (defaultSize !== undefined) {\n    return defaultSize;\n  }\n\n  return minSize;\n}\n\nfunction removeNullChildren(children) {\n  return React.Children.toArray(children).filter(function (c) {\n    return c;\n  });\n}\n\nvar SplitPane = /*#__PURE__*/function (_React$Component) {\n  _inherits(SplitPane, _React$Component);\n\n  var _super = _createSuper(SplitPane);\n\n  function SplitPane(props) {\n    var _this;\n\n    _classCallCheck(this, SplitPane);\n\n    _this = _super.call(this, props);\n    _this.onMouseDown = _this.onMouseDown.bind(_assertThisInitialized(_this));\n    _this.onTouchStart = _this.onTouchStart.bind(_assertThisInitialized(_this));\n    _this.onMouseMove = _this.onMouseMove.bind(_assertThisInitialized(_this));\n    _this.onTouchMove = _this.onTouchMove.bind(_assertThisInitialized(_this));\n    _this.onMouseUp = _this.onMouseUp.bind(_assertThisInitialized(_this)); // order of setting panel sizes.\n    // 1. size\n    // 2. getDefaultSize(defaultSize, minsize, maxSize)\n\n    var size = props.size,\n        defaultSize = props.defaultSize,\n        minSize = props.minSize,\n        maxSize = props.maxSize,\n        primary = props.primary;\n    var initialSize = size !== undefined ? size : getDefaultSize(defaultSize, minSize, maxSize, null);\n    _this.state = {\n      active: false,\n      resized: false,\n      pane1Size: primary === 'first' ? initialSize : undefined,\n      pane2Size: primary === 'second' ? initialSize : undefined,\n      // these are props that are needed in static functions. ie: gDSFP\n      instanceProps: {\n        size: size\n      }\n    };\n    return _this;\n  }\n\n  _createClass(SplitPane, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      document.addEventListener('mouseup', this.onMouseUp);\n      document.addEventListener('mousemove', this.onMouseMove);\n      document.addEventListener('touchmove', this.onTouchMove);\n      this.setState(SplitPane.getSizeUpdate(this.props, this.state));\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      document.removeEventListener('mouseup', this.onMouseUp);\n      document.removeEventListener('mousemove', this.onMouseMove);\n      document.removeEventListener('touchmove', this.onTouchMove);\n    }\n  }, {\n    key: \"onMouseDown\",\n    value: function onMouseDown(event) {\n      var eventWithTouches = Object.assign({}, event, {\n        touches: [{\n          clientX: event.clientX,\n          clientY: event.clientY\n        }]\n      });\n      this.onTouchStart(eventWithTouches);\n    }\n  }, {\n    key: \"onTouchStart\",\n    value: function onTouchStart(event) {\n      var _this$props = this.props,\n          allowResize = _this$props.allowResize,\n          onDragStarted = _this$props.onDragStarted,\n          split = _this$props.split;\n\n      if (allowResize) {\n        unFocus(document, window);\n        var position = split === 'vertical' ? event.touches[0].clientX : event.touches[0].clientY;\n\n        if (typeof onDragStarted === 'function') {\n          onDragStarted();\n        }\n\n        this.setState({\n          active: true,\n          position: position\n        });\n      }\n    }\n  }, {\n    key: \"onMouseMove\",\n    value: function onMouseMove(event) {\n      var eventWithTouches = Object.assign({}, event, {\n        touches: [{\n          clientX: event.clientX,\n          clientY: event.clientY\n        }]\n      });\n      this.onTouchMove(eventWithTouches);\n    }\n  }, {\n    key: \"onTouchMove\",\n    value: function onTouchMove(event) {\n      var _this$props2 = this.props,\n          allowResize = _this$props2.allowResize,\n          maxSize = _this$props2.maxSize,\n          minSize = _this$props2.minSize,\n          onChange = _this$props2.onChange,\n          split = _this$props2.split,\n          step = _this$props2.step;\n      var _this$state = this.state,\n          active = _this$state.active,\n          position = _this$state.position;\n\n      if (allowResize && active) {\n        unFocus(document, window);\n        var isPrimaryFirst = this.props.primary === 'first';\n        var ref = isPrimaryFirst ? this.pane1 : this.pane2;\n        var ref2 = isPrimaryFirst ? this.pane2 : this.pane1;\n\n        if (ref) {\n          var node = ref;\n          var node2 = ref2;\n\n          if (node.getBoundingClientRect) {\n            var width = node.getBoundingClientRect().width;\n            var height = node.getBoundingClientRect().height;\n            var current = split === 'vertical' ? event.touches[0].clientX : event.touches[0].clientY;\n            var size = split === 'vertical' ? width : height;\n            var positionDelta = position - current;\n\n            if (step) {\n              if (Math.abs(positionDelta) < step) {\n                return;\n              } // Integer division\n              // eslint-disable-next-line no-bitwise\n\n\n              positionDelta = ~~(positionDelta / step) * step;\n            }\n\n            var sizeDelta = isPrimaryFirst ? positionDelta : -positionDelta;\n            var pane1Order = parseInt(window.getComputedStyle(node).order);\n            var pane2Order = parseInt(window.getComputedStyle(node2).order);\n\n            if (pane1Order > pane2Order) {\n              sizeDelta = -sizeDelta;\n            }\n\n            var newMaxSize = maxSize;\n\n            if (maxSize !== undefined && maxSize <= 0) {\n              var splitPane = this.splitPane;\n\n              if (split === 'vertical') {\n                newMaxSize = splitPane.getBoundingClientRect().width + maxSize;\n              } else {\n                newMaxSize = splitPane.getBoundingClientRect().height + maxSize;\n              }\n            }\n\n            var newSize = size - sizeDelta;\n            var newPosition = position - positionDelta;\n\n            if (newSize < minSize) {\n              newSize = minSize;\n            } else if (maxSize !== undefined && newSize > newMaxSize) {\n              newSize = newMaxSize;\n            } else {\n              this.setState({\n                position: newPosition,\n                resized: true\n              });\n            }\n\n            if (onChange) onChange(newSize);\n            this.setState(_defineProperty({\n              draggedSize: newSize\n            }, isPrimaryFirst ? 'pane1Size' : 'pane2Size', newSize));\n          }\n        }\n      }\n    }\n  }, {\n    key: \"onMouseUp\",\n    value: function onMouseUp() {\n      var _this$props3 = this.props,\n          allowResize = _this$props3.allowResize,\n          onDragFinished = _this$props3.onDragFinished;\n      var _this$state2 = this.state,\n          active = _this$state2.active,\n          draggedSize = _this$state2.draggedSize;\n\n      if (allowResize && active) {\n        if (typeof onDragFinished === 'function') {\n          onDragFinished(draggedSize);\n        }\n\n        this.setState({\n          active: false\n        });\n      }\n    } // we have to check values since gDSFP is called on every render and more in StrictMode\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props4 = this.props,\n          allowResize = _this$props4.allowResize,\n          children = _this$props4.children,\n          className = _this$props4.className,\n          onResizerClick = _this$props4.onResizerClick,\n          onResizerDoubleClick = _this$props4.onResizerDoubleClick,\n          paneClassName = _this$props4.paneClassName,\n          pane1ClassName = _this$props4.pane1ClassName,\n          pane2ClassName = _this$props4.pane2ClassName,\n          paneStyle = _this$props4.paneStyle,\n          pane1StyleProps = _this$props4.pane1Style,\n          pane2StyleProps = _this$props4.pane2Style,\n          resizerClassName = _this$props4.resizerClassName,\n          resizerStyle = _this$props4.resizerStyle,\n          split = _this$props4.split,\n          styleProps = _this$props4.style;\n      var _this$state3 = this.state,\n          pane1Size = _this$state3.pane1Size,\n          pane2Size = _this$state3.pane2Size;\n      var disabledClass = allowResize ? '' : 'disabled';\n      var resizerClassNamesIncludingDefault = resizerClassName ? \"\".concat(resizerClassName, \" \").concat(RESIZER_DEFAULT_CLASSNAME) : resizerClassName;\n      var notNullChildren = removeNullChildren(children);\n\n      var style = _objectSpread2({\n        display: 'flex',\n        flex: 1,\n        height: '100%',\n        position: 'absolute',\n        outline: 'none',\n        overflow: 'hidden',\n        MozUserSelect: 'text',\n        WebkitUserSelect: 'text',\n        msUserSelect: 'text',\n        userSelect: 'text'\n      }, styleProps);\n\n      if (split === 'vertical') {\n        Object.assign(style, {\n          flexDirection: 'row',\n          left: 0,\n          right: 0\n        });\n      } else {\n        Object.assign(style, {\n          bottom: 0,\n          flexDirection: 'column',\n          minHeight: '100%',\n          top: 0,\n          width: '100%'\n        });\n      }\n\n      var classes = ['SplitPane', className, split, disabledClass];\n\n      var pane1Style = _objectSpread2({}, paneStyle, {}, pane1StyleProps);\n\n      var pane2Style = _objectSpread2({}, paneStyle, {}, pane2StyleProps);\n\n      var pane1Classes = ['Pane1', paneClassName, pane1ClassName].join(' ');\n      var pane2Classes = ['Pane2', paneClassName, pane2ClassName].join(' ');\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: classes.join(' '),\n        ref: function ref(node) {\n          _this2.splitPane = node;\n        },\n        style: style\n      }, /*#__PURE__*/React.createElement(Pane, {\n        className: pane1Classes,\n        key: \"pane1\",\n        eleRef: function eleRef(node) {\n          _this2.pane1 = node;\n        },\n        size: pane1Size,\n        split: split,\n        style: pane1Style\n      }, notNullChildren[0]), /*#__PURE__*/React.createElement(Resizer, {\n        className: disabledClass,\n        onClick: onResizerClick,\n        onDoubleClick: onResizerDoubleClick,\n        onMouseDown: this.onMouseDown,\n        onTouchStart: this.onTouchStart,\n        onTouchEnd: this.onMouseUp,\n        key: \"resizer\",\n        resizerClassName: resizerClassNamesIncludingDefault,\n        split: split,\n        style: resizerStyle || {}\n      }), /*#__PURE__*/React.createElement(Pane, {\n        className: pane2Classes,\n        key: \"pane2\",\n        eleRef: function eleRef(node) {\n          _this2.pane2 = node;\n        },\n        size: pane2Size,\n        split: split,\n        style: pane2Style\n      }, notNullChildren[1]));\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(nextProps, prevState) {\n      return SplitPane.getSizeUpdate(nextProps, prevState);\n    }\n  }, {\n    key: \"getSizeUpdate\",\n    value: function getSizeUpdate(props, state) {\n      var newState = {};\n      var instanceProps = state.instanceProps;\n\n      if (instanceProps.size === props.size && props.size !== undefined) {\n        return {};\n      }\n\n      var newSize = props.size !== undefined ? props.size : getDefaultSize(props.defaultSize, props.minSize, props.maxSize, state.draggedSize);\n\n      if (props.size !== undefined) {\n        newState.draggedSize = newSize;\n      }\n\n      var isPanel1Primary = props.primary === 'first';\n      newState[isPanel1Primary ? 'pane1Size' : 'pane2Size'] = newSize;\n      newState[isPanel1Primary ? 'pane2Size' : 'pane1Size'] = undefined;\n      newState.instanceProps = {\n        size: props.size\n      };\n      return newState;\n    }\n  }]);\n\n  return SplitPane;\n}(React.Component);\n\nSplitPane.propTypes = {\n  allowResize: PropTypes.bool,\n  children: PropTypes.arrayOf(PropTypes.node).isRequired,\n  className: PropTypes.string,\n  primary: PropTypes.oneOf(['first', 'second']),\n  minSize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  maxSize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  // eslint-disable-next-line react/no-unused-prop-types\n  defaultSize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  split: PropTypes.oneOf(['vertical', 'horizontal']),\n  onDragStarted: PropTypes.func,\n  onDragFinished: PropTypes.func,\n  onChange: PropTypes.func,\n  onResizerClick: PropTypes.func,\n  onResizerDoubleClick: PropTypes.func,\n  style: stylePropType,\n  resizerStyle: stylePropType,\n  paneClassName: PropTypes.string,\n  pane1ClassName: PropTypes.string,\n  pane2ClassName: PropTypes.string,\n  paneStyle: stylePropType,\n  pane1Style: stylePropType,\n  pane2Style: stylePropType,\n  resizerClassName: PropTypes.string,\n  step: PropTypes.number\n};\nSplitPane.defaultProps = {\n  allowResize: true,\n  minSize: 50,\n  primary: 'first',\n  split: 'vertical',\n  paneClassName: '',\n  pane1ClassName: '',\n  pane2ClassName: ''\n};\npolyfill(SplitPane);\n\nexport default SplitPane;\nexport { Pane };\n","import { css, cx } from '@emotion/css';\nimport React, { createRef, MutableRefObject, PureComponent, ReactNode } from 'react';\nimport SplitPane from 'react-split-pane';\n\nimport { GrafanaTheme } from '@grafana/data';\nimport { stylesFactory } from '@grafana/ui';\nimport { config } from 'app/core/config';\n\nenum Pane {\n  Right,\n  Top,\n}\n\ninterface Props {\n  leftPaneComponents: ReactNode[] | ReactNode;\n  rightPaneComponents: ReactNode;\n  uiState: { topPaneSize: number; rightPaneSize: number };\n  rightPaneVisible?: boolean;\n  updateUiState: (uiState: { topPaneSize?: number; rightPaneSize?: number }) => void;\n}\n\nexport class SplitPaneWrapper extends PureComponent<Props> {\n  rafToken: MutableRefObject<number | null> = createRef();\n  static defaultProps = {\n    rightPaneVisible: true,\n  };\n\n  componentDidMount() {\n    window.addEventListener('resize', this.updateSplitPaneSize);\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.updateSplitPaneSize);\n  }\n\n  updateSplitPaneSize = () => {\n    if (this.rafToken.current !== undefined) {\n      window.cancelAnimationFrame(this.rafToken.current!);\n    }\n    this.rafToken.current = window.requestAnimationFrame(() => {\n      this.forceUpdate();\n    });\n  };\n\n  onDragFinished = (pane: Pane, size?: number) => {\n    document.body.style.cursor = 'auto';\n\n    // When the drag handle is just clicked size is undefined\n    if (!size) {\n      return;\n    }\n\n    const { updateUiState } = this.props;\n    if (pane === Pane.Top) {\n      updateUiState({\n        topPaneSize: size / window.innerHeight,\n      });\n    } else {\n      updateUiState({\n        rightPaneSize: size / window.innerWidth,\n      });\n    }\n  };\n\n  onDragStarted = () => {\n    document.body.style.cursor = 'row-resize';\n  };\n\n  renderHorizontalSplit() {\n    const { leftPaneComponents, uiState } = this.props;\n    const styles = getStyles(config.theme);\n    const topPaneSize = uiState.topPaneSize >= 1 ? uiState.topPaneSize : uiState.topPaneSize * window.innerHeight;\n\n    /*\n      Guesstimate the height of the browser window minus\n      panel toolbar and editor toolbar (~120px). This is to prevent resizing\n      the preview window beyond the browser window.\n     */\n\n    if (Array.isArray(leftPaneComponents)) {\n      return (\n        <SplitPane\n          split=\"horizontal\"\n          maxSize={-200}\n          primary=\"first\"\n          size={topPaneSize}\n          pane2Style={{ minHeight: 0 }}\n          resizerClassName={styles.resizerH}\n          onDragStarted={this.onDragStarted}\n          onDragFinished={(size) => this.onDragFinished(Pane.Top, size)}\n        >\n          {leftPaneComponents}\n        </SplitPane>\n      );\n    }\n\n    return leftPaneComponents;\n  }\n\n  render() {\n    const { rightPaneVisible, rightPaneComponents, uiState } = this.props;\n    // Limit options pane width to 90% of screen.\n    const styles = getStyles(config.theme);\n\n    // Need to handle when width is relative. ie a percentage of the viewport\n    const rightPaneSize =\n      uiState.rightPaneSize <= 1 ? uiState.rightPaneSize * window.innerWidth : uiState.rightPaneSize;\n\n    if (!rightPaneVisible) {\n      return this.renderHorizontalSplit();\n    }\n\n    return (\n      <SplitPane\n        split=\"vertical\"\n        maxSize={-300}\n        size={rightPaneSize}\n        primary=\"second\"\n        resizerClassName={styles.resizerV}\n        onDragStarted={() => (document.body.style.cursor = 'col-resize')}\n        onDragFinished={(size) => this.onDragFinished(Pane.Right, size)}\n      >\n        {this.renderHorizontalSplit()}\n        {rightPaneComponents}\n      </SplitPane>\n    );\n  }\n}\n\nconst getStyles = stylesFactory((theme: GrafanaTheme) => {\n  const handleColor = theme.palette.blue95;\n  const paneSpacing = theme.spacing.md;\n\n  const resizer = css`\n    position: relative;\n\n    &::before {\n      content: '';\n      position: absolute;\n      transition: 0.2s border-color ease-in-out;\n    }\n\n    &::after {\n      background: ${theme.colors.panelBorder};\n      content: '';\n      position: absolute;\n      left: 50%;\n      top: 50%;\n      transition: 0.2s background ease-in-out;\n      transform: translate(-50%, -50%);\n      border-radius: 4px;\n    }\n\n    &:hover {\n      &::before {\n        border-color: ${handleColor};\n      }\n\n      &::after {\n        background: ${handleColor};\n      }\n    }\n  `;\n\n  return {\n    resizerV: cx(\n      resizer,\n      css`\n        cursor: col-resize;\n        width: ${paneSpacing};\n\n        &::before {\n          border-right: 1px solid transparent;\n          height: 100%;\n          left: 50%;\n          transform: translateX(-50%);\n        }\n\n        &::after {\n          height: 200px;\n          width: 4px;\n        }\n      `\n    ),\n    resizerH: cx(\n      resizer,\n      css`\n        height: ${paneSpacing};\n        cursor: row-resize;\n        margin-left: ${paneSpacing};\n\n        &::before {\n          border-top: 1px solid transparent;\n          top: 50%;\n          transform: translateY(-50%);\n          width: 100%;\n        }\n\n        &::after {\n          height: 4px;\n          width: 200px;\n        }\n      `\n    ),\n  };\n});\n","import React, { FunctionComponent, PropsWithChildren, ReactElement, useMemo } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Tooltip } from '@grafana/ui';\n\nimport { variableAdapters } from '../adapters';\nimport { VariableHide, VariableModel } from '../types';\n\ninterface Props {\n  variable: VariableModel;\n}\n\nexport const PickerRenderer: FunctionComponent<Props> = (props) => {\n  const PickerToRender = useMemo(() => variableAdapters.get(props.variable.type).picker, [props.variable]);\n\n  if (!props.variable) {\n    return <div>Couldn&apos;t load variable</div>;\n  }\n\n  return (\n    <div className=\"gf-form\">\n      <PickerLabel variable={props.variable} />\n      {props.variable.hide !== VariableHide.hideVariable && PickerToRender && (\n        <PickerToRender variable={props.variable} />\n      )}\n    </div>\n  );\n};\n\nfunction PickerLabel({ variable }: PropsWithChildren<Props>): ReactElement | null {\n  const labelOrName = useMemo(() => variable.label || variable.name, [variable]);\n\n  if (variable.hide !== VariableHide.dontHide) {\n    return null;\n  }\n\n  const elementId = `var-${variable.id}`;\n  if (variable.description) {\n    return (\n      <Tooltip content={variable.description} placement={'bottom'}>\n        <label\n          className=\"gf-form-label gf-form-label--variable\"\n          data-testid={selectors.pages.Dashboard.SubMenu.submenuItemLabels(labelOrName)}\n          htmlFor={elementId}\n        >\n          {labelOrName}\n        </label>\n      </Tooltip>\n    );\n  }\n\n  return (\n    <label\n      className=\"gf-form-label gf-form-label--variable\"\n      data-testid={selectors.pages.Dashboard.SubMenu.submenuItemLabels(labelOrName)}\n      htmlFor={elementId}\n    >\n      {labelOrName}\n    </label>\n  );\n}\n","import React, { FunctionComponent, useEffect, useState } from 'react';\n\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { PickerRenderer } from '../../../variables/pickers/PickerRenderer';\nimport { VariableHide, VariableModel } from '../../../variables/types';\n\ninterface Props {\n  variables: VariableModel[];\n}\n\nexport const SubMenuItems: FunctionComponent<Props> = ({ variables }) => {\n  const [visibleVariables, setVisibleVariables] = useState<VariableModel[]>([]);\n\n  useEffect(() => {\n    setVisibleVariables(variables.filter((state) => state.hide !== VariableHide.hideVariable));\n  }, [variables]);\n\n  if (visibleVariables.length === 0) {\n    return null;\n  }\n\n  return (\n    <>\n      {visibleVariables.map((variable) => {\n        return (\n          <div\n            key={variable.id}\n            className=\"submenu-item gf-form-inline\"\n            data-testid={selectors.pages.Dashboard.SubMenu.submenuItem}\n          >\n            <PickerRenderer variable={variable} />\n          </div>\n        );\n      })}\n    </>\n  );\n};\n","import React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { PanelPlugin, PanelPluginMeta } from '@grafana/data';\nimport { AngularComponent, getAngularLoader } from '@grafana/runtime';\nimport { PanelCtrl } from 'app/angular/panel/panel_ctrl';\nimport { changePanelPlugin } from 'app/features/panel/state/actions';\nimport { getPanelStateForModel } from 'app/features/panel/state/selectors';\nimport { StoreState } from 'app/types';\n\nimport { PanelModel, DashboardModel } from '../../state';\n\nimport { getSectionOpenState, saveSectionOpenState } from './state/utils';\n\ninterface OwnProps {\n  panel: PanelModel;\n  dashboard: DashboardModel;\n  plugin: PanelPlugin;\n}\n\nconst mapStateToProps = (state: StoreState, props: OwnProps) => ({\n  angularPanelComponent: getPanelStateForModel(state, props.panel)?.angularComponent,\n});\n\nconst mapDispatchToProps = { changePanelPlugin };\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype Props = ConnectedProps<typeof connector> & OwnProps;\n\nexport class AngularPanelOptionsUnconnected extends PureComponent<Props> {\n  element?: HTMLElement | null;\n  angularOptions?: AngularComponent | null;\n\n  constructor(props: Props) {\n    super(props);\n  }\n\n  componentDidMount() {\n    this.loadAngularOptions();\n  }\n\n  componentDidUpdate(prevProps: Props) {\n    if (\n      this.props.plugin !== prevProps.plugin ||\n      this.props.angularPanelComponent !== prevProps.angularPanelComponent\n    ) {\n      this.cleanUpAngularOptions();\n    }\n\n    this.loadAngularOptions();\n  }\n\n  componentWillUnmount() {\n    this.cleanUpAngularOptions();\n  }\n\n  cleanUpAngularOptions() {\n    if (this.angularOptions) {\n      this.angularOptions.destroy();\n      this.angularOptions = null;\n    }\n  }\n\n  loadAngularOptions() {\n    const { panel, angularPanelComponent, changePanelPlugin } = this.props;\n\n    if (!this.element || !angularPanelComponent || this.angularOptions) {\n      return;\n    }\n\n    const scope = angularPanelComponent.getScope();\n\n    // When full page reloading in edit mode the angular panel has on fully compiled and instantiated yet\n    if (!scope.$$childHead) {\n      setTimeout(() => {\n        this.forceUpdate();\n      });\n      return;\n    }\n\n    const panelCtrl: PanelCtrl = scope.$$childHead.ctrl;\n    panelCtrl.initEditMode();\n    panelCtrl.onPluginTypeChange = (plugin: PanelPluginMeta) => {\n      changePanelPlugin({ panel, pluginId: plugin.id });\n    };\n\n    let template = '';\n    for (let i = 0; i < panelCtrl.editorTabs.length; i++) {\n      const tab = panelCtrl.editorTabs[i];\n      tab.isOpen = getSectionOpenState(tab.title, i === 0);\n\n      template += `\n      <div class=\"panel-options-group\" ng-cloak>\n        <div class=\"panel-options-group__header\" ng-click=\"toggleOptionGroup(${i})\" aria-label=\"${tab.title} section\">\n          <div class=\"panel-options-group__icon\">\n            <icon name=\"ctrl.editorTabs[${i}].isOpen ? 'angle-down' : 'angle-right'\"></icon>\n          </div>\n          <div class=\"panel-options-group__title\">${tab.title}</div>\n        </div>\n        <div class=\"panel-options-group__body\" ng-if=\"ctrl.editorTabs[${i}].isOpen\">\n          <panel-editor-tab editor-tab=\"ctrl.editorTabs[${i}]\" ctrl=\"ctrl\"></panel-editor-tab>\n        </div>\n      </div>\n      `;\n    }\n\n    const loader = getAngularLoader();\n    const scopeProps = {\n      ctrl: panelCtrl,\n      toggleOptionGroup: (index: number) => {\n        const tab = panelCtrl.editorTabs[index];\n        tab.isOpen = !tab.isOpen;\n        saveSectionOpenState(tab.title, tab.isOpen as boolean);\n      },\n    };\n\n    this.angularOptions = loader.load(this.element, scopeProps, template);\n    this.angularOptions.digest();\n  }\n\n  render() {\n    return <div ref={(elem) => (this.element = elem)} />;\n  }\n}\n\nexport const AngularPanelOptions = connect(mapStateToProps, mapDispatchToProps)(AngularPanelOptionsUnconnected);\n","import store from 'app/core/store';\n\nexport function saveSectionOpenState(id: string, isOpen: boolean) {\n  store.set(`panel-edit-section-${id}`, isOpen ? 'true' : 'false');\n}\n\nexport function getSectionOpenState(id: string, defaultValue: boolean) {\n  return store.getBool(`panel-edit-section-${id}`, defaultValue);\n}\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\nimport Highlighter from 'react-highlight-words';\n\nimport {\n  DynamicConfigValue,\n  FieldConfigOptionsRegistry,\n  FieldConfigProperty,\n  FieldOverrideContext,\n  GrafanaTheme,\n} from '@grafana/data';\nimport { Counter, Field, HorizontalGroup, IconButton, Label, stylesFactory, useTheme } from '@grafana/ui';\n\nimport { OptionsPaneCategory } from './OptionsPaneCategory';\n\ninterface DynamicConfigValueEditorProps {\n  property: DynamicConfigValue;\n  registry: FieldConfigOptionsRegistry;\n  onChange: (value: DynamicConfigValue) => void;\n  context: FieldOverrideContext;\n  onRemove: () => void;\n  isSystemOverride?: boolean;\n  searchQuery: string;\n}\n\nexport const DynamicConfigValueEditor: React.FC<DynamicConfigValueEditorProps> = ({\n  property,\n  context,\n  registry,\n  onChange,\n  onRemove,\n  isSystemOverride,\n  searchQuery,\n}) => {\n  const theme = useTheme();\n  const styles = getStyles(theme);\n  const item = registry?.getIfExists(property.id);\n\n  if (!item) {\n    return null;\n  }\n\n  const isCollapsible =\n    Array.isArray(property.value) ||\n    property.id === FieldConfigProperty.Thresholds ||\n    property.id === FieldConfigProperty.Links ||\n    property.id === FieldConfigProperty.Mappings;\n\n  const labelCategory = item.category?.filter((c) => c !== item.name);\n  let editor;\n\n  /* eslint-disable react/display-name */\n  const renderLabel =\n    (includeDescription = true, includeCounter = false) =>\n    (isExpanded = false) =>\n      (\n        <HorizontalGroup justify=\"space-between\">\n          <Label category={labelCategory} description={includeDescription ? item.description : undefined}>\n            <Highlighter\n              textToHighlight={item.name}\n              searchWords={[searchQuery]}\n              highlightClassName={'search-fragment-highlight'}\n            />\n            {!isExpanded && includeCounter && item.getItemsCount && (\n              <Counter value={item.getItemsCount(property.value)} />\n            )}\n          </Label>\n          {!isSystemOverride && (\n            <div>\n              <IconButton name=\"times\" onClick={onRemove} />\n            </div>\n          )}\n        </HorizontalGroup>\n      );\n  /* eslint-enable react/display-name */\n\n  if (isCollapsible) {\n    editor = (\n      <OptionsPaneCategory\n        id={item.name}\n        renderTitle={renderLabel(false, true)}\n        className={css`\n          padding-left: 0;\n          padding-right: 0;\n        `}\n        isNested\n        isOpenDefault={property.value !== undefined}\n      >\n        <item.override\n          value={property.value}\n          onChange={(value) => {\n            onChange(value);\n          }}\n          item={item}\n          context={context}\n        />\n      </OptionsPaneCategory>\n    );\n  } else {\n    editor = (\n      <div>\n        <Field label={renderLabel()()} description={item.description}>\n          <item.override\n            value={property.value}\n            onChange={(value) => {\n              onChange(value);\n            }}\n            item={item}\n            context={context}\n          />\n        </Field>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={cx(\n        isCollapsible && styles.collapsibleOverrideEditor,\n        !isCollapsible && 'dynamicConfigValueEditor--nonCollapsible'\n      )}\n    >\n      {editor}\n    </div>\n  );\n};\n\nconst getStyles = stylesFactory((theme: GrafanaTheme) => {\n  return {\n    collapsibleOverrideEditor: css`\n      label: collapsibleOverrideEditor;\n      & + .dynamicConfigValueEditor--nonCollapsible {\n        margin-top: ${theme.spacing.formSpacingBase}px;\n      }\n    `,\n  };\n});\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { FieldConfigOptionsRegistry, GrafanaTheme, ConfigOverrideRule } from '@grafana/data';\nimport { HorizontalGroup, Icon, IconButton, useStyles } from '@grafana/ui';\nimport { FieldMatcherUIRegistryItem } from '@grafana/ui/src/components/MatchersUI/types';\n\ninterface OverrideCategoryTitleProps {\n  isExpanded: boolean;\n  registry: FieldConfigOptionsRegistry;\n  matcherUi: FieldMatcherUIRegistryItem<any>;\n  override: ConfigOverrideRule;\n  overrideName: string;\n  onOverrideRemove: () => void;\n}\nexport const OverrideCategoryTitle: FC<OverrideCategoryTitleProps> = ({\n  isExpanded,\n  registry,\n  matcherUi,\n  overrideName,\n  override,\n  onOverrideRemove,\n}) => {\n  const styles = useStyles(getStyles);\n  const properties = override.properties.map((p) => registry.getIfExists(p.id)).filter((prop) => !!prop);\n  const propertyNames = properties.map((p) => p?.name).join(', ');\n  const matcherOptions = matcherUi.optionsToLabel(override.matcher.options);\n\n  return (\n    <div>\n      <HorizontalGroup justify=\"space-between\">\n        <div>{overrideName}</div>\n        <IconButton name=\"trash-alt\" onClick={onOverrideRemove} title=\"Remove override\" />\n      </HorizontalGroup>\n      {!isExpanded && (\n        <div className={styles.overrideDetails}>\n          <div className={styles.options} title={matcherOptions}>\n            {matcherOptions} <Icon name=\"angle-right\" /> {propertyNames}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n\nOverrideCategoryTitle.displayName = 'OverrideTitle';\n\nconst getStyles = (theme: GrafanaTheme) => {\n  return {\n    matcherUi: css`\n      padding: ${theme.spacing.sm};\n    `,\n    propertyPickerWrapper: css`\n      margin-top: ${theme.spacing.formSpacingBase * 2}px;\n    `,\n    overrideDetails: css`\n      font-size: ${theme.typography.size.sm};\n      color: ${theme.colors.textWeak};\n      font-weight: ${theme.typography.weight.regular};\n    `,\n    options: css`\n      overflow: hidden;\n      padding-right: ${theme.spacing.xl};\n    `,\n    unknownLabel: css`\n      margin-bottom: 0;\n    `,\n  };\n};\n","import { css } from '@emotion/css';\nimport { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport {\n  FieldConfigOptionsRegistry,\n  SelectableValue,\n  isSystemOverride as isSystemOverrideGuard,\n  VariableSuggestionsScope,\n  DynamicConfigValue,\n  ConfigOverrideRule,\n  GrafanaTheme2,\n} from '@grafana/data';\nimport { fieldMatchersUI, useStyles2, ValuePicker } from '@grafana/ui';\nimport { getDataLinksVariableSuggestions } from 'app/features/panel/panellinks/link_srv';\n\nimport { DynamicConfigValueEditor } from './DynamicConfigValueEditor';\nimport { OptionsPaneCategoryDescriptor } from './OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from './OptionsPaneItemDescriptor';\nimport { OverrideCategoryTitle } from './OverrideCategoryTitle';\nimport { OptionPaneRenderProps } from './types';\n\nexport function getFieldOverrideCategories(\n  props: OptionPaneRenderProps,\n  searchQuery: string\n): OptionsPaneCategoryDescriptor[] {\n  const categories: OptionsPaneCategoryDescriptor[] = [];\n  const currentFieldConfig = props.panel.fieldConfig;\n  const registry = props.plugin.fieldConfigRegistry;\n  const data = props.data?.series ?? [];\n\n  if (registry.isEmpty()) {\n    return [];\n  }\n\n  const onOverrideChange = (index: number, override: any) => {\n    let overrides = cloneDeep(currentFieldConfig.overrides);\n    overrides[index] = override;\n    props.onFieldConfigsChange({ ...currentFieldConfig, overrides });\n  };\n\n  const onOverrideRemove = (overrideIndex: number) => {\n    let overrides = cloneDeep(currentFieldConfig.overrides);\n    overrides.splice(overrideIndex, 1);\n    props.onFieldConfigsChange({ ...currentFieldConfig, overrides });\n  };\n\n  const onOverrideAdd = (value: SelectableValue<string>) => {\n    props.onFieldConfigsChange({\n      ...currentFieldConfig,\n      overrides: [\n        ...currentFieldConfig.overrides,\n        {\n          matcher: {\n            id: value.value!,\n          },\n          properties: [],\n        },\n      ],\n    });\n  };\n\n  const context = {\n    data,\n    getSuggestions: (scope?: VariableSuggestionsScope) => getDataLinksVariableSuggestions(data, scope),\n    isOverride: true,\n  };\n\n  /**\n   * Main loop through all override rules\n   */\n  for (let idx = 0; idx < currentFieldConfig.overrides.length; idx++) {\n    const override = currentFieldConfig.overrides[idx];\n    const overrideName = `Override ${idx + 1}`;\n    const matcherUi = fieldMatchersUI.get(override.matcher.id);\n    const configPropertiesOptions = getOverrideProperties(registry);\n    const isSystemOverride = isSystemOverrideGuard(override);\n    // A way to force open new override categories\n    const forceOpen = override.properties.length === 0 ? 1 : 0;\n\n    const category = new OptionsPaneCategoryDescriptor({\n      title: overrideName,\n      id: overrideName,\n      forceOpen,\n      renderTitle: function renderOverrideTitle(isExpanded: boolean) {\n        return (\n          <OverrideCategoryTitle\n            override={override}\n            isExpanded={isExpanded}\n            registry={registry}\n            overrideName={overrideName}\n            matcherUi={matcherUi}\n            onOverrideRemove={() => onOverrideRemove(idx)}\n          />\n        );\n      },\n    });\n\n    const onMatcherConfigChange = (options: any) => {\n      override.matcher.options = options;\n      onOverrideChange(idx, override);\n    };\n\n    const onDynamicConfigValueAdd = (o: ConfigOverrideRule, value: SelectableValue<string>) => {\n      const registryItem = registry.get(value.value!);\n      const propertyConfig: DynamicConfigValue = {\n        id: registryItem.id,\n        value: registryItem.defaultValue,\n      };\n\n      if (override.properties) {\n        o.properties.push(propertyConfig);\n      } else {\n        o.properties = [propertyConfig];\n      }\n\n      onOverrideChange(idx, o);\n    };\n\n    /**\n     * Add override matcher UI element\n     */\n    category.addItem(\n      new OptionsPaneItemDescriptor({\n        title: matcherUi.name,\n        render: function renderMatcherUI() {\n          return (\n            <matcherUi.component\n              id={`${matcherUi.matcher.id}-${idx}`}\n              matcher={matcherUi.matcher}\n              data={props.data?.series ?? []}\n              options={override.matcher.options}\n              onChange={onMatcherConfigChange}\n            />\n          );\n        },\n      })\n    );\n\n    /**\n     * Loop through all override properties\n     */\n    for (let propIdx = 0; propIdx < override.properties.length; propIdx++) {\n      const property = override.properties[propIdx];\n      const registryItemForProperty = registry.getIfExists(property.id);\n\n      if (!registryItemForProperty) {\n        continue;\n      }\n\n      const onPropertyChange = (value: any) => {\n        override.properties[propIdx].value = value;\n        onOverrideChange(idx, override);\n      };\n\n      const onPropertyRemove = () => {\n        override.properties.splice(propIdx, 1);\n        onOverrideChange(idx, override);\n      };\n\n      /**\n       * Add override property item\n       */\n      category.addItem(\n        new OptionsPaneItemDescriptor({\n          title: registryItemForProperty.name,\n          skipField: true,\n          render: function renderPropertyEditor() {\n            return (\n              <DynamicConfigValueEditor\n                key={`${property.id}/${propIdx}`}\n                isSystemOverride={isSystemOverride}\n                onChange={onPropertyChange}\n                onRemove={onPropertyRemove}\n                property={property}\n                registry={registry}\n                context={context}\n                searchQuery={searchQuery}\n              />\n            );\n          },\n        })\n      );\n    }\n\n    /**\n     * Add button that adds new overrides\n     */\n    if (!isSystemOverride && override.matcher.options) {\n      category.addItem(\n        new OptionsPaneItemDescriptor({\n          title: '----------',\n          skipField: true,\n          render: function renderAddPropertyButton() {\n            return (\n              <ValuePicker\n                key=\"Add override property\"\n                label=\"Add override property\"\n                variant=\"secondary\"\n                isFullWidth={true}\n                icon=\"plus\"\n                menuPlacement=\"auto\"\n                options={configPropertiesOptions}\n                onChange={(v) => onDynamicConfigValueAdd(override, v)}\n              />\n            );\n          },\n        })\n      );\n    }\n\n    categories.push(category);\n  }\n\n  categories.push(\n    new OptionsPaneCategoryDescriptor({\n      title: 'add button',\n      id: 'add button',\n      customRender: function renderAddButton() {\n        return (\n          <AddOverrideButtonContainer key=\"Add override\">\n            <ValuePicker\n              icon=\"plus\"\n              label=\"Add field override\"\n              variant=\"secondary\"\n              menuPlacement=\"auto\"\n              isFullWidth={true}\n              size=\"md\"\n              options={fieldMatchersUI\n                .list()\n                .filter((o) => !o.excludeFromPicker)\n                .map<SelectableValue<string>>((i) => ({ label: i.name, value: i.id, description: i.description }))}\n              onChange={(value) => onOverrideAdd(value)}\n            />\n          </AddOverrideButtonContainer>\n        );\n      },\n    })\n  );\n\n  return categories;\n}\n\nfunction getOverrideProperties(registry: FieldConfigOptionsRegistry) {\n  return registry\n    .list()\n    .filter((o) => !o.hideFromOverrides)\n    .map((item) => {\n      let label = item.name;\n      if (item.category) {\n        label = [...item.category, item.name].join(' > ');\n      }\n      return {\n        label,\n        value: item.id,\n        description: item.description,\n      };\n    });\n}\n\nfunction AddOverrideButtonContainer({ children }: { children: React.ReactNode }) {\n  const styles = useStyles2(getBorderTopStyles);\n  return <div className={styles}>{children}</div>;\n}\n\nfunction getBorderTopStyles(theme: GrafanaTheme2) {\n  return css({\n    borderTop: `1px solid ${theme.colors.border.weak}`,\n    padding: `${theme.spacing(2)}`,\n    display: 'flex',\n  });\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { DateTimeInput, GrafanaTheme } from '@grafana/data';\nimport { useStyles } from '@grafana/ui';\n\nimport { isPanelModelLibraryPanel } from '../../guard';\nimport { PanelModelWithLibraryPanel } from '../../types';\n\ninterface Props {\n  panel: PanelModelWithLibraryPanel;\n  formatDate?: (dateString: DateTimeInput, format?: string) => string;\n}\n\nexport const LibraryPanelInformation: React.FC<Props> = ({ panel, formatDate }) => {\n  const styles = useStyles(getStyles);\n\n  if (!isPanelModelLibraryPanel(panel)) {\n    return null;\n  }\n\n  return (\n    <div className={styles.info}>\n      <div className={styles.libraryPanelInfo}>\n        {`Used on ${panel.libraryPanel.meta.connectedDashboards} `}\n        {panel.libraryPanel.meta.connectedDashboards === 1 ? 'dashboard' : 'dashboards'}\n      </div>\n      <div className={styles.libraryPanelInfo}>\n        Last edited on {formatDate?.(panel.libraryPanel.meta.updated, 'L') ?? panel.libraryPanel.meta.updated} by\n        {panel.libraryPanel.meta.updatedBy.avatarUrl && (\n          <img\n            width=\"22\"\n            height=\"22\"\n            className={styles.userAvatar}\n            src={panel.libraryPanel.meta.updatedBy.avatarUrl}\n            alt={`Avatar for ${panel.libraryPanel.meta.updatedBy.name}`}\n          />\n        )}\n        {panel.libraryPanel.meta.updatedBy.name}\n      </div>\n    </div>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme) => {\n  return {\n    info: css`\n      line-height: 1;\n    `,\n    libraryPanelInfo: css`\n      color: ${theme.colors.textSemiWeak};\n      font-size: ${theme.typography.size.sm};\n    `,\n    userAvatar: css`\n      border-radius: 50%;\n      box-sizing: content-box;\n      width: 22px;\n      height: 22px;\n      padding-left: ${theme.spacing.sm};\n      padding-right: ${theme.spacing.sm};\n    `,\n  };\n};\n","import React from 'react';\n\nimport { Input } from '@grafana/ui';\nimport { LibraryPanelInformation } from 'app/features/library-panels/components/LibraryPanelInfo/LibraryPanelInfo';\n\nimport { isPanelModelLibraryPanel } from '../../../library-panels/guard';\n\nimport { OptionsPaneCategoryDescriptor } from './OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from './OptionsPaneItemDescriptor';\nimport { OptionPaneRenderProps } from './types';\n\nexport function getLibraryPanelOptionsCategory(props: OptionPaneRenderProps): OptionsPaneCategoryDescriptor {\n  const { panel, onPanelConfigChange, dashboard } = props;\n  const descriptor = new OptionsPaneCategoryDescriptor({\n    title: 'Library panel options',\n    id: 'Library panel options',\n    isOpenDefault: true,\n  });\n\n  if (isPanelModelLibraryPanel(panel)) {\n    descriptor\n      .addItem(\n        new OptionsPaneItemDescriptor({\n          title: 'Name',\n          value: panel.libraryPanel.name,\n          popularRank: 1,\n          render: function renderName() {\n            return (\n              <Input\n                id=\"LibraryPanelFrameName\"\n                defaultValue={panel.libraryPanel.name}\n                onBlur={(e) =>\n                  onPanelConfigChange('libraryPanel', { ...panel.libraryPanel, name: e.currentTarget.value })\n                }\n              />\n            );\n          },\n        })\n      )\n      .addItem(\n        new OptionsPaneItemDescriptor({\n          title: 'Information',\n          render: function renderLibraryPanelInformation() {\n            return <LibraryPanelInformation panel={panel} formatDate={dashboard.formatDate} />;\n          },\n        })\n      );\n  }\n\n  return descriptor;\n}\n","import React, { FC, useCallback, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { StoreState } from '../../../../types';\nimport { getLastKey, getVariablesByKey } from '../../../variables/state/selectors';\n\nexport interface Props {\n  id?: string;\n  repeat?: string | null;\n  onChange: (name: string | null) => void;\n}\n\nexport const RepeatRowSelect: FC<Props> = ({ repeat, onChange, id }) => {\n  const variables = useSelector((state: StoreState) => {\n    return getVariablesByKey(getLastKey(state), state);\n  });\n\n  const variableOptions = useMemo(() => {\n    const options = variables.map((item: any) => {\n      return { label: item.name, value: item.name };\n    });\n\n    if (options.length === 0) {\n      options.unshift({\n        label: 'No template variables found',\n        value: null,\n      });\n    }\n\n    options.unshift({\n      label: 'Disable repeating',\n      value: null,\n    });\n\n    return options;\n  }, [variables]);\n\n  const onSelectChange = useCallback((option: SelectableValue<string | null>) => onChange(option.value!), [onChange]);\n\n  return <Select inputId={id} menuShouldPortal value={repeat} onChange={onSelectChange} options={variableOptions} />;\n};\n","import React from 'react';\n\nimport { DataLinksInlineEditor, Input, RadioButtonGroup, Select, Switch, TextArea } from '@grafana/ui';\nimport { getPanelLinksVariableSuggestions } from 'app/features/panel/panellinks/link_srv';\n\nimport { RepeatRowSelect } from '../RepeatRowSelect/RepeatRowSelect';\n\nimport { OptionsPaneCategoryDescriptor } from './OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from './OptionsPaneItemDescriptor';\nimport { OptionPaneRenderProps } from './types';\n\nexport function getPanelFrameCategory(props: OptionPaneRenderProps): OptionsPaneCategoryDescriptor {\n  const { panel, onPanelConfigChange } = props;\n  const descriptor = new OptionsPaneCategoryDescriptor({\n    title: 'Panel options',\n    id: 'Panel options',\n    isOpenDefault: true,\n  });\n\n  return descriptor\n    .addItem(\n      new OptionsPaneItemDescriptor({\n        title: 'Title',\n        value: panel.title,\n        popularRank: 1,\n        render: function renderTitle() {\n          return (\n            <Input\n              id=\"PanelFrameTitle\"\n              defaultValue={panel.title}\n              onBlur={(e) => onPanelConfigChange('title', e.currentTarget.value)}\n            />\n          );\n        },\n      })\n    )\n    .addItem(\n      new OptionsPaneItemDescriptor({\n        title: 'Description',\n        description: panel.description,\n        value: panel.description,\n        render: function renderDescription() {\n          return (\n            <TextArea\n              id=\"description-text-area\"\n              defaultValue={panel.description}\n              onBlur={(e) => onPanelConfigChange('description', e.currentTarget.value)}\n            />\n          );\n        },\n      })\n    )\n    .addItem(\n      new OptionsPaneItemDescriptor({\n        title: 'Transparent background',\n        render: function renderTransparent() {\n          return (\n            <Switch\n              value={panel.transparent}\n              id=\"transparent-background\"\n              onChange={(e) => onPanelConfigChange('transparent', e.currentTarget.checked)}\n            />\n          );\n        },\n      })\n    )\n    .addCategory(\n      new OptionsPaneCategoryDescriptor({\n        title: 'Panel links',\n        id: 'Panel links',\n        isOpenDefault: false,\n        itemsCount: panel.links?.length,\n      }).addItem(\n        new OptionsPaneItemDescriptor({\n          title: 'Panel links',\n          render: function renderLinks() {\n            return (\n              <DataLinksInlineEditor\n                links={panel.links}\n                onChange={(links) => onPanelConfigChange('links', links)}\n                getSuggestions={getPanelLinksVariableSuggestions}\n                data={[]}\n              />\n            );\n          },\n        })\n      )\n    )\n    .addCategory(\n      new OptionsPaneCategoryDescriptor({\n        title: 'Repeat options',\n        id: 'Repeat options',\n        isOpenDefault: false,\n      })\n        .addItem(\n          new OptionsPaneItemDescriptor({\n            title: 'Repeat by variable',\n            description:\n              'Repeat this panel for each value in the selected variable. This is not visible while in edit mode. You need to go back to dashboard and then update the variable or reload the dashboard.',\n            render: function renderRepeatOptions() {\n              return (\n                <RepeatRowSelect\n                  id=\"repeat-by-variable-select\"\n                  repeat={panel.repeat}\n                  onChange={(value?: string | null) => {\n                    onPanelConfigChange('repeat', value);\n                  }}\n                />\n              );\n            },\n          })\n        )\n        .addItem(\n          new OptionsPaneItemDescriptor({\n            title: 'Repeat direction',\n            showIf: () => !!panel.repeat,\n            render: function renderRepeatOptions() {\n              const directionOptions = [\n                { label: 'Horizontal', value: 'h' },\n                { label: 'Vertical', value: 'v' },\n              ];\n\n              return (\n                <RadioButtonGroup\n                  options={directionOptions}\n                  value={panel.repeatDirection || 'h'}\n                  onChange={(value) => onPanelConfigChange('repeatDirection', value)}\n                />\n              );\n            },\n          })\n        )\n        .addItem(\n          new OptionsPaneItemDescriptor({\n            title: 'Max per row',\n            showIf: () => Boolean(panel.repeat && panel.repeatDirection === 'h'),\n            render: function renderOption() {\n              const maxPerRowOptions = [2, 3, 4, 6, 8, 12].map((value) => ({ label: value.toString(), value }));\n              return (\n                <Select\n                  menuShouldPortal\n                  options={maxPerRowOptions}\n                  value={panel.maxPerRow}\n                  onChange={(value) => onPanelConfigChange('maxPerRow', value.value)}\n                />\n              );\n            },\n          })\n        )\n    );\n}\n","import { OptionsPaneCategoryDescriptor } from '../OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from '../OptionsPaneItemDescriptor';\n\nexport interface OptionSearchResults {\n  optionHits: OptionsPaneItemDescriptor[];\n  overrideHits: OptionsPaneCategoryDescriptor[];\n  totalCount: number;\n}\n\nexport class OptionSearchEngine {\n  constructor(\n    private categories: OptionsPaneCategoryDescriptor[],\n    private overrides: OptionsPaneCategoryDescriptor[]\n  ) {}\n\n  search(query: string): OptionSearchResults {\n    const searchRegex = new RegExp(query, 'i');\n\n    const optionHits = this.collectHits(this.categories, searchRegex, []);\n    const sortedHits = optionHits.sort(compareHit).map((x) => x.item);\n\n    const overrideHits = this.collectHits(this.overrides, searchRegex, []);\n    const sortedOverridesHits = overrideHits.sort(compareHit).map((x) => x.item);\n\n    return {\n      optionHits: sortedHits,\n      overrideHits: this.buildOverrideHitCategories(sortedOverridesHits),\n      totalCount: this.getAllOptionsCount(this.categories),\n    };\n  }\n\n  private collectHits(categories: OptionsPaneCategoryDescriptor[], searchRegex: RegExp, hits: SearchHit[]) {\n    for (const category of categories) {\n      const categoryNameMatch = searchRegex.test(category.props.title);\n\n      for (const item of category.items) {\n        if (searchRegex.test(item.props.title)) {\n          hits.push({ item: item, rank: 1 });\n          continue;\n        }\n        if (item.props.description && searchRegex.test(item.props.description)) {\n          hits.push({ item: item, rank: 2 });\n          continue;\n        }\n        if (categoryNameMatch) {\n          hits.push({ item: item, rank: 3 });\n        }\n      }\n\n      if (category.categories.length > 0) {\n        this.collectHits(category.categories, searchRegex, hits);\n      }\n    }\n\n    return hits;\n  }\n\n  getAllOptionsCount(categories: OptionsPaneCategoryDescriptor[]) {\n    var total = 0;\n\n    for (const category of categories) {\n      total += category.items.length;\n\n      if (category.categories.length > 0) {\n        total += this.getAllOptionsCount(category.categories);\n      }\n    }\n\n    return total;\n  }\n\n  buildOverrideHitCategories(hits: OptionsPaneItemDescriptor[]): OptionsPaneCategoryDescriptor[] {\n    const categories: Record<string, OptionsPaneCategoryDescriptor> = {};\n\n    for (const hit of hits) {\n      let category = categories[hit.parent.props.title];\n\n      if (!category) {\n        category = categories[hit.parent.props.title] = new OptionsPaneCategoryDescriptor(hit.parent.props);\n        // Add matcher item as that should always be shown\n        category.addItem(hit.parent.items[0]);\n      }\n\n      // Prevent adding matcher twice since it's automatically added for every override\n      if (category.items[0].props.title !== hit.props.title) {\n        category.addItem(hit);\n      }\n    }\n\n    return Object.values(categories);\n  }\n}\n\ninterface SearchHit {\n  item: OptionsPaneItemDescriptor;\n  rank: number;\n}\n\nfunction compareHit(left: SearchHit, right: SearchHit) {\n  return left.rank - right.rank;\n}\n","import { OptionsPaneCategoryDescriptor } from '../OptionsPaneCategoryDescriptor';\nimport { OptionsPaneItemDescriptor } from '../OptionsPaneItemDescriptor';\n\nexport function getRecentOptions(allOptions: OptionsPaneCategoryDescriptor[]) {\n  const popularOptions: OptionsPaneItemDescriptor[] = [];\n\n  for (const category of allOptions) {\n    for (const item of category.items) {\n      if (item.props.title === 'Unit') {\n        item.props.popularRank = 2;\n      }\n      if (item.props.title === 'Min') {\n        item.props.popularRank = 3;\n      }\n      if (item.props.title === 'Max') {\n        item.props.popularRank = 4;\n      }\n      if (item.props.title === 'Display name') {\n        item.props.popularRank = 5;\n      }\n\n      if (item.props.popularRank) {\n        popularOptions.push(item);\n      }\n    }\n  }\n\n  return popularOptions.sort((left, right) => left.props.popularRank! - right.props.popularRank!);\n}\n","import { css } from '@emotion/css';\nimport React, { useMemo, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { CustomScrollbar, FilterInput, RadioButtonGroup, useStyles2 } from '@grafana/ui';\n\nimport { isPanelModelLibraryPanel } from '../../../library-panels/guard';\n\nimport { AngularPanelOptions } from './AngularPanelOptions';\nimport { OptionsPaneCategory } from './OptionsPaneCategory';\nimport { OptionsPaneCategoryDescriptor } from './OptionsPaneCategoryDescriptor';\nimport { getFieldOverrideCategories } from './getFieldOverrideElements';\nimport { getLibraryPanelOptionsCategory } from './getLibraryPanelOptions';\nimport { getPanelFrameCategory } from './getPanelFrameOptions';\nimport { getVisualizationOptions } from './getVisualizationOptions';\nimport { OptionSearchEngine } from './state/OptionSearchEngine';\nimport { getRecentOptions } from './state/getRecentOptions';\nimport { OptionPaneRenderProps } from './types';\n\nexport const OptionsPaneOptions: React.FC<OptionPaneRenderProps> = (props) => {\n  const { plugin, dashboard, panel } = props;\n  const [searchQuery, setSearchQuery] = useState('');\n  const [listMode, setListMode] = useState(OptionFilter.All);\n  const styles = useStyles2(getStyles);\n\n  const [panelFrameOptions, vizOptions, libraryPanelOptions] = useMemo(\n    () => [getPanelFrameCategory(props), getVisualizationOptions(props), getLibraryPanelOptionsCategory(props)],\n\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [panel.configRev, props.data, props.instanceState, searchQuery]\n  );\n\n  const justOverrides = useMemo(\n    () => getFieldOverrideCategories(props, searchQuery),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [panel.configRev, props.data, props.instanceState, searchQuery]\n  );\n\n  const mainBoxElements: React.ReactNode[] = [];\n  const isSearching = searchQuery.length > 0;\n  const optionRadioFilters = useMemo(getOptionRadioFilters, []);\n\n  const allOptions = isPanelModelLibraryPanel(panel)\n    ? [libraryPanelOptions, panelFrameOptions, ...vizOptions]\n    : [panelFrameOptions, ...vizOptions];\n\n  if (isSearching) {\n    mainBoxElements.push(renderSearchHits(allOptions, justOverrides, searchQuery));\n\n    // If searching for angular panel, then we need to add notice that results are limited\n    if (props.plugin.angularPanelCtrl) {\n      mainBoxElements.push(\n        <div className={styles.searchNotice} key=\"Search notice\">\n          This is an old visualization type that does not support searching all options.\n        </div>\n      );\n    }\n  } else {\n    switch (listMode) {\n      case OptionFilter.All:\n        if (isPanelModelLibraryPanel(panel)) {\n          // Library Panel options first\n          mainBoxElements.push(libraryPanelOptions.render());\n        }\n        // Panel frame options second\n        mainBoxElements.push(panelFrameOptions.render());\n        // If angular add those options next\n        if (props.plugin.angularPanelCtrl) {\n          mainBoxElements.push(\n            <AngularPanelOptions plugin={plugin} dashboard={dashboard} panel={panel} key=\"AngularOptions\" />\n          );\n        }\n        // Then add all panel and field defaults\n        for (const item of vizOptions) {\n          mainBoxElements.push(item.render());\n        }\n\n        for (const item of justOverrides) {\n          mainBoxElements.push(item.render());\n        }\n        break;\n      case OptionFilter.Overrides:\n        for (const override of justOverrides) {\n          mainBoxElements.push(override.render());\n        }\n        break;\n      case OptionFilter.Recent:\n        mainBoxElements.push(\n          <OptionsPaneCategory id=\"Recent options\" title=\"Recent options\" key=\"Recent options\" forceOpen={1}>\n            {getRecentOptions(allOptions).map((item) => item.render())}\n          </OptionsPaneCategory>\n        );\n        break;\n    }\n  }\n\n  // only show radio buttons if we are searching or if the plugin has field config\n  const showSearchRadioButtons = !isSearching && !plugin.fieldConfigRegistry.isEmpty();\n\n  return (\n    <div className={styles.wrapper}>\n      <div className={styles.formBox}>\n        <div className={styles.formRow}>\n          <FilterInput width={0} value={searchQuery} onChange={setSearchQuery} placeholder={'Search options'} />\n        </div>\n        {showSearchRadioButtons && (\n          <div className={styles.formRow}>\n            <RadioButtonGroup options={optionRadioFilters} value={listMode} fullWidth onChange={setListMode} />\n          </div>\n        )}\n      </div>\n      <div className={styles.scrollWrapper}>\n        <CustomScrollbar autoHeightMin=\"100%\">\n          <div className={styles.mainBox}>{mainBoxElements}</div>\n        </CustomScrollbar>\n      </div>\n    </div>\n  );\n};\n\nfunction getOptionRadioFilters(): Array<SelectableValue<OptionFilter>> {\n  return [\n    { label: OptionFilter.All, value: OptionFilter.All },\n    { label: OptionFilter.Overrides, value: OptionFilter.Overrides },\n  ];\n}\n\nexport enum OptionFilter {\n  All = 'All',\n  Overrides = 'Overrides',\n  Recent = 'Recent',\n}\n\nfunction renderSearchHits(\n  allOptions: OptionsPaneCategoryDescriptor[],\n  overrides: OptionsPaneCategoryDescriptor[],\n  searchQuery: string\n) {\n  const engine = new OptionSearchEngine(allOptions, overrides);\n  const { optionHits, totalCount, overrideHits } = engine.search(searchQuery);\n\n  return (\n    <div key=\"search results\">\n      <OptionsPaneCategory\n        id=\"Found options\"\n        title={`Matched ${optionHits.length}/${totalCount} options`}\n        key=\"Normal options\"\n        forceOpen={1}\n      >\n        {optionHits.map((hit) => hit.render(searchQuery))}\n      </OptionsPaneCategory>\n      {overrideHits.map((override) => override.render(searchQuery))}\n    </div>\n  );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  wrapper: css`\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    flex: 1 1 0;\n\n    .search-fragment-highlight {\n      color: ${theme.colors.warning.text};\n      background: transparent;\n    }\n  `,\n  searchBox: css`\n    display: flex;\n    flex-direction: column;\n    min-height: 0;\n  `,\n  formRow: css`\n    margin-bottom: ${theme.spacing(1)};\n  `,\n  formBox: css`\n    padding: ${theme.spacing(1)};\n    background: ${theme.colors.background.primary};\n    border: 1px solid ${theme.components.panel.borderColor};\n    border-top-left-radius: ${theme.shape.borderRadius(1.5)};\n    border-bottom: none;\n  `,\n  closeButton: css`\n    margin-left: ${theme.spacing(1)};\n  `,\n  searchHits: css`\n    padding: ${theme.spacing(1, 1, 0, 1)};\n  `,\n  scrollWrapper: css`\n    flex-grow: 1;\n    min-height: 0;\n  `,\n  searchNotice: css`\n    font-size: ${theme.typography.size.sm};\n    color: ${theme.colors.text.secondary};\n    padding: ${theme.spacing(1)};\n    text-align: center;\n  `,\n  mainBox: css`\n    background: ${theme.colors.background.primary};\n    border: 1px solid ${theme.components.panel.borderColor};\n    border-top: none;\n    flex-grow: 1;\n  `,\n});\n","import { PanelPlugin } from '@grafana/data';\nimport { StoreState } from 'app/types';\n\nimport { getPanelPluginNotFound } from '../../panel/components/PanelPluginError';\n\nexport const getPanelPluginWithFallback =\n  (panelType: string) =>\n  (state: StoreState): PanelPlugin => {\n    const plugin = state.plugins.panels[panelType];\n    return plugin || getPanelPluginNotFound(`Panel plugin not found (${panelType})`, true);\n  };\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { GrafanaTheme } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { ToolbarButton, ButtonGroup, useStyles } from '@grafana/ui';\nimport { StoreState } from 'app/types';\n\nimport { PanelModel } from '../../state';\nimport { getPanelPluginWithFallback } from '../../state/selectors';\n\nimport { setPanelEditorUIState, toggleVizPicker } from './state/reducers';\n\ntype Props = {\n  panel: PanelModel;\n};\n\nexport const VisualizationButton: FC<Props> = ({ panel }) => {\n  const styles = useStyles(getStyles);\n  const dispatch = useDispatch();\n  const plugin = useSelector(getPanelPluginWithFallback(panel.type));\n  const isPanelOptionsVisible = useSelector((state: StoreState) => state.panelEditor.ui.isPanelOptionsVisible);\n  const isVizPickerOpen = useSelector((state: StoreState) => state.panelEditor.isVizPickerOpen);\n\n  const onToggleOpen = () => {\n    dispatch(toggleVizPicker(!isVizPickerOpen));\n  };\n\n  const onToggleOptionsPane = () => {\n    dispatch(setPanelEditorUIState({ isPanelOptionsVisible: !isPanelOptionsVisible }));\n  };\n\n  if (!plugin) {\n    return null;\n  }\n\n  return (\n    <div className={styles.wrapper}>\n      <ButtonGroup>\n        <ToolbarButton\n          className={styles.vizButton}\n          tooltip=\"Click to change visualization\"\n          imgSrc={plugin.meta.info.logos.small}\n          isOpen={isVizPickerOpen}\n          onClick={onToggleOpen}\n          aria-label={selectors.components.PanelEditor.toggleVizPicker}\n          fullWidth\n        >\n          {plugin.meta.name}\n        </ToolbarButton>\n        <ToolbarButton\n          tooltip={isPanelOptionsVisible ? 'Close options pane' : 'Show options pane'}\n          icon={isPanelOptionsVisible ? 'angle-right' : 'angle-left'}\n          onClick={onToggleOptionsPane}\n          aria-label={selectors.components.PanelEditor.toggleVizOptions}\n        />\n      </ButtonGroup>\n    </div>\n  );\n};\n\nVisualizationButton.displayName = 'VisualizationTab';\n\nconst getStyles = (theme: GrafanaTheme) => {\n  return {\n    wrapper: css`\n      display: flex;\n      flex-direction: column;\n    `,\n    vizButton: css`\n      text-align: left;\n    `,\n  };\n};\n","import React from 'react';\n\nimport { ConfirmModal } from '@grafana/ui';\n\nimport { PanelModel } from '../../../dashboard/state';\nimport { isPanelModelLibraryPanel } from '../../guard';\n\nexport interface ChangeLibraryPanelModalProps {\n  panel: PanelModel;\n  onConfirm: () => void;\n  onDismiss: () => void;\n}\n\nexport const ChangeLibraryPanelModal = ({ onConfirm, onDismiss, panel }: ChangeLibraryPanelModalProps): JSX.Element => {\n  const isLibraryPanel = isPanelModelLibraryPanel(panel);\n  const title = `${isLibraryPanel ? 'Changing' : 'Replace with'} library panel`;\n  const body = `${\n    isLibraryPanel ? 'Changing' : 'Replacing with a'\n  } library panel will remove any changes since last save.`;\n  return (\n    <ConfirmModal\n      onConfirm={onConfirm}\n      onDismiss={onDismiss}\n      confirmText={isLibraryPanel ? 'Change' : 'Replace'}\n      title={title}\n      body={body}\n      dismissText=\"Cancel\"\n      isOpen={true}\n    />\n  );\n};\n","import { css } from '@emotion/css';\nimport React, { FC, useCallback, useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { GrafanaTheme2, PanelPluginMeta } from '@grafana/data';\nimport { Button, useStyles2, VerticalGroup } from '@grafana/ui';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport { PanelModel } from 'app/features/dashboard/state';\nimport { changeToLibraryPanel } from 'app/features/panel/state/actions';\n\nimport { PanelTypeFilter } from '../../../../core/components/PanelTypeFilter/PanelTypeFilter';\nimport { LibraryElementDTO } from '../../types';\nimport { AddLibraryPanelModal } from '../AddLibraryPanelModal/AddLibraryPanelModal';\nimport { ChangeLibraryPanelModal } from '../ChangeLibraryPanelModal/ChangeLibraryPanelModal';\nimport { LibraryPanelsView } from '../LibraryPanelsView/LibraryPanelsView';\n\ninterface Props {\n  panel: PanelModel;\n  searchQuery: string;\n}\n\nexport const PanelLibraryOptionsGroup: FC<Props> = ({ panel, searchQuery }) => {\n  const styles = useStyles2(getStyles);\n  const [showingAddPanelModal, setShowingAddPanelModal] = useState(false);\n  const [changeToPanel, setChangeToPanel] = useState<LibraryElementDTO | undefined>(undefined);\n  const [panelFilter, setPanelFilter] = useState<string[]>([]);\n  const onPanelFilterChange = useCallback(\n    (plugins: PanelPluginMeta[]) => {\n      setPanelFilter(plugins.map((p) => p.id));\n    },\n    [setPanelFilter]\n  );\n  const dashboard = getDashboardSrv().getCurrent();\n  const dispatch = useDispatch();\n\n  const useLibraryPanel = async () => {\n    if (!changeToPanel) {\n      return;\n    }\n\n    setChangeToPanel(undefined);\n\n    dispatch(changeToLibraryPanel(panel, changeToPanel));\n  };\n\n  const onAddToPanelLibrary = () => {\n    setShowingAddPanelModal(true);\n  };\n\n  const onChangeLibraryPanel = (panel: LibraryElementDTO) => {\n    setChangeToPanel(panel);\n  };\n\n  const onDismissChangeToPanel = () => {\n    setChangeToPanel(undefined);\n  };\n\n  return (\n    <VerticalGroup spacing=\"md\">\n      {!panel.libraryPanel && (\n        <VerticalGroup align=\"center\">\n          <Button icon=\"plus\" onClick={onAddToPanelLibrary} variant=\"secondary\" fullWidth>\n            Create new library panel\n          </Button>\n        </VerticalGroup>\n      )}\n\n      <PanelTypeFilter onChange={onPanelFilterChange} />\n\n      <div className={styles.libraryPanelsView}>\n        <LibraryPanelsView\n          currentPanelId={panel.libraryPanel?.uid}\n          searchString={searchQuery}\n          panelFilter={panelFilter}\n          onClickCard={onChangeLibraryPanel}\n          showSecondaryActions\n        />\n      </div>\n\n      {showingAddPanelModal && (\n        <AddLibraryPanelModal\n          panel={panel}\n          onDismiss={() => setShowingAddPanelModal(false)}\n          initialFolderId={dashboard?.meta.folderId}\n          isOpen={showingAddPanelModal}\n        />\n      )}\n\n      {changeToPanel && (\n        <ChangeLibraryPanelModal panel={panel} onDismiss={onDismissChangeToPanel} onConfirm={useLibraryPanel} />\n      )}\n    </VerticalGroup>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    libraryPanelsView: css`\n      width: 100%;\n    `,\n  };\n};\n","import {\n  PanelData,\n  VisualizationSuggestion,\n  VisualizationSuggestionsBuilder,\n  PanelModel,\n  VisualizationSuggestionScore,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { importPanelPlugin } from 'app/features/plugins/importPanelPlugin';\n\nexport const panelsToCheckFirst = [\n  'timeseries',\n  'barchart',\n  'gauge',\n  'stat',\n  'piechart',\n  'bargauge',\n  'table',\n  'state-timeline',\n  'status-history',\n  'logs',\n  'candlestick',\n];\n\nexport async function getAllSuggestions(data?: PanelData, panel?: PanelModel): Promise<VisualizationSuggestion[]> {\n  const builder = new VisualizationSuggestionsBuilder(data, panel);\n\n  for (const pluginId of panelsToCheckFirst) {\n    const plugin = await importPanelPlugin(pluginId);\n    const supplier = plugin.getSuggestionsSupplier();\n\n    if (supplier) {\n      supplier.getSuggestionsForData(builder);\n    }\n  }\n\n  const list = builder.getList();\n\n  if (builder.dataSummary.fieldCount === 0) {\n    for (const plugin of Object.values(config.panels)) {\n      if (!plugin.skipDataQuery || plugin.hideFromList) {\n        continue;\n      }\n\n      list.push({\n        name: plugin.name,\n        pluginId: plugin.id,\n        description: plugin.info.description,\n        cardOptions: {\n          imgSrc: plugin.info.logos.small,\n        },\n      });\n    }\n  }\n\n  return list.sort((a, b) => {\n    return (b.score ?? VisualizationSuggestionScore.OK) - (a.score ?? VisualizationSuggestionScore.OK);\n  });\n}\n","import { css, cx } from '@emotion/css';\nimport { cloneDeep } from 'lodash';\nimport React, { CSSProperties } from 'react';\n\nimport { GrafanaTheme2, PanelData, VisualizationSuggestion } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { PanelRenderer } from '../PanelRenderer';\n\nimport { VizTypeChangeDetails } from './types';\n\nexport interface Props {\n  data: PanelData;\n  width: number;\n  suggestion: VisualizationSuggestion;\n  showTitle?: boolean;\n  onChange: (details: VizTypeChangeDetails) => void;\n}\n\nexport function VisualizationSuggestionCard({ data, suggestion, onChange, width, showTitle }: Props) {\n  const styles = useStyles2(getStyles);\n  const { innerStyles, outerStyles, renderWidth, renderHeight } = getPreviewDimensionsAndStyles(width);\n  const cardOptions = suggestion.cardOptions ?? {};\n\n  const commonButtonProps = {\n    'aria-label': suggestion.name,\n    className: styles.vizBox,\n    'data-testid': selectors.components.VisualizationPreview.card(suggestion.name),\n    style: outerStyles,\n    onClick: () => {\n      onChange({\n        pluginId: suggestion.pluginId,\n        options: suggestion.options,\n        fieldConfig: suggestion.fieldConfig,\n      });\n    },\n  };\n\n  if (cardOptions.imgSrc) {\n    return (\n      <Tooltip content={suggestion.description ?? suggestion.name}>\n        <button {...commonButtonProps} className={cx(styles.vizBox, styles.imgBox)}>\n          <div className={styles.name}>{suggestion.name}</div>\n          <img className={styles.img} src={cardOptions.imgSrc} alt={suggestion.name} />\n        </button>\n      </Tooltip>\n    );\n  }\n\n  let preview = suggestion;\n  if (suggestion.cardOptions?.previewModifier) {\n    preview = cloneDeep(suggestion);\n    suggestion.cardOptions.previewModifier(preview);\n  }\n\n  return (\n    <button {...commonButtonProps}>\n      <Tooltip content={suggestion.name}>\n        <div style={innerStyles} className={styles.renderContainer}>\n          <PanelRenderer\n            title=\"\"\n            data={data}\n            pluginId={suggestion.pluginId}\n            width={renderWidth}\n            height={renderHeight}\n            options={preview.options}\n            fieldConfig={preview.fieldConfig}\n          />\n          <div className={styles.hoverPane} />\n        </div>\n      </Tooltip>\n    </button>\n  );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    hoverPane: css({\n      position: 'absolute',\n      top: 0,\n      right: 0,\n      left: 0,\n      borderRadius: theme.spacing(2),\n      bottom: 0,\n    }),\n    vizBox: css`\n      position: relative;\n      background: none;\n      border-radius: ${theme.shape.borderRadius(1)};\n      cursor: pointer;\n      border: 1px solid ${theme.colors.border.medium};\n\n      transition: ${theme.transitions.create(['background'], {\n        duration: theme.transitions.duration.short,\n      })};\n\n      &:hover {\n        background: ${theme.colors.background.secondary};\n      }\n    `,\n    imgBox: css`\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n\n      justify-self: center;\n      color: ${theme.colors.text.primary};\n      width: 100%;\n      display: flex;\n\n      justify-content: center;\n      align-items: center;\n      text-align: center;\n    `,\n    name: css`\n      padding-bottom: ${theme.spacing(0.5)};\n      margin-top: ${theme.spacing(-1)};\n      font-size: ${theme.typography.bodySmall.fontSize};\n      white-space: nowrap;\n      overflow: hidden;\n      color: ${theme.colors.text.secondary};\n      font-weight: ${theme.typography.fontWeightMedium};\n      text-overflow: ellipsis;\n    `,\n    img: css`\n      max-width: ${theme.spacing(8)};\n      max-height: ${theme.spacing(8)};\n    `,\n    renderContainer: css`\n      position: absolute;\n      transform-origin: left top;\n      top: 6px;\n      left: 6px;\n    `,\n  };\n};\n\ninterface PreviewDimensionsAndStyles {\n  renderWidth: number;\n  renderHeight: number;\n  innerStyles: CSSProperties;\n  outerStyles: CSSProperties;\n}\n\nfunction getPreviewDimensionsAndStyles(width: number): PreviewDimensionsAndStyles {\n  const aspectRatio = 16 / 10;\n  const showWidth = width;\n  const showHeight = width * (1 / aspectRatio);\n  const renderWidth = 350;\n  const renderHeight = renderWidth * (1 / aspectRatio);\n\n  const padding = 6;\n  const widthFactor = (showWidth - padding * 2) / renderWidth;\n  const heightFactor = (showHeight - padding * 2) / renderHeight;\n\n  return {\n    renderHeight,\n    renderWidth,\n    outerStyles: { width: showWidth, height: showHeight },\n    innerStyles: {\n      width: renderWidth,\n      height: renderHeight,\n      transform: `scale(${widthFactor}, ${heightFactor})`,\n    },\n  };\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\nimport { useAsync, useLocalStorage } from 'react-use';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { GrafanaTheme2, PanelData, PanelPluginMeta, PanelModel, VisualizationSuggestion } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { getAllSuggestions } from '../../state/getAllSuggestions';\n\nimport { VisualizationSuggestionCard } from './VisualizationSuggestionCard';\nimport { VizTypeChangeDetails } from './types';\n\nexport interface Props {\n  current: PanelPluginMeta;\n  data?: PanelData;\n  panel?: PanelModel;\n  onChange: (options: VizTypeChangeDetails) => void;\n  searchQuery: string;\n  onClose: () => void;\n}\n\nexport function VisualizationSuggestions({ onChange, data, panel, searchQuery }: Props) {\n  const styles = useStyles2(getStyles);\n  const { value: suggestions } = useAsync(() => getAllSuggestions(data, panel), [data, panel]);\n  // temp test\n  const [showTitle, setShowTitle] = useLocalStorage(`VisualizationSuggestions.showTitle`, false);\n  const filteredSuggestions = filterSuggestionsBySearch(searchQuery, suggestions);\n\n  return (\n    <AutoSizer disableHeight style={{ width: '100%', height: '100%' }}>\n      {({ width }) => {\n        if (!width) {\n          return null;\n        }\n\n        const columnCount = Math.floor(width / 170);\n        const spaceBetween = 8 * (columnCount! - 1);\n        const previewWidth = (width - spaceBetween) / columnCount!;\n\n        return (\n          <div>\n            <div className={styles.filterRow}>\n              <div className={styles.infoText} onClick={() => setShowTitle(!showTitle)}>\n                Based on current data\n              </div>\n            </div>\n            <div className={styles.grid} style={{ gridTemplateColumns: `repeat(auto-fill, ${previewWidth - 1}px)` }}>\n              {filteredSuggestions.map((suggestion, index) => (\n                <VisualizationSuggestionCard\n                  key={index}\n                  data={data!}\n                  suggestion={suggestion}\n                  onChange={onChange}\n                  width={previewWidth}\n                  showTitle={showTitle}\n                />\n              ))}\n              {searchQuery && filteredSuggestions.length === 0 && (\n                <div className={styles.infoText}>No results matched your query</div>\n              )}\n            </div>\n          </div>\n        );\n      }}\n    </AutoSizer>\n  );\n}\n\nfunction filterSuggestionsBySearch(\n  searchQuery: string,\n  suggestions?: VisualizationSuggestion[]\n): VisualizationSuggestion[] {\n  if (!searchQuery || !suggestions) {\n    return suggestions || [];\n  }\n\n  const regex = new RegExp(searchQuery, 'i');\n\n  return suggestions.filter((s) => regex.test(s.name) || regex.test(s.pluginId));\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    heading: css({\n      ...theme.typography.h5,\n      margin: theme.spacing(0, 0.5, 1),\n    }),\n    filterRow: css({\n      display: 'flex',\n      flexDirection: 'row',\n      justifyContent: 'space-around',\n      alignItems: 'center',\n      paddingBottom: '8px',\n    }),\n    infoText: css({\n      fontSize: theme.typography.bodySmall.fontSize,\n      color: theme.colors.text.secondary,\n      fontStyle: 'italic',\n    }),\n    grid: css({\n      display: 'grid',\n      gridGap: theme.spacing(1),\n      gridTemplateColumns: 'repeat(auto-fill, 144px)',\n      marginBottom: theme.spacing(1),\n      justifyContent: 'space-evenly',\n    }),\n  };\n};\n","import React, { MouseEventHandler } from 'react';\n\nimport { PanelPluginMeta } from '@grafana/data';\n\nimport { PanelTypeCard } from './PanelTypeCard';\n\ninterface Props {\n  isCurrent: boolean;\n  plugin: PanelPluginMeta;\n  onClick: MouseEventHandler<HTMLDivElement>;\n  disabled: boolean;\n}\n\nexport const VizTypePickerPlugin: React.FC<Props> = ({ isCurrent, plugin, onClick, disabled }) => {\n  return (\n    <PanelTypeCard\n      title={plugin.name}\n      plugin={plugin}\n      description={plugin.info.description}\n      onClick={onClick}\n      isCurrent={isCurrent}\n      disabled={disabled}\n      showBadge={true}\n    />\n  );\n};\n\nVizTypePickerPlugin.displayName = 'VizTypePickerPlugin';\n","import { css } from '@emotion/css';\nimport React, { useMemo } from 'react';\n\nimport { GrafanaTheme2, PanelData, PanelPluginMeta } from '@grafana/data';\nimport { EmptySearchResult, useStyles2 } from '@grafana/ui';\n\nimport { filterPluginList, getAllPanelPluginMeta } from '../../state/util';\n\nimport { VizTypePickerPlugin } from './VizTypePickerPlugin';\nimport { VizTypeChangeDetails } from './types';\n\nexport interface Props {\n  current: PanelPluginMeta;\n  data?: PanelData;\n  onChange: (options: VizTypeChangeDetails) => void;\n  searchQuery: string;\n  onClose: () => void;\n}\n\nexport function VizTypePicker({ searchQuery, onChange, current, data }: Props) {\n  const styles = useStyles2(getStyles);\n  const pluginsList: PanelPluginMeta[] = useMemo(() => {\n    return getAllPanelPluginMeta();\n  }, []);\n\n  const filteredPluginTypes = useMemo((): PanelPluginMeta[] => {\n    return filterPluginList(pluginsList, searchQuery, current);\n  }, [current, pluginsList, searchQuery]);\n\n  if (filteredPluginTypes.length === 0) {\n    return <EmptySearchResult>Could not find anything matching your query</EmptySearchResult>;\n  }\n\n  return (\n    <div className={styles.grid}>\n      {filteredPluginTypes.map((plugin, index) => (\n        <VizTypePickerPlugin\n          disabled={false}\n          key={plugin.id}\n          isCurrent={plugin.id === current.id}\n          plugin={plugin}\n          onClick={(e) =>\n            onChange({\n              pluginId: plugin.id,\n              withModKey: Boolean(e.metaKey || e.ctrlKey || e.altKey),\n            })\n          }\n        />\n      ))}\n    </div>\n  );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    grid: css`\n      max-width: 100%;\n      display: grid;\n      grid-gap: ${theme.spacing(0.5)};\n    `,\n    heading: css({\n      ...theme.typography.h5,\n      margin: theme.spacing(0, 0.5, 1),\n    }),\n  };\n};\n","import { css } from '@emotion/css';\nimport React, { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocalStorage } from 'react-use';\n\nimport { GrafanaTheme, PanelData, SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Button, CustomScrollbar, FilterInput, RadioButtonGroup, useStyles } from '@grafana/ui';\nimport { Field } from '@grafana/ui/src/components/Forms/Field';\nimport { LS_VISUALIZATION_SELECT_TAB_KEY } from 'app/core/constants';\nimport { PanelLibraryOptionsGroup } from 'app/features/library-panels/components/PanelLibraryOptionsGroup/PanelLibraryOptionsGroup';\nimport { VisualizationSuggestions } from 'app/features/panel/components/VizTypePicker/VisualizationSuggestions';\nimport { VizTypeChangeDetails } from 'app/features/panel/components/VizTypePicker/types';\n\nimport { VizTypePicker } from '../../../panel/components/VizTypePicker/VizTypePicker';\nimport { changePanelPlugin } from '../../../panel/state/actions';\nimport { PanelModel } from '../../state/PanelModel';\nimport { getPanelPluginWithFallback } from '../../state/selectors';\n\nimport { toggleVizPicker } from './state/reducers';\nimport { VisualizationSelectPaneTab } from './types';\n\ninterface Props {\n  panel: PanelModel;\n  data?: PanelData;\n}\n\nexport const VisualizationSelectPane: FC<Props> = ({ panel, data }) => {\n  const plugin = useSelector(getPanelPluginWithFallback(panel.type));\n  const [searchQuery, setSearchQuery] = useState('');\n  const [listMode, setListMode] = useLocalStorage(\n    LS_VISUALIZATION_SELECT_TAB_KEY,\n    VisualizationSelectPaneTab.Visualizations\n  );\n\n  const dispatch = useDispatch();\n  const styles = useStyles(getStyles);\n  const searchRef = useRef<HTMLInputElement | null>(null);\n\n  const onVizChange = useCallback(\n    (pluginChange: VizTypeChangeDetails) => {\n      dispatch(changePanelPlugin({ panel: panel, ...pluginChange }));\n\n      // close viz picker unless a mod key is pressed while clicking\n      if (!pluginChange.withModKey) {\n        dispatch(toggleVizPicker(false));\n      }\n    },\n    [dispatch, panel]\n  );\n\n  // Give Search input focus when using radio button switch list mode\n  useEffect(() => {\n    if (searchRef.current) {\n      searchRef.current.focus();\n    }\n  }, [listMode]);\n\n  const onCloseVizPicker = () => {\n    dispatch(toggleVizPicker(false));\n  };\n\n  if (!plugin) {\n    return null;\n  }\n\n  const radioOptions: Array<SelectableValue<VisualizationSelectPaneTab>> = [\n    { label: 'Visualizations', value: VisualizationSelectPaneTab.Visualizations },\n    { label: 'Suggestions', value: VisualizationSelectPaneTab.Suggestions },\n    {\n      label: 'Library panels',\n      value: VisualizationSelectPaneTab.LibraryPanels,\n      description: 'Reusable panels you can share between multiple dashboards.',\n    },\n  ];\n\n  return (\n    <div className={styles.openWrapper}>\n      <div className={styles.formBox}>\n        <div className={styles.searchRow}>\n          <FilterInput\n            value={searchQuery}\n            onChange={setSearchQuery}\n            ref={searchRef}\n            autoFocus={true}\n            placeholder=\"Search for...\"\n          />\n          <Button\n            title=\"Close\"\n            variant=\"secondary\"\n            icon=\"angle-up\"\n            className={styles.closeButton}\n            aria-label={selectors.components.PanelEditor.toggleVizPicker}\n            onClick={onCloseVizPicker}\n          />\n        </div>\n        <Field className={styles.customFieldMargin}>\n          <RadioButtonGroup options={radioOptions} value={listMode} onChange={setListMode} fullWidth />\n        </Field>\n      </div>\n      <div className={styles.scrollWrapper}>\n        <CustomScrollbar autoHeightMin=\"100%\">\n          <div className={styles.scrollContent}>\n            {listMode === VisualizationSelectPaneTab.Visualizations && (\n              <VizTypePicker\n                current={plugin.meta}\n                onChange={onVizChange}\n                searchQuery={searchQuery}\n                data={data}\n                onClose={() => {}}\n              />\n            )}\n            {listMode === VisualizationSelectPaneTab.Suggestions && (\n              <VisualizationSuggestions\n                current={plugin.meta}\n                onChange={onVizChange}\n                searchQuery={searchQuery}\n                panel={panel}\n                data={data}\n                onClose={() => {}}\n              />\n            )}\n            {listMode === VisualizationSelectPaneTab.LibraryPanels && (\n              <PanelLibraryOptionsGroup searchQuery={searchQuery} panel={panel} key=\"Panel Library\" />\n            )}\n          </div>\n        </CustomScrollbar>\n      </div>\n    </div>\n  );\n};\n\nVisualizationSelectPane.displayName = 'VisualizationSelectPane';\n\nconst getStyles = (theme: GrafanaTheme) => {\n  return {\n    icon: css`\n      color: ${theme.palette.gray33};\n    `,\n    wrapper: css`\n      display: flex;\n      flex-direction: column;\n      flex: 1 1 0;\n      height: 100%;\n    `,\n    vizButton: css`\n      text-align: left;\n    `,\n    scrollWrapper: css`\n      flex-grow: 1;\n      min-height: 0;\n    `,\n    scrollContent: css`\n      padding: ${theme.spacing.sm};\n    `,\n    openWrapper: css`\n      display: flex;\n      flex-direction: column;\n      flex: 1 1 100%;\n      height: 100%;\n      background: ${theme.colors.bg1};\n      border: 1px solid ${theme.colors.border1};\n    `,\n    searchRow: css`\n      display: flex;\n      margin-bottom: ${theme.spacing.sm};\n    `,\n    closeButton: css`\n      margin-left: ${theme.spacing.sm};\n    `,\n    customFieldMargin: css`\n      margin-bottom: ${theme.spacing.sm};\n    `,\n    formBox: css`\n      padding: ${theme.spacing.sm};\n      padding-bottom: 0;\n    `,\n  };\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { GrafanaTheme } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { useStyles } from '@grafana/ui';\nimport { StoreState } from 'app/types';\n\nimport { OptionsPaneOptions } from './OptionsPaneOptions';\nimport { VisualizationButton } from './VisualizationButton';\nimport { VisualizationSelectPane } from './VisualizationSelectPane';\nimport { OptionPaneRenderProps } from './types';\nimport { usePanelLatestData } from './usePanelLatestData';\n\nexport const OptionsPane: React.FC<OptionPaneRenderProps> = ({\n  plugin,\n  panel,\n  onFieldConfigsChange,\n  onPanelOptionsChanged,\n  onPanelConfigChange,\n  dashboard,\n  instanceState,\n}) => {\n  const styles = useStyles(getStyles);\n  const isVizPickerOpen = useSelector((state: StoreState) => state.panelEditor.isVizPickerOpen);\n  const { data } = usePanelLatestData(panel, { withTransforms: true, withFieldConfig: false }, true);\n\n  return (\n    <div className={styles.wrapper} aria-label={selectors.components.PanelEditor.OptionsPane.content}>\n      {!isVizPickerOpen && (\n        <>\n          <div className={styles.vizButtonWrapper}>\n            <VisualizationButton panel={panel} />\n          </div>\n          <div className={styles.optionsWrapper}>\n            <OptionsPaneOptions\n              panel={panel}\n              dashboard={dashboard}\n              plugin={plugin}\n              instanceState={instanceState}\n              data={data}\n              onFieldConfigsChange={onFieldConfigsChange}\n              onPanelOptionsChanged={onPanelOptionsChanged}\n              onPanelConfigChange={onPanelConfigChange}\n            />\n          </div>\n        </>\n      )}\n      {isVizPickerOpen && <VisualizationSelectPane panel={panel} data={data} />}\n    </div>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme) => {\n  return {\n    wrapper: css`\n      height: 100%;\n      width: 100%;\n      display: flex;\n      flex: 1 1 0;\n      flex-direction: column;\n      padding: 0;\n    `,\n    optionsWrapper: css`\n      flex-grow: 1;\n      min-height: 0;\n    `,\n    vizButtonWrapper: css`\n      padding: 0 ${theme.spacing.md} ${theme.spacing.md} 0;\n    `,\n    legacyOptions: css`\n      label: legacy-options;\n      .panel-options-grid {\n        display: flex;\n        flex-direction: column;\n      }\n      .panel-options-group {\n        margin-bottom: 0;\n      }\n      .panel-options-group__body {\n        padding: ${theme.spacing.md} 0;\n      }\n\n      .section {\n        display: block;\n        margin: ${theme.spacing.md} 0;\n\n        &:first-child {\n          margin-top: 0;\n        }\n      }\n    `,\n  };\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { RefreshEvent } from '@grafana/runtime';\nimport { PanelChrome } from '@grafana/ui';\nimport { applyPanelTimeOverrides } from 'app/features/dashboard/utils/panel';\nimport { PanelRenderer } from 'app/features/panel/components/PanelRenderer';\nimport { PanelOptions } from 'app/plugins/panel/table/models.gen';\n\nimport PanelHeaderCorner from '../../dashgrid/PanelHeader/PanelHeaderCorner';\nimport { getTimeSrv } from '../../services/TimeSrv';\nimport { DashboardModel, PanelModel } from '../../state';\n\nimport { usePanelLatestData } from './usePanelLatestData';\n\ninterface Props {\n  width: number;\n  height: number;\n  panel: PanelModel;\n  dashboard: DashboardModel;\n}\n\nexport function PanelEditorTableView({ width, height, panel, dashboard }: Props) {\n  const { data } = usePanelLatestData(panel, { withTransforms: true, withFieldConfig: false }, false);\n  const [options, setOptions] = useState<PanelOptions>({\n    frameIndex: 0,\n    showHeader: true,\n    showTypeIcons: true,\n  });\n\n  // Subscribe to panel event\n  useEffect(() => {\n    const timeSrv = getTimeSrv();\n    const timeData = applyPanelTimeOverrides(panel, timeSrv.timeRange());\n\n    const sub = panel.events.subscribe(RefreshEvent, () => {\n      panel.runAllPanelQueries(dashboard.id, dashboard.getTimezone(), timeData, width);\n    });\n    return () => {\n      sub.unsubscribe();\n    };\n  }, [panel, dashboard, width]);\n\n  if (!data) {\n    return null;\n  }\n\n  return (\n    <PanelChrome width={width} height={height} padding=\"none\">\n      {(innerWidth, innerHeight) => (\n        <>\n          <PanelHeaderCorner panel={panel} error={data?.error?.message} />\n          <PanelRenderer\n            title=\"Raw data\"\n            pluginId=\"table\"\n            width={innerWidth}\n            height={innerHeight}\n            data={data}\n            options={options}\n            onOptionsChange={setOptions}\n          />\n        </>\n      )}\n    </PanelChrome>\n  );\n}\n","import React, { useCallback } from 'react';\n\nimport { locationService } from '@grafana/runtime';\nimport { Button, VerticalGroup } from '@grafana/ui';\nimport { Layout } from '@grafana/ui/src/components/Layout/Layout';\n\nimport { PanelEditorTabId } from './types';\n\nexport interface Props {\n  message: string;\n}\n\nexport function PanelNotSupported({ message }: Props): JSX.Element {\n  const onBackToQueries = useCallback(() => {\n    locationService.partial({ tab: PanelEditorTabId.Query });\n  }, []);\n\n  return (\n    <Layout justify=\"center\" style={{ marginTop: '100px' }}>\n      <VerticalGroup spacing=\"md\">\n        <h2>{message}</h2>\n        <div>\n          <Button size=\"md\" variant=\"secondary\" icon=\"arrow-left\" onClick={onBackToQueries}>\n            Go back to Queries\n          </Button>\n        </div>\n      </VerticalGroup>\n    </Layout>\n  );\n}\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\n\nimport { getBackendSrv } from '@grafana/runtime';\nimport { Icon, ConfirmButton, Button } from '@grafana/ui';\n\nimport { DashboardModel } from '../dashboard/state/DashboardModel';\n\nimport alertDef from './state/alertDef';\n\ninterface Props {\n  dashboard: DashboardModel;\n  panelId: number;\n  onRefresh: () => void;\n}\n\ninterface State {\n  stateHistoryItems: any[];\n}\n\nclass StateHistory extends PureComponent<Props, State> {\n  state: State = {\n    stateHistoryItems: [],\n  };\n\n  componentDidMount(): void {\n    const { dashboard, panelId } = this.props;\n\n    getBackendSrv()\n      .get(\n        `/api/annotations?dashboardId=${dashboard.id}&panelId=${panelId}&limit=50&type=alert`,\n        {},\n        `state-history-${dashboard.id}-${panelId}`\n      )\n      .then((data) => {\n        const items = data.map((item: any) => {\n          return {\n            stateModel: alertDef.getStateDisplayModel(item.newState),\n            time: dashboard.formatDate(item.time, 'MMM D, YYYY HH:mm:ss'),\n            info: alertDef.getAlertAnnotationInfo(item),\n          };\n        });\n\n        this.setState({\n          stateHistoryItems: items,\n        });\n      });\n  }\n\n  clearHistory = async () => {\n    const { dashboard, panelId, onRefresh } = this.props;\n\n    await getBackendSrv().post('/api/annotations/mass-delete', {\n      dashboardId: dashboard.id,\n      panelId: panelId,\n    });\n\n    this.setState({ stateHistoryItems: [] });\n    onRefresh();\n  };\n\n  render() {\n    const { stateHistoryItems } = this.state;\n\n    return (\n      <div>\n        {stateHistoryItems.length > 0 && (\n          <div className=\"p-b-1\">\n            <span className=\"muted\">Last 50 state changes</span>\n            <ConfirmButton onConfirm={this.clearHistory} confirmVariant=\"destructive\" confirmText=\"Clear\">\n              <Button\n                className={css`\n                  direction: ltr;\n                `}\n                variant=\"destructive\"\n                icon=\"trash-alt\"\n              >\n                Clear history\n              </Button>\n            </ConfirmButton>\n          </div>\n        )}\n        <ol className=\"alert-rule-list\">\n          {stateHistoryItems.length > 0 ? (\n            stateHistoryItems.map((item, index) => {\n              return (\n                <li className=\"alert-rule-item\" key={`${item.time}-${index}`}>\n                  <div className={`alert-rule-item__icon ${item.stateModel.stateClass}`}>\n                    <Icon name={item.stateModel.iconClass} size=\"xl\" />\n                  </div>\n                  <div className=\"alert-rule-item__body\">\n                    <div className=\"alert-rule-item__header\">\n                      <p className=\"alert-rule-item__name\">{item.alertName}</p>\n                      <div className=\"alert-rule-item__text\">\n                        <span className={`${item.stateModel.stateClass}`}>{item.stateModel.text}</span>\n                      </div>\n                    </div>\n                    {item.info}\n                  </div>\n                  <div className=\"alert-rule-item__time\">{item.time}</div>\n                </li>\n              );\n            })\n          ) : (\n            <i>No state changes recorded</i>\n          )}\n        </ol>\n      </div>\n    );\n  }\n}\n\nexport default StateHistory;\n","import React, { PureComponent } from 'react';\n\nimport { AppEvents } from '@grafana/data';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { LoadingPlaceholder, JSONFormatter, Icon, HorizontalGroup, ClipboardButton } from '@grafana/ui';\nimport appEvents from 'app/core/app_events';\n\nimport { DashboardModel, PanelModel } from '../dashboard/state';\n\nexport interface Props {\n  dashboard: DashboardModel;\n  panel: PanelModel;\n}\n\ninterface State {\n  isLoading: boolean;\n  allNodesExpanded: boolean | null;\n  testRuleResponse: {};\n}\n\nexport class TestRuleResult extends PureComponent<Props, State> {\n  readonly state: State = {\n    isLoading: false,\n    allNodesExpanded: null,\n    testRuleResponse: {},\n  };\n\n  formattedJson: any;\n  clipboard: any;\n\n  componentDidMount() {\n    this.testRule();\n  }\n\n  async testRule() {\n    const { dashboard, panel } = this.props;\n\n    // dashboard save model\n    const model = dashboard.getSaveModelClone();\n\n    // now replace panel to get current edits\n    model.panels = model.panels.map((dashPanel) => {\n      return dashPanel.id === panel.id ? panel.getSaveModel() : dashPanel;\n    });\n\n    const payload = { dashboard: model, panelId: panel.id };\n\n    this.setState({ isLoading: true });\n    const testRuleResponse = await getBackendSrv().post(`/api/alerts/test`, payload);\n    this.setState({ isLoading: false, testRuleResponse });\n  }\n\n  setFormattedJson = (formattedJson: any) => {\n    this.formattedJson = formattedJson;\n  };\n\n  getTextForClipboard = () => {\n    return JSON.stringify(this.formattedJson, null, 2);\n  };\n\n  onClipboardSuccess = () => {\n    appEvents.emit(AppEvents.alertSuccess, ['Content copied to clipboard']);\n  };\n\n  onToggleExpand = () => {\n    this.setState((prevState) => ({\n      ...prevState,\n      allNodesExpanded: !this.state.allNodesExpanded,\n    }));\n  };\n\n  getNrOfOpenNodes = () => {\n    if (this.state.allNodesExpanded === null) {\n      return 3; // 3 is default, ie when state is null\n    } else if (this.state.allNodesExpanded) {\n      return 20;\n    }\n    return 1;\n  };\n\n  renderExpandCollapse = () => {\n    const { allNodesExpanded } = this.state;\n\n    const collapse = (\n      <>\n        <Icon name=\"minus-circle\" /> Collapse All\n      </>\n    );\n    const expand = (\n      <>\n        <Icon name=\"plus-circle\" /> Expand All\n      </>\n    );\n    return allNodesExpanded ? collapse : expand;\n  };\n\n  render() {\n    const { testRuleResponse, isLoading } = this.state;\n\n    if (isLoading === true) {\n      return <LoadingPlaceholder text=\"Evaluating rule\" />;\n    }\n\n    const openNodes = this.getNrOfOpenNodes();\n\n    return (\n      <>\n        <div className=\"pull-right\">\n          <HorizontalGroup spacing=\"md\">\n            <div onClick={this.onToggleExpand}>{this.renderExpandCollapse()}</div>\n            <ClipboardButton getText={this.getTextForClipboard} onClipboardCopy={this.onClipboardSuccess} icon=\"copy\">\n              Copy to Clipboard\n            </ClipboardButton>\n          </HorizontalGroup>\n        </div>\n\n        <JSONFormatter json={testRuleResponse} open={openNodes} onDidRender={this.setFormattedJson} />\n      </>\n    );\n  }\n}\n","import React, { PureComponent } from 'react';\nimport { connect, MapDispatchToProps, MapStateToProps } from 'react-redux';\n\nimport { EventBusSrv } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { AngularComponent, config, getAngularLoader, getDataSourceSrv } from '@grafana/runtime';\nimport { Alert, Button, ConfirmModal, Container, CustomScrollbar, HorizontalGroup, IconName, Modal } from '@grafana/ui';\nimport EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';\nimport { getPanelStateForModel } from 'app/features/panel/state/selectors';\nimport { AppNotificationSeverity, StoreState } from 'app/types';\n\nimport { AlertState } from '../../plugins/datasource/alertmanager/types';\nimport { PanelNotSupported } from '../dashboard/components/PanelEditor/PanelNotSupported';\nimport { DashboardModel } from '../dashboard/state/DashboardModel';\nimport { PanelModel } from '../dashboard/state/PanelModel';\n\nimport StateHistory from './StateHistory';\nimport { TestRuleResult } from './TestRuleResult';\nimport { getAlertingValidationMessage } from './getAlertingValidationMessage';\n\ninterface AngularPanelController {\n  _enableAlert: () => void;\n  alertState: AlertState | null;\n  render: () => void;\n  refresh: () => void;\n}\n\ninterface OwnProps {\n  dashboard: DashboardModel;\n  panel: PanelModel;\n}\n\ninterface ConnectedProps {\n  angularPanelComponent?: AngularComponent | null;\n}\n\ninterface DispatchProps {}\n\nexport type Props = OwnProps & ConnectedProps & DispatchProps;\n\ninterface State {\n  validationMessage: string;\n  showStateHistory: boolean;\n  showDeleteConfirmation: boolean;\n  showTestRule: boolean;\n}\n\nclass UnConnectedAlertTab extends PureComponent<Props, State> {\n  element?: HTMLDivElement | null;\n  component?: AngularComponent;\n  panelCtrl?: AngularPanelController;\n\n  state: State = {\n    validationMessage: '',\n    showStateHistory: false,\n    showDeleteConfirmation: false,\n    showTestRule: false,\n  };\n\n  async componentDidMount() {\n    if (config.angularSupportEnabled) {\n      await import(/* webpackChunkName: \"AlertTabCtrl\" */ 'app/features/alerting/AlertTabCtrl');\n      this.loadAlertTab();\n    } else {\n      // TODO probably need to migrate AlertTab to react\n      alert('Angular support disabled, legacy alerting cannot function without angular support');\n    }\n  }\n\n  onAngularPanelUpdated = () => {\n    this.forceUpdate();\n  };\n\n  componentDidUpdate(prevProps: Props) {\n    this.loadAlertTab();\n  }\n\n  componentWillUnmount() {\n    if (this.component) {\n      this.component.destroy();\n    }\n  }\n\n  async loadAlertTab() {\n    const { panel, angularPanelComponent } = this.props;\n\n    if (!this.element || this.component) {\n      return;\n    }\n\n    if (angularPanelComponent) {\n      const scope = angularPanelComponent.getScope();\n\n      // When full page reloading in edit mode the angular panel has on fully compiled & instantiated yet\n      if (!scope.$$childHead) {\n        setTimeout(() => {\n          this.forceUpdate();\n        });\n        return;\n      }\n\n      this.panelCtrl = scope.$$childHead.ctrl;\n    } else {\n      this.panelCtrl = this.getReactAlertPanelCtrl();\n    }\n\n    const loader = getAngularLoader();\n    const template = '<alert-tab />';\n    const scopeProps = { ctrl: this.panelCtrl };\n\n    this.component = loader.load(this.element, scopeProps, template);\n\n    const validationMessage = await getAlertingValidationMessage(\n      panel.transformations,\n      panel.targets,\n      getDataSourceSrv(),\n      panel.datasource\n    );\n\n    if (validationMessage) {\n      this.setState({ validationMessage });\n    }\n  }\n\n  getReactAlertPanelCtrl() {\n    return {\n      panel: this.props.panel,\n      events: new EventBusSrv(),\n      render: () => {\n        this.props.panel.render();\n      },\n    } as any;\n  }\n\n  onAddAlert = () => {\n    this.panelCtrl?._enableAlert();\n    this.component?.digest();\n    this.forceUpdate();\n  };\n\n  onToggleModal = (prop: keyof Omit<State, 'validationMessage'>) => {\n    const value = this.state[prop];\n    this.setState({ ...this.state, [prop]: !value });\n  };\n\n  renderTestRule = () => {\n    if (!this.state.showTestRule) {\n      return null;\n    }\n\n    const { panel, dashboard } = this.props;\n    const onDismiss = () => this.onToggleModal('showTestRule');\n\n    return (\n      <Modal isOpen={true} icon=\"bug\" title=\"Testing rule\" onDismiss={onDismiss} onClickBackdrop={onDismiss}>\n        <TestRuleResult panel={panel} dashboard={dashboard} />\n      </Modal>\n    );\n  };\n\n  renderDeleteConfirmation = () => {\n    if (!this.state.showDeleteConfirmation) {\n      return null;\n    }\n\n    const { panel } = this.props;\n    const onDismiss = () => this.onToggleModal('showDeleteConfirmation');\n\n    return (\n      <ConfirmModal\n        isOpen={true}\n        icon=\"trash-alt\"\n        title=\"Delete\"\n        body={\n          <div>\n            Are you sure you want to delete this alert rule?\n            <br />\n            <small>You need to save dashboard for the delete to take effect.</small>\n          </div>\n        }\n        confirmText=\"Delete alert\"\n        onDismiss={onDismiss}\n        onConfirm={() => {\n          delete panel.alert;\n          panel.thresholds = [];\n          if (this.panelCtrl) {\n            this.panelCtrl.alertState = null;\n            this.panelCtrl.render();\n          }\n          this.component?.digest();\n          onDismiss();\n        }}\n      />\n    );\n  };\n\n  renderStateHistory = () => {\n    if (!this.state.showStateHistory) {\n      return null;\n    }\n\n    const { panel, dashboard } = this.props;\n    const onDismiss = () => this.onToggleModal('showStateHistory');\n\n    return (\n      <Modal isOpen={true} icon=\"history\" title=\"State history\" onDismiss={onDismiss} onClickBackdrop={onDismiss}>\n        <StateHistory dashboard={dashboard} panelId={panel.id} onRefresh={() => this.panelCtrl?.refresh()} />\n      </Modal>\n    );\n  };\n\n  render() {\n    const { alert, transformations } = this.props.panel;\n    const { validationMessage } = this.state;\n    const hasTransformations = transformations && transformations.length > 0;\n\n    if (!alert && validationMessage) {\n      return <PanelNotSupported message={validationMessage} />;\n    }\n\n    const model = {\n      title: 'Panel has no alert rule defined',\n      buttonIcon: 'bell' as IconName,\n      onClick: this.onAddAlert,\n      buttonTitle: 'Create Alert',\n    };\n\n    return (\n      <>\n        <CustomScrollbar autoHeightMin=\"100%\">\n          <Container padding=\"md\">\n            <div aria-label={selectors.components.AlertTab.content}>\n              {alert && hasTransformations && (\n                <Alert\n                  severity={AppNotificationSeverity.Error}\n                  title=\"Transformations are not supported in alert queries\"\n                />\n              )}\n\n              <div ref={(element) => (this.element = element)} />\n              {alert && (\n                <HorizontalGroup>\n                  <Button onClick={() => this.onToggleModal('showStateHistory')} variant=\"secondary\">\n                    State history\n                  </Button>\n                  <Button onClick={() => this.onToggleModal('showTestRule')} variant=\"secondary\">\n                    Test rule\n                  </Button>\n                  <Button onClick={() => this.onToggleModal('showDeleteConfirmation')} variant=\"destructive\">\n                    Delete\n                  </Button>\n                </HorizontalGroup>\n              )}\n              {!alert && !validationMessage && <EmptyListCTA {...model} />}\n            </div>\n          </Container>\n        </CustomScrollbar>\n\n        {this.renderTestRule()}\n        {this.renderDeleteConfirmation()}\n        {this.renderStateHistory()}\n      </>\n    );\n  }\n}\n\nconst mapStateToProps: MapStateToProps<ConnectedProps, OwnProps, StoreState> = (state, props) => {\n  return {\n    angularPanelComponent: getPanelStateForModel(state, props.panel)?.angularComponent,\n  };\n};\n\nconst mapDispatchToProps: MapDispatchToProps<DispatchProps, OwnProps> = {};\n\nexport const AlertTab = connect(mapStateToProps, mapDispatchToProps)(UnConnectedAlertTab);\n","import React, { FC } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useAsync } from 'react-use';\n\nimport { urlUtil } from '@grafana/data';\nimport { Alert, LinkButton, Button } from '@grafana/ui';\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\n\nimport { panelToRuleFormValues } from '../../utils/rule-form';\n\ninterface Props {\n  panel: PanelModel;\n  dashboard: DashboardModel;\n  className?: string;\n}\n\nexport const NewRuleFromPanelButton: FC<Props> = ({ dashboard, panel, className }) => {\n  const { loading, value: formValues } = useAsync(() => panelToRuleFormValues(panel, dashboard), [panel, dashboard]);\n  const location = useLocation();\n  if (loading) {\n    return <Button disabled={true}>Create alert rule from this panel</Button>;\n  }\n\n  if (!formValues) {\n    return (\n      <Alert severity=\"info\" title=\"No alerting capable query found\">\n        Cannot create alerts from this panel because no query to an alerting capable datasource is found.\n      </Alert>\n    );\n  }\n\n  const ruleFormUrl = urlUtil.renderUrl('alerting/new', {\n    defaults: JSON.stringify(formValues),\n    returnTo: location.pathname + location.search,\n  });\n\n  return (\n    <LinkButton icon=\"bell\" href={ruleFormUrl} className={className} data-testid=\"create-alert-rule-button\">\n      Create alert rule from this panel\n    </LinkButton>\n  );\n};\n","import { SerializedError } from '@reduxjs/toolkit';\nimport { useEffect, useMemo } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\nimport { CombinedRule } from 'app/types/unified-alerting';\n\nimport { fetchPromRulesAction, fetchRulerRulesAction } from '../state/actions';\nimport { Annotation, RULE_LIST_POLL_INTERVAL_MS } from '../utils/constants';\nimport { GRAFANA_RULES_SOURCE_NAME } from '../utils/datasource';\nimport { initialAsyncRequestState } from '../utils/redux';\n\nimport { useCombinedRuleNamespaces } from './useCombinedRuleNamespaces';\nimport { useUnifiedAlertingSelector } from './useUnifiedAlertingSelector';\n\ninterface Options {\n  dashboard: DashboardModel;\n  panel: PanelModel;\n\n  poll?: boolean;\n}\n\ninterface ReturnBag {\n  errors: SerializedError[];\n  rules: CombinedRule[];\n\n  loading?: boolean;\n}\n\nexport function usePanelCombinedRules({ dashboard, panel, poll = false }: Options): ReturnBag {\n  const dispatch = useDispatch();\n\n  const promRuleRequest =\n    useUnifiedAlertingSelector((state) => state.promRules[GRAFANA_RULES_SOURCE_NAME]) ?? initialAsyncRequestState;\n  const rulerRuleRequest =\n    useUnifiedAlertingSelector((state) => state.rulerRules[GRAFANA_RULES_SOURCE_NAME]) ?? initialAsyncRequestState;\n\n  // fetch rules, then poll every RULE_LIST_POLL_INTERVAL_MS\n  useEffect(() => {\n    const fetch = () => {\n      dispatch(\n        fetchPromRulesAction({\n          rulesSourceName: GRAFANA_RULES_SOURCE_NAME,\n          filter: { dashboardUID: dashboard.uid, panelId: panel.id },\n        })\n      );\n      dispatch(\n        fetchRulerRulesAction({\n          rulesSourceName: GRAFANA_RULES_SOURCE_NAME,\n          filter: { dashboardUID: dashboard.uid, panelId: panel.id },\n        })\n      );\n    };\n    fetch();\n    if (poll) {\n      const interval = setInterval(fetch, RULE_LIST_POLL_INTERVAL_MS);\n      return () => {\n        clearInterval(interval);\n      };\n    }\n    return () => {};\n  }, [dispatch, poll, panel.id, dashboard.uid]);\n\n  const loading = promRuleRequest.loading || rulerRuleRequest.loading;\n  const errors = [promRuleRequest.error, rulerRuleRequest.error].filter(\n    (err: SerializedError | undefined): err is SerializedError => !!err\n  );\n\n  const combinedNamespaces = useCombinedRuleNamespaces(GRAFANA_RULES_SOURCE_NAME);\n\n  // filter out rules that are relevant to this panel\n  const rules = useMemo(\n    (): CombinedRule[] =>\n      combinedNamespaces\n        .flatMap((ns) => ns.groups)\n        .flatMap((group) => group.rules)\n        .filter(\n          (rule) =>\n            rule.annotations[Annotation.dashboardUID] === dashboard.uid &&\n            rule.annotations[Annotation.panelID] === String(panel.id)\n        ),\n    [combinedNamespaces, dashboard, panel]\n  );\n\n  return {\n    rules,\n    errors,\n    loading,\n  };\n}\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Alert, CustomScrollbar, LoadingPlaceholder, useStyles2 } from '@grafana/ui';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\n\nimport { NewRuleFromPanelButton } from './components/panel-alerts-tab/NewRuleFromPanelButton';\nimport { RulesTable } from './components/rules/RulesTable';\nimport { usePanelCombinedRules } from './hooks/usePanelCombinedRules';\nimport { getRulesPermissions } from './utils/access-control';\n\ninterface Props {\n  dashboard: DashboardModel;\n  panel: PanelModel;\n}\n\nexport const PanelAlertTabContent: FC<Props> = ({ dashboard, panel }) => {\n  const styles = useStyles2(getStyles);\n  const { errors, loading, rules } = usePanelCombinedRules({\n    dashboard,\n    panel,\n    poll: true,\n  });\n  const permissions = getRulesPermissions('grafana');\n  const canCreateRules = contextSrv.hasPermission(permissions.create);\n\n  const alert = errors.length ? (\n    <Alert title=\"Errors loading rules\" severity=\"error\">\n      {errors.map((error, index) => (\n        <div key={index}>Failed to load Grafana rules state: {error.message || 'Unknown error.'}</div>\n      ))}\n    </Alert>\n  ) : null;\n\n  if (loading && !rules.length) {\n    return (\n      <div className={styles.innerWrapper}>\n        {alert}\n        <LoadingPlaceholder text=\"Loading rules...\" />\n      </div>\n    );\n  }\n\n  if (rules.length) {\n    return (\n      <CustomScrollbar autoHeightMin=\"100%\">\n        <div className={styles.innerWrapper}>\n          {alert}\n          <RulesTable rules={rules} />\n          {!!dashboard.meta.canSave && canCreateRules && (\n            <NewRuleFromPanelButton className={styles.newButton} panel={panel} dashboard={dashboard} />\n          )}\n        </div>\n      </CustomScrollbar>\n    );\n  }\n\n  return (\n    <div aria-label={selectors.components.PanelAlertTabContent.content} className={styles.noRulesWrapper}>\n      {alert}\n      {!!dashboard.uid && (\n        <>\n          <p>There are no alert rules linked to this panel.</p>\n          {!!dashboard.meta.canSave && canCreateRules && <NewRuleFromPanelButton panel={panel} dashboard={dashboard} />}\n        </>\n      )}\n      {!dashboard.uid && !!dashboard.meta.canSave && (\n        <Alert severity=\"info\" title=\"Dashboard not saved\">\n          Dashboard must be saved before alerts can be added.\n        </Alert>\n      )}\n    </div>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  newButton: css`\n    margin-top: ${theme.spacing(3)};\n  `,\n  innerWrapper: css`\n    padding: ${theme.spacing(2)};\n  `,\n  noRulesWrapper: css`\n    margin: ${theme.spacing(2)};\n    background-color: ${theme.colors.background.secondary};\n    padding: ${theme.spacing(3)};\n  `,\n});\n","import { config } from '@grafana/runtime';\n\nimport { AlertTab } from './AlertTab';\nimport { PanelAlertTabContent } from './unified/PanelAlertTabContent';\n\n// route between unified and \"old\" alerting pages based on feature flag\n\nexport default config.unifiedAlertingEnabled ? PanelAlertTabContent : AlertTab;\n","import React, { FC } from 'react';\n\nimport { Tab, TabProps } from '@grafana/ui/src/components/Tabs/Tab';\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\n\nimport { usePanelCombinedRules } from './hooks/usePanelCombinedRules';\n\ninterface Props extends Omit<TabProps, 'counter' | 'ref'> {\n  panel: PanelModel;\n  dashboard: DashboardModel;\n}\n\n// it will load rule count from backend\nexport const PanelAlertTab: FC<Props> = ({ panel, dashboard, ...otherProps }) => {\n  const { rules, loading } = usePanelCombinedRules({ panel, dashboard });\n  return <Tab {...otherProps} counter={loading ? null : rules.length} />;\n};\n","import { DocsId } from '@grafana/data';\n\n// TODO: Documentation links\nconst DOCS_LINKS: Record<DocsId, string> = {\n  [DocsId.Transformations]: 'https://grafana.com/docs/grafana/latest/panels/transformations',\n  [DocsId.FieldConfig]: 'https://grafana.com/docs/grafana/latest/panels/field-configuration-options/',\n  [DocsId.FieldConfigOverrides]:\n    'https://grafana.com/docs/grafana/latest/panels/field-configuration-options/#override-a-field',\n};\n\nexport const getDocsLink = (id: DocsId) => DOCS_LINKS[id];\n","import { css } from '@emotion/css';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { mergeMap } from 'rxjs/operators';\n\nimport {\n  DataFrame,\n  DataTransformerConfig,\n  GrafanaTheme,\n  transformDataFrame,\n  TransformerRegistryItem,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Icon, JSONFormatter, useStyles } from '@grafana/ui';\n\nimport { TransformationsEditorTransformation } from './types';\n\ninterface TransformationEditorProps {\n  debugMode?: boolean;\n  index: number;\n  data: DataFrame[];\n  uiConfig: TransformerRegistryItem<any>;\n  configs: TransformationsEditorTransformation[];\n  onChange: (index: number, config: DataTransformerConfig) => void;\n}\n\nexport const TransformationEditor = ({\n  debugMode,\n  index,\n  data,\n  uiConfig,\n  configs,\n  onChange,\n}: TransformationEditorProps) => {\n  const styles = useStyles(getStyles);\n  const [input, setInput] = useState<DataFrame[]>([]);\n  const [output, setOutput] = useState<DataFrame[]>([]);\n  const config = useMemo(() => configs[index], [configs, index]);\n\n  useEffect(() => {\n    const inputTransforms = configs.slice(0, index).map((t) => t.transformation);\n    const outputTransforms = configs.slice(index, index + 1).map((t) => t.transformation);\n    const inputSubscription = transformDataFrame(inputTransforms, data).subscribe(setInput);\n    const outputSubscription = transformDataFrame(inputTransforms, data)\n      .pipe(mergeMap((before) => transformDataFrame(outputTransforms, before)))\n      .subscribe(setOutput);\n\n    return function unsubscribe() {\n      inputSubscription.unsubscribe();\n      outputSubscription.unsubscribe();\n    };\n  }, [index, data, configs]);\n\n  const editor = useMemo(\n    () =>\n      React.createElement(uiConfig.editor, {\n        options: { ...uiConfig.transformation.defaultOptions, ...config.transformation.options },\n        input,\n        onChange: (opts: any) => {\n          onChange(index, { id: config.transformation.id, options: opts });\n        },\n      }),\n    [\n      uiConfig.editor,\n      uiConfig.transformation.defaultOptions,\n      config.transformation.options,\n      config.transformation.id,\n      input,\n      onChange,\n      index,\n    ]\n  );\n\n  return (\n    <div className={styles.editor} aria-label={selectors.components.TransformTab.transformationEditor(uiConfig.name)}>\n      {editor}\n      {debugMode && (\n        <div\n          className={styles.debugWrapper}\n          aria-label={selectors.components.TransformTab.transformationEditorDebugger(uiConfig.name)}\n        >\n          <div className={styles.debug}>\n            <div className={styles.debugTitle}>Transformation input data</div>\n            <div className={styles.debugJson}>\n              <JSONFormatter json={input} />\n            </div>\n          </div>\n          <div className={styles.debugSeparator}>\n            <Icon name=\"arrow-right\" />\n          </div>\n          <div className={styles.debug}>\n            <div className={styles.debugTitle}>Transformation output data</div>\n            <div className={styles.debugJson}>{output && <JSONFormatter json={output} />}</div>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme) => {\n  const debugBorder = theme.isLight ? theme.palette.gray85 : theme.palette.gray15;\n\n  return {\n    title: css`\n      display: flex;\n      padding: 4px 8px 4px 8px;\n      position: relative;\n      height: 35px;\n      border-radius: 4px 4px 0 0;\n      flex-wrap: nowrap;\n      justify-content: space-between;\n      align-items: center;\n    `,\n    name: css`\n      font-weight: ${theme.typography.weight.semibold};\n      color: ${theme.colors.textBlue};\n    `,\n    iconRow: css`\n      display: flex;\n    `,\n    icon: css`\n      background: transparent;\n      border: none;\n      box-shadow: none;\n      cursor: pointer;\n      color: ${theme.colors.textWeak};\n      margin-left: ${theme.spacing.sm};\n      &:hover {\n        color: ${theme.colors.text};\n      }\n    `,\n    editor: css``,\n    debugWrapper: css`\n      display: flex;\n      flex-direction: row;\n    `,\n    debugSeparator: css`\n      width: 48px;\n      min-height: 300px;\n      display: flex;\n      align-items: center;\n      align-self: stretch;\n      justify-content: center;\n      margin: 0 ${theme.spacing.xs};\n      color: ${theme.colors.textBlue};\n    `,\n    debugTitle: css`\n      padding: ${theme.spacing.sm} ${theme.spacing.xxs};\n      font-family: ${theme.typography.fontFamily.monospace};\n      font-size: ${theme.typography.size.sm};\n      color: ${theme.colors.text};\n      border-bottom: 1px solid ${debugBorder};\n      flex-grow: 0;\n      flex-shrink: 1;\n    `,\n\n    debug: css`\n      margin-top: ${theme.spacing.sm};\n      padding: 0 ${theme.spacing.sm} ${theme.spacing.sm} ${theme.spacing.sm};\n      border: 1px solid ${debugBorder};\n      background: ${theme.isLight ? theme.palette.white : theme.palette.gray05};\n      border-radius: ${theme.border.radius.sm};\n      width: 100%;\n      min-height: 300px;\n      display: flex;\n      flex-direction: column;\n      align-self: stretch;\n    `,\n    debugJson: css`\n      flex-grow: 1;\n      height: 100%;\n      overflow: hidden;\n      padding: ${theme.spacing.xs};\n    `,\n  };\n};\n","import React, { useCallback } from 'react';\nimport { useToggle } from 'react-use';\n\nimport { DataFrame, DataTransformerConfig, TransformerRegistryItem } from '@grafana/data';\nimport { HorizontalGroup } from '@grafana/ui';\nimport { OperationRowHelp } from 'app/core/components/QueryOperationRow/OperationRowHelp';\nimport { QueryOperationAction } from 'app/core/components/QueryOperationRow/QueryOperationAction';\nimport {\n  QueryOperationRow,\n  QueryOperationRowRenderProps,\n} from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport { PluginStateInfo } from 'app/features/plugins/components/PluginStateInfo';\n\nimport { TransformationEditor } from './TransformationEditor';\nimport { TransformationsEditorTransformation } from './types';\n\ninterface TransformationOperationRowProps {\n  id: string;\n  index: number;\n  data: DataFrame[];\n  uiConfig: TransformerRegistryItem<any>;\n  configs: TransformationsEditorTransformation[];\n  onRemove: (index: number) => void;\n  onChange: (index: number, config: DataTransformerConfig) => void;\n}\n\nexport const TransformationOperationRow: React.FC<TransformationOperationRowProps> = ({\n  onRemove,\n  index,\n  id,\n  data,\n  configs,\n  uiConfig,\n  onChange,\n}) => {\n  const [showDebug, toggleDebug] = useToggle(false);\n  const [showHelp, toggleHelp] = useToggle(false);\n  const disabled = configs[index].transformation.disabled;\n\n  const onDisableToggle = useCallback(\n    (index: number) => {\n      const current = configs[index].transformation;\n      onChange(index, {\n        ...current,\n        disabled: current.disabled ? undefined : true,\n      });\n    },\n    [onChange, configs]\n  );\n\n  const renderActions = ({ isOpen }: QueryOperationRowRenderProps) => {\n    return (\n      <HorizontalGroup align=\"center\" width=\"auto\">\n        {uiConfig.state && <PluginStateInfo state={uiConfig.state} />}\n        <QueryOperationAction\n          title=\"Show/hide transform help\"\n          icon=\"info-circle\"\n          onClick={toggleHelp}\n          active={showHelp}\n        />\n        <QueryOperationAction title=\"Debug\" disabled={!isOpen} icon=\"bug\" onClick={toggleDebug} active={showDebug} />\n        <QueryOperationAction\n          title=\"Disable/Enable transformation\"\n          icon={disabled ? 'eye-slash' : 'eye'}\n          onClick={() => onDisableToggle(index)}\n          active={disabled}\n        />\n        <QueryOperationAction title=\"Remove\" icon=\"trash-alt\" onClick={() => onRemove(index)} />\n      </HorizontalGroup>\n    );\n  };\n\n  return (\n    <QueryOperationRow\n      id={id}\n      index={index}\n      title={uiConfig.name}\n      draggable\n      actions={renderActions}\n      disabled={disabled}\n    >\n      {showHelp && <OperationRowHelp markdown={prepMarkdown(uiConfig)} />}\n      <TransformationEditor\n        debugMode={showDebug}\n        index={index}\n        data={data}\n        configs={configs}\n        uiConfig={uiConfig}\n        onChange={onChange}\n      />\n    </QueryOperationRow>\n  );\n};\n\nfunction prepMarkdown(uiConfig: TransformerRegistryItem<any>) {\n  let helpMarkdown = uiConfig.help ?? uiConfig.description;\n\n  return `\n${helpMarkdown}\n\nGo the <a href=\"https://grafana.com/docs/grafana/latest/panels/transformations/?utm_source=grafana\" target=\"_blank\" rel=\"noreferrer\">\ntransformation documentation\n</a> for more.\n`;\n}\n","import React from 'react';\n\nimport { DataFrame, DataTransformerConfig, standardTransformersRegistry } from '@grafana/data';\n\nimport { TransformationOperationRow } from './TransformationOperationRow';\nimport { TransformationsEditorTransformation } from './types';\n\ninterface TransformationOperationRowsProps {\n  data: DataFrame[];\n  configs: TransformationsEditorTransformation[];\n  onRemove: (index: number) => void;\n  onChange: (index: number, config: DataTransformerConfig) => void;\n}\n\nexport const TransformationOperationRows: React.FC<TransformationOperationRowsProps> = ({\n  data,\n  onChange,\n  onRemove,\n  configs,\n}) => {\n  return (\n    <>\n      {configs.map((t, i) => {\n        const uiConfig = standardTransformersRegistry.getIfExists(t.transformation.id);\n        if (!uiConfig) {\n          return null;\n        }\n\n        return (\n          <TransformationOperationRow\n            index={i}\n            id={`${t.id}`}\n            key={`${t.id}`}\n            data={data}\n            configs={configs}\n            uiConfig={uiConfig}\n            onRemove={onRemove}\n            onChange={onChange}\n          />\n        );\n      })}\n    </>\n  );\n};\n","import { css } from '@emotion/css';\nimport React, { ChangeEvent } from 'react';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { Unsubscribable } from 'rxjs';\n\nimport {\n  DataFrame,\n  DataTransformerConfig,\n  DocsId,\n  GrafanaTheme2,\n  PanelData,\n  SelectableValue,\n  standardTransformersRegistry,\n  TransformerRegistryItem,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport {\n  Alert,\n  Button,\n  Container,\n  CustomScrollbar,\n  Themeable,\n  VerticalGroup,\n  withTheme,\n  Input,\n  IconButton,\n  useStyles2,\n  Card,\n} from '@grafana/ui';\nimport { LocalStorageValueProvider } from 'app/core/components/LocalStorageValueProvider';\nimport { getDocsLink } from 'app/core/utils/docsLinks';\nimport { PluginStateInfo } from 'app/features/plugins/components/PluginStateInfo';\n\nimport { AppNotificationSeverity } from '../../../../types';\nimport { PanelModel } from '../../state';\nimport { PanelNotSupported } from '../PanelEditor/PanelNotSupported';\n\nimport { TransformationOperationRows } from './TransformationOperationRows';\nimport { TransformationsEditorTransformation } from './types';\n\nconst LOCAL_STORAGE_KEY = 'dashboard.components.TransformationEditor.featureInfoBox.isDismissed';\n\ninterface TransformationsEditorProps extends Themeable {\n  panel: PanelModel;\n}\n\ninterface State {\n  data: DataFrame[];\n  transformations: TransformationsEditorTransformation[];\n  search: string;\n  showPicker?: boolean;\n}\n\nclass UnThemedTransformationsEditor extends React.PureComponent<TransformationsEditorProps, State> {\n  subscription?: Unsubscribable;\n\n  constructor(props: TransformationsEditorProps) {\n    super(props);\n    const transformations = props.panel.transformations || [];\n\n    const ids = this.buildTransformationIds(transformations);\n    this.state = {\n      transformations: transformations.map((t, i) => ({\n        transformation: t,\n        id: ids[i],\n      })),\n      data: [],\n      search: '',\n    };\n  }\n\n  onSearchChange = (event: ChangeEvent<HTMLInputElement>) => {\n    this.setState({ search: event.target.value });\n  };\n\n  onSearchKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n    if (event.key === 'Enter') {\n      const { search } = this.state;\n      if (search) {\n        const lower = search.toLowerCase();\n        const filtered = standardTransformersRegistry.list().filter((t) => {\n          const txt = (t.name + t.description).toLowerCase();\n          return txt.indexOf(lower) >= 0;\n        });\n        if (filtered.length > 0) {\n          this.onTransformationAdd({ value: filtered[0].id });\n        }\n      }\n    } else if (event.keyCode === 27) {\n      // Escape key\n      this.setState({ search: '', showPicker: false });\n      event.stopPropagation(); // don't exit the editor\n    }\n  };\n\n  buildTransformationIds(transformations: DataTransformerConfig[]) {\n    const transformationCounters: Record<string, number> = {};\n    const transformationIds: string[] = [];\n\n    for (let i = 0; i < transformations.length; i++) {\n      const transformation = transformations[i];\n      if (transformationCounters[transformation.id] === undefined) {\n        transformationCounters[transformation.id] = 0;\n      } else {\n        transformationCounters[transformation.id] += 1;\n      }\n      transformationIds.push(`${transformations[i].id}-${transformationCounters[transformations[i].id]}`);\n    }\n    return transformationIds;\n  }\n\n  componentDidMount() {\n    this.subscription = this.props.panel\n      .getQueryRunner()\n      .getData({ withTransforms: false, withFieldConfig: false })\n      .subscribe({\n        next: (panelData: PanelData) => this.setState({ data: panelData.series }),\n      });\n  }\n\n  componentWillUnmount() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  onChange(transformations: TransformationsEditorTransformation[]) {\n    this.setState({ transformations });\n    this.props.panel.setTransformations(transformations.map((t) => t.transformation));\n  }\n\n  // Transformation UIDs are stored in a name-X form. name is NOT unique hence we need to parse the IDs and increase X\n  // for transformations with the same name\n  getTransformationNextId = (name: string) => {\n    const { transformations } = this.state;\n    let nextId = 0;\n    const existingIds = transformations.filter((t) => t.id.startsWith(name)).map((t) => t.id);\n\n    if (existingIds.length !== 0) {\n      nextId = Math.max(...existingIds.map((i) => parseInt(i.match(/\\d+/)![0], 10))) + 1;\n    }\n\n    return `${name}-${nextId}`;\n  };\n\n  onTransformationAdd = (selectable: SelectableValue<string>) => {\n    const { transformations } = this.state;\n\n    const nextId = this.getTransformationNextId(selectable.value!);\n    this.setState({ search: '', showPicker: false });\n    this.onChange([\n      ...transformations,\n      {\n        id: nextId,\n        transformation: {\n          id: selectable.value as string,\n          options: {},\n        },\n      },\n    ]);\n  };\n\n  onTransformationChange = (idx: number, config: DataTransformerConfig) => {\n    const { transformations } = this.state;\n    const next = Array.from(transformations);\n    next[idx].transformation = config;\n    this.onChange(next);\n  };\n\n  onTransformationRemove = (idx: number) => {\n    const { transformations } = this.state;\n    const next = Array.from(transformations);\n    next.splice(idx, 1);\n    this.onChange(next);\n  };\n\n  onDragEnd = (result: DropResult) => {\n    const { transformations } = this.state;\n\n    if (!result || !result.destination) {\n      return;\n    }\n\n    const startIndex = result.source.index;\n    const endIndex = result.destination.index;\n    if (startIndex === endIndex) {\n      return;\n    }\n    const update = Array.from(transformations);\n    const [removed] = update.splice(startIndex, 1);\n    update.splice(endIndex, 0, removed);\n    this.onChange(update);\n  };\n\n  renderTransformationEditors = () => {\n    const { data, transformations } = this.state;\n\n    return (\n      <DragDropContext onDragEnd={this.onDragEnd}>\n        <Droppable droppableId=\"transformations-list\" direction=\"vertical\">\n          {(provided) => {\n            return (\n              <div ref={provided.innerRef} {...provided.droppableProps}>\n                <TransformationOperationRows\n                  configs={transformations}\n                  data={data}\n                  onRemove={this.onTransformationRemove}\n                  onChange={this.onTransformationChange}\n                />\n                {provided.placeholder}\n              </div>\n            );\n          }}\n        </Droppable>\n      </DragDropContext>\n    );\n  };\n\n  renderTransformsPicker() {\n    const { transformations, search } = this.state;\n    let suffix: React.ReactNode = null;\n    let xforms = standardTransformersRegistry.list().sort((a, b) => (a.name > b.name ? 1 : b.name > a.name ? -1 : 0));\n\n    if (search) {\n      const lower = search.toLowerCase();\n      const filtered = xforms.filter((t) => {\n        const txt = (t.name + t.description).toLowerCase();\n        return txt.indexOf(lower) >= 0;\n      });\n\n      suffix = (\n        <>\n          {filtered.length} / {xforms.length} &nbsp;&nbsp;\n          <IconButton\n            name=\"times\"\n            surface=\"header\"\n            onClick={() => {\n              this.setState({ search: '' });\n            }}\n          />\n        </>\n      );\n\n      xforms = filtered;\n    }\n\n    const noTransforms = !transformations?.length;\n    const showPicker = noTransforms || this.state.showPicker;\n\n    if (!suffix && showPicker && !noTransforms) {\n      suffix = (\n        <IconButton\n          name=\"times\"\n          surface=\"header\"\n          onClick={() => {\n            this.setState({ showPicker: false });\n          }}\n        />\n      );\n    }\n\n    return (\n      <>\n        {noTransforms && (\n          <Container grow={1}>\n            <LocalStorageValueProvider<boolean> storageKey={LOCAL_STORAGE_KEY} defaultValue={false}>\n              {(isDismissed, onDismiss) => {\n                if (isDismissed) {\n                  return null;\n                }\n\n                return (\n                  <Alert\n                    title=\"Transformations\"\n                    severity=\"info\"\n                    onRemove={() => {\n                      onDismiss(true);\n                    }}\n                  >\n                    <p>\n                      Transformations allow you to join, calculate, re-order, hide, and rename your query results before\n                      they are visualized. <br />\n                      Many transforms are not suitable if you&apos;re using the Graph visualization, as it currently\n                      only supports time series data. <br />\n                      It can help to switch to the Table visualization to understand what a transformation is doing.{' '}\n                    </p>\n                    <a\n                      href={getDocsLink(DocsId.Transformations)}\n                      className=\"external-link\"\n                      target=\"_blank\"\n                      rel=\"noreferrer\"\n                    >\n                      Read more\n                    </a>\n                  </Alert>\n                );\n              }}\n            </LocalStorageValueProvider>\n          </Container>\n        )}\n        {showPicker ? (\n          <VerticalGroup>\n            <Input\n              aria-label={selectors.components.Transforms.searchInput}\n              value={search ?? ''}\n              autoFocus={!noTransforms}\n              placeholder=\"Add transformation\"\n              onChange={this.onSearchChange}\n              onKeyDown={this.onSearchKeyDown}\n              suffix={suffix}\n            />\n\n            {xforms.map((t) => {\n              return (\n                <TransformationCard\n                  key={t.name}\n                  transform={t}\n                  onClick={() => {\n                    this.onTransformationAdd({ value: t.id });\n                  }}\n                />\n              );\n            })}\n          </VerticalGroup>\n        ) : (\n          <Button\n            icon=\"plus\"\n            variant=\"secondary\"\n            onClick={() => {\n              this.setState({ showPicker: true });\n            }}\n          >\n            Add transformation\n          </Button>\n        )}\n      </>\n    );\n  }\n\n  render() {\n    const {\n      panel: { alert },\n    } = this.props;\n    const { transformations } = this.state;\n\n    const hasTransforms = transformations.length > 0;\n\n    if (!hasTransforms && alert) {\n      return <PanelNotSupported message=\"Transformations can't be used on a panel with existing alerts\" />;\n    }\n\n    return (\n      <CustomScrollbar autoHeightMin=\"100%\">\n        <Container padding=\"md\">\n          <div aria-label={selectors.components.TransformTab.content}>\n            {hasTransforms && alert ? (\n              <Alert\n                severity={AppNotificationSeverity.Error}\n                title=\"Transformations can't be used on a panel with alerts\"\n              />\n            ) : null}\n            {hasTransforms && this.renderTransformationEditors()}\n            {this.renderTransformsPicker()}\n          </div>\n        </Container>\n      </CustomScrollbar>\n    );\n  }\n}\n\ninterface TransformationCardProps {\n  transform: TransformerRegistryItem<any>;\n  onClick: () => void;\n}\n\nfunction TransformationCard({ transform, onClick }: TransformationCardProps) {\n  const styles = useStyles2(getStyles);\n  return (\n    <Card\n      className={styles.card}\n      aria-label={selectors.components.TransformTab.newTransform(transform.name)}\n      onClick={onClick}\n    >\n      <Card.Heading>{transform.name}</Card.Heading>\n      <Card.Meta>{transform.description}</Card.Meta>\n      {transform.state && (\n        <Card.Tags>\n          <PluginStateInfo state={transform.state} />\n        </Card.Tags>\n      )}\n    </Card>\n  );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    card: css`\n      margin: 0;\n      padding: ${theme.spacing(1)};\n    `,\n  };\n};\n\nexport const TransformationsEditor = withTheme(UnThemedTransformationsEditor);\n","import React, { PureComponent } from 'react';\n\nimport { DataQuery, getDataSourceRef } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { getDatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { QueryGroup } from 'app/features/query/components/QueryGroup';\nimport { QueryGroupDataSource, QueryGroupOptions } from 'app/types';\n\nimport { PanelModel } from '../../state';\n\ninterface Props {\n  /** Current panel */\n  panel: PanelModel;\n  /** Added here to make component re-render when queries change from outside */\n  queries: DataQuery[];\n}\n\nexport class PanelEditorQueries extends PureComponent<Props> {\n  constructor(props: Props) {\n    super(props);\n  }\n\n  buildQueryOptions(panel: PanelModel): QueryGroupOptions {\n    const dataSource: QueryGroupDataSource = panel.datasource ?? {\n      default: true,\n    };\n    const datasourceSettings = getDatasourceSrv().getInstanceSettings(dataSource);\n\n    return {\n      cacheTimeout: datasourceSettings?.meta.queryOptions?.cacheTimeout ? panel.cacheTimeout : undefined,\n      dataSource: {\n        default: datasourceSettings?.isDefault,\n        type: datasourceSettings?.type,\n        uid: datasourceSettings?.uid,\n      },\n      queries: panel.targets,\n      maxDataPoints: panel.maxDataPoints,\n      minInterval: panel.interval,\n      timeRange: {\n        from: panel.timeFrom,\n        shift: panel.timeShift,\n        hide: panel.hideTimeOverride,\n      },\n    };\n  }\n\n  async componentDidMount() {\n    const { panel } = this.props;\n\n    // If the panel model has no datasource property load the default data source property and update the persisted model\n    // Because this part of the panel model is not in redux yet we do a forceUpdate.\n    if (!panel.datasource) {\n      const ds = getDatasourceSrv().getInstanceSettings(null);\n      panel.datasource = getDataSourceRef(ds!);\n      this.forceUpdate();\n    }\n  }\n\n  onRunQueries = () => {\n    this.props.panel.refresh();\n  };\n\n  onOpenQueryInspector = () => {\n    locationService.partial({\n      inspect: this.props.panel.id,\n      inspectTab: 'query',\n    });\n  };\n\n  onOptionsChange = (options: QueryGroupOptions) => {\n    const { panel } = this.props;\n\n    panel.updateQueries(options);\n\n    if (options.dataSource.uid !== panel.datasource?.uid) {\n      // trigger queries when changing data source\n      setTimeout(this.onRunQueries, 10);\n    }\n\n    this.forceUpdate();\n  };\n\n  render() {\n    const { panel } = this.props;\n\n    // If no panel data soruce set, wait with render. Will be set to default in componentDidMount\n    if (!panel.datasource) {\n      return null;\n    }\n\n    const options = this.buildQueryOptions(panel);\n\n    return (\n      <QueryGroup\n        options={options}\n        queryRunner={panel.getQueryRunner()}\n        onRunQueries={this.onRunQueries}\n        onOpenQueryInspector={this.onOpenQueryInspector}\n        onOptionsChange={this.onOptionsChange}\n      />\n    );\n  }\n}\n","import { css } from '@emotion/css';\nimport React, { FC, useEffect } from 'react';\nimport { Subscription } from 'rxjs';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { IconName, Tab, TabContent, TabsBar, useForceUpdate, useStyles2 } from '@grafana/ui';\nimport AlertTabIndex from 'app/features/alerting/AlertTabIndex';\nimport { PanelAlertTab } from 'app/features/alerting/unified/PanelAlertTab';\nimport { PanelQueriesChangedEvent, PanelTransformationsChangedEvent } from 'app/types/events';\n\nimport { DashboardModel, PanelModel } from '../../state';\nimport { TransformationsEditor } from '../TransformationsEditor/TransformationsEditor';\n\nimport { PanelEditorQueries } from './PanelEditorQueries';\nimport { PanelEditorTab, PanelEditorTabId } from './types';\n\ninterface PanelEditorTabsProps {\n  panel: PanelModel;\n  dashboard: DashboardModel;\n  tabs: PanelEditorTab[];\n  onChangeTab: (tab: PanelEditorTab) => void;\n}\n\nexport const PanelEditorTabs: FC<PanelEditorTabsProps> = React.memo(({ panel, dashboard, tabs, onChangeTab }) => {\n  const forceUpdate = useForceUpdate();\n  const styles = useStyles2(getStyles);\n\n  useEffect(() => {\n    const eventSubs = new Subscription();\n    eventSubs.add(panel.events.subscribe(PanelQueriesChangedEvent, forceUpdate));\n    eventSubs.add(panel.events.subscribe(PanelTransformationsChangedEvent, forceUpdate));\n    return () => eventSubs.unsubscribe();\n  }, [panel, forceUpdate]);\n\n  const activeTab = tabs.find((item) => item.active)!;\n\n  if (tabs.length === 0) {\n    return null;\n  }\n\n  return (\n    <div className={styles.wrapper}>\n      <TabsBar className={styles.tabBar} hideBorder>\n        {tabs.map((tab) => {\n          if (tab.id === PanelEditorTabId.Alert) {\n            return renderAlertTab(tab, panel, dashboard, onChangeTab);\n          }\n          return (\n            <Tab\n              key={tab.id}\n              label={tab.text}\n              active={tab.active}\n              onChangeTab={() => onChangeTab(tab)}\n              icon={tab.icon as IconName}\n              counter={getCounter(panel, tab)}\n            />\n          );\n        })}\n      </TabsBar>\n      <TabContent className={styles.tabContent}>\n        {activeTab.id === PanelEditorTabId.Query && <PanelEditorQueries panel={panel} queries={panel.targets} />}\n        {activeTab.id === PanelEditorTabId.Alert && <AlertTabIndex panel={panel} dashboard={dashboard} />}\n        {activeTab.id === PanelEditorTabId.Transform && <TransformationsEditor panel={panel} />}\n      </TabContent>\n    </div>\n  );\n});\n\nPanelEditorTabs.displayName = 'PanelEditorTabs';\n\nfunction getCounter(panel: PanelModel, tab: PanelEditorTab) {\n  switch (tab.id) {\n    case PanelEditorTabId.Query:\n      return panel.targets.length;\n    case PanelEditorTabId.Alert:\n      return panel.alert ? 1 : 0;\n    case PanelEditorTabId.Transform:\n      const transformations = panel.getTransformations() ?? [];\n      return transformations.length;\n  }\n\n  return null;\n}\n\nfunction renderAlertTab(\n  tab: PanelEditorTab,\n  panel: PanelModel,\n  dashboard: DashboardModel,\n  onChangeTab: (tab: PanelEditorTab) => void\n) {\n  const alertingDisabled = !config.alertingEnabled && !config.unifiedAlertingEnabled;\n\n  if (alertingDisabled) {\n    return null;\n  }\n\n  if (config.unifiedAlertingEnabled) {\n    return (\n      <PanelAlertTab\n        key={tab.id}\n        label={tab.text}\n        active={tab.active}\n        onChangeTab={() => onChangeTab(tab)}\n        icon={tab.icon as IconName}\n        panel={panel}\n        dashboard={dashboard}\n      />\n    );\n  }\n\n  if (config.alertingEnabled) {\n    return (\n      <Tab\n        key={tab.id}\n        label={tab.text}\n        active={tab.active}\n        onChangeTab={() => onChangeTab(tab)}\n        icon={tab.icon as IconName}\n        counter={getCounter(panel, tab)}\n      />\n    );\n  }\n\n  return null;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    wrapper: css`\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n    `,\n    tabBar: css`\n      padding-left: ${theme.spacing(2)};\n    `,\n    tabContent: css`\n      padding: 0;\n      display: flex;\n      flex-direction: column;\n      flex-grow: 1;\n      min-height: 0;\n      background: ${theme.colors.background.primary};\n      border: 1px solid ${theme.components.panel.borderColor};\n      border-left: none;\n      border-bottom: none;\n      border-top-right-radius: ${theme.shape.borderRadius(1.5)};\n    `,\n  };\n};\n","import memoizeOne from 'memoize-one';\n\nimport { PanelPlugin } from '@grafana/data';\nimport { getConfig } from 'app/core/config';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { getRulesPermissions } from 'app/features/alerting/unified/utils/access-control';\nimport { GRAFANA_RULES_SOURCE_NAME } from 'app/features/alerting/unified/utils/datasource';\n\nimport { PanelEditorTab, PanelEditorTabId } from '../types';\n\nexport const getPanelEditorTabs = memoizeOne((tab?: string, plugin?: PanelPlugin) => {\n  const tabs: PanelEditorTab[] = [];\n\n  if (!plugin) {\n    return tabs;\n  }\n\n  let defaultTab = PanelEditorTabId.Visualize;\n\n  if (plugin.meta.skipDataQuery) {\n    return [];\n  }\n\n  if (!plugin.meta.skipDataQuery) {\n    defaultTab = PanelEditorTabId.Query;\n\n    tabs.push({\n      id: PanelEditorTabId.Query,\n      text: 'Query',\n      icon: 'database',\n      active: false,\n    });\n\n    tabs.push({\n      id: PanelEditorTabId.Transform,\n      text: 'Transform',\n      icon: 'process',\n      active: false,\n    });\n  }\n\n  const { alertingEnabled, unifiedAlertingEnabled } = getConfig();\n  const hasRuleReadPermissions = contextSrv.hasPermission(getRulesPermissions(GRAFANA_RULES_SOURCE_NAME).read);\n  const isAlertingAvailable = alertingEnabled || (unifiedAlertingEnabled && hasRuleReadPermissions);\n\n  const isGraph = plugin.meta.id === 'graph';\n  const isTimeseries = plugin.meta.id === 'timeseries';\n\n  if ((isAlertingAvailable && isGraph) || isTimeseries) {\n    tabs.push({\n      id: PanelEditorTabId.Alert,\n      text: 'Alert',\n      icon: 'bell',\n      active: false,\n    });\n  }\n\n  const activeTab = tabs.find((item) => item.id === (tab || defaultTab)) ?? tabs[0];\n  activeTab.active = true;\n\n  return tabs;\n});\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { Subscription } from 'rxjs';\n\nimport { FieldConfigSource, GrafanaTheme } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { locationService } from '@grafana/runtime';\nimport {\n  HorizontalGroup,\n  InlineSwitch,\n  ModalsController,\n  PageToolbar,\n  RadioButtonGroup,\n  stylesFactory,\n  ToolbarButton,\n} from '@grafana/ui';\nimport { SplitPaneWrapper } from 'app/core/components/SplitPaneWrapper/SplitPaneWrapper';\nimport config from 'app/core/config';\nimport { appEvents } from 'app/core/core';\nimport { SubMenuItems } from 'app/features/dashboard/components/SubMenu/SubMenuItems';\nimport { SaveLibraryPanelModal } from 'app/features/library-panels/components/SaveLibraryPanelModal/SaveLibraryPanelModal';\nimport { PanelModelWithLibraryPanel } from 'app/features/library-panels/types';\nimport { getPanelStateForModel } from 'app/features/panel/state/selectors';\nimport { updateTimeZoneForSession } from 'app/features/profile/state/reducers';\nimport { StoreState } from 'app/types';\nimport { PanelOptionsChangedEvent, ShowModalReactEvent } from 'app/types/events';\n\nimport { notifyApp } from '../../../../core/actions';\nimport { UnlinkModal } from '../../../library-panels/components/UnlinkModal/UnlinkModal';\nimport { isPanelModelLibraryPanel } from '../../../library-panels/guard';\nimport { getLibraryPanelConnectedDashboards } from '../../../library-panels/state/api';\nimport {\n  createPanelLibraryErrorNotification,\n  createPanelLibrarySuccessNotification,\n  saveAndRefreshLibraryPanel,\n} from '../../../library-panels/utils';\nimport { getVariablesByKey } from '../../../variables/state/selectors';\nimport { DashboardPanel } from '../../dashgrid/DashboardPanel';\nimport { DashboardModel, PanelModel } from '../../state';\nimport { DashNavTimeControls } from '../DashNav/DashNavTimeControls';\nimport { SaveDashboardProxy } from '../SaveDashboard/SaveDashboardProxy';\n\nimport { OptionsPane } from './OptionsPane';\nimport { PanelEditorTableView } from './PanelEditorTableView';\nimport { PanelEditorTabs } from './PanelEditorTabs';\nimport { VisualizationButton } from './VisualizationButton';\nimport { discardPanelChanges, initPanelEditor, updatePanelEditorUIState } from './state/actions';\nimport { toggleTableView } from './state/reducers';\nimport { getPanelEditorTabs } from './state/selectors';\nimport { DisplayMode, displayModes, PanelEditorTab } from './types';\nimport { calculatePanelSize } from './utils';\n\ninterface OwnProps {\n  dashboard: DashboardModel;\n  sourcePanel: PanelModel;\n  tab?: string;\n}\n\nconst mapStateToProps = (state: StoreState, ownProps: OwnProps) => {\n  const panel = state.panelEditor.getPanel();\n  const panelState = getPanelStateForModel(state, panel);\n\n  return {\n    panel,\n    plugin: panelState?.plugin,\n    instanceState: panelState?.instanceState,\n    initDone: state.panelEditor.initDone,\n    uiState: state.panelEditor.ui,\n    tableViewEnabled: state.panelEditor.tableViewEnabled,\n    variables: getVariablesByKey(ownProps.dashboard.uid, state),\n  };\n};\n\nconst mapDispatchToProps = {\n  initPanelEditor,\n  discardPanelChanges,\n  updatePanelEditorUIState,\n  updateTimeZoneForSession,\n  toggleTableView,\n  notifyApp,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\ntype Props = OwnProps & ConnectedProps<typeof connector>;\n\ninterface State {\n  showSaveLibraryPanelModal?: boolean;\n}\n\nexport class PanelEditorUnconnected extends PureComponent<Props> {\n  private eventSubs?: Subscription;\n\n  state: State = {\n    showSaveLibraryPanelModal: false,\n  };\n\n  componentDidMount() {\n    this.props.initPanelEditor(this.props.sourcePanel, this.props.dashboard);\n  }\n\n  componentDidUpdate() {\n    const { panel, initDone } = this.props;\n\n    if (initDone && !this.eventSubs) {\n      this.eventSubs = new Subscription();\n      this.eventSubs.add(panel.events.subscribe(PanelOptionsChangedEvent, this.triggerForceUpdate));\n    }\n  }\n\n  componentWillUnmount() {\n    // redux action exitPanelEditor is called on location change from DashboardPrompt\n    this.eventSubs?.unsubscribe();\n  }\n\n  triggerForceUpdate = () => {\n    this.forceUpdate();\n  };\n\n  onBack = () => {\n    locationService.partial({\n      editPanel: null,\n      tab: null,\n      showCategory: null,\n    });\n  };\n\n  onDiscard = () => {\n    this.props.discardPanelChanges();\n    this.onBack();\n  };\n\n  onOpenDashboardSettings = () => {\n    locationService.partial({\n      editview: 'settings',\n    });\n  };\n\n  onSaveDashboard = () => {\n    appEvents.publish(\n      new ShowModalReactEvent({\n        component: SaveDashboardProxy,\n        props: { dashboard: this.props.dashboard },\n      })\n    );\n  };\n\n  onSaveLibraryPanel = async () => {\n    if (!isPanelModelLibraryPanel(this.props.panel)) {\n      // New library panel, no need to display modal\n      return;\n    }\n\n    const connectedDashboards = await getLibraryPanelConnectedDashboards(this.props.panel.libraryPanel.uid);\n    if (\n      connectedDashboards.length === 0 ||\n      (connectedDashboards.length === 1 && connectedDashboards.includes(this.props.dashboard.id))\n    ) {\n      try {\n        await saveAndRefreshLibraryPanel(this.props.panel, this.props.dashboard.meta.folderId!);\n        this.props.notifyApp(createPanelLibrarySuccessNotification('Library panel saved'));\n      } catch (err) {\n        this.props.notifyApp(createPanelLibraryErrorNotification(`Error saving library panel: \"${err.statusText}\"`));\n      }\n      return;\n    }\n\n    this.setState({ showSaveLibraryPanelModal: true });\n  };\n\n  onChangeTab = (tab: PanelEditorTab) => {\n    locationService.partial({\n      tab: tab.id,\n    });\n  };\n\n  onFieldConfigChange = (config: FieldConfigSource) => {\n    // we do not need to trigger force update here as the function call below\n    // fires PanelOptionsChangedEvent which we subscribe to above\n    this.props.panel.updateFieldConfig({\n      ...config,\n    });\n  };\n\n  onPanelOptionsChanged = (options: any) => {\n    // we do not need to trigger force update here as the function call below\n    // fires PanelOptionsChangedEvent which we subscribe to above\n    this.props.panel.updateOptions(options);\n  };\n\n  onPanelConfigChanged = (configKey: keyof PanelModel, value: any) => {\n    this.props.panel.setProperty(configKey, value);\n    this.props.panel.render();\n    this.forceUpdate();\n  };\n\n  onDisplayModeChange = (mode?: DisplayMode) => {\n    const { updatePanelEditorUIState } = this.props;\n    if (this.props.tableViewEnabled) {\n      this.props.toggleTableView();\n    }\n    updatePanelEditorUIState({\n      mode: mode,\n    });\n  };\n\n  onToggleTableView = () => {\n    this.props.toggleTableView();\n  };\n\n  onTogglePanelOptions = () => {\n    const { uiState, updatePanelEditorUIState } = this.props;\n    updatePanelEditorUIState({ isPanelOptionsVisible: !uiState.isPanelOptionsVisible });\n  };\n\n  renderPanel(styles: EditorStyles, isOnlyPanel: boolean) {\n    const { dashboard, panel, uiState, tableViewEnabled } = this.props;\n\n    return (\n      <div className={styles.mainPaneWrapper} key=\"panel\">\n        {this.renderPanelToolbar(styles)}\n        <div className={styles.panelWrapper}>\n          <AutoSizer>\n            {({ width, height }) => {\n              if (width < 3 || height < 3) {\n                return null;\n              }\n\n              // If no tabs limit height so panel does not extend to edge\n              if (isOnlyPanel) {\n                height -= config.theme2.spacing.gridSize * 2;\n              }\n\n              if (tableViewEnabled) {\n                return <PanelEditorTableView width={width} height={height} panel={panel} dashboard={dashboard} />;\n              }\n\n              const panelSize = calculatePanelSize(uiState.mode, width, height, panel);\n\n              return (\n                <div className={styles.centeringContainer} style={{ width, height }}>\n                  <div style={panelSize} data-panelid={panel.id}>\n                    <DashboardPanel\n                      key={panel.key}\n                      stateKey={panel.key}\n                      dashboard={dashboard}\n                      panel={panel}\n                      isEditing={true}\n                      isViewing={false}\n                      lazy={false}\n                      width={panelSize.width}\n                      height={panelSize.height}\n                    />\n                  </div>\n                </div>\n              );\n            }}\n          </AutoSizer>\n        </div>\n      </div>\n    );\n  }\n\n  renderPanelAndEditor(styles: EditorStyles) {\n    const { panel, dashboard, plugin, tab } = this.props;\n    const tabs = getPanelEditorTabs(tab, plugin);\n    const isOnlyPanel = tabs.length === 0;\n    const panelPane = this.renderPanel(styles, isOnlyPanel);\n\n    if (tabs.length === 0) {\n      return panelPane;\n    }\n\n    return [\n      panelPane,\n      <div\n        className={styles.tabsWrapper}\n        aria-label={selectors.components.PanelEditor.DataPane.content}\n        key=\"panel-editor-tabs\"\n      >\n        <PanelEditorTabs\n          key={panel.key}\n          panel={panel}\n          dashboard={dashboard}\n          tabs={tabs}\n          onChangeTab={this.onChangeTab}\n        />\n      </div>,\n    ];\n  }\n\n  renderTemplateVariables(styles: EditorStyles) {\n    const { variables } = this.props;\n\n    if (!variables.length) {\n      return null;\n    }\n\n    return (\n      <div className={styles.variablesWrapper}>\n        <SubMenuItems variables={variables} />\n      </div>\n    );\n  }\n\n  renderPanelToolbar(styles: EditorStyles) {\n    const { dashboard, uiState, variables, updateTimeZoneForSession, panel, tableViewEnabled } = this.props;\n\n    return (\n      <div className={styles.panelToolbar}>\n        <HorizontalGroup justify={variables.length > 0 ? 'space-between' : 'flex-end'} align=\"flex-start\">\n          {this.renderTemplateVariables(styles)}\n          <HorizontalGroup>\n            <InlineSwitch\n              label=\"Table view\"\n              showLabel={true}\n              id=\"table-view\"\n              value={tableViewEnabled}\n              onClick={this.onToggleTableView}\n              aria-label={selectors.components.PanelEditor.toggleTableView}\n            />\n            <RadioButtonGroup value={uiState.mode} options={displayModes} onChange={this.onDisplayModeChange} />\n            <DashNavTimeControls dashboard={dashboard} onChangeTimeZone={updateTimeZoneForSession} />\n            {!uiState.isPanelOptionsVisible && <VisualizationButton panel={panel} />}\n          </HorizontalGroup>\n        </HorizontalGroup>\n      </div>\n    );\n  }\n\n  renderEditorActions() {\n    let editorActions = [\n      <ToolbarButton\n        icon=\"cog\"\n        onClick={this.onOpenDashboardSettings}\n        title=\"Open dashboard settings\"\n        key=\"settings\"\n      />,\n      <ToolbarButton onClick={this.onDiscard} title=\"Undo all changes\" key=\"discard\">\n        Discard\n      </ToolbarButton>,\n      this.props.panel.libraryPanel ? (\n        <ToolbarButton\n          onClick={this.onSaveLibraryPanel}\n          variant=\"primary\"\n          title=\"Apply changes and save library panel\"\n          key=\"save-panel\"\n        >\n          Save library panel\n        </ToolbarButton>\n      ) : (\n        <ToolbarButton onClick={this.onSaveDashboard} title=\"Apply changes and save dashboard\" key=\"save\">\n          Save\n        </ToolbarButton>\n      ),\n      <ToolbarButton\n        onClick={this.onBack}\n        variant=\"primary\"\n        title=\"Apply changes and go back to dashboard\"\n        key=\"apply\"\n        aria-label={selectors.components.PanelEditor.applyButton}\n      >\n        Apply\n      </ToolbarButton>,\n    ];\n\n    if (this.props.panel.libraryPanel) {\n      editorActions.splice(\n        1,\n        0,\n        <ModalsController key=\"unlink-controller\">\n          {({ showModal, hideModal }) => {\n            return (\n              <ToolbarButton\n                onClick={() => {\n                  showModal(UnlinkModal, {\n                    onConfirm: () => {\n                      delete this.props.panel.libraryPanel;\n                      this.props.panel.render();\n                      this.forceUpdate();\n                    },\n                    onDismiss: hideModal,\n                    isOpen: true,\n                  });\n                }}\n                title=\"Disconnects this panel from the library panel so that you can edit it regularly.\"\n                key=\"unlink\"\n              >\n                Unlink\n              </ToolbarButton>\n            );\n          }}\n        </ModalsController>\n      );\n\n      // Remove \"Apply\" button\n      editorActions.pop();\n    }\n\n    return editorActions;\n  }\n\n  renderOptionsPane() {\n    const { plugin, dashboard, panel, instanceState } = this.props;\n\n    if (!plugin) {\n      return <div />;\n    }\n\n    return (\n      <OptionsPane\n        plugin={plugin}\n        dashboard={dashboard}\n        panel={panel}\n        instanceState={instanceState}\n        onFieldConfigsChange={this.onFieldConfigChange}\n        onPanelOptionsChanged={this.onPanelOptionsChanged}\n        onPanelConfigChange={this.onPanelConfigChanged}\n      />\n    );\n  }\n\n  onGoBackToDashboard = () => {\n    locationService.partial({ editPanel: null, tab: null, showCategory: null });\n  };\n\n  onConfirmAndDismissLibarayPanelModel = () => {\n    this.setState({ showSaveLibraryPanelModal: false });\n  };\n\n  render() {\n    const { dashboard, initDone, updatePanelEditorUIState, uiState } = this.props;\n    const styles = getStyles(config.theme, this.props);\n\n    if (!initDone) {\n      return null;\n    }\n\n    return (\n      <div className={styles.wrapper} aria-label={selectors.components.PanelEditor.General.content}>\n        <PageToolbar title={`${dashboard.title} / Edit Panel`} onGoBack={this.onGoBackToDashboard}>\n          {this.renderEditorActions()}\n        </PageToolbar>\n        <div className={styles.verticalSplitPanesWrapper}>\n          <SplitPaneWrapper\n            leftPaneComponents={this.renderPanelAndEditor(styles)}\n            rightPaneComponents={this.renderOptionsPane()}\n            uiState={uiState}\n            updateUiState={updatePanelEditorUIState}\n            rightPaneVisible={uiState.isPanelOptionsVisible}\n          />\n        </div>\n        {this.state.showSaveLibraryPanelModal && (\n          <SaveLibraryPanelModal\n            panel={this.props.panel as PanelModelWithLibraryPanel}\n            folderId={this.props.dashboard.meta.folderId as number}\n            onConfirm={this.onConfirmAndDismissLibarayPanelModel}\n            onDiscard={this.onDiscard}\n            onDismiss={this.onConfirmAndDismissLibarayPanelModel}\n          />\n        )}\n      </div>\n    );\n  }\n}\n\nexport const PanelEditor = connector(PanelEditorUnconnected);\n\n/*\n * Styles\n */\nexport const getStyles = stylesFactory((theme: GrafanaTheme, props: Props) => {\n  const { uiState } = props;\n  const paneSpacing = theme.spacing.md;\n\n  return {\n    wrapper: css`\n      width: 100%;\n      height: 100%;\n      position: fixed;\n      z-index: ${theme.zIndex.sidemenu};\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      background: ${theme.colors.dashboardBg};\n      display: flex;\n      flex-direction: column;\n    `,\n    verticalSplitPanesWrapper: css`\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n      width: 100%;\n      position: relative;\n    `,\n    mainPaneWrapper: css`\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n      width: 100%;\n      padding-right: ${uiState.isPanelOptionsVisible ? 0 : paneSpacing};\n    `,\n    variablesWrapper: css`\n      label: variablesWrapper;\n      display: flex;\n      flex-grow: 1;\n      flex-wrap: wrap;\n    `,\n    panelWrapper: css`\n      flex: 1 1 0;\n      min-height: 0;\n      width: 100%;\n      padding-left: ${paneSpacing};\n    `,\n    tabsWrapper: css`\n      height: 100%;\n      width: 100%;\n    `,\n    panelToolbar: css`\n      display: flex;\n      padding: 0 0 ${paneSpacing} ${paneSpacing};\n      justify-content: space-between;\n      flex-wrap: wrap;\n    `,\n    toolbarLeft: css`\n      padding-left: ${theme.spacing.sm};\n    `,\n    centeringContainer: css`\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      position: relative;\n      flex-direction: column;\n    `,\n  };\n});\n\ntype EditorStyles = ReturnType<typeof getStyles>;\n","import { css } from '@emotion/css';\nimport React, { useEffect, useState } from 'react';\n\nimport { AnnotationQuery, EventBus, GrafanaTheme2 } from '@grafana/data';\nimport { InlineField, InlineFieldRow, InlineSwitch, useStyles2 } from '@grafana/ui';\nimport { LoadingIndicator } from '@grafana/ui/src/components/PanelChrome/LoadingIndicator';\n\nimport { AnnotationQueryFinished, AnnotationQueryStarted } from '../../../../types/events';\nimport { getDashboardQueryRunner } from '../../../query/state/DashboardQueryRunner/DashboardQueryRunner';\n\nexport interface AnnotationPickerProps {\n  events: EventBus;\n  annotation: AnnotationQuery;\n  onEnabledChanged: (annotation: AnnotationQuery) => void;\n}\n\nexport const AnnotationPicker = ({ annotation, events, onEnabledChanged }: AnnotationPickerProps): JSX.Element => {\n  const [loading, setLoading] = useState(false);\n  const styles = useStyles2(getStyles);\n  const onCancel = () => getDashboardQueryRunner().cancel(annotation);\n\n  useEffect(() => {\n    const started = events.getStream(AnnotationQueryStarted).subscribe({\n      next: (event) => {\n        if (event.payload === annotation) {\n          setLoading(true);\n        }\n      },\n    });\n    const stopped = events.getStream(AnnotationQueryFinished).subscribe({\n      next: (event) => {\n        if (event.payload === annotation) {\n          setLoading(false);\n        }\n      },\n    });\n\n    return () => {\n      started.unsubscribe();\n      stopped.unsubscribe();\n    };\n  });\n\n  return (\n    <div key={annotation.name} className={styles.annotation}>\n      <InlineFieldRow>\n        <InlineField label={annotation.name} disabled={loading}>\n          <InlineSwitch value={annotation.enable} onChange={() => onEnabledChanged(annotation)} disabled={loading} />\n        </InlineField>\n        <div className={styles.indicator}>\n          <LoadingIndicator loading={loading} onCancel={onCancel} />\n        </div>\n      </InlineFieldRow>\n    </div>\n  );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n  return {\n    annotation: css`\n      display: inline-block;\n      margin-right: ${theme.spacing(1)};\n\n      .fa-caret-down {\n        font-size: 75%;\n        padding-left: ${theme.spacing(1)};\n      }\n\n      .gf-form-inline .gf-form {\n        margin-bottom: 0;\n      }\n    `,\n    indicator: css`\n      align-self: center;\n      padding: 0 ${theme.spacing(0.5)};\n    `,\n  };\n}\n","import React, { FunctionComponent, useEffect, useState } from 'react';\n\nimport { AnnotationQuery, EventBus } from '@grafana/data';\n\nimport { AnnotationPicker } from './AnnotationPicker';\n\ninterface Props {\n  events: EventBus;\n  annotations: AnnotationQuery[];\n  onAnnotationChanged: (annotation: any) => void;\n}\n\nexport const Annotations: FunctionComponent<Props> = ({ annotations, onAnnotationChanged, events }) => {\n  const [visibleAnnotations, setVisibleAnnotations] = useState<AnnotationQuery[]>([]);\n  useEffect(() => {\n    setVisibleAnnotations(annotations.filter((annotation) => annotation.hide !== true));\n  }, [annotations]);\n\n  if (visibleAnnotations.length === 0) {\n    return null;\n  }\n\n  return (\n    <>\n      {visibleAnnotations.map((annotation) => (\n        <AnnotationPicker\n          events={events}\n          annotation={annotation}\n          onEnabledChanged={onAnnotationChanged}\n          key={annotation.name}\n        />\n      ))}\n    </>\n  );\n};\n","import { css, cx } from '@emotion/css';\nimport React, { useRef, useState, useLayoutEffect } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { sanitize, sanitizeUrl } from '@grafana/data/src/text/sanitize';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Icon, ToolbarButton, Tooltip, useStyles2 } from '@grafana/ui';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\nimport { DashboardSearchHit } from 'app/features/search/types';\n\nimport { getLinkSrv } from '../../../panel/panellinks/link_srv';\nimport { DashboardLink } from '../../state/DashboardModel';\n\ninterface Props {\n  link: DashboardLink;\n  linkInfo: { title: string; href: string };\n  dashboardId: any;\n}\n\nexport const DashboardLinksDashboard: React.FC<Props> = (props) => {\n  const { link, linkInfo } = props;\n  const listRef = useRef<HTMLUListElement>(null);\n  const [dropdownCssClass, setDropdownCssClass] = useState('invisible');\n  const [opened, setOpened] = useState(0);\n  const resolvedLinks = useResolvedLinks(props, opened);\n\n  const buttonStyle = useStyles2(\n    (theme) =>\n      css`\n        color: ${theme.colors.text.primary};\n      `\n  );\n\n  useLayoutEffect(() => {\n    setDropdownCssClass(getDropdownLocationCssClass(listRef.current));\n  }, [resolvedLinks]);\n\n  if (link.asDropdown) {\n    return (\n      <LinkElement link={link} key=\"dashlinks-dropdown\" data-testid={selectors.components.DashboardLinks.dropDown}>\n        <>\n          <ToolbarButton\n            onClick={() => setOpened(Date.now())}\n            className={cx('gf-form-label gf-form-label--dashlink', buttonStyle)}\n            data-placement=\"bottom\"\n            data-toggle=\"dropdown\"\n            aria-expanded={!!opened}\n            aria-controls=\"dropdown-list\"\n            aria-haspopup=\"menu\"\n          >\n            <Icon aria-hidden name=\"bars\" style={{ marginRight: '4px' }} />\n            <span>{linkInfo.title}</span>\n          </ToolbarButton>\n          <ul id=\"dropdown-list\" className={`dropdown-menu ${dropdownCssClass}`} role=\"menu\" ref={listRef}>\n            {resolvedLinks.length > 0 &&\n              resolvedLinks.map((resolvedLink, index) => {\n                return (\n                  <li role=\"none\" key={`dashlinks-dropdown-item-${resolvedLink.id}-${index}`}>\n                    <a\n                      role=\"menuitem\"\n                      href={resolvedLink.url}\n                      target={link.targetBlank ? '_blank' : undefined}\n                      rel=\"noreferrer\"\n                      data-testid={selectors.components.DashboardLinks.link}\n                      aria-label={`${resolvedLink.title} dashboard`}\n                    >\n                      {resolvedLink.title}\n                    </a>\n                  </li>\n                );\n              })}\n          </ul>\n        </>\n      </LinkElement>\n    );\n  }\n\n  return (\n    <>\n      {resolvedLinks.length > 0 &&\n        resolvedLinks.map((resolvedLink, index) => {\n          return (\n            <LinkElement\n              link={link}\n              key={`dashlinks-list-item-${resolvedLink.id}-${index}`}\n              data-testid={selectors.components.DashboardLinks.container}\n            >\n              <a\n                className=\"gf-form-label gf-form-label--dashlink\"\n                href={resolvedLink.url}\n                target={link.targetBlank ? '_blank' : undefined}\n                rel=\"noreferrer\"\n                data-testid={selectors.components.DashboardLinks.link}\n                aria-label={`${resolvedLink.title} dashboard`}\n              >\n                <Icon aria-hidden name=\"apps\" style={{ marginRight: '4px' }} />\n                <span>{resolvedLink.title}</span>\n              </a>\n            </LinkElement>\n          );\n        })}\n    </>\n  );\n};\n\ninterface LinkElementProps {\n  link: DashboardLink;\n  key: string;\n  children: JSX.Element;\n}\n\nconst LinkElement: React.FC<LinkElementProps> = (props) => {\n  const { link, children, ...rest } = props;\n\n  return (\n    <div {...rest} className=\"gf-form\">\n      {link.tooltip && <Tooltip content={link.tooltip}>{children}</Tooltip>}\n      {!link.tooltip && <>{children}</>}\n    </div>\n  );\n};\n\nconst useResolvedLinks = ({ link, dashboardId }: Props, opened: number): ResolvedLinkDTO[] => {\n  const { tags } = link;\n  const result = useAsync(() => searchForTags(tags), [tags, opened]);\n  if (!result.value) {\n    return [];\n  }\n  return resolveLinks(dashboardId, link, result.value);\n};\n\ninterface ResolvedLinkDTO {\n  id: any;\n  url: string;\n  title: string;\n}\n\nexport async function searchForTags(\n  tags: any[],\n  dependencies: { getBackendSrv: typeof getBackendSrv } = { getBackendSrv }\n): Promise<DashboardSearchHit[]> {\n  const limit = 100;\n  const searchHits: DashboardSearchHit[] = await dependencies.getBackendSrv().search({ tag: tags, limit });\n\n  return searchHits;\n}\n\nexport function resolveLinks(\n  dashboardId: any,\n  link: DashboardLink,\n  searchHits: DashboardSearchHit[],\n  dependencies: { getLinkSrv: typeof getLinkSrv; sanitize: typeof sanitize; sanitizeUrl: typeof sanitizeUrl } = {\n    getLinkSrv,\n    sanitize,\n    sanitizeUrl,\n  }\n): ResolvedLinkDTO[] {\n  return searchHits\n    .filter((searchHit) => searchHit.id !== dashboardId)\n    .map((searchHit) => {\n      const id = searchHit.id;\n      const title = dependencies.sanitize(searchHit.title);\n      const resolvedLink = dependencies.getLinkSrv().getLinkUrl({ ...link, url: searchHit.url });\n      const url = dependencies.sanitizeUrl(resolvedLink);\n\n      return { id, title, url };\n    });\n}\n\nfunction getDropdownLocationCssClass(element: HTMLElement | null) {\n  if (!element) {\n    return 'invisible';\n  }\n\n  const wrapperPos = element.parentElement!.getBoundingClientRect();\n  const pos = element.getBoundingClientRect();\n\n  if (pos.width === 0) {\n    return 'invisible';\n  }\n\n  if (wrapperPos.left + pos.width + 10 > window.innerWidth) {\n    return 'pull-left';\n  } else {\n    return 'pull-right';\n  }\n}\n","import React, { FC } from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { sanitizeUrl } from '@grafana/data/src/text/sanitize';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { TimeRangeUpdatedEvent } from '@grafana/runtime';\nimport { Icon, IconName, Tooltip, useForceUpdate } from '@grafana/ui';\n\nimport { getLinkSrv } from '../../../panel/panellinks/link_srv';\nimport { DashboardModel } from '../../state';\nimport { DashboardLink } from '../../state/DashboardModel';\nimport { linkIconMap } from '../LinksSettings/LinkSettingsEdit';\n\nimport { DashboardLinksDashboard } from './DashboardLinksDashboard';\n\nexport interface Props {\n  dashboard: DashboardModel;\n  links: DashboardLink[];\n}\n\nexport const DashboardLinks: FC<Props> = ({ dashboard, links }) => {\n  const forceUpdate = useForceUpdate();\n\n  useEffectOnce(() => {\n    const sub = dashboard.events.subscribe(TimeRangeUpdatedEvent, forceUpdate);\n    return () => sub.unsubscribe();\n  });\n\n  if (!links.length) {\n    return null;\n  }\n\n  return (\n    <>\n      {links.map((link: DashboardLink, index: number) => {\n        const linkInfo = getLinkSrv().getAnchorInfo(link);\n        const key = `${link.title}-$${index}`;\n\n        if (link.type === 'dashboards') {\n          return <DashboardLinksDashboard key={key} link={link} linkInfo={linkInfo} dashboardId={dashboard.id} />;\n        }\n\n        const linkElement = (\n          <a\n            className=\"gf-form-label gf-form-label--dashlink\"\n            href={sanitizeUrl(linkInfo.href)}\n            target={link.targetBlank ? '_blank' : undefined}\n            rel=\"noreferrer\"\n            data-testid={selectors.components.DashboardLinks.link}\n          >\n            <Icon aria-hidden name={linkIconMap[link.icon] as IconName} style={{ marginRight: '4px' }} />\n            <span>{linkInfo.title}</span>\n          </a>\n        );\n\n        return (\n          <div key={key} className=\"gf-form\" data-testid={selectors.components.DashboardLinks.container}>\n            {link.tooltip ? <Tooltip content={linkInfo.tooltip}>{linkElement}</Tooltip> : linkElement}\n          </div>\n        );\n      })}\n    </>\n  );\n};\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport { connect, MapStateToProps } from 'react-redux';\n\nimport { AnnotationQuery } from '@grafana/data';\n\nimport { StoreState } from '../../../../types';\nimport { getSubMenuVariables, getVariablesState } from '../../../variables/state/selectors';\nimport { VariableModel } from '../../../variables/types';\nimport { DashboardModel } from '../../state';\nimport { DashboardLink } from '../../state/DashboardModel';\n\nimport { Annotations } from './Annotations';\nimport { DashboardLinks } from './DashboardLinks';\nimport { SubMenuItems } from './SubMenuItems';\n\ninterface OwnProps {\n  dashboard: DashboardModel;\n  links: DashboardLink[];\n  annotations: AnnotationQuery[];\n}\n\ninterface ConnectedProps {\n  variables: VariableModel[];\n}\n\ninterface DispatchProps {}\n\ntype Props = OwnProps & ConnectedProps & DispatchProps;\n\nclass SubMenuUnConnected extends PureComponent<Props> {\n  onAnnotationStateChanged = (updatedAnnotation: any) => {\n    // we're mutating dashboard state directly here until annotations are in Redux.\n    for (let index = 0; index < this.props.dashboard.annotations.list.length; index++) {\n      const annotation = this.props.dashboard.annotations.list[index];\n      if (annotation.name === updatedAnnotation.name) {\n        annotation.enable = !annotation.enable;\n        break;\n      }\n    }\n    this.props.dashboard.startRefresh();\n    this.forceUpdate();\n  };\n\n  render() {\n    const { dashboard, variables, links, annotations } = this.props;\n\n    if (!dashboard.isSubMenuVisible()) {\n      return null;\n    }\n\n    return (\n      <div className=\"submenu-controls\">\n        <form aria-label=\"Template variables\" className={styles}>\n          <SubMenuItems variables={variables} />\n        </form>\n        <Annotations\n          annotations={annotations}\n          onAnnotationChanged={this.onAnnotationStateChanged}\n          events={dashboard.events}\n        />\n        <div className=\"gf-form gf-form--grow\" />\n        {dashboard && <DashboardLinks dashboard={dashboard} links={links} />}\n        <div className=\"clearfix\" />\n      </div>\n    );\n  }\n}\n\nconst mapStateToProps: MapStateToProps<ConnectedProps, OwnProps, StoreState> = (state, ownProps) => {\n  const { uid } = ownProps.dashboard;\n  const templatingState = getVariablesState(uid, state);\n  return {\n    variables: getSubMenuVariables(uid, templatingState.variables),\n  };\n};\n\nconst styles = css`\n  display: flex;\n  flex-wrap: wrap;\n  display: contents;\n`;\n\nexport const SubMenu = connect(mapStateToProps)(SubMenuUnConnected);\n\nSubMenu.displayName = 'SubMenu';\n","import { css, cx, keyframes } from '@emotion/css';\nimport { chain, cloneDeep, defaults, find, sortBy } from 'lodash';\nimport React, { useMemo, useState } from 'react';\nimport { connect, MapDispatchToProps } from 'react-redux';\nimport tinycolor from 'tinycolor2';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { locationService, reportInteraction } from '@grafana/runtime';\nimport { Icon, IconButton, useStyles2 } from '@grafana/ui';\nimport { CardButton } from 'app/core/components/CardButton';\nimport config from 'app/core/config';\nimport { LS_PANEL_COPY_KEY } from 'app/core/constants';\nimport store from 'app/core/store';\nimport { addPanel } from 'app/features/dashboard/state/reducers';\n\nimport {\n  LibraryPanelsSearch,\n  LibraryPanelsSearchVariant,\n} from '../../../library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch';\nimport { LibraryElementDTO } from '../../../library-panels/types';\nimport { toPanelModelLibraryPanel } from '../../../library-panels/utils';\nimport { DashboardModel, PanelModel } from '../../state';\n\nexport type PanelPluginInfo = { id: any; defaults: { gridPos: { w: any; h: any }; title: any } };\n\nexport interface OwnProps {\n  panel: PanelModel;\n  dashboard: DashboardModel;\n}\n\nexport interface DispatchProps {\n  addPanel: typeof addPanel;\n}\n\nexport type Props = OwnProps & DispatchProps;\n\nconst getCopiedPanelPlugins = () => {\n  const panels = chain(config.panels)\n    .filter({ hideFromList: false })\n    .map((item) => item)\n    .value();\n  const copiedPanels = [];\n\n  const copiedPanelJson = store.get(LS_PANEL_COPY_KEY);\n  if (copiedPanelJson) {\n    const copiedPanel = JSON.parse(copiedPanelJson);\n    const pluginInfo: any = find(panels, { id: copiedPanel.type });\n    if (pluginInfo) {\n      const pluginCopy = cloneDeep(pluginInfo);\n      pluginCopy.name = copiedPanel.title;\n      pluginCopy.sort = -1;\n      pluginCopy.defaults = copiedPanel;\n      copiedPanels.push(pluginCopy);\n    }\n  }\n\n  return sortBy(copiedPanels, 'sort');\n};\n\nexport const AddPanelWidgetUnconnected: React.FC<Props> = ({ panel, dashboard }) => {\n  const [addPanelView, setAddPanelView] = useState(false);\n\n  const onCancelAddPanel = (evt: React.MouseEvent<HTMLButtonElement>) => {\n    evt.preventDefault();\n    dashboard.removePanel(panel);\n  };\n\n  const onBack = () => {\n    setAddPanelView(false);\n  };\n\n  const onCreateNewPanel = () => {\n    const { gridPos } = panel;\n\n    const newPanel: Partial<PanelModel> = {\n      type: 'timeseries',\n      title: 'Panel Title',\n      gridPos: { x: gridPos.x, y: gridPos.y, w: gridPos.w, h: gridPos.h },\n    };\n\n    dashboard.addPanel(newPanel);\n    dashboard.removePanel(panel);\n\n    locationService.partial({ editPanel: newPanel.id });\n  };\n\n  const onPasteCopiedPanel = (panelPluginInfo: PanelPluginInfo) => {\n    const { gridPos } = panel;\n\n    const newPanel: any = {\n      type: panelPluginInfo.id,\n      title: 'Panel Title',\n      gridPos: {\n        x: gridPos.x,\n        y: gridPos.y,\n        w: panelPluginInfo.defaults.gridPos.w,\n        h: panelPluginInfo.defaults.gridPos.h,\n      },\n    };\n\n    // apply panel template / defaults\n    if (panelPluginInfo.defaults) {\n      defaults(newPanel, panelPluginInfo.defaults);\n      newPanel.title = panelPluginInfo.defaults.title;\n      store.delete(LS_PANEL_COPY_KEY);\n    }\n\n    dashboard.addPanel(newPanel);\n    dashboard.removePanel(panel);\n  };\n\n  const onAddLibraryPanel = (panelInfo: LibraryElementDTO) => {\n    const { gridPos } = panel;\n\n    const newPanel: PanelModel = {\n      ...panelInfo.model,\n      gridPos,\n      libraryPanel: toPanelModelLibraryPanel(panelInfo),\n    };\n\n    dashboard.addPanel(newPanel);\n    dashboard.removePanel(panel);\n  };\n\n  const onCreateNewRow = () => {\n    const newRow: any = {\n      type: 'row',\n      title: 'Row title',\n      gridPos: { x: 0, y: 0 },\n    };\n\n    dashboard.addPanel(newRow);\n    dashboard.removePanel(panel);\n  };\n\n  const styles = useStyles2(getStyles);\n  const copiedPanelPlugins = useMemo(() => getCopiedPanelPlugins(), []);\n\n  return (\n    <div className={styles.wrapper}>\n      <div className={cx('panel-container', styles.callToAction)}>\n        <AddPanelWidgetHandle onCancel={onCancelAddPanel} onBack={addPanelView ? onBack : undefined} styles={styles}>\n          {addPanelView ? 'Add panel from panel library' : 'Add panel'}\n        </AddPanelWidgetHandle>\n        {addPanelView ? (\n          <LibraryPanelsSearch onClick={onAddLibraryPanel} variant={LibraryPanelsSearchVariant.Tight} showPanelFilter />\n        ) : (\n          <div className={styles.actionsWrapper}>\n            <CardButton\n              icon=\"file-blank\"\n              aria-label={selectors.pages.AddDashboard.addNewPanel}\n              onClick={() => {\n                reportInteraction('Create new panel');\n                onCreateNewPanel();\n              }}\n            >\n              Add a new panel\n            </CardButton>\n            <CardButton\n              icon=\"wrap-text\"\n              aria-label={selectors.pages.AddDashboard.addNewRow}\n              onClick={() => {\n                reportInteraction('Create new row');\n                onCreateNewRow();\n              }}\n            >\n              Add a new row\n            </CardButton>\n            <CardButton\n              icon=\"book-open\"\n              aria-label={selectors.pages.AddDashboard.addNewPanelLibrary}\n              onClick={() => {\n                reportInteraction('Add a panel from the panel library');\n                setAddPanelView(true);\n              }}\n            >\n              Add a panel from the panel library\n            </CardButton>\n            {copiedPanelPlugins.length === 1 && (\n              <CardButton\n                icon=\"clipboard-alt\"\n                aria-label={selectors.pages.AddDashboard.addNewPanelLibrary}\n                onClick={() => {\n                  reportInteraction('Paste panel from clipboard');\n                  onPasteCopiedPanel(copiedPanelPlugins[0]);\n                }}\n              >\n                Paste panel from clipboard\n              </CardButton>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nconst mapDispatchToProps: MapDispatchToProps<DispatchProps, OwnProps> = { addPanel };\n\nexport const AddPanelWidget = connect(undefined, mapDispatchToProps)(AddPanelWidgetUnconnected);\n\ninterface AddPanelWidgetHandleProps {\n  onCancel: (e: React.MouseEvent<HTMLButtonElement>) => void;\n  onBack?: () => void;\n  children?: string;\n  styles: AddPanelStyles;\n}\n\nconst AddPanelWidgetHandle: React.FC<AddPanelWidgetHandleProps> = ({ children, onBack, onCancel, styles }) => {\n  return (\n    <div className={cx(styles.headerRow, 'grid-drag-handle')}>\n      {onBack && (\n        <div className={styles.backButton}>\n          <IconButton aria-label=\"Go back\" name=\"arrow-left\" onClick={onBack} surface=\"header\" size=\"xl\" />\n        </div>\n      )}\n      {!onBack && (\n        <div className={styles.backButton}>\n          <Icon name=\"panel-add\" size=\"md\" />\n        </div>\n      )}\n      {children && <span>{children}</span>}\n      <div className=\"flex-grow-1\" />\n      <IconButton aria-label=\"Close 'Add Panel' widget\" name=\"times\" onClick={onCancel} surface=\"header\" />\n    </div>\n  );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  const pulsate = keyframes`\n    0% {box-shadow: 0 0 0 2px ${theme.colors.background.canvas}, 0 0 0px 4px ${theme.colors.primary.main};}\n    50% {box-shadow: 0 0 0 2px ${theme.components.dashboard.background}, 0 0 0px 4px ${tinycolor(\n    theme.colors.primary.main\n  )\n    .darken(20)\n    .toHexString()};}\n    100% {box-shadow: 0 0 0 2px ${theme.components.dashboard.background}, 0 0 0px 4px  ${theme.colors.primary.main};}\n  `;\n\n  return {\n    // wrapper is used to make sure box-shadow animation isn't cut off in dashboard page\n    wrapper: css`\n      height: 100%;\n      padding-top: ${theme.spacing(0.5)};\n    `,\n    callToAction: css`\n      overflow: hidden;\n      outline: 2px dotted transparent;\n      outline-offset: 2px;\n      box-shadow: 0 0 0 2px black, 0 0 0px 4px #1f60c4;\n      animation: ${pulsate} 2s ease infinite;\n    `,\n    actionsWrapper: css`\n      height: 100%;\n      display: grid;\n      grid-template-columns: repeat(2, 1fr);\n      column-gap: ${theme.spacing(1)};\n      row-gap: ${theme.spacing(1)};\n      padding: ${theme.spacing(0, 1, 1, 1)};\n\n      // This is to make the last action full width (if by itself)\n      & > div:nth-child(2n-1):nth-last-of-type(1) {\n        grid-column: span 2;\n      }\n    `,\n    headerRow: css`\n      display: flex;\n      align-items: center;\n      height: 38px;\n      flex-shrink: 0;\n      width: 100%;\n      font-size: ${theme.typography.fontSize};\n      font-weight: ${theme.typography.fontWeightMedium};\n      padding-left: ${theme.spacing(1)};\n      transition: background-color 0.1s ease-in-out;\n      cursor: move;\n\n      &:hover {\n        background: ${theme.colors.background.secondary};\n      }\n    `,\n    backButton: css`\n      display: flex;\n      align-items: center;\n      cursor: pointer;\n      padding-left: ${theme.spacing(0.5)};\n      width: ${theme.spacing(4)};\n    `,\n    noMargin: css`\n      margin: 0;\n    `,\n  };\n};\n\ntype AddPanelStyles = ReturnType<typeof getStyles>;\n","import React, { FC, useCallback, useState } from 'react';\n\nimport { Button, Field, Form, Modal, Input } from '@grafana/ui';\n\nimport { RepeatRowSelect } from '../RepeatRowSelect/RepeatRowSelect';\n\nexport type OnRowOptionsUpdate = (title: string, repeat?: string | null) => void;\n\nexport interface Props {\n  title: string;\n  repeat?: string | null;\n  onUpdate: OnRowOptionsUpdate;\n  onCancel: () => void;\n}\n\nexport const RowOptionsForm: FC<Props> = ({ repeat, title, onUpdate, onCancel }) => {\n  const [newRepeat, setNewRepeat] = useState<string | null | undefined>(repeat);\n  const onChangeRepeat = useCallback((name?: string | null) => setNewRepeat(name), [setNewRepeat]);\n\n  return (\n    <Form\n      defaultValues={{ title }}\n      onSubmit={(formData: { title: string }) => {\n        onUpdate(formData.title, newRepeat);\n      }}\n    >\n      {({ register }) => (\n        <>\n          <Field label=\"Title\">\n            <Input {...register('title')} type=\"text\" />\n          </Field>\n\n          <Field label=\"Repeat for\">\n            <RepeatRowSelect repeat={newRepeat} onChange={onChangeRepeat} />\n          </Field>\n\n          <Modal.ButtonRow>\n            <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n              Cancel\n            </Button>\n            <Button type=\"submit\">Update</Button>\n          </Modal.ButtonRow>\n        </>\n      )}\n    </Form>\n  );\n};\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { Modal, stylesFactory } from '@grafana/ui';\n\nimport { OnRowOptionsUpdate, RowOptionsForm } from './RowOptionsForm';\n\nexport interface RowOptionsModalProps {\n  title: string;\n  repeat?: string | null;\n  onDismiss: () => void;\n  onUpdate: OnRowOptionsUpdate;\n}\n\nexport const RowOptionsModal: FC<RowOptionsModalProps> = ({ repeat, title, onDismiss, onUpdate }) => {\n  const styles = getStyles();\n  return (\n    <Modal isOpen={true} title=\"Row options\" icon=\"copy\" onDismiss={onDismiss} className={styles.modal}>\n      <RowOptionsForm repeat={repeat} title={title} onCancel={onDismiss} onUpdate={onUpdate} />\n    </Modal>\n  );\n};\n\nconst getStyles = stylesFactory(() => {\n  return {\n    modal: css`\n      label: RowOptionsModal;\n      width: 500px;\n    `,\n  };\n});\n","import React, { FC } from 'react';\n\nimport { Icon, ModalsController } from '@grafana/ui';\n\nimport { OnRowOptionsUpdate } from './RowOptionsForm';\nimport { RowOptionsModal } from './RowOptionsModal';\n\nexport interface RowOptionsButtonProps {\n  title: string;\n  repeat?: string | null;\n  onUpdate: OnRowOptionsUpdate;\n}\n\nexport const RowOptionsButton: FC<RowOptionsButtonProps> = ({ repeat, title, onUpdate }) => {\n  const onUpdateChange = (hideModal: () => void) => (title: string, repeat?: string | null) => {\n    onUpdate(title, repeat);\n    hideModal();\n  };\n\n  return (\n    <ModalsController>\n      {({ showModal, hideModal }) => {\n        return (\n          <a\n            className=\"pointer\"\n            onClick={() => {\n              showModal(RowOptionsModal, { title, repeat, onDismiss: hideModal, onUpdate: onUpdateChange(hideModal) });\n            }}\n          >\n            <Icon name=\"cog\" />\n          </a>\n        );\n      }}\n    </ModalsController>\n  );\n};\n\nRowOptionsButton.displayName = 'RowOptionsButton';\n","import classNames from 'classnames';\nimport React from 'react';\nimport { Unsubscribable } from 'rxjs';\n\nimport { selectors } from '@grafana/e2e-selectors';\nimport { getTemplateSrv, RefreshEvent } from '@grafana/runtime';\nimport { Icon } from '@grafana/ui';\nimport appEvents from 'app/core/app_events';\n\nimport { ShowConfirmModalEvent } from '../../../../types/events';\nimport { DashboardModel } from '../../state/DashboardModel';\nimport { PanelModel } from '../../state/PanelModel';\nimport { RowOptionsButton } from '../RowOptions/RowOptionsButton';\n\nexport interface DashboardRowProps {\n  panel: PanelModel;\n  dashboard: DashboardModel;\n}\n\nexport class DashboardRow extends React.Component<DashboardRowProps, any> {\n  sub?: Unsubscribable;\n  constructor(props: DashboardRowProps) {\n    super(props);\n\n    this.state = {\n      collapsed: this.props.panel.collapsed,\n    };\n  }\n\n  componentDidMount() {\n    this.sub = this.props.dashboard.events.subscribe(RefreshEvent, this.onVariableUpdated);\n  }\n\n  componentWillUnmount() {\n    if (this.sub) {\n      this.sub.unsubscribe();\n    }\n  }\n\n  onVariableUpdated = () => {\n    this.forceUpdate();\n  };\n\n  onToggle = () => {\n    this.props.dashboard.toggleRow(this.props.panel);\n\n    this.setState((prevState: any) => {\n      return { collapsed: !prevState.collapsed };\n    });\n  };\n\n  onUpdate = (title: string, repeat?: string | null) => {\n    this.props.panel['title'] = title;\n    this.props.panel['repeat'] = repeat ?? undefined;\n    this.props.panel.render();\n    this.props.dashboard.processRepeats();\n    this.forceUpdate();\n  };\n\n  onDelete = () => {\n    appEvents.publish(\n      new ShowConfirmModalEvent({\n        title: 'Delete row',\n        text: 'Are you sure you want to remove this row and all its panels?',\n        altActionText: 'Delete row only',\n        icon: 'trash-alt',\n        onConfirm: () => {\n          this.props.dashboard.removeRow(this.props.panel, true);\n        },\n        onAltAction: () => {\n          this.props.dashboard.removeRow(this.props.panel, false);\n        },\n      })\n    );\n  };\n\n  render() {\n    const classes = classNames({\n      'dashboard-row': true,\n      'dashboard-row--collapsed': this.state.collapsed,\n    });\n\n    const title = getTemplateSrv().replace(this.props.panel.title, this.props.panel.scopedVars, 'text');\n    const count = this.props.panel.panels ? this.props.panel.panels.length : 0;\n    const panels = count === 1 ? 'panel' : 'panels';\n    const canEdit = this.props.dashboard.meta.canEdit === true;\n\n    return (\n      <div className={classes}>\n        <a\n          className=\"dashboard-row__title pointer\"\n          data-testid={selectors.components.DashboardRow.title(title)}\n          onClick={this.onToggle}\n        >\n          <Icon name={this.state.collapsed ? 'angle-right' : 'angle-down'} />\n          {title}\n          <span className=\"dashboard-row__panel_count\">\n            ({count} {panels})\n          </span>\n        </a>\n        {canEdit && (\n          <div className=\"dashboard-row__actions\">\n            <RowOptionsButton\n              title={this.props.panel.title}\n              repeat={this.props.panel.repeat}\n              onUpdate={this.onUpdate}\n            />\n            <a className=\"pointer\" onClick={this.onDelete}>\n              <Icon name=\"trash-alt\" />\n            </a>\n          </div>\n        )}\n        {this.state.collapsed === true && (\n          <div className=\"dashboard-row__toggle-target\" onClick={this.onToggle}>\n            &nbsp;\n          </div>\n        )}\n        {canEdit && <div className=\"dashboard-row__drag grid-drag-handle\" />}\n      </div>\n    );\n  }\n}\n","import classNames from 'classnames';\nimport React, { PureComponent, CSSProperties } from 'react';\nimport ReactGridLayout, { ItemCallback } from 'react-grid-layout';\nimport { connect, ConnectedProps } from 'react-redux';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { Subscription } from 'rxjs';\n\nimport { config } from '@grafana/runtime';\nimport { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT } from 'app/core/constants';\nimport { cleanAndRemoveMany } from 'app/features/panel/state/actions';\nimport { DashboardPanelsChangedEvent } from 'app/types/events';\n\nimport { AddPanelWidget } from '../components/AddPanelWidget';\nimport { DashboardRow } from '../components/DashboardRow';\nimport { DashboardModel, PanelModel } from '../state';\nimport { GridPos } from '../state/PanelModel';\n\nimport { DashboardPanel } from './DashboardPanel';\n\nexport interface OwnProps {\n  dashboard: DashboardModel;\n  editPanel: PanelModel | null;\n  viewPanel: PanelModel | null;\n}\n\nexport interface State {\n  isLayoutInitialized: boolean;\n}\n\nconst mapDispatchToProps = {\n  cleanAndRemoveMany,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport type Props = OwnProps & ConnectedProps<typeof connector>;\n\nexport class DashboardGridUnconnected extends PureComponent<Props, State> {\n  private panelMap: { [key: string]: PanelModel } = {};\n  private eventSubs = new Subscription();\n  private windowHeight = 1200;\n  private windowWidth = 1920;\n  private gridWidth = 0;\n  /** Used to keep track of mobile panel layout position */\n  private lastPanelBottom = 0;\n\n  constructor(props: Props) {\n    super(props);\n\n    this.state = {\n      isLayoutInitialized: false,\n    };\n  }\n\n  componentDidMount() {\n    const { dashboard } = this.props;\n    this.eventSubs.add(dashboard.events.subscribe(DashboardPanelsChangedEvent, this.triggerForceUpdate));\n  }\n\n  componentWillUnmount() {\n    this.eventSubs.unsubscribe();\n    this.props.cleanAndRemoveMany(Object.keys(this.panelMap));\n  }\n\n  buildLayout() {\n    const layout = [];\n    this.panelMap = {};\n\n    for (const panel of this.props.dashboard.panels) {\n      if (!panel.key) {\n        panel.key = `panel-${panel.id}-${Date.now()}`;\n      }\n      this.panelMap[panel.key] = panel;\n\n      if (!panel.gridPos) {\n        console.log('panel without gridpos');\n        continue;\n      }\n\n      const panelPos: any = {\n        i: panel.key,\n        x: panel.gridPos.x,\n        y: panel.gridPos.y,\n        w: panel.gridPos.w,\n        h: panel.gridPos.h,\n      };\n\n      if (panel.type === 'row') {\n        panelPos.w = GRID_COLUMN_COUNT;\n        panelPos.h = 1;\n        panelPos.isResizable = false;\n        panelPos.isDraggable = panel.collapsed;\n      }\n\n      layout.push(panelPos);\n    }\n\n    return layout;\n  }\n\n  onLayoutChange = (newLayout: ReactGridLayout.Layout[]) => {\n    for (const newPos of newLayout) {\n      this.panelMap[newPos.i!].updateGridPos(newPos);\n    }\n\n    this.props.dashboard.sortPanelsByGridPos();\n\n    // This is called on grid mount as it can correct invalid initial grid positions\n    if (!this.state.isLayoutInitialized) {\n      this.setState({ isLayoutInitialized: true });\n    }\n  };\n\n  triggerForceUpdate = () => {\n    this.forceUpdate();\n  };\n\n  updateGridPos = (item: ReactGridLayout.Layout, layout: ReactGridLayout.Layout[]) => {\n    this.panelMap[item.i!].updateGridPos(item);\n  };\n\n  onResize: ItemCallback = (layout, oldItem, newItem) => {\n    const panel = this.panelMap[newItem.i!];\n    panel.updateGridPos(newItem);\n    panel.configRev++; // trigger change handler\n  };\n\n  onResizeStop: ItemCallback = (layout, oldItem, newItem) => {\n    this.updateGridPos(newItem, layout);\n  };\n\n  onDragStop: ItemCallback = (layout, oldItem, newItem) => {\n    this.updateGridPos(newItem, layout);\n  };\n\n  getPanelScreenPos(panel: PanelModel, gridWidth: number): { top: number; bottom: number } {\n    let top = 0;\n\n    // mobile layout\n    if (gridWidth < config.theme2.breakpoints.values.md) {\n      // In mobile layout panels are stacked so we just add the panel vertical margin to the last panel bottom position\n      top = this.lastPanelBottom + GRID_CELL_VMARGIN;\n    } else {\n      // For top position we need to add back the vertical margin removed by translateGridHeightToScreenHeight\n      top = translateGridHeightToScreenHeight(panel.gridPos.y) + GRID_CELL_VMARGIN;\n    }\n\n    this.lastPanelBottom = top + translateGridHeightToScreenHeight(panel.gridPos.h);\n\n    return { top, bottom: this.lastPanelBottom };\n  }\n\n  renderPanels(gridWidth: number) {\n    const panelElements = [];\n\n    // Reset last panel bottom\n    this.lastPanelBottom = 0;\n\n    // This is to avoid layout re-flows, accessing window.innerHeight can trigger re-flow\n    // We assume here that if width change height might have changed as well\n    if (this.gridWidth !== gridWidth) {\n      this.windowHeight = window.innerHeight ?? 1000;\n      this.windowWidth = window.innerWidth;\n      this.gridWidth = gridWidth;\n    }\n\n    for (const panel of this.props.dashboard.panels) {\n      const panelClasses = classNames({ 'react-grid-item--fullscreen': panel.isViewing });\n\n      panelElements.push(\n        <GrafanaGridItem\n          key={panel.key}\n          className={panelClasses}\n          data-panelid={panel.id}\n          gridPos={panel.gridPos}\n          gridWidth={gridWidth}\n          windowHeight={this.windowHeight}\n          windowWidth={this.windowWidth}\n          isViewing={panel.isViewing}\n        >\n          {(width: number, height: number) => {\n            return this.renderPanel(panel, width, height);\n          }}\n        </GrafanaGridItem>\n      );\n    }\n\n    return panelElements;\n  }\n\n  renderPanel(panel: PanelModel, width: any, height: any) {\n    if (panel.type === 'row') {\n      return <DashboardRow key={panel.key} panel={panel} dashboard={this.props.dashboard} />;\n    }\n\n    if (panel.type === 'add-panel') {\n      return <AddPanelWidget key={panel.key} panel={panel} dashboard={this.props.dashboard} />;\n    }\n\n    return (\n      <DashboardPanel\n        key={panel.key}\n        stateKey={panel.key}\n        panel={panel}\n        dashboard={this.props.dashboard}\n        isEditing={panel.isEditing}\n        isViewing={panel.isViewing}\n        width={width}\n        height={height}\n      />\n    );\n  }\n\n  render() {\n    const { dashboard } = this.props;\n\n    /**\n     * We have a parent with \"flex: 1 1 0\" we need to reset it to \"flex: 1 1 auto\" to have the AutoSizer\n     * properly working. For more information go here:\n     * https://github.com/bvaughn/react-virtualized/blob/master/docs/usingAutoSizer.md#can-i-use-autosizer-within-a-flex-container\n     */\n    return (\n      <div style={{ flex: '1 1 auto', display: this.props.editPanel ? 'none' : undefined }}>\n        <AutoSizer disableHeight>\n          {({ width }) => {\n            if (width === 0) {\n              return null;\n            }\n\n            const draggable = width <= 769 ? false : dashboard.meta.canEdit;\n\n            /*\n            Disable draggable if mobile device, solving an issue with unintentionally\n            moving panels. https://github.com/grafana/grafana/issues/18497\n            theme.breakpoints.md = 769\n          */\n\n            return (\n              /**\n               * The children is using a width of 100% so we need to guarantee that it is wrapped\n               * in an element that has the calculated size given by the AutoSizer. The AutoSizer\n               * has a width of 0 and will let its content overflow its div.\n               */\n              <div style={{ width: `${width}px`, height: '100%' }}>\n                <ReactGridLayout\n                  width={width}\n                  isDraggable={draggable}\n                  isResizable={dashboard.meta.canEdit}\n                  containerPadding={[0, 0]}\n                  useCSSTransforms={false}\n                  margin={[GRID_CELL_VMARGIN, GRID_CELL_VMARGIN]}\n                  cols={GRID_COLUMN_COUNT}\n                  rowHeight={GRID_CELL_HEIGHT}\n                  draggableHandle=\".grid-drag-handle\"\n                  layout={this.buildLayout()}\n                  onDragStop={this.onDragStop}\n                  onResize={this.onResize}\n                  onResizeStop={this.onResizeStop}\n                  onLayoutChange={this.onLayoutChange}\n                >\n                  {this.renderPanels(width)}\n                </ReactGridLayout>\n              </div>\n            );\n          }}\n        </AutoSizer>\n      </div>\n    );\n  }\n}\n\ninterface GrafanaGridItemProps extends Record<string, any> {\n  gridWidth?: number;\n  gridPos?: GridPos;\n  isViewing: string;\n  windowHeight: number;\n  windowWidth: number;\n  children: any;\n}\n\n/**\n * A hacky way to intercept the react-layout-grid item dimensions and pass them to DashboardPanel\n */\nconst GrafanaGridItem = React.forwardRef<HTMLDivElement, GrafanaGridItemProps>((props, ref) => {\n  const theme = config.theme2;\n  let width = 100;\n  let height = 100;\n\n  const { gridWidth, gridPos, isViewing, windowHeight, windowWidth, ...divProps } = props;\n  const style: CSSProperties = props.style ?? {};\n\n  if (isViewing) {\n    // In fullscreen view mode a single panel take up full width & 85% height\n    width = gridWidth!;\n    height = windowHeight * 0.85;\n    style.height = height;\n    style.width = '100%';\n  } else if (windowWidth < theme.breakpoints.values.md) {\n    // Mobile layout is a bit different, every panel take up full width\n    width = props.gridWidth!;\n    height = translateGridHeightToScreenHeight(gridPos!.h);\n    style.height = height;\n    style.width = '100%';\n  } else {\n    // Normal grid layout. The grid framework passes width and height directly to children as style props.\n    width = parseFloat(props.style.width);\n    height = parseFloat(props.style.height);\n  }\n\n  // props.children[0] is our main children. RGL adds the drag handle at props.children[1]\n  return (\n    <div {...divProps} ref={ref}>\n      {/* Pass width and height to children as render props */}\n      {[props.children[0](width, height), props.children.slice(1)]}\n    </div>\n  );\n});\n\n/**\n * This translates grid height dimensions to real pixels\n */\nfunction translateGridHeightToScreenHeight(gridHeight: number): number {\n  return gridHeight * (GRID_CELL_HEIGHT + GRID_CELL_VMARGIN) - GRID_CELL_VMARGIN;\n}\n\nGrafanaGridItem.displayName = 'GridItemWithDimensions';\n\nexport const DashboardGrid = connector(DashboardGridUnconnected);\n","import { css } from '@emotion/css';\nimport classnames from 'classnames';\nimport React, { PureComponent } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\n\nimport { GrafanaTheme2, TimeRange } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { locationService } from '@grafana/runtime';\nimport { CustomScrollbar, stylesFactory, Themeable2, withTheme2 } from '@grafana/ui';\nimport { notifyApp } from 'app/core/actions';\nimport { Branding } from 'app/core/components/Branding/Branding';\nimport { createErrorNotification } from 'app/core/copy/appNotification';\nimport { getKioskMode } from 'app/core/navigation/kiosk';\nimport { GrafanaRouteComponentProps } from 'app/core/navigation/types';\nimport { PanelModel } from 'app/features/dashboard/state';\nimport { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher';\nimport { KioskMode, StoreState } from 'app/types';\nimport { PanelEditEnteredEvent, PanelEditExitedEvent } from 'app/types/events';\n\nimport { cancelVariables, templateVarsChangedInUrl } from '../../variables/state/actions';\nimport { findTemplateVarChanges } from '../../variables/utils';\nimport { DashNav } from '../components/DashNav';\nimport { DashboardFailed } from '../components/DashboardLoading/DashboardFailed';\nimport { DashboardLoading } from '../components/DashboardLoading/DashboardLoading';\nimport { DashboardPrompt } from '../components/DashboardPrompt/DashboardPrompt';\nimport { DashboardSettings } from '../components/DashboardSettings';\nimport { PanelInspector } from '../components/Inspector/PanelInspector';\nimport { PanelEditor } from '../components/PanelEditor/PanelEditor';\nimport { SubMenu } from '../components/SubMenu/SubMenu';\nimport { DashboardGrid } from '../dashgrid/DashboardGrid';\nimport { liveTimer } from '../dashgrid/liveTimer';\nimport { getTimeSrv } from '../services/TimeSrv';\nimport { cleanUpDashboardAndVariables } from '../state/actions';\nimport { initDashboard } from '../state/initDashboard';\n\nexport interface DashboardPageRouteParams {\n  uid?: string;\n  type?: string;\n  slug?: string;\n}\n\ntype DashboardPageRouteSearchParams = {\n  tab?: string;\n  folderId?: string;\n  editPanel?: string;\n  viewPanel?: string;\n  editview?: string;\n  inspect?: string;\n  from?: string;\n  to?: string;\n  refresh?: string;\n};\n\nexport const mapStateToProps = (state: StoreState) => ({\n  initPhase: state.dashboard.initPhase,\n  initError: state.dashboard.initError,\n  dashboard: state.dashboard.getModel(),\n});\n\nconst mapDispatchToProps = {\n  initDashboard,\n  cleanUpDashboardAndVariables,\n  notifyApp,\n  cancelVariables,\n  templateVarsChangedInUrl,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport type Props = Themeable2 &\n  GrafanaRouteComponentProps<DashboardPageRouteParams, DashboardPageRouteSearchParams> &\n  ConnectedProps<typeof connector>;\n\nexport interface State {\n  editPanel: PanelModel | null;\n  viewPanel: PanelModel | null;\n  updateScrollTop?: number;\n  rememberScrollTop: number;\n  showLoadingState: boolean;\n  panelNotFound: boolean;\n  editPanelAccessDenied: boolean;\n  scrollElement?: HTMLDivElement;\n}\n\nexport class UnthemedDashboardPage extends PureComponent<Props, State> {\n  private forceRouteReloadCounter = 0;\n  state: State = this.getCleanState();\n\n  getCleanState(): State {\n    return {\n      editPanel: null,\n      viewPanel: null,\n      showLoadingState: false,\n      rememberScrollTop: 0,\n      panelNotFound: false,\n      editPanelAccessDenied: false,\n    };\n  }\n\n  componentDidMount() {\n    this.initDashboard();\n    this.forceRouteReloadCounter = (this.props.history.location.state as any)?.routeReloadCounter || 0;\n  }\n\n  componentWillUnmount() {\n    this.closeDashboard();\n  }\n\n  closeDashboard() {\n    this.props.cleanUpDashboardAndVariables();\n    this.setState(this.getCleanState());\n  }\n\n  initDashboard() {\n    const { dashboard, match, queryParams } = this.props;\n\n    if (dashboard) {\n      this.closeDashboard();\n    }\n\n    this.props.initDashboard({\n      urlSlug: match.params.slug,\n      urlUid: match.params.uid,\n      urlType: match.params.type,\n      urlFolderId: queryParams.folderId,\n      routeName: this.props.route.routeName,\n      fixUrl: true,\n    });\n\n    // small delay to start live updates\n    setTimeout(this.updateLiveTimer, 250);\n  }\n\n  componentDidUpdate(prevProps: Props, prevState: State) {\n    const { dashboard, match, templateVarsChangedInUrl } = this.props;\n    const routeReloadCounter = (this.props.history.location.state as any)?.routeReloadCounter;\n\n    if (!dashboard) {\n      return;\n    }\n\n    // if we just got dashboard update title\n    if (prevProps.dashboard !== dashboard) {\n      document.title = dashboard.title + ' - ' + Branding.AppTitle;\n    }\n\n    if (\n      prevProps.match.params.uid !== match.params.uid ||\n      (routeReloadCounter !== undefined && this.forceRouteReloadCounter !== routeReloadCounter)\n    ) {\n      this.initDashboard();\n      this.forceRouteReloadCounter = routeReloadCounter;\n      return;\n    }\n\n    if (prevProps.location.search !== this.props.location.search) {\n      const prevUrlParams = prevProps.queryParams;\n      const urlParams = this.props.queryParams;\n\n      if (urlParams?.from !== prevUrlParams?.from || urlParams?.to !== prevUrlParams?.to) {\n        getTimeSrv().updateTimeRangeFromUrl();\n        this.updateLiveTimer();\n      }\n\n      if (!prevUrlParams?.refresh && urlParams?.refresh) {\n        getTimeSrv().setAutoRefresh(urlParams.refresh);\n      }\n\n      const templateVarChanges = findTemplateVarChanges(this.props.queryParams, prevProps.queryParams);\n\n      if (templateVarChanges) {\n        templateVarsChangedInUrl(dashboard.uid, templateVarChanges);\n      }\n    }\n\n    // entering edit mode\n    if (this.state.editPanel && !prevState.editPanel) {\n      dashboardWatcher.setEditingState(true);\n\n      // Some panels need to be notified when entering edit mode\n      this.props.dashboard?.events.publish(new PanelEditEnteredEvent(this.state.editPanel.id));\n    }\n\n    // leaving edit mode\n    if (!this.state.editPanel && prevState.editPanel) {\n      dashboardWatcher.setEditingState(false);\n\n      // Some panels need kicked when leaving edit mode\n      this.props.dashboard?.events.publish(new PanelEditExitedEvent(prevState.editPanel.id));\n    }\n\n    if (this.state.editPanelAccessDenied) {\n      this.props.notifyApp(createErrorNotification('Permission to edit panel denied'));\n      locationService.partial({ editPanel: null });\n    }\n\n    if (this.state.panelNotFound) {\n      this.props.notifyApp(createErrorNotification(`Panel not found`));\n      locationService.partial({ editPanel: null, viewPanel: null });\n    }\n  }\n\n  updateLiveTimer = () => {\n    let tr: TimeRange | undefined = undefined;\n    if (this.props.dashboard?.liveNow) {\n      tr = getTimeSrv().timeRange();\n    }\n    liveTimer.setLiveTimeRange(tr);\n  };\n\n  static getDerivedStateFromProps(props: Props, state: State) {\n    const { dashboard, queryParams } = props;\n\n    const urlEditPanelId = queryParams.editPanel;\n    const urlViewPanelId = queryParams.viewPanel;\n\n    if (!dashboard) {\n      return state;\n    }\n\n    // Entering edit mode\n    if (!state.editPanel && urlEditPanelId) {\n      const panel = dashboard.getPanelByUrlId(urlEditPanelId);\n      if (!panel) {\n        return { ...state, panelNotFound: true };\n      }\n\n      if (dashboard.canEditPanel(panel)) {\n        return { ...state, editPanel: panel, rememberScrollTop: state.scrollElement?.scrollTop };\n      } else {\n        return { ...state, editPanelAccessDenied: true };\n      }\n    }\n    // Leaving edit mode\n    else if (state.editPanel && !urlEditPanelId) {\n      return { ...state, editPanel: null, updateScrollTop: state.rememberScrollTop };\n    }\n\n    // Entering view mode\n    if (!state.viewPanel && urlViewPanelId) {\n      const panel = dashboard.getPanelByUrlId(urlViewPanelId);\n      if (!panel) {\n        return { ...state, panelNotFound: urlEditPanelId };\n      }\n\n      // This mutable state feels wrong to have in getDerivedStateFromProps\n      // Should move this state out of dashboard in the future\n      dashboard.initViewPanel(panel);\n\n      return { ...state, viewPanel: panel, rememberScrollTop: state.scrollElement?.scrollTop, updateScrollTop: 0 };\n    }\n    // Leaving view mode\n    else if (state.viewPanel && !urlViewPanelId) {\n      // This mutable state feels wrong to have in getDerivedStateFromProps\n      // Should move this state out of dashboard in the future\n      dashboard.exitViewPanel(state.viewPanel);\n\n      return { ...state, viewPanel: null, updateScrollTop: state.rememberScrollTop };\n    }\n\n    // if we removed url edit state, clear any panel not found state\n    if (state.panelNotFound || (state.editPanelAccessDenied && !urlEditPanelId)) {\n      return { ...state, panelNotFound: false, editPanelAccessDenied: false };\n    }\n\n    return state;\n  }\n\n  onAddPanel = () => {\n    const { dashboard } = this.props;\n\n    if (!dashboard) {\n      return;\n    }\n\n    // Return if the \"Add panel\" exists already\n    if (dashboard.panels.length > 0 && dashboard.panels[0].type === 'add-panel') {\n      return;\n    }\n\n    dashboard.addPanel({\n      type: 'add-panel',\n      gridPos: { x: 0, y: 0, w: 12, h: 8 },\n      title: 'Panel Title',\n    });\n\n    // scroll to top after adding panel\n    this.setState({ updateScrollTop: 0 });\n  };\n\n  setScrollRef = (scrollElement: HTMLDivElement): void => {\n    this.setState({ scrollElement });\n  };\n\n  getInspectPanel() {\n    const { dashboard, queryParams } = this.props;\n\n    const inspectPanelId = queryParams.inspect;\n\n    if (!dashboard || !inspectPanelId) {\n      return null;\n    }\n\n    const inspectPanel = dashboard.getPanelById(parseInt(inspectPanelId, 10));\n\n    // cannot inspect panels plugin is not already loaded\n    if (!inspectPanel) {\n      return null;\n    }\n\n    return inspectPanel;\n  }\n\n  render() {\n    const { dashboard, initError, queryParams, theme } = this.props;\n    const { editPanel, viewPanel, updateScrollTop } = this.state;\n    const kioskMode = getKioskMode();\n    const styles = getStyles(theme, kioskMode);\n\n    if (!dashboard) {\n      return <DashboardLoading initPhase={this.props.initPhase} />;\n    }\n\n    const inspectPanel = this.getInspectPanel();\n    const containerClassNames = classnames(styles.dashboardContainer, {\n      'panel-in-fullscreen': viewPanel,\n    });\n    const showSubMenu = !editPanel && kioskMode === KioskMode.Off && !this.props.queryParams.editview;\n\n    return (\n      <div className={containerClassNames}>\n        {kioskMode !== KioskMode.Full && (\n          <header data-testid={selectors.pages.Dashboard.DashNav.navV2}>\n            <DashNav\n              dashboard={dashboard}\n              title={dashboard.title}\n              folderTitle={dashboard.meta.folderTitle}\n              isFullscreen={!!viewPanel}\n              onAddPanel={this.onAddPanel}\n              kioskMode={kioskMode}\n              hideTimePicker={dashboard.timepicker.hidden}\n            />\n          </header>\n        )}\n\n        <DashboardPrompt dashboard={dashboard} />\n\n        <div className={styles.dashboardScroll}>\n          <CustomScrollbar\n            autoHeightMin=\"100%\"\n            scrollRefCallback={this.setScrollRef}\n            scrollTop={updateScrollTop}\n            hideHorizontalTrack={true}\n            updateAfterMountMs={500}\n          >\n            <div className={styles.dashboardContent}>\n              {initError && <DashboardFailed />}\n              {showSubMenu && (\n                <section aria-label={selectors.pages.Dashboard.SubMenu.submenu}>\n                  <SubMenu dashboard={dashboard} annotations={dashboard.annotations.list} links={dashboard.links} />\n                </section>\n              )}\n\n              <DashboardGrid dashboard={dashboard} viewPanel={viewPanel} editPanel={editPanel} />\n            </div>\n          </CustomScrollbar>\n        </div>\n\n        {inspectPanel && <PanelInspector dashboard={dashboard} panel={inspectPanel} />}\n        {editPanel && <PanelEditor dashboard={dashboard} sourcePanel={editPanel} tab={this.props.queryParams.tab} />}\n        {queryParams.editview && <DashboardSettings dashboard={dashboard} editview={queryParams.editview} />}\n      </div>\n    );\n  }\n}\n\n/*\n * Styles\n */\nexport const getStyles = stylesFactory((theme: GrafanaTheme2, kioskMode: KioskMode) => {\n  const contentPadding = kioskMode !== KioskMode.Full ? theme.spacing(0, 2, 2) : theme.spacing(2);\n  return {\n    dashboardContainer: css`\n      width: 100%;\n      height: 100%;\n      display: flex;\n      flex: 1 1 0;\n      flex-direction: column;\n      min-height: 0;\n    `,\n    dashboardScroll: css`\n      width: 100%;\n      flex-grow: 1;\n      min-height: 0;\n      display: flex;\n    `,\n    dashboardContent: css`\n      padding: ${contentPadding};\n      flex-basis: 100%;\n      flex-grow: 1;\n    `,\n  };\n});\n\nexport const DashboardPage = withTheme2(UnthemedDashboardPage);\nDashboardPage.displayName = 'DashboardPage';\nexport default connector(DashboardPage);\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDraggable = require(\"react-draggable\");\n\nvar _reactResizable = require(\"react-resizable\");\n\nvar _utils = require(\"./utils\");\n\nvar _calculateUtils = require(\"./calculateUtils\");\n\nvar _ReactGridLayoutPropTypes = require(\"./ReactGridLayoutPropTypes\");\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * An individual item within a ReactGridLayout.\n */\nvar GridItem = /*#__PURE__*/function (_React$Component) {\n  _inherits(GridItem, _React$Component);\n\n  var _super = _createSuper(GridItem);\n\n  function GridItem() {\n    var _this;\n\n    _classCallCheck(this, GridItem);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      resizing: null,\n      dragging: null,\n      className: \"\"\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"elementRef\", /*#__PURE__*/_react.default.createRef());\n\n    _defineProperty(_assertThisInitialized(_this), \"onDragStart\", function (e, _ref) {\n      var node = _ref.node;\n      var _this$props = _this.props,\n          onDragStart = _this$props.onDragStart,\n          transformScale = _this$props.transformScale;\n      if (!onDragStart) return;\n      var newPosition\n      /*: PartialPosition*/\n      = {\n        top: 0,\n        left: 0\n      }; // TODO: this wont work on nested parents\n\n      var offsetParent = node.offsetParent;\n      if (!offsetParent) return;\n      var parentRect = offsetParent.getBoundingClientRect();\n      var clientRect = node.getBoundingClientRect();\n      var cLeft = clientRect.left / transformScale;\n      var pLeft = parentRect.left / transformScale;\n      var cTop = clientRect.top / transformScale;\n      var pTop = parentRect.top / transformScale;\n      newPosition.left = cLeft - pLeft + offsetParent.scrollLeft;\n      newPosition.top = cTop - pTop + offsetParent.scrollTop;\n\n      _this.setState({\n        dragging: newPosition\n      }); // Call callback with this data\n\n\n      var _calcXY = (0, _calculateUtils.calcXY)(_this.getPositionParams(), newPosition.top, newPosition.left, _this.props.w, _this.props.h),\n          x = _calcXY.x,\n          y = _calcXY.y;\n\n      return onDragStart.call(_assertThisInitialized(_this), _this.props.i, x, y, {\n        e: e,\n        node: node,\n        newPosition: newPosition\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDrag\", function (e, _ref2) {\n      var node = _ref2.node,\n          deltaX = _ref2.deltaX,\n          deltaY = _ref2.deltaY;\n      var onDrag = _this.props.onDrag;\n      if (!onDrag) return;\n\n      if (!_this.state.dragging) {\n        throw new Error(\"onDrag called before onDragStart.\");\n      }\n\n      var top = _this.state.dragging.top + deltaY;\n      var left = _this.state.dragging.left + deltaX;\n      var _this$props2 = _this.props,\n          isBounded = _this$props2.isBounded,\n          i = _this$props2.i,\n          w = _this$props2.w,\n          h = _this$props2.h,\n          containerWidth = _this$props2.containerWidth;\n\n      var positionParams = _this.getPositionParams(); // Boundary calculations; keeps items within the grid\n\n\n      if (isBounded) {\n        var offsetParent = node.offsetParent;\n\n        if (offsetParent) {\n          var _this$props3 = _this.props,\n              margin = _this$props3.margin,\n              rowHeight = _this$props3.rowHeight;\n          var bottomBoundary = offsetParent.clientHeight - (0, _calculateUtils.calcGridItemWHPx)(h, rowHeight, margin[1]);\n          top = (0, _calculateUtils.clamp)(top, 0, bottomBoundary);\n          var colWidth = (0, _calculateUtils.calcGridColWidth)(positionParams);\n          var rightBoundary = containerWidth - (0, _calculateUtils.calcGridItemWHPx)(w, colWidth, margin[0]);\n          left = (0, _calculateUtils.clamp)(left, 0, rightBoundary);\n        }\n      }\n\n      var newPosition\n      /*: PartialPosition*/\n      = {\n        top: top,\n        left: left\n      };\n\n      _this.setState({\n        dragging: newPosition\n      }); // Call callback with this data\n\n\n      var _calcXY2 = (0, _calculateUtils.calcXY)(positionParams, top, left, w, h),\n          x = _calcXY2.x,\n          y = _calcXY2.y;\n\n      return onDrag.call(_assertThisInitialized(_this), i, x, y, {\n        e: e,\n        node: node,\n        newPosition: newPosition\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDragStop\", function (e, _ref3) {\n      var node = _ref3.node;\n      var onDragStop = _this.props.onDragStop;\n      if (!onDragStop) return;\n\n      if (!_this.state.dragging) {\n        throw new Error(\"onDragEnd called before onDragStart.\");\n      }\n\n      var _this$props4 = _this.props,\n          w = _this$props4.w,\n          h = _this$props4.h,\n          i = _this$props4.i;\n      var _this$state$dragging = _this.state.dragging,\n          left = _this$state$dragging.left,\n          top = _this$state$dragging.top;\n      var newPosition\n      /*: PartialPosition*/\n      = {\n        top: top,\n        left: left\n      };\n\n      _this.setState({\n        dragging: null\n      });\n\n      var _calcXY3 = (0, _calculateUtils.calcXY)(_this.getPositionParams(), top, left, w, h),\n          x = _calcXY3.x,\n          y = _calcXY3.y;\n\n      return onDragStop.call(_assertThisInitialized(_this), i, x, y, {\n        e: e,\n        node: node,\n        newPosition: newPosition\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onResizeStop\", function (e, callbackData) {\n      _this.onResizeHandler(e, callbackData, \"onResizeStop\");\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onResizeStart\", function (e, callbackData) {\n      _this.onResizeHandler(e, callbackData, \"onResizeStart\");\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onResize\", function (e, callbackData) {\n      _this.onResizeHandler(e, callbackData, \"onResize\");\n    });\n\n    return _this;\n  }\n\n  _createClass(GridItem, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps\n    /*: Props*/\n    , nextState\n    /*: State*/\n    )\n    /*: boolean*/\n    {\n      // We can't deeply compare children. If the developer memoizes them, we can\n      // use this optimization.\n      if (this.props.children !== nextProps.children) return true;\n      if (this.props.droppingPosition !== nextProps.droppingPosition) return true; // TODO memoize these calculations so they don't take so long?\n\n      var oldPosition = (0, _calculateUtils.calcGridItemPosition)(this.getPositionParams(this.props), this.props.x, this.props.y, this.props.w, this.props.h, this.state);\n      var newPosition = (0, _calculateUtils.calcGridItemPosition)(this.getPositionParams(nextProps), nextProps.x, nextProps.y, nextProps.w, nextProps.h, nextState);\n      return !(0, _utils.fastPositionEqual)(oldPosition, newPosition) || this.props.useCSSTransforms !== nextProps.useCSSTransforms;\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.moveDroppingItem({});\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps\n    /*: Props*/\n    ) {\n      this.moveDroppingItem(prevProps);\n    } // When a droppingPosition is present, this means we should fire a move event, as if we had moved\n    // this element by `x, y` pixels.\n\n  }, {\n    key: \"moveDroppingItem\",\n    value: function moveDroppingItem(prevProps\n    /*: Props*/\n    ) {\n      var droppingPosition = this.props.droppingPosition;\n      if (!droppingPosition) return;\n      var node = this.elementRef.current; // Can't find DOM node (are we unmounted?)\n\n      if (!node) return;\n      var prevDroppingPosition = prevProps.droppingPosition || {\n        left: 0,\n        top: 0\n      };\n      var dragging = this.state.dragging;\n      var shouldDrag = dragging && droppingPosition.left !== prevDroppingPosition.left || droppingPosition.top !== prevDroppingPosition.top;\n\n      if (!dragging) {\n        this.onDragStart(droppingPosition.e, {\n          node: node,\n          deltaX: droppingPosition.left,\n          deltaY: droppingPosition.top\n        });\n      } else if (shouldDrag) {\n        var deltaX = droppingPosition.left - dragging.left;\n        var deltaY = droppingPosition.top - dragging.top;\n        this.onDrag(droppingPosition.e, {\n          node: node,\n          deltaX: deltaX,\n          deltaY: deltaY\n        });\n      }\n    }\n  }, {\n    key: \"getPositionParams\",\n    value: function getPositionParams()\n    /*: PositionParams*/\n    {\n      var props\n      /*: Props*/\n      = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n      return {\n        cols: props.cols,\n        containerPadding: props.containerPadding,\n        containerWidth: props.containerWidth,\n        margin: props.margin,\n        maxRows: props.maxRows,\n        rowHeight: props.rowHeight\n      };\n    }\n    /**\n     * This is where we set the grid item's absolute placement. It gets a little tricky because we want to do it\n     * well when server rendering, and the only way to do that properly is to use percentage width/left because\n     * we don't know exactly what the browser viewport is.\n     * Unfortunately, CSS Transforms, which are great for performance, break in this instance because a percentage\n     * left is relative to the item itself, not its container! So we cannot use them on the server rendering pass.\n     *\n     * @param  {Object} pos Position object with width, height, left, top.\n     * @return {Object}     Style object.\n     */\n\n  }, {\n    key: \"createStyle\",\n    value: function createStyle(pos\n    /*: Position*/\n    )\n    /*: { [key: string]: ?string }*/\n    {\n      var _this$props5 = this.props,\n          usePercentages = _this$props5.usePercentages,\n          containerWidth = _this$props5.containerWidth,\n          useCSSTransforms = _this$props5.useCSSTransforms;\n      var style; // CSS Transforms support (default)\n\n      if (useCSSTransforms) {\n        style = (0, _utils.setTransform)(pos);\n      } else {\n        // top,left (slow)\n        style = (0, _utils.setTopLeft)(pos); // This is used for server rendering.\n\n        if (usePercentages) {\n          style.left = (0, _utils.perc)(pos.left / containerWidth);\n          style.width = (0, _utils.perc)(pos.width / containerWidth);\n        }\n      }\n\n      return style;\n    }\n    /**\n     * Mix a Draggable instance into a child.\n     * @param  {Element} child    Child element.\n     * @return {Element}          Child wrapped in Draggable.\n     */\n\n  }, {\n    key: \"mixinDraggable\",\n    value: function mixinDraggable(child\n    /*: ReactElement<any>*/\n    , isDraggable\n    /*: boolean*/\n    )\n    /*: ReactElement<any>*/\n    {\n      return /*#__PURE__*/_react.default.createElement(_reactDraggable.DraggableCore, {\n        disabled: !isDraggable,\n        onStart: this.onDragStart,\n        onDrag: this.onDrag,\n        onStop: this.onDragStop,\n        handle: this.props.handle,\n        cancel: \".react-resizable-handle\" + (this.props.cancel ? \",\" + this.props.cancel : \"\"),\n        scale: this.props.transformScale,\n        nodeRef: this.elementRef\n      }, child);\n    }\n    /**\n     * Mix a Resizable instance into a child.\n     * @param  {Element} child    Child element.\n     * @param  {Object} position  Position object (pixel values)\n     * @return {Element}          Child wrapped in Resizable.\n     */\n\n  }, {\n    key: \"mixinResizable\",\n    value: function mixinResizable(child\n    /*: ReactElement<any>*/\n    , position\n    /*: Position*/\n    , isResizable\n    /*: boolean*/\n    )\n    /*: ReactElement<any>*/\n    {\n      var _this$props6 = this.props,\n          cols = _this$props6.cols,\n          x = _this$props6.x,\n          minW = _this$props6.minW,\n          minH = _this$props6.minH,\n          maxW = _this$props6.maxW,\n          maxH = _this$props6.maxH,\n          transformScale = _this$props6.transformScale,\n          resizeHandles = _this$props6.resizeHandles,\n          resizeHandle = _this$props6.resizeHandle;\n      var positionParams = this.getPositionParams(); // This is the max possible width - doesn't go to infinity because of the width of the window\n\n      var maxWidth = (0, _calculateUtils.calcGridItemPosition)(positionParams, 0, 0, cols - x, 0).width; // Calculate min/max constraints using our min & maxes\n\n      var mins = (0, _calculateUtils.calcGridItemPosition)(positionParams, 0, 0, minW, minH);\n      var maxes = (0, _calculateUtils.calcGridItemPosition)(positionParams, 0, 0, maxW, maxH);\n      var minConstraints = [mins.width, mins.height];\n      var maxConstraints = [Math.min(maxes.width, maxWidth), Math.min(maxes.height, Infinity)];\n      return /*#__PURE__*/_react.default.createElement(_reactResizable.Resizable // These are opts for the resize handle itself\n      , {\n        draggableOpts: {\n          disabled: !isResizable\n        },\n        className: isResizable ? undefined : \"react-resizable-hide\",\n        width: position.width,\n        height: position.height,\n        minConstraints: minConstraints,\n        maxConstraints: maxConstraints,\n        onResizeStop: this.onResizeStop,\n        onResizeStart: this.onResizeStart,\n        onResize: this.onResize,\n        transformScale: transformScale,\n        resizeHandles: resizeHandles,\n        handle: resizeHandle\n      }, child);\n    }\n    /**\n     * onDragStart event handler\n     * @param  {Event}  e             event data\n     * @param  {Object} callbackData  an object with node, delta and position information\n     */\n\n  }, {\n    key: \"onResizeHandler\",\n    value:\n    /**\n     * Wrapper around drag events to provide more useful data.\n     * All drag events call the function with the given handler name,\n     * with the signature (index, x, y).\n     *\n     * @param  {String} handlerName Handler name to wrap.\n     * @return {Function}           Handler function.\n     */\n    function onResizeHandler(e\n    /*: Event*/\n    , _ref4, handlerName\n    /*: string*/\n    )\n    /*: void*/\n    {\n      var node = _ref4.node,\n          size = _ref4.size;\n      var handler = this.props[handlerName];\n      if (!handler) return;\n      var _this$props7 = this.props,\n          cols = _this$props7.cols,\n          x = _this$props7.x,\n          y = _this$props7.y,\n          i = _this$props7.i,\n          maxH = _this$props7.maxH,\n          minH = _this$props7.minH;\n      var _this$props8 = this.props,\n          minW = _this$props8.minW,\n          maxW = _this$props8.maxW; // Get new XY\n\n      var _calcWH = (0, _calculateUtils.calcWH)(this.getPositionParams(), size.width, size.height, x, y),\n          w = _calcWH.w,\n          h = _calcWH.h; // minW should be at least 1 (TODO propTypes validation?)\n\n\n      minW = Math.max(minW, 1); // maxW should be at most (cols - x)\n\n      maxW = Math.min(maxW, cols - x); // Min/max capping\n\n      w = (0, _calculateUtils.clamp)(w, minW, maxW);\n      h = (0, _calculateUtils.clamp)(h, minH, maxH);\n      this.setState({\n        resizing: handlerName === \"onResizeStop\" ? null : size\n      });\n      handler.call(this, i, w, h, {\n        e: e,\n        node: node,\n        size: size\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render()\n    /*: ReactNode*/\n    {\n      var _this$props9 = this.props,\n          x = _this$props9.x,\n          y = _this$props9.y,\n          w = _this$props9.w,\n          h = _this$props9.h,\n          isDraggable = _this$props9.isDraggable,\n          isResizable = _this$props9.isResizable,\n          droppingPosition = _this$props9.droppingPosition,\n          useCSSTransforms = _this$props9.useCSSTransforms;\n      var pos = (0, _calculateUtils.calcGridItemPosition)(this.getPositionParams(), x, y, w, h, this.state);\n\n      var child = _react.default.Children.only(this.props.children); // Create the child element. We clone the existing element but modify its className and style.\n\n\n      var newChild = /*#__PURE__*/_react.default.cloneElement(child, {\n        ref: this.elementRef,\n        className: (0, _clsx.default)(\"react-grid-item\", child.props.className, this.props.className, {\n          static: this.props.static,\n          resizing: Boolean(this.state.resizing),\n          \"react-draggable\": isDraggable,\n          \"react-draggable-dragging\": Boolean(this.state.dragging),\n          dropping: Boolean(droppingPosition),\n          cssTransforms: useCSSTransforms\n        }),\n        // We can set the width and height on the child, but unfortunately we can't set the position.\n        style: _objectSpread(_objectSpread(_objectSpread({}, this.props.style), child.props.style), this.createStyle(pos))\n      }); // Resizable support. This is usually on but the user can toggle it off.\n\n\n      newChild = this.mixinResizable(newChild, pos, isResizable); // Draggable support. This is always on, except for with placeholders.\n\n      newChild = this.mixinDraggable(newChild, isDraggable);\n      return newChild;\n    }\n  }]);\n\n  return GridItem;\n}(_react.default.Component);\n\nexports.default = GridItem;\n\n_defineProperty(GridItem, \"propTypes\", {\n  // Children must be only a single element\n  children: _propTypes.default.element,\n  // General grid attributes\n  cols: _propTypes.default.number.isRequired,\n  containerWidth: _propTypes.default.number.isRequired,\n  rowHeight: _propTypes.default.number.isRequired,\n  margin: _propTypes.default.array.isRequired,\n  maxRows: _propTypes.default.number.isRequired,\n  containerPadding: _propTypes.default.array.isRequired,\n  // These are all in grid units\n  x: _propTypes.default.number.isRequired,\n  y: _propTypes.default.number.isRequired,\n  w: _propTypes.default.number.isRequired,\n  h: _propTypes.default.number.isRequired,\n  // All optional\n  minW: function minW(props\n  /*: Props*/\n  , propName\n  /*: string*/\n  ) {\n    var value = props[propName];\n    if (typeof value !== \"number\") return new Error(\"minWidth not Number\");\n    if (value > props.w || value > props.maxW) return new Error(\"minWidth larger than item width/maxWidth\");\n  },\n  maxW: function maxW(props\n  /*: Props*/\n  , propName\n  /*: string*/\n  ) {\n    var value = props[propName];\n    if (typeof value !== \"number\") return new Error(\"maxWidth not Number\");\n    if (value < props.w || value < props.minW) return new Error(\"maxWidth smaller than item width/minWidth\");\n  },\n  minH: function minH(props\n  /*: Props*/\n  , propName\n  /*: string*/\n  ) {\n    var value = props[propName];\n    if (typeof value !== \"number\") return new Error(\"minHeight not Number\");\n    if (value > props.h || value > props.maxH) return new Error(\"minHeight larger than item height/maxHeight\");\n  },\n  maxH: function maxH(props\n  /*: Props*/\n  , propName\n  /*: string*/\n  ) {\n    var value = props[propName];\n    if (typeof value !== \"number\") return new Error(\"maxHeight not Number\");\n    if (value < props.h || value < props.minH) return new Error(\"maxHeight smaller than item height/minHeight\");\n  },\n  // ID is nice to have for callbacks\n  i: _propTypes.default.string.isRequired,\n  // Resize handle options\n  resizeHandles: _ReactGridLayoutPropTypes.resizeHandleAxesType,\n  resizeHandle: _ReactGridLayoutPropTypes.resizeHandleType,\n  // Functions\n  onDragStop: _propTypes.default.func,\n  onDragStart: _propTypes.default.func,\n  onDrag: _propTypes.default.func,\n  onResizeStop: _propTypes.default.func,\n  onResizeStart: _propTypes.default.func,\n  onResize: _propTypes.default.func,\n  // Flags\n  isDraggable: _propTypes.default.bool.isRequired,\n  isResizable: _propTypes.default.bool.isRequired,\n  isBounded: _propTypes.default.bool.isRequired,\n  static: _propTypes.default.bool,\n  // Use CSS transforms instead of top/left\n  useCSSTransforms: _propTypes.default.bool.isRequired,\n  transformScale: _propTypes.default.number,\n  // Others\n  className: _propTypes.default.string,\n  // Selector for draggable handle\n  handle: _propTypes.default.string,\n  // Selector for draggable cancel (see react-draggable)\n  cancel: _propTypes.default.string,\n  // Current position of a dropping element\n  droppingPosition: _propTypes.default.shape({\n    e: _propTypes.default.object.isRequired,\n    left: _propTypes.default.number.isRequired,\n    top: _propTypes.default.number.isRequired\n  })\n});\n\n_defineProperty(GridItem, \"defaultProps\", {\n  className: \"\",\n  cancel: \"\",\n  handle: \"\",\n  minH: 1,\n  minW: 1,\n  maxH: Infinity,\n  maxW: Infinity,\n  transformScale: 1\n});","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _lodash = _interopRequireDefault(require(\"lodash.isequal\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _utils = require(\"./utils\");\n\nvar _calculateUtils = require(\"./calculateUtils\");\n\nvar _GridItem = _interopRequireDefault(require(\"./GridItem\"));\n\nvar _ReactGridLayoutPropTypes = _interopRequireDefault(require(\"./ReactGridLayoutPropTypes\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// End Types\nvar layoutClassName = \"react-grid-layout\";\nvar isFirefox = false; // Try...catch will protect from navigator not existing (e.g. node) or a bad implementation of navigator\n\ntry {\n  isFirefox = /firefox/i.test(navigator.userAgent);\n} catch (e) {\n  /* Ignore */\n}\n/**\n * A reactive, fluid grid layout with draggable, resizable components.\n */\n\n\nvar ReactGridLayout = /*#__PURE__*/function (_React$Component) {\n  _inherits(ReactGridLayout, _React$Component);\n\n  var _super = _createSuper(ReactGridLayout);\n\n  function ReactGridLayout() {\n    var _this;\n\n    _classCallCheck(this, ReactGridLayout);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      activeDrag: null,\n      layout: (0, _utils.synchronizeLayoutWithChildren)(_this.props.layout, _this.props.children, _this.props.cols, // Legacy support for verticalCompact: false\n      (0, _utils.compactType)(_this.props), _this.props.allowOverlap),\n      mounted: false,\n      oldDragItem: null,\n      oldLayout: null,\n      oldResizeItem: null,\n      droppingDOMNode: null,\n      children: []\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"dragEnterCounter\", 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"onDragStart\", function (i\n    /*: string*/\n    , x\n    /*: number*/\n    , y\n    /*: number*/\n    , _ref) {\n      var e = _ref.e,\n          node = _ref.node;\n      var layout = _this.state.layout;\n      var l = (0, _utils.getLayoutItem)(layout, i);\n      if (!l) return;\n\n      _this.setState({\n        oldDragItem: (0, _utils.cloneLayoutItem)(l),\n        oldLayout: layout\n      });\n\n      return _this.props.onDragStart(layout, l, l, null, e, node);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDrag\", function (i, x, y, _ref2) {\n      var e = _ref2.e,\n          node = _ref2.node;\n      var oldDragItem = _this.state.oldDragItem;\n      var layout = _this.state.layout;\n      var _this$props = _this.props,\n          cols = _this$props.cols,\n          allowOverlap = _this$props.allowOverlap,\n          preventCollision = _this$props.preventCollision;\n      var l = (0, _utils.getLayoutItem)(layout, i);\n      if (!l) return; // Create placeholder (display only)\n\n      var placeholder = {\n        w: l.w,\n        h: l.h,\n        x: l.x,\n        y: l.y,\n        placeholder: true,\n        i: i\n      }; // Move the element to the dragged location.\n\n      var isUserAction = true;\n      layout = (0, _utils.moveElement)(layout, l, x, y, isUserAction, preventCollision, (0, _utils.compactType)(_this.props), cols, allowOverlap);\n\n      _this.props.onDrag(layout, oldDragItem, l, placeholder, e, node);\n\n      _this.setState({\n        layout: allowOverlap ? layout : (0, _utils.compact)(layout, (0, _utils.compactType)(_this.props), cols),\n        activeDrag: placeholder\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDragStop\", function (i, x, y, _ref3) {\n      var e = _ref3.e,\n          node = _ref3.node;\n      if (!_this.state.activeDrag) return;\n      var oldDragItem = _this.state.oldDragItem;\n      var layout = _this.state.layout;\n      var _this$props2 = _this.props,\n          cols = _this$props2.cols,\n          preventCollision = _this$props2.preventCollision,\n          allowOverlap = _this$props2.allowOverlap;\n      var l = (0, _utils.getLayoutItem)(layout, i);\n      if (!l) return; // Move the element here\n\n      var isUserAction = true;\n      layout = (0, _utils.moveElement)(layout, l, x, y, isUserAction, preventCollision, (0, _utils.compactType)(_this.props), cols, allowOverlap);\n\n      _this.props.onDragStop(layout, oldDragItem, l, null, e, node); // Set state\n\n\n      var newLayout = allowOverlap ? layout : (0, _utils.compact)(layout, (0, _utils.compactType)(_this.props), cols);\n      var oldLayout = _this.state.oldLayout;\n\n      _this.setState({\n        activeDrag: null,\n        layout: newLayout,\n        oldDragItem: null,\n        oldLayout: null\n      });\n\n      _this.onLayoutMaybeChanged(newLayout, oldLayout);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onResizeStart\", function (i, w, h, _ref4) {\n      var e = _ref4.e,\n          node = _ref4.node;\n      var layout = _this.state.layout;\n      var l = (0, _utils.getLayoutItem)(layout, i);\n      if (!l) return;\n\n      _this.setState({\n        oldResizeItem: (0, _utils.cloneLayoutItem)(l),\n        oldLayout: _this.state.layout\n      });\n\n      _this.props.onResizeStart(layout, l, l, null, e, node);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onResize\", function (i, w, h, _ref5) {\n      var e = _ref5.e,\n          node = _ref5.node;\n      var _this$state = _this.state,\n          layout = _this$state.layout,\n          oldResizeItem = _this$state.oldResizeItem;\n      var _this$props3 = _this.props,\n          cols = _this$props3.cols,\n          preventCollision = _this$props3.preventCollision,\n          allowOverlap = _this$props3.allowOverlap;\n\n      var _withLayoutItem = (0, _utils.withLayoutItem)(layout, i, function (l) {\n        // Something like quad tree should be used\n        // to find collisions faster\n        var hasCollisions;\n\n        if (preventCollision && !allowOverlap) {\n          var collisions = (0, _utils.getAllCollisions)(layout, _objectSpread(_objectSpread({}, l), {}, {\n            w: w,\n            h: h\n          })).filter(function (layoutItem) {\n            return layoutItem.i !== l.i;\n          });\n          hasCollisions = collisions.length > 0; // If we're colliding, we need adjust the placeholder.\n\n          // If we're colliding, we need adjust the placeholder.\n          if (hasCollisions) {\n            // adjust w && h to maximum allowed space\n            var leastX = Infinity,\n                leastY = Infinity;\n            collisions.forEach(function (layoutItem) {\n              if (layoutItem.x > l.x) leastX = Math.min(leastX, layoutItem.x);\n              if (layoutItem.y > l.y) leastY = Math.min(leastY, layoutItem.y);\n            });\n            if (Number.isFinite(leastX)) l.w = leastX - l.x;\n            if (Number.isFinite(leastY)) l.h = leastY - l.y;\n          }\n        }\n\n        if (!hasCollisions) {\n          // Set new width and height.\n          l.w = w;\n          l.h = h;\n        }\n\n        return l;\n      }),\n          _withLayoutItem2 = _slicedToArray(_withLayoutItem, 2),\n          newLayout = _withLayoutItem2[0],\n          l = _withLayoutItem2[1]; // Shouldn't ever happen, but typechecking makes it necessary\n\n\n      if (!l) return; // Create placeholder element (display only)\n\n      var placeholder = {\n        w: l.w,\n        h: l.h,\n        x: l.x,\n        y: l.y,\n        static: true,\n        i: i\n      };\n\n      _this.props.onResize(newLayout, oldResizeItem, l, placeholder, e, node); // Re-compact the newLayout and set the drag placeholder.\n\n\n      _this.setState({\n        layout: allowOverlap ? newLayout : (0, _utils.compact)(newLayout, (0, _utils.compactType)(_this.props), cols),\n        activeDrag: placeholder\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onResizeStop\", function (i, w, h, _ref6) {\n      var e = _ref6.e,\n          node = _ref6.node;\n      var _this$state2 = _this.state,\n          layout = _this$state2.layout,\n          oldResizeItem = _this$state2.oldResizeItem;\n      var _this$props4 = _this.props,\n          cols = _this$props4.cols,\n          allowOverlap = _this$props4.allowOverlap;\n      var l = (0, _utils.getLayoutItem)(layout, i);\n\n      _this.props.onResizeStop(layout, oldResizeItem, l, null, e, node); // Set state\n\n\n      var newLayout = allowOverlap ? layout : (0, _utils.compact)(layout, (0, _utils.compactType)(_this.props), cols);\n      var oldLayout = _this.state.oldLayout;\n\n      _this.setState({\n        activeDrag: null,\n        layout: newLayout,\n        oldResizeItem: null,\n        oldLayout: null\n      });\n\n      _this.onLayoutMaybeChanged(newLayout, oldLayout);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDragOver\", function (e) {\n      var _e$nativeEvent$target;\n\n      e.preventDefault(); // Prevent any browser native action\n\n      e.stopPropagation(); // we should ignore events from layout's children in Firefox\n      // to avoid unpredictable jumping of a dropping placeholder\n      // FIXME remove this hack\n\n      if (isFirefox && // $FlowIgnore can't figure this out\n      !((_e$nativeEvent$target = e.nativeEvent.target) !== null && _e$nativeEvent$target !== void 0 && _e$nativeEvent$target.classList.contains(layoutClassName))) {\n        return false;\n      }\n\n      var _this$props5 = _this.props,\n          droppingItem = _this$props5.droppingItem,\n          onDropDragOver = _this$props5.onDropDragOver,\n          margin = _this$props5.margin,\n          cols = _this$props5.cols,\n          rowHeight = _this$props5.rowHeight,\n          maxRows = _this$props5.maxRows,\n          width = _this$props5.width,\n          containerPadding = _this$props5.containerPadding,\n          transformScale = _this$props5.transformScale; // Allow user to customize the dropping item or short-circuit the drop based on the results\n      // of the `onDragOver(e: Event)` callback.\n\n      var onDragOverResult = onDropDragOver === null || onDropDragOver === void 0 ? void 0 : onDropDragOver(e);\n\n      if (onDragOverResult === false) {\n        if (_this.state.droppingDOMNode) {\n          _this.removeDroppingPlaceholder();\n        }\n\n        return false;\n      }\n\n      var finalDroppingItem = _objectSpread(_objectSpread({}, droppingItem), onDragOverResult);\n\n      var layout = _this.state.layout; // This is relative to the DOM element that this event fired for.\n\n      var _e$nativeEvent = e.nativeEvent,\n          layerX = _e$nativeEvent.layerX,\n          layerY = _e$nativeEvent.layerY;\n      var droppingPosition = {\n        left: layerX / transformScale,\n        top: layerY / transformScale,\n        e: e\n      };\n\n      if (!_this.state.droppingDOMNode) {\n        var positionParams\n        /*: PositionParams*/\n        = {\n          cols: cols,\n          margin: margin,\n          maxRows: maxRows,\n          rowHeight: rowHeight,\n          containerWidth: width,\n          containerPadding: containerPadding || margin\n        };\n        var calculatedPosition = (0, _calculateUtils.calcXY)(positionParams, layerY, layerX, finalDroppingItem.w, finalDroppingItem.h);\n\n        _this.setState({\n          droppingDOMNode: /*#__PURE__*/React.createElement(\"div\", {\n            key: finalDroppingItem.i\n          }),\n          droppingPosition: droppingPosition,\n          layout: [].concat(_toConsumableArray(layout), [_objectSpread(_objectSpread({}, finalDroppingItem), {}, {\n            x: calculatedPosition.x,\n            y: calculatedPosition.y,\n            static: false,\n            isDraggable: true\n          })])\n        });\n      } else if (_this.state.droppingPosition) {\n        var _this$state$droppingP = _this.state.droppingPosition,\n            left = _this$state$droppingP.left,\n            top = _this$state$droppingP.top;\n        var shouldUpdatePosition = left != layerX || top != layerY;\n\n        if (shouldUpdatePosition) {\n          _this.setState({\n            droppingPosition: droppingPosition\n          });\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"removeDroppingPlaceholder\", function () {\n      var _this$props6 = _this.props,\n          droppingItem = _this$props6.droppingItem,\n          cols = _this$props6.cols;\n      var layout = _this.state.layout;\n      var newLayout = (0, _utils.compact)(layout.filter(function (l) {\n        return l.i !== droppingItem.i;\n      }), (0, _utils.compactType)(_this.props), cols);\n\n      _this.setState({\n        layout: newLayout,\n        droppingDOMNode: null,\n        activeDrag: null,\n        droppingPosition: undefined\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDragLeave\", function (e) {\n      e.preventDefault(); // Prevent any browser native action\n\n      e.stopPropagation();\n      _this.dragEnterCounter--; // onDragLeave can be triggered on each layout's child.\n      // But we know that count of dragEnter and dragLeave events\n      // will be balanced after leaving the layout's container\n      // so we can increase and decrease count of dragEnter and\n      // when it'll be equal to 0 we'll remove the placeholder\n\n      if (_this.dragEnterCounter === 0) {\n        _this.removeDroppingPlaceholder();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDragEnter\", function (e) {\n      e.preventDefault(); // Prevent any browser native action\n\n      e.stopPropagation();\n      _this.dragEnterCounter++;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDrop\", function (e\n    /*: Event*/\n    ) {\n      e.preventDefault(); // Prevent any browser native action\n\n      e.stopPropagation();\n      var droppingItem = _this.props.droppingItem;\n      var layout = _this.state.layout;\n      var item = layout.find(function (l) {\n        return l.i === droppingItem.i;\n      }); // reset dragEnter counter on drop\n\n      _this.dragEnterCounter = 0;\n\n      _this.removeDroppingPlaceholder();\n\n      _this.props.onDrop(layout, item, e);\n    });\n\n    return _this;\n  }\n\n  _createClass(ReactGridLayout, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.setState({\n        mounted: true\n      }); // Possibly call back with layout on mount. This should be done after correcting the layout width\n      // to ensure we don't rerender with the wrong width.\n\n      this.onLayoutMaybeChanged(this.state.layout, this.props.layout);\n    }\n  }, {\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps\n    /*: Props*/\n    , nextState\n    /*: State*/\n    )\n    /*: boolean*/\n    {\n      return (// NOTE: this is almost always unequal. Therefore the only way to get better performance\n        // from SCU is if the user intentionally memoizes children. If they do, and they can\n        // handle changes properly, performance will increase.\n        this.props.children !== nextProps.children || !(0, _utils.fastRGLPropsEqual)(this.props, nextProps, _lodash.default) || this.state.activeDrag !== nextState.activeDrag || this.state.mounted !== nextState.mounted || this.state.droppingPosition !== nextState.droppingPosition\n      );\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps\n    /*: Props*/\n    , prevState\n    /*: State*/\n    ) {\n      if (!this.state.activeDrag) {\n        var newLayout = this.state.layout;\n        var oldLayout = prevState.layout;\n        this.onLayoutMaybeChanged(newLayout, oldLayout);\n      }\n    }\n    /**\n     * Calculates a pixel value for the container.\n     * @return {String} Container height in pixels.\n     */\n\n  }, {\n    key: \"containerHeight\",\n    value: function containerHeight()\n    /*: ?string*/\n    {\n      if (!this.props.autoSize) return;\n      var nbRow = (0, _utils.bottom)(this.state.layout);\n      var containerPaddingY = this.props.containerPadding ? this.props.containerPadding[1] : this.props.margin[1];\n      return nbRow * this.props.rowHeight + (nbRow - 1) * this.props.margin[1] + containerPaddingY * 2 + \"px\";\n    }\n    /**\n     * When dragging starts\n     * @param {String} i Id of the child\n     * @param {Number} x X position of the move\n     * @param {Number} y Y position of the move\n     * @param {Event} e The mousedown event\n     * @param {Element} node The current dragging DOM element\n     */\n\n  }, {\n    key: \"onLayoutMaybeChanged\",\n    value: function onLayoutMaybeChanged(newLayout\n    /*: Layout*/\n    , oldLayout\n    /*: ?Layout*/\n    ) {\n      if (!oldLayout) oldLayout = this.state.layout;\n\n      if (!(0, _lodash.default)(oldLayout, newLayout)) {\n        this.props.onLayoutChange(newLayout);\n      }\n    }\n  }, {\n    key: \"placeholder\",\n    value:\n    /**\n     * Create a placeholder object.\n     * @return {Element} Placeholder div.\n     */\n    function placeholder()\n    /*: ?ReactElement<any>*/\n    {\n      var activeDrag = this.state.activeDrag;\n      if (!activeDrag) return null;\n      var _this$props7 = this.props,\n          width = _this$props7.width,\n          cols = _this$props7.cols,\n          margin = _this$props7.margin,\n          containerPadding = _this$props7.containerPadding,\n          rowHeight = _this$props7.rowHeight,\n          maxRows = _this$props7.maxRows,\n          useCSSTransforms = _this$props7.useCSSTransforms,\n          transformScale = _this$props7.transformScale; // {...this.state.activeDrag} is pretty slow, actually\n\n      return /*#__PURE__*/React.createElement(_GridItem.default, {\n        w: activeDrag.w,\n        h: activeDrag.h,\n        x: activeDrag.x,\n        y: activeDrag.y,\n        i: activeDrag.i,\n        className: \"react-grid-placeholder\",\n        containerWidth: width,\n        cols: cols,\n        margin: margin,\n        containerPadding: containerPadding || margin,\n        maxRows: maxRows,\n        rowHeight: rowHeight,\n        isDraggable: false,\n        isResizable: false,\n        isBounded: false,\n        useCSSTransforms: useCSSTransforms,\n        transformScale: transformScale\n      }, /*#__PURE__*/React.createElement(\"div\", null));\n    }\n    /**\n     * Given a grid item, set its style attributes & surround in a <Draggable>.\n     * @param  {Element} child React element.\n     * @return {Element}       Element wrapped in draggable and properly placed.\n     */\n\n  }, {\n    key: \"processGridItem\",\n    value: function processGridItem(child\n    /*: ReactElement<any>*/\n    , isDroppingItem\n    /*: boolean*/\n    )\n    /*: ?ReactElement<any>*/\n    {\n      if (!child || !child.key) return;\n      var l = (0, _utils.getLayoutItem)(this.state.layout, String(child.key));\n      if (!l) return null;\n      var _this$props8 = this.props,\n          width = _this$props8.width,\n          cols = _this$props8.cols,\n          margin = _this$props8.margin,\n          containerPadding = _this$props8.containerPadding,\n          rowHeight = _this$props8.rowHeight,\n          maxRows = _this$props8.maxRows,\n          isDraggable = _this$props8.isDraggable,\n          isResizable = _this$props8.isResizable,\n          isBounded = _this$props8.isBounded,\n          useCSSTransforms = _this$props8.useCSSTransforms,\n          transformScale = _this$props8.transformScale,\n          draggableCancel = _this$props8.draggableCancel,\n          draggableHandle = _this$props8.draggableHandle,\n          resizeHandles = _this$props8.resizeHandles,\n          resizeHandle = _this$props8.resizeHandle;\n      var _this$state3 = this.state,\n          mounted = _this$state3.mounted,\n          droppingPosition = _this$state3.droppingPosition; // Determine user manipulations possible.\n      // If an item is static, it can't be manipulated by default.\n      // Any properties defined directly on the grid item will take precedence.\n\n      var draggable = typeof l.isDraggable === \"boolean\" ? l.isDraggable : !l.static && isDraggable;\n      var resizable = typeof l.isResizable === \"boolean\" ? l.isResizable : !l.static && isResizable;\n      var resizeHandlesOptions = l.resizeHandles || resizeHandles; // isBounded set on child if set on parent, and child is not explicitly false\n\n      var bounded = draggable && isBounded && l.isBounded !== false;\n      return /*#__PURE__*/React.createElement(_GridItem.default, {\n        containerWidth: width,\n        cols: cols,\n        margin: margin,\n        containerPadding: containerPadding || margin,\n        maxRows: maxRows,\n        rowHeight: rowHeight,\n        cancel: draggableCancel,\n        handle: draggableHandle,\n        onDragStop: this.onDragStop,\n        onDragStart: this.onDragStart,\n        onDrag: this.onDrag,\n        onResizeStart: this.onResizeStart,\n        onResize: this.onResize,\n        onResizeStop: this.onResizeStop,\n        isDraggable: draggable,\n        isResizable: resizable,\n        isBounded: bounded,\n        useCSSTransforms: useCSSTransforms && mounted,\n        usePercentages: !mounted,\n        transformScale: transformScale,\n        w: l.w,\n        h: l.h,\n        x: l.x,\n        y: l.y,\n        i: l.i,\n        minH: l.minH,\n        minW: l.minW,\n        maxH: l.maxH,\n        maxW: l.maxW,\n        static: l.static,\n        droppingPosition: isDroppingItem ? droppingPosition : undefined,\n        resizeHandles: resizeHandlesOptions,\n        resizeHandle: resizeHandle\n      }, child);\n    } // Called while dragging an element. Part of browser native drag/drop API.\n    // Native event target might be the layout itself, or an element within the layout.\n\n  }, {\n    key: \"render\",\n    value: function render()\n    /*: React.Element<\"div\">*/\n    {\n      var _this2 = this;\n\n      var _this$props9 = this.props,\n          className = _this$props9.className,\n          style = _this$props9.style,\n          isDroppable = _this$props9.isDroppable,\n          innerRef = _this$props9.innerRef;\n      var mergedClassName = (0, _clsx.default)(layoutClassName, className);\n\n      var mergedStyle = _objectSpread({\n        height: this.containerHeight()\n      }, style);\n\n      return /*#__PURE__*/React.createElement(\"div\", {\n        ref: innerRef,\n        className: mergedClassName,\n        style: mergedStyle,\n        onDrop: isDroppable ? this.onDrop : _utils.noop,\n        onDragLeave: isDroppable ? this.onDragLeave : _utils.noop,\n        onDragEnter: isDroppable ? this.onDragEnter : _utils.noop,\n        onDragOver: isDroppable ? this.onDragOver : _utils.noop\n      }, React.Children.map(this.props.children, function (child) {\n        return _this2.processGridItem(child);\n      }), isDroppable && this.state.droppingDOMNode && this.processGridItem(this.state.droppingDOMNode, true), this.placeholder());\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(nextProps\n    /*: Props*/\n    , prevState\n    /*: State*/\n    )\n    /*: $Shape<State> | null*/\n    {\n      var newLayoutBase;\n\n      if (prevState.activeDrag) {\n        return null;\n      } // Legacy support for compactType\n      // Allow parent to set layout directly.\n\n\n      if (!(0, _lodash.default)(nextProps.layout, prevState.propsLayout) || nextProps.compactType !== prevState.compactType) {\n        newLayoutBase = nextProps.layout;\n      } else if (!(0, _utils.childrenEqual)(nextProps.children, prevState.children)) {\n        // If children change, also regenerate the layout. Use our state\n        // as the base in case because it may be more up to date than\n        // what is in props.\n        newLayoutBase = prevState.layout;\n      } // We need to regenerate the layout.\n\n\n      if (newLayoutBase) {\n        var newLayout = (0, _utils.synchronizeLayoutWithChildren)(newLayoutBase, nextProps.children, nextProps.cols, (0, _utils.compactType)(nextProps), nextProps.allowOverlap);\n        return {\n          layout: newLayout,\n          // We need to save these props to state for using\n          // getDerivedStateFromProps instead of componentDidMount (in which we would get extra rerender)\n          compactType: nextProps.compactType,\n          children: nextProps.children,\n          propsLayout: nextProps.layout\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return ReactGridLayout;\n}(React.Component);\n\nexports.default = ReactGridLayout;\n\n_defineProperty(ReactGridLayout, \"displayName\", \"ReactGridLayout\");\n\n_defineProperty(ReactGridLayout, \"propTypes\", _ReactGridLayoutPropTypes.default);\n\n_defineProperty(ReactGridLayout, \"defaultProps\", {\n  autoSize: true,\n  cols: 12,\n  className: \"\",\n  style: {},\n  draggableHandle: \"\",\n  draggableCancel: \"\",\n  containerPadding: null,\n  rowHeight: 150,\n  maxRows: Infinity,\n  // infinite vertical growth\n  layout: [],\n  margin: [10, 10],\n  isBounded: false,\n  isDraggable: true,\n  isResizable: true,\n  allowOverlap: false,\n  isDroppable: false,\n  useCSSTransforms: true,\n  transformScale: 1,\n  verticalCompact: true,\n  compactType: \"vertical\",\n  preventCollision: false,\n  droppingItem: {\n    i: \"__dropping-elem__\",\n    h: 1,\n    w: 1\n  },\n  resizeHandles: [\"se\"],\n  onLayoutChange: _utils.noop,\n  onDragStart: _utils.noop,\n  onDrag: _utils.noop,\n  onDragStop: _utils.noop,\n  onResizeStart: _utils.noop,\n  onResize: _utils.noop,\n  onResizeStop: _utils.noop,\n  onDrop: _utils.noop,\n  onDropDragOver: _utils.noop\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.resizeHandleType = exports.resizeHandleAxesType = exports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Defines which resize handles should be rendered (default: 'se')\n// Allows for any combination of:\n// 's' - South handle (bottom-center)\n// 'w' - West handle (left-center)\n// 'e' - East handle (right-center)\n// 'n' - North handle (top-center)\n// 'sw' - Southwest handle (bottom-left)\n// 'nw' - Northwest handle (top-left)\n// 'se' - Southeast handle (bottom-right)\n// 'ne' - Northeast handle (top-right)\nvar resizeHandleAxesType\n/*: ReactPropsChainableTypeChecker*/\n= _propTypes.default.arrayOf(_propTypes.default.oneOf([\"s\", \"w\", \"e\", \"n\", \"sw\", \"nw\", \"se\", \"ne\"])); // Custom component for resize handles\n\n\nexports.resizeHandleAxesType = resizeHandleAxesType;\n\nvar resizeHandleType\n/*: ReactPropsChainableTypeChecker*/\n= _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func]);\n/*:: export type Props = {|\n  className: string,\n  style: Object,\n  width: number,\n  autoSize: boolean,\n  cols: number,\n  draggableCancel: string,\n  draggableHandle: string,\n  verticalCompact: boolean,\n  compactType: CompactType,\n  layout: Layout,\n  margin: [number, number],\n  containerPadding: ?[number, number],\n  rowHeight: number,\n  maxRows: number,\n  isBounded: boolean,\n  isDraggable: boolean,\n  isResizable: boolean,\n  isDroppable: boolean,\n  preventCollision: boolean,\n  useCSSTransforms: boolean,\n  transformScale: number,\n  droppingItem: $Shape<LayoutItem>,\n  resizeHandles: ResizeHandleAxis[],\n  resizeHandle?: ResizeHandle,\n  allowOverlap: boolean,\n\n  // Callbacks\n  onLayoutChange: Layout => void,\n  onDrag: EventCallback,\n  onDragStart: EventCallback,\n  onDragStop: EventCallback,\n  onResize: EventCallback,\n  onResizeStart: EventCallback,\n  onResizeStop: EventCallback,\n  onDropDragOver: (e: DragOverEvent) => ?({| w?: number, h?: number |} | false),\n  onDrop: (layout: Layout, item: ?LayoutItem, e: Event) => void,\n  children: ReactChildrenArray<ReactElement<any>>,\n  innerRef?: Ref<\"div\">\n|};*/\n\n/*:: export type DefaultProps = $Diff<\n  Props,\n  {\n    children: ReactChildrenArray<ReactElement<any>>,\n    width: number\n  }\n>;*/\n\n\nexports.resizeHandleType = resizeHandleType;\nvar _default = {\n  //\n  // Basic props\n  //\n  className: _propTypes.default.string,\n  style: _propTypes.default.object,\n  // This can be set explicitly. If it is not set, it will automatically\n  // be set to the container width. Note that resizes will *not* cause this to adjust.\n  // If you need that behavior, use WidthProvider.\n  width: _propTypes.default.number,\n  // If true, the container height swells and contracts to fit contents\n  autoSize: _propTypes.default.bool,\n  // # of cols.\n  cols: _propTypes.default.number,\n  // A selector that will not be draggable.\n  draggableCancel: _propTypes.default.string,\n  // A selector for the draggable handler\n  draggableHandle: _propTypes.default.string,\n  // Deprecated\n  verticalCompact: function verticalCompact(props\n  /*: Props*/\n  ) {\n    if (props.verticalCompact === false && process.env.NODE_ENV !== \"production\") {\n      console.warn( // eslint-disable-line no-console\n      \"`verticalCompact` on <ReactGridLayout> is deprecated and will be removed soon. \" + 'Use `compactType`: \"horizontal\" | \"vertical\" | null.');\n    }\n  },\n  // Choose vertical or hotizontal compaction\n  compactType: (_propTypes.default.oneOf([\"vertical\", \"horizontal\"])\n  /*: ReactPropsChainableTypeChecker*/\n  ),\n  // layout is an array of object with the format:\n  // {x: Number, y: Number, w: Number, h: Number, i: String}\n  layout: function layout(props\n  /*: Props*/\n  ) {\n    var layout = props.layout; // I hope you're setting the data-grid property on the grid items\n\n    if (layout === undefined) return;\n\n    require(\"./utils\").validateLayout(layout, \"layout\");\n  },\n  //\n  // Grid Dimensions\n  //\n  // Margin between items [x, y] in px\n  margin: (_propTypes.default.arrayOf(_propTypes.default.number)\n  /*: ReactPropsChainableTypeChecker*/\n  ),\n  // Padding inside the container [x, y] in px\n  containerPadding: (_propTypes.default.arrayOf(_propTypes.default.number)\n  /*: ReactPropsChainableTypeChecker*/\n  ),\n  // Rows have a static height, but you can change this based on breakpoints if you like\n  rowHeight: _propTypes.default.number,\n  // Default Infinity, but you can specify a max here if you like.\n  // Note that this isn't fully fleshed out and won't error if you specify a layout that\n  // extends beyond the row capacity. It will, however, not allow users to drag/resize\n  // an item past the barrier. They can push items beyond the barrier, though.\n  // Intentionally not documented for this reason.\n  maxRows: _propTypes.default.number,\n  //\n  // Flags\n  //\n  isBounded: _propTypes.default.bool,\n  isDraggable: _propTypes.default.bool,\n  isResizable: _propTypes.default.bool,\n  // If true, grid can be placed one over the other.\n  allowOverlap: _propTypes.default.bool,\n  // If true, grid items won't change position when being dragged over.\n  preventCollision: _propTypes.default.bool,\n  // Use CSS transforms instead of top/left\n  useCSSTransforms: _propTypes.default.bool,\n  // parent layout transform scale\n  transformScale: _propTypes.default.number,\n  // If true, an external element can trigger onDrop callback with a specific grid position as a parameter\n  isDroppable: _propTypes.default.bool,\n  // Resize handle options\n  resizeHandles: resizeHandleAxesType,\n  resizeHandle: resizeHandleType,\n  //\n  // Callbacks\n  //\n  // Callback so you can save the layout. Calls after each drag & resize stops.\n  onLayoutChange: _propTypes.default.func,\n  // Calls when drag starts. Callback is of the signature (layout, oldItem, newItem, placeholder, e, ?node).\n  // All callbacks below have the same signature. 'start' and 'stop' callbacks omit the 'placeholder'.\n  onDragStart: _propTypes.default.func,\n  // Calls on each drag movement.\n  onDrag: _propTypes.default.func,\n  // Calls when drag is complete.\n  onDragStop: _propTypes.default.func,\n  //Calls when resize starts.\n  onResizeStart: _propTypes.default.func,\n  // Calls when resize movement happens.\n  onResize: _propTypes.default.func,\n  // Calls when resize is complete.\n  onResizeStop: _propTypes.default.func,\n  // Calls when some element is dropped.\n  onDrop: _propTypes.default.func,\n  //\n  // Other validations\n  //\n  droppingItem: (_propTypes.default.shape({\n    i: _propTypes.default.string.isRequired,\n    w: _propTypes.default.number.isRequired,\n    h: _propTypes.default.number.isRequired\n  })\n  /*: ReactPropsChainableTypeChecker*/\n  ),\n  // Children must not have duplicate keys.\n  children: function children(props\n  /*: Props*/\n  , propName\n  /*: string*/\n  ) {\n    var children = props[propName]; // Check children keys for duplicates. Throw if found.\n\n    var keys = {};\n\n    _react.default.Children.forEach(children, function (child) {\n      if ((child === null || child === void 0 ? void 0 : child.key) == null) return;\n\n      if (keys[child.key]) {\n        throw new Error('Duplicate child key \"' + child.key + '\" found! This will cause problems in ReactGridLayout.');\n      }\n\n      keys[child.key] = true;\n    });\n  },\n  // Optional ref for getting a reference for the wrapping div.\n  innerRef: _propTypes.default.any\n};\nexports.default = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _lodash = _interopRequireDefault(require(\"lodash.isequal\"));\n\nvar _utils = require(\"./utils\");\n\nvar _responsiveUtils = require(\"./responsiveUtils\");\n\nvar _ReactGridLayout = _interopRequireDefault(require(\"./ReactGridLayout\"));\n\nvar _excluded = [\"breakpoint\", \"breakpoints\", \"cols\", \"layouts\", \"margin\", \"containerPadding\", \"onBreakpointChange\", \"onLayoutChange\", \"onWidthChange\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// $FlowFixMe[method-unbinding]\nvar type = function type(obj) {\n  return Object.prototype.toString.call(obj);\n};\n/**\n * Get a value of margin or containerPadding.\n *\n * @param  {Array | Object} param Margin | containerPadding, e.g. [10, 10] | {lg: [10, 10], ...}.\n * @param  {String} breakpoint   Breakpoint: lg, md, sm, xs and etc.\n * @return {Array}\n */\n\n\nfunction getIndentationValue\n/*:: <T: ?[number, number]>*/\n(param\n/*: { [key: string]: T } | T*/\n, breakpoint\n/*: string*/\n)\n/*: T*/\n{\n  // $FlowIgnore TODO fix this typedef\n  if (param == null) return null; // $FlowIgnore TODO fix this typedef\n\n  return Array.isArray(param) ? param : param[breakpoint];\n}\n/*:: type State = {\n  layout: Layout,\n  breakpoint: string,\n  cols: number,\n  layouts?: ResponsiveLayout<string>\n};*/\n\n/*:: type Props<Breakpoint: string = string> = {|\n  ...React.ElementConfig<typeof ReactGridLayout>,\n\n  // Responsive config\n  breakpoint?: ?Breakpoint,\n  breakpoints: Breakpoints<Breakpoint>,\n  cols: { [key: Breakpoint]: number },\n  layouts: ResponsiveLayout<Breakpoint>,\n  width: number,\n  margin: { [key: Breakpoint]: [number, number] } | [number, number],\n  /* prettier-ignore *-/\n  containerPadding: { [key: Breakpoint]: ?[number, number] } | ?[number, number],\n\n  // Callbacks\n  onBreakpointChange: (Breakpoint, cols: number) => void,\n  onLayoutChange: OnLayoutChangeCallback,\n  onWidthChange: (\n    containerWidth: number,\n    margin: [number, number],\n    cols: number,\n    containerPadding: ?[number, number]\n  ) => void\n|};*/\n\n/*:: type DefaultProps = Pick<\n  Props<>,\n  {|\n    allowOverlap: 0,\n    breakpoints: 0,\n    cols: 0,\n    containerPadding: 0,\n    layouts: 0,\n    margin: 0,\n    onBreakpointChange: 0,\n    onLayoutChange: 0,\n    onWidthChange: 0\n  |}\n>;*/\n\n\nvar ResponsiveReactGridLayout = /*#__PURE__*/function (_React$Component) {\n  _inherits(ResponsiveReactGridLayout, _React$Component);\n\n  var _super = _createSuper(ResponsiveReactGridLayout);\n\n  function ResponsiveReactGridLayout() {\n    var _this;\n\n    _classCallCheck(this, ResponsiveReactGridLayout);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", _this.generateInitialState());\n\n    _defineProperty(_assertThisInitialized(_this), \"onLayoutChange\", function (layout\n    /*: Layout*/\n    ) {\n      _this.props.onLayoutChange(layout, _objectSpread(_objectSpread({}, _this.props.layouts), {}, _defineProperty({}, _this.state.breakpoint, layout)));\n    });\n\n    return _this;\n  }\n\n  _createClass(ResponsiveReactGridLayout, [{\n    key: \"generateInitialState\",\n    value: function generateInitialState()\n    /*: State*/\n    {\n      var _this$props = this.props,\n          width = _this$props.width,\n          breakpoints = _this$props.breakpoints,\n          layouts = _this$props.layouts,\n          cols = _this$props.cols;\n      var breakpoint = (0, _responsiveUtils.getBreakpointFromWidth)(breakpoints, width);\n      var colNo = (0, _responsiveUtils.getColsFromBreakpoint)(breakpoint, cols); // verticalCompact compatibility, now deprecated\n\n      var compactType = this.props.verticalCompact === false ? null : this.props.compactType; // Get the initial layout. This can tricky; we try to generate one however possible if one doesn't exist\n      // for this layout.\n\n      var initialLayout = (0, _responsiveUtils.findOrGenerateResponsiveLayout)(layouts, breakpoints, breakpoint, breakpoint, colNo, compactType);\n      return {\n        layout: initialLayout,\n        breakpoint: breakpoint,\n        cols: colNo\n      };\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps\n    /*: Props<*>*/\n    ) {\n      // Allow parent to set width or breakpoint directly.\n      if (this.props.width != prevProps.width || this.props.breakpoint !== prevProps.breakpoint || !(0, _lodash.default)(this.props.breakpoints, prevProps.breakpoints) || !(0, _lodash.default)(this.props.cols, prevProps.cols)) {\n        this.onWidthChange(prevProps);\n      }\n    } // wrap layouts so we do not need to pass layouts to child\n\n  }, {\n    key: \"onWidthChange\",\n    value:\n    /**\n     * When the width changes work through breakpoints and reset state with the new width & breakpoint.\n     * Width changes are necessary to figure out the widget widths.\n     */\n    function onWidthChange(prevProps\n    /*: Props<*>*/\n    ) {\n      var _this$props2 = this.props,\n          breakpoints = _this$props2.breakpoints,\n          cols = _this$props2.cols,\n          layouts = _this$props2.layouts,\n          compactType = _this$props2.compactType;\n      var newBreakpoint = this.props.breakpoint || (0, _responsiveUtils.getBreakpointFromWidth)(this.props.breakpoints, this.props.width);\n      var lastBreakpoint = this.state.breakpoint;\n      var newCols\n      /*: number*/\n      = (0, _responsiveUtils.getColsFromBreakpoint)(newBreakpoint, cols);\n\n      var newLayouts = _objectSpread({}, layouts); // Breakpoint change\n\n\n      if (lastBreakpoint !== newBreakpoint || prevProps.breakpoints !== breakpoints || prevProps.cols !== cols) {\n        // Preserve the current layout if the current breakpoint is not present in the next layouts.\n        if (!(lastBreakpoint in newLayouts)) newLayouts[lastBreakpoint] = (0, _utils.cloneLayout)(this.state.layout); // Find or generate a new layout.\n\n        var layout = (0, _responsiveUtils.findOrGenerateResponsiveLayout)(newLayouts, breakpoints, newBreakpoint, lastBreakpoint, newCols, compactType); // This adds missing items.\n\n        layout = (0, _utils.synchronizeLayoutWithChildren)(layout, this.props.children, newCols, compactType, this.props.allowOverlap); // Store the new layout.\n\n        newLayouts[newBreakpoint] = layout; // callbacks\n\n        this.props.onLayoutChange(layout, newLayouts);\n        this.props.onBreakpointChange(newBreakpoint, newCols);\n        this.setState({\n          breakpoint: newBreakpoint,\n          layout: layout,\n          cols: newCols\n        });\n      }\n\n      var margin = getIndentationValue(this.props.margin, newBreakpoint);\n      var containerPadding = getIndentationValue(this.props.containerPadding, newBreakpoint); //call onWidthChange on every change of width, not only on breakpoint changes\n\n      this.props.onWidthChange(this.props.width, margin, newCols, containerPadding);\n    }\n  }, {\n    key: \"render\",\n    value: function render()\n    /*: React.Element<typeof ReactGridLayout>*/\n    {\n      /* eslint-disable no-unused-vars */\n      var _this$props3 = this.props,\n          breakpoint = _this$props3.breakpoint,\n          breakpoints = _this$props3.breakpoints,\n          cols = _this$props3.cols,\n          layouts = _this$props3.layouts,\n          margin = _this$props3.margin,\n          containerPadding = _this$props3.containerPadding,\n          onBreakpointChange = _this$props3.onBreakpointChange,\n          onLayoutChange = _this$props3.onLayoutChange,\n          onWidthChange = _this$props3.onWidthChange,\n          other = _objectWithoutProperties(_this$props3, _excluded);\n      /* eslint-enable no-unused-vars */\n\n\n      return /*#__PURE__*/React.createElement(_ReactGridLayout.default, _extends({}, other, {\n        // $FlowIgnore should allow nullable here due to DefaultProps\n        margin: getIndentationValue(margin, this.state.breakpoint),\n        containerPadding: getIndentationValue(containerPadding, this.state.breakpoint),\n        onLayoutChange: this.onLayoutChange,\n        layout: this.state.layout,\n        cols: this.state.cols\n      }));\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(nextProps\n    /*: Props<*>*/\n    , prevState\n    /*: State*/\n    )\n    /*: ?$Shape<State>*/\n    {\n      if (!(0, _lodash.default)(nextProps.layouts, prevState.layouts)) {\n        // Allow parent to set layouts directly.\n        var breakpoint = prevState.breakpoint,\n            _cols = prevState.cols; // Since we're setting an entirely new layout object, we must generate a new responsive layout\n        // if one does not exist.\n\n        var newLayout = (0, _responsiveUtils.findOrGenerateResponsiveLayout)(nextProps.layouts, nextProps.breakpoints, breakpoint, breakpoint, _cols, nextProps.compactType);\n        return {\n          layout: newLayout,\n          layouts: nextProps.layouts\n        };\n      }\n\n      return null;\n    }\n  }]);\n\n  return ResponsiveReactGridLayout;\n}(React.Component);\n\nexports.default = ResponsiveReactGridLayout;\n\n_defineProperty(ResponsiveReactGridLayout, \"propTypes\", {\n  //\n  // Basic props\n  //\n  // Optional, but if you are managing width yourself you may want to set the breakpoint\n  // yourself as well.\n  breakpoint: _propTypes.default.string,\n  // {name: pxVal}, e.g. {lg: 1200, md: 996, sm: 768, xs: 480}\n  breakpoints: _propTypes.default.object,\n  allowOverlap: _propTypes.default.bool,\n  // # of cols. This is a breakpoint -> cols map\n  cols: _propTypes.default.object,\n  // # of margin. This is a breakpoint -> margin map\n  // e.g. { lg: [5, 5], md: [10, 10], sm: [15, 15] }\n  // Margin between items [x, y] in px\n  // e.g. [10, 10]\n  margin: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.object]),\n  // # of containerPadding. This is a breakpoint -> containerPadding map\n  // e.g. { lg: [5, 5], md: [10, 10], sm: [15, 15] }\n  // Padding inside the container [x, y] in px\n  // e.g. [10, 10]\n  containerPadding: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.object]),\n  // layouts is an object mapping breakpoints to layouts.\n  // e.g. {lg: Layout, md: Layout, ...}\n  layouts: function layouts(props\n  /*: Props<>*/\n  , propName\n  /*: string*/\n  ) {\n    if (type(props[propName]) !== \"[object Object]\") {\n      throw new Error(\"Layout property must be an object. Received: \" + type(props[propName]));\n    }\n\n    Object.keys(props[propName]).forEach(function (key) {\n      if (!(key in props.breakpoints)) {\n        throw new Error(\"Each key in layouts must align with a key in breakpoints.\");\n      }\n\n      (0, _utils.validateLayout)(props.layouts[key], \"layouts.\" + key);\n    });\n  },\n  // The width of this component.\n  // Required in this propTypes stanza because generateInitialState() will fail without it.\n  width: _propTypes.default.number.isRequired,\n  //\n  // Callbacks\n  //\n  // Calls back with breakpoint and new # cols\n  onBreakpointChange: _propTypes.default.func,\n  // Callback so you can save the layout.\n  // Calls back with (currentLayout, allLayouts). allLayouts are keyed by breakpoint.\n  onLayoutChange: _propTypes.default.func,\n  // Calls back with (containerWidth, margin, cols, containerPadding)\n  onWidthChange: _propTypes.default.func\n});\n\n_defineProperty(ResponsiveReactGridLayout, \"defaultProps\", {\n  breakpoints: {\n    lg: 1200,\n    md: 996,\n    sm: 768,\n    xs: 480,\n    xxs: 0\n  },\n  cols: {\n    lg: 12,\n    md: 10,\n    sm: 6,\n    xs: 4,\n    xxs: 2\n  },\n  containerPadding: {\n    lg: null,\n    md: null,\n    sm: null,\n    xs: null,\n    xxs: null\n  },\n  layouts: {},\n  margin: [10, 10],\n  allowOverlap: false,\n  onBreakpointChange: _utils.noop,\n  onLayoutChange: _utils.noop,\n  onWidthChange: _utils.noop\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.calcGridColWidth = calcGridColWidth;\nexports.calcGridItemPosition = calcGridItemPosition;\nexports.calcGridItemWHPx = calcGridItemWHPx;\nexports.calcWH = calcWH;\nexports.calcXY = calcXY;\nexports.clamp = clamp;\n\n/*:: import type { Position } from \"./utils\";*/\n\n/*:: export type PositionParams = {\n  margin: [number, number],\n  containerPadding: [number, number],\n  containerWidth: number,\n  cols: number,\n  rowHeight: number,\n  maxRows: number\n};*/\n// Helper for generating column width\nfunction calcGridColWidth(positionParams\n/*: PositionParams*/\n)\n/*: number*/\n{\n  var margin = positionParams.margin,\n      containerPadding = positionParams.containerPadding,\n      containerWidth = positionParams.containerWidth,\n      cols = positionParams.cols;\n  return (containerWidth - margin[0] * (cols - 1) - containerPadding[0] * 2) / cols;\n} // This can either be called:\n// calcGridItemWHPx(w, colWidth, margin[0])\n// or\n// calcGridItemWHPx(h, rowHeight, margin[1])\n\n\nfunction calcGridItemWHPx(gridUnits\n/*: number*/\n, colOrRowSize\n/*: number*/\n, marginPx\n/*: number*/\n)\n/*: number*/\n{\n  // 0 * Infinity === NaN, which causes problems with resize contraints\n  if (!Number.isFinite(gridUnits)) return gridUnits;\n  return Math.round(colOrRowSize * gridUnits + Math.max(0, gridUnits - 1) * marginPx);\n}\n/**\n * Return position on the page given an x, y, w, h.\n * left, top, width, height are all in pixels.\n * @param  {PositionParams} positionParams  Parameters of grid needed for coordinates calculations.\n * @param  {Number}  x                      X coordinate in grid units.\n * @param  {Number}  y                      Y coordinate in grid units.\n * @param  {Number}  w                      W coordinate in grid units.\n * @param  {Number}  h                      H coordinate in grid units.\n * @return {Position}                       Object containing coords.\n */\n\n\nfunction calcGridItemPosition(positionParams\n/*: PositionParams*/\n, x\n/*: number*/\n, y\n/*: number*/\n, w\n/*: number*/\n, h\n/*: number*/\n, state\n/*: ?Object*/\n)\n/*: Position*/\n{\n  var margin = positionParams.margin,\n      containerPadding = positionParams.containerPadding,\n      rowHeight = positionParams.rowHeight;\n  var colWidth = calcGridColWidth(positionParams);\n  var out = {}; // If resizing, use the exact width and height as returned from resizing callbacks.\n\n  if (state && state.resizing) {\n    out.width = Math.round(state.resizing.width);\n    out.height = Math.round(state.resizing.height);\n  } // Otherwise, calculate from grid units.\n  else {\n    out.width = calcGridItemWHPx(w, colWidth, margin[0]);\n    out.height = calcGridItemWHPx(h, rowHeight, margin[1]);\n  } // If dragging, use the exact width and height as returned from dragging callbacks.\n\n\n  if (state && state.dragging) {\n    out.top = Math.round(state.dragging.top);\n    out.left = Math.round(state.dragging.left);\n  } // Otherwise, calculate from grid units.\n  else {\n    out.top = Math.round((rowHeight + margin[1]) * y + containerPadding[1]);\n    out.left = Math.round((colWidth + margin[0]) * x + containerPadding[0]);\n  }\n\n  return out;\n}\n/**\n * Translate x and y coordinates from pixels to grid units.\n * @param  {PositionParams} positionParams  Parameters of grid needed for coordinates calculations.\n * @param  {Number} top                     Top position (relative to parent) in pixels.\n * @param  {Number} left                    Left position (relative to parent) in pixels.\n * @param  {Number} w                       W coordinate in grid units.\n * @param  {Number} h                       H coordinate in grid units.\n * @return {Object}                         x and y in grid units.\n */\n\n\nfunction calcXY(positionParams\n/*: PositionParams*/\n, top\n/*: number*/\n, left\n/*: number*/\n, w\n/*: number*/\n, h\n/*: number*/\n)\n/*: { x: number, y: number }*/\n{\n  var margin = positionParams.margin,\n      cols = positionParams.cols,\n      rowHeight = positionParams.rowHeight,\n      maxRows = positionParams.maxRows;\n  var colWidth = calcGridColWidth(positionParams); // left = colWidth * x + margin * (x + 1)\n  // l = cx + m(x+1)\n  // l = cx + mx + m\n  // l - m = cx + mx\n  // l - m = x(c + m)\n  // (l - m) / (c + m) = x\n  // x = (left - margin) / (coldWidth + margin)\n\n  var x = Math.round((left - margin[0]) / (colWidth + margin[0]));\n  var y = Math.round((top - margin[1]) / (rowHeight + margin[1])); // Capping\n\n  x = clamp(x, 0, cols - w);\n  y = clamp(y, 0, maxRows - h);\n  return {\n    x: x,\n    y: y\n  };\n}\n/**\n * Given a height and width in pixel values, calculate grid units.\n * @param  {PositionParams} positionParams  Parameters of grid needed for coordinates calcluations.\n * @param  {Number} height                  Height in pixels.\n * @param  {Number} width                   Width in pixels.\n * @param  {Number} x                       X coordinate in grid units.\n * @param  {Number} y                       Y coordinate in grid units.\n * @return {Object}                         w, h as grid units.\n */\n\n\nfunction calcWH(positionParams\n/*: PositionParams*/\n, width\n/*: number*/\n, height\n/*: number*/\n, x\n/*: number*/\n, y\n/*: number*/\n)\n/*: { w: number, h: number }*/\n{\n  var margin = positionParams.margin,\n      maxRows = positionParams.maxRows,\n      cols = positionParams.cols,\n      rowHeight = positionParams.rowHeight;\n  var colWidth = calcGridColWidth(positionParams); // width = colWidth * w - (margin * (w - 1))\n  // ...\n  // w = (width + margin) / (colWidth + margin)\n\n  var w = Math.round((width + margin[0]) / (colWidth + margin[0]));\n  var h = Math.round((height + margin[1]) / (rowHeight + margin[1])); // Capping\n\n  w = clamp(w, 0, cols - x);\n  h = clamp(h, 0, maxRows - y);\n  return {\n    w: w,\n    h: h\n  };\n} // Similar to _.clamp\n\n\nfunction clamp(num\n/*: number*/\n, lowerBound\n/*: number*/\n, upperBound\n/*: number*/\n)\n/*: number*/\n{\n  return Math.max(Math.min(num, upperBound), lowerBound);\n}","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = WidthProvideRGL;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _excluded = [\"measureBeforeMount\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar layoutClassName = \"react-grid-layout\";\n/*\n * A simple HOC that provides facility for listening to container resizes.\n *\n * The Flow type is pretty janky here. I can't just spread `WPProps` into this returned object - I wish I could - but it triggers\n * a flow bug of some sort that causes it to stop typechecking.\n */\n\nfunction WidthProvideRGL\n/*:: <Config>*/\n(ComposedComponent\n/*: React.AbstractComponent<Config>*/\n)\n/*: React.AbstractComponent<ComposedProps<Config>>*/\n{\n  var _class;\n\n  return _class = /*#__PURE__*/function (_React$Component) {\n    _inherits(WidthProvider, _React$Component);\n\n    var _super = _createSuper(WidthProvider);\n\n    function WidthProvider() {\n      var _this;\n\n      _classCallCheck(this, WidthProvider);\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _super.call.apply(_super, [this].concat(args));\n\n      _defineProperty(_assertThisInitialized(_this), \"state\", {\n        width: 1280\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"elementRef\", /*#__PURE__*/React.createRef());\n\n      _defineProperty(_assertThisInitialized(_this), \"mounted\", false);\n\n      _defineProperty(_assertThisInitialized(_this), \"onWindowResize\", function () {\n        if (!_this.mounted) return;\n        var node = _this.elementRef.current; // Flow casts this to Text | Element\n        // fix: grid position error when node or parentNode display is none by window resize\n        // #924 #1084\n\n        if (node instanceof HTMLElement && node.offsetWidth) {\n          _this.setState({\n            width: node.offsetWidth\n          });\n        }\n      });\n\n      return _this;\n    }\n\n    _createClass(WidthProvider, [{\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        this.mounted = true;\n        window.addEventListener(\"resize\", this.onWindowResize); // Call to properly set the breakpoint and resize the elements.\n        // Note that if you're doing a full-width element, this can get a little wonky if a scrollbar\n        // appears because of the grid. In that case, fire your own resize event, or set `overflow: scroll` on your body.\n\n        this.onWindowResize();\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        this.mounted = false;\n        window.removeEventListener(\"resize\", this.onWindowResize);\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            measureBeforeMount = _this$props.measureBeforeMount,\n            rest = _objectWithoutProperties(_this$props, _excluded);\n\n        if (measureBeforeMount && !this.mounted) {\n          return /*#__PURE__*/React.createElement(\"div\", {\n            className: (0, _clsx.default)(this.props.className, layoutClassName),\n            style: this.props.style // $FlowIgnore ref types\n            ,\n            ref: this.elementRef\n          });\n        }\n\n        return /*#__PURE__*/React.createElement(ComposedComponent, _extends({\n          innerRef: this.elementRef\n        }, rest, this.state));\n      }\n    }]);\n\n    return WidthProvider;\n  }(React.Component), _defineProperty(_class, \"defaultProps\", {\n    measureBeforeMount: false\n  }), _defineProperty(_class, \"propTypes\", {\n    // If true, will not render children until mounted. Useful for getting the exact width before\n    // rendering, to prevent any unsightly resizing.\n    measureBeforeMount: _propTypes.default.bool\n  }), _class;\n}","// this file was prevaled\nmodule.exports = function fastRGLPropsEqual(a, b, isEqualImpl) {\n  if (a === b) return true;\n  return a.className === b.className && isEqualImpl(a.style, b.style) && a.width === b.width && a.autoSize === b.autoSize && a.cols === b.cols && a.draggableCancel === b.draggableCancel && a.draggableHandle === b.draggableHandle && isEqualImpl(a.verticalCompact, b.verticalCompact) && isEqualImpl(a.compactType, b.compactType) && isEqualImpl(a.layout, b.layout) && isEqualImpl(a.margin, b.margin) && isEqualImpl(a.containerPadding, b.containerPadding) && a.rowHeight === b.rowHeight && a.maxRows === b.maxRows && a.isBounded === b.isBounded && a.isDraggable === b.isDraggable && a.isResizable === b.isResizable && a.allowOverlap === b.allowOverlap && a.preventCollision === b.preventCollision && a.useCSSTransforms === b.useCSSTransforms && a.transformScale === b.transformScale && a.isDroppable === b.isDroppable && isEqualImpl(a.resizeHandles, b.resizeHandles) && isEqualImpl(a.resizeHandle, b.resizeHandle) && a.onLayoutChange === b.onLayoutChange && a.onDragStart === b.onDragStart && a.onDrag === b.onDrag && a.onDragStop === b.onDragStop && a.onResizeStart === b.onResizeStart && a.onResize === b.onResize && a.onResizeStop === b.onResizeStop && a.onDrop === b.onDrop && isEqualImpl(a.droppingItem, b.droppingItem) && isEqualImpl(a.innerRef, b.innerRef);\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.findOrGenerateResponsiveLayout = findOrGenerateResponsiveLayout;\nexports.getBreakpointFromWidth = getBreakpointFromWidth;\nexports.getColsFromBreakpoint = getColsFromBreakpoint;\nexports.sortBreakpoints = sortBreakpoints;\n\nvar _utils = require(\"./utils\");\n\n/**\n * Given a width, find the highest breakpoint that matches is valid for it (width > breakpoint).\n *\n * @param  {Object} breakpoints Breakpoints object (e.g. {lg: 1200, md: 960, ...})\n * @param  {Number} width Screen width.\n * @return {String}       Highest breakpoint that is less than width.\n */\nfunction getBreakpointFromWidth(breakpoints\n/*: Breakpoints<Breakpoint>*/\n, width\n/*: number*/\n)\n/*: Breakpoint*/\n{\n  var sorted = sortBreakpoints(breakpoints);\n  var matching = sorted[0];\n\n  for (var i = 1, len = sorted.length; i < len; i++) {\n    var breakpointName = sorted[i];\n    if (width > breakpoints[breakpointName]) matching = breakpointName;\n  }\n\n  return matching;\n}\n/**\n * Given a breakpoint, get the # of cols set for it.\n * @param  {String} breakpoint Breakpoint name.\n * @param  {Object} cols       Map of breakpoints to cols.\n * @return {Number}            Number of cols.\n */\n\n\nfunction getColsFromBreakpoint(breakpoint\n/*: Breakpoint*/\n, cols\n/*: Breakpoints<Breakpoint>*/\n)\n/*: number*/\n{\n  if (!cols[breakpoint]) {\n    throw new Error(\"ResponsiveReactGridLayout: `cols` entry for breakpoint \" + breakpoint + \" is missing!\");\n  }\n\n  return cols[breakpoint];\n}\n/**\n * Given existing layouts and a new breakpoint, find or generate a new layout.\n *\n * This finds the layout above the new one and generates from it, if it exists.\n *\n * @param  {Object} layouts     Existing layouts.\n * @param  {Array} breakpoints All breakpoints.\n * @param  {String} breakpoint New breakpoint.\n * @param  {String} breakpoint Last breakpoint (for fallback).\n * @param  {Number} cols       Column count at new breakpoint.\n * @param  {Boolean} verticalCompact Whether or not to compact the layout\n *   vertically.\n * @return {Array}             New layout.\n */\n\n\nfunction findOrGenerateResponsiveLayout(layouts\n/*: ResponsiveLayout<Breakpoint>*/\n, breakpoints\n/*: Breakpoints<Breakpoint>*/\n, breakpoint\n/*: Breakpoint*/\n, lastBreakpoint\n/*: Breakpoint*/\n, cols\n/*: number*/\n, compactType\n/*: CompactType*/\n)\n/*: Layout*/\n{\n  // If it already exists, just return it.\n  if (layouts[breakpoint]) return (0, _utils.cloneLayout)(layouts[breakpoint]); // Find or generate the next layout\n\n  var layout = layouts[lastBreakpoint];\n  var breakpointsSorted = sortBreakpoints(breakpoints);\n  var breakpointsAbove = breakpointsSorted.slice(breakpointsSorted.indexOf(breakpoint));\n\n  for (var i = 0, len = breakpointsAbove.length; i < len; i++) {\n    var b = breakpointsAbove[i];\n\n    if (layouts[b]) {\n      layout = layouts[b];\n      break;\n    }\n  }\n\n  layout = (0, _utils.cloneLayout)(layout || []); // clone layout so we don't modify existing items\n\n  return (0, _utils.compact)((0, _utils.correctBounds)(layout, {\n    cols: cols\n  }), compactType, cols);\n}\n/**\n * Given breakpoints, return an array of breakpoints sorted by width. This is usually\n * e.g. ['xxs', 'xs', 'sm', ...]\n *\n * @param  {Object} breakpoints Key/value pair of breakpoint names to widths.\n * @return {Array}              Sorted breakpoints.\n */\n\n\nfunction sortBreakpoints(breakpoints\n/*: Breakpoints<Breakpoint>*/\n)\n/*: Array<Breakpoint>*/\n{\n  var keys\n  /*: Array<string>*/\n  = Object.keys(breakpoints);\n  return keys.sort(function (a, b) {\n    return breakpoints[a] - breakpoints[b];\n  });\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bottom = bottom;\nexports.childrenEqual = childrenEqual;\nexports.cloneLayout = cloneLayout;\nexports.cloneLayoutItem = cloneLayoutItem;\nexports.collides = collides;\nexports.compact = compact;\nexports.compactItem = compactItem;\nexports.compactType = compactType;\nexports.correctBounds = correctBounds;\nexports.fastPositionEqual = fastPositionEqual;\nexports.fastRGLPropsEqual = void 0;\nexports.getAllCollisions = getAllCollisions;\nexports.getFirstCollision = getFirstCollision;\nexports.getLayoutItem = getLayoutItem;\nexports.getStatics = getStatics;\nexports.modifyLayout = modifyLayout;\nexports.moveElement = moveElement;\nexports.moveElementAwayFromCollision = moveElementAwayFromCollision;\nexports.noop = void 0;\nexports.perc = perc;\nexports.setTopLeft = setTopLeft;\nexports.setTransform = setTransform;\nexports.sortLayoutItems = sortLayoutItems;\nexports.sortLayoutItemsByColRow = sortLayoutItemsByColRow;\nexports.sortLayoutItemsByRowCol = sortLayoutItemsByRowCol;\nexports.synchronizeLayoutWithChildren = synchronizeLayoutWithChildren;\nexports.validateLayout = validateLayout;\nexports.withLayoutItem = withLayoutItem;\n\nvar _lodash = _interopRequireDefault(require(\"lodash.isequal\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar isProduction = process.env.NODE_ENV === \"production\";\nvar DEBUG = false;\n/**\n * Return the bottom coordinate of the layout.\n *\n * @param  {Array} layout Layout array.\n * @return {Number}       Bottom coordinate.\n */\n\nfunction bottom(layout\n/*: Layout*/\n)\n/*: number*/\n{\n  var max = 0,\n      bottomY;\n\n  for (var i = 0, len = layout.length; i < len; i++) {\n    bottomY = layout[i].y + layout[i].h;\n    if (bottomY > max) max = bottomY;\n  }\n\n  return max;\n}\n\nfunction cloneLayout(layout\n/*: Layout*/\n)\n/*: Layout*/\n{\n  var newLayout = Array(layout.length);\n\n  for (var i = 0, len = layout.length; i < len; i++) {\n    newLayout[i] = cloneLayoutItem(layout[i]);\n  }\n\n  return newLayout;\n} // Modify a layoutItem inside a layout. Returns a new Layout,\n// does not mutate. Carries over all other LayoutItems unmodified.\n\n\nfunction modifyLayout(layout\n/*: Layout*/\n, layoutItem\n/*: LayoutItem*/\n)\n/*: Layout*/\n{\n  var newLayout = Array(layout.length);\n\n  for (var i = 0, len = layout.length; i < len; i++) {\n    if (layoutItem.i === layout[i].i) {\n      newLayout[i] = layoutItem;\n    } else {\n      newLayout[i] = layout[i];\n    }\n  }\n\n  return newLayout;\n} // Function to be called to modify a layout item.\n// Does defensive clones to ensure the layout is not modified.\n\n\nfunction withLayoutItem(layout\n/*: Layout*/\n, itemKey\n/*: string*/\n, cb\n/*: LayoutItem => LayoutItem*/\n)\n/*: [Layout, ?LayoutItem]*/\n{\n  var item = getLayoutItem(layout, itemKey);\n  if (!item) return [layout, null];\n  item = cb(cloneLayoutItem(item)); // defensive clone then modify\n  // FIXME could do this faster if we already knew the index\n\n  layout = modifyLayout(layout, item);\n  return [layout, item];\n} // Fast path to cloning, since this is monomorphic\n\n\nfunction cloneLayoutItem(layoutItem\n/*: LayoutItem*/\n)\n/*: LayoutItem*/\n{\n  return {\n    w: layoutItem.w,\n    h: layoutItem.h,\n    x: layoutItem.x,\n    y: layoutItem.y,\n    i: layoutItem.i,\n    minW: layoutItem.minW,\n    maxW: layoutItem.maxW,\n    minH: layoutItem.minH,\n    maxH: layoutItem.maxH,\n    moved: Boolean(layoutItem.moved),\n    static: Boolean(layoutItem.static),\n    // These can be null/undefined\n    isDraggable: layoutItem.isDraggable,\n    isResizable: layoutItem.isResizable,\n    resizeHandles: layoutItem.resizeHandles,\n    isBounded: layoutItem.isBounded\n  };\n}\n/**\n * Comparing React `children` is a bit difficult. This is a good way to compare them.\n * This will catch differences in keys, order, and length.\n */\n\n\nfunction childrenEqual(a\n/*: ReactChildren*/\n, b\n/*: ReactChildren*/\n)\n/*: boolean*/\n{\n  return (0, _lodash.default)(_react.default.Children.map(a, function (c) {\n    return c === null || c === void 0 ? void 0 : c.key;\n  }), _react.default.Children.map(b, function (c) {\n    return c === null || c === void 0 ? void 0 : c.key;\n  }));\n}\n/**\n * See `fastRGLPropsEqual.js`.\n * We want this to run as fast as possible - it is called often - and to be\n * resilient to new props that we add. So rather than call lodash.isEqual,\n * which isn't suited to comparing props very well, we use this specialized\n * function in conjunction with preval to generate the fastest possible comparison\n * function, tuned for exactly our props.\n */\n\n/*:: type FastRGLPropsEqual = (Object, Object, Function) => boolean;*/\n\n\nvar fastRGLPropsEqual\n/*: FastRGLPropsEqual*/\n= require(\"./fastRGLPropsEqual\"); // Like the above, but a lot simpler.\n\n\nexports.fastRGLPropsEqual = fastRGLPropsEqual;\n\nfunction fastPositionEqual(a\n/*: Position*/\n, b\n/*: Position*/\n)\n/*: boolean*/\n{\n  return a.left === b.left && a.top === b.top && a.width === b.width && a.height === b.height;\n}\n/**\n * Given two layoutitems, check if they collide.\n */\n\n\nfunction collides(l1\n/*: LayoutItem*/\n, l2\n/*: LayoutItem*/\n)\n/*: boolean*/\n{\n  if (l1.i === l2.i) return false; // same element\n\n  if (l1.x + l1.w <= l2.x) return false; // l1 is left of l2\n\n  if (l1.x >= l2.x + l2.w) return false; // l1 is right of l2\n\n  if (l1.y + l1.h <= l2.y) return false; // l1 is above l2\n\n  if (l1.y >= l2.y + l2.h) return false; // l1 is below l2\n\n  return true; // boxes overlap\n}\n/**\n * Given a layout, compact it. This involves going down each y coordinate and removing gaps\n * between items.\n *\n * Does not modify layout items (clones). Creates a new layout array.\n *\n * @param  {Array} layout Layout.\n * @param  {Boolean} verticalCompact Whether or not to compact the layout\n *   vertically.\n * @return {Array}       Compacted Layout.\n */\n\n\nfunction compact(layout\n/*: Layout*/\n, compactType\n/*: CompactType*/\n, cols\n/*: number*/\n)\n/*: Layout*/\n{\n  // Statics go in the compareWith array right away so items flow around them.\n  var compareWith = getStatics(layout); // We go through the items by row and column.\n\n  var sorted = sortLayoutItems(layout, compactType); // Holding for new items.\n\n  var out = Array(layout.length);\n\n  for (var i = 0, len = sorted.length; i < len; i++) {\n    var l = cloneLayoutItem(sorted[i]); // Don't move static elements\n\n    if (!l.static) {\n      l = compactItem(compareWith, l, compactType, cols, sorted); // Add to comparison array. We only collide with items before this one.\n      // Statics are already in this array.\n\n      compareWith.push(l);\n    } // Add to output array to make sure they still come out in the right order.\n\n\n    out[layout.indexOf(sorted[i])] = l; // Clear moved flag, if it exists.\n\n    l.moved = false;\n  }\n\n  return out;\n}\n\nvar heightWidth = {\n  x: \"w\",\n  y: \"h\"\n};\n/**\n * Before moving item down, it will check if the movement will cause collisions and move those items down before.\n */\n\nfunction resolveCompactionCollision(layout\n/*: Layout*/\n, item\n/*: LayoutItem*/\n, moveToCoord\n/*: number*/\n, axis\n/*: \"x\" | \"y\"*/\n) {\n  var sizeProp = heightWidth[axis];\n  item[axis] += 1;\n  var itemIndex = layout.map(function (layoutItem) {\n    return layoutItem.i;\n  }).indexOf(item.i); // Go through each item we collide with.\n\n  for (var i = itemIndex + 1; i < layout.length; i++) {\n    var otherItem = layout[i]; // Ignore static items\n\n    if (otherItem.static) continue; // Optimization: we can break early if we know we're past this el\n    // We can do this b/c it's a sorted layout\n\n    if (otherItem.y > item.y + item.h) break;\n\n    if (collides(item, otherItem)) {\n      resolveCompactionCollision(layout, otherItem, moveToCoord + item[sizeProp], axis);\n    }\n  }\n\n  item[axis] = moveToCoord;\n}\n/**\n * Compact an item in the layout.\n *\n * Modifies item.\n *\n */\n\n\nfunction compactItem(compareWith\n/*: Layout*/\n, l\n/*: LayoutItem*/\n, compactType\n/*: CompactType*/\n, cols\n/*: number*/\n, fullLayout\n/*: Layout*/\n)\n/*: LayoutItem*/\n{\n  var compactV = compactType === \"vertical\";\n  var compactH = compactType === \"horizontal\";\n\n  if (compactV) {\n    // Bottom 'y' possible is the bottom of the layout.\n    // This allows you to do nice stuff like specify {y: Infinity}\n    // This is here because the layout must be sorted in order to get the correct bottom `y`.\n    l.y = Math.min(bottom(compareWith), l.y); // Move the element up as far as it can go without colliding.\n\n    while (l.y > 0 && !getFirstCollision(compareWith, l)) {\n      l.y--;\n    }\n  } else if (compactH) {\n    // Move the element left as far as it can go without colliding.\n    while (l.x > 0 && !getFirstCollision(compareWith, l)) {\n      l.x--;\n    }\n  } // Move it down, and keep moving it down if it's colliding.\n\n\n  var collides;\n\n  while (collides = getFirstCollision(compareWith, l)) {\n    if (compactH) {\n      resolveCompactionCollision(fullLayout, l, collides.x + collides.w, \"x\");\n    } else {\n      resolveCompactionCollision(fullLayout, l, collides.y + collides.h, \"y\");\n    } // Since we can't grow without bounds horizontally, if we've overflown, let's move it down and try again.\n\n\n    if (compactH && l.x + l.w > cols) {\n      l.x = cols - l.w;\n      l.y++;\n    }\n  } // Ensure that there are no negative positions\n\n\n  l.y = Math.max(l.y, 0);\n  l.x = Math.max(l.x, 0);\n  return l;\n}\n/**\n * Given a layout, make sure all elements fit within its bounds.\n *\n * Modifies layout items.\n *\n * @param  {Array} layout Layout array.\n * @param  {Number} bounds Number of columns.\n */\n\n\nfunction correctBounds(layout\n/*: Layout*/\n, bounds\n/*: { cols: number }*/\n)\n/*: Layout*/\n{\n  var collidesWith = getStatics(layout);\n\n  for (var i = 0, len = layout.length; i < len; i++) {\n    var l = layout[i]; // Overflows right\n\n    if (l.x + l.w > bounds.cols) l.x = bounds.cols - l.w; // Overflows left\n\n    if (l.x < 0) {\n      l.x = 0;\n      l.w = bounds.cols;\n    }\n\n    if (!l.static) collidesWith.push(l);else {\n      // If this is static and collides with other statics, we must move it down.\n      // We have to do something nicer than just letting them overlap.\n      while (getFirstCollision(collidesWith, l)) {\n        l.y++;\n      }\n    }\n  }\n\n  return layout;\n}\n/**\n * Get a layout item by ID. Used so we can override later on if necessary.\n *\n * @param  {Array}  layout Layout array.\n * @param  {String} id     ID\n * @return {LayoutItem}    Item at ID.\n */\n\n\nfunction getLayoutItem(layout\n/*: Layout*/\n, id\n/*: string*/\n)\n/*: ?LayoutItem*/\n{\n  for (var i = 0, len = layout.length; i < len; i++) {\n    if (layout[i].i === id) return layout[i];\n  }\n}\n/**\n * Returns the first item this layout collides with.\n * It doesn't appear to matter which order we approach this from, although\n * perhaps that is the wrong thing to do.\n *\n * @param  {Object} layoutItem Layout item.\n * @return {Object|undefined}  A colliding layout item, or undefined.\n */\n\n\nfunction getFirstCollision(layout\n/*: Layout*/\n, layoutItem\n/*: LayoutItem*/\n)\n/*: ?LayoutItem*/\n{\n  for (var i = 0, len = layout.length; i < len; i++) {\n    if (collides(layout[i], layoutItem)) return layout[i];\n  }\n}\n\nfunction getAllCollisions(layout\n/*: Layout*/\n, layoutItem\n/*: LayoutItem*/\n)\n/*: Array<LayoutItem>*/\n{\n  return layout.filter(function (l) {\n    return collides(l, layoutItem);\n  });\n}\n/**\n * Get all static elements.\n * @param  {Array} layout Array of layout objects.\n * @return {Array}        Array of static layout items..\n */\n\n\nfunction getStatics(layout\n/*: Layout*/\n)\n/*: Array<LayoutItem>*/\n{\n  return layout.filter(function (l) {\n    return l.static;\n  });\n}\n/**\n * Move an element. Responsible for doing cascading movements of other elements.\n *\n * Modifies layout items.\n *\n * @param  {Array}      layout            Full layout to modify.\n * @param  {LayoutItem} l                 element to move.\n * @param  {Number}     [x]               X position in grid units.\n * @param  {Number}     [y]               Y position in grid units.\n */\n\n\nfunction moveElement(layout\n/*: Layout*/\n, l\n/*: LayoutItem*/\n, x\n/*: ?number*/\n, y\n/*: ?number*/\n, isUserAction\n/*: ?boolean*/\n, preventCollision\n/*: ?boolean*/\n, compactType\n/*: CompactType*/\n, cols\n/*: number*/\n, allowOverlap\n/*: ?boolean*/\n)\n/*: Layout*/\n{\n  // If this is static and not explicitly enabled as draggable,\n  // no move is possible, so we can short-circuit this immediately.\n  if (l.static && l.isDraggable !== true) return layout; // Short-circuit if nothing to do.\n\n  if (l.y === y && l.x === x) return layout;\n  log(\"Moving element \".concat(l.i, \" to [\").concat(String(x), \",\").concat(String(y), \"] from [\").concat(l.x, \",\").concat(l.y, \"]\"));\n  var oldX = l.x;\n  var oldY = l.y; // This is quite a bit faster than extending the object\n\n  if (typeof x === \"number\") l.x = x;\n  if (typeof y === \"number\") l.y = y;\n  l.moved = true; // If this collides with anything, move it.\n  // When doing this comparison, we have to sort the items we compare with\n  // to ensure, in the case of multiple collisions, that we're getting the\n  // nearest collision.\n\n  var sorted = sortLayoutItems(layout, compactType);\n  var movingUp = compactType === \"vertical\" && typeof y === \"number\" ? oldY >= y : compactType === \"horizontal\" && typeof x === \"number\" ? oldX >= x : false; // $FlowIgnore acceptable modification of read-only array as it was recently cloned\n\n  if (movingUp) sorted = sorted.reverse();\n  var collisions = getAllCollisions(sorted, l);\n  var hasCollisions = collisions.length > 0; // We may have collisions. We can short-circuit if we've turned off collisions or\n  // allowed overlap.\n\n  if (hasCollisions && allowOverlap) {\n    // Easy, we don't need to resolve collisions. But we *did* change the layout,\n    // so clone it on the way out.\n    return cloneLayout(layout);\n  } else if (hasCollisions && preventCollision) {\n    // If we are preventing collision but not allowing overlap, we need to\n    // revert the position of this element so it goes to where it came from, rather\n    // than the user's desired location.\n    log(\"Collision prevented on \".concat(l.i, \", reverting.\"));\n    l.x = oldX;\n    l.y = oldY;\n    l.moved = false;\n    return layout; // did not change so don't clone\n  } // Move each item that collides away from this element.\n\n\n  for (var i = 0, len = collisions.length; i < len; i++) {\n    var collision = collisions[i];\n    log(\"Resolving collision between \".concat(l.i, \" at [\").concat(l.x, \",\").concat(l.y, \"] and \").concat(collision.i, \" at [\").concat(collision.x, \",\").concat(collision.y, \"]\")); // Short circuit so we can't infinite loop\n\n    if (collision.moved) continue; // Don't move static items - we have to move *this* element away\n\n    if (collision.static) {\n      layout = moveElementAwayFromCollision(layout, collision, l, isUserAction, compactType, cols);\n    } else {\n      layout = moveElementAwayFromCollision(layout, l, collision, isUserAction, compactType, cols);\n    }\n  }\n\n  return layout;\n}\n/**\n * This is where the magic needs to happen - given a collision, move an element away from the collision.\n * We attempt to move it up if there's room, otherwise it goes below.\n *\n * @param  {Array} layout            Full layout to modify.\n * @param  {LayoutItem} collidesWith Layout item we're colliding with.\n * @param  {LayoutItem} itemToMove   Layout item we're moving.\n */\n\n\nfunction moveElementAwayFromCollision(layout\n/*: Layout*/\n, collidesWith\n/*: LayoutItem*/\n, itemToMove\n/*: LayoutItem*/\n, isUserAction\n/*: ?boolean*/\n, compactType\n/*: CompactType*/\n, cols\n/*: number*/\n)\n/*: Layout*/\n{\n  var compactH = compactType === \"horizontal\"; // Compact vertically if not set to horizontal\n\n  var compactV = compactType !== \"horizontal\";\n  var preventCollision = collidesWith.static; // we're already colliding (not for static items)\n  // If there is enough space above the collision to put this element, move it there.\n  // We only do this on the main collision as this can get funky in cascades and cause\n  // unwanted swapping behavior.\n\n  if (isUserAction) {\n    // Reset isUserAction flag because we're not in the main collision anymore.\n    isUserAction = false; // Make a mock item so we don't modify the item here, only modify in moveElement.\n\n    var fakeItem\n    /*: LayoutItem*/\n    = {\n      x: compactH ? Math.max(collidesWith.x - itemToMove.w, 0) : itemToMove.x,\n      y: compactV ? Math.max(collidesWith.y - itemToMove.h, 0) : itemToMove.y,\n      w: itemToMove.w,\n      h: itemToMove.h,\n      i: \"-1\"\n    }; // No collision? If so, we can go up there; otherwise, we'll end up moving down as normal\n\n    if (!getFirstCollision(layout, fakeItem)) {\n      log(\"Doing reverse collision on \".concat(itemToMove.i, \" up to [\").concat(fakeItem.x, \",\").concat(fakeItem.y, \"].\"));\n      return moveElement(layout, itemToMove, compactH ? fakeItem.x : undefined, compactV ? fakeItem.y : undefined, isUserAction, preventCollision, compactType, cols);\n    }\n  }\n\n  return moveElement(layout, itemToMove, compactH ? itemToMove.x + 1 : undefined, compactV ? itemToMove.y + 1 : undefined, isUserAction, preventCollision, compactType, cols);\n}\n/**\n * Helper to convert a number to a percentage string.\n *\n * @param  {Number} num Any number\n * @return {String}     That number as a percentage.\n */\n\n\nfunction perc(num\n/*: number*/\n)\n/*: string*/\n{\n  return num * 100 + \"%\";\n}\n\nfunction setTransform(_ref)\n/*: Object*/\n{\n  var top = _ref.top,\n      left = _ref.left,\n      width = _ref.width,\n      height = _ref.height;\n  // Replace unitless items with px\n  var translate = \"translate(\".concat(left, \"px,\").concat(top, \"px)\");\n  return {\n    transform: translate,\n    WebkitTransform: translate,\n    MozTransform: translate,\n    msTransform: translate,\n    OTransform: translate,\n    width: \"\".concat(width, \"px\"),\n    height: \"\".concat(height, \"px\"),\n    position: \"absolute\"\n  };\n}\n\nfunction setTopLeft(_ref2)\n/*: Object*/\n{\n  var top = _ref2.top,\n      left = _ref2.left,\n      width = _ref2.width,\n      height = _ref2.height;\n  return {\n    top: \"\".concat(top, \"px\"),\n    left: \"\".concat(left, \"px\"),\n    width: \"\".concat(width, \"px\"),\n    height: \"\".concat(height, \"px\"),\n    position: \"absolute\"\n  };\n}\n/**\n * Get layout items sorted from top left to right and down.\n *\n * @return {Array} Array of layout objects.\n * @return {Array}        Layout, sorted static items first.\n */\n\n\nfunction sortLayoutItems(layout\n/*: Layout*/\n, compactType\n/*: CompactType*/\n)\n/*: Layout*/\n{\n  if (compactType === \"horizontal\") return sortLayoutItemsByColRow(layout);\n  if (compactType === \"vertical\") return sortLayoutItemsByRowCol(layout);else return layout;\n}\n/**\n * Sort layout items by row ascending and column ascending.\n *\n * Does not modify Layout.\n */\n\n\nfunction sortLayoutItemsByRowCol(layout\n/*: Layout*/\n)\n/*: Layout*/\n{\n  // Slice to clone array as sort modifies\n  return layout.slice(0).sort(function (a, b) {\n    if (a.y > b.y || a.y === b.y && a.x > b.x) {\n      return 1;\n    } else if (a.y === b.y && a.x === b.x) {\n      // Without this, we can get different sort results in IE vs. Chrome/FF\n      return 0;\n    }\n\n    return -1;\n  });\n}\n/**\n * Sort layout items by column ascending then row ascending.\n *\n * Does not modify Layout.\n */\n\n\nfunction sortLayoutItemsByColRow(layout\n/*: Layout*/\n)\n/*: Layout*/\n{\n  return layout.slice(0).sort(function (a, b) {\n    if (a.x > b.x || a.x === b.x && a.y > b.y) {\n      return 1;\n    }\n\n    return -1;\n  });\n}\n/**\n * Generate a layout using the initialLayout and children as a template.\n * Missing entries will be added, extraneous ones will be truncated.\n *\n * Does not modify initialLayout.\n *\n * @param  {Array}  initialLayout Layout passed in through props.\n * @param  {String} breakpoint    Current responsive breakpoint.\n * @param  {?String} compact      Compaction option.\n * @return {Array}                Working layout.\n */\n\n\nfunction synchronizeLayoutWithChildren(initialLayout\n/*: Layout*/\n, children\n/*: ReactChildren*/\n, cols\n/*: number*/\n, compactType\n/*: CompactType*/\n, allowOverlap\n/*: ?boolean*/\n)\n/*: Layout*/\n{\n  initialLayout = initialLayout || []; // Generate one layout item per child.\n\n  var layout\n  /*: LayoutItem[]*/\n  = [];\n\n  _react.default.Children.forEach(children, function (child\n  /*: ReactElement<any>*/\n  ) {\n    // Child may not exist\n    if ((child === null || child === void 0 ? void 0 : child.key) == null) return; // Don't overwrite if it already exists.\n\n    var exists = getLayoutItem(initialLayout, String(child.key));\n\n    if (exists) {\n      layout.push(cloneLayoutItem(exists));\n    } else {\n      if (!isProduction && child.props._grid) {\n        console.warn(\"`_grid` properties on children have been deprecated as of React 15.2. \" + \"Please use `data-grid` or add your properties directly to the `layout`.\");\n      }\n\n      var g = child.props[\"data-grid\"] || child.props._grid; // Hey, this item has a data-grid property, use it.\n\n      if (g) {\n        if (!isProduction) {\n          validateLayout([g], \"ReactGridLayout.children\");\n        } // FIXME clone not really necessary here\n\n\n        layout.push(cloneLayoutItem(_objectSpread(_objectSpread({}, g), {}, {\n          i: child.key\n        })));\n      } else {\n        // Nothing provided: ensure this is added to the bottom\n        // FIXME clone not really necessary here\n        layout.push(cloneLayoutItem({\n          w: 1,\n          h: 1,\n          x: 0,\n          y: bottom(layout),\n          i: String(child.key)\n        }));\n      }\n    }\n  }); // Correct the layout.\n\n\n  var correctedLayout = correctBounds(layout, {\n    cols: cols\n  });\n  return allowOverlap ? correctedLayout : compact(correctedLayout, compactType, cols);\n}\n/**\n * Validate a layout. Throws errors.\n *\n * @param  {Array}  layout        Array of layout items.\n * @param  {String} [contextName] Context name for errors.\n * @throw  {Error}                Validation error.\n */\n\n\nfunction validateLayout(layout\n/*: Layout*/\n)\n/*: void*/\n{\n  var contextName\n  /*: string*/\n  = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"Layout\";\n  var subProps = [\"x\", \"y\", \"w\", \"h\"];\n  if (!Array.isArray(layout)) throw new Error(contextName + \" must be an array!\");\n\n  for (var i = 0, len = layout.length; i < len; i++) {\n    var item = layout[i];\n\n    for (var j = 0; j < subProps.length; j++) {\n      if (typeof item[subProps[j]] !== \"number\") {\n        throw new Error(\"ReactGridLayout: \" + contextName + \"[\" + i + \"].\" + subProps[j] + \" must be a number!\");\n      }\n    }\n  }\n} // Legacy support for verticalCompact: false\n\n\nfunction compactType(props\n/*: ?{ verticalCompact: boolean, compactType: CompactType }*/\n)\n/*: CompactType*/\n{\n  var _ref3 = props || {},\n      verticalCompact = _ref3.verticalCompact,\n      compactType = _ref3.compactType;\n\n  return verticalCompact === false ? null : compactType;\n}\n\nfunction log() {\n  var _console;\n\n  if (!DEBUG) return; // eslint-disable-next-line no-console\n\n  (_console = console).log.apply(_console, arguments);\n}\n\nvar noop = function noop() {};\n\nexports.noop = noop;","module.exports = require(\"./build/ReactGridLayout\").default;\nmodule.exports.utils = require(\"./build/utils\");\nmodule.exports.Responsive =\n  require(\"./build/ResponsiveReactGridLayout\").default;\nmodule.exports.Responsive.utils = require(\"./build/responsiveUtils\");\nmodule.exports.WidthProvider =\n  require(\"./build/components/WidthProvider\").default;\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _reactDraggable = require(\"react-draggable\");\n\nvar _utils = require(\"./utils\");\n\nvar _propTypes = require(\"./propTypes\");\n\nvar _excluded = [\"children\", \"className\", \"draggableOpts\", \"width\", \"height\", \"handle\", \"handleSize\", \"lockAspectRatio\", \"axis\", \"minConstraints\", \"maxConstraints\", \"onResize\", \"onResizeStop\", \"onResizeStart\", \"resizeHandles\", \"transformScale\"];\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n// The base <Resizable> component.\n// This component does not have state and relies on the parent to set its props based on callback data.\nvar Resizable = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(Resizable, _React$Component);\n\n  function Resizable() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.handleRefs = {};\n    _this.lastHandleRect = null;\n    _this.slack = null;\n    return _this;\n  }\n\n  var _proto = Resizable.prototype;\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.resetData();\n  };\n\n  _proto.resetData = function resetData() {\n    this.lastHandleRect = this.slack = null;\n  } // Clamp width and height within provided constraints\n  ;\n\n  _proto.runConstraints = function runConstraints(width, height) {\n    var _this$props = this.props,\n        minConstraints = _this$props.minConstraints,\n        maxConstraints = _this$props.maxConstraints,\n        lockAspectRatio = _this$props.lockAspectRatio; // short circuit\n\n    if (!minConstraints && !maxConstraints && !lockAspectRatio) return [width, height]; // If constraining to min and max, we need to also fit width and height to aspect ratio.\n\n    if (lockAspectRatio) {\n      var ratio = this.props.width / this.props.height;\n      var deltaW = width - this.props.width;\n      var deltaH = height - this.props.height; // Find which coordinate was greater and should push the other toward it.\n      // E.g.:\n      // ratio = 1, deltaW = 10, deltaH = 5, deltaH should become 10.\n      // ratio = 2, deltaW = 10, deltaH = 6, deltaW should become 12.\n\n      if (Math.abs(deltaW) > Math.abs(deltaH * ratio)) {\n        height = width / ratio;\n      } else {\n        width = height * ratio;\n      }\n    }\n\n    var oldW = width,\n        oldH = height; // Add slack to the values used to calculate bound position. This will ensure that if\n    // we start removing slack, the element won't react to it right away until it's been\n    // completely removed.\n\n    var _ref = this.slack || [0, 0],\n        slackW = _ref[0],\n        slackH = _ref[1];\n\n    width += slackW;\n    height += slackH;\n\n    if (minConstraints) {\n      width = Math.max(minConstraints[0], width);\n      height = Math.max(minConstraints[1], height);\n    }\n\n    if (maxConstraints) {\n      width = Math.min(maxConstraints[0], width);\n      height = Math.min(maxConstraints[1], height);\n    } // If the width or height changed, we must have introduced some slack. Record it for the next iteration.\n\n\n    this.slack = [slackW + (oldW - width), slackH + (oldH - height)];\n    return [width, height];\n  }\n  /**\n   * Wrapper around drag events to provide more useful data.\n   *\n   * @param  {String} handlerName Handler name to wrap.\n   * @return {Function}           Handler function.\n   */\n  ;\n\n  _proto.resizeHandler = function resizeHandler(handlerName, axis) {\n    var _this2 = this;\n\n    return function (e, _ref2) {\n      var node = _ref2.node,\n          deltaX = _ref2.deltaX,\n          deltaY = _ref2.deltaY;\n      // Reset data in case it was left over somehow (should not be possible)\n      if (handlerName === 'onResizeStart') _this2.resetData(); // Axis restrictions\n\n      var canDragX = (_this2.props.axis === 'both' || _this2.props.axis === 'x') && axis !== 'n' && axis !== 's';\n      var canDragY = (_this2.props.axis === 'both' || _this2.props.axis === 'y') && axis !== 'e' && axis !== 'w'; // No dragging possible.\n\n      if (!canDragX && !canDragY) return; // Decompose axis for later use\n\n      var axisV = axis[0];\n      var axisH = axis[axis.length - 1]; // intentionally not axis[1], so that this catches axis === 'w' for example\n      // Track the element being dragged to account for changes in position.\n      // If a handle's position is changed between callbacks, we need to factor this in to the next callback.\n      // Failure to do so will cause the element to \"skip\" when resized upwards or leftwards.\n\n      var handleRect = node.getBoundingClientRect();\n\n      if (_this2.lastHandleRect != null) {\n        // If the handle has repositioned on either axis since last render,\n        // we need to increase our callback values by this much.\n        // Only checking 'n', 'w' since resizing by 's', 'w' won't affect the overall position on page,\n        if (axisH === 'w') {\n          var deltaLeftSinceLast = handleRect.left - _this2.lastHandleRect.left;\n          deltaX += deltaLeftSinceLast;\n        }\n\n        if (axisV === 'n') {\n          var deltaTopSinceLast = handleRect.top - _this2.lastHandleRect.top;\n          deltaY += deltaTopSinceLast;\n        }\n      } // Storage of last rect so we know how much it has really moved.\n\n\n      _this2.lastHandleRect = handleRect; // Reverse delta if using top or left drag handles.\n\n      if (axisH === 'w') deltaX = -deltaX;\n      if (axisV === 'n') deltaY = -deltaY; // Update w/h by the deltas. Also factor in transformScale.\n\n      var width = _this2.props.width + (canDragX ? deltaX / _this2.props.transformScale : 0);\n      var height = _this2.props.height + (canDragY ? deltaY / _this2.props.transformScale : 0); // Run user-provided constraints.\n\n      var _this2$runConstraints = _this2.runConstraints(width, height);\n\n      width = _this2$runConstraints[0];\n      height = _this2$runConstraints[1];\n      var dimensionsChanged = width !== _this2.props.width || height !== _this2.props.height; // Call user-supplied callback if present.\n\n      var cb = typeof _this2.props[handlerName] === 'function' ? _this2.props[handlerName] : null; // Don't call 'onResize' if dimensions haven't changed.\n\n      var shouldSkipCb = handlerName === 'onResize' && !dimensionsChanged;\n\n      if (cb && !shouldSkipCb) {\n        e.persist == null ? void 0 : e.persist();\n        cb(e, {\n          node: node,\n          size: {\n            width: width,\n            height: height\n          },\n          handle: axis\n        });\n      } // Reset internal data\n\n\n      if (handlerName === 'onResizeStop') _this2.resetData();\n    };\n  } // Render a resize handle given an axis & DOM ref. Ref *must* be attached for\n  // the underlying draggable library to work properly.\n  ;\n\n  _proto.renderResizeHandle = function renderResizeHandle(handleAxis, ref) {\n    var handle = this.props.handle; // No handle provided, make the default\n\n    if (!handle) {\n      return /*#__PURE__*/React.createElement(\"span\", {\n        className: \"react-resizable-handle react-resizable-handle-\" + handleAxis,\n        ref: ref\n      });\n    } // Handle is a function, such as:\n    // `handle={(handleAxis) => <span className={...} />}`\n\n\n    if (typeof handle === 'function') {\n      return handle(handleAxis, ref);\n    } // Handle is a React component (composite or DOM).\n\n\n    var isDOMElement = typeof handle.type === 'string';\n\n    var props = _objectSpread({\n      ref: ref\n    }, isDOMElement ? {} : {\n      handleAxis: handleAxis\n    });\n\n    return /*#__PURE__*/React.cloneElement(handle, props);\n  };\n\n  _proto.render = function render() {\n    var _this3 = this;\n\n    // Pass along only props not meant for the `<Resizable>`.`\n    // eslint-disable-next-line no-unused-vars\n    var _this$props2 = this.props,\n        children = _this$props2.children,\n        className = _this$props2.className,\n        draggableOpts = _this$props2.draggableOpts,\n        width = _this$props2.width,\n        height = _this$props2.height,\n        handle = _this$props2.handle,\n        handleSize = _this$props2.handleSize,\n        lockAspectRatio = _this$props2.lockAspectRatio,\n        axis = _this$props2.axis,\n        minConstraints = _this$props2.minConstraints,\n        maxConstraints = _this$props2.maxConstraints,\n        onResize = _this$props2.onResize,\n        onResizeStop = _this$props2.onResizeStop,\n        onResizeStart = _this$props2.onResizeStart,\n        resizeHandles = _this$props2.resizeHandles,\n        transformScale = _this$props2.transformScale,\n        p = _objectWithoutPropertiesLoose(_this$props2, _excluded); // What we're doing here is getting the child of this element, and cloning it with this element's props.\n    // We are then defining its children as:\n    // 1. Its original children (resizable's child's children), and\n    // 2. One or more draggable handles.\n\n\n    return (0, _utils.cloneElement)(children, _objectSpread(_objectSpread({}, p), {}, {\n      className: (className ? className + \" \" : '') + \"react-resizable\",\n      children: [].concat(children.props.children, resizeHandles.map(function (handleAxis) {\n        var _this3$handleRefs$han;\n\n        // Create a ref to the handle so that `<DraggableCore>` doesn't have to use ReactDOM.findDOMNode().\n        var ref = (_this3$handleRefs$han = _this3.handleRefs[handleAxis]) != null ? _this3$handleRefs$han : _this3.handleRefs[handleAxis] = /*#__PURE__*/React.createRef();\n        return /*#__PURE__*/React.createElement(_reactDraggable.DraggableCore, _extends({}, draggableOpts, {\n          nodeRef: ref,\n          key: \"resizableHandle-\" + handleAxis,\n          onStop: _this3.resizeHandler('onResizeStop', handleAxis),\n          onStart: _this3.resizeHandler('onResizeStart', handleAxis),\n          onDrag: _this3.resizeHandler('onResize', handleAxis)\n        }), _this3.renderResizeHandle(handleAxis, ref));\n      }))\n    }));\n  };\n\n  return Resizable;\n}(React.Component);\n\nexports.default = Resizable;\nResizable.propTypes = _propTypes.resizableProps;\nResizable.defaultProps = {\n  axis: 'both',\n  handleSize: [20, 20],\n  lockAspectRatio: false,\n  minConstraints: [20, 20],\n  maxConstraints: [Infinity, Infinity],\n  resizeHandles: ['se'],\n  transformScale: 1\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _Resizable = _interopRequireDefault(require(\"./Resizable\"));\n\nvar _propTypes2 = require(\"./propTypes\");\n\nvar _excluded = [\"handle\", \"handleSize\", \"onResize\", \"onResizeStart\", \"onResizeStop\", \"draggableOpts\", \"minConstraints\", \"maxConstraints\", \"lockAspectRatio\", \"axis\", \"width\", \"height\", \"resizeHandles\", \"style\", \"transformScale\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ResizableBox = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(ResizableBox, _React$Component);\n\n  function ResizableBox() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.state = {\n      width: _this.props.width,\n      height: _this.props.height,\n      propsWidth: _this.props.width,\n      propsHeight: _this.props.height\n    };\n\n    _this.onResize = function (e, data) {\n      var size = data.size;\n\n      if (_this.props.onResize) {\n        e.persist == null ? void 0 : e.persist();\n\n        _this.setState(size, function () {\n          return _this.props.onResize && _this.props.onResize(e, data);\n        });\n      } else {\n        _this.setState(size);\n      }\n    };\n\n    return _this;\n  }\n\n  ResizableBox.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n    // If parent changes height/width, set that in our state.\n    if (state.propsWidth !== props.width || state.propsHeight !== props.height) {\n      return {\n        width: props.width,\n        height: props.height,\n        propsWidth: props.width,\n        propsHeight: props.height\n      };\n    }\n\n    return null;\n  };\n\n  var _proto = ResizableBox.prototype;\n\n  _proto.render = function render() {\n    // Basic wrapper around a Resizable instance.\n    // If you use Resizable directly, you are responsible for updating the child component\n    // with a new width and height.\n    var _this$props = this.props,\n        handle = _this$props.handle,\n        handleSize = _this$props.handleSize,\n        onResize = _this$props.onResize,\n        onResizeStart = _this$props.onResizeStart,\n        onResizeStop = _this$props.onResizeStop,\n        draggableOpts = _this$props.draggableOpts,\n        minConstraints = _this$props.minConstraints,\n        maxConstraints = _this$props.maxConstraints,\n        lockAspectRatio = _this$props.lockAspectRatio,\n        axis = _this$props.axis,\n        width = _this$props.width,\n        height = _this$props.height,\n        resizeHandles = _this$props.resizeHandles,\n        style = _this$props.style,\n        transformScale = _this$props.transformScale,\n        props = _objectWithoutPropertiesLoose(_this$props, _excluded);\n\n    return /*#__PURE__*/React.createElement(_Resizable.default, {\n      axis: axis,\n      draggableOpts: draggableOpts,\n      handle: handle,\n      handleSize: handleSize,\n      height: this.state.height,\n      lockAspectRatio: lockAspectRatio,\n      maxConstraints: maxConstraints,\n      minConstraints: minConstraints,\n      onResizeStart: onResizeStart,\n      onResize: this.onResize,\n      onResizeStop: onResizeStop,\n      resizeHandles: resizeHandles,\n      transformScale: transformScale,\n      width: this.state.width\n    }, /*#__PURE__*/React.createElement(\"div\", _extends({}, props, {\n      style: _objectSpread(_objectSpread({}, style), {}, {\n        width: this.state.width + 'px',\n        height: this.state.height + 'px'\n      })\n    })));\n  };\n\n  return ResizableBox;\n}(React.Component);\n\nexports.default = ResizableBox;\nResizableBox.propTypes = _objectSpread(_objectSpread({}, _propTypes2.resizableProps), {}, {\n  children: _propTypes.default.element\n});","\"use strict\";\n\nexports.__esModule = true;\nexports.resizableProps = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDraggable = require(\"react-draggable\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar resizableProps = {\n  /*\n  * Restricts resizing to a particular axis (default: 'both')\n  * 'both' - allows resizing by width or height\n  * 'x' - only allows the width to be changed\n  * 'y' - only allows the height to be changed\n  * 'none' - disables resizing altogether\n  * */\n  axis: _propTypes.default.oneOf(['both', 'x', 'y', 'none']),\n  className: _propTypes.default.string,\n\n  /*\n  * Require that one and only one child be present.\n  * */\n  children: _propTypes.default.element.isRequired,\n\n  /*\n  * These will be passed wholesale to react-draggable's DraggableCore\n  * */\n  draggableOpts: _propTypes.default.shape({\n    allowAnyClick: _propTypes.default.bool,\n    cancel: _propTypes.default.string,\n    children: _propTypes.default.node,\n    disabled: _propTypes.default.bool,\n    enableUserSelectHack: _propTypes.default.bool,\n    offsetParent: _propTypes.default.node,\n    grid: _propTypes.default.arrayOf(_propTypes.default.number),\n    handle: _propTypes.default.string,\n    nodeRef: _propTypes.default.object,\n    onStart: _propTypes.default.func,\n    onDrag: _propTypes.default.func,\n    onStop: _propTypes.default.func,\n    onMouseDown: _propTypes.default.func,\n    scale: _propTypes.default.number\n  }),\n\n  /*\n  * Initial height\n  * */\n  height: _propTypes.default.number.isRequired,\n\n  /*\n  * Customize cursor resize handle\n  * */\n  handle: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func]),\n\n  /*\n  * If you change this, be sure to update your css\n  * */\n  handleSize: _propTypes.default.arrayOf(_propTypes.default.number),\n  lockAspectRatio: _propTypes.default.bool,\n\n  /*\n  * Max X & Y measure\n  * */\n  maxConstraints: _propTypes.default.arrayOf(_propTypes.default.number),\n\n  /*\n  * Min X & Y measure\n  * */\n  minConstraints: _propTypes.default.arrayOf(_propTypes.default.number),\n\n  /*\n  * Called on stop resize event\n  * */\n  onResizeStop: _propTypes.default.func,\n\n  /*\n  * Called on start resize event\n  * */\n  onResizeStart: _propTypes.default.func,\n\n  /*\n  * Called on resize event\n  * */\n  onResize: _propTypes.default.func,\n\n  /*\n  * Defines which resize handles should be rendered (default: 'se')\n  * 's' - South handle (bottom-center)\n  * 'w' - West handle (left-center)\n  * 'e' - East handle (right-center)\n  * 'n' - North handle (top-center)\n  * 'sw' - Southwest handle (bottom-left)\n  * 'nw' - Northwest handle (top-left)\n  * 'se' - Southeast handle (bottom-right)\n  * 'ne' - Northeast handle (top-center)\n  * */\n  resizeHandles: _propTypes.default.arrayOf(_propTypes.default.oneOf(['s', 'w', 'e', 'n', 'sw', 'nw', 'se', 'ne'])),\n\n  /*\n  * If `transform: scale(n)` is set on the parent, this should be set to `n`.\n  * */\n  transformScale: _propTypes.default.number,\n\n  /*\n   * Initial width\n   */\n  width: _propTypes.default.number.isRequired\n};\nexports.resizableProps = resizableProps;","\"use strict\";\n\nexports.__esModule = true;\nexports.cloneElement = cloneElement;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// React.addons.cloneWithProps look-alike that merges style & className.\nfunction cloneElement(element, props) {\n  if (props.style && element.props.style) {\n    props.style = _objectSpread(_objectSpread({}, element.props.style), props.style);\n  }\n\n  if (props.className && element.props.className) {\n    props.className = element.props.className + \" \" + props.className;\n  }\n\n  return /*#__PURE__*/_react.default.cloneElement(element, props);\n}","'use strict';\nmodule.exports = function() {\n  throw new Error(\"Don't instantiate Resizable directly! Use require('react-resizable').Resizable\");\n};\n\nmodule.exports.Resizable = require('./build/Resizable').default;\nmodule.exports.ResizableBox = require('./build/ResizableBox').default;\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    asyncTag = '[object AsyncFunction]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    nullTag = '[object Null]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    proxyTag = '[object Proxy]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    undefinedTag = '[object Undefined]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice,\n    symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n    nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(array);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(object);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = isEqual;\n","// GENERATED DO NOT EDIT\nmodule.exports = [\n  \"alignContent\",\n  \"MozAlignContent\",\n  \"WebkitAlignContent\",\n  \"MSAlignContent\",\n  \"OAlignContent\",\n  \"alignItems\",\n  \"MozAlignItems\",\n  \"WebkitAlignItems\",\n  \"MSAlignItems\",\n  \"OAlignItems\",\n  \"alignSelf\",\n  \"MozAlignSelf\",\n  \"WebkitAlignSelf\",\n  \"MSAlignSelf\",\n  \"OAlignSelf\",\n  \"all\",\n  \"MozAll\",\n  \"WebkitAll\",\n  \"MSAll\",\n  \"OAll\",\n  \"animation\",\n  \"MozAnimation\",\n  \"WebkitAnimation\",\n  \"MSAnimation\",\n  \"OAnimation\",\n  \"animationDelay\",\n  \"MozAnimationDelay\",\n  \"WebkitAnimationDelay\",\n  \"MSAnimationDelay\",\n  \"OAnimationDelay\",\n  \"animationDirection\",\n  \"MozAnimationDirection\",\n  \"WebkitAnimationDirection\",\n  \"MSAnimationDirection\",\n  \"OAnimationDirection\",\n  \"animationDuration\",\n  \"MozAnimationDuration\",\n  \"WebkitAnimationDuration\",\n  \"MSAnimationDuration\",\n  \"OAnimationDuration\",\n  \"animationFillMode\",\n  \"MozAnimationFillMode\",\n  \"WebkitAnimationFillMode\",\n  \"MSAnimationFillMode\",\n  \"OAnimationFillMode\",\n  \"animationIterationCount\",\n  \"MozAnimationIterationCount\",\n  \"WebkitAnimationIterationCount\",\n  \"MSAnimationIterationCount\",\n  \"OAnimationIterationCount\",\n  \"animationName\",\n  \"MozAnimationName\",\n  \"WebkitAnimationName\",\n  \"MSAnimationName\",\n  \"OAnimationName\",\n  \"animationPlayState\",\n  \"MozAnimationPlayState\",\n  \"WebkitAnimationPlayState\",\n  \"MSAnimationPlayState\",\n  \"OAnimationPlayState\",\n  \"animationTimingFunction\",\n  \"MozAnimationTimingFunction\",\n  \"WebkitAnimationTimingFunction\",\n  \"MSAnimationTimingFunction\",\n  \"OAnimationTimingFunction\",\n  \"backfaceVisibility\",\n  \"MozBackfaceVisibility\",\n  \"WebkitBackfaceVisibility\",\n  \"MSBackfaceVisibility\",\n  \"OBackfaceVisibility\",\n  \"background\",\n  \"MozBackground\",\n  \"WebkitBackground\",\n  \"MSBackground\",\n  \"OBackground\",\n  \"backgroundAttachment\",\n  \"MozBackgroundAttachment\",\n  \"WebkitBackgroundAttachment\",\n  \"MSBackgroundAttachment\",\n  \"OBackgroundAttachment\",\n  \"backgroundBlendMode\",\n  \"MozBackgroundBlendMode\",\n  \"WebkitBackgroundBlendMode\",\n  \"MSBackgroundBlendMode\",\n  \"OBackgroundBlendMode\",\n  \"backgroundClip\",\n  \"MozBackgroundClip\",\n  \"WebkitBackgroundClip\",\n  \"MSBackgroundClip\",\n  \"OBackgroundClip\",\n  \"backgroundColor\",\n  \"MozBackgroundColor\",\n  \"WebkitBackgroundColor\",\n  \"MSBackgroundColor\",\n  \"OBackgroundColor\",\n  \"backgroundImage\",\n  \"MozBackgroundImage\",\n  \"WebkitBackgroundImage\",\n  \"MSBackgroundImage\",\n  \"OBackgroundImage\",\n  \"backgroundOrigin\",\n  \"MozBackgroundOrigin\",\n  \"WebkitBackgroundOrigin\",\n  \"MSBackgroundOrigin\",\n  \"OBackgroundOrigin\",\n  \"backgroundPosition\",\n  \"MozBackgroundPosition\",\n  \"WebkitBackgroundPosition\",\n  \"MSBackgroundPosition\",\n  \"OBackgroundPosition\",\n  \"backgroundRepeat\",\n  \"MozBackgroundRepeat\",\n  \"WebkitBackgroundRepeat\",\n  \"MSBackgroundRepeat\",\n  \"OBackgroundRepeat\",\n  \"backgroundSize\",\n  \"MozBackgroundSize\",\n  \"WebkitBackgroundSize\",\n  \"MSBackgroundSize\",\n  \"OBackgroundSize\",\n  \"blockSize\",\n  \"MozBlockSize\",\n  \"WebkitBlockSize\",\n  \"MSBlockSize\",\n  \"OBlockSize\",\n  \"border\",\n  \"MozBorder\",\n  \"WebkitBorder\",\n  \"MSBorder\",\n  \"OBorder\",\n  \"borderBlockEnd\",\n  \"MozBorderBlockEnd\",\n  \"WebkitBorderBlockEnd\",\n  \"MSBorderBlockEnd\",\n  \"OBorderBlockEnd\",\n  \"borderBlockEndColor\",\n  \"MozBorderBlockEndColor\",\n  \"WebkitBorderBlockEndColor\",\n  \"MSBorderBlockEndColor\",\n  \"OBorderBlockEndColor\",\n  \"borderBlockEndStyle\",\n  \"MozBorderBlockEndStyle\",\n  \"WebkitBorderBlockEndStyle\",\n  \"MSBorderBlockEndStyle\",\n  \"OBorderBlockEndStyle\",\n  \"borderBlockEndWidth\",\n  \"MozBorderBlockEndWidth\",\n  \"WebkitBorderBlockEndWidth\",\n  \"MSBorderBlockEndWidth\",\n  \"OBorderBlockEndWidth\",\n  \"borderBlockStart\",\n  \"MozBorderBlockStart\",\n  \"WebkitBorderBlockStart\",\n  \"MSBorderBlockStart\",\n  \"OBorderBlockStart\",\n  \"borderBlockStartColor\",\n  \"MozBorderBlockStartColor\",\n  \"WebkitBorderBlockStartColor\",\n  \"MSBorderBlockStartColor\",\n  \"OBorderBlockStartColor\",\n  \"borderBlockStartStyle\",\n  \"MozBorderBlockStartStyle\",\n  \"WebkitBorderBlockStartStyle\",\n  \"MSBorderBlockStartStyle\",\n  \"OBorderBlockStartStyle\",\n  \"borderBlockStartWidth\",\n  \"MozBorderBlockStartWidth\",\n  \"WebkitBorderBlockStartWidth\",\n  \"MSBorderBlockStartWidth\",\n  \"OBorderBlockStartWidth\",\n  \"borderBottom\",\n  \"MozBorderBottom\",\n  \"WebkitBorderBottom\",\n  \"MSBorderBottom\",\n  \"OBorderBottom\",\n  \"borderBottomColor\",\n  \"MozBorderBottomColor\",\n  \"WebkitBorderBottomColor\",\n  \"MSBorderBottomColor\",\n  \"OBorderBottomColor\",\n  \"borderBottomLeftRadius\",\n  \"MozBorderBottomLeftRadius\",\n  \"WebkitBorderBottomLeftRadius\",\n  \"MSBorderBottomLeftRadius\",\n  \"OBorderBottomLeftRadius\",\n  \"borderBottomRightRadius\",\n  \"MozBorderBottomRightRadius\",\n  \"WebkitBorderBottomRightRadius\",\n  \"MSBorderBottomRightRadius\",\n  \"OBorderBottomRightRadius\",\n  \"borderBottomStyle\",\n  \"MozBorderBottomStyle\",\n  \"WebkitBorderBottomStyle\",\n  \"MSBorderBottomStyle\",\n  \"OBorderBottomStyle\",\n  \"borderBottomWidth\",\n  \"MozBorderBottomWidth\",\n  \"WebkitBorderBottomWidth\",\n  \"MSBorderBottomWidth\",\n  \"OBorderBottomWidth\",\n  \"borderCollapse\",\n  \"MozBorderCollapse\",\n  \"WebkitBorderCollapse\",\n  \"MSBorderCollapse\",\n  \"OBorderCollapse\",\n  \"borderColor\",\n  \"MozBorderColor\",\n  \"WebkitBorderColor\",\n  \"MSBorderColor\",\n  \"OBorderColor\",\n  \"borderImage\",\n  \"MozBorderImage\",\n  \"WebkitBorderImage\",\n  \"MSBorderImage\",\n  \"OBorderImage\",\n  \"borderImageOutset\",\n  \"MozBorderImageOutset\",\n  \"WebkitBorderImageOutset\",\n  \"MSBorderImageOutset\",\n  \"OBorderImageOutset\",\n  \"borderImageRepeat\",\n  \"MozBorderImageRepeat\",\n  \"WebkitBorderImageRepeat\",\n  \"MSBorderImageRepeat\",\n  \"OBorderImageRepeat\",\n  \"borderImageSlice\",\n  \"MozBorderImageSlice\",\n  \"WebkitBorderImageSlice\",\n  \"MSBorderImageSlice\",\n  \"OBorderImageSlice\",\n  \"borderImageSource\",\n  \"MozBorderImageSource\",\n  \"WebkitBorderImageSource\",\n  \"MSBorderImageSource\",\n  \"OBorderImageSource\",\n  \"borderImageWidth\",\n  \"MozBorderImageWidth\",\n  \"WebkitBorderImageWidth\",\n  \"MSBorderImageWidth\",\n  \"OBorderImageWidth\",\n  \"borderInlineEnd\",\n  \"MozBorderInlineEnd\",\n  \"WebkitBorderInlineEnd\",\n  \"MSBorderInlineEnd\",\n  \"OBorderInlineEnd\",\n  \"borderInlineEndColor\",\n  \"MozBorderInlineEndColor\",\n  \"WebkitBorderInlineEndColor\",\n  \"MSBorderInlineEndColor\",\n  \"OBorderInlineEndColor\",\n  \"borderInlineEndStyle\",\n  \"MozBorderInlineEndStyle\",\n  \"WebkitBorderInlineEndStyle\",\n  \"MSBorderInlineEndStyle\",\n  \"OBorderInlineEndStyle\",\n  \"borderInlineEndWidth\",\n  \"MozBorderInlineEndWidth\",\n  \"WebkitBorderInlineEndWidth\",\n  \"MSBorderInlineEndWidth\",\n  \"OBorderInlineEndWidth\",\n  \"borderInlineStart\",\n  \"MozBorderInlineStart\",\n  \"WebkitBorderInlineStart\",\n  \"MSBorderInlineStart\",\n  \"OBorderInlineStart\",\n  \"borderInlineStartColor\",\n  \"MozBorderInlineStartColor\",\n  \"WebkitBorderInlineStartColor\",\n  \"MSBorderInlineStartColor\",\n  \"OBorderInlineStartColor\",\n  \"borderInlineStartStyle\",\n  \"MozBorderInlineStartStyle\",\n  \"WebkitBorderInlineStartStyle\",\n  \"MSBorderInlineStartStyle\",\n  \"OBorderInlineStartStyle\",\n  \"borderInlineStartWidth\",\n  \"MozBorderInlineStartWidth\",\n  \"WebkitBorderInlineStartWidth\",\n  \"MSBorderInlineStartWidth\",\n  \"OBorderInlineStartWidth\",\n  \"borderLeft\",\n  \"MozBorderLeft\",\n  \"WebkitBorderLeft\",\n  \"MSBorderLeft\",\n  \"OBorderLeft\",\n  \"borderLeftColor\",\n  \"MozBorderLeftColor\",\n  \"WebkitBorderLeftColor\",\n  \"MSBorderLeftColor\",\n  \"OBorderLeftColor\",\n  \"borderLeftStyle\",\n  \"MozBorderLeftStyle\",\n  \"WebkitBorderLeftStyle\",\n  \"MSBorderLeftStyle\",\n  \"OBorderLeftStyle\",\n  \"borderLeftWidth\",\n  \"MozBorderLeftWidth\",\n  \"WebkitBorderLeftWidth\",\n  \"MSBorderLeftWidth\",\n  \"OBorderLeftWidth\",\n  \"borderRadius\",\n  \"MozBorderRadius\",\n  \"WebkitBorderRadius\",\n  \"MSBorderRadius\",\n  \"OBorderRadius\",\n  \"borderRight\",\n  \"MozBorderRight\",\n  \"WebkitBorderRight\",\n  \"MSBorderRight\",\n  \"OBorderRight\",\n  \"borderRightColor\",\n  \"MozBorderRightColor\",\n  \"WebkitBorderRightColor\",\n  \"MSBorderRightColor\",\n  \"OBorderRightColor\",\n  \"borderRightStyle\",\n  \"MozBorderRightStyle\",\n  \"WebkitBorderRightStyle\",\n  \"MSBorderRightStyle\",\n  \"OBorderRightStyle\",\n  \"borderRightWidth\",\n  \"MozBorderRightWidth\",\n  \"WebkitBorderRightWidth\",\n  \"MSBorderRightWidth\",\n  \"OBorderRightWidth\",\n  \"borderSpacing\",\n  \"MozBorderSpacing\",\n  \"WebkitBorderSpacing\",\n  \"MSBorderSpacing\",\n  \"OBorderSpacing\",\n  \"borderStyle\",\n  \"MozBorderStyle\",\n  \"WebkitBorderStyle\",\n  \"MSBorderStyle\",\n  \"OBorderStyle\",\n  \"borderTop\",\n  \"MozBorderTop\",\n  \"WebkitBorderTop\",\n  \"MSBorderTop\",\n  \"OBorderTop\",\n  \"borderTopColor\",\n  \"MozBorderTopColor\",\n  \"WebkitBorderTopColor\",\n  \"MSBorderTopColor\",\n  \"OBorderTopColor\",\n  \"borderTopLeftRadius\",\n  \"MozBorderTopLeftRadius\",\n  \"WebkitBorderTopLeftRadius\",\n  \"MSBorderTopLeftRadius\",\n  \"OBorderTopLeftRadius\",\n  \"borderTopRightRadius\",\n  \"MozBorderTopRightRadius\",\n  \"WebkitBorderTopRightRadius\",\n  \"MSBorderTopRightRadius\",\n  \"OBorderTopRightRadius\",\n  \"borderTopStyle\",\n  \"MozBorderTopStyle\",\n  \"WebkitBorderTopStyle\",\n  \"MSBorderTopStyle\",\n  \"OBorderTopStyle\",\n  \"borderTopWidth\",\n  \"MozBorderTopWidth\",\n  \"WebkitBorderTopWidth\",\n  \"MSBorderTopWidth\",\n  \"OBorderTopWidth\",\n  \"borderWidth\",\n  \"MozBorderWidth\",\n  \"WebkitBorderWidth\",\n  \"MSBorderWidth\",\n  \"OBorderWidth\",\n  \"bottom\",\n  \"MozBottom\",\n  \"WebkitBottom\",\n  \"MSBottom\",\n  \"OBottom\",\n  \"boxDecorationBreak\",\n  \"MozBoxDecorationBreak\",\n  \"WebkitBoxDecorationBreak\",\n  \"MSBoxDecorationBreak\",\n  \"OBoxDecorationBreak\",\n  \"boxShadow\",\n  \"MozBoxShadow\",\n  \"WebkitBoxShadow\",\n  \"MSBoxShadow\",\n  \"OBoxShadow\",\n  \"boxSizing\",\n  \"MozBoxSizing\",\n  \"WebkitBoxSizing\",\n  \"MSBoxSizing\",\n  \"OBoxSizing\",\n  \"breakAfter\",\n  \"MozBreakAfter\",\n  \"WebkitBreakAfter\",\n  \"MSBreakAfter\",\n  \"OBreakAfter\",\n  \"breakBefore\",\n  \"MozBreakBefore\",\n  \"WebkitBreakBefore\",\n  \"MSBreakBefore\",\n  \"OBreakBefore\",\n  \"breakInside\",\n  \"MozBreakInside\",\n  \"WebkitBreakInside\",\n  \"MSBreakInside\",\n  \"OBreakInside\",\n  \"captionSide\",\n  \"MozCaptionSide\",\n  \"WebkitCaptionSide\",\n  \"MSCaptionSide\",\n  \"OCaptionSide\",\n  \"caretColor\",\n  \"MozCaretColor\",\n  \"WebkitCaretColor\",\n  \"MSCaretColor\",\n  \"OCaretColor\",\n  \"ch\",\n  \"MozCh\",\n  \"WebkitCh\",\n  \"MSCh\",\n  \"OCh\",\n  \"clear\",\n  \"MozClear\",\n  \"WebkitClear\",\n  \"MSClear\",\n  \"OClear\",\n  \"clip\",\n  \"MozClip\",\n  \"WebkitClip\",\n  \"MSClip\",\n  \"OClip\",\n  \"clipPath\",\n  \"MozClipPath\",\n  \"WebkitClipPath\",\n  \"MSClipPath\",\n  \"OClipPath\",\n  \"cm\",\n  \"MozCm\",\n  \"WebkitCm\",\n  \"MSCm\",\n  \"OCm\",\n  \"color\",\n  \"MozColor\",\n  \"WebkitColor\",\n  \"MSColor\",\n  \"OColor\",\n  \"columnCount\",\n  \"MozColumnCount\",\n  \"WebkitColumnCount\",\n  \"MSColumnCount\",\n  \"OColumnCount\",\n  \"columnFill\",\n  \"MozColumnFill\",\n  \"WebkitColumnFill\",\n  \"MSColumnFill\",\n  \"OColumnFill\",\n  \"columnGap\",\n  \"MozColumnGap\",\n  \"WebkitColumnGap\",\n  \"MSColumnGap\",\n  \"OColumnGap\",\n  \"columnRule\",\n  \"MozColumnRule\",\n  \"WebkitColumnRule\",\n  \"MSColumnRule\",\n  \"OColumnRule\",\n  \"columnRuleColor\",\n  \"MozColumnRuleColor\",\n  \"WebkitColumnRuleColor\",\n  \"MSColumnRuleColor\",\n  \"OColumnRuleColor\",\n  \"columnRuleStyle\",\n  \"MozColumnRuleStyle\",\n  \"WebkitColumnRuleStyle\",\n  \"MSColumnRuleStyle\",\n  \"OColumnRuleStyle\",\n  \"columnRuleWidth\",\n  \"MozColumnRuleWidth\",\n  \"WebkitColumnRuleWidth\",\n  \"MSColumnRuleWidth\",\n  \"OColumnRuleWidth\",\n  \"columnSpan\",\n  \"MozColumnSpan\",\n  \"WebkitColumnSpan\",\n  \"MSColumnSpan\",\n  \"OColumnSpan\",\n  \"columnWidth\",\n  \"MozColumnWidth\",\n  \"WebkitColumnWidth\",\n  \"MSColumnWidth\",\n  \"OColumnWidth\",\n  \"columns\",\n  \"MozColumns\",\n  \"WebkitColumns\",\n  \"MSColumns\",\n  \"OColumns\",\n  \"content\",\n  \"MozContent\",\n  \"WebkitContent\",\n  \"MSContent\",\n  \"OContent\",\n  \"counterIncrement\",\n  \"MozCounterIncrement\",\n  \"WebkitCounterIncrement\",\n  \"MSCounterIncrement\",\n  \"OCounterIncrement\",\n  \"counterReset\",\n  \"MozCounterReset\",\n  \"WebkitCounterReset\",\n  \"MSCounterReset\",\n  \"OCounterReset\",\n  \"cursor\",\n  \"MozCursor\",\n  \"WebkitCursor\",\n  \"MSCursor\",\n  \"OCursor\",\n  \"deg\",\n  \"MozDeg\",\n  \"WebkitDeg\",\n  \"MSDeg\",\n  \"ODeg\",\n  \"direction\",\n  \"MozDirection\",\n  \"WebkitDirection\",\n  \"MSDirection\",\n  \"ODirection\",\n  \"display\",\n  \"MozDisplay\",\n  \"WebkitDisplay\",\n  \"MSDisplay\",\n  \"ODisplay\",\n  \"dpcm\",\n  \"MozDpcm\",\n  \"WebkitDpcm\",\n  \"MSDpcm\",\n  \"ODpcm\",\n  \"dpi\",\n  \"MozDpi\",\n  \"WebkitDpi\",\n  \"MSDpi\",\n  \"ODpi\",\n  \"dppx\",\n  \"MozDppx\",\n  \"WebkitDppx\",\n  \"MSDppx\",\n  \"ODppx\",\n  \"em\",\n  \"MozEm\",\n  \"WebkitEm\",\n  \"MSEm\",\n  \"OEm\",\n  \"emptyCells\",\n  \"MozEmptyCells\",\n  \"WebkitEmptyCells\",\n  \"MSEmptyCells\",\n  \"OEmptyCells\",\n  \"ex\",\n  \"MozEx\",\n  \"WebkitEx\",\n  \"MSEx\",\n  \"OEx\",\n  \"filter\",\n  \"MozFilter\",\n  \"WebkitFilter\",\n  \"MSFilter\",\n  \"OFilter\",\n  \"flexBasis\",\n  \"MozFlexBasis\",\n  \"WebkitFlexBasis\",\n  \"MSFlexBasis\",\n  \"OFlexBasis\",\n  \"flexDirection\",\n  \"MozFlexDirection\",\n  \"WebkitFlexDirection\",\n  \"MSFlexDirection\",\n  \"OFlexDirection\",\n  \"flexFlow\",\n  \"MozFlexFlow\",\n  \"WebkitFlexFlow\",\n  \"MSFlexFlow\",\n  \"OFlexFlow\",\n  \"flexGrow\",\n  \"MozFlexGrow\",\n  \"WebkitFlexGrow\",\n  \"MSFlexGrow\",\n  \"OFlexGrow\",\n  \"flexShrink\",\n  \"MozFlexShrink\",\n  \"WebkitFlexShrink\",\n  \"MSFlexShrink\",\n  \"OFlexShrink\",\n  \"flexWrap\",\n  \"MozFlexWrap\",\n  \"WebkitFlexWrap\",\n  \"MSFlexWrap\",\n  \"OFlexWrap\",\n  \"float\",\n  \"MozFloat\",\n  \"WebkitFloat\",\n  \"MSFloat\",\n  \"OFloat\",\n  \"font\",\n  \"MozFont\",\n  \"WebkitFont\",\n  \"MSFont\",\n  \"OFont\",\n  \"fontFamily\",\n  \"MozFontFamily\",\n  \"WebkitFontFamily\",\n  \"MSFontFamily\",\n  \"OFontFamily\",\n  \"fontFeatureSettings\",\n  \"MozFontFeatureSettings\",\n  \"WebkitFontFeatureSettings\",\n  \"MSFontFeatureSettings\",\n  \"OFontFeatureSettings\",\n  \"fontKerning\",\n  \"MozFontKerning\",\n  \"WebkitFontKerning\",\n  \"MSFontKerning\",\n  \"OFontKerning\",\n  \"fontLanguageOverride\",\n  \"MozFontLanguageOverride\",\n  \"WebkitFontLanguageOverride\",\n  \"MSFontLanguageOverride\",\n  \"OFontLanguageOverride\",\n  \"fontSize\",\n  \"MozFontSize\",\n  \"WebkitFontSize\",\n  \"MSFontSize\",\n  \"OFontSize\",\n  \"fontSizeAdjust\",\n  \"MozFontSizeAdjust\",\n  \"WebkitFontSizeAdjust\",\n  \"MSFontSizeAdjust\",\n  \"OFontSizeAdjust\",\n  \"fontStretch\",\n  \"MozFontStretch\",\n  \"WebkitFontStretch\",\n  \"MSFontStretch\",\n  \"OFontStretch\",\n  \"fontStyle\",\n  \"MozFontStyle\",\n  \"WebkitFontStyle\",\n  \"MSFontStyle\",\n  \"OFontStyle\",\n  \"fontSynthesis\",\n  \"MozFontSynthesis\",\n  \"WebkitFontSynthesis\",\n  \"MSFontSynthesis\",\n  \"OFontSynthesis\",\n  \"fontVariant\",\n  \"MozFontVariant\",\n  \"WebkitFontVariant\",\n  \"MSFontVariant\",\n  \"OFontVariant\",\n  \"fontVariantAlternates\",\n  \"MozFontVariantAlternates\",\n  \"WebkitFontVariantAlternates\",\n  \"MSFontVariantAlternates\",\n  \"OFontVariantAlternates\",\n  \"fontVariantCaps\",\n  \"MozFontVariantCaps\",\n  \"WebkitFontVariantCaps\",\n  \"MSFontVariantCaps\",\n  \"OFontVariantCaps\",\n  \"fontVariantEastAsian\",\n  \"MozFontVariantEastAsian\",\n  \"WebkitFontVariantEastAsian\",\n  \"MSFontVariantEastAsian\",\n  \"OFontVariantEastAsian\",\n  \"fontVariantLigatures\",\n  \"MozFontVariantLigatures\",\n  \"WebkitFontVariantLigatures\",\n  \"MSFontVariantLigatures\",\n  \"OFontVariantLigatures\",\n  \"fontVariantNumeric\",\n  \"MozFontVariantNumeric\",\n  \"WebkitFontVariantNumeric\",\n  \"MSFontVariantNumeric\",\n  \"OFontVariantNumeric\",\n  \"fontVariantPosition\",\n  \"MozFontVariantPosition\",\n  \"WebkitFontVariantPosition\",\n  \"MSFontVariantPosition\",\n  \"OFontVariantPosition\",\n  \"fontWeight\",\n  \"MozFontWeight\",\n  \"WebkitFontWeight\",\n  \"MSFontWeight\",\n  \"OFontWeight\",\n  \"fr\",\n  \"MozFr\",\n  \"WebkitFr\",\n  \"MSFr\",\n  \"OFr\",\n  \"grad\",\n  \"MozGrad\",\n  \"WebkitGrad\",\n  \"MSGrad\",\n  \"OGrad\",\n  \"grid\",\n  \"MozGrid\",\n  \"WebkitGrid\",\n  \"MSGrid\",\n  \"OGrid\",\n  \"gridArea\",\n  \"MozGridArea\",\n  \"WebkitGridArea\",\n  \"MSGridArea\",\n  \"OGridArea\",\n  \"gridAutoColumns\",\n  \"MozGridAutoColumns\",\n  \"WebkitGridAutoColumns\",\n  \"MSGridAutoColumns\",\n  \"OGridAutoColumns\",\n  \"gridAutoFlow\",\n  \"MozGridAutoFlow\",\n  \"WebkitGridAutoFlow\",\n  \"MSGridAutoFlow\",\n  \"OGridAutoFlow\",\n  \"gridAutoRows\",\n  \"MozGridAutoRows\",\n  \"WebkitGridAutoRows\",\n  \"MSGridAutoRows\",\n  \"OGridAutoRows\",\n  \"gridColumn\",\n  \"MozGridColumn\",\n  \"WebkitGridColumn\",\n  \"MSGridColumn\",\n  \"OGridColumn\",\n  \"gridColumnEnd\",\n  \"MozGridColumnEnd\",\n  \"WebkitGridColumnEnd\",\n  \"MSGridColumnEnd\",\n  \"OGridColumnEnd\",\n  \"gridColumnGap\",\n  \"MozGridColumnGap\",\n  \"WebkitGridColumnGap\",\n  \"MSGridColumnGap\",\n  \"OGridColumnGap\",\n  \"gridColumnStart\",\n  \"MozGridColumnStart\",\n  \"WebkitGridColumnStart\",\n  \"MSGridColumnStart\",\n  \"OGridColumnStart\",\n  \"gridGap\",\n  \"MozGridGap\",\n  \"WebkitGridGap\",\n  \"MSGridGap\",\n  \"OGridGap\",\n  \"gridRow\",\n  \"MozGridRow\",\n  \"WebkitGridRow\",\n  \"MSGridRow\",\n  \"OGridRow\",\n  \"gridRowEnd\",\n  \"MozGridRowEnd\",\n  \"WebkitGridRowEnd\",\n  \"MSGridRowEnd\",\n  \"OGridRowEnd\",\n  \"gridRowGap\",\n  \"MozGridRowGap\",\n  \"WebkitGridRowGap\",\n  \"MSGridRowGap\",\n  \"OGridRowGap\",\n  \"gridRowStart\",\n  \"MozGridRowStart\",\n  \"WebkitGridRowStart\",\n  \"MSGridRowStart\",\n  \"OGridRowStart\",\n  \"gridTemplate\",\n  \"MozGridTemplate\",\n  \"WebkitGridTemplate\",\n  \"MSGridTemplate\",\n  \"OGridTemplate\",\n  \"gridTemplateAreas\",\n  \"MozGridTemplateAreas\",\n  \"WebkitGridTemplateAreas\",\n  \"MSGridTemplateAreas\",\n  \"OGridTemplateAreas\",\n  \"gridTemplateColumns\",\n  \"MozGridTemplateColumns\",\n  \"WebkitGridTemplateColumns\",\n  \"MSGridTemplateColumns\",\n  \"OGridTemplateColumns\",\n  \"gridTemplateRows\",\n  \"MozGridTemplateRows\",\n  \"WebkitGridTemplateRows\",\n  \"MSGridTemplateRows\",\n  \"OGridTemplateRows\",\n  \"height\",\n  \"MozHeight\",\n  \"WebkitHeight\",\n  \"MSHeight\",\n  \"OHeight\",\n  \"hyphens\",\n  \"MozHyphens\",\n  \"WebkitHyphens\",\n  \"MSHyphens\",\n  \"OHyphens\",\n  \"hz\",\n  \"MozHz\",\n  \"WebkitHz\",\n  \"MSHz\",\n  \"OHz\",\n  \"imageOrientation\",\n  \"MozImageOrientation\",\n  \"WebkitImageOrientation\",\n  \"MSImageOrientation\",\n  \"OImageOrientation\",\n  \"imageRendering\",\n  \"MozImageRendering\",\n  \"WebkitImageRendering\",\n  \"MSImageRendering\",\n  \"OImageRendering\",\n  \"imageResolution\",\n  \"MozImageResolution\",\n  \"WebkitImageResolution\",\n  \"MSImageResolution\",\n  \"OImageResolution\",\n  \"imeMode\",\n  \"MozImeMode\",\n  \"WebkitImeMode\",\n  \"MSImeMode\",\n  \"OImeMode\",\n  \"in\",\n  \"MozIn\",\n  \"WebkitIn\",\n  \"MSIn\",\n  \"OIn\",\n  \"inherit\",\n  \"MozInherit\",\n  \"WebkitInherit\",\n  \"MSInherit\",\n  \"OInherit\",\n  \"initial\",\n  \"MozInitial\",\n  \"WebkitInitial\",\n  \"MSInitial\",\n  \"OInitial\",\n  \"inlineSize\",\n  \"MozInlineSize\",\n  \"WebkitInlineSize\",\n  \"MSInlineSize\",\n  \"OInlineSize\",\n  \"isolation\",\n  \"MozIsolation\",\n  \"WebkitIsolation\",\n  \"MSIsolation\",\n  \"OIsolation\",\n  \"justifyContent\",\n  \"MozJustifyContent\",\n  \"WebkitJustifyContent\",\n  \"MSJustifyContent\",\n  \"OJustifyContent\",\n  \"khz\",\n  \"MozKhz\",\n  \"WebkitKhz\",\n  \"MSKhz\",\n  \"OKhz\",\n  \"left\",\n  \"MozLeft\",\n  \"WebkitLeft\",\n  \"MSLeft\",\n  \"OLeft\",\n  \"letterSpacing\",\n  \"MozLetterSpacing\",\n  \"WebkitLetterSpacing\",\n  \"MSLetterSpacing\",\n  \"OLetterSpacing\",\n  \"lineBreak\",\n  \"MozLineBreak\",\n  \"WebkitLineBreak\",\n  \"MSLineBreak\",\n  \"OLineBreak\",\n  \"lineHeight\",\n  \"MozLineHeight\",\n  \"WebkitLineHeight\",\n  \"MSLineHeight\",\n  \"OLineHeight\",\n  \"listStyle\",\n  \"MozListStyle\",\n  \"WebkitListStyle\",\n  \"MSListStyle\",\n  \"OListStyle\",\n  \"listStyleImage\",\n  \"MozListStyleImage\",\n  \"WebkitListStyleImage\",\n  \"MSListStyleImage\",\n  \"OListStyleImage\",\n  \"listStylePosition\",\n  \"MozListStylePosition\",\n  \"WebkitListStylePosition\",\n  \"MSListStylePosition\",\n  \"OListStylePosition\",\n  \"listStyleType\",\n  \"MozListStyleType\",\n  \"WebkitListStyleType\",\n  \"MSListStyleType\",\n  \"OListStyleType\",\n  \"margin\",\n  \"MozMargin\",\n  \"WebkitMargin\",\n  \"MSMargin\",\n  \"OMargin\",\n  \"marginBlockEnd\",\n  \"MozMarginBlockEnd\",\n  \"WebkitMarginBlockEnd\",\n  \"MSMarginBlockEnd\",\n  \"OMarginBlockEnd\",\n  \"marginBlockStart\",\n  \"MozMarginBlockStart\",\n  \"WebkitMarginBlockStart\",\n  \"MSMarginBlockStart\",\n  \"OMarginBlockStart\",\n  \"marginBottom\",\n  \"MozMarginBottom\",\n  \"WebkitMarginBottom\",\n  \"MSMarginBottom\",\n  \"OMarginBottom\",\n  \"marginInlineEnd\",\n  \"MozMarginInlineEnd\",\n  \"WebkitMarginInlineEnd\",\n  \"MSMarginInlineEnd\",\n  \"OMarginInlineEnd\",\n  \"marginInlineStart\",\n  \"MozMarginInlineStart\",\n  \"WebkitMarginInlineStart\",\n  \"MSMarginInlineStart\",\n  \"OMarginInlineStart\",\n  \"marginLeft\",\n  \"MozMarginLeft\",\n  \"WebkitMarginLeft\",\n  \"MSMarginLeft\",\n  \"OMarginLeft\",\n  \"marginRight\",\n  \"MozMarginRight\",\n  \"WebkitMarginRight\",\n  \"MSMarginRight\",\n  \"OMarginRight\",\n  \"marginTop\",\n  \"MozMarginTop\",\n  \"WebkitMarginTop\",\n  \"MSMarginTop\",\n  \"OMarginTop\",\n  \"mask\",\n  \"MozMask\",\n  \"WebkitMask\",\n  \"MSMask\",\n  \"OMask\",\n  \"maskClip\",\n  \"MozMaskClip\",\n  \"WebkitMaskClip\",\n  \"MSMaskClip\",\n  \"OMaskClip\",\n  \"maskComposite\",\n  \"MozMaskComposite\",\n  \"WebkitMaskComposite\",\n  \"MSMaskComposite\",\n  \"OMaskComposite\",\n  \"maskImage\",\n  \"MozMaskImage\",\n  \"WebkitMaskImage\",\n  \"MSMaskImage\",\n  \"OMaskImage\",\n  \"maskMode\",\n  \"MozMaskMode\",\n  \"WebkitMaskMode\",\n  \"MSMaskMode\",\n  \"OMaskMode\",\n  \"maskOrigin\",\n  \"MozMaskOrigin\",\n  \"WebkitMaskOrigin\",\n  \"MSMaskOrigin\",\n  \"OMaskOrigin\",\n  \"maskPosition\",\n  \"MozMaskPosition\",\n  \"WebkitMaskPosition\",\n  \"MSMaskPosition\",\n  \"OMaskPosition\",\n  \"maskRepeat\",\n  \"MozMaskRepeat\",\n  \"WebkitMaskRepeat\",\n  \"MSMaskRepeat\",\n  \"OMaskRepeat\",\n  \"maskSize\",\n  \"MozMaskSize\",\n  \"WebkitMaskSize\",\n  \"MSMaskSize\",\n  \"OMaskSize\",\n  \"maskType\",\n  \"MozMaskType\",\n  \"WebkitMaskType\",\n  \"MSMaskType\",\n  \"OMaskType\",\n  \"maxHeight\",\n  \"MozMaxHeight\",\n  \"WebkitMaxHeight\",\n  \"MSMaxHeight\",\n  \"OMaxHeight\",\n  \"maxWidth\",\n  \"MozMaxWidth\",\n  \"WebkitMaxWidth\",\n  \"MSMaxWidth\",\n  \"OMaxWidth\",\n  \"minBlockSize\",\n  \"MozMinBlockSize\",\n  \"WebkitMinBlockSize\",\n  \"MSMinBlockSize\",\n  \"OMinBlockSize\",\n  \"minHeight\",\n  \"MozMinHeight\",\n  \"WebkitMinHeight\",\n  \"MSMinHeight\",\n  \"OMinHeight\",\n  \"minInlineSize\",\n  \"MozMinInlineSize\",\n  \"WebkitMinInlineSize\",\n  \"MSMinInlineSize\",\n  \"OMinInlineSize\",\n  \"minWidth\",\n  \"MozMinWidth\",\n  \"WebkitMinWidth\",\n  \"MSMinWidth\",\n  \"OMinWidth\",\n  \"mixBlendMode\",\n  \"MozMixBlendMode\",\n  \"WebkitMixBlendMode\",\n  \"MSMixBlendMode\",\n  \"OMixBlendMode\",\n  \"mm\",\n  \"MozMm\",\n  \"WebkitMm\",\n  \"MSMm\",\n  \"OMm\",\n  \"ms\",\n  \"MozMs\",\n  \"WebkitMs\",\n  \"MSMs\",\n  \"OMs\",\n  \"objectFit\",\n  \"MozObjectFit\",\n  \"WebkitObjectFit\",\n  \"MSObjectFit\",\n  \"OObjectFit\",\n  \"objectPosition\",\n  \"MozObjectPosition\",\n  \"WebkitObjectPosition\",\n  \"MSObjectPosition\",\n  \"OObjectPosition\",\n  \"offsetBlockEnd\",\n  \"MozOffsetBlockEnd\",\n  \"WebkitOffsetBlockEnd\",\n  \"MSOffsetBlockEnd\",\n  \"OOffsetBlockEnd\",\n  \"offsetBlockStart\",\n  \"MozOffsetBlockStart\",\n  \"WebkitOffsetBlockStart\",\n  \"MSOffsetBlockStart\",\n  \"OOffsetBlockStart\",\n  \"offsetInlineEnd\",\n  \"MozOffsetInlineEnd\",\n  \"WebkitOffsetInlineEnd\",\n  \"MSOffsetInlineEnd\",\n  \"OOffsetInlineEnd\",\n  \"offsetInlineStart\",\n  \"MozOffsetInlineStart\",\n  \"WebkitOffsetInlineStart\",\n  \"MSOffsetInlineStart\",\n  \"OOffsetInlineStart\",\n  \"opacity\",\n  \"MozOpacity\",\n  \"WebkitOpacity\",\n  \"MSOpacity\",\n  \"OOpacity\",\n  \"order\",\n  \"MozOrder\",\n  \"WebkitOrder\",\n  \"MSOrder\",\n  \"OOrder\",\n  \"orphans\",\n  \"MozOrphans\",\n  \"WebkitOrphans\",\n  \"MSOrphans\",\n  \"OOrphans\",\n  \"outline\",\n  \"MozOutline\",\n  \"WebkitOutline\",\n  \"MSOutline\",\n  \"OOutline\",\n  \"outlineColor\",\n  \"MozOutlineColor\",\n  \"WebkitOutlineColor\",\n  \"MSOutlineColor\",\n  \"OOutlineColor\",\n  \"outlineOffset\",\n  \"MozOutlineOffset\",\n  \"WebkitOutlineOffset\",\n  \"MSOutlineOffset\",\n  \"OOutlineOffset\",\n  \"outlineStyle\",\n  \"MozOutlineStyle\",\n  \"WebkitOutlineStyle\",\n  \"MSOutlineStyle\",\n  \"OOutlineStyle\",\n  \"outlineWidth\",\n  \"MozOutlineWidth\",\n  \"WebkitOutlineWidth\",\n  \"MSOutlineWidth\",\n  \"OOutlineWidth\",\n  \"overflow\",\n  \"MozOverflow\",\n  \"WebkitOverflow\",\n  \"MSOverflow\",\n  \"OOverflow\",\n  \"overflowWrap\",\n  \"MozOverflowWrap\",\n  \"WebkitOverflowWrap\",\n  \"MSOverflowWrap\",\n  \"OOverflowWrap\",\n  \"overflowX\",\n  \"MozOverflowX\",\n  \"WebkitOverflowX\",\n  \"MSOverflowX\",\n  \"OOverflowX\",\n  \"overflowY\",\n  \"MozOverflowY\",\n  \"WebkitOverflowY\",\n  \"MSOverflowY\",\n  \"OOverflowY\",\n  \"padding\",\n  \"MozPadding\",\n  \"WebkitPadding\",\n  \"MSPadding\",\n  \"OPadding\",\n  \"paddingBlockEnd\",\n  \"MozPaddingBlockEnd\",\n  \"WebkitPaddingBlockEnd\",\n  \"MSPaddingBlockEnd\",\n  \"OPaddingBlockEnd\",\n  \"paddingBlockStart\",\n  \"MozPaddingBlockStart\",\n  \"WebkitPaddingBlockStart\",\n  \"MSPaddingBlockStart\",\n  \"OPaddingBlockStart\",\n  \"paddingBottom\",\n  \"MozPaddingBottom\",\n  \"WebkitPaddingBottom\",\n  \"MSPaddingBottom\",\n  \"OPaddingBottom\",\n  \"paddingInlineEnd\",\n  \"MozPaddingInlineEnd\",\n  \"WebkitPaddingInlineEnd\",\n  \"MSPaddingInlineEnd\",\n  \"OPaddingInlineEnd\",\n  \"paddingInlineStart\",\n  \"MozPaddingInlineStart\",\n  \"WebkitPaddingInlineStart\",\n  \"MSPaddingInlineStart\",\n  \"OPaddingInlineStart\",\n  \"paddingLeft\",\n  \"MozPaddingLeft\",\n  \"WebkitPaddingLeft\",\n  \"MSPaddingLeft\",\n  \"OPaddingLeft\",\n  \"paddingRight\",\n  \"MozPaddingRight\",\n  \"WebkitPaddingRight\",\n  \"MSPaddingRight\",\n  \"OPaddingRight\",\n  \"paddingTop\",\n  \"MozPaddingTop\",\n  \"WebkitPaddingTop\",\n  \"MSPaddingTop\",\n  \"OPaddingTop\",\n  \"pageBreakAfter\",\n  \"MozPageBreakAfter\",\n  \"WebkitPageBreakAfter\",\n  \"MSPageBreakAfter\",\n  \"OPageBreakAfter\",\n  \"pageBreakBefore\",\n  \"MozPageBreakBefore\",\n  \"WebkitPageBreakBefore\",\n  \"MSPageBreakBefore\",\n  \"OPageBreakBefore\",\n  \"pageBreakInside\",\n  \"MozPageBreakInside\",\n  \"WebkitPageBreakInside\",\n  \"MSPageBreakInside\",\n  \"OPageBreakInside\",\n  \"pc\",\n  \"MozPc\",\n  \"WebkitPc\",\n  \"MSPc\",\n  \"OPc\",\n  \"perspective\",\n  \"MozPerspective\",\n  \"WebkitPerspective\",\n  \"MSPerspective\",\n  \"OPerspective\",\n  \"perspectiveOrigin\",\n  \"MozPerspectiveOrigin\",\n  \"WebkitPerspectiveOrigin\",\n  \"MSPerspectiveOrigin\",\n  \"OPerspectiveOrigin\",\n  \"pointerEvents\",\n  \"MozPointerEvents\",\n  \"WebkitPointerEvents\",\n  \"MSPointerEvents\",\n  \"OPointerEvents\",\n  \"position\",\n  \"MozPosition\",\n  \"WebkitPosition\",\n  \"MSPosition\",\n  \"OPosition\",\n  \"pt\",\n  \"MozPt\",\n  \"WebkitPt\",\n  \"MSPt\",\n  \"OPt\",\n  \"px\",\n  \"MozPx\",\n  \"WebkitPx\",\n  \"MSPx\",\n  \"OPx\",\n  \"q\",\n  \"MozQ\",\n  \"WebkitQ\",\n  \"MSQ\",\n  \"OQ\",\n  \"quotes\",\n  \"MozQuotes\",\n  \"WebkitQuotes\",\n  \"MSQuotes\",\n  \"OQuotes\",\n  \"rad\",\n  \"MozRad\",\n  \"WebkitRad\",\n  \"MSRad\",\n  \"ORad\",\n  \"rem\",\n  \"MozRem\",\n  \"WebkitRem\",\n  \"MSRem\",\n  \"ORem\",\n  \"resize\",\n  \"MozResize\",\n  \"WebkitResize\",\n  \"MSResize\",\n  \"OResize\",\n  \"revert\",\n  \"MozRevert\",\n  \"WebkitRevert\",\n  \"MSRevert\",\n  \"ORevert\",\n  \"right\",\n  \"MozRight\",\n  \"WebkitRight\",\n  \"MSRight\",\n  \"ORight\",\n  \"rubyAlign\",\n  \"MozRubyAlign\",\n  \"WebkitRubyAlign\",\n  \"MSRubyAlign\",\n  \"ORubyAlign\",\n  \"rubyMerge\",\n  \"MozRubyMerge\",\n  \"WebkitRubyMerge\",\n  \"MSRubyMerge\",\n  \"ORubyMerge\",\n  \"rubyPosition\",\n  \"MozRubyPosition\",\n  \"WebkitRubyPosition\",\n  \"MSRubyPosition\",\n  \"ORubyPosition\",\n  \"s\",\n  \"MozS\",\n  \"WebkitS\",\n  \"MSS\",\n  \"OS\",\n  \"scrollBehavior\",\n  \"MozScrollBehavior\",\n  \"WebkitScrollBehavior\",\n  \"MSScrollBehavior\",\n  \"OScrollBehavior\",\n  \"scrollSnapCoordinate\",\n  \"MozScrollSnapCoordinate\",\n  \"WebkitScrollSnapCoordinate\",\n  \"MSScrollSnapCoordinate\",\n  \"OScrollSnapCoordinate\",\n  \"scrollSnapDestination\",\n  \"MozScrollSnapDestination\",\n  \"WebkitScrollSnapDestination\",\n  \"MSScrollSnapDestination\",\n  \"OScrollSnapDestination\",\n  \"scrollSnapType\",\n  \"MozScrollSnapType\",\n  \"WebkitScrollSnapType\",\n  \"MSScrollSnapType\",\n  \"OScrollSnapType\",\n  \"shapeImageThreshold\",\n  \"MozShapeImageThreshold\",\n  \"WebkitShapeImageThreshold\",\n  \"MSShapeImageThreshold\",\n  \"OShapeImageThreshold\",\n  \"shapeMargin\",\n  \"MozShapeMargin\",\n  \"WebkitShapeMargin\",\n  \"MSShapeMargin\",\n  \"OShapeMargin\",\n  \"shapeOutside\",\n  \"MozShapeOutside\",\n  \"WebkitShapeOutside\",\n  \"MSShapeOutside\",\n  \"OShapeOutside\",\n  \"tabSize\",\n  \"MozTabSize\",\n  \"WebkitTabSize\",\n  \"MSTabSize\",\n  \"OTabSize\",\n  \"tableLayout\",\n  \"MozTableLayout\",\n  \"WebkitTableLayout\",\n  \"MSTableLayout\",\n  \"OTableLayout\",\n  \"textAlign\",\n  \"MozTextAlign\",\n  \"WebkitTextAlign\",\n  \"MSTextAlign\",\n  \"OTextAlign\",\n  \"textAlignLast\",\n  \"MozTextAlignLast\",\n  \"WebkitTextAlignLast\",\n  \"MSTextAlignLast\",\n  \"OTextAlignLast\",\n  \"textCombineUpright\",\n  \"MozTextCombineUpright\",\n  \"WebkitTextCombineUpright\",\n  \"MSTextCombineUpright\",\n  \"OTextCombineUpright\",\n  \"textDecoration\",\n  \"MozTextDecoration\",\n  \"WebkitTextDecoration\",\n  \"MSTextDecoration\",\n  \"OTextDecoration\",\n  \"textDecorationColor\",\n  \"MozTextDecorationColor\",\n  \"WebkitTextDecorationColor\",\n  \"MSTextDecorationColor\",\n  \"OTextDecorationColor\",\n  \"textDecorationLine\",\n  \"MozTextDecorationLine\",\n  \"WebkitTextDecorationLine\",\n  \"MSTextDecorationLine\",\n  \"OTextDecorationLine\",\n  \"textDecorationStyle\",\n  \"MozTextDecorationStyle\",\n  \"WebkitTextDecorationStyle\",\n  \"MSTextDecorationStyle\",\n  \"OTextDecorationStyle\",\n  \"textEmphasis\",\n  \"MozTextEmphasis\",\n  \"WebkitTextEmphasis\",\n  \"MSTextEmphasis\",\n  \"OTextEmphasis\",\n  \"textEmphasisColor\",\n  \"MozTextEmphasisColor\",\n  \"WebkitTextEmphasisColor\",\n  \"MSTextEmphasisColor\",\n  \"OTextEmphasisColor\",\n  \"textEmphasisPosition\",\n  \"MozTextEmphasisPosition\",\n  \"WebkitTextEmphasisPosition\",\n  \"MSTextEmphasisPosition\",\n  \"OTextEmphasisPosition\",\n  \"textEmphasisStyle\",\n  \"MozTextEmphasisStyle\",\n  \"WebkitTextEmphasisStyle\",\n  \"MSTextEmphasisStyle\",\n  \"OTextEmphasisStyle\",\n  \"textIndent\",\n  \"MozTextIndent\",\n  \"WebkitTextIndent\",\n  \"MSTextIndent\",\n  \"OTextIndent\",\n  \"textOrientation\",\n  \"MozTextOrientation\",\n  \"WebkitTextOrientation\",\n  \"MSTextOrientation\",\n  \"OTextOrientation\",\n  \"textOverflow\",\n  \"MozTextOverflow\",\n  \"WebkitTextOverflow\",\n  \"MSTextOverflow\",\n  \"OTextOverflow\",\n  \"textRendering\",\n  \"MozTextRendering\",\n  \"WebkitTextRendering\",\n  \"MSTextRendering\",\n  \"OTextRendering\",\n  \"textShadow\",\n  \"MozTextShadow\",\n  \"WebkitTextShadow\",\n  \"MSTextShadow\",\n  \"OTextShadow\",\n  \"textTransform\",\n  \"MozTextTransform\",\n  \"WebkitTextTransform\",\n  \"MSTextTransform\",\n  \"OTextTransform\",\n  \"textUnderlinePosition\",\n  \"MozTextUnderlinePosition\",\n  \"WebkitTextUnderlinePosition\",\n  \"MSTextUnderlinePosition\",\n  \"OTextUnderlinePosition\",\n  \"top\",\n  \"MozTop\",\n  \"WebkitTop\",\n  \"MSTop\",\n  \"OTop\",\n  \"touchAction\",\n  \"MozTouchAction\",\n  \"WebkitTouchAction\",\n  \"MSTouchAction\",\n  \"OTouchAction\",\n  \"transform\",\n  \"MozTransform\",\n  \"WebkitTransform\",\n  \"msTransform\",\n  \"OTransform\",\n  \"transformBox\",\n  \"MozTransformBox\",\n  \"WebkitTransformBox\",\n  \"MSTransformBox\",\n  \"OTransformBox\",\n  \"transformOrigin\",\n  \"MozTransformOrigin\",\n  \"WebkitTransformOrigin\",\n  \"MSTransformOrigin\",\n  \"OTransformOrigin\",\n  \"transformStyle\",\n  \"MozTransformStyle\",\n  \"WebkitTransformStyle\",\n  \"MSTransformStyle\",\n  \"OTransformStyle\",\n  \"transition\",\n  \"MozTransition\",\n  \"WebkitTransition\",\n  \"MSTransition\",\n  \"OTransition\",\n  \"transitionDelay\",\n  \"MozTransitionDelay\",\n  \"WebkitTransitionDelay\",\n  \"MSTransitionDelay\",\n  \"OTransitionDelay\",\n  \"transitionDuration\",\n  \"MozTransitionDuration\",\n  \"WebkitTransitionDuration\",\n  \"MSTransitionDuration\",\n  \"OTransitionDuration\",\n  \"transitionProperty\",\n  \"MozTransitionProperty\",\n  \"WebkitTransitionProperty\",\n  \"MSTransitionProperty\",\n  \"OTransitionProperty\",\n  \"transitionTimingFunction\",\n  \"MozTransitionTimingFunction\",\n  \"WebkitTransitionTimingFunction\",\n  \"MSTransitionTimingFunction\",\n  \"OTransitionTimingFunction\",\n  \"turn\",\n  \"MozTurn\",\n  \"WebkitTurn\",\n  \"MSTurn\",\n  \"OTurn\",\n  \"unicodeBidi\",\n  \"MozUnicodeBidi\",\n  \"WebkitUnicodeBidi\",\n  \"MSUnicodeBidi\",\n  \"OUnicodeBidi\",\n  \"unset\",\n  \"MozUnset\",\n  \"WebkitUnset\",\n  \"MSUnset\",\n  \"OUnset\",\n  \"verticalAlign\",\n  \"MozVerticalAlign\",\n  \"WebkitVerticalAlign\",\n  \"MSVerticalAlign\",\n  \"OVerticalAlign\",\n  \"vh\",\n  \"MozVh\",\n  \"WebkitVh\",\n  \"MSVh\",\n  \"OVh\",\n  \"visibility\",\n  \"MozVisibility\",\n  \"WebkitVisibility\",\n  \"MSVisibility\",\n  \"OVisibility\",\n  \"vmax\",\n  \"MozVmax\",\n  \"WebkitVmax\",\n  \"MSVmax\",\n  \"OVmax\",\n  \"vmin\",\n  \"MozVmin\",\n  \"WebkitVmin\",\n  \"MSVmin\",\n  \"OVmin\",\n  \"vw\",\n  \"MozVw\",\n  \"WebkitVw\",\n  \"MSVw\",\n  \"OVw\",\n  \"whiteSpace\",\n  \"MozWhiteSpace\",\n  \"WebkitWhiteSpace\",\n  \"MSWhiteSpace\",\n  \"OWhiteSpace\",\n  \"widows\",\n  \"MozWidows\",\n  \"WebkitWidows\",\n  \"MSWidows\",\n  \"OWidows\",\n  \"width\",\n  \"MozWidth\",\n  \"WebkitWidth\",\n  \"MSWidth\",\n  \"OWidth\",\n  \"willChange\",\n  \"MozWillChange\",\n  \"WebkitWillChange\",\n  \"MSWillChange\",\n  \"OWillChange\",\n  \"wordBreak\",\n  \"MozWordBreak\",\n  \"WebkitWordBreak\",\n  \"MSWordBreak\",\n  \"OWordBreak\",\n  \"wordSpacing\",\n  \"MozWordSpacing\",\n  \"WebkitWordSpacing\",\n  \"MSWordSpacing\",\n  \"OWordSpacing\",\n  \"wordWrap\",\n  \"MozWordWrap\",\n  \"WebkitWordWrap\",\n  \"MSWordWrap\",\n  \"OWordWrap\",\n  \"writingMode\",\n  \"MozWritingMode\",\n  \"WebkitWritingMode\",\n  \"MSWritingMode\",\n  \"OWritingMode\",\n  \"zIndex\",\n  \"MozZIndex\",\n  \"WebkitZIndex\",\n  \"MSZIndex\",\n  \"OZIndex\",\n  \"fontSize\",\n  \"MozFontSize\",\n  \"WebkitFontSize\",\n  \"MSFontSize\",\n  \"OFontSize\",\n  \"flex\",\n  \"MozFlex\",\n  \"WebkitFlex\",\n  \"MSFlex\",\n  \"OFlex\",\n  \"fr\",\n  \"MozFr\",\n  \"WebkitFr\",\n  \"MSFr\",\n  \"OFr\",\n  \"overflowScrolling\",\n  \"MozOverflowScrolling\",\n  \"WebkitOverflowScrolling\",\n  \"MSOverflowScrolling\",\n  \"OOverflowScrolling\",\n  \"userSelect\",\n  \"MozUserSelect\",\n  \"WebkitUserSelect\",\n  \"MSUserSelect\",\n  \"OUserSelect\"\n]\n","var properties = require('./css-properties.js');\nvar PropTypes = require('prop-types');\n\nmodule.exports = function(props, propName, componentName) {\n  var styles = props[propName];\n  if (!styles) {\n    return;\n  }\n\n  var failures = [];\n  Object.keys(styles).forEach(function(styleKey){\n    if (properties.indexOf(styleKey) === -1) {\n      failures.push(styleKey);\n    }\n  });\n  if (failures.length) {\n    throw new Error('Prop ' + propName + ' passed to ' + componentName + '. Has invalid keys ' + failures.join(', '));\n  }\n};\n\nmodule.exports.isRequired = function(props, propName, componentName) {\n  if (!props[propName]) {\n    throw new Error('Prop ' + propName + ' passed to ' + componentName + ' is required');\n  }\n  return module.exports(props, propName, componentName);\n};\n\nmodule.exports.supportingArrays = PropTypes.oneOfType([\n  PropTypes.arrayOf(module.exports),\n  module.exports\n]);\n"],"names":["getDefaultCondition","type","query","params","reducer","evaluator","operator","getAlertingValidationMessage","async","transformations","targets","datasourceSrv","datasource","length","alertingNotSupported","templateVariablesNotSupported","target","dsRef","ds","get","meta","alerting","targetContainsTemplate","DynamicTableWithGuidelines","renderExpandedContent","props","styles","useStyles2","getStyles","item","index","items","className","cx","contentGuideline","guideline","undefined","renderPrefixHeader","relative","headerGuideline","renderPrefixCell","_","topGuideline","bottomGuideline","theme","css","colors","border","medium","breakpoints","down","RuleLocation","namespace","group","Icon","name","RuleDetails","rule","promRule","rulesSource","annotations","Object","entries","filter","value","trim","RuleDetailsActionButtons","wrapper","leftSide","labels","keys","DetailsField","label","horizontal","AlertLabels","RuleDetailsExpression","RuleDetailsAnnotations","rightSide","RuleDetailsDataSources","RuleDetailsMatchingInstances","up","RulesTable","rules","showGuidelines","emptyMessage","showGroupColumn","showSummaryColumn","wrapperClass","wrapperMargin","useMemo","seenKeys","map","ruleIdx","key","JSON","stringify","includes","push","id","data","columns","hasRuler","useHasRuler","renderCell","rulerRule","isDeleting","isCreating","RuleState","size","RuleHealth","Annotation","useColumns","TableComponent","DynamicTable","cols","isExpandable","spacing","background","secondary","shape","borderRadius","rulerRules","useUnifiedAlertingSelector","state","useCallback","rulesSourceName","GRAFANA_RULES_SOURCE_NAME","result","DashboardFailed","initError","useStyles","dashboardLoading","Alert","severity","AppNotificationSeverity","title","message","getMessageFromError","error","DashboardLoading","initPhase","dashboardLoadingText","VerticalGroup","HorizontalGroup","align","justify","Spinner","inline","Button","variant","icon","onClick","locationService","invisibleToVisible","keyframes","typography","lg","SaveLibraryPanelModal","panel","folderId","isUnsavedPrompt","onDismiss","onConfirm","onDiscard","searchString","setSearchString","useState","dashState","useAsync","searchHits","getConnectedDashboards","libraryPanel","uid","dash","filteredDashboards","setFilteredDashboards","useDebounce","dashName","toLowerCase","saveLibraryPanel","usePanelSave","getModalStyles","discardAndClose","Modal","isOpen","textInfo","connectedDashboards","Input","dashboardSearch","prefix","placeholder","onChange","e","currentTarget","loading","myTable","i","fill","then","discardPanelChanges","dispatch","getStore","getPanel","panelEditor","configRev","setDiscardChanges","skipPanelUpdate","modifiedPanel","panelToUpdate","repeatPanelId","exitPanelEditor","dashboard","getModel","getSourcePanel","shouldDiscardChanges","modifiedSaveModel","getSaveModel","sourcePanel","panelTypeChanged","panels","restoreModel","pick","pluginChanged","plugin","cleanUpKey","generateNewKey","panelModelAndPluginReady","setTimeout","getQueryRunner","useLastResultFrom","repeat","processRepeats","updateDuplicateLibraryPanels","render","cleanUpPanelState","closeEditor","UnsavedChangesModal","onSaveSuccess","SaveDashboardButton","DashboardPrompt","React","setState","original","useDispatch","originalPath","showModal","hideModal","useContext","ModalsContext","useEffect","timeoutId","pathname","getSaveModelClone","savedEventUnsub","appEvents","DashboardSavedEvent","clearTimeout","unsubscribe","handleUnload","event","ignoreChanges","hasChanges","preventDefault","returnValue","window","addEventListener","removeEventListener","when","location","panelInEdit","search","URLSearchParams","hasChanged","has","moveToBlockedLocationAfterReactStateUpdate","current","contextSrv","canSave","fromScript","fromFile","cleanDashboardFromIgnoredChanges","dashData","model","DashboardModel","expandRows","time","refresh","schemaVersion","timezone","iteration","scopedVars","legend","sort","sortDesc","each","getVariables","variable","options","filters","currentClean","originalClean","currentTimepicker","find","nav","originalTimepicker","now","displayName","usePanelLatestData","checkSchema","querySubscription","useRef","latestData","setLatestData","lastRev","lastUpdate","getData","subscribe","next","structureRev","Date","withFieldConfig","withTransforms","isLoading","LoadingState","hasSeries","series","InspectMetadataTab","metadataDatasource","components","MetadataInspector","InspectContent","tabs","isDataLoading","dataOptions","defaultTab","onDataOptionsChange","onClose","currentTab","setCurrentTab","InspectTab","activeTab","getTemplateSrv","replace","Drawer","subtitle","formatStats","width","expandable","scrollableContent","TabsBar","t","Tab","active","onChangeTab","InspectDataTab","onOptionsChange","timeZone","InspectJSONTab","InspectErrorTab","InspectStatsTab","getTimezone","QueryInspector","onRefreshQuery","request","queryCount","requestTime","endTime","startTime","formattedValueToString","getValueFormat","PanelInspector","connect","panelState","getPanelStateForModel","setDataOptions","useLocation","metaDs","frame","custom","dataSource","getDataSourceSrv","useDatasourceMetadata","supportsDataQuery","supplier","grafanaPanelInspectActionSupplier","getActions","canEdit","useInspectTabs","inspect","inspectTab","_classCallCheck","instance","Constructor","TypeError","_defineProperties","descriptor","enumerable","configurable","writable","defineProperty","_createClass","protoProps","staticProps","prototype","_defineProperty","obj","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","apply","_objectSpread2","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","_inherits","subClass","superClass","create","constructor","_setPrototypeOf","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","p","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","toString","call","_assertThisInitialized","self","ReferenceError","_possibleConstructorReturn","_createSuper","Derived","Super","NewTarget","this","Pane","_React$PureComponent","_super","_this$props","children","split","styleProps","style","eleRef","classes","flex","position","outline","height","display","assign","ref","join","propTypes","defaultProps","RESIZER_DEFAULT_CLASSNAME","Resizer","_React$Component","_onClick","_onDoubleClick","onDoubleClick","_onMouseDown","onMouseDown","_onTouchEnd","onTouchEnd","_onTouchStart","onTouchStart","resizerClassName","role","unFocus","document","selection","empty","getSelection","removeAllRanges","getDefaultSize","defaultSize","minSize","maxSize","draggedSize","min","max","Infinity","Math","SplitPane","_this","bind","onMouseMove","onTouchMove","onMouseUp","primary","initialSize","resized","pane1Size","pane2Size","instanceProps","getSizeUpdate","eventWithTouches","touches","clientX","clientY","allowResize","onDragStarted","_this$props2","step","_this$state","isPrimaryFirst","pane1","pane2","ref2","node","node2","getBoundingClientRect","positionDelta","abs","sizeDelta","parseInt","getComputedStyle","order","newMaxSize","splitPane","newSize","newPosition","_this$props3","onDragFinished","_this$state2","_this2","_this$props4","onResizerClick","onResizerDoubleClick","paneClassName","pane1ClassName","pane2ClassName","paneStyle","pane1StyleProps","pane1Style","pane2StyleProps","pane2Style","resizerStyle","_this$state3","disabledClass","resizerClassNamesIncludingDefault","concat","notNullChildren","c","removeNullChildren","overflow","MozUserSelect","WebkitUserSelect","msUserSelect","userSelect","flexDirection","left","right","bottom","minHeight","top","pane1Classes","pane2Classes","nextProps","prevState","newState","isPanel1Primary","isRequired","SplitPaneWrapper","PureComponent","createRef","rafToken","cancelAnimationFrame","requestAnimationFrame","forceUpdate","pane","body","cursor","updateUiState","Top","topPaneSize","innerHeight","rightPaneSize","innerWidth","componentDidMount","updateSplitPaneSize","componentWillUnmount","renderHorizontalSplit","leftPaneComponents","uiState","config","Array","isArray","resizerH","rightPaneVisible","rightPaneComponents","resizerV","Right","stylesFactory","handleColor","palette","blue95","paneSpacing","md","resizer","panelBorder","PickerRenderer","PickerToRender","variableAdapters","picker","PickerLabel","hide","VariableHide","labelOrName","elementId","description","Tooltip","content","placement","selectors","htmlFor","SubMenuItems","variables","visibleVariables","setVisibleVariables","mapStateToProps","angularPanelComponent","angularComponent","mapDispatchToProps","changePanelPlugin","AngularPanelOptionsUnconnected","super","loadAngularOptions","componentDidUpdate","prevProps","cleanUpAngularOptions","angularOptions","destroy","element","scope","getScope","$$childHead","panelCtrl","ctrl","initEditMode","onPluginTypeChange","pluginId","template","editorTabs","tab","defaultValue","store","loader","getAngularLoader","scopeProps","toggleOptionGroup","saveSectionOpenState","load","digest","elem","AngularPanelOptions","DynamicConfigValueEditor","property","context","registry","onRemove","isSystemOverride","searchQuery","useTheme","getIfExists","isCollapsible","FieldConfigProperty","labelCategory","category","editor","renderLabel","includeDescription","includeCounter","isExpanded","Label","textToHighlight","searchWords","highlightClassName","getItemsCount","Counter","IconButton","OptionsPaneCategory","renderTitle","isNested","isOpenDefault","override","Field","collapsibleOverrideEditor","formSpacingBase","OverrideCategoryTitle","matcherUi","overrideName","onOverrideRemove","propertyNames","properties","prop","matcherOptions","optionsToLabel","matcher","overrideDetails","sm","propertyPickerWrapper","textWeak","weight","regular","xl","unknownLabel","getFieldOverrideCategories","categories","currentFieldConfig","fieldConfig","fieldConfigRegistry","isEmpty","onOverrideChange","overrides","cloneDeep","onFieldConfigsChange","overrideIndex","splice","getSuggestions","getDataLinksVariableSuggestions","isOverride","idx","fieldMatchersUI","configPropertiesOptions","getOverrideProperties","isSystemOverrideGuard","forceOpen","OptionsPaneCategoryDescriptor","onMatcherConfigChange","onDynamicConfigValueAdd","registryItem","propertyConfig","addItem","OptionsPaneItemDescriptor","component","propIdx","registryItemForProperty","onPropertyChange","onPropertyRemove","skipField","ValuePicker","isFullWidth","menuPlacement","v","customRender","AddOverrideButtonContainer","excludeFromPicker","onOverrideAdd","list","hideFromOverrides","getBorderTopStyles","borderTop","weak","padding","LibraryPanelInformation","formatDate","isPanelModelLibraryPanel","info","libraryPanelInfo","updated","updatedBy","avatarUrl","userAvatar","src","alt","textSemiWeak","getLibraryPanelOptionsCategory","onPanelConfigChange","popularRank","onBlur","RepeatRowSelect","useSelector","getVariablesByKey","getLastKey","variableOptions","unshift","onSelectChange","option","Select","inputId","menuShouldPortal","getPanelFrameCategory","TextArea","Switch","transparent","checked","addCategory","itemsCount","links","DataLinksInlineEditor","getPanelLinksVariableSuggestions","showIf","RadioButtonGroup","repeatDirection","Boolean","maxPerRowOptions","maxPerRow","OptionSearchEngine","searchRegex","RegExp","sortedHits","collectHits","compareHit","x","sortedOverridesHits","optionHits","overrideHits","buildOverrideHitCategories","totalCount","getAllOptionsCount","hits","categoryNameMatch","test","rank","total","hit","parent","values","getRecentOptions","allOptions","popularOptions","OptionsPaneOptions","setSearchQuery","listMode","setListMode","OptionFilter","All","panelFrameOptions","vizOptions","libraryPanelOptions","getVisualizationOptions","instanceState","justOverrides","mainBoxElements","isSearching","optionRadioFilters","getOptionRadioFilters","engine","renderSearchHits","angularPanelCtrl","searchNotice","Overrides","Recent","showSearchRadioButtons","formBox","formRow","FilterInput","fullWidth","scrollWrapper","CustomScrollbar","autoHeightMin","mainBox","warning","text","searchBox","borderColor","closeButton","getPanelPluginWithFallback","panelType","plugins","getPanelPluginNotFound","VisualizationButton","isPanelOptionsVisible","ui","isVizPickerOpen","ButtonGroup","ToolbarButton","vizButton","tooltip","imgSrc","logos","small","toggleVizPicker","setPanelEditorUIState","ChangeLibraryPanelModal","isLibraryPanel","ConfirmModal","confirmText","dismissText","PanelLibraryOptionsGroup","showingAddPanelModal","setShowingAddPanelModal","changeToPanel","setChangeToPanel","panelFilter","setPanelFilter","onPanelFilterChange","getDashboardSrv","getCurrent","PanelTypeFilter","libraryPanelsView","LibraryPanelsView","currentPanelId","onClickCard","showSecondaryActions","AddLibraryPanelModal","initialFolderId","changeToLibraryPanel","panelsToCheckFirst","VisualizationSuggestionCard","suggestion","showTitle","innerStyles","outerStyles","renderWidth","renderHeight","aspectRatio","showHeight","transform","getPreviewDimensionsAndStyles","cardOptions","commonButtonProps","vizBox","imgBox","img","preview","previewModifier","renderContainer","PanelRenderer","hoverPane","transitions","duration","short","bodySmall","fontSize","fontWeightMedium","VisualizationSuggestions","suggestions","builder","VisualizationSuggestionsBuilder","importPanelPlugin","getSuggestionsSupplier","getSuggestionsForData","getList","dataSummary","fieldCount","skipDataQuery","hideFromList","a","b","score","VisualizationSuggestionScore","getAllSuggestions","setShowTitle","useLocalStorage","filteredSuggestions","regex","s","filterSuggestionsBySearch","disableHeight","columnCount","floor","previewWidth","filterRow","infoText","grid","gridTemplateColumns","heading","h5","margin","justifyContent","alignItems","paddingBottom","color","fontStyle","gridGap","marginBottom","VizTypePickerPlugin","isCurrent","disabled","PanelTypeCard","showBadge","VizTypePicker","pluginsList","getAllPanelPluginMeta","filteredPluginTypes","filterPluginList","EmptySearchResult","withModKey","metaKey","ctrlKey","altKey","VisualizationSelectPane","LS_VISUALIZATION_SELECT_TAB_KEY","VisualizationSelectPaneTab","searchRef","onVizChange","pluginChange","focus","radioOptions","openWrapper","searchRow","autoFocus","customFieldMargin","scrollContent","gray33","bg1","border1","OptionsPane","onPanelOptionsChanged","vizButtonWrapper","optionsWrapper","legacyOptions","PanelEditorTableView","setOptions","frameIndex","showHeader","showTypeIcons","timeSrv","getTimeSrv","timeData","applyPanelTimeOverrides","timeRange","sub","events","RefreshEvent","runAllPanelQueries","PanelChrome","PanelHeaderCorner","PanelNotSupported","onBackToQueries","PanelEditorTabId","Layout","marginTop","StateHistory","stateHistoryItems","panelId","onRefresh","getBackendSrv","post","dashboardId","stateModel","alertDef","ConfirmButton","clearHistory","confirmVariant","stateClass","iconClass","alertName","TestRuleResult","allNodesExpanded","testRuleResponse","formattedJson","AppEvents","collapse","expand","testRule","dashPanel","payload","LoadingPlaceholder","openNodes","getNrOfOpenNodes","onToggleExpand","renderExpandCollapse","ClipboardButton","getText","getTextForClipboard","onClipboardCopy","onClipboardSuccess","JSONFormatter","json","open","onDidRender","setFormattedJson","UnConnectedAlertTab","validationMessage","showStateHistory","showDeleteConfirmation","showTestRule","_enableAlert","onToggleModal","onClickBackdrop","alert","thresholds","alertState","loadAlertTab","getReactAlertPanelCtrl","EventBusSrv","hasTransformations","buttonIcon","onAddAlert","buttonTitle","Container","EmptyListCTA","renderTestRule","renderDeleteConfirmation","renderStateHistory","AlertTab","NewRuleFromPanelButton","formValues","panelToRuleFormValues","ruleFormUrl","urlUtil","defaults","returnTo","LinkButton","href","usePanelCombinedRules","poll","promRuleRequest","promRules","initialAsyncRequestState","rulerRuleRequest","fetch","fetchPromRulesAction","dashboardUID","fetchRulerRulesAction","interval","setInterval","RULE_LIST_POLL_INTERVAL_MS","clearInterval","errors","err","combinedNamespaces","useCombinedRuleNamespaces","flatMap","ns","groups","String","newButton","innerWrapper","noRulesWrapper","permissions","getRulesPermissions","canCreateRules","PanelAlertTab","otherProps","counter","DOCS_LINKS","DocsId","TransformationEditor","debugMode","uiConfig","configs","input","setInput","output","setOutput","inputTransforms","slice","transformation","outputTransforms","inputSubscription","transformDataFrame","outputSubscription","pipe","mergeMap","before","defaultOptions","opts","debugWrapper","debug","debugTitle","debugJson","debugSeparator","debugBorder","isLight","gray85","gray15","semibold","textBlue","iconRow","xs","xxs","fontFamily","monospace","white","gray05","radius","TransformationOperationRow","showDebug","toggleDebug","useToggle","showHelp","toggleHelp","onDisableToggle","QueryOperationRow","draggable","actions","PluginStateInfo","QueryOperationAction","OperationRowHelp","markdown","prepMarkdown","help","TransformationOperationRows","standardTransformersRegistry","UnThemedTransformationsEditor","lower","filtered","indexOf","onTransformationAdd","keyCode","showPicker","stopPropagation","nextId","existingIds","startsWith","match","selectable","getTransformationNextId","from","destination","startIndex","endIndex","update","removed","onDragEnd","droppableId","direction","provided","innerRef","droppableProps","onTransformationRemove","onTransformationChange","ids","buildTransformationIds","transformationCounters","transformationIds","subscription","panelData","setTransformations","renderTransformsPicker","suffix","xforms","surface","noTransforms","grow","LocalStorageValueProvider","storageKey","isDismissed","rel","onSearchChange","onKeyDown","onSearchKeyDown","TransformationCard","hasTransforms","renderTransformationEditors","Card","card","TransformationsEditor","withTheme","PanelEditorQueries","updateQueries","onRunQueries","buildQueryOptions","default","datasourceSettings","getDatasourceSrv","getInstanceSettings","cacheTimeout","queryOptions","isDefault","queries","maxDataPoints","minInterval","timeFrom","shift","timeShift","hideTimeOverride","getDataSourceRef","QueryGroup","queryRunner","onOpenQueryInspector","PanelEditorTabs","useForceUpdate","eventSubs","Subscription","add","PanelQueriesChangedEvent","PanelTransformationsChangedEvent","tabBar","hideBorder","getCounter","renderAlertTab","TabContent","tabContent","AlertTabIndex","getTransformations","getPanelEditorTabs","memoizeOne","alertingEnabled","unifiedAlertingEnabled","getConfig","hasRuleReadPermissions","read","isAlertingAvailable","isGraph","isTimeseries","initPanelEditor","initEditPanel","initPanelState","updateEditorInitState","updatePanelEditorUIState","nextState","PANEL_EDITOR_UI_STATE_STORAGE_KEY","console","updateTimeZoneForSession","toggleTableView","notifyApp","connector","ownProps","initDone","tableViewEnabled","PanelEditorUnconnected","showSaveLibraryPanelModal","editPanel","showCategory","onBack","editview","ShowModalReactEvent","SaveDashboardProxy","getLibraryPanelConnectedDashboards","saveAndRefreshLibraryPanel","createPanelLibrarySuccessNotification","createPanelLibraryErrorNotification","statusText","updateFieldConfig","updateOptions","configKey","setProperty","mode","PanelOptionsChangedEvent","triggerForceUpdate","renderPanel","isOnlyPanel","mainPaneWrapper","renderPanelToolbar","panelWrapper","panelSize","calculatePanelSize","centeringContainer","DashboardPanel","stateKey","isEditing","isViewing","lazy","renderPanelAndEditor","panelPane","tabsWrapper","renderTemplateVariables","variablesWrapper","panelToolbar","InlineSwitch","showLabel","onToggleTableView","displayModes","onDisplayModeChange","DashNavTimeControls","onChangeTimeZone","renderEditorActions","editorActions","onOpenDashboardSettings","onSaveLibraryPanel","onSaveDashboard","ModalsController","UnlinkModal","pop","renderOptionsPane","onFieldConfigChange","onPanelConfigChanged","PageToolbar","onGoBack","onGoBackToDashboard","verticalSplitPanesWrapper","onConfirmAndDismissLibarayPanelModel","PanelEditor","zIndex","sidemenu","dashboardBg","toolbarLeft","AnnotationPicker","annotation","onEnabledChanged","setLoading","started","getStream","AnnotationQueryStarted","stopped","AnnotationQueryFinished","InlineFieldRow","InlineField","enable","indicator","LoadingIndicator","onCancel","getDashboardQueryRunner","cancel","Annotations","onAnnotationChanged","visibleAnnotations","setVisibleAnnotations","DashboardLinksDashboard","link","linkInfo","listRef","dropdownCssClass","setDropdownCssClass","opened","setOpened","resolvedLinks","useResolvedLinks","buttonStyle","useLayoutEffect","wrapperPos","parentElement","pos","getDropdownLocationCssClass","asDropdown","LinkElement","marginRight","resolvedLink","url","targetBlank","rest","tags","dependencies","limit","tag","searchForTags","getLinkSrv","sanitize","sanitizeUrl","searchHit","getLinkUrl","resolveLinks","DashboardLinks","useEffectOnce","TimeRangeUpdatedEvent","getAnchorInfo","linkElement","linkIconMap","SubMenuUnConnected","updatedAnnotation","startRefresh","isSubMenuVisible","onAnnotationStateChanged","SubMenu","templatingState","getVariablesState","getSubMenuVariables","addPanel","AddPanelWidget","addPanelView","setAddPanelView","copiedPanelPlugins","chain","copiedPanels","copiedPanelJson","LS_PANEL_COPY_KEY","copiedPanel","parse","pluginInfo","pluginCopy","sortBy","getCopiedPanelPlugins","callToAction","AddPanelWidgetHandle","evt","removePanel","LibraryPanelsSearch","panelInfo","gridPos","newPanel","toPanelModelLibraryPanel","LibraryPanelsSearchVariant","showPanelFilter","actionsWrapper","CardButton","reportInteraction","y","w","h","onCreateNewPanel","panelPluginInfo","onPasteCopiedPanel","headerRow","backButton","pulsate","canvas","main","tinycolor","darken","toHexString","noMargin","RowOptionsForm","onUpdate","newRepeat","setNewRepeat","onChangeRepeat","Form","defaultValues","onSubmit","formData","register","RowOptionsModal","modal","RowOptionsButton","onUpdateChange","DashboardRow","toggleRow","collapsed","ShowConfirmModalEvent","altActionText","removeRow","onAltAction","onVariableUpdated","classNames","count","onToggle","onDelete","cleanAndRemoveMany","DashboardGridUnconnected","newLayout","newPos","panelMap","updateGridPos","sortPanelsByGridPos","isLayoutInitialized","layout","oldItem","newItem","DashboardPanelsChangedEvent","buildLayout","log","panelPos","GRID_COLUMN_COUNT","isResizable","isDraggable","getPanelScreenPos","gridWidth","lastPanelBottom","GRID_CELL_VMARGIN","translateGridHeightToScreenHeight","renderPanels","panelElements","windowHeight","windowWidth","panelClasses","GrafanaGridItem","containerPadding","useCSSTransforms","rowHeight","GRID_CELL_HEIGHT","draggableHandle","onDragStop","onResize","onResizeStop","onLayoutChange","divProps","parseFloat","gridHeight","DashboardGrid","initDashboard","cleanUpDashboardAndVariables","cancelVariables","templateVarsChangedInUrl","UnthemedDashboardPage","getCleanState","tr","liveNow","liveTimer","updateScrollTop","scrollElement","viewPanel","showLoadingState","rememberScrollTop","panelNotFound","editPanelAccessDenied","forceRouteReloadCounter","history","routeReloadCounter","closeDashboard","queryParams","urlSlug","slug","urlUid","urlType","urlFolderId","routeName","route","fixUrl","updateLiveTimer","Branding","prevUrlParams","urlParams","to","updateTimeRangeFromUrl","setAutoRefresh","templateVarChanges","findTemplateVarChanges","dashboardWatcher","publish","PanelEditEnteredEvent","PanelEditExitedEvent","createErrorNotification","urlEditPanelId","urlViewPanelId","getPanelByUrlId","canEditPanel","scrollTop","initViewPanel","exitViewPanel","getInspectPanel","inspectPanelId","inspectPanel","getPanelById","kioskMode","getKioskMode","containerClassNames","classnames","dashboardContainer","showSubMenu","KioskMode","DashNav","folderTitle","isFullscreen","onAddPanel","hideTimePicker","timepicker","hidden","dashboardScroll","scrollRefCallback","setScrollRef","hideHorizontalTrack","updateAfterMountMs","dashboardContent","DashboardSettings","D","contentPadding","DashboardPage","withTheme2","_typeof","Symbol","iterator","exports","_react","_interopRequireDefault","_propTypes","_reactDraggable","_reactResizable","_utils","_calculateUtils","_ReactGridLayoutPropTypes","_clsx","__esModule","_objectSpread","hasNativeReflectConstruct","valueOf","GridItem","_len","args","_key","resizing","dragging","_ref","onDragStart","transformScale","offsetParent","parentRect","clientRect","cLeft","pLeft","cTop","pTop","scrollLeft","_calcXY","calcXY","getPositionParams","_ref2","deltaX","deltaY","onDrag","Error","isBounded","containerWidth","positionParams","bottomBoundary","clientHeight","calcGridItemWHPx","clamp","colWidth","calcGridColWidth","rightBoundary","_calcXY2","_ref3","_this$state$dragging","_calcXY3","callbackData","onResizeHandler","droppingPosition","oldPosition","calcGridItemPosition","fastPositionEqual","moveDroppingItem","elementRef","prevDroppingPosition","shouldDrag","maxRows","_this$props5","usePercentages","setTransform","setTopLeft","perc","child","createElement","DraggableCore","onStart","onStop","handle","scale","nodeRef","_this$props6","minW","minH","maxW","maxH","resizeHandles","resizeHandle","maxWidth","mins","maxes","minConstraints","maxConstraints","Resizable","draggableOpts","onResizeStart","_ref4","handlerName","handler","_this$props7","_this$props8","_calcWH","calcWH","_this$props9","Children","only","newChild","cloneElement","static","dropping","cssTransforms","createStyle","mixinResizable","mixinDraggable","Component","number","array","propName","string","resizeHandleAxesType","resizeHandleType","func","bool","nodeInterop","cache","_getRequireWildcardCache","newObj","hasPropertyDescriptor","hasOwnProperty","desc","set","_interopRequireWildcard","_lodash","_GridItem","WeakMap","cacheBabelInterop","cacheNodeInterop","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_slicedToArray","_arrayWithHoles","_i","_s","_e","_arr","_n","_d","done","_iterableToArrayLimit","_nonIterableRest","minLen","n","len","arr2","layoutClassName","isFirefox","navigator","userAgent","ReactGridLayout","activeDrag","synchronizeLayoutWithChildren","compactType","allowOverlap","mounted","oldDragItem","oldLayout","oldResizeItem","droppingDOMNode","l","getLayoutItem","cloneLayoutItem","preventCollision","moveElement","compact","onLayoutMaybeChanged","_ref5","_withLayoutItem","withLayoutItem","hasCollisions","collisions","getAllCollisions","layoutItem","leastX","leastY","Number","isFinite","_withLayoutItem2","_ref6","_e$nativeEvent$target","nativeEvent","classList","contains","droppingItem","onDropDragOver","onDragOverResult","removeDroppingPlaceholder","finalDroppingItem","_e$nativeEvent","layerX","layerY","_this$state$droppingP","calculatedPosition","dragEnterCounter","onDrop","newLayoutBase","propsLayout","childrenEqual","fastRGLPropsEqual","autoSize","nbRow","containerPaddingY","isDroppingItem","draggableCancel","resizable","resizeHandlesOptions","bounded","isDroppable","mergedClassName","mergedStyle","containerHeight","noop","onDragLeave","onDragEnter","onDragOver","processGridItem","verticalCompact","arrayOf","oneOf","oneOfType","_default","any","_responsiveUtils","_ReactGridLayout","_excluded","_extends","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","getIndentationValue","param","breakpoint","ResponsiveReactGridLayout","generateInitialState","layouts","_cols","findOrGenerateResponsiveLayout","getBreakpointFromWidth","colNo","getColsFromBreakpoint","onWidthChange","newBreakpoint","lastBreakpoint","newCols","newLayouts","cloneLayout","onBreakpointChange","other","validateLayout","gridUnits","colOrRowSize","marginPx","round","num","lowerBound","upperBound","out","ComposedComponent","_class","WidthProvider","HTMLElement","offsetWidth","onWindowResize","measureBeforeMount","module","isEqualImpl","breakpointsSorted","sortBreakpoints","breakpointsAbove","correctBounds","sorted","matching","breakpointName","collides","compactItem","getFirstCollision","getStatics","modifyLayout","moveElementAwayFromCollision","translate","WebkitTransform","MozTransform","msTransform","OTransform","sortLayoutItems","sortLayoutItemsByColRow","sortLayoutItemsByRowCol","initialLayout","exists","g","_grid","correctedLayout","itemKey","cb","bottomY","moved","l1","l2","compareWith","heightWidth","resolveCompactionCollision","moveToCoord","axis","sizeProp","otherItem","fullLayout","compactH","bounds","collidesWith","isUserAction","oldX","oldY","reverse","collision","itemToMove","compactV","fakeItem","contextName","subProps","j","utils","Responsive","handleRefs","lastHandleRect","slack","_proto","resetData","runConstraints","lockAspectRatio","ratio","deltaW","deltaH","oldW","oldH","slackW","slackH","resizeHandler","canDragX","canDragY","axisV","axisH","handleRect","_this2$runConstraints","dimensionsChanged","persist","renderResizeHandle","handleAxis","_this3","handleSize","_this3$handleRefs$han","resizableProps","_Resizable","_propTypes2","ResizableBox","propsWidth","propsHeight","getDerivedStateFromProps","allowAnyClick","enableUserSelectHack","HASH_UNDEFINED","MAX_SAFE_INTEGER","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","reIsHostCtor","reIsUint","typedArrayTags","freeGlobal","freeSelf","root","Function","freeExports","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","binding","nodeIsTypedArray","isTypedArray","arraySome","predicate","mapToArray","setToArray","arrayProto","funcProto","objectProto","coreJsData","funcToString","maskSrcKey","exec","IE_PROTO","nativeObjectToString","reIsNative","Buffer","Uint8Array","symToStringTag","toStringTag","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeKeys","arg","DataView","getNative","Map","Promise","Set","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","Hash","clear","entry","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","iteratee","baseTimes","isIndex","assocIndexOf","eq","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseIsArguments","isObjectLike","baseIsEqual","bitmask","customizer","stack","equalFunc","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","byteLength","byteOffset","buffer","convert","isPartial","stacked","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","getAllKeys","objLength","othLength","skipCtor","objValue","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsNative","isObject","isMasked","isFunction","baseKeys","Ctor","proto","arrLength","seen","arrValue","othIndex","keysFunc","symbolsFunc","offset","arrayPush","baseGetAllKeys","getSymbols","getMapData","getValue","pairs","LARGE_ARRAY_SIZE","resIndex","arrayFilter","symbol","ArrayBuffer","resolve","ctorString","isLength","baseUnary","PropTypes","componentName","failures","styleKey","supportingArrays"],"sourceRoot":""}